signals-tui
Declarative TUI framework using signals.
Example
ts
import { Term, Text, Input } from "@monstermann/signals-tui";
import { memo } from "@monstermann/signals";
Term.onCtrlC(Term.exit);
Term.onExit(Term.enterAlternateScreen());
Term.onExit(Term.startCapturingInput());
const people = [
{ id: 1, name: "Alice", isSelectable: true },
{ id: 2, name: "Bob", isSelectable: true },
{ id: 3, name: "Charlie", isSelectable: true },
];
const input = Input.create({
row: 0,
placeholder: Text.create("Filter people..."),
renderInput: (input) => [Text.create(input.value())],
});
const list = List.create({
row: 1,
lines: memo(() => {
return people.filter((person) => person.name.startsWith(input.value()));
}),
renderLine: ({ data, isSelected }) => {
const prefix = isSelected ? "> " : " ";
return [Text.create(prefix + data.name)];
},
});
Term.render(() => {
input.render();
list.render();
});
Input.focus(input);Installation
sh
npm install @monstermann/signals-tuish
pnpm add @monstermann/signals-tuish
yarn add @monstermann/signals-tuish
bun add @monstermann/signals-tui