@vancityayush/tui
v0.1.1
Published
Rich React+Yoga terminal UI engine: synchronized output, alt-screen, hyperlinks, focus manager, selection/copy, theming, keybindings, vim-mode input.
Maintainers
Readme
@vancityayush/tui
Rich React + Yoga terminal UI engine for building interactive terminal applications.
Superset of the upstream ink package: synchronized output, alt-screen, hyperlink pooling, focus manager, selection/copy, terminal-focus events, tab-status, bidi support, FPS tracking, theming, keybinding engine, and vim-mode input.
Status
v0.1 — lifted from the source tree and trimmed into a publishable package shape. Bun-only for now because the package scripts, examples, and build are Bun-based.
Install
bun add @vancityayush/tui reactQuick start
import { render, Box, Text } from '@vancityayush/tui'
await render(
<Box borderStyle="round" paddingX={1}>
<Text color="cyan">hello tui</Text>
</Box>
)Public API (core)
render, createRoot, Box, Text, Button, Link, Spacer, Newline, Ansi, RawAnsi, NoSelect, ThemeProvider, useTheme, useInput, useStdin, useApp, useInterval, useAnimationFrame, useSelection, useTerminalViewport, useTerminalFocus, useTerminalTitle, FocusManager, measureElement, wrapText, supportsTabStatus.
See examples/ for runnable demos.
Interactive Example
Run the full showcase from packages/tui:
bun install
bun run example:interactiveThat example exercises the main interactive surfaces in this package:
TabsandPanefor layoutSpinner,LoadingState, andProgressBarfor feedbackTextInputandVimTextInputfor editingCustomSelectandSelectMultifor list selectionMarkdown,OrderedList,Dialog,Byline,KeyboardShortcutHint, andListItem
Core controls inside the example:
1-5jump between tabsTab,Left,Rightcycle tabsEnteractivates the focused surfaceCtrl+Greturns from a focused editor/selector to shell navigationttoggles light and dark theme previewqexits
Host integration
Call configureHost({ getGlobalConfig, saveGlobalConfig, logger }) before render() to plug your app's config/log plumbing. Defaults: in-memory config with { theme: 'dark' }, console logger.
Publish To npm
From packages/tui, build and publish with your npm account:
bun run typecheck
bun test
bun run build
npm login
npm publishNotes:
publishConfig.accessis already set topublic, which is required for the first publish of a scoped package like@vancityayush/tui.- If you want this package to be publicly reusable, replace
UNLICENSEDinpackage.jsonwith a real license before publishing.
License
UNLICENSED — internal/private.
