README.md
<a href="#"></img></a> <a href="http://opensource.org/licenses/MIT"></img></a> <a href="#"></img></a> <a href="#"></img></a> <a href="#"></img></a> <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"></img></a>
<a href="https://github.com/ArthurSonzogni/FTXUI/issues"></img></a> <a href="https://repology.org/project/ftxui/versions"></a> <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
</a><a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> · <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> · <a href="https://arthursonzogni.github.io/FTXUI/examples/">Examples</a> . <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request Feature</a> · <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull Request</a>
Doc: <a href="https://github.com/ArthurSonzogni/">English</a> | <a href="https://arthursonzogni.github.io/FTXUI/fr/index.html">Français</a> | <a href="https://arthursonzogni.github.io/FTXUI/es/index.html">Español</a> | <a href="https://arthursonzogni.github.io/FTXUI/zh-TW/index.html">繁體中文</a> | <a href="https://arthursonzogni.github.io/FTXUI/zh-CH/index.html">简体中文</a> | <a href="https://arthursonzogni.github.io/FTXUI/ja/index.html">日本語</a> |
</p><i>Functional Terminal (X) User interface</i>
A simple cross-platform C++ library for terminal based user interfaces!
vbox({
hbox({
text("one") | border,
text("two") | border | flex,
text("three") | border | flex,
}),
gauge(0.25) | color(Color::Red),
gauge(0.50) | color(Color::White),
gauge(0.75) | color(Color::Blue),
});
This module defines a hierarchical set of Element. An Element manages layout and can be responsive to the terminal dimensions.
They are declared in <ftxui/dom/elements.hpp>
<details><summary>Layout</summary>Element can be arranged together:
hboxvboxgridboxflexbox.Element can become flexible using the flex decorator.
Example using hbox, vbox and filler.
Example using gridbox:
Example using flexbox:
</details> <details><summary>Style</summary>An element can be decorated using the functions:
bolditalicdiminvertedunderlinedunderlinedDoubleblinkstrikethroughcolorbgcolorhyperlinkFTXUI supports the pipe operator. It means: decorator1(decorator2(element)) and element | decorator1 | decorator2 can be used.
FTXUI support every color palette:
Color gallery:
</details> <details><summary>Border and separator</summary>Use decorator border and element separator() to subdivide your UI:
auto document = vbox({
text("top"),
separator(),
text("bottom"),
}) | border;
Demo:
</details> <details><summary>Text and paragraph</summary>A simple piece of text is represented using text("content").
To support text wrapping following spaces the following functions are provided:
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
A class to easily style a table of data.
</details> <details><summary>Canvas</summary>Drawing can be made on a Canvas, using braille, block, or simple characters:
Simple example:
Complex examples:
</details>ftxui/component produces dynamic UI, reactive to the user's input. It defines a set of ftxui::Component. A component reacts to Events (keyboard, mouse, resize, ...) and Renders as an Element (see previous section).
Prebuilt components are declared in <ftxui/component/component.hpp>
<details><summary>Gallery</summary>Gallery of multiple components. (demo)
</details> <details><summary>Radiobox</summary> </details> <details><summary>Checkbox</summary> </details> <details><summary>Input</summary> </details> <details><summary>Toggle</summary> </details> <details><summary>Slider</summary> </details> <details><summary>Menu</summary> </details> <details><summary>ResizableSplit</summary> </details> <details><summary>Dropdown</summary> </details> <details><summary>Tab</summary> </details>Feel free to add your projects here:
Several games using the FTXUI have been made during the Game Jam:
It is highly recommended to use CMake FetchContent to depend on FTXUI so you may specify which commit you would like to depend on.
include(FetchContent)
FetchContent_Declare(ftxui
GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
GIT_TAG v6.1.9
)
FetchContent_MakeAvailable(ftxui)
target_link_libraries(your_target PRIVATE
# Chose a submodule
ftxui::component
ftxui::dom
ftxui::screen
)
MODULE.bazel
bazel_dep(
name = "ftxui",
version = "v6.1.9",
)
BUILD.bazel
cc_binary(
name = "your_target",
srcs = ["your_source.cc"],
deps = [
# Choose submodules
"@ftxui//:component",
"@ftxui//:dom",
"@ftxui//:screen",
# Or use the single ftxui target (includes all modules)
# "@ftxui//:ftxui",
],
)
If you don't, FTXUI may be used from the following packages:
If you choose to build and link FTXUI yourself, ftxui-component must be first in the linking order relative to the other FTXUI libraries, i.e.
g++ . . . -lftxui-component -lftxui-dom -lftxui-screen . . .
To build FTXUI with modules, check documentation