| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  | # Copyright 2025 Arthur Sonzogni. All rights reserved. | 
					
						
							|  |  |  | # Use of this source code is governed by the MIT license that can be found in | 
					
						
							|  |  |  | # the LICENSE file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # TODO: | 
					
						
							|  |  |  | # - Build benchmark. | 
					
						
							|  |  |  | # - Build fuzzers. | 
					
						
							|  |  |  | # - Build documentation. | 
					
						
							|  |  |  | # - Enable the two tests timing out. | 
					
						
							|  |  |  | # - Support WebAssembly | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") | 
					
						
							|  |  |  | load(":bazel/ftxui.bzl", "ftxui_cc_library") | 
					
						
							|  |  |  | load(":bazel/ftxui.bzl", "generate_examples") | 
					
						
							|  |  |  | load(":bazel/ftxui.bzl", "windows_copts") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 22:41:17 +02:00
										 |  |  | # A meta target depending on all of the ftxui submodules. | 
					
						
							|  |  |  | # Note that component depends on dom and screen, so ftxui is just an alias for  | 
					
						
							|  |  |  | # component. | 
					
						
							|  |  |  | # ┌component──┐ | 
					
						
							|  |  |  | # │┌dom──────┐│ | 
					
						
							|  |  |  | # ││┌screen─┐││ | 
					
						
							|  |  |  | # └┴┴───────┴┴┘ | 
					
						
							|  |  |  | alias(name = "ftxui", actual = ":component") | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 22:41:17 +02:00
										 |  |  | # @ftxui:screen is a module that provides a screen buffer and color management | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  | # for terminal applications. A screen is a 2D array of cells, each cell can | 
					
						
							|  |  |  | # contain a glyph, a color, and other attributes. The library also provides | 
					
						
							|  |  |  | # functions to manipulate the screen. | 
					
						
							|  |  |  | ftxui_cc_library( | 
					
						
							|  |  |  |     name = "screen", | 
					
						
							|  |  |  |     srcs = [ | 
					
						
							|  |  |  |         "src/ftxui/screen/box.cpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/color.cpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/color_info.cpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/image.cpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/screen.cpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/string.cpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/string_internal.hpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/terminal.cpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/util.hpp", | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     hdrs = [ | 
					
						
							|  |  |  |         "include/ftxui/screen/box.hpp", | 
					
						
							|  |  |  |         "include/ftxui/screen/color.hpp", | 
					
						
							|  |  |  |         "include/ftxui/screen/color_info.hpp", | 
					
						
							|  |  |  |         "include/ftxui/screen/deprecated.hpp", | 
					
						
							|  |  |  |         "include/ftxui/screen/image.hpp", | 
					
						
							|  |  |  |         "include/ftxui/screen/pixel.hpp", | 
					
						
							|  |  |  |         "include/ftxui/screen/screen.hpp", | 
					
						
							|  |  |  |         "include/ftxui/screen/string.hpp", | 
					
						
							|  |  |  |         "include/ftxui/screen/terminal.hpp", | 
					
						
							|  |  |  |         "include/ftxui/util/autoreset.hpp", | 
					
						
							|  |  |  |         "include/ftxui/util/ref.hpp", | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 22:41:17 +02:00
										 |  |  | # @ftxui:dom is a library that provides a way to create and manipulate a | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  | # "document" that can be rendered to a screen. The document is a tree of nodes. | 
					
						
							|  |  |  | # Nodes can be text, layouts, or various decorators. Users needs to compose | 
					
						
							|  |  |  | # nodes to create a document. A document is responsive to the size of the | 
					
						
							|  |  |  | # screen. | 
					
						
							|  |  |  | ftxui_cc_library( | 
					
						
							|  |  |  |     name = "dom", | 
					
						
							|  |  |  |     srcs = [ | 
					
						
							|  |  |  |         "src/ftxui/dom/automerge.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/blink.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/bold.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/border.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/box_helper.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/box_helper.hpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/canvas.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/clear_under.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/color.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/composite_decorator.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/dbox.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/dim.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/flex.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/flexbox.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/flexbox_config.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/flexbox_helper.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/flexbox_helper.hpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/focus.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/frame.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/gauge.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/graph.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/gridbox.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/hbox.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/hyperlink.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/inverted.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/italic.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/linear_gradient.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/node.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/node_decorator.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/node_decorator.hpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/paragraph.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/reflect.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/scroll_indicator.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/selection.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/selection_style.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/separator.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/size.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/spinner.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/strikethrough.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/table.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/text.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/underlined.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/underlined_double.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/util.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/vbox.cpp", | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     hdrs = [ | 
					
						
							|  |  |  |         "include/ftxui/dom/canvas.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/deprecated.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/direction.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/elements.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/flexbox_config.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/linear_gradient.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/node.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/requirement.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/selection.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/table.hpp", | 
					
						
							|  |  |  |         "include/ftxui/dom/take_any_args.hpp", | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     deps = [":screen"], | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 22:41:17 +02:00
										 |  |  | # @ftxui:component is a library to create "dynamic" component renderering and | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  | # updating a ftxui::dom document on the screen. It is a higher level API than | 
					
						
							|  |  |  | # ftxui:dom. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # The module is required if your program needs to respond to user input. It | 
					
						
							|  |  |  | # defines a set of ftxui::Component. These components can be utilized to | 
					
						
							|  |  |  | # navigate using the arrow keys and/or cursor. There are several builtin widgets | 
					
						
							|  |  |  | # like checkbox/inputbox/etc to interact with. You can combine them, or even | 
					
						
							|  |  |  | # define your own custom components. | 
					
						
							|  |  |  | ftxui_cc_library( | 
					
						
							|  |  |  |     name = "component", | 
					
						
							|  |  |  |     srcs = [ | 
					
						
							|  |  |  |         "src/ftxui/component/animation.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/button.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/catch_event.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/checkbox.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/collapsible.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/component.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/component_options.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/container.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/dropdown.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/event.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/hoverable.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/input.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/loop.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/maybe.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/menu.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/modal.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/radiobox.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/renderer.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/resizable_split.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/screen_interactive.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/slider.cpp", | 
					
						
							| 
									
										
										
										
											2025-08-16 18:40:50 +02:00
										 |  |  |         "src/ftxui/component/task.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/task_internal.hpp", | 
					
						
							|  |  |  |         "src/ftxui/component/task_queue.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/task_queue.hpp", | 
					
						
							|  |  |  |         "src/ftxui/component/task_runner.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/task_runner.hpp", | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  |         "src/ftxui/component/terminal_input_parser.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/terminal_input_parser.hpp", | 
					
						
							|  |  |  |         "src/ftxui/component/util.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/window.cpp", | 
					
						
							| 
									
										
										
										
											2025-05-07 22:41:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Private header from ftxui:dom. | 
					
						
							|  |  |  |         "src/ftxui/dom/node_decorator.hpp", | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Private header from ftxui:screen. | 
					
						
							|  |  |  |         "src/ftxui/screen/string_internal.hpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/util.hpp", | 
					
						
							| 
									
										
										
										
											2025-08-17 19:23:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Private header. | 
					
						
							|  |  |  |         "include/ftxui/util/warn_windows_macro.hpp", | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  |     ], | 
					
						
							|  |  |  |     hdrs = [ | 
					
						
							|  |  |  |         "include/ftxui/component/animation.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/captured_mouse.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/component.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/component_base.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/component_options.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/event.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/loop.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/mouse.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/receiver.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/screen_interactive.hpp", | 
					
						
							|  |  |  |         "include/ftxui/component/task.hpp", | 
					
						
							|  |  |  |     ], | 
					
						
							| 
									
										
										
										
											2025-05-07 22:41:17 +02:00
										 |  |  |     deps = [ | 
					
						
							|  |  |  |         ":dom", | 
					
						
							|  |  |  |         ":screen", | 
					
						
							|  |  |  |     ], | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # FTXUI's tests | 
					
						
							|  |  |  | cc_test( | 
					
						
							|  |  |  |     name = "tests", | 
					
						
							|  |  |  |     testonly = True, | 
					
						
							|  |  |  |     srcs = [ | 
					
						
							|  |  |  |         "src/ftxui/component/animation_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/button_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/collapsible_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/component_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/container_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/dropdown_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/hoverable_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/input_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/menu_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/modal_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/radiobox_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/resizable_split_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/slider_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/terminal_input_parser_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/component/toggle_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/blink_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/bold_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/border_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/canvas_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/color_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/dbox_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/dim_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/flexbox_helper_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/flexbox_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/gauge_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/gridbox_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/hbox_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/hyperlink_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/italic_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/linear_gradient_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/scroll_indicator_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/separator_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/spinner_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/table_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/text_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/underlined_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/dom/vbox_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/color_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/screen/string_test.cpp", | 
					
						
							|  |  |  |         "src/ftxui/util/ref_test.cpp", | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 22:41:17 +02:00
										 |  |  |         # Private header from ftxui:screen for string_test.cpp. | 
					
						
							|  |  |  |         "src/ftxui/screen/string_internal.hpp", | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Private header from ftxui::component for | 
					
						
							|  |  |  |         # terminal_input_parser_test.cpp. | 
					
						
							|  |  |  |         "src/ftxui/component/terminal_input_parser.hpp", | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Private header from ftxui::dom for | 
					
						
							|  |  |  |         # flexbox_helper_test.cpp. | 
					
						
							|  |  |  |         "src/ftxui/dom/flexbox_helper.hpp", | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  |         # TODO: Enable the two tests timing out with Bazel: | 
					
						
							|  |  |  |         # - "src/ftxui/component/screen_interactive_test.cpp", | 
					
						
							|  |  |  |         # - "src/ftxui/dom/selection_test.cpp", | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     includes = [ | 
					
						
							|  |  |  |         "include", | 
					
						
							|  |  |  |         "src", | 
					
						
							|  |  |  |     ], | 
					
						
							| 
									
										
										
										
											2025-05-07 22:41:17 +02:00
										 |  |  |     copts = windows_copts(), | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  |     deps = [ | 
					
						
							| 
									
										
										
										
											2025-05-07 22:41:17 +02:00
										 |  |  |         ":screen", | 
					
						
							|  |  |  |         ":dom", | 
					
						
							|  |  |  |         ":component", | 
					
						
							|  |  |  |         "@googletest//:gtest", | 
					
						
							| 
									
										
										
										
											2025-04-29 15:11:10 +02:00
										 |  |  |         "@googletest//:gtest_main", | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | generate_examples() |