mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-05-05 22:01:13 +08:00

Bug:https://github.com/ArthurSonzogni/FTXUI/issues/1032 Fixed:https://github.com/ArthurSonzogni/FTXUI/issues/1032
252 lines
9.3 KiB
Python
252 lines
9.3 KiB
Python
# 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", "cpp20")
|
|
load(":bazel/ftxui.bzl", "windows_copts")
|
|
load(":bazel/ftxui.bzl", "pthread_linkopts")
|
|
|
|
package(default_visibility = ["//visibility:public"])
|
|
|
|
# A meta target that depends on all the ftxui sub modules.
|
|
alias(
|
|
name = "ftxui",
|
|
# Note that :component depends on :dom, which depends on :screen. Bazel
|
|
# doesn't really support "public" and "private" dependencies. They are all
|
|
# public. This is equivalent to depending on all the submodules.
|
|
actual = ":component",
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
# ftxui:screen is a module that provides a screen buffer and color management
|
|
# 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",
|
|
],
|
|
)
|
|
|
|
# ftxui:dom is a library that provides a way to create and manipulate a
|
|
# "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"],
|
|
)
|
|
|
|
# ftxui:component is a library to create "dynamic" component renderering and
|
|
# 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",
|
|
"src/ftxui/component/terminal_input_parser.cpp",
|
|
"src/ftxui/component/terminal_input_parser.hpp",
|
|
"src/ftxui/component/util.cpp",
|
|
"src/ftxui/component/window.cpp",
|
|
],
|
|
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",
|
|
],
|
|
linkopts = pthread_linkopts(),
|
|
deps = [":dom"],
|
|
)
|
|
|
|
# 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/receiver_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/terminal_input_parser_test_fuzzer.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",
|
|
|
|
# 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",
|
|
],
|
|
copts = cpp20() + windows_copts(),
|
|
deps = [
|
|
"//:ftxui",
|
|
"@googletest//:gtest_main",
|
|
],
|
|
)
|
|
|
|
generate_examples()
|