tui-react is a library to enable components with state, and with properties provided per render
Please note that this crate is early in development and build for the needs of dua.
How it works
It uses the TUI infrastructure Terminal, but alters it to not enforce implementing the Widget
trait.
It provides only a single, optional, trait called TopLevelComponent
, which makes it convenient to
draw its implementors with Terminal::render(..)
. However, since this enforces the absence of
refernces in your state, it's probably not suitable for most.
Instead, any struct can implement render
methods or functions, and freely write into the terminal.
That way, one can leverage everything Rust has to offer, which allows stateful components which
work in your favor. Thus, this crate does away with 'one size fits all' render implementations,
greatly adding to flexibility.
State that one wants within the component for instance could be the scoll location. Alternatively, one can configure windows by altering their public state.
What's the relation to TUI / Ratatui?
This project couldn't exist without TUI, and is happy to provide an alternative set of components for use in command-line applications. Ratatui is the continuation of the tui project.
Why tui-react
?
I kept having a terrible feeling when managing state with tui widgets when writing dua, and after trying many things, I realized what the problem actually was. It took me some time to realize it's not possible to have stateful components in with TUI, and I admire the smarts that went into the API design! After all, it effectively prohibited this! Amazing!
That's why I implemented my own terminal and some key components, based on the ones provided by TUI, which can serve as standard building blocks in a stateful world.
Thus far, the experience was fantastic, and it feels much better than before. Let's see what happens with it.