diff --git a/.clang-tidy b/.clang-tidy
index 130bda7205a5f1a18b7eacfe1bd2ad59bc34a8af..f5335f0874836d3a0532f827da9fe7e54db6e573 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -27,6 +27,7 @@ Checks: "*,
         -readability-simplify-boolean-expr,
         -readability-static-accessed-through-instance,
         -readability-use-anyofallof,
+        -readability-avoid-nested-conditional-operator,
         -zircon-*,
 "
 WarningsAsErrors: ''
diff --git a/examples/component/homescreen.cpp b/examples/component/homescreen.cpp
index de0b8cd6a57180890336ace2e91c10e8656b2dd7..d650ba2e4fd2b5873f9785c99c64267602bbf21e 100644
--- a/examples/component/homescreen.cpp
+++ b/examples/component/homescreen.cpp
@@ -490,8 +490,8 @@ int main() {
       },
       &tab_index);
 
-  auto exit_button = Button(
-      "Exit", [&] { screen.Exit(); }, ButtonOption::Animated());
+  auto exit_button =
+      Button("Exit", [&] { screen.Exit(); }, ButtonOption::Animated());
 
   auto main_container = Container::Vertical({
       Container::Horizontal({
diff --git a/include/ftxui/screen/pixel.hpp b/include/ftxui/screen/pixel.hpp
index 8ab686b027bdf8a72eba9f40cf6fe80f0a986940..cbc7cc23ad9a0acbcbf2b8419134d6c27ba39b52 100644
--- a/include/ftxui/screen/pixel.hpp
+++ b/include/ftxui/screen/pixel.hpp
@@ -49,4 +49,4 @@ struct Pixel {
 
 }  // namespace ftxui
 
-#endif // FTXUI_SCREEN_PIXEL_HPP
+#endif  // FTXUI_SCREEN_PIXEL_HPP
diff --git a/src/ftxui/component/button.cpp b/src/ftxui/component/button.cpp
index 03c7f4a03944b2046ad8c621bc71955987ab696a..e2be2afc151358ae2dc85cf1a3e01cb301014067 100644
--- a/src/ftxui/component/button.cpp
+++ b/src/ftxui/component/button.cpp
@@ -205,7 +205,7 @@ Component Button(ButtonOption option) {
 Component Button(ConstStringRef label,
                  std::function<void()> on_click,
                  ButtonOption option) {
-  option.label = label;
+  option.label = std::move(label);
   option.on_click = std::move(on_click);
   return Make<ButtonBase>(std::move(option));
 }
diff --git a/src/ftxui/component/collapsible.cpp b/src/ftxui/component/collapsible.cpp
index 380ead2f333c60ae7f9d02e853e40da1760efe87..a79c855066de5a8eb5144a96b69319ae74b97c55 100644
--- a/src/ftxui/component/collapsible.cpp
+++ b/src/ftxui/component/collapsible.cpp
@@ -47,7 +47,7 @@ Component Collapsible(ConstStringRef label, Component child, Ref<bool> show) {
         return hbox({prefix, t});
       };
       Add(Container::Vertical({
-          Checkbox(label, show_.operator->(), opt),
+          Checkbox(std::move(label), show_.operator->(), opt),
           Maybe(std::move(child), show_.operator->()),
       }));
     }
diff --git a/src/ftxui/component/component.cpp b/src/ftxui/component/component.cpp
index 47d882511dcf4a0c3803cb1a26b32a5ddb8c76b4..6ed4cb267970cbc49fc1029e057da5dbe74e2e95 100644
--- a/src/ftxui/component/component.cpp
+++ b/src/ftxui/component/component.cpp
@@ -5,6 +5,7 @@
 #include <cassert>    // for assert
 #include <cstddef>    // for size_t
 #include <iterator>   // for begin, end
+#include <memory>     // for unique_ptr, make_unique
 #include <utility>    // for move
 #include <vector>     // for vector, __alloc_traits<>::value_type
 
diff --git a/src/ftxui/component/component_options.cpp b/src/ftxui/component/component_options.cpp
index b89e65b4f06a3569d9ef08bbe8d9606e85f62c85..77b439f36c2efabd2be260a0882796a3f00dab28 100644
--- a/src/ftxui/component/component_options.cpp
+++ b/src/ftxui/component/component_options.cpp
@@ -3,12 +3,11 @@
 // the LICENSE file.
 #include "ftxui/component/component_options.hpp"
 
-#include <ftxui/dom/linear_gradient.hpp>  // for LinearGradient
 #include <ftxui/screen/color.hpp>  // for Color, Color::White, Color::Black, Color::GrayDark, Color::Blue, Color::GrayLight, Color::Red
 #include <memory>                  // for shared_ptr
 #include <utility>                 // for move
-
 #include "ftxui/component/animation.hpp"  // for Function, Duration
+#include "ftxui/dom/direction.hpp"
 #include "ftxui/dom/elements.hpp"  // for operator|=, Element, text, bgcolor, inverted, bold, dim, operator|, color, borderEmpty, hbox, automerge, border, borderLight
 
 namespace ftxui {
diff --git a/src/ftxui/component/dropdown.cpp b/src/ftxui/component/dropdown.cpp
index 28212829eca2b6d73ff4e039226d47fd2c4b6842..b268dd9f39270b805eea98cea2fcc71a0578ec12 100644
--- a/src/ftxui/component/dropdown.cpp
+++ b/src/ftxui/component/dropdown.cpp
@@ -1,11 +1,11 @@
 // Copyright 2021 Arthur Sonzogni. All rights reserved.
 // Use of this source code is governed by the MIT license that can be found in
 // the LICENSE file.
-#include <cstddef>  // for size_t
 #include <ftxui/component/event.hpp>
 #include <functional>  // for function
 #include <string>      // for string
 
+#include <utility>
 #include "ftxui/component/component.hpp"  // for Maybe, Checkbox, Make, Radiobox, Vertical, Dropdown
 #include "ftxui/component/component_base.hpp"  // for Component, ComponentBase
 #include "ftxui/component/component_options.hpp"  // for CheckboxOption, EntryState
@@ -21,7 +21,7 @@ namespace ftxui {
 /// @param selected The index of the selected entry.
 Component Dropdown(ConstStringListRef entries, int* selected) {
   DropdownOption option;
-  option.radiobox.entries = entries;
+  option.radiobox.entries = std::move(entries);
   option.radiobox.selected = selected;
   return Dropdown(option);
 }
@@ -29,6 +29,7 @@ Component Dropdown(ConstStringListRef entries, int* selected) {
 /// @brief A dropdown menu.
 /// @ingroup component
 /// @param option The options for the dropdown.
+// NOLINTNEXTLINE
 Component Dropdown(DropdownOption option) {
   class Impl : public ComponentBase, public DropdownOption {
    public:
diff --git a/src/ftxui/component/event.cpp b/src/ftxui/component/event.cpp
index 5e663c903da67e8d11d40e337efb32ba7af0c43c..25a5057545553fd2ba77331248aaac6b85941e5b 100644
--- a/src/ftxui/component/event.cpp
+++ b/src/ftxui/component/event.cpp
@@ -1,7 +1,8 @@
 // Copyright 2020 Arthur Sonzogni. All rights reserved.
 // Use of this source code is governed by the MIT license that can be found in
 // the LICENSE file.
-#include <map>      // for map
+#include <map>  // for map
+#include <string>
 #include <utility>  // for move
 
 #include "ftxui/component/event.hpp"
diff --git a/src/ftxui/component/hoverable.cpp b/src/ftxui/component/hoverable.cpp
index 304ebc1720bd48a17f4e234bd5959dcd64b4bab5..85c8e0f2c061f09ae796c434cdecc02ead2e5631 100644
--- a/src/ftxui/component/hoverable.cpp
+++ b/src/ftxui/component/hoverable.cpp
@@ -1,9 +1,8 @@
 // Copyright 2022 Arthur Sonzogni. All rights reserved.
 // Use of this source code is governed by the MIT license that can be found in
 // the LICENSE file.
-#include <ftxui/component/captured_mouse.hpp>  // for CapturedMouse
-#include <functional>                          // for function
-#include <utility>                             // for move
+#include <functional>  // for function
+#include <utility>     // for move
 
 #include "ftxui/component/component.hpp"  // for ComponentDecorator, Hoverable, Make
 #include "ftxui/component/component_base.hpp"  // for ComponentBase
diff --git a/src/ftxui/component/hoverable_test.cpp b/src/ftxui/component/hoverable_test.cpp
index e7ac66c7be15079397330461b5f3bbf6f11e4c92..695b90a02b2db32fb291d97ea83af1a9d89aa47e 100644
--- a/src/ftxui/component/hoverable_test.cpp
+++ b/src/ftxui/component/hoverable_test.cpp
@@ -69,10 +69,10 @@ TEST(HoverableTest, BasicCallback) {
   int on_enter_2 = 0;
   int on_leave_1 = 0;
   int on_leave_2 = 0;
-  auto c1 = Hoverable(
-      BasicComponent(), [&] { on_enter_1++; }, [&] { on_leave_1++; });
-  auto c2 = Hoverable(
-      BasicComponent(), [&] { on_enter_2++; }, [&] { on_leave_2++; });
+  auto c1 =
+      Hoverable(BasicComponent(), [&] { on_enter_1++; }, [&] { on_leave_1++; });
+  auto c2 =
+      Hoverable(BasicComponent(), [&] { on_enter_2++; }, [&] { on_leave_2++; });
   auto layout = Container::Horizontal({c1, c2});
   auto screen = Screen(8, 2);
   Render(screen, layout->Render());
diff --git a/src/ftxui/component/input.cpp b/src/ftxui/component/input.cpp
index b0cf92d136b7f26cc722e854c68ebf61deb1270d..8f5d728c7c85c1e0fbd81d94f1624353d2de84ea 100644
--- a/src/ftxui/component/input.cpp
+++ b/src/ftxui/component/input.cpp
@@ -5,13 +5,11 @@
 #include <cstddef>     // for size_t
 #include <cstdint>     // for uint32_t
 #include <functional>  // for function
-#include <memory>   // for allocator, shared_ptr, allocator_traits<>::value_type
-#include <sstream>  // for basic_istream, stringstream
-#include <string>   // for string, basic_string, operator==, getline
-#include <utility>  // for move
-#include <vector>   // for vector
+#include <sstream>     // for basic_istream, stringstream
+#include <string>      // for string, basic_string, operator==, getline
+#include <utility>     // for move
+#include <vector>      // for vector
 
-#include "ftxui/component/captured_mouse.hpp"     // for CapturedMouse
 #include "ftxui/component/component.hpp"          // for Make, Input
 #include "ftxui/component/component_base.hpp"     // for ComponentBase
 #include "ftxui/component/component_options.hpp"  // for InputOption
@@ -134,7 +132,7 @@ class InputBase : public ComponentBase, public InputOption {
         break;
       }
 
-      cursor_char_index -= line.size() + 1;
+      cursor_char_index -= static_cast<int>(line.size() + 1);
       cursor_line++;
     }
 
@@ -164,7 +162,7 @@ class InputBase : public ComponentBase, public InputOption {
 
       // The cursor is on this line.
       const int glyph_start = cursor_char_index;
-      const int glyph_end = GlyphNext(line, glyph_start);
+      const int glyph_end = static_cast<int>(GlyphNext(line, glyph_start));
       const std::string part_before_cursor = line.substr(0, glyph_start);
       const std::string part_at_cursor =
           line.substr(glyph_start, glyph_end - glyph_start);
@@ -206,7 +204,7 @@ class InputBase : public ComponentBase, public InputOption {
     const size_t start = GlyphPrevious(content(), cursor_position());
     const size_t end = cursor_position();
     content->erase(start, end - start);
-    cursor_position() = start;
+    cursor_position() = static_cast<int>(start);
     on_change();
     return true;
   }
@@ -234,7 +232,8 @@ class InputBase : public ComponentBase, public InputOption {
       return false;
     }
 
-    cursor_position() = GlyphPrevious(content(), cursor_position());
+    cursor_position() =
+        static_cast<int>(GlyphPrevious(content(), cursor_position()));
     return true;
   }
 
@@ -243,7 +242,8 @@ class InputBase : public ComponentBase, public InputOption {
       return false;
     }
 
-    cursor_position() = GlyphNext(content(), cursor_position());
+    cursor_position() =
+        static_cast<int>(GlyphNext(content(), cursor_position()));
     return true;
   }
 
@@ -258,7 +258,7 @@ class InputBase : public ComponentBase, public InputOption {
       if (content()[iter] == '\n') {
         break;
       }
-      width += GlyphWidth(content(), iter);
+      width += static_cast<int>(GlyphWidth(content(), iter));
     }
     return width;
   }
@@ -271,8 +271,9 @@ class InputBase : public ComponentBase, public InputOption {
         return;
       }
 
-      columns -= GlyphWidth(content(), cursor_position());
-      cursor_position() = GlyphNext(content(), cursor_position());
+      columns -= static_cast<int>(GlyphWidth(content(), cursor_position()));
+      cursor_position() =
+          static_cast<int>(GlyphNext(content(), cursor_position()));
     }
   }
 
@@ -292,9 +293,10 @@ class InputBase : public ComponentBase, public InputOption {
       if (content()[previous] == '\n') {
         break;
       }
-      cursor_position() = previous;
+      cursor_position() = static_cast<int>(previous);
     }
-    cursor_position() = GlyphPrevious(content(), cursor_position());
+    cursor_position() =
+        static_cast<int>(GlyphPrevious(content(), cursor_position()));
     while (true) {
       if (cursor_position() == 0) {
         break;
@@ -303,10 +305,10 @@ class InputBase : public ComponentBase, public InputOption {
       if (content()[previous] == '\n') {
         break;
       }
-      cursor_position() = previous;
+      cursor_position() = static_cast<int>(previous);
     }
 
-    MoveCursorColumn(columns);
+    MoveCursorColumn(static_cast<int>(columns));
     return true;
   }
 
@@ -322,14 +324,16 @@ class InputBase : public ComponentBase, public InputOption {
       if (content()[cursor_position()] == '\n') {
         break;
       }
-      cursor_position() = GlyphNext(content(), cursor_position());
+      cursor_position() =
+          static_cast<int>(GlyphNext(content(), cursor_position()));
       if (cursor_position() == (int)content().size()) {
         return true;
       }
     }
-    cursor_position() = GlyphNext(content(), cursor_position());
+    cursor_position() =
+        static_cast<int>(GlyphNext(content(), cursor_position()));
 
-    MoveCursorColumn(columns);
+    MoveCursorColumn(static_cast<int>(columns));
     return true;
   }
 
@@ -339,7 +343,7 @@ class InputBase : public ComponentBase, public InputOption {
   }
 
   bool HandleEnd() {
-    cursor_position() = content->size();
+    cursor_position() = static_cast<int>(content->size());
     return true;
   }
 
@@ -357,7 +361,7 @@ class InputBase : public ComponentBase, public InputOption {
       DeleteImpl();
     }
     content->insert(cursor_position(), character);
-    cursor_position() += character.size();
+    cursor_position() += static_cast<int>(character.size());
     on_change();
     return true;
   }
@@ -421,7 +425,7 @@ class InputBase : public ComponentBase, public InputOption {
       if (IsWordCharacter(content(), previous)) {
         break;
       }
-      cursor_position() = previous;
+      cursor_position() = static_cast<int>(previous);
     }
     // Move left, as long as left is a word character:
     while (cursor_position()) {
@@ -429,7 +433,7 @@ class InputBase : public ComponentBase, public InputOption {
       if (!IsWordCharacter(content(), previous)) {
         break;
       }
-      cursor_position() = previous;
+      cursor_position() = static_cast<int>(previous);
     }
     return true;
   }
@@ -441,7 +445,8 @@ class InputBase : public ComponentBase, public InputOption {
 
     // Move right, until entering a word.
     while (cursor_position() < (int)content().size()) {
-      cursor_position() = GlyphNext(content(), cursor_position());
+      cursor_position() =
+          static_cast<int>(GlyphNext(content(), cursor_position()));
       if (IsWordCharacter(content(), cursor_position())) {
         break;
       }
@@ -452,7 +457,7 @@ class InputBase : public ComponentBase, public InputOption {
       if (!IsWordCharacter(content(), cursor_position())) {
         break;
       }
-      cursor_position() = next;
+      cursor_position() = static_cast<int>(next);
     }
 
     return true;
@@ -489,7 +494,7 @@ class InputBase : public ComponentBase, public InputOption {
         break;
       }
 
-      cursor_char_index -= line.size() + 1;
+      cursor_char_index -= static_cast<int>(line.size() + 1);
       cursor_line++;
     }
     const int cursor_column =
@@ -515,11 +520,13 @@ class InputBase : public ComponentBase, public InputOption {
     // Convert back the new_cursor_{line,column} toward cursor_position:
     cursor_position() = 0;
     for (int i = 0; i < new_cursor_line; ++i) {
-      cursor_position() += lines[i].size() + 1;
+      cursor_position() += static_cast<int>(lines[i].size() + 1);
     }
     while (new_cursor_column > 0) {
-      new_cursor_column -= GlyphWidth(content(), cursor_position());
-      cursor_position() = GlyphNext(content(), cursor_position());
+      new_cursor_column -=
+          static_cast<int>(GlyphWidth(content(), cursor_position()));
+      cursor_position() =
+          static_cast<int>(GlyphNext(content(), cursor_position()));
     }
 
     on_change();
diff --git a/src/ftxui/component/menu.cpp b/src/ftxui/component/menu.cpp
index 4de8ec818027cb2f1cde62f51ea365222d3713fe..4fc4d0b9170567f98e5d66e58a2cb4e9c798c6b8 100644
--- a/src/ftxui/component/menu.cpp
+++ b/src/ftxui/component/menu.cpp
@@ -511,6 +511,7 @@ class MenuBase : public ComponentBase, public MenuOption {
 ///   entry 2
 ///   entry 3
 /// ```
+// NOLINTNEXTLINE
 Component Menu(MenuOption option) {
   return Make<MenuBase>(std::move(option));
 }
@@ -543,7 +544,7 @@ Component Menu(MenuOption option) {
 ///   entry 3
 /// ```
 Component Menu(ConstStringListRef entries, int* selected, MenuOption option) {
-  option.entries = entries;
+  option.entries = std::move(entries);
   option.selected = selected;
   return Menu(option);
 }
@@ -554,7 +555,7 @@ Component Menu(ConstStringListRef entries, int* selected, MenuOption option) {
 /// See also |Menu|.
 /// @ingroup component
 Component Toggle(ConstStringListRef entries, int* selected) {
-  return Menu(entries, selected, MenuOption::Toggle());
+  return Menu(std::move(entries), selected, MenuOption::Toggle());
 }
 
 /// @brief A specific menu entry. They can be put into a Container::Vertical to
diff --git a/src/ftxui/component/radiobox.cpp b/src/ftxui/component/radiobox.cpp
index 41f29b30d6f20a7d7c2c095ad5d88373a69b4534..bb775000fdcfae021591c1f1ba6ffb0e2d32a287 100644
--- a/src/ftxui/component/radiobox.cpp
+++ b/src/ftxui/component/radiobox.cpp
@@ -204,6 +204,7 @@ class RadioboxBase : public ComponentBase, public RadioboxOption {
 /// ○ entry 2
 /// ○ entry 3
 /// ```
+/// NOLINTNEXTLINE
 Component Radiobox(RadioboxOption option) {
   return Make<RadioboxBase>(std::move(option));
 }
@@ -239,7 +240,7 @@ Component Radiobox(RadioboxOption option) {
 Component Radiobox(ConstStringListRef entries,
                    int* selected,
                    RadioboxOption option) {
-  option.entries = entries;
+  option.entries = std::move(entries);
   option.selected = selected;
   return Make<RadioboxBase>(std::move(option));
 }
diff --git a/src/ftxui/component/screen_interactive.cpp b/src/ftxui/component/screen_interactive.cpp
index 997f690ab1b79395be184e59d786e41c366bb166..ead776bd1bb95dee88256e62bb805b128cc43256 100644
--- a/src/ftxui/component/screen_interactive.cpp
+++ b/src/ftxui/component/screen_interactive.cpp
@@ -1,34 +1,38 @@
 // Copyright 2020 Arthur Sonzogni. All rights reserved.
 // Use of this source code is governed by the MIT license that can be found in
 // the LICENSE file.
+#include "ftxui/component/screen_interactive.hpp"
 #include <algorithm>  // for copy, max, min
 #include <array>      // for array
+#include <atomic>
 #include <chrono>  // for operator-, milliseconds, operator>=, duration, common_type<>::type, time_point
 #include <csignal>  // for signal, SIGTSTP, SIGABRT, SIGWINCH, raise, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM, __sighandler_t, size_t
-#include <cstdio>   // for fileno, stdin
+#include <cstdint>
+#include <cstdio>                    // for fileno, stdin
 #include <ftxui/component/task.hpp>  // for Task, Closure, AnimationTask
 #include <ftxui/screen/screen.hpp>  // for Pixel, Screen::Cursor, Screen, Screen::Cursor::Hidden
 #include <functional>        // for function
 #include <initializer_list>  // for initializer_list
 #include <iostream>  // for cout, ostream, operator<<, basic_ostream, endl, flush
-#include <stack>     // for stack
-#include <thread>    // for thread, sleep_for
-#include <tuple>     // for _Swallow_assign, ignore
+#include <memory>
+#include <stack>  // for stack
+#include <string>
+#include <thread>       // for thread, sleep_for
+#include <tuple>        // for _Swallow_assign, ignore
 #include <type_traits>  // for decay_t
 #include <utility>      // for move, swap
 #include <variant>      // for visit, variant
 #include <vector>       // for vector
-
 #include "ftxui/component/animation.hpp"  // for TimePoint, Clock, Duration, Params, RequestAnimationFrame
 #include "ftxui/component/captured_mouse.hpp"  // for CapturedMouse, CapturedMouseInterface
 #include "ftxui/component/component_base.hpp"  // for ComponentBase
 #include "ftxui/component/event.hpp"           // for Event
 #include "ftxui/component/loop.hpp"            // for Loop
 #include "ftxui/component/receiver.hpp"  // for ReceiverImpl, Sender, MakeReceiver, SenderImpl, Receiver
-#include "ftxui/component/screen_interactive.hpp"
 #include "ftxui/component/terminal_input_parser.hpp"  // for TerminalInputParser
 #include "ftxui/dom/node.hpp"                         // for Node, Render
 #include "ftxui/dom/requirement.hpp"                  // for Requirement
+#include "ftxui/screen/pixel.hpp"                     // for Pixel
 #include "ftxui/screen/terminal.hpp"                  // for Dimensions, Size
 
 #if defined(_WIN32)
@@ -42,6 +46,7 @@
 #error Must be compiled in UNICODE mode
 #endif
 #else
+#include <bits/types/struct_timeval.h>
 #include <sys/select.h>  // for select, FD_ISSET, FD_SET, FD_ZERO, fd_set, timeval
 #include <termios.h>  // for tcsetattr, termios, tcgetattr, TCSANOW, cc_t, ECHO, ICANON, VMIN, VTIME
 #include <unistd.h>  // for STDIN_FILENO, read
@@ -213,11 +218,11 @@ void RecordSignal(int signal) {
       break;
 
 #if !defined(_WIN32)
-    case SIGTSTP:
+    case SIGTSTP:  // NOLINT
       g_signal_stop_count++;
       break;
 
-    case SIGWINCH:
+    case SIGWINCH:  // NOLINT
       g_signal_resize_count++;
       break;
 #endif
@@ -265,7 +270,7 @@ const std::string ST = "\x1b\\";  // NOLINT
 const std::string DECRQSS_DECSCUSR = DCS + "$q q" + ST;  // NOLINT
 
 // DEC: Digital Equipment Corporation
-enum class DECMode {
+enum class DECMode : std::uint16_t {
   kLineWrap = 7,
   kCursor = 25,
 
@@ -284,7 +289,7 @@ enum class DECMode {
 };
 
 // Device Status Report (DSR) {
-enum class DSRMode {
+enum class DSRMode : std::uint8_t {
   kCursor = 6,
 };
 
@@ -543,7 +548,8 @@ void ScreenInteractive::PostMain() {
     // On final exit, keep the current drawing and reset cursor position one
     // line after it.
     if (!use_alternative_screen_) {
-      std::cout << std::endl;
+      std::cout << '\n';
+      std::cout << std::flush;
     }
   }
 }
@@ -597,7 +603,7 @@ void ScreenInteractive::Install() {
   // Request the terminal to report the current cursor shape. We will restore it
   // on exit.
   std::cout << DECRQSS_DECSCUSR;
-  on_exit_functions.emplace([=] {
+  on_exit_functions.emplace([cursor_reset_shape_ = cursor_reset_shape_] {
     std::cout << "\033[?25h";  // Enable cursor.
     std::cout << "\033[" + std::to_string(cursor_reset_shape_) + " q";
   });
diff --git a/src/ftxui/component/terminal_input_parser.cpp b/src/ftxui/component/terminal_input_parser.cpp
index f07afa9771e7be65ad3490520c67ea0f2fb7d3d2..2100d9edd3b9fc7b58bcd10215e54bad0a0043d8 100644
--- a/src/ftxui/component/terminal_input_parser.cpp
+++ b/src/ftxui/component/terminal_input_parser.cpp
@@ -9,7 +9,7 @@
 #include <map>
 #include <memory>   // for unique_ptr, allocator
 #include <utility>  // for move
-
+#include <vector>
 #include "ftxui/component/event.hpp"  // for Event
 #include "ftxui/component/task.hpp"   // for Task
 
diff --git a/src/ftxui/component/window.cpp b/src/ftxui/component/window.cpp
index b2b96cebfb6e8d3f9cbebfe53e9199d1918208e6..4f8e44e5511ad3cbdabb880613e2e90482bed558 100644
--- a/src/ftxui/component/window.cpp
+++ b/src/ftxui/component/window.cpp
@@ -5,8 +5,14 @@
 #include <algorithm>
 #include <ftxui/component/component.hpp>
 #include <ftxui/component/component_base.hpp>
+#include <ftxui/component/component_options.hpp>
 #include <ftxui/component/screen_interactive.hpp>  // for ScreenInteractive
-#include "ftxui/dom/node_decorator.hpp"            // for NodeDecorator
+#include <memory>
+#include <utility>
+#include "ftxui/dom/elements.hpp"  // for text, window, hbox, vbox, size, clear_under, reflect, emptyElement
+#include "ftxui/dom/node_decorator.hpp"  // for NodeDecorator
+#include "ftxui/screen/color.hpp"        // for Color
+#include "ftxui/screen/screen.hpp"       // for Screen
 
 namespace ftxui {
 
@@ -206,7 +212,7 @@ class WindowImpl : public ComponentBase, public WindowOptions {
       }
 
       // Clamp the window size.
-      width() = std::max<int>(width(), title().size() + 2);
+      width() = std::max<int>(width(), static_cast<int>(title().size() + 2));
       height() = std::max<int>(height(), 2);
 
       return true;
diff --git a/src/ftxui/dom/benchmark_test.cpp b/src/ftxui/dom/benchmark_test.cpp
index fa90b8cde241971b891dd146b9b4577f6f993e18..062cb234904e9bef7c7e68b60a37d61ea868b402 100644
--- a/src/ftxui/dom/benchmark_test.cpp
+++ b/src/ftxui/dom/benchmark_test.cpp
@@ -2,7 +2,6 @@
 // Use of this source code is governed by the MIT license that can be found in
 // the LICENSE file.
 #include <benchmark/benchmark.h>
-#include <iostream>
 
 #include "ftxui/dom/elements.hpp"  // for gauge, separator, operator|, text, Element, hbox, vbox, blink, border, inverted
 #include "ftxui/dom/node.hpp"      // for Render
diff --git a/src/ftxui/dom/border.cpp b/src/ftxui/dom/border.cpp
index 5616a560368b0097e45d85df0d1179ecc0947088..b6756980335acf49e46e7c75b1d984c5ece58618 100644
--- a/src/ftxui/dom/border.cpp
+++ b/src/ftxui/dom/border.cpp
@@ -8,12 +8,12 @@
 #include <optional>  // for optional, nullopt
 #include <string>    // for basic_string, string
 #include <utility>   // for move
-#include <vector>    // for __alloc_traits<>::value_type
 
 #include "ftxui/dom/elements.hpp"  // for unpack, Element, Decorator, BorderStyle, ROUNDED, borderStyled, Elements, DASHED, DOUBLE, EMPTY, HEAVY, LIGHT, border, borderDashed, borderDouble, borderEmpty, borderHeavy, borderLight, borderRounded, borderWith, window
 #include "ftxui/dom/node.hpp"      // for Node, Elements
 #include "ftxui/dom/requirement.hpp"  // for Requirement
 #include "ftxui/screen/box.hpp"       // for Box
+#include "ftxui/screen/pixel.hpp"     // for Pixel
 #include "ftxui/screen/screen.hpp"    // for Pixel, Screen
 
 namespace ftxui {
@@ -38,7 +38,8 @@ class Border : public Node {
          BorderStyle style,
          std::optional<Color> foreground_color = std::nullopt)
       : Node(std::move(children)),
-        charset_(simple_border_charset[style]),
+        charset_(simple_border_charset[style])  // NOLINT
+        ,
         foreground_color_(foreground_color) {}  // NOLINT
 
   const Charset& charset_;  // NOLINT
diff --git a/src/ftxui/dom/box_helper.cpp b/src/ftxui/dom/box_helper.cpp
index a09b8e279cedd7e055d8f5aa791599fd28f48704..8284cf309411b806adad0bf11e9891ea9d3387aa 100644
--- a/src/ftxui/dom/box_helper.cpp
+++ b/src/ftxui/dom/box_helper.cpp
@@ -4,6 +4,7 @@
 #include "ftxui/dom/box_helper.hpp"
 
 #include <algorithm>  // for max
+#include <vector>     // for vector
 
 namespace ftxui::box_helper {
 
diff --git a/src/ftxui/dom/canvas.cpp b/src/ftxui/dom/canvas.cpp
index a78b8948b09457ca4c402a51ccbab69714e4ed47..ef726721b61a8dfe0eb6f15868229cf201ff70de 100644
--- a/src/ftxui/dom/canvas.cpp
+++ b/src/ftxui/dom/canvas.cpp
@@ -8,6 +8,7 @@
 #include <cstdint>                 // for uint8_t
 #include <cstdlib>                 // for abs
 #include <ftxui/screen/color.hpp>  // for Color
+#include <functional>              // for function
 #include <map>                     // for map
 #include <memory>                  // for make_shared
 #include <utility>                 // for move, pair
@@ -17,6 +18,8 @@
 #include "ftxui/dom/node.hpp"         // for Node
 #include "ftxui/dom/requirement.hpp"  // for Requirement
 #include "ftxui/screen/box.hpp"       // for Box
+#include "ftxui/screen/image.hpp"     // for Image
+#include "ftxui/screen/pixel.hpp"     // for Pixel
 #include "ftxui/screen/screen.hpp"    // for Pixel, Screen
 #include "ftxui/screen/string.hpp"    // for Utf8ToGlyphs
 #include "ftxui/util/ref.hpp"         // for ConstRef
@@ -28,7 +31,7 @@ namespace {
 // Base UTF8 pattern:
 // 11100010 10100000 10000000 // empty
 
-// Pattern for the individuel dots:
+// Pattern for the individual dots:
 // ┌──────┬───────┐
 // │dot1  │ dot4  │
 // ├──────┼───────┤
diff --git a/src/ftxui/dom/dbox.cpp b/src/ftxui/dom/dbox.cpp
index a75321550437a85be6ff1b31302940a34550c495..c6e752e76da530a607f068145662d84c15f38139 100644
--- a/src/ftxui/dom/dbox.cpp
+++ b/src/ftxui/dom/dbox.cpp
@@ -2,13 +2,16 @@
 // Use of this source code is governed by the MIT license that can be found in
 // the LICENSE file.
 #include <algorithm>  // for max
+#include <cstddef>    // for size_t
 #include <memory>     // for __shared_ptr_access, shared_ptr, make_shared
 #include <utility>    // for move
+#include <vector>
 
 #include "ftxui/dom/elements.hpp"     // for Element, Elements, dbox
 #include "ftxui/dom/node.hpp"         // for Node, Elements
 #include "ftxui/dom/requirement.hpp"  // for Requirement
 #include "ftxui/screen/box.hpp"       // for Box
+#include "ftxui/screen/pixel.hpp"     // for Pixel
 
 namespace ftxui {
 
@@ -49,12 +52,13 @@ class DBox : public Node {
 
   void Render(Screen& screen) override {
     if (children_.size() <= 1) {
-      return Node::Render(screen);
+      Node::Render(screen);
+      return;
     }
 
     const int width = box_.x_max - box_.x_min + 1;
     const int height = box_.y_max - box_.y_min + 1;
-    std::vector<Pixel> pixels(size_t(width * height));
+    std::vector<Pixel> pixels(std::size_t(width * height));
 
     for (auto& child : children_) {
       child->Render(screen);
@@ -67,7 +71,7 @@ class DBox : public Node {
           acc->background_color =
               Color::Blend(acc->background_color, pixel.background_color);
           acc->automerge = pixel.automerge || acc->automerge;
-          if (pixel.character == "") {
+          if (pixel.character.empty()) {
             acc->foreground_color =
                 Color::Blend(acc->foreground_color, pixel.background_color);
           } else {
@@ -82,7 +86,7 @@ class DBox : public Node {
             acc->character = pixel.character;
             acc->foreground_color = pixel.foreground_color;
           }
-          ++acc;
+          ++acc;  // NOLINT
 
           pixel = Pixel();
         }
@@ -93,7 +97,7 @@ class DBox : public Node {
     Pixel* acc = pixels.data();
     for (int x = 0; x < width; ++x) {
       for (int y = 0; y < height; ++y) {
-        screen.PixelAt(x + box_.x_min, y + box_.y_min) = *acc++;
+        screen.PixelAt(x + box_.x_min, y + box_.y_min) = *acc++;  // NOLINT
       }
     }
   }
diff --git a/src/ftxui/dom/flex.cpp b/src/ftxui/dom/flex.cpp
index 992bb2dd0eef2bdde00fb4e3fc5363698a98496f..2fd3adf67d1129e3e9a37ef3671837843f1b2338 100644
--- a/src/ftxui/dom/flex.cpp
+++ b/src/ftxui/dom/flex.cpp
@@ -3,7 +3,6 @@
 // the LICENSE file.
 #include <memory>   // for make_shared, __shared_ptr_access
 #include <utility>  // for move
-#include <vector>   // for __alloc_traits<>::value_type
 
 #include "ftxui/dom/elements.hpp"  // for Element, unpack, filler, flex, flex_grow, flex_shrink, notflex, xflex, xflex_grow, xflex_shrink, yflex, yflex_grow, yflex_shrink
 #include "ftxui/dom/node.hpp"      // for Elements, Node
diff --git a/src/ftxui/dom/flexbox_helper.cpp b/src/ftxui/dom/flexbox_helper.cpp
index e1a0274e9016b837d6d31fb9247071cb2e561c85..eb3e8134e527d421f5f95ced16c611ce82bd4895 100644
--- a/src/ftxui/dom/flexbox_helper.cpp
+++ b/src/ftxui/dom/flexbox_helper.cpp
@@ -7,6 +7,7 @@
 #include <cstddef>                       // for size_t
 #include <ftxui/dom/flexbox_config.hpp>  // for FlexboxConfig, FlexboxConfig::Direction, FlexboxConfig::AlignContent, FlexboxConfig::JustifyContent, FlexboxConfig::Wrap, FlexboxConfig::Direction::RowInversed, FlexboxConfig::AlignItems, FlexboxConfig::Direction::Row, FlexboxConfig::Direction::Column, FlexboxConfig::Direction::ColumnInversed, FlexboxConfig::Wrap::WrapInversed, FlexboxConfig::AlignContent::Stretch, FlexboxConfig::JustifyContent::Stretch, FlexboxConfig::Wrap::Wrap, FlexboxConfig::AlignContent::Center, FlexboxConfig::AlignContent::FlexEnd, FlexboxConfig::AlignContent::FlexStart, FlexboxConfig::AlignContent::SpaceAround, FlexboxConfig::AlignContent::SpaceBetween, FlexboxConfig::AlignContent::SpaceEvenly, FlexboxConfig::AlignItems::Center, FlexboxConfig::AlignItems::FlexEnd, FlexboxConfig::AlignItems::FlexStart, FlexboxConfig::AlignItems::Stretch, FlexboxConfig::JustifyContent::Center, FlexboxConfig::JustifyContent::FlexEnd, FlexboxConfig::JustifyContent::FlexStart, FlexboxConfig::JustifyContent::SpaceAround, FlexboxConfig::JustifyContent::SpaceBetween, FlexboxConfig::JustifyContent::SpaceEvenly, FlexboxConfig::Wrap::NoWrap
 #include <utility>                       // for swap, move
+#include <vector>
 
 #include "ftxui/dom/box_helper.hpp"  // for Element, Compute
 
@@ -330,8 +331,8 @@ void Compute3(Global& global) {
         line = Line();
       }
 
-      block.line = lines.size();
-      block.line_position = line.blocks.size();
+      block.line = static_cast<int>(lines.size());
+      block.line_position = static_cast<int>(line.blocks.size());
       line.blocks.push_back(&block);
       x += block.min_size_x + global.config.gap_x;
     }
diff --git a/src/ftxui/dom/reflect.cpp b/src/ftxui/dom/reflect.cpp
index 3155ae8ee62298c430b4a6166bd9ec625814be17..5c5754fbbc2de35d447ad5a9dbb10c6e36703c5b 100644
--- a/src/ftxui/dom/reflect.cpp
+++ b/src/ftxui/dom/reflect.cpp
@@ -32,7 +32,7 @@ class Reflect : public Node {
 
   void Render(Screen& screen) final {
     reflected_box_ = Box::Intersection(screen.stencil, reflected_box_);
-    return Node::Render(screen);
+    Node::Render(screen);
   }
 
  private:
diff --git a/src/ftxui/dom/separator.cpp b/src/ftxui/dom/separator.cpp
index dc902af867cd98dac5989d429eff4d892f9143b2..4f68dbaead3695d0a693307a6234d2af4a391a7b 100644
--- a/src/ftxui/dom/separator.cpp
+++ b/src/ftxui/dom/separator.cpp
@@ -11,6 +11,7 @@
 #include "ftxui/dom/requirement.hpp"  // for Requirement
 #include "ftxui/screen/box.hpp"       // for Box
 #include "ftxui/screen/color.hpp"     // for Color
+#include "ftxui/screen/pixel.hpp"     // for Pixel
 #include "ftxui/screen/screen.hpp"    // for Pixel, Screen
 
 namespace ftxui {
@@ -63,7 +64,8 @@ class SeparatorAuto : public Node {
     const bool is_column = (box_.x_max == box_.x_min);
     const bool is_line = (box_.y_min == box_.y_max);
 
-    const std::string c = charsets[style_][int(is_line && !is_column)];
+    const std::string c =
+        charsets[style_][int(is_line && !is_column)];  // NOLINT
 
     for (int y = box_.y_min; y <= box_.y_max; ++y) {
       for (int x = box_.x_min; x <= box_.x_max; ++x) {
diff --git a/src/ftxui/dom/table.cpp b/src/ftxui/dom/table.cpp
index e65b2dda5f3ab580e1167d0d853b9355030cef37..18583aa787c6d166282c645644dd5480136ed98c 100644
--- a/src/ftxui/dom/table.cpp
+++ b/src/ftxui/dom/table.cpp
@@ -6,6 +6,7 @@
 #include <algorithm>  // for max
 #include <memory>   // for allocator, shared_ptr, allocator_traits<>::value_type
 #include <utility>  // for move, swap
+#include <vector>   // for vector
 
 #include "ftxui/dom/elements.hpp"  // for Element, operator|, text, separatorCharacter, Elements, BorderStyle, Decorator, emptyElement, size, gridbox, EQUAL, flex, flex_shrink, HEIGHT, WIDTH
 
diff --git a/src/ftxui/screen/color.cpp b/src/ftxui/screen/color.cpp
index 546241f7319f05f0e6d4e92107108536cfc72403..14e2863c00974b13c292871e23a552e322bb1f42 100644
--- a/src/ftxui/screen/color.cpp
+++ b/src/ftxui/screen/color.cpp
@@ -6,14 +6,12 @@
 #include <array>  // for array
 #include <cmath>
 #include <cstdint>
+#include <string>
 
 #include "ftxui/screen/color_info.hpp"  // for GetColorInfo, ColorInfo
 #include "ftxui/screen/terminal.hpp"  // for ColorSupport, Color, Palette256, TrueColor
 
 namespace ftxui {
-
-using namespace std::literals;
-
 namespace {
 const std::array<const char*, 33> palette16code = {
     "30", "40",   //
@@ -46,22 +44,30 @@ bool Color::operator!=(const Color& rhs) const {
 }
 
 std::string Color::Print(bool is_background_color) const {
-  switch (type_) {
-    case ColorType::Palette1:
-      return is_background_color ? "49"s : "39"s;
-
-    case ColorType::Palette16:
-      return palette16code[2 * red_ + is_background_color];  // NOLINT;
-
-    case ColorType::Palette256:
-      return (is_background_color ? "48;5;"s : "38;5;"s) + std::to_string(red_);
-
-    case ColorType::TrueColor:
-    default:
-      return (is_background_color ? "48;2;"s : "38;2;"s)  //
-             + std::to_string(red_) + ";"                 //
-             + std::to_string(green_) + ";"               //
-             + std::to_string(blue_);                     //
+  if (is_background_color) {
+    switch (type_) {
+      case ColorType::Palette1:
+        return "49";
+      case ColorType::Palette16:
+        return palette16code[2 * red_ + 1];  // NOLINT
+      case ColorType::Palette256:
+        return "48;5;" + std::to_string(red_);
+      case ColorType::TrueColor:
+        return "48;2;" + std::to_string(red_) + ";" + std::to_string(green_) +
+               ";" + std::to_string(blue_);
+    }
+  } else {
+    switch (type_) {
+      case ColorType::Palette1:
+        return "39";
+      case ColorType::Palette16:
+        return palette16code[2 * red_];  // NOLINT
+      case ColorType::Palette256:
+        return "38;5;" + std::to_string(red_);
+      case ColorType::TrueColor:
+        return "38;2;" + std::to_string(red_) + ";" + std::to_string(green_) +
+               ";" + std::to_string(blue_);
+    }
   }
 }
 
diff --git a/src/ftxui/screen/image.cpp b/src/ftxui/screen/image.cpp
index 3fa3fbefd1af4c019970c808abc53745935c7f48..55e4b135ff5481c30764740e762422c92468394a 100644
--- a/src/ftxui/screen/image.cpp
+++ b/src/ftxui/screen/image.cpp
@@ -2,8 +2,11 @@
 // Use of this source code is governed by the MIT license that can be found in
 // the LICENSE file.
 #include <sstream>  // IWYU pragma: keep
+#include <string>
+#include <vector>
 
 #include "ftxui/screen/image.hpp"
+#include "ftxui/screen/pixel.hpp"
 
 namespace ftxui {
 
diff --git a/src/ftxui/screen/screen.cpp b/src/ftxui/screen/screen.cpp
index a04914a0a48725032f0aee61df7f5caa4691c7b0..7bd64e296080290b8f07374a987d7eb46543bee9 100644
--- a/src/ftxui/screen/screen.cpp
+++ b/src/ftxui/screen/screen.cpp
@@ -1,13 +1,16 @@
 // Copyright 2020 Arthur Sonzogni. All rights reserved.
 // Use of this source code is governed by the MIT license that can be found in
 // the LICENSE file.
-#include <cstdint>  // for size_t
+#include <cstddef>  // for size_t
+#include <cstdint>
 #include <iostream>  // for operator<<, stringstream, basic_ostream, flush, cout, ostream
 #include <limits>
 #include <map>      // for _Rb_tree_const_iterator, map, operator!=, operator==
 #include <sstream>  // IWYU pragma: keep
 #include <utility>  // for pair
 
+#include "ftxui/screen/image.hpp"  // for Image
+#include "ftxui/screen/pixel.hpp"  // for Pixel
 #include "ftxui/screen/screen.hpp"
 #include "ftxui/screen/string.hpp"    // for string_width
 #include "ftxui/screen/terminal.hpp"  // for Dimensions, Size
@@ -117,11 +120,11 @@ void UpdatePixelStyle(const Screen* screen,
 }
 
 struct TileEncoding {
-  uint8_t left : 2;
-  uint8_t top : 2;
-  uint8_t right : 2;
-  uint8_t down : 2;
-  uint8_t round : 1;
+  std::uint8_t left : 2;
+  std::uint8_t top : 2;
+  std::uint8_t right : 2;
+  std::uint8_t down : 2;
+  std::uint8_t round : 1;
 
   // clang-format off
   bool operator<(const TileEncoding& other) const {
@@ -521,20 +524,20 @@ void Screen::ApplyShader() {
 }
 // clang-format on
 
-uint8_t Screen::RegisterHyperlink(const std::string& link) {
-  for (size_t i = 0; i < hyperlinks_.size(); ++i) {
+std::uint8_t Screen::RegisterHyperlink(const std::string& link) {
+  for (std::size_t i = 0; i < hyperlinks_.size(); ++i) {
     if (hyperlinks_[i] == link) {
       return i;
     }
   }
-  if (hyperlinks_.size() == std::numeric_limits<uint8_t>::max()) {
+  if (hyperlinks_.size() == std::numeric_limits<std::uint8_t>::max()) {
     return 0;
   }
   hyperlinks_.push_back(link);
   return hyperlinks_.size() - 1;
 }
 
-const std::string& Screen::Hyperlink(uint8_t id) const {
+const std::string& Screen::Hyperlink(std::uint8_t id) const {
   if (id >= hyperlinks_.size()) {
     return hyperlinks_[0];
   }
diff --git a/src/ftxui/screen/string.cpp b/src/ftxui/screen/string.cpp
index 48012f0fc09407754185702373e37a897abbbced..f07b47a5da0bd8fec5825d303224b9e9862c3d41 100644
--- a/src/ftxui/screen/string.cpp
+++ b/src/ftxui/screen/string.cpp
@@ -16,6 +16,7 @@
 #include <cstdint>  // for uint32_t, uint8_t, uint16_t, int32_t
 #include <string>   // for string, basic_string, wstring
 #include <tuple>    // for _Swallow_assign, ignore
+#include <vector>
 
 #include "ftxui/screen/deprecated.hpp"       // for wchar_width, wstring_width
 #include "ftxui/screen/string_internal.hpp"  // for WordBreakProperty, EatCodePoint, CodepointToWordBreakProperty, GlyphCount, GlyphIterate, GlyphNext, GlyphPrevious, IsCombining, IsControl, IsFullWidth, Utf8ToWordBreakProperty
@@ -1355,7 +1356,6 @@ int string_width(const std::string& input) {
 
 std::vector<std::string> Utf8ToGlyphs(const std::string& input) {
   std::vector<std::string> out;
-  const std::string current;
   out.reserve(input.size());
   size_t start = 0;
   size_t end = 0;
diff --git a/src/ftxui/util/ref_test.cpp b/src/ftxui/util/ref_test.cpp
index e21dc56e8113aa9e4ebc29d5eefd5df36744a14c..de9e1015a9fb3848984812bd5425b8377df4829a 100644
--- a/src/ftxui/util/ref_test.cpp
+++ b/src/ftxui/util/ref_test.cpp
@@ -1,3 +1,7 @@
+// Copyright 2023 Arthur Sonzogni. All rights reserved.
+// Use of this source code is governed by the MIT license that can be found in
+// the LICENSE file.
+
 #include "ftxui/util/ref.hpp"
 
 #include <gtest/gtest.h>