diff --git a/doc/cpp-modules.md b/doc/cpp-modules.md new file mode 100644 index 000000000..1d9a77f93 --- /dev/null +++ b/doc/cpp-modules.md @@ -0,0 +1,82 @@ +@page cpp20-modules C++20 Modules + +> [!WARNING] +> This feature is still in development, and the API may change in future releases. +> Your contribution is needed to help us improve the compatibility and usability +> of C++20 modules in FTXUI. If you encounter any issues or have suggestions, +> please open an issue. + +FTXUI provides an experimental support for [C++20 +modules](https://en.cppreference.com/w/cpp/language/modules) to improve +compilation times and code organization. + +**Example with CMake and Ninja** + + +```cpp +import ftxui; + +int main() { + auto screen = ftxui::ScreenInteractive::TerminalOutput(); + auto button = ftxui::Button("Click me", screen.QuitClosure()); + screen.Loop(button); + return 0; +} +``` + +```sh +cmake \ + -DCMAKE_GENERATOR=Ninja \ + -DFTXUI_BUILD_MODULES=ON \ + .. + +ninja +``` +> [!NOTE] +> To use modules, you need a C++20 compatible compiler, CMake version 3.20 or +> higher, and use a compatible generator like Ninja. Note that Makefile +> generators **do not support modules**. + +### Module list + +The modules directly reference the corresponding header, or a group of related +headers to provide a more convenient interface. The following modules +are available: + +- `ftxui` + - `ftxui.component` + - `ftxui.component.Animation` + - `ftxui.component.CapturedMouse` + - `ftxui.component.Component` + - `ftxui.component.ComponentBase` + - `ftxui.component.ComponentOptions` + - `ftxui.component.Event` + - `ftxui.component.Loop` + - `ftxui.component.Mouse` + - `ftxui.component.Receiver` + - `ftxui.component.ScreenInteractive` + - `ftxui.component.Task` + - `ftxui.dom` + - `ftxui.dom.Canvas` + - `ftxui.dom.Deprecated` + - `ftxui.dom.Direction` + - `ftxui.dom.Elements` + - `ftxui.dom.FlexboxConfig` + - `ftxui.dom.LinearGradient` + - `ftxui.dom.Node` + - `ftxui.dom.Requirement` + - `ftxui.dom.Selection` + - `ftxui.dom.Table` + - `ftxui.screen` + - `ftxui.screen.Box` + - `ftxui.screen.Color` + - `ftxui.screen.ColorInfo` + - `ftxui.screen.Deprecated` + - `ftxui.screen.Image` + - `ftxui.screen.Pixel` + - `ftxui.screen.Screen` + - `ftxui.screen.String` + - `ftxui.screen.Terminal` + - `ftxui.util` + - `ftxui.util.AutoReset` + - `ftxui.util.Ref`