@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,34 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode } from "react";
|
|
2
|
+
type Props = {
|
|
3
|
+
readonly children: ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* Determines whether the URL should be printed for unsupported terminals.
|
|
6
|
+
*
|
|
7
|
+
* - `true` (default): appends the URL after the text, e.g. `"My website https://example.com"`
|
|
8
|
+
* - `false`: renders just the text with no URL
|
|
9
|
+
* - `function`: custom fallback formatting, e.g. `(text, url) => \`[\${text}](\${url})\``
|
|
10
|
+
* @default true
|
|
11
|
+
*/
|
|
12
|
+
readonly fallback?: ((text: string, url: string) => string) | boolean;
|
|
13
|
+
/**
|
|
14
|
+
* The URL to link to.
|
|
15
|
+
*/
|
|
16
|
+
readonly url: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* An Ink component that creates clickable links in the terminal using OSC 8 hyperlink sequences.
|
|
20
|
+
*
|
|
21
|
+
* [Supported terminals.](https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)
|
|
22
|
+
*
|
|
23
|
+
* For unsupported terminals, the link will be printed after the text: `My website https://example.com`.
|
|
24
|
+
*
|
|
25
|
+
* ```tsx
|
|
26
|
+
* import { Link, Text } from "@visulima/tui/ink";
|
|
27
|
+
*
|
|
28
|
+
* <Link url="https://example.com">
|
|
29
|
+
* <Text color="cyan">My Website</Text>
|
|
30
|
+
* </Link>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export default function Link({ children, fallback, url }: Props): ReactElement;
|
|
34
|
+
export type { Props };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
export type Props = {
|
|
3
|
+
/**
|
|
4
|
+
* The Markdown source string.
|
|
5
|
+
*/
|
|
6
|
+
readonly children: string;
|
|
7
|
+
/**
|
|
8
|
+
* Shiki theme for code block syntax highlighting.
|
|
9
|
+
* @default "github-dark-default"
|
|
10
|
+
*/
|
|
11
|
+
readonly codeTheme?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Maximum width for text wrapping. Defaults to terminal width.
|
|
14
|
+
*/
|
|
15
|
+
readonly maxWidth?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Enable streaming mode for progressive rendering.
|
|
18
|
+
* When true, the component re-renders on every prop change and handles
|
|
19
|
+
* incomplete Markdown gracefully (e.g., unclosed code fences, partial lists).
|
|
20
|
+
* Useful for rendering AI-generated text arriving token-by-token.
|
|
21
|
+
* @default false
|
|
22
|
+
*/
|
|
23
|
+
readonly streaming?: boolean;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Render Markdown content as Ink terminal UI elements.
|
|
27
|
+
*
|
|
28
|
+
* ```tsx
|
|
29
|
+
* <Markdown>{"# Hello\n\nThis is **bold** and *italic*."}</Markdown>
|
|
30
|
+
* <Markdown codeTheme="github-dark-default">{"```js\nconst x = 1;\n```"}</Markdown>
|
|
31
|
+
* <Markdown streaming>{"# Streaming\n\nText arriving..."}</Markdown>
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export default function Markdown({ children, codeTheme, maxWidth: maxWidthProp, streaming }: Props): ReactElement;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-select input component for Ink.
|
|
3
|
+
*
|
|
4
|
+
* Inspired by ink-ui MultiSelect by Vadim Demedes.
|
|
5
|
+
* @see https://github.com/vadimdemedes/ink-ui
|
|
6
|
+
*
|
|
7
|
+
* MIT License
|
|
8
|
+
* Copyright (c) Vadym Demedes (github.com/vadimdemedes)
|
|
9
|
+
*/
|
|
10
|
+
import type { AnsiColors } from "@visulima/colorize";
|
|
11
|
+
import type { ReactElement } from "react";
|
|
12
|
+
import type { LiteralUnion } from "type-fest";
|
|
13
|
+
export type MultiSelectOption = {
|
|
14
|
+
readonly key?: string;
|
|
15
|
+
readonly label: string;
|
|
16
|
+
readonly value: string;
|
|
17
|
+
};
|
|
18
|
+
export type Props = {
|
|
19
|
+
/**
|
|
20
|
+
* Color for the focused item indicator and selected checkmarks.
|
|
21
|
+
* @default "blue"
|
|
22
|
+
*/
|
|
23
|
+
readonly accentColor?: LiteralUnion<AnsiColors, string>;
|
|
24
|
+
/**
|
|
25
|
+
* Color for unselected, unfocused option labels.
|
|
26
|
+
*/
|
|
27
|
+
readonly defaultColor?: LiteralUnion<AnsiColors, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Initially selected values.
|
|
30
|
+
*/
|
|
31
|
+
readonly defaultValue?: ReadonlyArray<string>;
|
|
32
|
+
/**
|
|
33
|
+
* When true, all input is ignored and labels are dimmed.
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
readonly isDisabled?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Whether the parent has focus. When false, indicators are dimmed.
|
|
39
|
+
* @default true
|
|
40
|
+
*/
|
|
41
|
+
readonly isFocused?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Number of visible options before scrolling.
|
|
44
|
+
* When omitted, auto-limits to terminal height.
|
|
45
|
+
*/
|
|
46
|
+
readonly limit?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Fires when the set of selected values changes (space to toggle).
|
|
49
|
+
*/
|
|
50
|
+
readonly onChange?: (values: ReadonlyArray<string>) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Fires when the user presses Enter to submit.
|
|
53
|
+
*/
|
|
54
|
+
readonly onSubmit?: (values: ReadonlyArray<string>) => void;
|
|
55
|
+
/**
|
|
56
|
+
* Available choices to pick from.
|
|
57
|
+
*/
|
|
58
|
+
readonly options: ReadonlyArray<MultiSelectOption>;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Renders a multi-choice selection list with checkboxes and keyboard navigation.
|
|
62
|
+
*/
|
|
63
|
+
export default function MultiSelect({ accentColor, defaultColor, defaultValue, isDisabled, isFocused, limit: customLimit, onChange, onSubmit, options, }: Props): ReactElement;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
export type Props = {
|
|
3
|
+
/**
|
|
4
|
+
* Number of newlines to insert.
|
|
5
|
+
* @default 1
|
|
6
|
+
*/
|
|
7
|
+
readonly count?: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Adds one or more newline (`\n`) characters. Must be used within `<Text>` components.
|
|
11
|
+
*/
|
|
12
|
+
export default function Newline({ count }: Props): ReactElement;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ordered list component for Ink.
|
|
3
|
+
*
|
|
4
|
+
* Inspired by ink-ui OrderedList by Vadim Demedes.
|
|
5
|
+
* @see https://github.com/vadimdemedes/ink-ui
|
|
6
|
+
*
|
|
7
|
+
* MIT License
|
|
8
|
+
* Copyright (c) Vadym Demedes (github.com/vadimdemedes)
|
|
9
|
+
*/
|
|
10
|
+
import type { ReactElement, ReactNode } from "react";
|
|
11
|
+
export type OrderedListEntry = {
|
|
12
|
+
/**
|
|
13
|
+
* Nested sub-items, rendered as a sub-list with hierarchical numbering.
|
|
14
|
+
*/
|
|
15
|
+
readonly children?: ReadonlyArray<OrderedListEntry>;
|
|
16
|
+
/**
|
|
17
|
+
* Display text for this item.
|
|
18
|
+
*/
|
|
19
|
+
readonly label: ReactNode;
|
|
20
|
+
};
|
|
21
|
+
export type Props = {
|
|
22
|
+
/**
|
|
23
|
+
* Entries to render as a numbered list.
|
|
24
|
+
*/
|
|
25
|
+
readonly items: ReadonlyArray<OrderedListEntry>;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Renders a numbered list with hierarchical nesting support.
|
|
29
|
+
*/
|
|
30
|
+
export default function OrderedList({ items }: Props): ReactElement;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Metadata about the current page state, passed to the render-prop children.
|
|
4
|
+
*/
|
|
5
|
+
export type PageMeta = {
|
|
6
|
+
readonly currentPage: number;
|
|
7
|
+
readonly endIndex: number;
|
|
8
|
+
readonly isFirstPage: boolean;
|
|
9
|
+
readonly isLastPage: boolean;
|
|
10
|
+
readonly startIndex: number;
|
|
11
|
+
readonly totalPages: number;
|
|
12
|
+
};
|
|
13
|
+
export type Props<T> = {
|
|
14
|
+
/**
|
|
15
|
+
* Render-prop that receives the current page items and page metadata.
|
|
16
|
+
*/
|
|
17
|
+
readonly children: (pageItems: readonly T[], meta: PageMeta) => ReactNode;
|
|
18
|
+
/**
|
|
19
|
+
* Uncontrolled initial page (0-indexed).
|
|
20
|
+
*
|
|
21
|
+
* @default 0
|
|
22
|
+
*/
|
|
23
|
+
readonly defaultPage?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Color for the active page indicator.
|
|
26
|
+
*
|
|
27
|
+
* @default "cyan"
|
|
28
|
+
*/
|
|
29
|
+
readonly indicatorColor?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Whether keyboard navigation is active.
|
|
32
|
+
*
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
35
|
+
readonly isFocused?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* The full list of items to paginate.
|
|
38
|
+
*/
|
|
39
|
+
readonly items: readonly T[];
|
|
40
|
+
/**
|
|
41
|
+
* Called when the page changes.
|
|
42
|
+
*/
|
|
43
|
+
readonly onChange?: (page: number) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Controlled current page (0-indexed). When provided, the component is controlled.
|
|
46
|
+
*/
|
|
47
|
+
readonly page?: number;
|
|
48
|
+
/**
|
|
49
|
+
* Number of items per page.
|
|
50
|
+
*/
|
|
51
|
+
readonly pageSize: number;
|
|
52
|
+
/**
|
|
53
|
+
* Indicator style.
|
|
54
|
+
* - `"dots"`: `● ○ ○ ○`
|
|
55
|
+
* - `"numeric"`: `‹ 1 / 4 ›`
|
|
56
|
+
* - `"fraction"`: `1/4`
|
|
57
|
+
*
|
|
58
|
+
* @default "dots"
|
|
59
|
+
*/
|
|
60
|
+
readonly style?: "dots" | "fraction" | "numeric";
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Paginator component with render-prop children and a page indicator.
|
|
64
|
+
*
|
|
65
|
+
* ```tsx
|
|
66
|
+
* <Paginator items={allItems} pageSize={5}>
|
|
67
|
+
* {(pageItems, meta) => (
|
|
68
|
+
* <Box flexDirection="column">
|
|
69
|
+
* {pageItems.map((item, i) => <Text key={i}>{item}</Text>)}
|
|
70
|
+
* </Box>
|
|
71
|
+
* )}
|
|
72
|
+
* </Paginator>
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export default function Paginator<T>({ children, defaultPage, indicatorColor, isFocused, items, onChange, page: controlledPage, pageSize, style, }: Props<T>): ReactElement;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress bar component for Ink.
|
|
3
|
+
*
|
|
4
|
+
* Based on ink-progress-bar by Frankie Bagnardi (brigand).
|
|
5
|
+
* @see https://github.com/brigand/ink-progress-bar
|
|
6
|
+
*
|
|
7
|
+
* MIT License
|
|
8
|
+
* Copyright (c) Frankie Bagnardi
|
|
9
|
+
*/
|
|
10
|
+
import type { ReactElement } from "react";
|
|
11
|
+
import type { Props as TextProps } from "./Text.d.ts";
|
|
12
|
+
export type Props = {
|
|
13
|
+
/** Fill glyph repeated across the completed portion of the progress bar. Defaults to "█". */
|
|
14
|
+
readonly character?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Override the terminal width used for calculation.
|
|
17
|
+
* When 0, uses the actual terminal width.
|
|
18
|
+
* @default 0
|
|
19
|
+
*/
|
|
20
|
+
readonly columns?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Number of columns reserved on the left side (e.g. for labels).
|
|
23
|
+
* @default 0
|
|
24
|
+
*/
|
|
25
|
+
readonly left?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Completion percentage between 0 and 1.
|
|
28
|
+
* @default 1
|
|
29
|
+
*/
|
|
30
|
+
readonly percent?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Number of columns reserved on the right side (e.g. for percentage text).
|
|
33
|
+
* @default 0
|
|
34
|
+
*/
|
|
35
|
+
readonly right?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Whether to pad the remaining space with whitespace.
|
|
38
|
+
* Useful when rendering the bar over a background color.
|
|
39
|
+
* @default false
|
|
40
|
+
*/
|
|
41
|
+
readonly rightPad?: boolean;
|
|
42
|
+
} & Omit<TextProps, "children">;
|
|
43
|
+
/**
|
|
44
|
+
* A terminal progress bar that fills proportionally to a percentage value.
|
|
45
|
+
*
|
|
46
|
+
* ```tsx
|
|
47
|
+
* <ProgressBar percent={0.5} />
|
|
48
|
+
* <ProgressBar percent={0.75} color="green" left={10} right={5} />
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export default function ProgressBar({ character, columns: columnsProp, left, percent, right, rightPad, ...textProps }: Props): ReactElement;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { AnsiColors } from "@visulima/colorize";
|
|
2
|
+
import type { FC, ReactElement } from "react";
|
|
3
|
+
import type { LiteralUnion } from "type-fest";
|
|
4
|
+
import type { Props as IndicatorProps } from "./SelectInputIndicator.d.ts";
|
|
5
|
+
import type { Props as ItemProps } from "./SelectInputItem.d.ts";
|
|
6
|
+
export type Item<V> = {
|
|
7
|
+
/**
|
|
8
|
+
* Called automatically when this item is selected (via Enter or number key).
|
|
9
|
+
* Fires after `onSelect`. Useful for defining per-item behavior inline.
|
|
10
|
+
*/
|
|
11
|
+
readonly action?: () => void;
|
|
12
|
+
readonly key?: string;
|
|
13
|
+
readonly label: string;
|
|
14
|
+
readonly value: V;
|
|
15
|
+
};
|
|
16
|
+
export type SeparatorItem = {
|
|
17
|
+
/**
|
|
18
|
+
* Marks this entry as a non-focusable separator line.
|
|
19
|
+
*/
|
|
20
|
+
readonly isSeparator: true;
|
|
21
|
+
readonly key?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Custom separator text. Defaults to `"───"`.
|
|
24
|
+
*/
|
|
25
|
+
readonly label?: string;
|
|
26
|
+
};
|
|
27
|
+
export type SelectInputEntry<V> = Item<V> | SeparatorItem;
|
|
28
|
+
export type Props<V> = {
|
|
29
|
+
/**
|
|
30
|
+
* Color used for the selected item and indicator.
|
|
31
|
+
* @default "blue"
|
|
32
|
+
*/
|
|
33
|
+
readonly accentColor?: LiteralUnion<AnsiColors, string>;
|
|
34
|
+
/**
|
|
35
|
+
* Color used for unselected items.
|
|
36
|
+
*/
|
|
37
|
+
readonly defaultColor?: LiteralUnion<AnsiColors, string>;
|
|
38
|
+
/**
|
|
39
|
+
* Controlled selected index. When provided, the component becomes controlled
|
|
40
|
+
* and `initialIndex` is ignored. Update this value in the `onHighlight` callback
|
|
41
|
+
* to track selection externally. If the index points to a separator, the nearest
|
|
42
|
+
* selectable item is highlighted instead.
|
|
43
|
+
*/
|
|
44
|
+
readonly index?: number;
|
|
45
|
+
/**
|
|
46
|
+
* Custom component to override the default indicator component.
|
|
47
|
+
*/
|
|
48
|
+
readonly indicatorComponent?: FC<IndicatorProps>;
|
|
49
|
+
/**
|
|
50
|
+
* Index of initially-selected item in `items` array.
|
|
51
|
+
* Ignored when `index` is provided.
|
|
52
|
+
* When omitted (`undefined`), no item is highlighted until the user presses a key.
|
|
53
|
+
* If the index points to a separator, the nearest selectable item is used.
|
|
54
|
+
*/
|
|
55
|
+
readonly initialIndex?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Whether the input is focused. Useful for when there are multiple
|
|
58
|
+
* inputs on the screen and you need to control which one captures input.
|
|
59
|
+
* @default true
|
|
60
|
+
*/
|
|
61
|
+
readonly isFocused?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Custom component to override the default item component.
|
|
64
|
+
*/
|
|
65
|
+
readonly itemComponent?: FC<ItemProps>;
|
|
66
|
+
/** @default [] */
|
|
67
|
+
readonly items?: ReadonlyArray<SelectInputEntry<V>>;
|
|
68
|
+
/**
|
|
69
|
+
* Number of visible items. Useful if the list is long and you want
|
|
70
|
+
* to limit the display with a scrolling window.
|
|
71
|
+
*/
|
|
72
|
+
readonly limit?: number;
|
|
73
|
+
/**
|
|
74
|
+
* Called when the user highlights a new item via arrow keys or `j`/`k`.
|
|
75
|
+
* The second argument is the index of the highlighted item in the visible list.
|
|
76
|
+
*/
|
|
77
|
+
readonly onHighlight?: (item: Item<V>, index: number) => void;
|
|
78
|
+
/**
|
|
79
|
+
* Called when the user selects an item via Enter or a number key (1-9).
|
|
80
|
+
*/
|
|
81
|
+
readonly onSelect?: (item: Item<V>) => void;
|
|
82
|
+
/**
|
|
83
|
+
* Whether to reset the selection when items change.
|
|
84
|
+
* Set to `false` to preserve the current selection across item updates.
|
|
85
|
+
* @default true
|
|
86
|
+
*/
|
|
87
|
+
readonly resetOnItemsChange?: boolean;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* A select input component for terminal UIs.
|
|
91
|
+
*
|
|
92
|
+
* Renders a list of items with an indicator showing the currently highlighted item.
|
|
93
|
+
* Users can navigate with arrow keys or `j`/`k`, select with Enter, or jump to an
|
|
94
|
+
* item by pressing a number key (1-9).
|
|
95
|
+
*/
|
|
96
|
+
export default function SelectInput<V>({ accentColor, defaultColor, index, indicatorComponent, initialIndex, isFocused, itemComponent, items, limit: customLimit, onHighlight, onSelect, resetOnItemsChange, }: Props<V>): ReactElement;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default indicator component for SelectInput.
|
|
3
|
+
*
|
|
4
|
+
* Based on ink-select-input by Vadim Demedes.
|
|
5
|
+
* @see https://github.com/vadimdemedes/ink-select-input
|
|
6
|
+
*
|
|
7
|
+
* MIT License
|
|
8
|
+
* Copyright (c) Vadym Demedes (github.com/vadimdemedes)
|
|
9
|
+
*/
|
|
10
|
+
import type { AnsiColors } from "@visulima/colorize";
|
|
11
|
+
import type { ReactElement } from "react";
|
|
12
|
+
import type { LiteralUnion } from "type-fest";
|
|
13
|
+
export type Props = {
|
|
14
|
+
/**
|
|
15
|
+
* Color of the indicator when selected.
|
|
16
|
+
* @default "blue"
|
|
17
|
+
*/
|
|
18
|
+
readonly accentColor?: LiteralUnion<AnsiColors, string>;
|
|
19
|
+
/**
|
|
20
|
+
* Whether the parent SelectInput has focus.
|
|
21
|
+
* When `false`, the indicator is dimmed even if the item is selected.
|
|
22
|
+
* @default true
|
|
23
|
+
*/
|
|
24
|
+
readonly isFocused?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Whether this indicator's item is currently selected.
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
readonly isSelected?: boolean;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Renders a pointer indicator next to the selected item, or a blank space otherwise.
|
|
33
|
+
* When unfocused, the indicator is rendered with `dimColor` to visually distinguish
|
|
34
|
+
* the active select input from inactive ones.
|
|
35
|
+
*/
|
|
36
|
+
export default function SelectInputIndicator({ accentColor, isFocused, isSelected }: Props): ReactElement;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default item component for SelectInput.
|
|
3
|
+
*
|
|
4
|
+
* Based on ink-select-input by Vadim Demedes.
|
|
5
|
+
* @see https://github.com/vadimdemedes/ink-select-input
|
|
6
|
+
*
|
|
7
|
+
* MIT License
|
|
8
|
+
* Copyright (c) Vadym Demedes (github.com/vadimdemedes)
|
|
9
|
+
*/
|
|
10
|
+
import type { AnsiColors } from "@visulima/colorize";
|
|
11
|
+
import type { ReactElement } from "react";
|
|
12
|
+
import type { LiteralUnion } from "type-fest";
|
|
13
|
+
export type Props = {
|
|
14
|
+
/**
|
|
15
|
+
* Color of the label when selected.
|
|
16
|
+
* @default "blue"
|
|
17
|
+
*/
|
|
18
|
+
readonly accentColor?: LiteralUnion<AnsiColors, string>;
|
|
19
|
+
/**
|
|
20
|
+
* Color of the label when not selected.
|
|
21
|
+
*/
|
|
22
|
+
readonly defaultColor?: LiteralUnion<AnsiColors, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Whether the parent SelectInput has focus.
|
|
25
|
+
* When `false`, the selected item is dimmed.
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
readonly isFocused?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Whether this item is currently selected.
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
readonly isSelected?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Text label to display for this item.
|
|
36
|
+
*/
|
|
37
|
+
readonly label: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Renders an item label, using `accentColor` when selected and `defaultColor` otherwise.
|
|
41
|
+
* When unfocused, selected items are rendered with `dimColor`.
|
|
42
|
+
*/
|
|
43
|
+
export default function SelectInputItem({ accentColor, defaultColor, isFocused, isSelected, label }: Props): ReactElement;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slider component for Ink.
|
|
3
|
+
*
|
|
4
|
+
* A keyboard-driven range input for terminal UIs, supporting
|
|
5
|
+
* horizontal and vertical orientations.
|
|
6
|
+
*/
|
|
7
|
+
import type { AnsiColors } from "@visulima/colorize";
|
|
8
|
+
import type { ReactElement } from "react";
|
|
9
|
+
import type { LiteralUnion } from "type-fest";
|
|
10
|
+
export type Props = {
|
|
11
|
+
/**
|
|
12
|
+
* Accent color for the filled portion of the track and thumb.
|
|
13
|
+
* @default "green"
|
|
14
|
+
*/
|
|
15
|
+
readonly accentColor?: LiteralUnion<AnsiColors, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Color for the empty portion of the track.
|
|
18
|
+
* @default "gray"
|
|
19
|
+
*/
|
|
20
|
+
readonly defaultColor?: LiteralUnion<AnsiColors, string>;
|
|
21
|
+
/**
|
|
22
|
+
* Initial value when uncontrolled.
|
|
23
|
+
* @default 0
|
|
24
|
+
*/
|
|
25
|
+
readonly defaultValue?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Character used for the empty portion of the track.
|
|
28
|
+
* @default "░"
|
|
29
|
+
*/
|
|
30
|
+
readonly emptyCharacter?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Character used for the filled portion of the track.
|
|
33
|
+
* @default "█"
|
|
34
|
+
*/
|
|
35
|
+
readonly filledCharacter?: string;
|
|
36
|
+
/**
|
|
37
|
+
* When true, all input is ignored and the slider is dimmed.
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
readonly isDisabled?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* When true, the component responds to keyboard input.
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
readonly isFocused?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Maximum value.
|
|
48
|
+
* @default 100
|
|
49
|
+
*/
|
|
50
|
+
readonly max?: number;
|
|
51
|
+
/**
|
|
52
|
+
* Minimum value.
|
|
53
|
+
* @default 0
|
|
54
|
+
*/
|
|
55
|
+
readonly min?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Fires whenever the value changes.
|
|
58
|
+
*/
|
|
59
|
+
readonly onChange?: (value: number) => void;
|
|
60
|
+
/**
|
|
61
|
+
* Layout direction of the slider.
|
|
62
|
+
* @default "horizontal"
|
|
63
|
+
*/
|
|
64
|
+
readonly orientation?: "horizontal" | "vertical";
|
|
65
|
+
/**
|
|
66
|
+
* Increment size for arrow key presses.
|
|
67
|
+
* @default 1
|
|
68
|
+
*/
|
|
69
|
+
readonly step?: number;
|
|
70
|
+
/**
|
|
71
|
+
* Character used to indicate the current position.
|
|
72
|
+
* @default "●"
|
|
73
|
+
*/
|
|
74
|
+
readonly thumbCharacter?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Controlled value. When provided, `defaultValue` is ignored.
|
|
77
|
+
*/
|
|
78
|
+
readonly value?: number;
|
|
79
|
+
/**
|
|
80
|
+
* Width of the slider track in columns (horizontal) or rows (vertical).
|
|
81
|
+
* @default 20
|
|
82
|
+
*/
|
|
83
|
+
readonly width?: number;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* A keyboard-driven slider / range input.
|
|
87
|
+
*
|
|
88
|
+
* ```tsx
|
|
89
|
+
* <Slider defaultValue={50} min={0} max={100} onChange={setValue} />
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export default function Slider({ accentColor, defaultColor, defaultValue, emptyCharacter, filledCharacter, isDisabled, isFocused, max, min, onChange, orientation, step, thumbCharacter, value: controlledValue, width, }: Props): ReactElement;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* A flexible space that expands along the major axis of its containing layout.
|
|
4
|
+
*
|
|
5
|
+
* It's useful as a shortcut for filling all the available space between elements.
|
|
6
|
+
*/
|
|
7
|
+
export default function Spacer(): ReactElement;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner component for Ink.
|
|
3
|
+
*
|
|
4
|
+
* Based on ink-spinner by Vadim Demedes.
|
|
5
|
+
* @see https://github.com/vadimdemedes/ink-spinner
|
|
6
|
+
*
|
|
7
|
+
* MIT License
|
|
8
|
+
* Copyright (c) Vadym Demedes (github.com/vadimdemedes)
|
|
9
|
+
*
|
|
10
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
11
|
+
* this software and associated documentation files (the "Software"), to deal in the
|
|
12
|
+
* Software without restriction, including without limitation the rights to use, copy,
|
|
13
|
+
* modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
14
|
+
* and to permit persons to whom the Software is furnished to do so, subject to the
|
|
15
|
+
* following conditions:
|
|
16
|
+
*
|
|
17
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
* copies or substantial portions of the Software.
|
|
19
|
+
*
|
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
21
|
+
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
22
|
+
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
23
|
+
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
24
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
25
|
+
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
|
+
*/
|
|
27
|
+
import type { SpinnerName } from "cli-spinners";
|
|
28
|
+
import type { ReactElement } from "react";
|
|
29
|
+
export type Props = {
|
|
30
|
+
/**
|
|
31
|
+
* Type of a spinner.
|
|
32
|
+
* See [cli-spinners](https://github.com/sindresorhus/cli-spinners) for available spinners.
|
|
33
|
+
* @default "dots"
|
|
34
|
+
*/
|
|
35
|
+
readonly type?: SpinnerName;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Spinner component that renders an animated loading indicator.
|
|
39
|
+
*
|
|
40
|
+
* Uses spinners from [cli-spinners](https://github.com/sindresorhus/cli-spinners).
|
|
41
|
+
*/
|
|
42
|
+
export default function Spinner({ type }: Props): ReactElement;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode } from "react";
|
|
2
|
+
import type { Styles } from "../styles.d.ts";
|
|
3
|
+
export type Props<T> = {
|
|
4
|
+
/**
|
|
5
|
+
* Function that is called to render every item in the `items` array. The first argument is the item itself, and the second argument is the index of that item in the `items` array. Note that a `key` must be assigned to the root component.
|
|
6
|
+
*/
|
|
7
|
+
readonly children: (item: T, index: number) => ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Array of items of any type to render using the function you pass as a component child.
|
|
10
|
+
*/
|
|
11
|
+
readonly items: T[];
|
|
12
|
+
/**
|
|
13
|
+
* Styles to apply to a container of child elements. See <Box> for supported properties.
|
|
14
|
+
*/
|
|
15
|
+
readonly style?: Styles;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* `<Static>` component permanently renders its output above everything else. It's useful for displaying activity like completed tasks or logs—things that don't change after they're rendered (hence the name "Static").
|
|
19
|
+
*
|
|
20
|
+
* It's preferred to use `<Static>` for use cases like these when you can't know or control the number of items that need to be rendered.
|
|
21
|
+
*
|
|
22
|
+
* For example, [Tap](https://github.com/tapjs/node-tap) uses `<Static>` to display a list of completed tests. [Gatsby](https://github.com/gatsbyjs/gatsby) uses it to display a list of generated pages while still displaying a live progress bar.
|
|
23
|
+
*/
|
|
24
|
+
export default function Static<T>(props: Props<T>): ReactElement;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StaticRender component — pre-renders children once and caches the result.
|
|
3
|
+
*
|
|
4
|
+
* When mounted, StaticRender renders its children into a Region via
|
|
5
|
+
* prepareYogaTree() in the Ink layout phase, then caches the result on the
|
|
6
|
+
* DOM node. On subsequent renders, the cached Region is composited directly
|
|
7
|
+
* via addRegionTree(), skipping the entire subtree traversal.
|
|
8
|
+
*
|
|
9
|
+
* Children are passed as a render function `() => ReactNode`. Once the cache
|
|
10
|
+
* is ready, the component stops calling the function so React does not
|
|
11
|
+
* re-reconcile the subtree on subsequent renders.
|
|
12
|
+
*
|
|
13
|
+
* Use this for content that renders once and doesn't change (e.g., completed
|
|
14
|
+
* task output, logged messages, static headers).
|
|
15
|
+
*
|
|
16
|
+
* Ported from jacob314/ink (Google LLC, Apache-2.0).
|
|
17
|
+
* @license Apache-2.0
|
|
18
|
+
*/
|
|
19
|
+
import type { ReactNode } from "react";
|
|
20
|
+
import React from "react";
|
|
21
|
+
import type { Styles } from "../styles.d.ts";
|
|
22
|
+
export type Props = {
|
|
23
|
+
readonly children: () => ReactNode;
|
|
24
|
+
readonly style?: Styles;
|
|
25
|
+
readonly width?: number;
|
|
26
|
+
};
|
|
27
|
+
declare const StaticRender: ({ children, style, width }: Props) => React.ReactNode;
|
|
28
|
+
export default StaticRender;
|