@visulima/tui 0.0.1 → 1.0.0-alpha.2
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/CHANGELOG.md +200 -0
- package/LICENSE.md +303 -0
- package/README.md +173 -29
- package/dist/core/app.d.ts +50 -0
- package/dist/core/cell.d.ts +33 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.js +5 -0
- package/dist/core/inline.d.ts +22 -0
- package/dist/core/input.d.ts +18 -0
- package/dist/core/native-binding.d.ts +22 -0
- package/dist/ink/ansi-to-cell.d.ts +5 -0
- package/dist/ink/ansi-tokenizer.d.ts +38 -0
- package/dist/ink/clipboard.d.ts +29 -0
- package/dist/ink/color-matrix.d.ts +49 -0
- package/dist/ink/color-utils.d.ts +30 -0
- package/dist/ink/colorize.d.ts +4 -0
- package/dist/ink/components/AccessibilityContext.d.ts +4 -0
- package/dist/ink/components/Alert.d.ts +30 -0
- package/dist/ink/components/AnimationContext.d.ts +10 -0
- package/dist/ink/components/App.d.ts +19 -0
- package/dist/ink/components/AppContext.d.ts +38 -0
- package/dist/ink/components/BackgroundContext.d.ts +5 -0
- package/dist/ink/components/Badge.d.ts +27 -0
- package/dist/ink/components/BigText.d.ts +71 -0
- package/dist/ink/components/Box.d.ts +58 -0
- package/dist/ink/components/Code.d.ts +46 -0
- package/dist/ink/components/ConfirmInput.d.ts +40 -0
- package/dist/ink/components/ConsoleOverlay.d.ts +52 -0
- package/dist/ink/components/Cursor.d.ts +43 -0
- package/dist/ink/components/CursorContext.d.ts +12 -0
- package/dist/ink/components/Dialog.d.ts +93 -0
- package/dist/ink/components/DiffView.d.ts +71 -0
- package/dist/ink/components/ErrorBoundary.d.ts +17 -0
- package/dist/ink/components/ErrorOverview.d.ts +6 -0
- package/dist/ink/components/FocusContext.d.ts +17 -0
- package/dist/ink/components/Gradient.d.ts +38 -0
- package/dist/ink/components/Help.d.ts +49 -0
- package/dist/ink/components/Link.d.ts +34 -0
- package/dist/ink/components/Markdown.d.ts +34 -0
- package/dist/ink/components/MultiSelect.d.ts +63 -0
- package/dist/ink/components/Newline.d.ts +12 -0
- package/dist/ink/components/OrderedList.d.ts +30 -0
- package/dist/ink/components/Paginator.d.ts +75 -0
- package/dist/ink/components/ProgressBar.d.ts +51 -0
- package/dist/ink/components/SelectInput.d.ts +96 -0
- package/dist/ink/components/SelectInputIndicator.d.ts +36 -0
- package/dist/ink/components/SelectInputItem.d.ts +43 -0
- package/dist/ink/components/Slider.d.ts +92 -0
- package/dist/ink/components/Spacer.d.ts +7 -0
- package/dist/ink/components/Spinner.d.ts +42 -0
- package/dist/ink/components/Static.d.ts +24 -0
- package/dist/ink/components/StaticRender.d.ts +28 -0
- package/dist/ink/components/StatusMessage.d.ts +26 -0
- package/dist/ink/components/StderrContext.d.ts +16 -0
- package/dist/ink/components/StdinContext.d.ts +29 -0
- package/dist/ink/components/StdoutContext.d.ts +16 -0
- package/dist/ink/components/Stopwatch.d.ts +44 -0
- package/dist/ink/components/Tab.d.ts +25 -0
- package/dist/ink/components/Table.d.ts +80 -0
- package/dist/ink/components/Tabs.d.ts +104 -0
- package/dist/ink/components/Text.d.ts +63 -0
- package/dist/ink/components/TextInput.d.ts +48 -0
- package/dist/ink/components/Textarea.d.ts +62 -0
- package/dist/ink/components/Timer.d.ts +52 -0
- package/dist/ink/components/Transform.d.ts +16 -0
- package/dist/ink/components/UnorderedList.d.ts +35 -0
- package/dist/ink/components/file-picker/FilePicker.d.ts +75 -0
- package/dist/ink/components/file-picker/index.d.ts +3 -0
- package/dist/ink/components/file-picker/types.d.ts +38 -0
- package/dist/ink/components/file-picker/use-file-system.d.ts +16 -0
- package/dist/ink/components/scroll/ControlledScrollView.d.ts +43 -0
- package/dist/ink/components/scroll/ScrollBar.d.ts +20 -0
- package/dist/ink/components/scroll/ScrollBarBox.d.ts +15 -0
- package/dist/ink/components/scroll/ScrollList.d.ts +12 -0
- package/dist/ink/components/scroll/ScrollView.d.ts +98 -0
- package/dist/ink/components/scroll/index.d.ts +10 -0
- package/dist/ink/components/scroll/use-state-ref.d.ts +8 -0
- package/dist/ink/components/tree-view/TreeView.d.ts +89 -0
- package/dist/ink/components/tree-view/TreeViewNode.d.ts +29 -0
- package/dist/ink/components/tree-view/index.d.ts +11 -0
- package/dist/ink/components/tree-view/theme.d.ts +24 -0
- package/dist/ink/components/tree-view/tree-node-map.d.ts +72 -0
- package/dist/ink/components/tree-view/types.d.ts +55 -0
- package/dist/ink/components/tree-view/use-tree-view-state.d.ts +135 -0
- package/dist/ink/components/tree-view/use-tree-view.d.ts +26 -0
- package/dist/ink/components/variant-config.d.ts +10 -0
- package/dist/ink/cursor-helpers.d.ts +38 -0
- package/dist/ink/data-limited-lru-map.d.ts +21 -0
- package/dist/ink/devtools-window-polyfill.d.ts +1 -0
- package/dist/ink/devtools.d.ts +1 -0
- package/dist/ink/dom.d.ts +213 -0
- package/dist/ink/get-max-width.d.ts +3 -0
- package/dist/ink/highlighter.d.ts +28 -0
- package/dist/ink/hooks/use-animation.d.ts +43 -0
- package/dist/ink/hooks/use-app.d.ts +6 -0
- package/dist/ink/hooks/use-box-metrics.d.ts +58 -0
- package/dist/ink/hooks/use-clipboard.d.ts +29 -0
- package/dist/ink/hooks/use-color-blindness.d.ts +33 -0
- package/dist/ink/hooks/use-console-capture.d.ts +43 -0
- package/dist/ink/hooks/use-cursor.d.ts +12 -0
- package/dist/ink/hooks/use-focus-manager.d.ts +42 -0
- package/dist/ink/hooks/use-focus.d.ts +30 -0
- package/dist/ink/hooks/use-input.d.ts +149 -0
- package/dist/ink/hooks/use-is-screen-reader-enabled.d.ts +6 -0
- package/dist/ink/hooks/use-key-bindings.d.ts +61 -0
- package/dist/ink/hooks/use-linked-scroll.d.ts +41 -0
- package/dist/ink/hooks/use-paste.d.ts +44 -0
- package/dist/ink/hooks/use-scroll-acceleration.d.ts +47 -0
- package/dist/ink/hooks/use-scroll-input.d.ts +34 -0
- package/dist/ink/hooks/use-stderr.d.ts +6 -0
- package/dist/ink/hooks/use-stdin.d.ts +7 -0
- package/dist/ink/hooks/use-stdout.d.ts +6 -0
- package/dist/ink/hooks/use-stopwatch.d.ts +40 -0
- package/dist/ink/hooks/use-terminal-palette.d.ts +19 -0
- package/dist/ink/hooks/use-text-buffer.d.ts +42 -0
- package/dist/ink/hooks/use-text-selection.d.ts +45 -0
- package/dist/ink/hooks/use-timer.d.ts +49 -0
- package/dist/ink/hooks/use-window-size.d.ts +18 -0
- package/dist/ink/ime-utils.d.ts +25 -0
- package/dist/ink/index.d.ts +159 -0
- package/dist/ink/index.js +100 -0
- package/dist/ink/ink.d.ts +189 -0
- package/dist/ink/input-parser.d.ts +10 -0
- package/dist/ink/input-utils.d.ts +16 -0
- package/dist/ink/instances.d.ts +3 -0
- package/dist/ink/kitty-keyboard.d.ts +23 -0
- package/dist/ink/layout.d.ts +26 -0
- package/dist/ink/log-update-native.d.ts +14 -0
- package/dist/ink/log-update.d.ts +21 -0
- package/dist/ink/measure-element.d.ts +147 -0
- package/dist/ink/measure-text.d.ts +56 -0
- package/dist/ink/mouse/Fullscreen.d.ts +8 -0
- package/dist/ink/mouse/MouseProvider.d.ts +11 -0
- package/dist/ink/mouse/ansi-parser.d.ts +37 -0
- package/dist/ink/mouse/constants.d.ts +59 -0
- package/dist/ink/mouse/index.d.ts +20 -0
- package/dist/ink/mouse/is-intersecting.d.ts +18 -0
- package/dist/ink/mouse/mouse-context.d.ts +36 -0
- package/dist/ink/mouse/use-element-position.d.ts +29 -0
- package/dist/ink/mouse/use-mouse-action.d.ts +7 -0
- package/dist/ink/mouse/use-mouse-position.d.ts +7 -0
- package/dist/ink/mouse/use-mouse.d.ts +7 -0
- package/dist/ink/mouse/use-on-mouse-click.d.ts +14 -0
- package/dist/ink/mouse/use-on-mouse-hover.d.ts +8 -0
- package/dist/ink/mouse/use-on-mouse-state.d.ts +11 -0
- package/dist/ink/output.d.ts +74 -0
- package/dist/ink/parse-keypress.d.ts +22 -0
- package/dist/ink/reconciler.d.ts +3 -0
- package/dist/ink/region.d.ts +99 -0
- package/dist/ink/render-background.d.ts +4 -0
- package/dist/ink/render-border.d.ts +4 -0
- package/dist/ink/render-node-to-output.d.ts +38 -0
- package/dist/ink/render-scrollbar.d.ts +9 -0
- package/dist/ink/render-sticky.d.ts +44 -0
- package/dist/ink/render-to-string.d.ts +37 -0
- package/dist/ink/render.d.ts +191 -0
- package/dist/ink/renderer.d.ts +17 -0
- package/dist/ink/resize-observer.d.ts +44 -0
- package/dist/ink/sanitize-ansi.d.ts +2 -0
- package/dist/ink/scroll.d.ts +23 -0
- package/dist/ink/selection.d.ts +70 -0
- package/dist/ink/squash-text-nodes.d.ts +18 -0
- package/dist/ink/style-flags.d.ts +17 -0
- package/dist/ink/styled-line-factory.d.ts +25 -0
- package/dist/ink/styled-line-serializer.d.ts +18 -0
- package/dist/ink/styled-line.d.ts +109 -0
- package/dist/ink/styles.d.ts +369 -0
- package/dist/ink/terminal-palette.d.ts +25 -0
- package/dist/ink/text-wrap.d.ts +10 -0
- package/dist/ink/token-to-elements.d.ts +22 -0
- package/dist/ink/utils/format-time.d.ts +4 -0
- package/dist/ink/utils.d.ts +9 -0
- package/dist/ink/wrap-text.d.ts +3 -0
- package/dist/ink/write-synchronized.d.ts +4 -0
- package/dist/packem_chunks/devtools.js +27 -0
- package/dist/packem_shared/AccessibilityContext-BLelHhNU.js +7 -0
- package/dist/packem_shared/Alert-Dr3s_LD9.js +17 -0
- package/dist/packem_shared/AnimationContext-BcJg8Jr6.js +15 -0
- package/dist/packem_shared/AppContext-CP0U6H7O.js +11 -0
- package/dist/packem_shared/BackgroundContext-BAUaxfOb.js +5 -0
- package/dist/packem_shared/Badge-Dk7EGGM6.js +13 -0
- package/dist/packem_shared/BigText-CjMdY63X.js +24 -0
- package/dist/packem_shared/Box-D_pSJ9Jp.js +73 -0
- package/dist/packem_shared/COLOR_BLINDNESS_SIMULATION-BsMy5Ewl.js +81 -0
- package/dist/packem_shared/Cell-DCg1kJY-.js +48 -0
- package/dist/packem_shared/Code-DjQvPBD9.js +53 -0
- package/dist/packem_shared/ConfirmInput-85Y4kRQW.js +44 -0
- package/dist/packem_shared/ConsoleOverlay-DBNa4vtj.js +57 -0
- package/dist/packem_shared/ControlledScrollView-BlOaxcsN.js +286 -0
- package/dist/packem_shared/ControlledScrollView-DfAhcufF.js +5 -0
- package/dist/packem_shared/Cursor-DiW7YoSK.js +18 -0
- package/dist/packem_shared/CursorContext-JxRzlqAx.js +9 -0
- package/dist/packem_shared/DevTools-aMPIsaHx.js +61 -0
- package/dist/packem_shared/Dialog-DsSNAVgC.js +71 -0
- package/dist/packem_shared/DiffView-hqaw-2S6.js +329 -0
- package/dist/packem_shared/FilePicker-DNwFxRhq.js +254 -0
- package/dist/packem_shared/FocusContext-CWkYtgcm.js +26 -0
- package/dist/packem_shared/FocusContext-D5wFxSRz.js +153 -0
- package/dist/packem_shared/Fullscreen-DrElAE1o.js +11 -0
- package/dist/packem_shared/Gradient-Ql5P0GUd.js +136 -0
- package/dist/packem_shared/Help-6wanGG38.js +112 -0
- package/dist/packem_shared/IMECompositionBuffer-Dl3S0KnF.js +55 -0
- package/dist/packem_shared/InputParser-BKHpWfvN.js +156 -0
- package/dist/packem_shared/LayoutNode-Cjnsodiy.js +131 -0
- package/dist/packem_shared/Link-COcKYfGT.js +66 -0
- package/dist/packem_shared/Markdown-y1ISztof.js +212 -0
- package/dist/packem_shared/MouseProvider-Y9TSSEGl.js +136 -0
- package/dist/packem_shared/MultiSelect-ChoLUcDI.js +129 -0
- package/dist/packem_shared/NAMED_COLORS-a4QBvb5r.js +262 -0
- package/dist/packem_shared/Newline-DBtYEg8x.js +7 -0
- package/dist/packem_shared/OrderedList-Cp7pXr6m.js +26 -0
- package/dist/packem_shared/Paginator-D1AuD-kj.js +104 -0
- package/dist/packem_shared/ProgressBar-DOfpVagn.js +22 -0
- package/dist/packem_shared/Renderer-zZ5O3vxc.js +31 -0
- package/dist/packem_shared/ResizeObserverEntry-Br4seLeQ.js +102 -0
- package/dist/packem_shared/ScrollBar-EWAs2Uc7.js +106 -0
- package/dist/packem_shared/ScrollBarBox-DTNNlh7R.js +72 -0
- package/dist/packem_shared/ScrollList-DCeIFL8M.js +227 -0
- package/dist/packem_shared/ScrollView-v3MCNIyX.js +196 -0
- package/dist/packem_shared/SelectInput-BN2TMyxp.js +260 -0
- package/dist/packem_shared/SelectInputIndicator-DkRMoH_b.js +9 -0
- package/dist/packem_shared/SelectInputItem-BF9LQgKu.js +8 -0
- package/dist/packem_shared/Slider-BWD7xZX6.js +116 -0
- package/dist/packem_shared/Spacer-Bs4ER-HK.js +8 -0
- package/dist/packem_shared/Spinner-BuI-kN4p.js +1799 -0
- package/dist/packem_shared/Static-DpTd6Eed.js +22 -0
- package/dist/packem_shared/Static-xmD9giJj.js +18 -0
- package/dist/packem_shared/StaticRender-tYwH6QXl.js +33 -0
- package/dist/packem_shared/StatusMessage-BtSYxzwb.js +14 -0
- package/dist/packem_shared/StderrContext-Bj4Mf7v7.js +17 -0
- package/dist/packem_shared/StdinContext-Bq_GNJ3z.js +38 -0
- package/dist/packem_shared/StdoutContext-CgjWeCdO.js +17 -0
- package/dist/packem_shared/Stopwatch-DjtTCyHn.js +23 -0
- package/dist/packem_shared/Tab-C6r5q4hR.js +7 -0
- package/dist/packem_shared/Table-D-rSVlzb.js +82 -0
- package/dist/packem_shared/Tabs-hki-KRnx.js +153 -0
- package/dist/packem_shared/Text-DvAUdZcK.js +65 -0
- package/dist/packem_shared/TextInput-C79WEQ5U.js +137 -0
- package/dist/packem_shared/Textarea-Dj06R6Zd.js +272 -0
- package/dist/packem_shared/Timer-wi9zuh4n.js +22 -0
- package/dist/packem_shared/Transform-BHxY_dAM.js +14 -0
- package/dist/packem_shared/TreeNodeMap-CtJUvBnd.js +155 -0
- package/dist/packem_shared/TreeView-C2062dtj.js +148 -0
- package/dist/packem_shared/TuiApp-DfxOnXqi.js +120 -0
- package/dist/packem_shared/TuiContext-CqEjMyXd.js +415 -0
- package/dist/packem_shared/UnorderedList-DhnadWjX.js +33 -0
- package/dist/packem_shared/ansi-parser-0BdVTKho.js +41 -0
- package/dist/packem_shared/ansi-tokenizer-LHq2LUWA.js +307 -0
- package/dist/packem_shared/boxes-oi3WUbyR.js +92 -0
- package/dist/packem_shared/colorize-88_Vk8cn.js +48 -0
- package/dist/packem_shared/comparePoints-CGMDnd3_.js +287 -0
- package/dist/packem_shared/createInlineLoop-BxMmcq9D.js +93 -0
- package/dist/packem_shared/createLinkedScrollGroup-Djw4Ceo0.js +44 -0
- package/dist/packem_shared/dom-DvzhsAez.js +225 -0
- package/dist/packem_shared/format-time-BGmnDukX.js +12 -0
- package/dist/packem_shared/getPathToRoot-a1wbwxfL.js +4 -0
- package/dist/packem_shared/getScrollHeight-BubfU_df.js +63 -0
- package/dist/packem_shared/input-utils-ViAEXa0Z.js +19 -0
- package/dist/packem_shared/isIntersecting-fEXHJN5R.js +10 -0
- package/dist/packem_shared/isOsc52Supported-G0k4sXJx.js +36 -0
- package/dist/packem_shared/isTerminalPaletteQuerySupported-EeiwMKbr.js +93 -0
- package/dist/packem_shared/kittyFlags-bNNf_9kX.js +26 -0
- package/dist/packem_shared/measure-element-Reza_yfC.js +396 -0
- package/dist/packem_shared/measure-text-DItZYotK.js +1189 -0
- package/dist/packem_shared/measureElement-CTgFCmKd.js +4 -0
- package/dist/packem_shared/mouse-context-BUHWKEIe.js +6 -0
- package/dist/packem_shared/parseSgrMouse-BHVBPP9G.js +1 -0
- package/dist/packem_shared/processLayout-BQ9kXfd3.js +2 -0
- package/dist/packem_shared/reconciler-BXf6miSS.js +211 -0
- package/dist/packem_shared/reconciler-gfmqURLy.js +680 -0
- package/dist/packem_shared/render-BAwdjfki.js +2806 -0
- package/dist/packem_shared/render-Bpjhf0lD.js +195 -0
- package/dist/packem_shared/renderToString-Cfg55DRD.js +62 -0
- package/dist/packem_shared/renderToString-ClIaXgrC.js +86 -0
- package/dist/packem_shared/renderTreeToBuffer-D3mo7M7m.js +308 -0
- package/dist/packem_shared/renderer-B3wROkeg.js +1431 -0
- package/dist/packem_shared/setEnableStyledLineCache-BpskngSJ.js +2 -0
- package/dist/packem_shared/squashTextNodesWithMap-iqm6OMMT.js +100 -0
- package/dist/packem_shared/text-width-DhuarWcB.js +42 -0
- package/dist/packem_shared/token-to-elements-BRFl_rzw.js +249 -0
- package/dist/packem_shared/treeViewTheme-BpSw9TMf.js +52 -0
- package/dist/packem_shared/useAnimation-kj31sA-T.js +62 -0
- package/dist/packem_shared/useApp-DPQlRzi5.js +6 -0
- package/dist/packem_shared/useBoxMetrics-rBjKc-g4.js +54 -0
- package/dist/packem_shared/useClipboard-B_9-adw1.js +23 -0
- package/dist/packem_shared/useColorBlindness-D_sTIhcb.js +30 -0
- package/dist/packem_shared/useConsoleCapture-Dvt7G1W1.js +61 -0
- package/dist/packem_shared/useCursor-BIJzc8k9.js +19 -0
- package/dist/packem_shared/useElementDimensions-CAoKitVD.js +67 -0
- package/dist/packem_shared/useFocus-CNl5QHHf.js +37 -0
- package/dist/packem_shared/useFocusManager-BPYaUuKQ.js +16 -0
- package/dist/packem_shared/useInput-Cfp5zB2s.js +594 -0
- package/dist/packem_shared/useIsScreenReaderEnabled-CnGKCe0f.js +9 -0
- package/dist/packem_shared/useKeyBindings-B78l1E1n.js +66 -0
- package/dist/packem_shared/useMouseAction-C5gZ2nj7.js +29 -0
- package/dist/packem_shared/useMouseContext-D-rFy60Q.js +12 -0
- package/dist/packem_shared/useMousePosition-BHBJ-kBk.js +25 -0
- package/dist/packem_shared/useOnMouseClick--ZIyBOBO.js +35 -0
- package/dist/packem_shared/useOnMouseHover-26diuXUC.js +32 -0
- package/dist/packem_shared/useOnMouseState-NO_Kda_C.js +13 -0
- package/dist/packem_shared/usePaste-Ct8J4AGR.js +35 -0
- package/dist/packem_shared/useScrollAcceleration-R9LfrPVG.js +73 -0
- package/dist/packem_shared/useScrollInput-D3CpBq_a.js +72 -0
- package/dist/packem_shared/useStderr-CAOVUh4E.js +6 -0
- package/dist/packem_shared/useStdin-X-O0kd-n.js +7 -0
- package/dist/packem_shared/useStdout-DyF6DSH0.js +6 -0
- package/dist/packem_shared/useStopwatch-qC4Beai4.js +33 -0
- package/dist/packem_shared/useTerminalPalette-BaWO2c4Q.js +38 -0
- package/dist/packem_shared/useTextBuffer-C8fEe9Ly.js +398 -0
- package/dist/packem_shared/useTextSelection-mXtxgsPK.js +50 -0
- package/dist/packem_shared/useTimer-CPQ7j827.js +46 -0
- package/dist/packem_shared/useTreeView-BT57P3Kx.js +101 -0
- package/dist/packem_shared/useTreeViewState-BpS_KZ-K.js +502 -0
- package/dist/packem_shared/useWindowSize-ugEmGZJm.js +20 -0
- package/dist/packem_shared/utils-BgdlrbOH.js +140 -0
- package/dist/packem_shared/variant-config-DSZoX5TM.js +8 -0
- package/dist/packem_shared/wrapOrTruncateStyledLine-DN3Nogoc.js +147 -0
- package/dist/react/devtools.d.ts +27 -0
- package/dist/react/focus.d.ts +39 -0
- package/dist/react/hooks.d.ts +238 -0
- package/dist/react/index.d.ts +8 -0
- package/dist/react/index.js +9 -0
- package/dist/react/layout.d.ts +35 -0
- package/dist/react/react.d.ts +57 -0
- package/dist/react/reconciler.d.ts +4 -0
- package/dist/react/render-to-string.d.ts +21 -0
- package/dist/react/renderer.d.ts +2 -0
- package/dist/react/scene.d.ts +3 -0
- package/dist/react/static.d.ts +39 -0
- package/dist/react/styles.d.ts +83 -0
- package/dist/react/text-width.d.ts +20 -0
- package/dist/testing/index.d.ts +144 -0
- package/dist/testing/index.js +260 -0
- package/dist/testing/keys.d.ts +89 -0
- package/dist/testing/screen.d.ts +35 -0
- package/dist/testing/wait-for.d.ts +21 -0
- package/index.js +585 -0
- package/package.json +117 -7
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
export declare const nonAlphanumericKeys: string[];
|
|
3
|
+
type ParsedKey = {
|
|
4
|
+
capsLock?: boolean;
|
|
5
|
+
code?: string;
|
|
6
|
+
ctrl: boolean;
|
|
7
|
+
eventType?: "press" | "repeat" | "release";
|
|
8
|
+
hyper?: boolean;
|
|
9
|
+
isKittyProtocol?: boolean;
|
|
10
|
+
isPrintable?: boolean;
|
|
11
|
+
meta: boolean;
|
|
12
|
+
name: string;
|
|
13
|
+
numLock?: boolean;
|
|
14
|
+
option: boolean;
|
|
15
|
+
raw: string | undefined;
|
|
16
|
+
sequence: string;
|
|
17
|
+
shift: boolean;
|
|
18
|
+
super?: boolean;
|
|
19
|
+
text?: string;
|
|
20
|
+
};
|
|
21
|
+
declare const parseKeypress: (s?: Buffer | string) => ParsedKey;
|
|
22
|
+
export default parseKeypress;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Region-based hierarchical output model.
|
|
3
|
+
*
|
|
4
|
+
* A Region represents a rectangular area of terminal output with its own
|
|
5
|
+
* line buffer, scroll state, and child regions. Regions form a tree that
|
|
6
|
+
* is composited into the final screen buffer via flattenRegion().
|
|
7
|
+
*
|
|
8
|
+
* This enables:
|
|
9
|
+
* - Incremental rendering (only changed regions are re-composited)
|
|
10
|
+
* - Render caching (cachedRender stores a Region for unchanged subtrees)
|
|
11
|
+
* - Dirty tracking (terminal buffer only writes changed lines)
|
|
12
|
+
*
|
|
13
|
+
* Ported from jacob314/ink (Google LLC, Apache-2.0).
|
|
14
|
+
*/
|
|
15
|
+
import type { StyledLine } from "./styled-line.d.ts";
|
|
16
|
+
export type Region = {
|
|
17
|
+
backgroundColor?: string;
|
|
18
|
+
borderBottom?: number;
|
|
19
|
+
borderTop?: number;
|
|
20
|
+
cachedStickyHeaders?: StickyHeader[];
|
|
21
|
+
/** Child regions (nested content areas) */
|
|
22
|
+
children: Region[];
|
|
23
|
+
/** Cursor position within this region */
|
|
24
|
+
cursorPosition?: {
|
|
25
|
+
col: number;
|
|
26
|
+
row: number;
|
|
27
|
+
};
|
|
28
|
+
height: number;
|
|
29
|
+
/** Unique identifier for this region (used for dirty tracking) */
|
|
30
|
+
id: number | string;
|
|
31
|
+
isHorizontallyScrollable?: boolean;
|
|
32
|
+
/** Whether this region supports scrolling */
|
|
33
|
+
isScrollable: boolean;
|
|
34
|
+
isVerticallyScrollable?: boolean;
|
|
35
|
+
/** Content buffer — StyledLine per row, relative to (0,0) of this region */
|
|
36
|
+
readonly lines: ReadonlyArray<StyledLine>;
|
|
37
|
+
marginBottom?: number;
|
|
38
|
+
marginRight?: number;
|
|
39
|
+
/** DOM node reference for debugging/caching */
|
|
40
|
+
nodeId?: number;
|
|
41
|
+
opaque?: boolean;
|
|
42
|
+
/** Layout properties */
|
|
43
|
+
overflowToBackbuffer?: boolean;
|
|
44
|
+
scrollbarThumbColor?: string;
|
|
45
|
+
scrollbarVisible?: boolean;
|
|
46
|
+
scrollHeight?: number;
|
|
47
|
+
scrollLeft?: number;
|
|
48
|
+
/** Scroll state */
|
|
49
|
+
scrollTop?: number;
|
|
50
|
+
scrollWidth?: number;
|
|
51
|
+
/** Selectable text spans for text selection */
|
|
52
|
+
selectableSpans: SelectableSpan[];
|
|
53
|
+
selectableText?: string;
|
|
54
|
+
/** Whether the scrollback position is stable */
|
|
55
|
+
stableScrollback?: boolean;
|
|
56
|
+
/** Sticky headers for this region */
|
|
57
|
+
stickyHeaders: StickyHeader[];
|
|
58
|
+
/** Trimmed output (trailing spaces removed) for final rendering */
|
|
59
|
+
readonly styledOutput: ReadonlyArray<StyledLine>;
|
|
60
|
+
/** Dimensions */
|
|
61
|
+
width: number;
|
|
62
|
+
/** Position relative to parent region */
|
|
63
|
+
x: number;
|
|
64
|
+
y: number;
|
|
65
|
+
};
|
|
66
|
+
export type SelectableSpan = {
|
|
67
|
+
endX: number;
|
|
68
|
+
startX: number;
|
|
69
|
+
text: string;
|
|
70
|
+
y: number;
|
|
71
|
+
};
|
|
72
|
+
export type StickyHeader = {
|
|
73
|
+
/** Lines in the natural (scrolling) position */
|
|
74
|
+
lines: ReadonlyArray<StyledLine>;
|
|
75
|
+
/** Height of the header in lines */
|
|
76
|
+
maxHeaderHeight: number;
|
|
77
|
+
/** Natural row offset relative to content start */
|
|
78
|
+
naturalRow: number;
|
|
79
|
+
/** Node ID for identification */
|
|
80
|
+
nodeId: number;
|
|
81
|
+
/** Lines in the stuck (fixed) position */
|
|
82
|
+
stuckLines?: ReadonlyArray<StyledLine>;
|
|
83
|
+
/** Stuck X position relative to region */
|
|
84
|
+
x: number;
|
|
85
|
+
/** Stuck Y position relative to region */
|
|
86
|
+
y: number;
|
|
87
|
+
};
|
|
88
|
+
export type RegionNode = {
|
|
89
|
+
children: RegionNode[];
|
|
90
|
+
id: number | string;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Compare two region trees for structural equality (same IDs in same order).
|
|
94
|
+
*/
|
|
95
|
+
export declare const treesEqual: (a: RegionNode, b: RegionNode) => boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Extract selectable text from a list of selectable spans.
|
|
98
|
+
*/
|
|
99
|
+
export declare const extractSelectableText: (spans: ReadonlyArray<SelectableSpan>) => string;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { DOMElement, DOMNode } from "./dom.d.ts";
|
|
2
|
+
import Output from "./output.d.ts";
|
|
3
|
+
export type OutputTransformer = (s: string, index: number) => string;
|
|
4
|
+
export type CursorOutputPosition = {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
};
|
|
8
|
+
export type RenderState = {
|
|
9
|
+
cursorPosition: CursorOutputPosition | undefined;
|
|
10
|
+
cursorRequested: boolean;
|
|
11
|
+
lastTextWriteEnd?: CursorOutputPosition;
|
|
12
|
+
};
|
|
13
|
+
export declare const renderNodeToScreenReaderOutput: (node: DOMElement, options?: {
|
|
14
|
+
parentRole?: string;
|
|
15
|
+
skipStaticElements?: boolean;
|
|
16
|
+
}) => string;
|
|
17
|
+
declare const renderNodeToOutput: (node: DOMElement, output: Output, options: {
|
|
18
|
+
absoluteOffsetX?: number;
|
|
19
|
+
absoluteOffsetY?: number;
|
|
20
|
+
offsetX?: number;
|
|
21
|
+
offsetY?: number;
|
|
22
|
+
renderState?: RenderState;
|
|
23
|
+
selectionMap?: Map<DOMNode, {
|
|
24
|
+
end: number;
|
|
25
|
+
start: number;
|
|
26
|
+
}>;
|
|
27
|
+
skipStaticElements: boolean;
|
|
28
|
+
transformers?: OutputTransformer[];
|
|
29
|
+
}) => void;
|
|
30
|
+
export default renderNodeToOutput;
|
|
31
|
+
/**
|
|
32
|
+
* Render a DOM subtree into a cached Region.
|
|
33
|
+
* Used by StaticRender to pre-render content once and cache it.
|
|
34
|
+
*/
|
|
35
|
+
export declare const renderToStatic: (node: DOMElement, options?: {
|
|
36
|
+
skipStaticElements?: boolean;
|
|
37
|
+
trackSelection?: boolean;
|
|
38
|
+
}) => void;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ScrollbarBoundingBox } from "./measure-element.d.ts";
|
|
2
|
+
import type Output from "./output.d.ts";
|
|
3
|
+
export type RenderScrollbarOptions = {
|
|
4
|
+
axis: "horizontal" | "vertical";
|
|
5
|
+
color?: string;
|
|
6
|
+
layout: ScrollbarBoundingBox;
|
|
7
|
+
output: Output;
|
|
8
|
+
};
|
|
9
|
+
export declare const renderScrollbar: ({ axis, color, layout, output }: RenderScrollbarOptions) => void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { DOMElement } from "./dom.d.ts";
|
|
2
|
+
import type Output from "./output.d.ts";
|
|
3
|
+
import type { OutputTransformer } from "./render-node-to-output.d.ts";
|
|
4
|
+
export type StickyNodeInfo = {
|
|
5
|
+
node: DOMElement;
|
|
6
|
+
type: "top" | "bottom";
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Factory function type for creating Output instances.
|
|
10
|
+
* Passed as a parameter to avoid circular dependency between render-sticky and output.
|
|
11
|
+
*/
|
|
12
|
+
export type OutputFactory = (options: {
|
|
13
|
+
height: number;
|
|
14
|
+
width: number;
|
|
15
|
+
}) => Output;
|
|
16
|
+
/**
|
|
17
|
+
* Walk the DOM tree under `node` to find all sticky descendants.
|
|
18
|
+
* Stops at scroll boundaries (nested scrollable containers own their sticky nodes).
|
|
19
|
+
*/
|
|
20
|
+
export declare const getStickyDescendants: (node: DOMElement, result?: StickyNodeInfo[]) => StickyNodeInfo[];
|
|
21
|
+
/**
|
|
22
|
+
* Identify which sticky nodes are currently active (should be pinned)
|
|
23
|
+
* based on the scroll position and viewport.
|
|
24
|
+
*/
|
|
25
|
+
export declare const identifyActiveStickyNodes: (stickyNodes: StickyNodeInfo[], node: DOMElement, scrollTop: number, viewportBottom: number) => {
|
|
26
|
+
nextStickyNodeInfo?: StickyNodeInfo;
|
|
27
|
+
stickyNode: DOMElement;
|
|
28
|
+
type: "top" | "bottom";
|
|
29
|
+
}[];
|
|
30
|
+
/**
|
|
31
|
+
* Render active sticky headers and write them to the output at their stuck positions.
|
|
32
|
+
* Called during the rendering of a scrollable container.
|
|
33
|
+
* @param createOutput Factory function for creating Output instances (avoids circular imports).
|
|
34
|
+
*/
|
|
35
|
+
export declare const renderActiveStickyNodes: (activeStickyNodes: {
|
|
36
|
+
nextStickyNodeInfo?: StickyNodeInfo;
|
|
37
|
+
stickyNode: DOMElement;
|
|
38
|
+
type: "top" | "bottom";
|
|
39
|
+
}[], node: DOMElement, output: Output, createOutput: OutputFactory, options: {
|
|
40
|
+
newTransformers: OutputTransformer[];
|
|
41
|
+
skipStaticElements: boolean;
|
|
42
|
+
x: number;
|
|
43
|
+
y: number;
|
|
44
|
+
}) => void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export type RenderToStringOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* Width of the virtual terminal in columns.
|
|
5
|
+
* @default 80
|
|
6
|
+
*/
|
|
7
|
+
columns?: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Render a React element to a string synchronously. Unlike `render()`, this function does not write to stdout, does not set up any terminal event listeners, and returns the rendered output as a string.
|
|
11
|
+
*
|
|
12
|
+
* Useful for generating documentation, writing output to files, testing, or any scenario where you need the rendered output as a string without starting a persistent terminal application.
|
|
13
|
+
*
|
|
14
|
+
*Notes:**
|
|
15
|
+
*
|
|
16
|
+
* - Terminal-specific hooks (`useInput`, `useStdin`, `useStdout`, `useStderr`, `useApp`, `useFocus`, `useFocusManager`) return default no-op values since there is no terminal session. They will not throw, but they will not function as in a live terminal.
|
|
17
|
+
* - `useEffect` callbacks will execute during rendering (due to synchronous rendering mode), but state updates they trigger will not affect the returned output, which reflects the initial render.
|
|
18
|
+
* - `useLayoutEffect` callbacks fire synchronously during commit, so state updates they trigger **will** be reflected in the output.
|
|
19
|
+
- The `<Static>` component is supported — its output is prepended to the dynamic output.
|
|
20
|
+
- If a component throws during rendering, the error is propagated to the caller after cleanup.
|
|
21
|
+
|
|
22
|
+
@example
|
|
23
|
+
```
|
|
24
|
+
import {renderToString, Text, Box} from 'ink';
|
|
25
|
+
|
|
26
|
+
const output = renderToString(
|
|
27
|
+
<Box padding={1}>
|
|
28
|
+
<Text color="green">Hello World</Text>
|
|
29
|
+
</Box>,
|
|
30
|
+
{columns: 40}
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
console.log(output);
|
|
34
|
+
```
|
|
35
|
+
*/
|
|
36
|
+
declare const renderToString: (node: ReactNode, options?: RenderToStringOptions) => string;
|
|
37
|
+
export default renderToString;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { DOMElement } from "./dom.d.ts";
|
|
3
|
+
import type { RenderMetrics } from "./ink/ink.d.ts";
|
|
4
|
+
import Ink from "./ink/ink.d.ts";
|
|
5
|
+
import type { KittyKeyboardOptions } from "./kitty-keyboard.d.ts";
|
|
6
|
+
export type RenderOptions = {
|
|
7
|
+
/**
|
|
8
|
+
* Render the app in the terminal's alternate screen buffer. When enabled, the app renders on a separate screen, and the original terminal content is restored when the app exits. This is the same mechanism used by programs like vim, htop, and less.
|
|
9
|
+
*
|
|
10
|
+
* Note: The terminal's scrollback buffer is not available while in the alternate screen. This is standard terminal behavior; programs like vim use the alternate screen specifically to avoid polluting the user's scrollback history.
|
|
11
|
+
*
|
|
12
|
+
* Note: Ink intentionally treats alternate-screen teardown output as disposable. It does not preserve or replay teardown-time frames, hook writes, or `console.*` output after restoring the primary screen.
|
|
13
|
+
*
|
|
14
|
+
* Only works in interactive mode. Ignored when `interactive` is `false` or in a non-interactive environment (CI, piped stdout).
|
|
15
|
+
*
|
|
16
|
+
*Note: Reusing the same stdout across multiple `render()` calls without unmounting is unsupported. Call `unmount()` first if you need to change this option or create a fresh instance.
|
|
17
|
+
* @default false
|
|
18
|
+
*/
|
|
19
|
+
alternateScreen?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Enable React Concurrent Rendering mode.
|
|
22
|
+
*
|
|
23
|
+
* When enabled:
|
|
24
|
+
* - Suspense boundaries work correctly with async data
|
|
25
|
+
* - `useTransition` and `useDeferredValue` are fully functional
|
|
26
|
+
* - Updates can be interrupted for higher priority work
|
|
27
|
+
*
|
|
28
|
+
*Note: Concurrent mode changes the timing of renders. Some tests may need to use `act()` to properly await updates. Reusing the same stdout across multiple `render()` calls without unmounting is unsupported. Call `unmount()` first if you need to change the rendering mode or create a fresh instance.
|
|
29
|
+
* @default false
|
|
30
|
+
*/
|
|
31
|
+
concurrent?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* If true, each update will be rendered as separate output, without replacing the previous one.
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
debug?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Configure whether Ink should listen for Ctrl+C keyboard input and exit the app. This is needed in case `process.stdin` is in raw mode, because then Ctrl+C is ignored by default and the process is expected to handle it manually.
|
|
39
|
+
* @default true
|
|
40
|
+
*/
|
|
41
|
+
exitOnCtrlC?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Enable incremental rendering mode which only updates changed lines instead of redrawing the entire output.
|
|
44
|
+
*This can reduce flickering and improve performance for frequently updating UIs.
|
|
45
|
+
* @default false
|
|
46
|
+
*/
|
|
47
|
+
incrementalRendering?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Override automatic interactive mode detection.
|
|
50
|
+
*
|
|
51
|
+
* By default, Ink detects whether the environment is interactive based on CI detection (via [`is-in-ci`](https://github.com/sindresorhus/is-in-ci)) and `stdout.isTTY`. Most users should not need to set this.
|
|
52
|
+
*
|
|
53
|
+
* When non-interactive, Ink disables ANSI erase sequences, cursor manipulation, synchronized output, resize handling, and kitty keyboard auto-detection, writing only the final frame at unmount.
|
|
54
|
+
*
|
|
55
|
+
* Set to `false` to force non-interactive mode or `true` to force interactive mode when the automatic detection doesn't suit your use case.
|
|
56
|
+
*
|
|
57
|
+
*Note: Reusing the same stdout across multiple `render()` calls without unmounting is unsupported. Call `unmount()` first if you need to change this option or create a fresh instance.
|
|
58
|
+
* @default true (false if in CI or `stdout.isTTY` is falsy)
|
|
59
|
+
*/
|
|
60
|
+
interactive?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Enable screen reader support. See https://github.com/vadimdemedes/ink/blob/master/readme.md#screen-reader-support
|
|
63
|
+
* @default process.env['INK_SCREEN_READER'] === 'true'
|
|
64
|
+
*/
|
|
65
|
+
isScreenReaderEnabled?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Configure kitty keyboard protocol support for enhanced keyboard input.
|
|
68
|
+
* Enables additional modifiers (super, hyper, capsLock, numLock) and
|
|
69
|
+
*disambiguated key events in terminals that support the protocol.
|
|
70
|
+
* @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/
|
|
71
|
+
*/
|
|
72
|
+
kittyKeyboard?: KittyKeyboardOptions;
|
|
73
|
+
/**
|
|
74
|
+
* Maximum frames per second for render updates.
|
|
75
|
+
* This controls how frequently the UI can update to prevent excessive re-rendering.
|
|
76
|
+
*Higher values allow more frequent updates but may impact performance.
|
|
77
|
+
* @default 30
|
|
78
|
+
*/
|
|
79
|
+
maxFps?: number;
|
|
80
|
+
/**
|
|
81
|
+
* Runs the given callback after each render and re-render with render metrics.
|
|
82
|
+
*
|
|
83
|
+
* Note: this callback runs after Ink commits a frame, but it does not wait for `stdout`/`stderr` stream callbacks.
|
|
84
|
+
* To run code after output is flushed, use `waitUntilRenderFlush()`.
|
|
85
|
+
*/
|
|
86
|
+
onRender?: (metrics: RenderMetrics) => void;
|
|
87
|
+
/**
|
|
88
|
+
* Patch console methods to ensure console output doesn't mix with Ink's output.
|
|
89
|
+
*
|
|
90
|
+
*Note: Once unmount starts, Ink restores the native console before React cleanup runs. Teardown-time `console.*` output then follows the normal console behavior instead of being rerouted through Ink.
|
|
91
|
+
* @default true
|
|
92
|
+
*/
|
|
93
|
+
patchConsole?: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* If true, Ink defers frame output until after React's commit phase completes,
|
|
96
|
+
* ensuring `useLayoutEffect` hooks run before the frame is written to the terminal.
|
|
97
|
+
*
|
|
98
|
+
* This eliminates the one-frame flicker when components measure layout
|
|
99
|
+
* (e.g., scroll position, element size) in `useLayoutEffect` and adjust state.
|
|
100
|
+
*
|
|
101
|
+
* **Warning:** Incompatible with the `<Static>` component, which relies on
|
|
102
|
+
* immediate render timing to append output.
|
|
103
|
+
* @default false
|
|
104
|
+
*/
|
|
105
|
+
standardReactLayoutTiming?: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Error stream.
|
|
108
|
+
* @default process.stderr
|
|
109
|
+
*/
|
|
110
|
+
stderr?: NodeJS.WriteStream;
|
|
111
|
+
/**
|
|
112
|
+
* Input stream where app will listen for input.
|
|
113
|
+
* @default process.stdin
|
|
114
|
+
*/
|
|
115
|
+
stdin?: NodeJS.ReadStream;
|
|
116
|
+
/**
|
|
117
|
+
* Output stream where the app will be rendered.
|
|
118
|
+
* @default process.stdout
|
|
119
|
+
*/
|
|
120
|
+
stdout?: NodeJS.WriteStream;
|
|
121
|
+
/**
|
|
122
|
+
* Use the native Rust cell-diff renderer for terminal output.
|
|
123
|
+
* Produces a Uint32Array buffer that the Rust renderer diffs cell-by-cell,
|
|
124
|
+
* generating minimal ANSI escape sequences. Reduces GC pressure and
|
|
125
|
+
* improves rendering performance for complex UIs.
|
|
126
|
+
*
|
|
127
|
+
* Falls back to string-based rendering if native bindings are not available.
|
|
128
|
+
* @default false
|
|
129
|
+
*/
|
|
130
|
+
useNativeRenderer?: boolean;
|
|
131
|
+
};
|
|
132
|
+
export type Instance = {
|
|
133
|
+
/**
|
|
134
|
+
* Unmount the current app and remove the internal Ink instance for this stdout.
|
|
135
|
+
*
|
|
136
|
+
* This is mostly useful for advanced cases where you need `render()` to create a fresh instance for the same stream without leaving terminal state such as the alternate screen behind.
|
|
137
|
+
*/
|
|
138
|
+
cleanup: () => void;
|
|
139
|
+
/**
|
|
140
|
+
* Clear output.
|
|
141
|
+
*/
|
|
142
|
+
clear: () => void;
|
|
143
|
+
/**
|
|
144
|
+
* Replace the previous root node with a new one or update props of the current root node.
|
|
145
|
+
*/
|
|
146
|
+
rerender: Ink["render"];
|
|
147
|
+
/**
|
|
148
|
+
* The root DOM element of the rendered tree.
|
|
149
|
+
* Useful for programmatic DOM inspection and advanced measurement.
|
|
150
|
+
*/
|
|
151
|
+
rootNode: DOMElement;
|
|
152
|
+
/**
|
|
153
|
+
* Manually unmount the whole Ink app.
|
|
154
|
+
*/
|
|
155
|
+
unmount: Ink["unmount"];
|
|
156
|
+
/**
|
|
157
|
+
* Returns a promise that settles when the app is unmounted.
|
|
158
|
+
*
|
|
159
|
+
* It resolves with the value passed to `exit(value)` and rejects with the error passed to `exit(error)`.
|
|
160
|
+
*When `unmount()` is called manually, it settles after unmount-related stdout writes complete.
|
|
161
|
+
* @example
|
|
162
|
+
* ```jsx
|
|
163
|
+
* const {unmount, waitUntilExit} = render(<MyApp />);
|
|
164
|
+
*
|
|
165
|
+
* setTimeout(unmount, 1000);
|
|
166
|
+
*
|
|
167
|
+
* await waitUntilExit(); // resolves after `unmount()` is called
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
waitUntilExit: Ink["waitUntilExit"];
|
|
171
|
+
/**
|
|
172
|
+
* Returns a promise that settles after pending render output is flushed to stdout.
|
|
173
|
+
*
|
|
174
|
+
*This can be used after `rerender()` when you need to run code only after the frame is written.
|
|
175
|
+
* @example
|
|
176
|
+
* ```jsx
|
|
177
|
+
* const {rerender, waitUntilRenderFlush} = render(<MyApp step="loading" />);
|
|
178
|
+
*
|
|
179
|
+
* rerender(<MyApp step="ready" />);
|
|
180
|
+
* await waitUntilRenderFlush(); // output for "ready" is flushed
|
|
181
|
+
*
|
|
182
|
+
* runNextCommand();
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
185
|
+
waitUntilRenderFlush: Ink["waitUntilRenderFlush"];
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Mount a component and render the output.
|
|
189
|
+
*/
|
|
190
|
+
declare const render: (node: ReactNode, options?: NodeJS.WriteStream | RenderOptions) => Instance;
|
|
191
|
+
export default render;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DOMElement } from "./dom.d.ts";
|
|
2
|
+
import type { CursorPosition } from "./log-update.d.ts";
|
|
3
|
+
import type { Selection } from "./selection.d.ts";
|
|
4
|
+
type Result = {
|
|
5
|
+
cursorPosition: CursorPosition | undefined;
|
|
6
|
+
cursorRequested: boolean;
|
|
7
|
+
output: string;
|
|
8
|
+
outputBuffer?: Uint32Array;
|
|
9
|
+
outputHeight: number;
|
|
10
|
+
outputWidth?: number;
|
|
11
|
+
staticOutput: string;
|
|
12
|
+
};
|
|
13
|
+
declare const renderer: (node: DOMElement, isScreenReaderEnabled: boolean, options?: {
|
|
14
|
+
selection?: Selection;
|
|
15
|
+
useNativeRenderer?: boolean;
|
|
16
|
+
}) => Result;
|
|
17
|
+
export default renderer;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResizeObserver API for terminal UI elements.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the browser ResizeObserver API, allowing components to react
|
|
5
|
+
* to size changes of DOM elements after layout computation.
|
|
6
|
+
*
|
|
7
|
+
* Ported from jacob314/ink fork (Google LLC, Apache-2.0).
|
|
8
|
+
*/
|
|
9
|
+
import type { DOMElement } from "./dom.d.ts";
|
|
10
|
+
export type ResizeObserverCallback = (entries: ResizeObserverEntry[], observer: ResizeObserver) => void;
|
|
11
|
+
export declare class ResizeObserverEntry {
|
|
12
|
+
readonly target: DOMElement;
|
|
13
|
+
readonly contentRect: Readonly<{
|
|
14
|
+
height: number;
|
|
15
|
+
width: number;
|
|
16
|
+
}>;
|
|
17
|
+
constructor(target: DOMElement, contentRect: Readonly<{
|
|
18
|
+
height: number;
|
|
19
|
+
width: number;
|
|
20
|
+
}>);
|
|
21
|
+
}
|
|
22
|
+
declare class ResizeObserver {
|
|
23
|
+
private readonly callback;
|
|
24
|
+
private readonly observedElements;
|
|
25
|
+
constructor(callback: ResizeObserverCallback);
|
|
26
|
+
observe(element: DOMElement): void;
|
|
27
|
+
unobserve(element: DOMElement): void;
|
|
28
|
+
disconnect(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Internal method called by the layout engine after computing layout.
|
|
31
|
+
*/
|
|
32
|
+
internalTrigger(entries: ResizeObserverEntry[]): void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Measure a node and collect resize observer entries for it.
|
|
36
|
+
* Used by both the main render loop and static render processing.
|
|
37
|
+
*/
|
|
38
|
+
export declare function measureAndExtractObservers(node: DOMElement, observerEntries: Map<ResizeObserver, ResizeObserverEntry[]>, forceCache?: boolean): void;
|
|
39
|
+
/**
|
|
40
|
+
* Traverse a node tree, measure all nodes, and trigger resize observers.
|
|
41
|
+
* Skips into static/cached subtrees to avoid double-counting.
|
|
42
|
+
*/
|
|
43
|
+
export declare function triggerResizeObservers(node: DOMElement, forceCache?: boolean): void;
|
|
44
|
+
export default ResizeObserver;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DOMElement } from "./dom.d.ts";
|
|
2
|
+
export type ScrollState = {
|
|
3
|
+
actualScrollHeight: number;
|
|
4
|
+
clientHeight: number;
|
|
5
|
+
clientWidth: number;
|
|
6
|
+
scrollHeight: number;
|
|
7
|
+
scrollLeft: number;
|
|
8
|
+
scrollTop: number;
|
|
9
|
+
scrollWidth: number;
|
|
10
|
+
};
|
|
11
|
+
export declare const getScrollHeight: (node: DOMElement) => number;
|
|
12
|
+
export declare const getScrollWidth: (node: DOMElement) => number;
|
|
13
|
+
export declare const calculateScroll: (node: DOMElement) => void;
|
|
14
|
+
/**
|
|
15
|
+
* Get the effective scroll top position from the pre-computed scroll state.
|
|
16
|
+
* Falls back to computing from style if scroll state hasn't been calculated yet.
|
|
17
|
+
*/
|
|
18
|
+
export declare const getScrollTop: (node: DOMElement) => number;
|
|
19
|
+
/**
|
|
20
|
+
* Get the effective scroll left position from the pre-computed scroll state.
|
|
21
|
+
* Falls back to computing from style if scroll state hasn't been calculated yet.
|
|
22
|
+
*/
|
|
23
|
+
export declare const getScrollLeft: (node: DOMElement) => number;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM-like Selection and Range API for terminal text selection.
|
|
3
|
+
*
|
|
4
|
+
* Provides browser-like Selection/Range classes that operate on the Ink DOM tree,
|
|
5
|
+
* enabling text selection highlighting and copy-to-clipboard functionality.
|
|
6
|
+
*
|
|
7
|
+
* Ported from jacob314/ink fork (Google LLC, Apache-2.0).
|
|
8
|
+
*/
|
|
9
|
+
import type { DOMNode } from "./dom.d.ts";
|
|
10
|
+
import type { StyledLine } from "./styled-line.d.ts";
|
|
11
|
+
/**
|
|
12
|
+
* Compare the document position of two points in the DOM tree.
|
|
13
|
+
* Returns -1 if A is before B, 0 if equal, 1 if A is after B.
|
|
14
|
+
*/
|
|
15
|
+
export declare const comparePoints: (nodeA: DOMNode, offsetA: number, nodeB: DOMNode, offsetB: number) => number;
|
|
16
|
+
/**
|
|
17
|
+
* A Range represents a contiguous portion of the DOM tree.
|
|
18
|
+
* Modeled after the browser's Range API.
|
|
19
|
+
*/
|
|
20
|
+
export declare class Range {
|
|
21
|
+
startContainer: DOMNode | undefined;
|
|
22
|
+
startOffset: number;
|
|
23
|
+
endContainer: DOMNode | undefined;
|
|
24
|
+
endOffset: number;
|
|
25
|
+
collapsed: boolean;
|
|
26
|
+
commonAncestorContainer: DOMNode | undefined;
|
|
27
|
+
setStart(node: DOMNode, offset: number): void;
|
|
28
|
+
setEnd(node: DOMNode, offset: number): void;
|
|
29
|
+
collapse(toStart: boolean): void;
|
|
30
|
+
selectNode(node: DOMNode): void;
|
|
31
|
+
selectNodeContents(node: DOMNode): void;
|
|
32
|
+
toString(): string;
|
|
33
|
+
private updateCollapsed;
|
|
34
|
+
private updateCommonAncestor;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Manages multiple Range objects and provides high-level selection operations.
|
|
38
|
+
* Modeled after the browser's Selection API.
|
|
39
|
+
*/
|
|
40
|
+
export declare class Selection {
|
|
41
|
+
anchorNode: DOMNode | undefined;
|
|
42
|
+
anchorOffset: number;
|
|
43
|
+
focusNode: DOMNode | undefined;
|
|
44
|
+
focusOffset: number;
|
|
45
|
+
isCollapsed: boolean;
|
|
46
|
+
rangeCount: number;
|
|
47
|
+
private ranges;
|
|
48
|
+
private readonly listeners;
|
|
49
|
+
onChange(listener: () => void): () => void;
|
|
50
|
+
toString(): string;
|
|
51
|
+
getRangeAt(index: number): Range;
|
|
52
|
+
addRange(range: Range): void;
|
|
53
|
+
removeRange(range: Range): void;
|
|
54
|
+
removeAllRanges(): void;
|
|
55
|
+
collapse(node: DOMNode, offset: number): void;
|
|
56
|
+
containsNode(node: DOMNode, allowPartialContainment?: boolean): boolean;
|
|
57
|
+
private clearState;
|
|
58
|
+
private notifyChange;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Apply selection highlighting to a range of characters in a StyledLine.
|
|
62
|
+
*
|
|
63
|
+
* Characters whose index falls within [start, end) of the selection range
|
|
64
|
+
* get the INVERSE style flag applied. Returns a new StyledLine with the
|
|
65
|
+
* selection highlighting — the original is not mutated.
|
|
66
|
+
*/
|
|
67
|
+
export declare const applySelectionToStyledLine: (line: StyledLine, range: {
|
|
68
|
+
end: number;
|
|
69
|
+
start: number;
|
|
70
|
+
}) => StyledLine;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DOMElement, DOMNode } from "./dom.d.ts";
|
|
2
|
+
export type CharOffsetRange = {
|
|
3
|
+
end: number;
|
|
4
|
+
start: number;
|
|
5
|
+
};
|
|
6
|
+
export type CharOffsetMap = Map<DOMNode, CharOffsetRange>;
|
|
7
|
+
declare const squashTextNodes: (node: DOMElement) => string;
|
|
8
|
+
export default squashTextNodes;
|
|
9
|
+
/**
|
|
10
|
+
* Squash text nodes while building a character offset map.
|
|
11
|
+
* Each DOM node is mapped to its start/end character offsets in the resulting string.
|
|
12
|
+
* Used for selection text extraction and cursor position calculation.
|
|
13
|
+
*
|
|
14
|
+
* Ported from jacob314/ink fork (Google LLC, Apache-2.0).
|
|
15
|
+
*/
|
|
16
|
+
export declare const squashTextNodesWithMap: (node: DOMElement, map: CharOffsetMap, offsetRef: {
|
|
17
|
+
current: number;
|
|
18
|
+
}) => string;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitmask constants for text formatting flags used by StyledLine.
|
|
3
|
+
*
|
|
4
|
+
* These map 1:1 to SGR (Select Graphic Rendition) attributes and are stored
|
|
5
|
+
* in the `formatFlags` field of StyleSpan objects. The FULL_WIDTH_MASK is
|
|
6
|
+
* also used in StyledLine.charData entries (bit 30 / 0x40000000 of number[]).
|
|
7
|
+
*
|
|
8
|
+
* Ported from jacob314/ink (Google LLC, Apache-2.0).
|
|
9
|
+
*/
|
|
10
|
+
export declare const BOLD_MASK: number;
|
|
11
|
+
export declare const DIM_MASK: number;
|
|
12
|
+
export declare const ITALIC_MASK: number;
|
|
13
|
+
export declare const UNDERLINE_MASK: number;
|
|
14
|
+
export declare const STRIKETHROUGH_MASK: number;
|
|
15
|
+
export declare const INVERSE_MASK: number;
|
|
16
|
+
export declare const HIDDEN_MASK: number;
|
|
17
|
+
export declare const FULL_WIDTH_MASK: number;
|