
Este módulo define un conjunto jerárquico de ftxui::Element. Un elemento gestiona el diseño y puede responder a los cambios de dimensión del terminal. Observe el siguiente ejemplo donde este módulo se utiliza para crear un diseño simple con una serie de operadores:
La sección Example proporciona una colección de ejemplos.
Ejemplo:
...
Element document =
vbox({
text(
"The window") | bold |
color(Color::Blue),
text("The footer")
});
document = border(document);
document = document | border.
document |= border
...
}
Element text(std::string_view text)
Muestra un fragmento de texto Unicode codificado en UTF8.
Element color(Color color, Element child)
Establece el color de primer plano de un elemento.
Element gauge(float progress)
Dibuja una barra de progreso de alta definición.
Element vbox(Elements children)
Un contenedor que muestra elementos verticalmente uno por uno.
El espacio de nombres ftxui:: de FTXUI.
Lista de elementos
La lista de todos los elementos está incluida y se puede acceder a ella incluyendo el archivo de cabecera correspondiente:
#ifndef FTXUI_DOM_ELEMENTS_HPP
#define FTXUI_DOM_ELEMENTS_HPP
#include <cstdint>
#include <functional>
#include <memory>
#include <string_view>
class Node;
using Element = std::shared_ptr<Node>;
};
Color unselected_color,
Color selected_color);
Color unselected_color,
Color selected_color);
std::vector<std::string> charset,
Element canvas(
int width,
int height, std::function<
void(Canvas&)>);
}
}
#include "ftxui/dom/take_any_args.hpp"
#endif
#define FTXUI_EXPORT(component)
Element window(Element title, Element content, BorderStyle border=ROUNDED)
Dibuja una ventana con un título y un borde alrededor del elemento.
Element borderDouble(Element child)
Dibuja un borde doble alrededor del elemento.
Element focusCursorBarBlinking(Element child)
Igual que focus, pero establece la forma del cursor como una barra parpadeante.
Element xflex(Element)
Expandir/Minimizar si es posible/necesario en el eje X.
Element gaugeDirection(float progress, Direction direction)
Dibuja una barra de progreso de alta definición que avanza en la dirección especificada.
Decorator focusPositionRelative(float x, float y)
Utilizado dentro de un frame, esto fuerza que la vista se desplace hacia una posición determinada....
Element separatorStyled(BorderStyle style)
Dibuja una separación vertical u horizontal entre otros dos elementos.
Element xflex_grow(Element)
Expandir si es posible en el eje X.
Element underlinedDouble(Element child)
Aplica un doble subrayado al texto.
Element clear_under(Element element)
Antes de dibujar |child|, limpia las celdas debajo. Esto es útil en combinación con dbox.
Element borderDashed(Element child)
Dibuja un borde discontinuo alrededor del elemento.
Element separatorEmpty()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo VACÍO.
Element vscroll_indicator(Element child)
Muestra una barra de desplazamiento vertical a la derecha. Los colores siguen el contenido.
Element nothing(Element element)
Una decoración que no hace absolutamente nada.
Element paragraphAlignLeft(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a la izquierda.
Decorator size(WidthOrHeight direction, Constraint constraint, int value)
Aplica una restricción al tamaño de un elemento.
Element flex(Element child)
Hace que un elemento hijo se expanda proporcionalmente al espacio restante en un contenedor.
Element hyperlink(std::string_view link, Element child)
Hace que el área renderizada sea clicable usando un navegador web. El enlace se abrirá cuando el usua...
Element gaugeRight(float progress)
Dibuja una barra de progreso de alta definición que avanza de izquierda a derecha.
Element focusCursorUnderlineBlinking(Element child)
Igual que focus, pero establece la forma del cursor como un subrayado parpadeante.
Element bold(Element child)
Utiliza una fuente en negrita, para elementos con más énfasis.
Element separatorLight()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo LIGERO.
Element spinner(int charset_index, size_t image_index)
Útil para representar el efecto del tiempo y/o eventos. Esto muestra un "video" de arte ASCII.
Element borderRounded(Element child)
Dibuja un borde redondeado alrededor del elemento.
Element yflex(Element)
Expandir/Minimizar si es posible/necesario en el eje Y.
Element flex_shrink(Element child)
Minimizar si es necesario.
Element focusCursorBar(Element child)
Igual que focus, pero establece la forma del cursor como un bloque fijo.
Element focusCursorBlock(Element child)
Igual que focus, pero establece la forma del cursor como un bloque fijo.
Element vtext(std::string_view text)
Muestra un fragmento de texto Unicode verticalmente.
BorderStyle
BorderStyle es una enumeración que representa los diferentes estilos de bordes que se pueden aplicar ...
Element underlined(Element child)
Subraya el elemento dado.
Element center(Element child)
Centra un elemento horizontal y verticalmente.
Element paragraphAlignJustify(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado utilizando una alineación justi...
Direction
Direction es una enumeración que representa las cuatro cardinales direcciones.
Element focusCursorUnderline(Element child)
Igual que focus, pero establece la forma del cursor como un subrayado fijo.
Element borderHeavy(Element child)
Dibuja un borde grueso alrededor del elemento.
Element inverted(Element child)
Agrega un filtro que invertirá los colores de primer plano y de fondo. colores.
Element gaugeUp(float progress)
Dibuja una barra de progreso de alta definición que avanza de abajo hacia arriba.
Element gaugeCharset(float progress, std::vector< std::string > charset, Direction direction=Direction::Right)
Dibuja una barra de progreso de alta definición usando un conjunto de caracteres personalizado.
Element align_right(Element child)
Alinea un elemento a la derecha.
Decorator focusPosition(int x, int y)
Utilizado dentro de un frame, esto fuerza que la vista se desplace hacia una posición determinada....
Element yflex_grow(Element)
Expandir si es posible en el eje Y.
Element hscroll_indicator(Element child)
Muestra una barra de desplazamiento horizontal en la parte inferior. Los colores siguen el contenido.
Element flex_grow(Element child)
Expandir si es posible.
Element separatorDashed()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo DISCONTINUO.
Element notflex(Element child)
Hace que el elemento no sea flexible.
Element strikethrough(Element child)
Aplica un tachado al texto.
Element italic(Element child)
Aplica un doble subrayado al texto.
Element dbox(Elements children_)
Apila varios elementos uno encima de otro.
Element xflex_shrink(Element)
Minimizar si es necesario en el eje X.
Decorator borderWith(const Cell &pixel)
Igual que border pero con un Cell constante alrededor del elemento.
Element gaugeLeft(float progress)
Dibuja una barra de progreso de alta definición que avanza de derecha a izquierda.
Element paragraphAlignCenter(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado al centro.
Element borderLight(Element child)
Dibuja un borde ligero alrededor del elemento.
Element focus(Element child)
Establece que child sea el elemento enfocado entre sus hermanos.
Element paragraph(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas.
Element bgcolor(Color color, Element child)
Establece el color de fondo de un elemento.
Decorator borderStyled(BorderStyle style)
Igual que border pero con estilos diferentes.
Element paragraphAlignRight(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a la derecha.
Element separator()
Dibuja una separación vertical u horizontal entre otros dos elementos.
Element filler()
Un elemento que se expandirá proporcionalmente al espacio restante en un contenedor.
Element dim(Element child)
Usa una fuente clara para elementos con menos énfasis.
Element automerge(Element child)
Permite que los caracteres se fusionen automáticamente con otros cercanos.
Element separatorCharacter(std::string_view value)
Dibuja una separación vertical u horizontal entre otros dos elementos.
Element blink(Element child)
El texto dibujado alterna entre visible y oculto.
Element vcenter(Element child)
Centra un elemento verticalmente.
Element separatorDouble()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo DOBLE.
Element focusCursorBlockBlinking(Element child)
Igual que focus, pero establece la forma del cursor como un bloque parpadeante.
Element border(Element child)
Dibuja un borde alrededor del elemento.
Element separatorHeavy()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo GRUESO.
Element borderEmpty(Element child)
Dibuja un borde vacío alrededor del elemento.
Element yflex_shrink(Element)
Minimizar si es necesario en el eje Y.
Element hcenter(Element child)
Centra un elemento horizontalmente.
Element gaugeDown(float progress)
Dibuja una barra de progreso de alta definición que avanza de arriba hacia abajo.
El espacio de nombres ftxui::Dimension:: de FTXUI.
bool extend_beyond_screen
Element flexbox(Elements, FlexboxConfig config=FlexboxConfig())
Un contenedor que muestra elementos en filas/columnas y es capaz de ajustarse a la siguiente columna/...
Element separatorVSelector(float up, float down, Color unselected_color, Color selected_color)
Dibuja una barra vertical, con el área entre arriba/abajo coloreada de forma diferente.
Decorator yflex_shrink_factor(int shrink)
std::shared_ptr< Node > Element
Element xframe(Element child)
Igual que frame, pero solo en el eje x.
Decorator xflex_grow_factor(int grow)
FTXUI_EXPORT(DOM) Element gridbox(std Element hflow(Elements)
Un contenedor que muestra elementos en filas de izquierda a derecha. Cuando está lleno,...
Decorator yflex_grow_factor(int grow)
FTXUI_EXPORT(DOM) Element separatorCharacter(std Element separatorHSelector(float left, float right, Color unselected_color, Color selected_color)
Dibuja una barra horizontal, con el área entre izquierda/derecha coloreada de forma diferente.
Element hbox(Elements children)
Un contenedor que muestra elementos horizontalmente uno por uno.
std::vector< Element > Elements
Decorator selectionForegroundColor(Color foreground)
Establece el color de primer plano de un elemento cuando está seleccionado. Tenga en cuenta que el es...
Decorator yflex_factor(int grow, int shrink)
Component operator|(Component component, ComponentDecorator decorator)
Decorator selectionBackgroundColor(Color foreground)
Establece el color de fondo de un elemento cuando está seleccionado. Tenga en cuenta que el estilo se...
std::function< Element(Element)> Decorator
Decorator flex_shrink_factor(int shrink)
Element yframe(Element child)
Igual que frame, pero solo en el eje y.
Decorator flex_grow_factor(int grow)
Decorator selectionColor(Color foreground)
Establece el color de un elemento cuando está seleccionado.
Element selectionStyleReset(Element child)
Restablece el estilo de selección de un elemento.
Decorator reflect(Box &box)
std::function< std::vector< int >(int, int)> GraphFunction
Decorator xflex_shrink_factor(int shrink)
Decorator xflex_factor(int grow, int shrink)
Decorator flex_factor(int grow, int shrink)
Element gridbox(std::vector< Elements > lines)
A container displaying a grid of elements.
Element canvas(int width, int height, std::function< void(Canvas &)>)
Produce un elemento dibujando un lienzo del tamaño solicitado.
Element frame(Element child)
Permite que un elemento se muestre dentro de un área 'virtual'. Su tamaño puede ser mayor que su cont...
Component & operator|=(Component &component, ComponentDecorator decorator)
Element select(Element e)
Establece el child como el enfocado entre sus hermanos.
Decorator selectionStyle(std::function< void(Cell &)> style)
Establece el estilo de un elemento cuando está seleccionado.
Element vflow(Elements)
Un contenedor que muestra elementos en filas de arriba a abajo. Cuando está lleno,...
Element graph(GraphFunction graph_function)
Dibuja un gráfico usando una GraphFunction.
texto
El widget más simple. Muestra un texto.
text("I am a piece of text");
vtext
vtext
Salida del terminal:
Salida del terminal:
párrafo
Similar a ftxui::text, pero las palabras individuales se ajustan a lo largo de múltiples líneas, dependiendo del ancho de su contenedor.
Código de ejemplo:
paragraph("A very long text")

Para un ejemplo más detallado, consulte ejemplo detallado. Párrafo también incluye una serie de otras variantes como se muestra a continuación:
borde
Añade un borde alrededor de un elemento.
Salida del terminal:
border(text("The element"))
Salida del terminal:
┌───────────┐
│The element│
└───────────┘
[!nota] Puedes lograr el mismo comportamiento usando el operador pipe.
Código:
text("El elemento") | border
El borde también viene en una variedad de estilos como se muestra a continuación:
ventana
Una ftxui::window es un ftxui::border, pero con una cabecera adicional. Para añadir una ventana alrededor de un elemento, envuélvalo y especifique una cadena como cabecera. Código:
window("The window", text("The element"))
Salida del terminal:
┌The window─┐
│The element│
└───────────┘
separador
Muestra una línea vertical/horizontal para dividir visualmente el contenido de un contenedor en dos.
Salida del terminal:
border(
hbox({
text("Left"),
separator(),
text("Right")
})
)
Salida del terminal:
┌────┬─────┐
│left│right│
└────┴─────┘
Los separadores vienen en una variedad de estilos como se muestra a continuación:
Color background,
Color foreground);
Color background,
Color foreground);
}
medidor
Este es un elemento visual que representa una proporción de progreso.
Salida del terminal:
Salida del terminal:
┌────────────────────────────────────────────────────────────────────────────┐
│██████████████████████████████████████ │
└────────────────────────────────────────────────────────────────────────────┘
Los medidores pueden mostrarse en muchas orientaciones como se muestra a continuación:
namespace {
Element gauge(float ratio);
Element gaugeLeft(float ratio);
Element gaugeRight(float ratio);
Element gaugeUp(float ratio);
Element gaugeDown(float ratio);
Element gaugeDirection(float ratio, GaugeDirection);
}
gráfico
Vea:
Element graph(GraphFunction);
Colores
La mayoría de las consolas de terminal pueden mostrar texto y fondos de colores. FTXUI soporta todas las paletas de colores:
Decorator color(Color);
Decorator bgcolor(Color);
Galería de colores: 
Paleta16
En la mayoría de los terminales se admiten los siguientes colores:
- Default
- Black
- GrayDark
- GrayLight
- White
- Blue
- BlueLight
- Cyan
- CyanLight
- Green
- GreenLight
- Magenta
- MagentaLight
- Red
- RedLight
- Yellow
- YellowLight
Ejemplo de uso de los colores anteriores usando el operador pipe:
text("Blue foreground") | color(Color::Blue);
text("Blue background") | bgcolor(Color::Blue);
text("Black on white") | color(Color::Black) | bgcolor(Color::White);
Paleta256
En terminales que soportan 256 colores.
text("HotPink") | color(Color::HotPink);
ColorVerdadero
En terminales que soportan TrueColor, puedes usar directamente el espacio de color RGB de 24 bits:
Usa los constructores a continuación para especificar los valores RGB o HSV para tu color:
Hay dos constructores:
ftxui::Color::RGB(uint8_t red, uint8_t green, uint8_t blue);
ftxui::Color::HSV(uint8_t hue, uint8_t saturation, uint8_t value);
DegradadoLineal
FTXUI soporta degradado lineal. Ya sea en primer plano o en segundo plano.
Decorator color(const LinearGradient&);
Decorator bgcolor(const LinearGradient&);
Un ftxui::LinearGradient se define por un ángulo en grados y una lista de paradas de color.
auto gradient = LinearGradient()
.Angle(45)
.AddStop(0.0, Color::Red)
.AddStop(0.5, Color::Green)
.AddStop(1.0, Color::Blue);
También puedes usar constructores simplificados:
LinearGradient(Color::Red, Color::Blue);
LinearGradient(45, Color::Red, Color::Blue);
Ver demostración.
Estilo
Además de texto y fondos de colores. Muchos terminales soportan efectos de texto como: bold, italic, dim, underlined, inverted, blink.
Element bold(Element);
Element italic(Element);
Element dim(Element);
Element inverted(Element);
Element underlined(Element);
Element underlinedDouble(Element);
Element strikethrough(Element);
Element blink(Element);
Decorator color(Color);
Decorator bgcolor(Color);
Decorator colorgrad(LinearGradient);
Decorator bgcolorgrad(LinearGradient);
Ejemplo

Para usar estos efectos, simplemente envuelve tus elementos con el efecto deseado:
underlined(bold(text("This text is bold and underlined")))
Alternativamente, usa el operador pipe para encadenarlo en tu elemento:
text("This text is bold") | bold | underlined
Diseño
Permite que los elementos se organicen de las siguientes maneras:
- Horizontalmente con
ftxui::hbox
- Verticalmente con
ftxui::vbox
- Dentro de una cuadrícula con
ftxui::gridbox
- Envuelto en una dirección usando
ftxui::flexbox.
Ejemplo usando ftxui::hbox, ftxui::vbox y ftxui::filler.

Ejemplo usando ftxui::gridbox:

Ejemplo usando flexbox:

Consulta este ejemplo y la demostración asociada.
El elemento también puede volverse flexible usando el decorador ftxui::flex.
Salida del terminal:
hbox({
text("left") | border ,
text("middle") | border | flex,
text("right") | border,
});
Salida en la terminal:
┌────┐┌─────────────────────────────────────────────────────┐┌─────┐
│left││middle ││right│
└────┘└─────────────────────────────────────────────────────┘└─────┘
Salida del terminal:
hbox({
text("left") | border ,
text("middle") | border | flex,
text("right") | border | flex,
});
Salida del terminal:
┌────┐┌───────────────────────────────┐┌───────────────────────────────┐
│left││middle ││right │
└────┘└───────────────────────────────┘└───────────────────────────────┘
Tabla
Permite un formato sencillo de datos en una tabla visual ordenada.
Ejemplo básico:
auto table = Table({
{"Planet", "Radius", "Mass"},
{"Mercury", "2440", "0.330"},
{"Venus", "6052", "4.87"},
{"Earth", "6371", "5.97"},
{"Mars", "3390", "0.642"},
});
table.SelectAll().Border(LIGHT);
table.SelectRow(0).Decorate(bold);
table.SelectRow(0).SeparatorVertical(LIGHT);
table.SelectRow(0).Border(DOUBLE);
auto document = table.Render();
Ejemplo de código:

Selección y estilo
Puede seleccionar partes de la tabla y aplicarles decoradores o bordes. Los métodos de selección incluyen:
ftxui::TableSelection::SelectAll();
ftxui::TableSelection::SelectCell(column, row);
ftxui::TableSelection::SelectRow(row_index);
ftxui::TableSelection::SelectRows(row_min, row_max);
ftxui::TableSelection::SelectColumn(column_index);
ftxui::TableSelection::SelectColumns(column_min, column_max);
ftxui::TableSelection::SelectRectangle(column_min, column_max, row_min, row_max);
Una vez hecha una selección, puede aplicar:
ftxui::TableSelection::Decorate(Decorator);
ftxui::TableSelection::DecorateCells(Decorator);
ftxui::TableSelection::Border(BorderStyle);
ftxui::TableSelection::Separator(BorderStyle);
Bordes coloreados
También puede aplicar decoradores específicamente a bordes y separadores:
table.SelectAll().Border(LIGHT, color(Color::Red));
table.SelectRow(0).SeparatorVertical(LIGHT, color(Color::Blue));
Los siguientes métodos están disponibles para una decoración de bordes detallada:
ftxui::TableSelection::DecorateBorder(Decorator);
ftxui::TableSelection::DecorateBorderLeft(Decorator);
ftxui::TableSelection::DecorateBorderRight(Decorator);
ftxui::TableSelection::DecorateBorderTop(Decorator);
ftxui::TableSelection::DecorateBorderBottom(Decorator);
ftxui::TableSelection::DecorateSeparator(Decorator);
ftxui::TableSelection::DecorateSeparatorVertical(Decorator);
ftxui::TableSelection::DecorateSeparatorHorizontal(Decorator);
Lienzo
Ver la API <ftxui/dom/canvas.hpp>
auto c = Canvas(100, 100);
c.DrawPointLine(10, 10, 80, 10, Color::Red);
auto element = canvas(c);
El dibujo se puede realizar en un ftxui::Canvas, usando caracteres braille, de bloque o simples:
Ejemplo simple:

Ejemplo complejo: