@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,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay compound component - 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. Overlay.Item children are overlaid without affecting measurement
|
|
7
|
+
* 3. Each Overlay.Item specifies its own alignment
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <Overlay>
|
|
12
|
+
* <MainContent />
|
|
13
|
+
* <Overlay.Item alignment={{ v: "top" }}>
|
|
14
|
+
* <Toast />
|
|
15
|
+
* </Overlay.Item>
|
|
16
|
+
* <Overlay.Item alignment={{ v: "bottom" }}>
|
|
17
|
+
* <Console />
|
|
18
|
+
* </Overlay.Item>
|
|
19
|
+
* </Overlay>
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import type { ReactNode } from "react"
|
|
24
|
+
|
|
25
|
+
type HAlign = "left" | "center" | "right"
|
|
26
|
+
type VAlign = "top" | "center" | "bottom"
|
|
27
|
+
|
|
28
|
+
export interface OverlayProps {
|
|
29
|
+
children?: ReactNode
|
|
30
|
+
/** Fixed width */
|
|
31
|
+
width?: number
|
|
32
|
+
/** Fixed height */
|
|
33
|
+
height?: number
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface OverlayItemProps {
|
|
37
|
+
/** Alignment within the overlay container */
|
|
38
|
+
alignment?: { h?: HAlign; v?: VAlign }
|
|
39
|
+
children?: ReactNode
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function OverlayRoot({ children, ...props }: OverlayProps) {
|
|
43
|
+
return <overlay {...props}>{children}</overlay>
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function OverlayItem({ children, alignment, ...props }: OverlayItemProps) {
|
|
47
|
+
return (
|
|
48
|
+
<overlayItem alignment={alignment} {...props}>
|
|
49
|
+
{children}
|
|
50
|
+
</overlayItem>
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export const Overlay = Object.assign(OverlayRoot, {
|
|
55
|
+
Item: OverlayItem,
|
|
56
|
+
})
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { useState, useMemo, useLayoutEffect, type ReactNode } from "react"
|
|
2
|
+
|
|
3
|
+
export interface StaticProps<T> {
|
|
4
|
+
/**
|
|
5
|
+
* Array of items to render. Items should only be appended, not removed or modified.
|
|
6
|
+
* Each new item is rendered once and then "printed" to scrollback.
|
|
7
|
+
*/
|
|
8
|
+
items: T[]
|
|
9
|
+
/**
|
|
10
|
+
* Render function for each item. Must return a keyed element.
|
|
11
|
+
*/
|
|
12
|
+
children: (item: T, index: number) => ReactNode
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Renders items to terminal scrollback (inline mode only).
|
|
17
|
+
*
|
|
18
|
+
* Static content is printed once and scrolls up as new items are added,
|
|
19
|
+
* while dynamic content below it re-renders in place. Great for:
|
|
20
|
+
* - Build tools (completed steps scroll up, spinner at bottom)
|
|
21
|
+
* - Test runners (passed tests scroll up, current test at bottom)
|
|
22
|
+
* - Log viewers (history accumulates, live tail at bottom)
|
|
23
|
+
*
|
|
24
|
+
* **Important:** Static must be used at the root level of your component tree,
|
|
25
|
+
* as a direct child of a Fragment or the root element. Do not nest it inside
|
|
26
|
+
* other containers like `<box>`, `<scroll>`, or `<zstack>`.
|
|
27
|
+
*
|
|
28
|
+
* Items are append-only: removing or modifying items won't update printed output.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* const [logs, setLogs] = useState<string[]>([])
|
|
33
|
+
*
|
|
34
|
+
* // Correct: Static at root level
|
|
35
|
+
* return (
|
|
36
|
+
* <>
|
|
37
|
+
* <Static items={logs}>
|
|
38
|
+
* {(log, i) => <text key={i}>{log}</text>}
|
|
39
|
+
* </Static>
|
|
40
|
+
* <text>Live status: {status}</text>
|
|
41
|
+
* </>
|
|
42
|
+
* )
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function Static<T>({ items, children }: StaticProps<T>) {
|
|
46
|
+
// Track how many items we've already "printed"
|
|
47
|
+
const [printedIndex, setPrintedIndex] = useState(0)
|
|
48
|
+
|
|
49
|
+
// Only render new items (items we haven't printed yet)
|
|
50
|
+
const newItems = useMemo(() => items.slice(printedIndex), [items, printedIndex])
|
|
51
|
+
|
|
52
|
+
// After rendering, mark all items as printed
|
|
53
|
+
// useLayoutEffect ensures this happens before paint, so items unmount quickly
|
|
54
|
+
useLayoutEffect(() => {
|
|
55
|
+
if (items.length > printedIndex) {
|
|
56
|
+
setPrintedIndex(items.length)
|
|
57
|
+
}
|
|
58
|
+
}, [items.length, printedIndex])
|
|
59
|
+
|
|
60
|
+
// If no new items, render nothing
|
|
61
|
+
if (newItems.length === 0) {
|
|
62
|
+
return null
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Render new items in a vstack with the __static marker
|
|
66
|
+
// The reconciler will detect this and handle it specially
|
|
67
|
+
return <vstack __static>{newItems.map((item, i) => children(item, printedIndex + i))}</vstack>
|
|
68
|
+
}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { useState, useCallback, useEffect } from "react"
|
|
2
|
+
import { Colors, type Color, displayWidth } from "@effect-tui/core"
|
|
3
|
+
import { useKeyboard } from "../hooks/use-keyboard.js"
|
|
4
|
+
import type { DrawContext } from "../hosts/canvas.js"
|
|
5
|
+
import {
|
|
6
|
+
type TextState,
|
|
7
|
+
deleteWordBackward,
|
|
8
|
+
killToEnd,
|
|
9
|
+
killToStart,
|
|
10
|
+
deleteCharForward,
|
|
11
|
+
deleteCharBackward,
|
|
12
|
+
transposeChars,
|
|
13
|
+
insertText,
|
|
14
|
+
matchPrevWord,
|
|
15
|
+
matchNextWord,
|
|
16
|
+
} from "./text-editing.js"
|
|
17
|
+
|
|
18
|
+
export interface TextInputProps {
|
|
19
|
+
/** Current input value (controlled) */
|
|
20
|
+
value: string
|
|
21
|
+
/** Called when value changes */
|
|
22
|
+
onChange: (value: string) => void
|
|
23
|
+
/** Placeholder text shown when value is empty */
|
|
24
|
+
placeholder?: string
|
|
25
|
+
/** Width of the input (default: fill available) */
|
|
26
|
+
width?: number
|
|
27
|
+
/** Foreground color for text */
|
|
28
|
+
fg?: Color
|
|
29
|
+
/** Background color */
|
|
30
|
+
bg?: Color
|
|
31
|
+
/** Cursor foreground color */
|
|
32
|
+
cursorFg?: Color
|
|
33
|
+
/** Cursor background color */
|
|
34
|
+
cursorBg?: Color
|
|
35
|
+
/** Placeholder foreground color */
|
|
36
|
+
placeholderFg?: Color
|
|
37
|
+
/** Called when Enter is pressed */
|
|
38
|
+
onSubmit?: (value: string) => void
|
|
39
|
+
/** Called when Escape is pressed */
|
|
40
|
+
onCancel?: () => void
|
|
41
|
+
/** Whether the input is focused and accepts input */
|
|
42
|
+
focused?: boolean
|
|
43
|
+
/** Show cursor even when not focused */
|
|
44
|
+
showCursor?: boolean
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* A controlled text input component for terminal UIs.
|
|
49
|
+
*
|
|
50
|
+
* Features:
|
|
51
|
+
* - Arrow key navigation (Home/End for line start/end)
|
|
52
|
+
* - Word-by-word navigation with Option/Alt+Arrow
|
|
53
|
+
* - Backspace/Delete with word variants (Option+Backspace, Ctrl+W)
|
|
54
|
+
* - Emacs keybindings: Ctrl+A/E (start/end), Ctrl+B/F (back/forward char),
|
|
55
|
+
* Ctrl+H/D (delete back/forward char), Ctrl+K/U (kill to end/start),
|
|
56
|
+
* Ctrl+W (delete word back), Ctrl+T (transpose), Ctrl+Y (yank)
|
|
57
|
+
* - Kill ring for Ctrl+Y (yank last killed text)
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* const [text, setText] = useState("")
|
|
62
|
+
* <TextInput
|
|
63
|
+
* value={text}
|
|
64
|
+
* onChange={setText}
|
|
65
|
+
* placeholder="Type here..."
|
|
66
|
+
* />
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export function TextInput({
|
|
70
|
+
value,
|
|
71
|
+
onChange,
|
|
72
|
+
placeholder = "",
|
|
73
|
+
width,
|
|
74
|
+
fg = Colors.brightWhite,
|
|
75
|
+
bg,
|
|
76
|
+
cursorFg = Colors.black,
|
|
77
|
+
cursorBg = Colors.brightWhite,
|
|
78
|
+
placeholderFg = Colors.gray(10),
|
|
79
|
+
onSubmit,
|
|
80
|
+
onCancel,
|
|
81
|
+
focused = true,
|
|
82
|
+
showCursor = true,
|
|
83
|
+
}: TextInputProps) {
|
|
84
|
+
const [cursorPos, setCursorPos] = useState(value.length)
|
|
85
|
+
const [killRing, setKillRing] = useState("")
|
|
86
|
+
|
|
87
|
+
// Keep cursor in bounds when value changes externally
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
if (cursorPos > value.length) {
|
|
90
|
+
setCursorPos(value.length)
|
|
91
|
+
}
|
|
92
|
+
}, [value, cursorPos])
|
|
93
|
+
|
|
94
|
+
const handleKey = useCallback(
|
|
95
|
+
(key: { name: string; text?: string; ctrl?: boolean; meta?: boolean; shift?: boolean }) => {
|
|
96
|
+
if (!focused) return
|
|
97
|
+
|
|
98
|
+
const state: TextState = { text: value, cursor: cursorPos, killRing }
|
|
99
|
+
|
|
100
|
+
// Helper to apply an edit result
|
|
101
|
+
const applyEdit = (result: { state: TextState; changed: boolean }) => {
|
|
102
|
+
if (result.changed) {
|
|
103
|
+
onChange(result.state.text)
|
|
104
|
+
setCursorPos(result.state.cursor)
|
|
105
|
+
if (result.state.killRing !== killRing) {
|
|
106
|
+
setKillRing(result.state.killRing)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Helper for word boundary movement
|
|
112
|
+
const moveToPrevWord = () => {
|
|
113
|
+
const beforeCursor = value.slice(0, cursorPos)
|
|
114
|
+
const match = matchPrevWord(beforeCursor)
|
|
115
|
+
setCursorPos(match ? cursorPos - match.length : 0)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const moveToNextWord = () => {
|
|
119
|
+
const afterCursor = value.slice(cursorPos)
|
|
120
|
+
const match = matchNextWord(afterCursor)
|
|
121
|
+
setCursorPos(match ? cursorPos + match.length : value.length)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
switch (key.name) {
|
|
125
|
+
case "left":
|
|
126
|
+
if (key.meta) {
|
|
127
|
+
moveToPrevWord()
|
|
128
|
+
} else {
|
|
129
|
+
setCursorPos(Math.max(0, cursorPos - 1))
|
|
130
|
+
}
|
|
131
|
+
break
|
|
132
|
+
|
|
133
|
+
case "right":
|
|
134
|
+
if (key.meta) {
|
|
135
|
+
moveToNextWord()
|
|
136
|
+
} else {
|
|
137
|
+
setCursorPos(Math.min(value.length, cursorPos + 1))
|
|
138
|
+
}
|
|
139
|
+
break
|
|
140
|
+
|
|
141
|
+
case "home":
|
|
142
|
+
setCursorPos(0)
|
|
143
|
+
break
|
|
144
|
+
|
|
145
|
+
case "end":
|
|
146
|
+
setCursorPos(value.length)
|
|
147
|
+
break
|
|
148
|
+
|
|
149
|
+
case "backspace":
|
|
150
|
+
if (key.meta) {
|
|
151
|
+
// Option+Backspace: Delete to previous word boundary
|
|
152
|
+
const beforeCursor = value.slice(0, cursorPos)
|
|
153
|
+
const match = matchPrevWord(beforeCursor)
|
|
154
|
+
if (match) {
|
|
155
|
+
const newPos = cursorPos - match.length
|
|
156
|
+
onChange(value.slice(0, newPos) + value.slice(cursorPos))
|
|
157
|
+
setCursorPos(newPos)
|
|
158
|
+
} else if (cursorPos > 0) {
|
|
159
|
+
onChange(value.slice(cursorPos))
|
|
160
|
+
setCursorPos(0)
|
|
161
|
+
}
|
|
162
|
+
} else {
|
|
163
|
+
applyEdit(deleteCharBackward(state))
|
|
164
|
+
}
|
|
165
|
+
break
|
|
166
|
+
|
|
167
|
+
case "delete":
|
|
168
|
+
if (key.meta) {
|
|
169
|
+
// Option+Delete: Delete to next word boundary
|
|
170
|
+
const afterCursor = value.slice(cursorPos)
|
|
171
|
+
const match = matchNextWord(afterCursor)
|
|
172
|
+
if (match) {
|
|
173
|
+
onChange(value.slice(0, cursorPos) + value.slice(cursorPos + match.length))
|
|
174
|
+
} else if (cursorPos < value.length) {
|
|
175
|
+
onChange(value.slice(0, cursorPos))
|
|
176
|
+
}
|
|
177
|
+
} else {
|
|
178
|
+
applyEdit(deleteCharForward(state))
|
|
179
|
+
}
|
|
180
|
+
break
|
|
181
|
+
|
|
182
|
+
case "enter":
|
|
183
|
+
onSubmit?.(value)
|
|
184
|
+
break
|
|
185
|
+
|
|
186
|
+
case "escape":
|
|
187
|
+
onCancel?.()
|
|
188
|
+
break
|
|
189
|
+
|
|
190
|
+
case "char":
|
|
191
|
+
case "space":
|
|
192
|
+
if (key.ctrl && key.text) {
|
|
193
|
+
// Emacs-style keybindings
|
|
194
|
+
switch (key.text) {
|
|
195
|
+
case "a":
|
|
196
|
+
setCursorPos(0)
|
|
197
|
+
break
|
|
198
|
+
case "e":
|
|
199
|
+
setCursorPos(value.length)
|
|
200
|
+
break
|
|
201
|
+
case "b":
|
|
202
|
+
setCursorPos(Math.max(0, cursorPos - 1))
|
|
203
|
+
break
|
|
204
|
+
case "f":
|
|
205
|
+
setCursorPos(Math.min(value.length, cursorPos + 1))
|
|
206
|
+
break
|
|
207
|
+
case "d":
|
|
208
|
+
applyEdit(deleteCharForward(state))
|
|
209
|
+
break
|
|
210
|
+
case "h":
|
|
211
|
+
applyEdit(deleteCharBackward(state))
|
|
212
|
+
break
|
|
213
|
+
case "k":
|
|
214
|
+
applyEdit(killToEnd(state))
|
|
215
|
+
break
|
|
216
|
+
case "u":
|
|
217
|
+
applyEdit(killToStart(state))
|
|
218
|
+
break
|
|
219
|
+
case "w":
|
|
220
|
+
applyEdit(deleteWordBackward(state))
|
|
221
|
+
break
|
|
222
|
+
case "t":
|
|
223
|
+
applyEdit(transposeChars(state))
|
|
224
|
+
break
|
|
225
|
+
case "y":
|
|
226
|
+
applyEdit(insertText(state, killRing))
|
|
227
|
+
break
|
|
228
|
+
}
|
|
229
|
+
} else if (key.text && !key.meta) {
|
|
230
|
+
applyEdit(insertText(state, key.text))
|
|
231
|
+
}
|
|
232
|
+
break
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
[value, cursorPos, focused, onChange, onSubmit, onCancel, killRing],
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
useKeyboard(handleKey, { phase: "any" })
|
|
239
|
+
|
|
240
|
+
const draw = useCallback(
|
|
241
|
+
(ctx: DrawContext) => {
|
|
242
|
+
const displayText = value || placeholder
|
|
243
|
+
const isPlaceholder = !value
|
|
244
|
+
const textColor = isPlaceholder ? placeholderFg : fg
|
|
245
|
+
|
|
246
|
+
// Clear the line with background color
|
|
247
|
+
if (bg !== undefined) {
|
|
248
|
+
ctx.fill(0, 0, ctx.width, 1, " ", { bg })
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Draw text up to width
|
|
252
|
+
const maxLen = width ?? ctx.width
|
|
253
|
+
let x = 0
|
|
254
|
+
for (let i = 0; i < displayText.length && x < maxLen; i++) {
|
|
255
|
+
const ch = displayText[i]
|
|
256
|
+
const charWidth = displayWidth(ch)
|
|
257
|
+
|
|
258
|
+
if (x + charWidth > maxLen) break
|
|
259
|
+
|
|
260
|
+
// Draw cursor (inverted) at cursor position when focused
|
|
261
|
+
const isCursor = !isPlaceholder && i === cursorPos && focused && showCursor
|
|
262
|
+
if (isCursor) {
|
|
263
|
+
ctx.text(x, 0, ch, { fg: cursorFg, bg: cursorBg })
|
|
264
|
+
} else {
|
|
265
|
+
ctx.text(x, 0, ch, { fg: textColor, bg })
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
x += charWidth
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Draw cursor at end if cursor is at end of text
|
|
272
|
+
if (!isPlaceholder && cursorPos >= value.length && focused && showCursor && x < maxLen) {
|
|
273
|
+
ctx.text(x, 0, " ", { fg: cursorFg, bg: cursorBg })
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// If placeholder and focused, show cursor at start
|
|
277
|
+
if (isPlaceholder && focused && showCursor) {
|
|
278
|
+
ctx.text(0, 0, placeholder[0] || " ", { fg: cursorFg, bg: cursorBg })
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
[value, placeholder, cursorPos, focused, showCursor, fg, bg, cursorFg, cursorBg, placeholderFg, width],
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
return <canvas draw={draw} width={width} height={1} />
|
|
285
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { TextInput, type TextInputProps } from "./TextInput.js"
|
|
2
|
+
export { MultilineTextInput, type MultilineTextInputProps } from "./MultilineTextInput.js"
|
|
3
|
+
export { Markdown, type MarkdownProps, type MarkdownTheme } from "./Markdown.js"
|
|
4
|
+
export { Static, type StaticProps } from "./Static.js"
|
|
5
|
+
export { Divider, type DividerProps } from "./Divider.js"
|
|
6
|
+
export { Overlay, type OverlayProps, type OverlayItemProps } from "./Overlay.js"
|