@effect-tui/react 0.1.1 → 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 +31 -26
- 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 -96
- 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,46 @@
|
|
|
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
|
+
import type { ReactNode } from "react";
|
|
23
|
+
type HAlign = "left" | "center" | "right";
|
|
24
|
+
type VAlign = "top" | "center" | "bottom";
|
|
25
|
+
export interface OverlayProps {
|
|
26
|
+
children?: ReactNode;
|
|
27
|
+
/** Fixed width */
|
|
28
|
+
width?: number;
|
|
29
|
+
/** Fixed height */
|
|
30
|
+
height?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface OverlayItemProps {
|
|
33
|
+
/** Alignment within the overlay container */
|
|
34
|
+
alignment?: {
|
|
35
|
+
h?: HAlign;
|
|
36
|
+
v?: VAlign;
|
|
37
|
+
};
|
|
38
|
+
children?: ReactNode;
|
|
39
|
+
}
|
|
40
|
+
declare function OverlayRoot({ children, ...props }: OverlayProps): ReactNode;
|
|
41
|
+
declare function OverlayItem({ children, alignment, ...props }: OverlayItemProps): ReactNode;
|
|
42
|
+
export declare const Overlay: typeof OverlayRoot & {
|
|
43
|
+
Item: typeof OverlayItem;
|
|
44
|
+
};
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=Overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Overlay.d.ts","sourceRoot":"","sources":["../../../src/components/Overlay.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AACzC,KAAK,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEzC,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,6CAA6C;IAC7C,SAAS,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACtC,QAAQ,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,iBAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,aAExD;AAED,iBAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,aAMvE;AAED,eAAO,MAAM,OAAO;;CAElB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@effect-tui/react/jsx-runtime";
|
|
2
|
+
function OverlayRoot({ children, ...props }) {
|
|
3
|
+
return _jsx("overlay", { ...props, children: children });
|
|
4
|
+
}
|
|
5
|
+
function OverlayItem({ children, alignment, ...props }) {
|
|
6
|
+
return (_jsx("overlayItem", { alignment: alignment, ...props, children: children }));
|
|
7
|
+
}
|
|
8
|
+
export const Overlay = Object.assign(OverlayRoot, {
|
|
9
|
+
Item: OverlayItem,
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=Overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Overlay.js","sourceRoot":"","sources":["../../../src/components/Overlay.tsx"],"names":[],"mappings":";AAyCA,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAgB;IACxD,OAAO,qBAAa,KAAK,YAAG,QAAQ,GAAW,CAAA;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB;IACvE,OAAO,CACN,sBAAa,SAAS,EAAE,SAAS,KAAM,KAAK,YAC1C,QAAQ,GACI,CACd,CAAA;AACF,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;IACjD,IAAI,EAAE,WAAW;CACjB,CAAC,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface StaticProps<T> {
|
|
3
|
+
/**
|
|
4
|
+
* Array of items to render. Items should only be appended, not removed or modified.
|
|
5
|
+
* Each new item is rendered once and then "printed" to scrollback.
|
|
6
|
+
*/
|
|
7
|
+
items: T[];
|
|
8
|
+
/**
|
|
9
|
+
* Render function for each item. Must return a keyed element.
|
|
10
|
+
*/
|
|
11
|
+
children: (item: T, index: number) => ReactNode;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Renders items to terminal scrollback (inline mode only).
|
|
15
|
+
*
|
|
16
|
+
* Static content is printed once and scrolls up as new items are added,
|
|
17
|
+
* while dynamic content below it re-renders in place. Great for:
|
|
18
|
+
* - Build tools (completed steps scroll up, spinner at bottom)
|
|
19
|
+
* - Test runners (passed tests scroll up, current test at bottom)
|
|
20
|
+
* - Log viewers (history accumulates, live tail at bottom)
|
|
21
|
+
*
|
|
22
|
+
* **Important:** Static must be used at the root level of your component tree,
|
|
23
|
+
* as a direct child of a Fragment or the root element. Do not nest it inside
|
|
24
|
+
* other containers like `<box>`, `<scroll>`, or `<zstack>`.
|
|
25
|
+
*
|
|
26
|
+
* Items are append-only: removing or modifying items won't update printed output.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* const [logs, setLogs] = useState<string[]>([])
|
|
31
|
+
*
|
|
32
|
+
* // Correct: Static at root level
|
|
33
|
+
* return (
|
|
34
|
+
* <>
|
|
35
|
+
* <Static items={logs}>
|
|
36
|
+
* {(log, i) => <text key={i}>{log}</text>}
|
|
37
|
+
* </Static>
|
|
38
|
+
* <text>Live status: {status}</text>
|
|
39
|
+
* </>
|
|
40
|
+
* )
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function Static<T>({ items, children }: StaticProps<T>): ReactNode;
|
|
44
|
+
//# sourceMappingURL=Static.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Static.d.ts","sourceRoot":"","sources":["../../../src/components/Static.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE1E,MAAM,WAAW,WAAW,CAAC,CAAC;IAC7B;;;OAGG;IACH,KAAK,EAAE,CAAC,EAAE,CAAA;IACV;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;CAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,aAuB5D"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@effect-tui/react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo, useLayoutEffect } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Renders items to terminal scrollback (inline mode only).
|
|
5
|
+
*
|
|
6
|
+
* Static content is printed once and scrolls up as new items are added,
|
|
7
|
+
* while dynamic content below it re-renders in place. Great for:
|
|
8
|
+
* - Build tools (completed steps scroll up, spinner at bottom)
|
|
9
|
+
* - Test runners (passed tests scroll up, current test at bottom)
|
|
10
|
+
* - Log viewers (history accumulates, live tail at bottom)
|
|
11
|
+
*
|
|
12
|
+
* **Important:** Static must be used at the root level of your component tree,
|
|
13
|
+
* as a direct child of a Fragment or the root element. Do not nest it inside
|
|
14
|
+
* other containers like `<box>`, `<scroll>`, or `<zstack>`.
|
|
15
|
+
*
|
|
16
|
+
* Items are append-only: removing or modifying items won't update printed output.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* const [logs, setLogs] = useState<string[]>([])
|
|
21
|
+
*
|
|
22
|
+
* // Correct: Static at root level
|
|
23
|
+
* return (
|
|
24
|
+
* <>
|
|
25
|
+
* <Static items={logs}>
|
|
26
|
+
* {(log, i) => <text key={i}>{log}</text>}
|
|
27
|
+
* </Static>
|
|
28
|
+
* <text>Live status: {status}</text>
|
|
29
|
+
* </>
|
|
30
|
+
* )
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function Static({ items, children }) {
|
|
34
|
+
// Track how many items we've already "printed"
|
|
35
|
+
const [printedIndex, setPrintedIndex] = useState(0);
|
|
36
|
+
// Only render new items (items we haven't printed yet)
|
|
37
|
+
const newItems = useMemo(() => items.slice(printedIndex), [items, printedIndex]);
|
|
38
|
+
// After rendering, mark all items as printed
|
|
39
|
+
// useLayoutEffect ensures this happens before paint, so items unmount quickly
|
|
40
|
+
useLayoutEffect(() => {
|
|
41
|
+
if (items.length > printedIndex) {
|
|
42
|
+
setPrintedIndex(items.length);
|
|
43
|
+
}
|
|
44
|
+
}, [items.length, printedIndex]);
|
|
45
|
+
// If no new items, render nothing
|
|
46
|
+
if (newItems.length === 0) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
// Render new items in a vstack with the __static marker
|
|
50
|
+
// The reconciler will detect this and handle it specially
|
|
51
|
+
return _jsx("vstack", { __static: true, children: newItems.map((item, i) => children(item, printedIndex + i)) });
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=Static.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Static.js","sourceRoot":"","sources":["../../../src/components/Static.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAkB,MAAM,OAAO,CAAA;AAc1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,MAAM,CAAI,EAAE,KAAK,EAAE,QAAQ,EAAkB;IAC5D,+CAA+C;IAC/C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAEnD,uDAAuD;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAA;IAEhF,6CAA6C;IAC7C,8EAA8E;IAC9E,eAAe,CAAC,GAAG,EAAE;QACpB,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACjC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC9B,CAAC;IACF,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;IAEhC,kCAAkC;IAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,wDAAwD;IACxD,0DAA0D;IAC1D,OAAO,iBAAQ,QAAQ,kBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,GAAU,CAAA;AAC/F,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type Color } from "@effect-tui/core";
|
|
2
|
+
export interface TextInputProps {
|
|
3
|
+
/** Current input value (controlled) */
|
|
4
|
+
value: string;
|
|
5
|
+
/** Called when value changes */
|
|
6
|
+
onChange: (value: string) => void;
|
|
7
|
+
/** Placeholder text shown when value is empty */
|
|
8
|
+
placeholder?: string;
|
|
9
|
+
/** Width of the input (default: fill available) */
|
|
10
|
+
width?: number;
|
|
11
|
+
/** Foreground color for text */
|
|
12
|
+
fg?: Color;
|
|
13
|
+
/** Background color */
|
|
14
|
+
bg?: Color;
|
|
15
|
+
/** Cursor foreground color */
|
|
16
|
+
cursorFg?: Color;
|
|
17
|
+
/** Cursor background color */
|
|
18
|
+
cursorBg?: Color;
|
|
19
|
+
/** Placeholder foreground color */
|
|
20
|
+
placeholderFg?: Color;
|
|
21
|
+
/** Called when Enter is pressed */
|
|
22
|
+
onSubmit?: (value: string) => void;
|
|
23
|
+
/** Called when Escape is pressed */
|
|
24
|
+
onCancel?: () => void;
|
|
25
|
+
/** Whether the input is focused and accepts input */
|
|
26
|
+
focused?: boolean;
|
|
27
|
+
/** Show cursor even when not focused */
|
|
28
|
+
showCursor?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A controlled text input component for terminal UIs.
|
|
32
|
+
*
|
|
33
|
+
* Features:
|
|
34
|
+
* - Arrow key navigation (Home/End for line start/end)
|
|
35
|
+
* - Word-by-word navigation with Option/Alt+Arrow
|
|
36
|
+
* - Backspace/Delete with word variants (Option+Backspace, Ctrl+W)
|
|
37
|
+
* - Emacs keybindings: Ctrl+A/E (start/end), Ctrl+B/F (back/forward char),
|
|
38
|
+
* Ctrl+H/D (delete back/forward char), Ctrl+K/U (kill to end/start),
|
|
39
|
+
* Ctrl+W (delete word back), Ctrl+T (transpose), Ctrl+Y (yank)
|
|
40
|
+
* - Kill ring for Ctrl+Y (yank last killed text)
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```tsx
|
|
44
|
+
* const [text, setText] = useState("")
|
|
45
|
+
* <TextInput
|
|
46
|
+
* value={text}
|
|
47
|
+
* onChange={setText}
|
|
48
|
+
* placeholder="Type here..."
|
|
49
|
+
* />
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function TextInput({ value, onChange, placeholder, width, fg, bg, cursorFg, cursorBg, placeholderFg, onSubmit, onCancel, focused, showCursor, }: TextInputProps): import("react").ReactNode;
|
|
53
|
+
//# sourceMappingURL=TextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../../src/components/TextInput.tsx"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,KAAK,EAAgB,MAAM,kBAAkB,CAAA;AAgBnE,MAAM,WAAW,cAAc;IAC9B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gCAAgC;IAChC,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,uBAAuB;IACvB,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,mCAAmC;IACnC,aAAa,CAAC,EAAE,KAAK,CAAA;IACrB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,WAAgB,EAChB,KAAK,EACL,EAAuB,EACvB,EAAE,EACF,QAAuB,EACvB,QAA6B,EAC7B,aAA+B,EAC/B,QAAQ,EACR,QAAQ,EACR,OAAc,EACd,UAAiB,GACjB,EAAE,cAAc,6BA0MhB"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@effect-tui/react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback, useEffect } from "react";
|
|
3
|
+
import { Colors, displayWidth } from "@effect-tui/core";
|
|
4
|
+
import { useKeyboard } from "../hooks/use-keyboard.js";
|
|
5
|
+
import { deleteWordBackward, killToEnd, killToStart, deleteCharForward, deleteCharBackward, transposeChars, insertText, matchPrevWord, matchNextWord, } from "./text-editing.js";
|
|
6
|
+
/**
|
|
7
|
+
* A controlled text input component for terminal UIs.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Arrow key navigation (Home/End for line start/end)
|
|
11
|
+
* - Word-by-word navigation with Option/Alt+Arrow
|
|
12
|
+
* - Backspace/Delete with word variants (Option+Backspace, Ctrl+W)
|
|
13
|
+
* - Emacs keybindings: Ctrl+A/E (start/end), Ctrl+B/F (back/forward char),
|
|
14
|
+
* Ctrl+H/D (delete back/forward char), Ctrl+K/U (kill to end/start),
|
|
15
|
+
* Ctrl+W (delete word back), Ctrl+T (transpose), Ctrl+Y (yank)
|
|
16
|
+
* - Kill ring for Ctrl+Y (yank last killed text)
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* const [text, setText] = useState("")
|
|
21
|
+
* <TextInput
|
|
22
|
+
* value={text}
|
|
23
|
+
* onChange={setText}
|
|
24
|
+
* placeholder="Type here..."
|
|
25
|
+
* />
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function TextInput({ value, onChange, placeholder = "", width, fg = Colors.brightWhite, bg, cursorFg = Colors.black, cursorBg = Colors.brightWhite, placeholderFg = Colors.gray(10), onSubmit, onCancel, focused = true, showCursor = true, }) {
|
|
29
|
+
const [cursorPos, setCursorPos] = useState(value.length);
|
|
30
|
+
const [killRing, setKillRing] = useState("");
|
|
31
|
+
// Keep cursor in bounds when value changes externally
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (cursorPos > value.length) {
|
|
34
|
+
setCursorPos(value.length);
|
|
35
|
+
}
|
|
36
|
+
}, [value, cursorPos]);
|
|
37
|
+
const handleKey = useCallback((key) => {
|
|
38
|
+
if (!focused)
|
|
39
|
+
return;
|
|
40
|
+
const state = { text: value, cursor: cursorPos, killRing };
|
|
41
|
+
// Helper to apply an edit result
|
|
42
|
+
const applyEdit = (result) => {
|
|
43
|
+
if (result.changed) {
|
|
44
|
+
onChange(result.state.text);
|
|
45
|
+
setCursorPos(result.state.cursor);
|
|
46
|
+
if (result.state.killRing !== killRing) {
|
|
47
|
+
setKillRing(result.state.killRing);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
// Helper for word boundary movement
|
|
52
|
+
const moveToPrevWord = () => {
|
|
53
|
+
const beforeCursor = value.slice(0, cursorPos);
|
|
54
|
+
const match = matchPrevWord(beforeCursor);
|
|
55
|
+
setCursorPos(match ? cursorPos - match.length : 0);
|
|
56
|
+
};
|
|
57
|
+
const moveToNextWord = () => {
|
|
58
|
+
const afterCursor = value.slice(cursorPos);
|
|
59
|
+
const match = matchNextWord(afterCursor);
|
|
60
|
+
setCursorPos(match ? cursorPos + match.length : value.length);
|
|
61
|
+
};
|
|
62
|
+
switch (key.name) {
|
|
63
|
+
case "left":
|
|
64
|
+
if (key.meta) {
|
|
65
|
+
moveToPrevWord();
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
setCursorPos(Math.max(0, cursorPos - 1));
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
case "right":
|
|
72
|
+
if (key.meta) {
|
|
73
|
+
moveToNextWord();
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
setCursorPos(Math.min(value.length, cursorPos + 1));
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
case "home":
|
|
80
|
+
setCursorPos(0);
|
|
81
|
+
break;
|
|
82
|
+
case "end":
|
|
83
|
+
setCursorPos(value.length);
|
|
84
|
+
break;
|
|
85
|
+
case "backspace":
|
|
86
|
+
if (key.meta) {
|
|
87
|
+
// Option+Backspace: Delete to previous word boundary
|
|
88
|
+
const beforeCursor = value.slice(0, cursorPos);
|
|
89
|
+
const match = matchPrevWord(beforeCursor);
|
|
90
|
+
if (match) {
|
|
91
|
+
const newPos = cursorPos - match.length;
|
|
92
|
+
onChange(value.slice(0, newPos) + value.slice(cursorPos));
|
|
93
|
+
setCursorPos(newPos);
|
|
94
|
+
}
|
|
95
|
+
else if (cursorPos > 0) {
|
|
96
|
+
onChange(value.slice(cursorPos));
|
|
97
|
+
setCursorPos(0);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
applyEdit(deleteCharBackward(state));
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
case "delete":
|
|
105
|
+
if (key.meta) {
|
|
106
|
+
// Option+Delete: Delete to next word boundary
|
|
107
|
+
const afterCursor = value.slice(cursorPos);
|
|
108
|
+
const match = matchNextWord(afterCursor);
|
|
109
|
+
if (match) {
|
|
110
|
+
onChange(value.slice(0, cursorPos) + value.slice(cursorPos + match.length));
|
|
111
|
+
}
|
|
112
|
+
else if (cursorPos < value.length) {
|
|
113
|
+
onChange(value.slice(0, cursorPos));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
applyEdit(deleteCharForward(state));
|
|
118
|
+
}
|
|
119
|
+
break;
|
|
120
|
+
case "enter":
|
|
121
|
+
onSubmit?.(value);
|
|
122
|
+
break;
|
|
123
|
+
case "escape":
|
|
124
|
+
onCancel?.();
|
|
125
|
+
break;
|
|
126
|
+
case "char":
|
|
127
|
+
case "space":
|
|
128
|
+
if (key.ctrl && key.text) {
|
|
129
|
+
// Emacs-style keybindings
|
|
130
|
+
switch (key.text) {
|
|
131
|
+
case "a":
|
|
132
|
+
setCursorPos(0);
|
|
133
|
+
break;
|
|
134
|
+
case "e":
|
|
135
|
+
setCursorPos(value.length);
|
|
136
|
+
break;
|
|
137
|
+
case "b":
|
|
138
|
+
setCursorPos(Math.max(0, cursorPos - 1));
|
|
139
|
+
break;
|
|
140
|
+
case "f":
|
|
141
|
+
setCursorPos(Math.min(value.length, cursorPos + 1));
|
|
142
|
+
break;
|
|
143
|
+
case "d":
|
|
144
|
+
applyEdit(deleteCharForward(state));
|
|
145
|
+
break;
|
|
146
|
+
case "h":
|
|
147
|
+
applyEdit(deleteCharBackward(state));
|
|
148
|
+
break;
|
|
149
|
+
case "k":
|
|
150
|
+
applyEdit(killToEnd(state));
|
|
151
|
+
break;
|
|
152
|
+
case "u":
|
|
153
|
+
applyEdit(killToStart(state));
|
|
154
|
+
break;
|
|
155
|
+
case "w":
|
|
156
|
+
applyEdit(deleteWordBackward(state));
|
|
157
|
+
break;
|
|
158
|
+
case "t":
|
|
159
|
+
applyEdit(transposeChars(state));
|
|
160
|
+
break;
|
|
161
|
+
case "y":
|
|
162
|
+
applyEdit(insertText(state, killRing));
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else if (key.text && !key.meta) {
|
|
167
|
+
applyEdit(insertText(state, key.text));
|
|
168
|
+
}
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
}, [value, cursorPos, focused, onChange, onSubmit, onCancel, killRing]);
|
|
172
|
+
useKeyboard(handleKey, { phase: "any" });
|
|
173
|
+
const draw = useCallback((ctx) => {
|
|
174
|
+
const displayText = value || placeholder;
|
|
175
|
+
const isPlaceholder = !value;
|
|
176
|
+
const textColor = isPlaceholder ? placeholderFg : fg;
|
|
177
|
+
// Clear the line with background color
|
|
178
|
+
if (bg !== undefined) {
|
|
179
|
+
ctx.fill(0, 0, ctx.width, 1, " ", { bg });
|
|
180
|
+
}
|
|
181
|
+
// Draw text up to width
|
|
182
|
+
const maxLen = width ?? ctx.width;
|
|
183
|
+
let x = 0;
|
|
184
|
+
for (let i = 0; i < displayText.length && x < maxLen; i++) {
|
|
185
|
+
const ch = displayText[i];
|
|
186
|
+
const charWidth = displayWidth(ch);
|
|
187
|
+
if (x + charWidth > maxLen)
|
|
188
|
+
break;
|
|
189
|
+
// Draw cursor (inverted) at cursor position when focused
|
|
190
|
+
const isCursor = !isPlaceholder && i === cursorPos && focused && showCursor;
|
|
191
|
+
if (isCursor) {
|
|
192
|
+
ctx.text(x, 0, ch, { fg: cursorFg, bg: cursorBg });
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
ctx.text(x, 0, ch, { fg: textColor, bg });
|
|
196
|
+
}
|
|
197
|
+
x += charWidth;
|
|
198
|
+
}
|
|
199
|
+
// Draw cursor at end if cursor is at end of text
|
|
200
|
+
if (!isPlaceholder && cursorPos >= value.length && focused && showCursor && x < maxLen) {
|
|
201
|
+
ctx.text(x, 0, " ", { fg: cursorFg, bg: cursorBg });
|
|
202
|
+
}
|
|
203
|
+
// If placeholder and focused, show cursor at start
|
|
204
|
+
if (isPlaceholder && focused && showCursor) {
|
|
205
|
+
ctx.text(0, 0, placeholder[0] || " ", { fg: cursorFg, bg: cursorBg });
|
|
206
|
+
}
|
|
207
|
+
}, [value, placeholder, cursorPos, focused, showCursor, fg, bg, cursorFg, cursorBg, placeholderFg, width]);
|
|
208
|
+
return _jsx("canvas", { draw: draw, width: width, height: 1 });
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=TextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../../src/components/TextInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
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";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { TextInput } from "./TextInput.js";
|
|
2
|
+
export { MultilineTextInput } from "./MultilineTextInput.js";
|
|
3
|
+
export { Markdown } from "./Markdown.js";
|
|
4
|
+
export { Static } from "./Static.js";
|
|
5
|
+
export { Divider } from "./Divider.js";
|
|
6
|
+
export { Overlay } from "./Overlay.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAgC,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,QAAQ,EAA0C,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,OAAO,EAA4C,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure functions for text editing operations.
|
|
3
|
+
* These are used by TextInput and MultilineTextInput components.
|
|
4
|
+
* Being pure functions makes them easy to test.
|
|
5
|
+
*/
|
|
6
|
+
/** Single-line text state */
|
|
7
|
+
export interface TextState {
|
|
8
|
+
text: string;
|
|
9
|
+
cursor: number;
|
|
10
|
+
killRing: string;
|
|
11
|
+
}
|
|
12
|
+
/** Multi-line text state */
|
|
13
|
+
export interface MultilineState {
|
|
14
|
+
lines: string[];
|
|
15
|
+
cursor: {
|
|
16
|
+
row: number;
|
|
17
|
+
col: number;
|
|
18
|
+
};
|
|
19
|
+
killRing: string;
|
|
20
|
+
}
|
|
21
|
+
/** Result of an edit operation */
|
|
22
|
+
export interface EditResult<T> {
|
|
23
|
+
state: T;
|
|
24
|
+
changed: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** Match the previous word (and trailing whitespace) or whitespace-only chunk. */
|
|
27
|
+
export declare function matchPrevWord(beforeCursor: string): string | null;
|
|
28
|
+
/** Match the next word (including leading whitespace). */
|
|
29
|
+
export declare function matchNextWord(afterCursor: string): string | null;
|
|
30
|
+
/** Delete word backward */
|
|
31
|
+
export declare function deleteWordBackward(state: TextState): EditResult<TextState>;
|
|
32
|
+
/** Kill to end of line */
|
|
33
|
+
export declare function killToEnd(state: TextState): EditResult<TextState>;
|
|
34
|
+
/** Kill to start of line */
|
|
35
|
+
export declare function killToStart(state: TextState): EditResult<TextState>;
|
|
36
|
+
/** Delete character at cursor */
|
|
37
|
+
export declare function deleteCharForward(state: TextState): EditResult<TextState>;
|
|
38
|
+
/** Delete character before cursor */
|
|
39
|
+
export declare function deleteCharBackward(state: TextState): EditResult<TextState>;
|
|
40
|
+
/** Transpose characters before cursor */
|
|
41
|
+
export declare function transposeChars(state: TextState): EditResult<TextState>;
|
|
42
|
+
/** Insert text at cursor (yank) */
|
|
43
|
+
export declare function insertText(state: TextState, toInsert: string): EditResult<TextState>;
|
|
44
|
+
/** Convert grapheme column to character index in a line */
|
|
45
|
+
export declare function graphemeColToCharIdx(line: string, col: number): number;
|
|
46
|
+
/** Convert character index to grapheme column */
|
|
47
|
+
export declare function charIdxToGraphemeCol(line: string, charIdx: number): number;
|
|
48
|
+
/** Delete word backward in multiline (crosses line boundaries) */
|
|
49
|
+
export declare function deleteWordBackwardMultiline(state: MultilineState): EditResult<MultilineState>;
|
|
50
|
+
/** Kill to end of line in multiline */
|
|
51
|
+
export declare function killToEndMultiline(state: MultilineState): EditResult<MultilineState>;
|
|
52
|
+
/** Kill to start of line in multiline */
|
|
53
|
+
export declare function killToStartMultiline(state: MultilineState): EditResult<MultilineState>;
|
|
54
|
+
/** Transpose characters in multiline */
|
|
55
|
+
export declare function transposeCharsMultiline(state: MultilineState): EditResult<MultilineState>;
|
|
56
|
+
/** Delete character at cursor in multiline (joins lines if at end) */
|
|
57
|
+
export declare function deleteCharForwardMultiline(state: MultilineState): EditResult<MultilineState>;
|
|
58
|
+
/** Delete character before cursor in multiline (joins with previous line if at start) */
|
|
59
|
+
export declare function deleteCharBackwardMultiline(state: MultilineState): EditResult<MultilineState>;
|
|
60
|
+
/** Insert text at cursor in multiline (handles newlines) */
|
|
61
|
+
export declare function insertTextMultiline(state: MultilineState, toInsert: string): EditResult<MultilineState>;
|
|
62
|
+
//# sourceMappingURL=text-editing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-editing.d.ts","sourceRoot":"","sources":["../../../src/components/text-editing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,6BAA6B;AAC7B,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED,4BAA4B;AAC5B,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAA;IACR,OAAO,EAAE,OAAO,CAAA;CAChB;AAMD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjE;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE;AAMD,2BAA2B;AAC3B,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAoB1E;AAED,0BAA0B;AAC1B,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAYjE;AAED,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAYnE;AAED,iCAAiC;AACjC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAWzE;AAED,qCAAqC;AACrC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAW1E;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAsBtE;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAWpF;AAMD,2DAA2D;AAC3D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,iDAAiD;AACjD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,kEAAkE;AAClE,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAoE7F;AAED,uCAAuC;AACvC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CA0BpF;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAsBtF;AAED,wCAAwC;AACxC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAgCzF;AAED,sEAAsE;AACtE,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CA4B5F;AAED,yFAAyF;AACzF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAqC7F;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CA8CvG"}
|