14bool GeneratorBool(
const char*& data,
size_t& size) {
19 auto out = bool(data[0] % 2);
25std::string GeneratorString(
const char*& data,
size_t& size) {
27 while (index < size && data[index]) {
31 auto out = std::string(data, data + index);
41 return std::move(out);
44int GeneratorInt(
const char* data,
size_t size) {
48 auto out = int(data[0]);
54Color GeneratorColor(
const char* data,
size_t size) {
55 return Color::RGB(GeneratorInt(data, size), GeneratorInt(data, size),
56 GeneratorInt(data, size));
59AnimatedColorOption GeneratorAnimatedColorOption(
const char* data,
61 AnimatedColorOption option;
62 option.enabled = GeneratorBool(data, size);
63 option.inactive = GeneratorColor(data, size);
64 option.active = GeneratorColor(data, size);
65 option.duration = std::chrono::milliseconds(GeneratorInt(data, size));
69AnimatedColorsOption GeneratorAnimatedColorsOptions(
const char* data,
71 AnimatedColorsOption option;
72 option.background = GeneratorAnimatedColorOption(data, size);
73 option.foreground = GeneratorAnimatedColorOption(data, size);
77ButtonOption GeneratorButtonOption(
const char* data,
size_t size) {
79 option.animated_colors = GeneratorAnimatedColorsOptions(data, size);
83UnderlineOption GeneratorUnderlineOption(
const char* data,
size_t size) {
84 UnderlineOption option;
85 option.enabled = GeneratorBool(data, size);
86 option.color_active = GeneratorColor(data, size);
87 option.color_inactive = GeneratorColor(data, size);
88 option.leader_duration = std::chrono::milliseconds(GeneratorInt(data, size));
89 option.follower_duration =
90 std::chrono::milliseconds(GeneratorInt(data, size));
91 option.leader_delay = std::chrono::milliseconds(GeneratorInt(data, size));
92 option.follower_delay = std::chrono::milliseconds(GeneratorInt(data, size));
96MenuEntryOption GeneratorMenuEntryOption(
const char* data,
size_t size) {
97 MenuEntryOption option;
98 option.animated_colors = GeneratorAnimatedColorsOptions(data, size);
102MenuOption GeneratorMenuOption(
const char* data,
size_t size) {
104 option.underline = GeneratorUnderlineOption(data, size);
105 option.entries_option = GeneratorMenuEntryOption(data, size);
106 option.direction =
static_cast<Direction>(GeneratorInt(data, size) % 4);
112std::vector<std::string> g_list;
114Components GeneratorComponents(
const char*& data,
size_t& size,
int depth);
116Component GeneratorComponent(
const char*& data,
size_t& size,
int depth) {
118 int value = GeneratorInt(data, size);
120 return Button(GeneratorString(data, size), [] {});
123 constexpr int value_max = 26;
124 value = (
value % value_max + value_max) % value_max;
128 GeneratorString(data, size), [] {},
129 GeneratorButtonOption(data, size));
131 return Checkbox(GeneratorString(data, size), &g_bool);
133 return Input(GeneratorString(data, size), GeneratorString(data, size));
135 return Menu(&g_list, &g_int, GeneratorMenuOption(data, size));
139 return Toggle(&g_list, &g_int);
141 return Slider(GeneratorString(data, size), &g_int,
142 GeneratorInt(data, size), GeneratorInt(data, size),
143 GeneratorInt(data, size));
146 GeneratorComponent(data, size, depth - 1),
150 GeneratorComponent(data, size, depth - 1),
154 GeneratorComponent(data, size, depth - 1),
158 GeneratorComponent(data, size, depth - 1),
161 return Container::Vertical(GeneratorComponents(data, size, depth - 1));
164 return Container::Vertical(GeneratorComponents(data, size, depth - 1),
168 return Container::Horizontal(GeneratorComponents(data, size, depth - 1));
170 return Container::Horizontal(GeneratorComponents(data, size, depth - 1),
173 return Container::Tab(GeneratorComponents(data, size, depth - 1), &g_int);
175 return Maybe(GeneratorComponent(data, size, depth - 1), &g_bool);
180 GeneratorComponent(data, size, depth - 1),
181 GeneratorBool(data, size));
183 return Container::Stacked(GeneratorComponents(data, size, depth - 1));
185 return MenuEntry(GeneratorString(data, size));
187 return Renderer(GeneratorComponent(data, size, depth - 1),
188 [] {
return text(
"hello"); });
190 return CatchEvent(GeneratorComponent(data, size, depth - 1),
191 [](Event) {
return true; });
193 return Modal(GeneratorComponent(data, size, depth - 1),
194 GeneratorComponent(data, size, depth - 1), &g_bool);
196 return Hoverable(GeneratorComponent(data, size, depth - 1), &g_bool);
198 WindowOptions options;
199 options.inner = GeneratorComponent(data, size, depth - 1);
200 options.title = GeneratorString(data, size);
208Components GeneratorComponents(
const char*& data,
size_t& size,
int depth) {
211 while (size && GeneratorInt(data, size) % 2) {
212 out.push_back(GeneratorComponent(data, size, depth - 1));
215 return std::move(out);
220 g_bool = GeneratorBool(data, size);
221 g_int = GeneratorInt(data, size);
223 "test_1",
"test_2",
"test_3",
"test_4",
"test_5",
227 auto component = GeneratorComponent(data, size, depth);
229 int width = GeneratorInt(data, size);
230 int height = GeneratorInt(data, size);
239 Screen::Create(Dimension::Fixed(width), Dimension::Fixed(height));
242 std::vector<Event> events;
246 for (
size_t i = 0; i <
size; ++i) {
250 for (
const auto& event : events) {
251 component->OnEvent(event);
252 auto document = component->Render();
int LLVMFuzzerTestOneInput(const char *data, size_t size)
Component Button(ConstStringRef label, std::function< void()> on_click, ButtonOption options=ButtonOption::Simple())
Dibuja un botón. Ejecuta una función cuando se hace clic.
Component ResizableSplitTop(Component main, Component back, int *main_size)
Una división vertical entre dos componentes, configurable usando el ratón.
Component Toggle(ConstStringListRef entries, int *selected)
Una lista horizontal de elementos. El usuario puede navegar a través de ellos.
FTXUI_EXPORT(COMPONENT) ComponentDecorator Maybe(std Component Modal(Component main, Component modal, const bool *show_modal)
Component Renderer(Component child, std::function< Element()>)
Devuelve un nuevo Component, similar a |child|, pero usando |render| como el evento Component::Render...
Component Hoverable(Component component, bool *hover)
Envuelve un componente. Permite saber si el ratón lo está "hovering".
Component Checkbox(ConstStringRef label, bool *checked, CheckboxOption options=CheckboxOption::Simple())
Dibuja un elemento marcable.
Component Window(WindowOptions option)
Una ventana arrastrable y redimensionable. Para usar varias, deben apilarse usando el componente Cont...
Component Maybe(Component child, std::function< bool()> show)
Decora un componente |child|. Se muestra solo cuando |show| devuelve verdadero.
Component ResizableSplitRight(Component main, Component back, int *main_size)
Una división horizontal entre dos componentes, configurable usando el ratón.
Component Input(StringRef content, InputOption options={})
Una caja de entrada para editar texto.
Component Dropdown(ConstStringListRef entries, int *selected)
Un menú desplegable.
Component Radiobox(ConstStringListRef entries, int *selected_, RadioboxOption options={})
Una lista de elementos, donde solo uno puede ser seleccionado.
Component ResizableSplitBottom(Component main, Component back, int *main_size)
Una división vertical entre dos componentes, configurable usando el ratón.
Component Menu(ConstStringListRef entries, int *selected_, MenuOption options=MenuOption::Vertical())
Una lista de texto. El elemento enfocado está seleccionado.
Component ResizableSplitLeft(Component main, Component back, int *main_size)
Una división horizontal entre dos componentes, configurable usando el ratón.
Component MenuEntry(ConstStringRef label, MenuEntryOption options={})
Una entrada de menú específica. Se pueden colocar en un Container::Vertical para formar un menú.
Element text(std::string_view text)
Muestra un fragmento de texto Unicode codificado en UTF8.
Decorator size(WidthOrHeight direction, Constraint constraint, int value)
Aplica una restricción al tamaño de un elemento.
Direction
Direction es una enumeración que representa las cuatro cardinales direcciones.
El espacio de nombres ftxui:: de FTXUI.
std::vector< Component > Components
Component Collapsible(ConstStringRef label, Component child, Ref< bool > show=false)
Un componente plegable. Muestra una casilla de verificación con una flecha. Una vez activado,...
Component Slider(SliderOption< T > options)
Un control deslizante en cualquier dirección.
FTXUI_EXPORT(SCREEN) std FTXUI_EXPORT(SCREEN) std std::wstring to_wstring(T s)
void Render(Screen &screen, Node *node, Selection &selection)
std::shared_ptr< ComponentBase > Component
Component CatchEvent(Component child, std::function< bool(Event)>)