| .misc | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
| shell.nix | ||
That's It!
Minimal, cross-environment user interface framework.
Definitions
User interface
A user interface is a program which, repeatedly:
- renders information to be displayed to the user;
- handles input from the user; thus interactively performing tasks until an exit condition is met.
Engine
An engine is the underlying platform responsible for:
- Displaying your program's
rendered output to the user - Reading user input to be
handled by your program.
For example, the tui engine is based on crossterm,
a library for rendering text user interfaces.
Widget
A widget is any struct that implements the Input<E, I> and Output<E, O>
traits for a given engine E. This enables it to act as a component of the
user interface. Widgets may contain arbitrary state -- including other widgets.
We provide a set of basic widgets that allow you to define standard hierarchical
UI layouts. It's the implementor's responsibility to define
render and handle behaviors for custom widgets.
Input
To respond to user input, implement the trait Input.
It has a single method, handle, which takes an input
event, and returns an engine-specific value.
In the case of the tui engine, the returned value is a
bool corresponding to whether the input event was captured
by the current widget. Returning true from render terminates
the handling of the current event; returning false "bubbles" it
to the parent widget.
Output
To display data to the user, implement the trait Output.
It has a single method, render, which takes a mutable instance
of the engine, and returns and engine-specific value.
In the case of the tui engine, the returned value is [u16;2],
corresponding to the size requested by the widget. This allows
the layout components to implement dynamic, responsive layouts in the
terminal.