@effect-tui/react 0.1.3 → 0.1.4
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/dist/jsx-runtime.d.ts +13 -0
- package/dist/jsx-runtime.d.ts.map +1 -1
- package/dist/jsx-runtime.js.map +1 -1
- package/dist/src/codeblock.d.ts.map +1 -1
- package/dist/src/codeblock.js.map +1 -1
- package/dist/src/components/Divider.d.ts +18 -0
- package/dist/src/components/Divider.d.ts.map +1 -0
- package/dist/src/components/Divider.js +17 -0
- package/dist/src/components/Divider.js.map +1 -0
- package/dist/src/components/Markdown.d.ts +66 -0
- package/dist/src/components/Markdown.d.ts.map +1 -0
- package/dist/src/components/Markdown.js +226 -0
- package/dist/src/components/Markdown.js.map +1 -0
- package/dist/src/components/MultilineTextInput.d.ts +65 -0
- package/dist/src/components/MultilineTextInput.d.ts.map +1 -0
- package/dist/src/components/MultilineTextInput.js +607 -0
- package/dist/src/components/MultilineTextInput.js.map +1 -0
- package/dist/src/components/Overlay.d.ts +46 -0
- package/dist/src/components/Overlay.d.ts.map +1 -0
- package/dist/src/components/Overlay.js +11 -0
- package/dist/src/components/Overlay.js.map +1 -0
- package/dist/src/components/Static.d.ts +44 -0
- package/dist/src/components/Static.d.ts.map +1 -0
- package/dist/src/components/Static.js +53 -0
- package/dist/src/components/Static.js.map +1 -0
- package/dist/src/components/TextInput.d.ts +53 -0
- package/dist/src/components/TextInput.d.ts.map +1 -0
- package/dist/src/components/TextInput.js +210 -0
- package/dist/src/components/TextInput.js.map +1 -0
- package/dist/src/components/index.d.ts +7 -0
- package/dist/src/components/index.d.ts.map +1 -0
- package/dist/src/components/index.js +7 -0
- package/dist/src/components/index.js.map +1 -0
- package/dist/src/components/text-editing.d.ts +62 -0
- package/dist/src/components/text-editing.d.ts.map +1 -0
- package/dist/src/components/text-editing.js +385 -0
- package/dist/src/components/text-editing.js.map +1 -0
- package/dist/src/console/ConsoleCapture.d.ts +36 -0
- package/dist/src/console/ConsoleCapture.d.ts.map +1 -0
- package/dist/src/console/ConsoleCapture.js +210 -0
- package/dist/src/console/ConsoleCapture.js.map +1 -0
- package/dist/src/console/ConsolePopover.d.ts +18 -0
- package/dist/src/console/ConsolePopover.d.ts.map +1 -0
- package/dist/src/console/ConsolePopover.js +324 -0
- package/dist/src/console/ConsolePopover.js.map +1 -0
- package/dist/src/console/clipboard.d.ts +10 -0
- package/dist/src/console/clipboard.d.ts.map +1 -0
- package/dist/src/console/clipboard.js +74 -0
- package/dist/src/console/clipboard.js.map +1 -0
- package/dist/src/console/index.d.ts +5 -0
- package/dist/src/console/index.d.ts.map +1 -0
- package/dist/src/console/index.js +33 -0
- package/dist/src/console/index.js.map +1 -0
- package/dist/src/console/useConsole.d.ts +44 -0
- package/dist/src/console/useConsole.d.ts.map +1 -0
- package/dist/src/console/useConsole.js +91 -0
- package/dist/src/console/useConsole.js.map +1 -0
- package/dist/src/debug/DebugOverlay.d.ts +49 -0
- package/dist/src/debug/DebugOverlay.d.ts.map +1 -0
- package/dist/src/debug/DebugOverlay.js +438 -0
- package/dist/src/debug/DebugOverlay.js.map +1 -0
- package/dist/src/debug/DiagnosticsPanel.d.ts.map +1 -1
- package/dist/src/debug/DiagnosticsPanel.js.map +1 -1
- package/dist/src/dev/Toast.d.ts +19 -0
- package/dist/src/dev/Toast.d.ts.map +1 -0
- package/dist/src/dev/Toast.js +72 -0
- package/dist/src/dev/Toast.js.map +1 -0
- package/dist/src/dev/index.d.ts +2 -0
- package/dist/src/dev/index.d.ts.map +1 -0
- package/dist/src/dev/index.js +3 -0
- package/dist/src/dev/index.js.map +1 -0
- package/dist/src/dev.d.ts +114 -0
- package/dist/src/dev.d.ts.map +1 -0
- package/dist/src/dev.js +373 -0
- package/dist/src/dev.js.map +1 -0
- package/dist/src/highlight.d.ts +3 -3
- package/dist/src/highlight.d.ts.map +1 -1
- package/dist/src/highlight.js.map +1 -1
- package/dist/src/hmr-plugin.d.ts +2 -0
- package/dist/src/hmr-plugin.d.ts.map +1 -0
- package/dist/src/hmr-plugin.js +53 -0
- package/dist/src/hmr-plugin.js.map +1 -0
- package/dist/src/hooks/index.d.ts +4 -0
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +2 -0
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/use-keyboard.d.ts +11 -0
- package/dist/src/hooks/use-keyboard.d.ts.map +1 -1
- package/dist/src/hooks/use-keyboard.js +22 -4
- package/dist/src/hooks/use-keyboard.js.map +1 -1
- package/dist/src/hooks/use-mouse.d.ts +24 -0
- package/dist/src/hooks/use-mouse.d.ts.map +1 -0
- package/dist/src/hooks/use-mouse.js +41 -0
- package/dist/src/hooks/use-mouse.js.map +1 -0
- package/dist/src/hooks/use-paste.d.ts +11 -0
- package/dist/src/hooks/use-paste.d.ts.map +1 -1
- package/dist/src/hooks/use-paste.js +17 -3
- package/dist/src/hooks/use-paste.js.map +1 -1
- package/dist/src/hooks/use-scroll.d.ts +79 -0
- package/dist/src/hooks/use-scroll.d.ts.map +1 -0
- package/dist/src/hooks/use-scroll.js +239 -0
- package/dist/src/hooks/use-scroll.js.map +1 -0
- package/dist/src/hooks/useFrameStats.js.map +1 -1
- package/dist/src/hosts/base.d.ts +62 -1
- package/dist/src/hosts/base.d.ts.map +1 -1
- package/dist/src/hosts/base.js +118 -5
- package/dist/src/hosts/base.js.map +1 -1
- package/dist/src/hosts/box.d.ts +7 -7
- package/dist/src/hosts/box.d.ts.map +1 -1
- package/dist/src/hosts/box.js +30 -23
- package/dist/src/hosts/box.js.map +1 -1
- package/dist/src/hosts/canvas.d.ts +8 -8
- package/dist/src/hosts/canvas.d.ts.map +1 -1
- package/dist/src/hosts/canvas.js +13 -22
- package/dist/src/hosts/canvas.js.map +1 -1
- package/dist/src/hosts/codeblock.d.ts +7 -7
- package/dist/src/hosts/codeblock.d.ts.map +1 -1
- package/dist/src/hosts/codeblock.js +11 -20
- package/dist/src/hosts/codeblock.js.map +1 -1
- package/dist/src/hosts/flex-container.d.ts +45 -0
- package/dist/src/hosts/flex-container.d.ts.map +1 -0
- package/dist/src/hosts/flex-container.js +90 -0
- package/dist/src/hosts/flex-container.js.map +1 -0
- package/dist/src/hosts/hstack.d.ts +6 -11
- package/dist/src/hosts/hstack.d.ts.map +1 -1
- package/dist/src/hosts/hstack.js +6 -41
- package/dist/src/hosts/hstack.js.map +1 -1
- package/dist/src/hosts/index.d.ts +4 -0
- package/dist/src/hosts/index.d.ts.map +1 -1
- package/dist/src/hosts/index.js +10 -0
- package/dist/src/hosts/index.js.map +1 -1
- package/dist/src/hosts/overlay-item.d.ts +32 -0
- package/dist/src/hosts/overlay-item.d.ts.map +1 -0
- package/dist/src/hosts/overlay-item.js +54 -0
- package/dist/src/hosts/overlay-item.js.map +1 -0
- package/dist/src/hosts/overlay.d.ts +30 -0
- package/dist/src/hosts/overlay.d.ts.map +1 -0
- package/dist/src/hosts/overlay.js +105 -0
- package/dist/src/hosts/overlay.js.map +1 -0
- package/dist/src/hosts/scroll.d.ts +56 -0
- package/dist/src/hosts/scroll.d.ts.map +1 -0
- package/dist/src/hosts/scroll.js +204 -0
- package/dist/src/hosts/scroll.js.map +1 -0
- package/dist/src/hosts/single-child.d.ts +16 -0
- package/dist/src/hosts/single-child.d.ts.map +1 -0
- package/dist/src/hosts/single-child.js +45 -0
- package/dist/src/hosts/single-child.js.map +1 -0
- package/dist/src/hosts/spacer.d.ts.map +1 -1
- package/dist/src/hosts/spacer.js +7 -3
- package/dist/src/hosts/spacer.js.map +1 -1
- package/dist/src/hosts/text.d.ts +9 -6
- package/dist/src/hosts/text.d.ts.map +1 -1
- package/dist/src/hosts/text.js +49 -22
- package/dist/src/hosts/text.js.map +1 -1
- package/dist/src/hosts/vstack.d.ts +6 -11
- package/dist/src/hosts/vstack.d.ts.map +1 -1
- package/dist/src/hosts/vstack.js +6 -41
- package/dist/src/hosts/vstack.js.map +1 -1
- package/dist/src/hosts/zstack.d.ts.map +1 -1
- package/dist/src/hosts/zstack.js +16 -5
- package/dist/src/hosts/zstack.js.map +1 -1
- package/dist/src/index.d.ts +9 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/inline/index.d.ts.map +1 -1
- package/dist/src/inline/index.js.map +1 -1
- package/dist/src/motion/color-motion-value.d.ts.map +1 -1
- package/dist/src/motion/color-motion-value.js.map +1 -1
- package/dist/src/motion/color.d.ts +1 -29
- package/dist/src/motion/color.d.ts.map +1 -1
- package/dist/src/motion/color.js +2 -170
- package/dist/src/motion/color.js.map +1 -1
- package/dist/src/motion/color.test.js.map +1 -1
- package/dist/src/motion/event-emitter.d.ts.map +1 -1
- package/dist/src/motion/event-emitter.js.map +1 -1
- package/dist/src/motion/frame.js.map +1 -1
- package/dist/src/motion/hooks.d.ts.map +1 -1
- package/dist/src/motion/hooks.js +8 -3
- package/dist/src/motion/hooks.js.map +1 -1
- package/dist/src/motion/index.d.ts.map +1 -1
- package/dist/src/motion/index.js.map +1 -1
- package/dist/src/motion/motion-value.d.ts.map +1 -1
- package/dist/src/motion/motion-value.js.map +1 -1
- package/dist/src/motion/motion-value.test.js.map +1 -1
- package/dist/src/motion/spring-math.d.ts +6 -1
- package/dist/src/motion/spring-math.d.ts.map +1 -1
- package/dist/src/motion/spring-math.js +6 -1
- package/dist/src/motion/spring-math.js.map +1 -1
- package/dist/src/motion/types.d.ts.map +1 -1
- package/dist/src/motion/types.js.map +1 -1
- package/dist/src/profiler.js.map +1 -1
- package/dist/src/reconciler/host-config.d.ts +5 -5
- package/dist/src/reconciler/host-config.d.ts.map +1 -1
- package/dist/src/reconciler/host-config.js +43 -51
- package/dist/src/reconciler/host-config.js.map +1 -1
- package/dist/src/reconciler/noop-methods.d.ts +29 -0
- package/dist/src/reconciler/noop-methods.d.ts.map +1 -0
- package/dist/src/reconciler/noop-methods.js +43 -0
- package/dist/src/reconciler/noop-methods.js.map +1 -0
- package/dist/src/reconciler/types.d.ts +68 -14
- package/dist/src/reconciler/types.d.ts.map +1 -1
- package/dist/src/remote/Procedures.d.ts +22 -0
- package/dist/src/remote/Procedures.d.ts.map +1 -0
- package/dist/src/remote/Procedures.js +42 -0
- package/dist/src/remote/Procedures.js.map +1 -0
- package/dist/src/remote/Router.d.ts +20 -0
- package/dist/src/remote/Router.d.ts.map +1 -0
- package/dist/src/remote/Router.js +26 -0
- package/dist/src/remote/Router.js.map +1 -0
- package/dist/src/remote/Server.d.ts +6 -0
- package/dist/src/remote/Server.d.ts.map +1 -0
- package/dist/src/remote/Server.js +53 -0
- package/dist/src/remote/Server.js.map +1 -0
- package/dist/src/remote/index.d.ts +18 -0
- package/dist/src/remote/index.d.ts.map +1 -0
- package/dist/src/remote/index.js +74 -0
- package/dist/src/remote/index.js.map +1 -0
- package/dist/src/renderer/core/FrameBuilder.d.ts +18 -0
- package/dist/src/renderer/core/FrameBuilder.d.ts.map +1 -0
- package/dist/src/renderer/core/FrameBuilder.js +38 -0
- package/dist/src/renderer/core/FrameBuilder.js.map +1 -0
- package/dist/src/renderer/core/RendererState.d.ts +41 -0
- package/dist/src/renderer/core/RendererState.d.ts.map +1 -0
- package/dist/src/renderer/core/RendererState.js +70 -0
- package/dist/src/renderer/core/RendererState.js.map +1 -0
- package/dist/src/renderer/core/index.d.ts +3 -0
- package/dist/src/renderer/core/index.d.ts.map +1 -0
- package/dist/src/renderer/core/index.js +3 -0
- package/dist/src/renderer/core/index.js.map +1 -0
- package/dist/src/renderer/input/InputProcessor.d.ts +25 -0
- package/dist/src/renderer/input/InputProcessor.d.ts.map +1 -0
- package/dist/src/renderer/input/InputProcessor.js +81 -0
- package/dist/src/renderer/input/InputProcessor.js.map +1 -0
- package/dist/src/renderer/input/index.d.ts +2 -0
- package/dist/src/renderer/input/index.d.ts.map +1 -0
- package/dist/src/renderer/input/index.js +2 -0
- package/dist/src/renderer/input/index.js.map +1 -0
- package/dist/src/renderer/lifecycle/EventBus.d.ts +41 -0
- package/dist/src/renderer/lifecycle/EventBus.d.ts.map +1 -0
- package/dist/src/renderer/lifecycle/EventBus.js +78 -0
- package/dist/src/renderer/lifecycle/EventBus.js.map +1 -0
- package/dist/src/renderer/lifecycle/ResizeManager.d.ts +34 -0
- package/dist/src/renderer/lifecycle/ResizeManager.d.ts.map +1 -0
- package/dist/src/renderer/lifecycle/ResizeManager.js +47 -0
- package/dist/src/renderer/lifecycle/ResizeManager.js.map +1 -0
- package/dist/src/renderer/lifecycle/TerminalSetup.d.ts +36 -0
- package/dist/src/renderer/lifecycle/TerminalSetup.d.ts.map +1 -0
- package/dist/src/renderer/lifecycle/TerminalSetup.js +82 -0
- package/dist/src/renderer/lifecycle/TerminalSetup.js.map +1 -0
- package/dist/src/renderer/lifecycle/index.d.ts +4 -0
- package/dist/src/renderer/lifecycle/index.d.ts.map +1 -0
- package/dist/src/renderer/lifecycle/index.js +4 -0
- package/dist/src/renderer/lifecycle/index.js.map +1 -0
- package/dist/src/renderer/modes/FullscreenRenderer.d.ts +12 -0
- package/dist/src/renderer/modes/FullscreenRenderer.d.ts.map +1 -0
- package/dist/src/renderer/modes/FullscreenRenderer.js +52 -0
- package/dist/src/renderer/modes/FullscreenRenderer.js.map +1 -0
- package/dist/src/renderer/modes/InlineRenderer.d.ts +22 -0
- package/dist/src/renderer/modes/InlineRenderer.d.ts.map +1 -0
- package/dist/src/renderer/modes/InlineRenderer.js +154 -0
- package/dist/src/renderer/modes/InlineRenderer.js.map +1 -0
- package/dist/src/renderer/modes/RendererMode.d.ts +42 -0
- package/dist/src/renderer/modes/RendererMode.d.ts.map +1 -0
- package/dist/src/renderer/modes/RendererMode.js +2 -0
- package/dist/src/renderer/modes/RendererMode.js.map +1 -0
- package/dist/src/renderer/modes/StaticContentRenderer.d.ts +25 -0
- package/dist/src/renderer/modes/StaticContentRenderer.d.ts.map +1 -0
- package/dist/src/renderer/modes/StaticContentRenderer.js +47 -0
- package/dist/src/renderer/modes/StaticContentRenderer.js.map +1 -0
- package/dist/src/renderer/modes/index.d.ts +5 -0
- package/dist/src/renderer/modes/index.d.ts.map +1 -0
- package/dist/src/renderer/modes/index.js +4 -0
- package/dist/src/renderer/modes/index.js.map +1 -0
- package/dist/src/renderer-context.d.ts +9 -0
- package/dist/src/renderer-context.d.ts.map +1 -0
- package/dist/src/renderer-context.js +22 -0
- package/dist/src/renderer-context.js.map +1 -0
- package/dist/src/renderer-types.d.ts +103 -0
- package/dist/src/renderer-types.d.ts.map +1 -0
- package/dist/src/renderer-types.js +2 -0
- package/dist/src/renderer-types.js.map +1 -0
- package/dist/src/renderer.d.ts +4 -86
- package/dist/src/renderer.d.ts.map +1 -1
- package/dist/src/renderer.js +213 -384
- package/dist/src/renderer.js.map +1 -1
- package/dist/src/test/index.d.ts.map +1 -1
- package/dist/src/test/index.js.map +1 -1
- package/dist/src/test/mock-streams.d.ts.map +1 -1
- package/dist/src/test/mock-streams.js.map +1 -1
- package/dist/src/test/render-tui.d.ts.map +1 -1
- package/dist/src/test/render-tui.js +2 -5
- package/dist/src/test/render-tui.js.map +1 -1
- package/dist/src/trace/SpanTree.d.ts.map +1 -1
- package/dist/src/trace/SpanTree.js +21 -11
- package/dist/src/trace/SpanTree.js.map +1 -1
- package/dist/src/trace/format-value.d.ts +15 -0
- package/dist/src/trace/format-value.d.ts.map +1 -0
- package/dist/src/trace/format-value.js +77 -0
- package/dist/src/trace/format-value.js.map +1 -0
- package/dist/src/trace/index.d.ts.map +1 -1
- package/dist/src/trace/index.js.map +1 -1
- package/dist/src/trace/location.js +1 -1
- package/dist/src/trace/location.js.map +1 -1
- package/dist/src/trace/span-processor.d.ts.map +1 -1
- package/dist/src/trace/span-processor.js.map +1 -1
- package/dist/src/trace/span-state.d.ts +19 -2
- package/dist/src/trace/span-state.d.ts.map +1 -1
- package/dist/src/trace/span-state.js +62 -31
- package/dist/src/trace/span-state.js.map +1 -1
- package/dist/src/trace/tui-logger.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 +6 -0
- package/dist/src/utils/border.js.map +1 -1
- package/dist/src/utils/flex-layout.d.ts +2 -1
- package/dist/src/utils/flex-layout.d.ts.map +1 -1
- package/dist/src/utils/flex-layout.js +22 -33
- package/dist/src/utils/flex-layout.js.map +1 -1
- package/dist/src/utils/index.d.ts +1 -1
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +1 -1
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/padding.d.ts.map +1 -1
- package/dist/src/utils/padding.js.map +1 -1
- package/dist/src/utils/styles.d.ts +20 -1
- package/dist/src/utils/styles.d.ts.map +1 -1
- package/dist/src/utils/styles.js +36 -1
- package/dist/src/utils/styles.js.map +1 -1
- package/dist/src/visualize/index.d.ts +8 -19
- package/dist/src/visualize/index.d.ts.map +1 -1
- package/dist/src/visualize/index.js +11 -25
- package/dist/src/visualize/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/jsx-dev-runtime.ts +5 -0
- package/jsx-runtime.ts +54 -0
- package/package.json +124 -92
- package/src/codeblock.tsx +34 -34
- package/src/components/Divider.tsx +23 -0
- package/src/components/Markdown.tsx +380 -0
- package/src/components/MultilineTextInput.tsx +749 -0
- package/src/components/Overlay.tsx +56 -0
- package/src/components/Static.tsx +68 -0
- package/src/components/TextInput.tsx +285 -0
- package/src/components/index.ts +6 -0
- package/src/components/text-editing.ts +464 -0
- package/src/console/ConsoleCapture.ts +272 -0
- package/src/console/ConsolePopover.tsx +487 -0
- package/src/console/clipboard.ts +81 -0
- package/src/console/index.ts +42 -0
- package/src/console/useConsole.ts +129 -0
- package/src/debug/DebugOverlay.ts +557 -0
- package/src/debug/DiagnosticsPanel.tsx +27 -27
- package/src/dev/Toast.tsx +117 -0
- package/src/dev/index.ts +2 -0
- package/src/dev.tsx +489 -0
- package/src/highlight.ts +46 -46
- package/src/hmr-plugin.ts +61 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/use-keyboard.ts +44 -24
- package/src/hooks/use-mouse.ts +51 -0
- package/src/hooks/use-paste.ts +21 -6
- package/src/hooks/use-scroll.ts +386 -0
- package/src/hooks/useFrameStats.ts +17 -17
- package/src/hosts/base.ts +180 -59
- package/src/hosts/box.ts +117 -94
- package/src/hosts/canvas.ts +137 -141
- package/src/hosts/codeblock.ts +117 -133
- package/src/hosts/flex-container.ts +124 -0
- package/src/hosts/hstack.ts +11 -59
- package/src/hosts/index.ts +24 -14
- package/src/hosts/overlay-item.ts +72 -0
- package/src/hosts/overlay.ts +125 -0
- package/src/hosts/scroll.ts +255 -0
- package/src/hosts/single-child.ts +52 -0
- package/src/hosts/spacer.ts +30 -26
- package/src/hosts/text.ts +198 -164
- package/src/hosts/vstack.ts +11 -59
- package/src/hosts/zstack.ts +79 -67
- package/src/index.ts +44 -19
- package/src/inline/index.tsx +123 -123
- package/src/motion/color-motion-value.ts +67 -67
- package/src/motion/color.test.ts +107 -107
- package/src/motion/color.ts +9 -190
- package/src/motion/event-emitter.ts +20 -20
- package/src/motion/frame.ts +35 -35
- package/src/motion/hooks.ts +144 -139
- package/src/motion/index.ts +10 -10
- package/src/motion/motion-value.test.ts +207 -207
- package/src/motion/motion-value.ts +112 -112
- package/src/motion/spring-math.ts +88 -83
- package/src/motion/types.ts +25 -25
- package/src/profiler.ts +50 -50
- package/src/reconciler/host-config.ts +152 -174
- package/src/reconciler/noop-methods.ts +55 -0
- package/src/reconciler/types.ts +112 -46
- package/src/remote/Procedures.ts +52 -0
- package/src/remote/Router.ts +58 -0
- package/src/remote/Server.ts +76 -0
- package/src/remote/index.ts +90 -0
- package/src/renderer/core/FrameBuilder.ts +49 -0
- package/src/renderer/core/RendererState.ts +80 -0
- package/src/renderer/core/index.ts +2 -0
- package/src/renderer/input/InputProcessor.ts +94 -0
- package/src/renderer/input/index.ts +1 -0
- package/src/renderer/lifecycle/EventBus.ts +90 -0
- package/src/renderer/lifecycle/ResizeManager.ts +65 -0
- package/src/renderer/lifecycle/TerminalSetup.ts +105 -0
- package/src/renderer/lifecycle/index.ts +3 -0
- package/src/renderer/modes/FullscreenRenderer.ts +53 -0
- package/src/renderer/modes/InlineRenderer.ts +178 -0
- package/src/renderer/modes/RendererMode.ts +46 -0
- package/src/renderer/modes/StaticContentRenderer.ts +56 -0
- package/src/renderer/modes/index.ts +4 -0
- package/src/renderer-context.ts +27 -0
- package/src/renderer-types.ts +109 -0
- package/src/renderer.ts +391 -642
- package/src/test/index.ts +5 -5
- package/src/test/mock-streams.ts +115 -115
- package/src/test/render-tui.ts +84 -87
- package/src/utils/border.ts +79 -73
- package/src/utils/flex-layout.ts +80 -93
- package/src/utils/index.ts +1 -1
- package/src/utils/padding.ts +27 -27
- package/src/utils/styles.ts +50 -7
- package/src/visualize/index.tsx +225 -240
- package/dist/src/output.d.ts +0 -47
- package/dist/src/output.d.ts.map +0 -1
- package/dist/src/output.js +0 -125
- package/dist/src/output.js.map +0 -1
- package/dist/src/terminal.d.ts +0 -37
- package/dist/src/terminal.d.ts.map +0 -1
- package/dist/src/terminal.js +0 -65
- package/dist/src/terminal.js.map +0 -1
- package/src/output.ts +0 -156
- package/src/terminal.ts +0 -67
- package/src/trace/SpanTree.tsx +0 -195
- package/src/trace/index.tsx +0 -205
- package/src/trace/location.ts +0 -90
- package/src/trace/span-processor.ts +0 -65
- package/src/trace/span-state.ts +0 -286
- package/src/trace/tui-logger.ts +0 -72
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { CellBuffer, Palette, Color } from "@effect-tui/core";
|
|
2
|
+
import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js";
|
|
3
|
+
import { BaseHost } from "./base.js";
|
|
4
|
+
import { type FlexAxis } from "../utils/index.js";
|
|
5
|
+
export type CrossAlignment<A extends FlexAxis> = A extends "vertical" ? "leading" | "center" | "trailing" : "top" | "center" | "bottom";
|
|
6
|
+
export interface FlexContainerProps<A extends FlexAxis> extends CommonProps {
|
|
7
|
+
spacing?: number;
|
|
8
|
+
alignment?: CrossAlignment<A>;
|
|
9
|
+
/** Background color to fill the entire container rect */
|
|
10
|
+
bg?: Color;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* FlexContainerHost is a generic linear layout container.
|
|
14
|
+
* VStackHost and HStackHost extend this with their axis-specific defaults.
|
|
15
|
+
*/
|
|
16
|
+
export declare class FlexContainerHost<A extends FlexAxis> extends BaseHost {
|
|
17
|
+
protected readonly axis: A;
|
|
18
|
+
spacing: number;
|
|
19
|
+
alignment: CrossAlignment<A>;
|
|
20
|
+
bg?: Color;
|
|
21
|
+
private cachedSizes;
|
|
22
|
+
private layoutChildren;
|
|
23
|
+
constructor(axis: A, elementType: string, props: FlexContainerProps<A>, ctx: HostContext, defaultAlignment: CrossAlignment<A>);
|
|
24
|
+
/** Get children excluding __static nodes (which are rendered separately) */
|
|
25
|
+
private getNonStaticChildren;
|
|
26
|
+
/**
|
|
27
|
+
* Measure this container's size given parent's proposed constraints.
|
|
28
|
+
*
|
|
29
|
+
* Frame constraints are applied in two places:
|
|
30
|
+
* 1. constrainProposal() - limits what we tell children is available
|
|
31
|
+
* 2. constrainResult() - limits what we report back to parent
|
|
32
|
+
*
|
|
33
|
+
* This enables patterns like:
|
|
34
|
+
* ```tsx
|
|
35
|
+
* <vstack height={10}> // Reports 10, proposes 10 to children
|
|
36
|
+
* <scroll>...</scroll> // Greedy, but only gets 10
|
|
37
|
+
* </vstack>
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
measure(maxW: number, maxH: number): Size;
|
|
41
|
+
layout(rect: Rect): void;
|
|
42
|
+
render(buffer: CellBuffer, palette: Palette): void;
|
|
43
|
+
updateProps(props: Record<string, unknown>): void;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=flex-container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flex-container.d.ts","sourceRoot":"","sources":["../../../src/hosts/flex-container.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAA2B,KAAK,QAAQ,EAAsC,MAAM,mBAAmB,CAAA;AAE9G,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,SAAS,UAAU,GAClE,SAAS,GAAG,QAAQ,GAAG,UAAU,GACjC,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE9B,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,QAAQ,CAAE,SAAQ,WAAW;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;IAC7B,yDAAyD;IACzD,EAAE,CAAC,EAAE,KAAK,CAAA;CACV;AAYD;;;GAGG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,QAAQ,CAAE,SAAQ,QAAQ;IAQjE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAP3B,OAAO,SAAI;IACX,SAAS,EAAG,cAAc,CAAC,CAAC,CAAC,CAAA;IAC7B,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,cAAc,CAA2B;gBAG7B,IAAI,EAAE,CAAC,EAC1B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC5B,GAAG,EAAE,WAAW,EAChB,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;IAOpC,4EAA4E;IAC5E,OAAO,CAAC,oBAAoB;IAI5B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAchC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAcjC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAgBzC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAS1D"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { splitConstraints } from "@effect-tui/core";
|
|
2
|
+
import { BaseHost } from "./base.js";
|
|
3
|
+
import { measureFlex, layoutFlex, resolveBgStyle } from "../utils/index.js";
|
|
4
|
+
// Map alignment names to generic flex alignment
|
|
5
|
+
function toFlexAlignment(axis, alignment) {
|
|
6
|
+
if (alignment === "center")
|
|
7
|
+
return "center";
|
|
8
|
+
if (axis === "vertical") {
|
|
9
|
+
return alignment === "leading" ? "start" : "end";
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return alignment === "top" ? "start" : "end";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* FlexContainerHost is a generic linear layout container.
|
|
17
|
+
* VStackHost and HStackHost extend this with their axis-specific defaults.
|
|
18
|
+
*/
|
|
19
|
+
export class FlexContainerHost extends BaseHost {
|
|
20
|
+
axis;
|
|
21
|
+
spacing = 0;
|
|
22
|
+
alignment; // Set in constructor before updateProps
|
|
23
|
+
bg;
|
|
24
|
+
cachedSizes = [];
|
|
25
|
+
layoutChildren = [];
|
|
26
|
+
constructor(axis, elementType, props, ctx, defaultAlignment) {
|
|
27
|
+
super(elementType, props, ctx);
|
|
28
|
+
this.axis = axis;
|
|
29
|
+
this.alignment = defaultAlignment;
|
|
30
|
+
this.updateProps(props);
|
|
31
|
+
}
|
|
32
|
+
/** Get children excluding __static nodes (which are rendered separately) */
|
|
33
|
+
getNonStaticChildren() {
|
|
34
|
+
return this.children.filter((c) => !c.__static);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Measure this container's size given parent's proposed constraints.
|
|
38
|
+
*
|
|
39
|
+
* Frame constraints are applied in two places:
|
|
40
|
+
* 1. constrainProposal() - limits what we tell children is available
|
|
41
|
+
* 2. constrainResult() - limits what we report back to parent
|
|
42
|
+
*
|
|
43
|
+
* This enables patterns like:
|
|
44
|
+
* ```tsx
|
|
45
|
+
* <vstack height={10}> // Reports 10, proposes 10 to children
|
|
46
|
+
* <scroll>...</scroll> // Greedy, but only gets 10
|
|
47
|
+
* </vstack>
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
measure(maxW, maxH) {
|
|
51
|
+
// Apply frame constraints to what we propose to children
|
|
52
|
+
const constrained = this.constrainProposal(maxW, maxH);
|
|
53
|
+
// Exclude __static children from normal layout - they're rendered to scrollback separately
|
|
54
|
+
this.layoutChildren = this.getNonStaticChildren();
|
|
55
|
+
const [maxMain, maxCross] = splitConstraints(this.axis, constrained.w, constrained.h);
|
|
56
|
+
const result = measureFlex(this.axis, this.layoutChildren, this.spacing, maxMain, maxCross);
|
|
57
|
+
this.cachedSizes = result.sizes;
|
|
58
|
+
// Apply frame constraints to what we report to parent
|
|
59
|
+
return this.constrainResult(result.totalSize);
|
|
60
|
+
}
|
|
61
|
+
layout(rect) {
|
|
62
|
+
super.layout(rect);
|
|
63
|
+
const stretchCross = this.axis === "vertical" ? this.alignment === "leading" : this.alignment === "top";
|
|
64
|
+
layoutFlex(this.axis, this.layoutChildren, this.cachedSizes, rect, this.spacing, toFlexAlignment(this.axis, this.alignment), stretchCross);
|
|
65
|
+
}
|
|
66
|
+
render(buffer, palette) {
|
|
67
|
+
// Fill background color if set
|
|
68
|
+
if (this.bg && this.rect) {
|
|
69
|
+
const { styleId } = resolveBgStyle(palette, this.bg);
|
|
70
|
+
buffer.fillRect(this.rect.x, this.rect.y, this.rect.w, this.rect.h, 32, styleId);
|
|
71
|
+
}
|
|
72
|
+
// Only render non-static children to buffer (static content goes to scrollback)
|
|
73
|
+
// Check __static at render time (not just measure time) to avoid race with React commit
|
|
74
|
+
for (const child of this.layoutChildren) {
|
|
75
|
+
if (!child.__static) {
|
|
76
|
+
child.render(buffer, palette);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
updateProps(props) {
|
|
81
|
+
super.updateProps(props);
|
|
82
|
+
this.spacing = props.spacing ?? 0;
|
|
83
|
+
// Reset to axis-specific default when undefined
|
|
84
|
+
this.alignment =
|
|
85
|
+
props.alignment ??
|
|
86
|
+
(this.axis === "vertical" ? "leading" : "top");
|
|
87
|
+
this.bg = props.bg;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=flex-container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flex-container.js","sourceRoot":"","sources":["../../../src/hosts/flex-container.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
3
|
-
import { BaseHost } from "./base.js";
|
|
1
|
+
import type { HostContext, CommonProps } from "../reconciler/types.js";
|
|
2
|
+
import { FlexContainerHost } from "./flex-container.js";
|
|
4
3
|
export interface HStackProps extends CommonProps {
|
|
5
4
|
spacing?: number;
|
|
6
5
|
alignment?: "top" | "center" | "bottom";
|
|
7
6
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
/**
|
|
8
|
+
* HStackHost lays out children horizontally with optional spacing and cross-axis alignment.
|
|
9
|
+
*/
|
|
10
|
+
export declare class HStackHost extends FlexContainerHost<"horizontal"> {
|
|
12
11
|
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
12
|
}
|
|
18
13
|
//# sourceMappingURL=hstack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hstack.d.ts","sourceRoot":"","sources":["../../../src/hosts/hstack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"hstack.d.ts","sourceRoot":"","sources":["../../../src/hosts/hstack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAA2B,MAAM,qBAAqB,CAAA;AAEhF,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;CACvC;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,iBAAiB,CAAC,YAAY,CAAC;gBAClD,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW;CAGhD"}
|
package/dist/src/hosts/hstack.js
CHANGED
|
@@ -1,45 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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 = [];
|
|
1
|
+
import { FlexContainerHost } from "./flex-container.js";
|
|
2
|
+
/**
|
|
3
|
+
* HStackHost lays out children horizontally with optional spacing and cross-axis alignment.
|
|
4
|
+
*/
|
|
5
|
+
export class HStackHost extends FlexContainerHost {
|
|
18
6
|
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;
|
|
7
|
+
super("horizontal", "hstack", props, ctx, "top");
|
|
43
8
|
}
|
|
44
9
|
}
|
|
45
10
|
//# sourceMappingURL=hstack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hstack.js","sourceRoot":"","sources":["../../../src/hosts/hstack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hstack.js","sourceRoot":"","sources":["../../../src/hosts/hstack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAA2B,MAAM,qBAAqB,CAAA;AAOhF;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,iBAA+B;IAC9D,YAAY,KAAkB,EAAE,GAAgB;QAC/C,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAyC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IACrF,CAAC;CACD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { HostContext, CommonProps } from "../reconciler/types.js";
|
|
2
2
|
import type { BaseHost } from "./base.js";
|
|
3
3
|
import { RawTextHost } from "./text.js";
|
|
4
|
+
export { SingleChildHost } from "./single-child.js";
|
|
4
5
|
export { BaseHost } from "./base.js";
|
|
5
6
|
export { TextHost, RawTextHost, type TextProps } from "./text.js";
|
|
6
7
|
export { SpacerHost, type SpacerProps } from "./spacer.js";
|
|
@@ -10,6 +11,9 @@ export { ZStackHost, type ZStackProps } from "./zstack.js";
|
|
|
10
11
|
export { BoxHost, type BoxProps } from "./box.js";
|
|
11
12
|
export { CanvasHost, type CanvasProps, type DrawContext } from "./canvas.js";
|
|
12
13
|
export { CodeBlockHost, type CodeBlockProps } from "./codeblock.js";
|
|
14
|
+
export { ScrollHost, type ScrollProps } from "./scroll.js";
|
|
15
|
+
export { OverlayHost, type OverlayProps } from "./overlay.js";
|
|
16
|
+
export { OverlayItemHost, type OverlayItemProps } from "./overlay-item.js";
|
|
13
17
|
export declare const hostRegistry: Record<string, new (props: any, ctx: HostContext) => BaseHost>;
|
|
14
18
|
export declare function createHostInstance(type: string, props: CommonProps, ctx: HostContext): BaseHost;
|
|
15
19
|
export declare function createTextInstance(text: string, ctx: HostContext): RawTextHost;
|
|
@@ -1 +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;
|
|
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;AAWjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,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;AACnE,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAI1E,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,KAAK,QAAQ,CAYvF,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"}
|
package/dist/src/hosts/index.js
CHANGED
|
@@ -6,6 +6,10 @@ import { ZStackHost } from "./zstack.js";
|
|
|
6
6
|
import { BoxHost } from "./box.js";
|
|
7
7
|
import { CanvasHost } from "./canvas.js";
|
|
8
8
|
import { CodeBlockHost } from "./codeblock.js";
|
|
9
|
+
import { ScrollHost } from "./scroll.js";
|
|
10
|
+
import { OverlayHost } from "./overlay.js";
|
|
11
|
+
import { OverlayItemHost } from "./overlay-item.js";
|
|
12
|
+
export { SingleChildHost } from "./single-child.js";
|
|
9
13
|
export { BaseHost } from "./base.js";
|
|
10
14
|
export { TextHost, RawTextHost } from "./text.js";
|
|
11
15
|
export { SpacerHost } from "./spacer.js";
|
|
@@ -15,6 +19,9 @@ export { ZStackHost } from "./zstack.js";
|
|
|
15
19
|
export { BoxHost } from "./box.js";
|
|
16
20
|
export { CanvasHost } from "./canvas.js";
|
|
17
21
|
export { CodeBlockHost } from "./codeblock.js";
|
|
22
|
+
export { ScrollHost } from "./scroll.js";
|
|
23
|
+
export { OverlayHost } from "./overlay.js";
|
|
24
|
+
export { OverlayItemHost } from "./overlay-item.js";
|
|
18
25
|
// Use any to allow specialized props on each host type
|
|
19
26
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
27
|
export const hostRegistry = {
|
|
@@ -26,6 +33,9 @@ export const hostRegistry = {
|
|
|
26
33
|
box: BoxHost,
|
|
27
34
|
canvas: CanvasHost,
|
|
28
35
|
codeblock: CodeBlockHost,
|
|
36
|
+
scroll: ScrollHost,
|
|
37
|
+
overlay: OverlayHost,
|
|
38
|
+
overlayItem: OverlayItemHost,
|
|
29
39
|
};
|
|
30
40
|
export function createHostInstance(type, props, ctx) {
|
|
31
41
|
const Host = hostRegistry[type];
|
|
@@ -1 +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;
|
|
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;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,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;AACnE,OAAO,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAqB,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAyB,MAAM,mBAAmB,CAAA;AAE1E,uDAAuD;AACvD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAmE;IAC3F,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;IACxB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,WAAW;IACpB,WAAW,EAAE,eAAe;CAC5B,CAAA;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAkB,EAAE,GAAgB;IACpF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,GAAgB;IAChE,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAClC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OverlayItem host - wrapper for overlay children with alignment
|
|
3
|
+
*
|
|
4
|
+
* This is a pass-through container that holds alignment props.
|
|
5
|
+
* Used by Overlay to position non-base children.
|
|
6
|
+
*/
|
|
7
|
+
import type { CellBuffer, Palette, Rect, Size } from "@effect-tui/core";
|
|
8
|
+
import type { HostContext, CommonProps } from "../reconciler/types.js";
|
|
9
|
+
import { BaseHost } from "./base.js";
|
|
10
|
+
type HAlign = "left" | "center" | "right";
|
|
11
|
+
type VAlign = "top" | "center" | "bottom";
|
|
12
|
+
export interface OverlayItemProps extends CommonProps {
|
|
13
|
+
/** Alignment within the overlay container */
|
|
14
|
+
alignment?: {
|
|
15
|
+
h?: HAlign;
|
|
16
|
+
v?: VAlign;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export declare class OverlayItemHost extends BaseHost {
|
|
20
|
+
/** Stored alignment for parent Overlay to read */
|
|
21
|
+
alignment: {
|
|
22
|
+
h?: HAlign;
|
|
23
|
+
v?: VAlign;
|
|
24
|
+
};
|
|
25
|
+
constructor(props: OverlayItemProps, ctx: HostContext);
|
|
26
|
+
measure(maxW: number, maxH: number): Size;
|
|
27
|
+
layout(rect: Rect): void;
|
|
28
|
+
render(buffer: CellBuffer, palette: Palette): void;
|
|
29
|
+
updateProps(props: Record<string, unknown>): void;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=overlay-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-item.d.ts","sourceRoot":"","sources":["../../../src/hosts/overlay-item.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AACzC,KAAK,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEzC,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACpD,6CAA6C;IAC7C,SAAS,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACtC;AAED,qBAAa,eAAgB,SAAQ,QAAQ;IAC5C,kDAAkD;IAClD,SAAS,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAK;gBAE9B,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,WAAW;IAK5C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAazC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAUxB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAclD,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAM1D"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OverlayItem host - wrapper for overlay children with alignment
|
|
3
|
+
*
|
|
4
|
+
* This is a pass-through container that holds alignment props.
|
|
5
|
+
* Used by Overlay to position non-base children.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseHost } from "./base.js";
|
|
8
|
+
export class OverlayItemHost extends BaseHost {
|
|
9
|
+
/** Stored alignment for parent Overlay to read */
|
|
10
|
+
alignment = {};
|
|
11
|
+
constructor(props, ctx) {
|
|
12
|
+
super("overlayItem", props, ctx);
|
|
13
|
+
this.updateProps(props);
|
|
14
|
+
}
|
|
15
|
+
measure(maxW, maxH) {
|
|
16
|
+
const constrained = this.constrainProposal(maxW, maxH);
|
|
17
|
+
// Size is determined by single child
|
|
18
|
+
const child = this.children[0];
|
|
19
|
+
if (!child) {
|
|
20
|
+
return this.constrainResult({ w: 0, h: 0 });
|
|
21
|
+
}
|
|
22
|
+
const childSize = child.measure(constrained.w, constrained.h);
|
|
23
|
+
return this.constrainResult(childSize);
|
|
24
|
+
}
|
|
25
|
+
layout(rect) {
|
|
26
|
+
this.rect = rect;
|
|
27
|
+
// Pass rect to child
|
|
28
|
+
const child = this.children[0];
|
|
29
|
+
if (child) {
|
|
30
|
+
child.layout(rect);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
render(buffer, palette) {
|
|
34
|
+
// Render child
|
|
35
|
+
const child = this.children[0];
|
|
36
|
+
if (child) {
|
|
37
|
+
if (child.rect) {
|
|
38
|
+
buffer.withClip(child.rect.x, child.rect.y, child.rect.w, child.rect.h, () => {
|
|
39
|
+
child.render(buffer, palette);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
child.render(buffer, palette);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
updateProps(props) {
|
|
48
|
+
super.updateProps(props);
|
|
49
|
+
if (props.alignment !== undefined) {
|
|
50
|
+
this.alignment = props.alignment;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=overlay-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-item.js","sourceRoot":"","sources":["../../../src/hosts/overlay-item.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAUpC,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC5C,kDAAkD;IAClD,SAAS,GAA+B,EAAE,CAAA;IAE1C,YAAY,KAAuB,EAAE,GAAgB;QACpD,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAEQ,OAAO,CAAC,IAAY,EAAE,IAAY;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAEtD,qCAAqC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;IACvC,CAAC;IAEQ,MAAM,CAAC,IAAU;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,qBAAqB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACF,CAAC;IAEQ,MAAM,CAAC,MAAkB,EAAE,OAAgB;QACnD,eAAe;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE;oBAC5E,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAC9B,CAAC,CAAC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACP,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC9B,CAAC;QACF,CAAC;IACF,CAAC;IAEQ,WAAW,CAAC,KAA8B;QAClD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACxB,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAuC,CAAA;QAC/D,CAAC;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay host - SwiftUI-style overlay layout
|
|
3
|
+
*
|
|
4
|
+
* Unlike zstack (which sizes to MAX of all children), overlay:
|
|
5
|
+
* 1. First child is the "base" - determines the container size
|
|
6
|
+
* 2. Subsequent children (overlayItem) are overlaid without affecting measurement
|
|
7
|
+
* 3. Each overlayItem specifies its own alignment
|
|
8
|
+
*
|
|
9
|
+
* Usage with compound component:
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <Overlay>
|
|
12
|
+
* <MainContent />
|
|
13
|
+
* <Overlay.Item alignment={{ v: "top" }}><Toast /></Overlay.Item>
|
|
14
|
+
* <Overlay.Item alignment={{ v: "bottom" }}><Console /></Overlay.Item>
|
|
15
|
+
* </Overlay>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
import type { CellBuffer, Palette, Rect, Size } from "@effect-tui/core";
|
|
19
|
+
import type { HostContext, CommonProps } from "../reconciler/types.js";
|
|
20
|
+
import { BaseHost } from "./base.js";
|
|
21
|
+
export interface OverlayProps extends CommonProps {
|
|
22
|
+
}
|
|
23
|
+
export declare class OverlayHost extends BaseHost {
|
|
24
|
+
private cachedSizes;
|
|
25
|
+
constructor(props: OverlayProps, ctx: HostContext);
|
|
26
|
+
measure(maxW: number, maxH: number): Size;
|
|
27
|
+
layout(rect: Rect): void;
|
|
28
|
+
render(buffer: CellBuffer, palette: Palette): void;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/hosts/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGpC,MAAM,WAAW,YAAa,SAAQ,WAAW;CAAG;AAEpD,qBAAa,WAAY,SAAQ,QAAQ;IACxC,OAAO,CAAC,WAAW,CAAa;gBAEpB,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW;IAIxC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAwBzC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAwDxB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;CAY3D"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay host - SwiftUI-style overlay layout
|
|
3
|
+
*
|
|
4
|
+
* Unlike zstack (which sizes to MAX of all children), overlay:
|
|
5
|
+
* 1. First child is the "base" - determines the container size
|
|
6
|
+
* 2. Subsequent children (overlayItem) are overlaid without affecting measurement
|
|
7
|
+
* 3. Each overlayItem specifies its own alignment
|
|
8
|
+
*
|
|
9
|
+
* Usage with compound component:
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <Overlay>
|
|
12
|
+
* <MainContent />
|
|
13
|
+
* <Overlay.Item alignment={{ v: "top" }}><Toast /></Overlay.Item>
|
|
14
|
+
* <Overlay.Item alignment={{ v: "bottom" }}><Console /></Overlay.Item>
|
|
15
|
+
* </Overlay>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
import { BaseHost } from "./base.js";
|
|
19
|
+
export class OverlayHost extends BaseHost {
|
|
20
|
+
cachedSizes = [];
|
|
21
|
+
constructor(props, ctx) {
|
|
22
|
+
super("overlay", props, ctx);
|
|
23
|
+
}
|
|
24
|
+
measure(maxW, maxH) {
|
|
25
|
+
// Apply frame constraints to what we propose to children
|
|
26
|
+
const constrained = this.constrainProposal(maxW, maxH);
|
|
27
|
+
// Only first child determines our size
|
|
28
|
+
const baseChild = this.children[0];
|
|
29
|
+
if (!baseChild) {
|
|
30
|
+
return this.constrainResult({ w: 0, h: 0 });
|
|
31
|
+
}
|
|
32
|
+
const baseSize = baseChild.measure(constrained.w, constrained.h);
|
|
33
|
+
this.cachedSizes = [baseSize];
|
|
34
|
+
// Measure overlay children with the base size
|
|
35
|
+
// They don't affect our size, but need to know their constraints
|
|
36
|
+
for (let i = 1; i < this.children.length; i++) {
|
|
37
|
+
const size = this.children[i].measure(baseSize.w, baseSize.h);
|
|
38
|
+
this.cachedSizes.push(size);
|
|
39
|
+
}
|
|
40
|
+
// Return base size (overlay children don't affect our size)
|
|
41
|
+
return this.constrainResult(baseSize);
|
|
42
|
+
}
|
|
43
|
+
layout(rect) {
|
|
44
|
+
this.rect = rect;
|
|
45
|
+
// Layout base child to fill our rect
|
|
46
|
+
const baseChild = this.children[0];
|
|
47
|
+
if (baseChild) {
|
|
48
|
+
baseChild.layout(rect);
|
|
49
|
+
}
|
|
50
|
+
// Layout overlay children with their alignment
|
|
51
|
+
for (let i = 1; i < this.children.length; i++) {
|
|
52
|
+
const child = this.children[i];
|
|
53
|
+
const size = this.cachedSizes[i] ?? child.measure(rect.w, rect.h);
|
|
54
|
+
// Read alignment from OverlayItemHost (use type check, not instanceof, for bundler compatibility)
|
|
55
|
+
const alignment = child.type === "overlayItem" ? child.alignment : {};
|
|
56
|
+
const hAlign = alignment.h ?? "center";
|
|
57
|
+
const vAlign = alignment.v ?? "center";
|
|
58
|
+
// Calculate position based on alignment
|
|
59
|
+
let x = rect.x;
|
|
60
|
+
let y = rect.y;
|
|
61
|
+
switch (hAlign) {
|
|
62
|
+
case "left":
|
|
63
|
+
x = rect.x;
|
|
64
|
+
break;
|
|
65
|
+
case "center":
|
|
66
|
+
x = rect.x + Math.floor((rect.w - size.w) / 2);
|
|
67
|
+
break;
|
|
68
|
+
case "right":
|
|
69
|
+
x = rect.x + rect.w - size.w;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
switch (vAlign) {
|
|
73
|
+
case "top":
|
|
74
|
+
y = rect.y;
|
|
75
|
+
break;
|
|
76
|
+
case "center":
|
|
77
|
+
y = rect.y + Math.floor((rect.h - size.h) / 2);
|
|
78
|
+
break;
|
|
79
|
+
case "bottom":
|
|
80
|
+
y = rect.y + rect.h - size.h;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
child.layout({
|
|
84
|
+
x,
|
|
85
|
+
y,
|
|
86
|
+
w: Math.min(rect.w, size.w),
|
|
87
|
+
h: Math.min(rect.h, size.h),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
render(buffer, palette) {
|
|
92
|
+
// Render all children in order (base first, then overlays)
|
|
93
|
+
for (const child of this.children) {
|
|
94
|
+
if (child.rect) {
|
|
95
|
+
buffer.withClip(child.rect.x, child.rect.y, child.rect.w, child.rect.h, () => {
|
|
96
|
+
child.render(buffer, palette);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
child.render(buffer, palette);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/hosts/overlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { CellBuffer, Palette, Color } from "@effect-tui/core";
|
|
2
|
+
import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js";
|
|
3
|
+
import { SingleChildHost } from "./single-child.js";
|
|
4
|
+
export interface ScrollProps extends CommonProps {
|
|
5
|
+
/** Scroll axis: "vertical" (default), "horizontal", or "both" */
|
|
6
|
+
axis?: "vertical" | "horizontal" | "both";
|
|
7
|
+
/** Current scroll offset in pixels (0 = start) */
|
|
8
|
+
offset?: number;
|
|
9
|
+
/** Horizontal offset when axis="both" */
|
|
10
|
+
offsetX?: number;
|
|
11
|
+
/** Alignment when content is smaller than viewport */
|
|
12
|
+
align?: "start" | "end";
|
|
13
|
+
/** Background color for the scroll viewport */
|
|
14
|
+
bg?: Color;
|
|
15
|
+
/** Whether to show scrollbar indicators */
|
|
16
|
+
showScrollbar?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Sticky scroll - automatically stay at end when content grows.
|
|
19
|
+
* This is handled in the host itself for instant updates (no React roundtrip).
|
|
20
|
+
*/
|
|
21
|
+
sticky?: boolean;
|
|
22
|
+
/** Called when content size is measured (for useScroll) */
|
|
23
|
+
onContentSize?: (width: number, height: number) => void;
|
|
24
|
+
/** Called when viewport size changes (for useScroll) */
|
|
25
|
+
onViewportSize?: (width: number, height: number) => void;
|
|
26
|
+
/** Called when effective offset changes (for syncing with useScroll when sticky adjusts) */
|
|
27
|
+
onEffectiveOffset?: (offset: number) => void;
|
|
28
|
+
}
|
|
29
|
+
export declare class ScrollHost extends SingleChildHost {
|
|
30
|
+
axis: "vertical" | "horizontal" | "both";
|
|
31
|
+
offset: number;
|
|
32
|
+
offsetX: number;
|
|
33
|
+
align: "start" | "end";
|
|
34
|
+
bg?: Color;
|
|
35
|
+
showScrollbar: boolean;
|
|
36
|
+
sticky: boolean;
|
|
37
|
+
onContentSize?: (width: number, height: number) => void;
|
|
38
|
+
onViewportSize?: (width: number, height: number) => void;
|
|
39
|
+
onEffectiveOffset?: (offset: number) => void;
|
|
40
|
+
private contentWidth;
|
|
41
|
+
private contentHeight;
|
|
42
|
+
private lastViewportW;
|
|
43
|
+
private lastViewportH;
|
|
44
|
+
private lastReportedContentW;
|
|
45
|
+
private lastReportedContentH;
|
|
46
|
+
private wasAtEnd;
|
|
47
|
+
private effectiveOffset;
|
|
48
|
+
private effectiveOffsetX;
|
|
49
|
+
constructor(props: ScrollProps, ctx: HostContext);
|
|
50
|
+
measure(maxW: number, maxH: number): Size;
|
|
51
|
+
layout(rect: Rect): void;
|
|
52
|
+
render(buffer: CellBuffer, palette: Palette): void;
|
|
53
|
+
private renderScrollbars;
|
|
54
|
+
updateProps(props: Record<string, unknown>): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=scroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/hosts/scroll.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGnD,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,iEAAiE;IACjE,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,MAAM,CAAA;IACzC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IACvB,+CAA+C;IAC/C,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,2CAA2C;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,wDAAwD;IACxD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxD,4FAA4F;IAC5F,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5C;AAED,qBAAa,UAAW,SAAQ,eAAe;IAC9C,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,MAAM,CAAa;IACrD,MAAM,SAAI;IACV,OAAO,SAAI;IACX,KAAK,EAAE,OAAO,GAAG,KAAK,CAAU;IAChC,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,aAAa,UAAO;IACpB,MAAM,UAAQ;IACd,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxD,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAG5C,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,aAAa,CAAI;IAEzB,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,oBAAoB,CAAI;IAChC,OAAO,CAAC,oBAAoB,CAAI;IAEhC,OAAO,CAAC,QAAQ,CAAO;IAEvB,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,gBAAgB,CAAI;gBAEhB,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW;IAKhD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IA4BhC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAiFjC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAyBlD,OAAO,CAAC,gBAAgB;IA2Cf,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAa1D"}
|