mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-10-29 09:28:15 +08:00
Some checks are pending
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (cl, cl, windows-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, macos-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, ubuntu-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, macos-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, ubuntu-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (cl, Windows MSVC, windows-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (gcc, Linux GCC, ubuntu-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, Linux Clang, ubuntu-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, MacOS clang, macos-latest) (push) Waiting to run
Build / Test modules (llvm, ubuntu-latest) (push) Waiting to run
Documentation / documentation (push) Waiting to run
The direction was inverted. It caused the inability to increase it. Fixed:https://github.com/ArthurSonzogni/FTXUI/issues/1093
17 KiB
17 KiB
Changelog
Next
Doc
- Fix broken Doxygen output. See @markmandel in #1029.
- Use Doxygen awesome. Add our own theme.
- Break the documentation into several pages.
Build
- Feature: Support C++20 modules.
This requires:
- Using the Ninja or MSVC generator
- A recent Clang/GCC/MSVC compiler.
- Cmake 3.28 or higher. Usage:
Thanks @mikomikotaishi for PR #1015.import ftxui; import ftxui.component; import ftxui.dom; import ftxui.screen; import ftxui.util; - Remove dependency on 'pthread'.
Component
- Fix ScreenInteractive::FixedSize screen stomps on the preceding terminal output. Thanks @zozowell in #1064.
- Fix vertical
ftxui::Slider. The "up" key was previously decreasing the value. Thanks @its-pablo in #1093 for reporting the issue.
6.1.9 (2025-05-07)
Build
If all goes well (pending), ftxui should appear in the Bazel central repository. It can be imported into your project using the following lines:
MODULE.bazel
bazel_dep(name = "ftxui", version = "6.1.9")
Thanks @robinlinden and @kcc for the reviews.
dom
- Bugfix: Restore the
dboxbehavior from ftxui 5.0.0. To apply bgcolor blending between the two layers, a newdboxBlendwill be added.
6.1.8 (2025-05-01)
Build
-
Feature: Support
bazelbuild system. See #1032. Proposed by Kostya Serebryany @kccBUILD.bazel
deps = [ // Depend on the whole library: "@ftxui//:ftxui", // Choose a specific submodule: "@ftxui//:component", "@ftxui//:dom", "@ftxui//:screen", ]
Component
- Bugfix: Fix a crash with ResizeableSplit. See #1023.
- Clamp screen size to terminal size.
- Disallow
ResizeableSplitwith negative size.
Dom
- Bugfix: Disallow specifying a negative size constraint. See #1023.
6.0.2 (2025-03-30)
Component
- BugFix: Fix major crash on Windows affecting all components. See #1020
- BugFix: Fix focusRelative.
6.0.1 (2025-03-28)
Same as v6.0.0.
Due to a problem tag v6.0.0 was replaced. This isn't a good practice and affect developers that started using it in the short timeframe. Submitting a new release with the same content is the best way to fix this.
See #1017 and #1019.
6.0.0 (2025-03-23)
Component
- Feature: Add support for raw input. Allowing more keys to be detected.
- Feature: Add
ScreenInteractive::ForceHandleCtrlC(false)to allow component to fully override the defaultCtrl+Chandler. - Feature: Add
ScreenInteractive::ForceHandleCtrlZ(false)to allow component to fully override the defaultCtrl+Zhandler. - Feature: Add
Mouse::WeelLeftandMouse::WeelRightevents on supported terminals. - Feature: Add
Event::DebugString(). - Feature: Add support for
Input's insert mode. AddInputOption::insertoption. Added by @mingsheng13. - Feature: Add
DropdownOptionto configure the dropdown. See #826. - Feature: Add support for Selection. Thanks @clement-roblot. See #926.
- See
ScreenInteractive::GetSelection(). - See
ScreenInteractive::SelectionChange(...)listener.
- See
- Bugfix/Breaking change:
Mouse transition:- Detect when the mouse move, as opposed to being pressed. The Mouse::Moved motion was added.
- Dragging the mouse with the left button pressed now avoids activating multiple checkboxes.
- A couple of components are now activated when the mouse is pressed, as opposed to being released. This fixes: https://github.com/ArthurSonzogni/FTXUI/issues/773 This fixes: https://github.com/ArthurSonzogni/FTXUI/issues/792
- Bugfix: mouse.control is now reported correctly.
- Feature: Add
ScreenInteractive::FullscreenPrimaryScreen(). This allows displaying a fullscreen component on the primary screen, as opposed to the alternate screen. - Bugfix:
Inputonchangewas not called on backspace or delete key. Fixed by @chrysante in chrysante in PR #776. - Bugfix: Propertly restore cursor shape on exit. See #792.
- Bugfix: Fix cursor position in when in the last column. See #831.
- Bugfix: Fix
ResizeableSplitkeyboard navigation. Fixed by #842. - Bugfix: Fix
Menufocus. See #841 - Feature: Add
ComponentBase::Index(). This allows to get the index of a component in its parent. See #932 - Feature: Add
EntryState::index. This allows to get the index of a menu entry. See #932 - Feature: Add
SliderOption::on_change. This allows to set a callback when the slider value changes. See #938. - Bugfix: Handle
Dropdownwith no entries. - Bugfix: Fix crash in
LinearGradientdue to float precision and an off-by-one mistake. See #998.
Dom
- Feature: Add
italicdecorator. For instance:auto italic_text = text("Italic text") | italic;Proposed by @kenReneris in #1009.auto italic_text = italic(text("Italic text")); - Feature: Add
hscroll_indicator. It display an horizontal indicator reflecting the current scroll position. Proposed by @ibrahimnasson in issue 752 - Feature: Add
extend_beyond_screenoption toDimension::Fit(..), allowing the element to be larger than the screen. Proposed by @LordWhiro. See #572 and #949. - Feature: Add support for Selection. Thanks @clement-roblot. See #926.
- See
selectionColordecorator. - See
selectionBackgroundColordecorator. - See
selectionForegroundColordecorator. - See
selectionStyle(style)decorator. - See
selectionStyleResetdecorator.
- See
- Breaking change: Change how "focus"/"select" are handled. This fixes the behavior.
- Breaking change:
Component::OnRender()becomes the method to override to render a component. This replacesComponent::Render()that is still in use to call the rendering method on the children. This change allows to fix a couple of issues around focus handling.
Screen
- Feature: Add
Box::IsEmpty(). - Feature: Color transparency
- Add
Color::RGBA(r,g,b,a). - Add
Color::HSVA(r,g,b,a). - Add
Color::Blend(Color). - Add
Color::IsOpaque()
- Add
Util
- Feature: Support arbitrary
AdapterforConstStringListRef. See #843.
Build
- Support for cmake's "unity/jumbo" builds. Fixed by @ClausKlein.
5.0.0
Component
- Breaking: MenuDirection enum is renamed Direction
- Breaking: GaugeDirection enum is renamed Direction
- Breaking: Direction enum is renamed WidthOrHeight
- Breaking: Remove
ComponentBasecopy constructor/assignment. - Breaking: MenuOption::entries is renamed MenuOption::entries_option.
- Breaking:
Ref<{Component}Option>becomes{Component}Optionin component constructors. - Feature:
ResizeableSplitnow support arbitrary element as a separator. - Feature:
inputis now supporting multiple lines. - Feature:
inputstyle is now customizeable. - Bugfix: Support F1-F5 from OS terminal.
- Feature: Add struct based constructor:
Component Button(ButtonOption options); Component Checkbox(CheckboxOption options); Component Input(InputOption options); Component Menu(MenuOption options); Component MenuEntry(MenuEntryOption options); Component Radiobox(RadioboxOption options); Component Slider(SliderOption<T> options); Component ResizableSplit(ResizableSplitOption options); - Feature: Add
ScreenInteractive::TrackMouse(false)disable mouse support.
Dom
- Feature: Add
hyperlinkdecorator. For instance:See the OSC 8 page. FTXUI support proposed by @aaleino in #662.auto link = text("Click here") | hyperlink("https://github.com/FTXUI")
Screen
- Breaking:
WordBreakPropertybecomes a uint8_t enum. This yields a 0.8% performance improvement. - Breaking: Remove user defined Pixel constructor and equality operator.
- Performance: 19% faster on benchmarks.
Build
- Check version compatibility when using cmake find_package()
- Add
FTXUI_DEV_WARNINGoptions to turn on warnings when building FTXUI - Turn OFF by default
FTXUI_BUILD_DOCS - Turn OFF by default
FTXUI_BUILD_EXAMPLE
4.1.1
Component
- Fix: Support arrow keys in application mode
- Fix: Remove useless new line when using an alternative screen.
Dom
- Feature: Add the dashed style for border and separator:
- See
DASHEDenum, andseparatorDashed(),borderDashed()functions.
- See
- Feature: Add colored borders.
- See functions:
borderStyled(BorderStyle, Color)andborderStyled(Color).
- See functions:
- Feature: Add
LinearGradient. It can be used incolorandbgColor. - Improvement: Color::Interpolate() uses gamma correction.
- Fix: Check the
grapharea is positive.
Build/Install
- Use globally set CMAKE_CXX_STANDARD if it is set.
- Expose the pkg-config file
- Check version compatibility when using cmake find_package()
4.1.0 (Abandonned)
This version is abandonned and must not be used. It introduced a breaking change in the API.
4.0.0
DOM
- Feature: more styles:
strikethroughunderlinedDouble
- Feature: Customize the cursor. Add the following decorators:
focusCursorBlockfocusCursorBlockBlinkingfocusCursorBarfocusCursorBarBlinkingfocusCursorUnderlinefocusCursorUnderlineBlinking
- Bugfix: Fix
focus/selectwhen thevbox/hbox/dboxcontains aflexbox - Bugfix: Fix the selected/focused area. It used to be 1 cell larger/longer than requested
- Bugfix: Forward the selected/focused area from the child in gridbox.
- Bugfix: Fix incorrect Canvas computed dimensions.
- Bugfix: Support
vscroll_indicatorwith a zero inner size. - Bugfix: Fix
vscroll_indicatorhidding the last column.
Component:
- Feature: Add the
Modalcomponent. - Feature:
Slidersupports taking references for all its arguments. - Feature:
SlidersupportsSliderOption. It supports:- multiple directions.
- multiple colors.
- various values (value, min, max, increment).
- Feature: Define
ScreenInteractive::Exit(). - Feature: Add
Loopto give developers a better control on the main loop. This can be used to integrate FTXUI into another main loop, without taking the full control. - Feature:
Inputsupports CTRL+Left and CTRL+Right - Feature: Use a blinking bar in the
Inputcomponent. - Improvement: The
Menukeeps the focus when an entry is selected with the mouse. - Bugfix: Add implementation of
ButtonOption::Border(). It was missing. - Bugfix: Provide the correct key for F1-F4 and F11.
- Feature: Add the
Hoverablecomponent decorators.
Screen
- Feature: add
Box::Union(a,b) -> Box - Bugfix: Fix resetting
dimclashing with resetting ofbold. - Feature: Add emscripten screen resize support.
- Bugfix: Add unicode 13 support for full width characters.
- Bugfix: Fix MSVC treating codecvt C++17 deprecated function as an error.
Build
- Support using the google test version provided by the package manager.
3.0.0
Build
- breaking: The library prefix is now back to "lib" (the default). This means non-cmake users should not link against "libftxui-dom" for instance.
Component
- Animations module! Components can implement the
OnAnimationmethod and the animation::Animator to define some animated properties.Menunow support animations.Buttonnow supports animations.
- Support SIGTSTP. (ctrl+z).
- Support task posting.
ScreenInteractive::Post(Task). Menucan now be used in the 4 directions, usingMenuOption.direction.Menucan display an animated underline, usingMenuOption.underline.enabled.Buttonis now taking the focus in frame.- breaking All the options are now using a transform function.
- breaking The
Togglecomponent is now implemented usingMenu. - bugfix Container::Tab implements
Focusable(). - bugfix Improved default implementations of ComponentBase
Focusable()andActiveChild()methods. - bugfix Automatically convert '\r' keys into '\n' for Linux programs that do not send the correct code for the return key, like the 'bind'. https://github.com/ArthurSonzogni/FTXUI/issues/337
- Add decorator for components:
operator|(Component, ComponentDecorator)operator|(Component, ElementDecorator)operator|=(Component, ComponentDecorator)operator|=(Component, ElementDecorator)- Add the
Maybedecorator. - Add the
CatchEventdecorator. - Add the
Rendererdecorator.
- breaking remove the "deprectated.hpp" header and Input support for wide string.
DOM:
- breaking: The
inverteddecorator now toggle in the inverted attribute. - Add
gaugefor the 4 directions. Expose the following API:
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);
- Add
separatorHSelectorandseparatorVSelectorelements. This can be used to highlight an area. - Add the
automergedecorator. This makes separator characters to be merged with others nearby. - Fix the
Tablerendering function, to allow automerging characters. - Bugfix: The
vscroll_indicatornow computes its offset and size correctly. - Add the
operator|=(Element, Decorator)
Screen:
- Add:
Color::Interpolate(lambda, color_a, color_b).
2.0.0
Features:
Screen
- Add the
automergeto the Pixel bit field. This now controls which pixels are automatically merged.
DOM:
- Add the
Canvasclass andElementFrom('canvas')function. Together users of the library can draw using braille and block characters. - Support
flexboxdom elements. This is build symmetrically to the HTML one. All the following attributes are supported: direction, wrap, justify-content, align-items, align-content, gap - Add the dom elements helper based on
flexbox:paragraphparagraphAlignLeftparagraphAlignCenterparagraphAlignRightparagraphAlignJustify
- Add the helper elements based on
flexbox:hflow(),vflow(). - Add:
focusPositionRelativeandfocusPosition - Add
Tableconstructor from 2D vector of Element, instead of string.
Component
- Add the
collapsiblecomponent. - Add the
ScreenInteractive::WithRestoredIO. This decorates a callback. This runs it with the terminal hooks temporarilly uninstalled. This is useful if you want to execute command using directly stdin/stdout/sterr.
Bug
Table
- The
tablehorizontal and vertical separator are now correctly expanded.
Component
Inputshouldn't take focus when hovered by the mouse.- Modifying
Input's during on_enter/on_change event is now working correctly.
Breaking changes:
- The behavior of
paragraphhas been modified. It now returns en Element, instead of a list of elements.
0.11.1
Component
- Feature: Support for PageUp/PageDown/Home/End buttons.
- Bugfix: Check the selected element are within bounds for Dropdown.
Build
- Bugfix: Package library using the "Release config". Not debug.
0.11
github workflow
- Add Windows ad MacOS artefacts.
- Merge all the workflows.
Bug
- On Unix system, fallback to {80,25} screen dimension on failure.
CMake
- Support for shared library, via
BUILD_SHARED_LIBSoption. - Add library version and symlinks.
0.10 (2021-09-30)
Bug
- Fix the automated merge of borders.
Dom
Table()class to build stylised table. See https://github.com/ArthurSonzogni/FTXUI/discussions/228vscroll_indicator. Show a scrollbar indicator on the right.separatorEmpty. A separator drawing nothing.separatorFixed. A separator drawing the provided character.
Component
Maybe: Display an component conditionnally based on a boolean.Dropdown: A dropdown select list.
0.9 (2021-09-26)
The initial release where changelog where written.
This version includes:
screen
- Style:
- Bold.
- Blink.
- Dim.
- Inverted.
- Underlined.
- Foreground color.
- Background color.
- Support for UTF8 unicode.
- Full wide character: 测试.
- Combining characters: a⃒
- A Stencil buffer.
- Automatically merge box drawing characters.
- Detect terminal dimension.
DOM
-
Element:
text&vtextseparatorand 5 variations.gaugeborderand 6 variations.windowspinnerparagraphandhflow.
-
Layout:
hboxvboxdboxgridboxframe: Drawing inside a virtual area, potentially larger than the real one.focus,select: scroll the inner view of a frame, to be in view.flex& 8 variations.filler
-
Decorators:
bolddiminvertedblinkcolorbgcolorclearunder
Component
- Container:
Container::VerticalContainer::HorizontalContainer::Tab
ButtonCheckboxInputMenuMenuEntryRadioboxToggleSliderRenderer& variationsCatchEvent
MISC
- Fuzzer
- Tests using gtest.
- Doxygen documentation
- IWYU
- 52 examples.
- Support for WebAssembly.
- Support for Window and fallback for broken terminal.