ratatui_ruby 0.10.1 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/.builds/ruby-3.2.yml +1 -1
  3. data/.builds/ruby-3.3.yml +1 -1
  4. data/.builds/ruby-3.4.yml +1 -1
  5. data/.builds/ruby-4.0.0.yml +1 -1
  6. data/CHANGELOG.md +45 -0
  7. data/doc/concepts/application_architecture.md +2 -2
  8. data/doc/concepts/application_testing.md +1 -1
  9. data/doc/concepts/custom_widgets.md +2 -2
  10. data/doc/contributors/todo/align/api_completeness_audit-finished.md +375 -0
  11. data/doc/contributors/todo/align/api_completeness_audit-unfinished.md +206 -0
  12. data/doc/contributors/todo/align/terminal.md +647 -0
  13. data/doc/getting_started/quickstart.md +41 -41
  14. data/doc/images/app_cli_rich_moments.gif +0 -0
  15. data/examples/app_cli_rich_moments/README.md +81 -0
  16. data/examples/app_cli_rich_moments/app.rb +189 -0
  17. data/examples/verify_website_managed/README.md +48 -0
  18. data/examples/verify_website_managed/app.rb +36 -0
  19. data/examples/verify_website_menu/README.md +60 -0
  20. data/examples/verify_website_menu/app.rb +57 -0
  21. data/examples/verify_website_spinner/README.md +44 -0
  22. data/examples/verify_website_spinner/app.rb +33 -0
  23. data/ext/ratatui_ruby/Cargo.lock +1 -1
  24. data/ext/ratatui_ruby/Cargo.toml +1 -1
  25. data/ext/ratatui_ruby/src/frame.rs +17 -4
  26. data/ext/ratatui_ruby/src/lib.rs +17 -3
  27. data/ext/ratatui_ruby/src/lib.rs.bak +286 -0
  28. data/ext/ratatui_ruby/src/rendering.rs +38 -25
  29. data/ext/ratatui_ruby/src/rendering.rs.bak +152 -0
  30. data/ext/ratatui_ruby/src/terminal.rs +245 -33
  31. data/ext/ratatui_ruby/src/terminal.rs.bak +381 -0
  32. data/ext/ratatui_ruby/src/terminal.rs.orig +409 -0
  33. data/ext/ratatui_ruby/src/widgets/barchart.rs +4 -3
  34. data/ext/ratatui_ruby/src/widgets/block.rs +4 -4
  35. data/ext/ratatui_ruby/src/widgets/calendar.rs +4 -3
  36. data/ext/ratatui_ruby/src/widgets/canvas.rs +7 -4
  37. data/ext/ratatui_ruby/src/widgets/center.rs +3 -3
  38. data/ext/ratatui_ruby/src/widgets/chart.rs +4 -4
  39. data/ext/ratatui_ruby/src/widgets/clear.rs +6 -6
  40. data/ext/ratatui_ruby/src/widgets/cursor.rs +10 -7
  41. data/ext/ratatui_ruby/src/widgets/gauge.rs +4 -3
  42. data/ext/ratatui_ruby/src/widgets/layout.rs +3 -3
  43. data/ext/ratatui_ruby/src/widgets/line_gauge.rs +4 -3
  44. data/ext/ratatui_ruby/src/widgets/list.rs +6 -9
  45. data/ext/ratatui_ruby/src/widgets/overlay.rs +3 -3
  46. data/ext/ratatui_ruby/src/widgets/paragraph.rs +5 -6
  47. data/ext/ratatui_ruby/src/widgets/ratatui_logo.rs +4 -4
  48. data/ext/ratatui_ruby/src/widgets/ratatui_mascot.rs +8 -4
  49. data/ext/ratatui_ruby/src/widgets/scrollbar.rs +10 -10
  50. data/ext/ratatui_ruby/src/widgets/sparkline.rs +4 -3
  51. data/ext/ratatui_ruby/src/widgets/table.rs +6 -6
  52. data/ext/ratatui_ruby/src/widgets/tabs.rs +4 -3
  53. data/lib/ratatui_ruby/labs/a11y.rb +182 -0
  54. data/lib/ratatui_ruby/labs/frame_a11y_capture.rb +50 -0
  55. data/lib/ratatui_ruby/labs.rb +47 -0
  56. data/lib/ratatui_ruby/layout/position.rb +26 -0
  57. data/lib/ratatui_ruby/layout/rect.rb +24 -0
  58. data/lib/ratatui_ruby/terminal/viewport.rb +80 -0
  59. data/lib/ratatui_ruby/terminal_lifecycle.rb +164 -6
  60. data/lib/ratatui_ruby/terminal_lifecycle.rb.bak +197 -0
  61. data/lib/ratatui_ruby/test_helper/terminal.rb +8 -1
  62. data/lib/ratatui_ruby/tui/core.rb +16 -0
  63. data/lib/ratatui_ruby/version.rb +1 -1
  64. data/lib/ratatui_ruby.rb +82 -3
  65. data/migrate_to_buffer.rb +145 -0
  66. data/sig/examples/app_cli_rich_moments/app.rbs +12 -0
  67. data/sig/ratatui_ruby/labs.rbs +90 -0
  68. data/sig/ratatui_ruby/ratatui_ruby.rbs +12 -4
  69. data/sig/ratatui_ruby/terminal/viewport.rbs +19 -0
  70. data/sig/ratatui_ruby/terminal_lifecycle.rbs +13 -5
  71. data/sig/ratatui_ruby/tui/core.rbs +3 -0
  72. data/tasks/resources/index.html.erb +127 -30
  73. data/tasks/website/version.rb +2 -2
  74. data/tasks/website/versioned_documentation.rb +1 -1
  75. data/tasks/website.rake +1 -1
  76. metadata +30 -5
  77. /data/doc/contributors/{future_work.md → todo/future_work.md} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e12255e203dd3005db171f1c2062095644a5602b3384a1a820252f84f926abe
4
- data.tar.gz: eefb8e9f9e5c4549eff00c36c4789ab7e13dbb508f7fb3edae86977eacdc17f5
3
+ metadata.gz: 45627e7b77b76ba56a7cb5bb3b0cb578d282a26782c6702abdc87893d89e14a9
4
+ data.tar.gz: b401cd48eb576970a74c8efc7bf22dba20a9bbd4d4378ff85b4a3f45797a3e31
5
5
  SHA512:
6
- metadata.gz: 5cb1c1695d98e23db66e938e2f8525d148d2a0076520312d62f17aacfe437c116b35477dc9c670b8e0a452831ca2e6a34684feac38d928a988430f49795f4534
7
- data.tar.gz: e3c222831be6b4812f41bfbffe15024508a587769df0cbf5f1b5a65f7ac19c0010dbab7ffcafe7d669c41817a6bb2475d2437522d587f13f8f79c07338d6ba9d
6
+ metadata.gz: 8ef1ed4f7c6c35df19e7955fd9fc752e5b73da316380fe21c9927b3f5c5fbc3d959948821b0c795572edf58cd43627be65922452f93dfa51dd54f93e1a2b164b
7
+ data.tar.gz: 13c4cb8c1de48f10920128527222f4ae94db9ac98f0ec1b3b975b3edd0a221859f352a2ddc570b0d955f566a393341413ea2e0ed9ea4e1e12f596973bf657723
data/.builds/ruby-3.2.yml CHANGED
@@ -16,7 +16,7 @@ packages:
16
16
  - clang
17
17
  - git
18
18
  artifacts:
19
- - ratatui_ruby/pkg/ratatui_ruby-0.10.1.gem
19
+ - ratatui_ruby/pkg/ratatui_ruby-0.10.3.gem
20
20
  sources:
21
21
  - https://git.sr.ht/~kerrick/ratatui_ruby
22
22
  tasks:
data/.builds/ruby-3.3.yml CHANGED
@@ -16,7 +16,7 @@ packages:
16
16
  - clang
17
17
  - git
18
18
  artifacts:
19
- - ratatui_ruby/pkg/ratatui_ruby-0.10.1.gem
19
+ - ratatui_ruby/pkg/ratatui_ruby-0.10.3.gem
20
20
  sources:
21
21
  - https://git.sr.ht/~kerrick/ratatui_ruby
22
22
  tasks:
data/.builds/ruby-3.4.yml CHANGED
@@ -16,7 +16,7 @@ packages:
16
16
  - clang
17
17
  - git
18
18
  artifacts:
19
- - ratatui_ruby/pkg/ratatui_ruby-0.10.1.gem
19
+ - ratatui_ruby/pkg/ratatui_ruby-0.10.3.gem
20
20
  sources:
21
21
  - https://git.sr.ht/~kerrick/ratatui_ruby
22
22
  tasks:
@@ -16,7 +16,7 @@ packages:
16
16
  - clang
17
17
  - git
18
18
  artifacts:
19
- - ratatui_ruby/pkg/ratatui_ruby-0.10.1.gem
19
+ - ratatui_ruby/pkg/ratatui_ruby-0.10.3.gem
20
20
  sources:
21
21
  - https://git.sr.ht/~kerrick/ratatui_ruby
22
22
  tasks:
data/CHANGELOG.md CHANGED
@@ -18,6 +18,49 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
18
18
 
19
19
  ### Removed
20
20
 
21
+ ## [0.10.3] - 2026-01-16
22
+
23
+ ### Added
24
+
25
+ - **Rect Destructuring**: `Rect` objects now support array destructuring (implementation of `to_ary`), allowing intuitive assignment like `x, y, w, h = rect`.
26
+ - **Global State Test Helpers**: New `RatatuiRuby::TestHelper::GlobalState` module (automatically included in `TestHelper`) provides `with_argv` and `with_env` methods for safely testing code that reads `ARGV` or `ENV`.
27
+
28
+ ### Changed
29
+
30
+ - **New Website**: RatatuiRuby now has a home on the world wide web at [www.ratatui-ruby.dev](https://www.ratatui-ruby.dev).
31
+ - **A New Way to Browse Examples**: You can now browse the source code of the example applications in our documentation site. See [AppAllEvents](https://www.ratatui-ruby.dev/docs/v0.10/examples/app_all_events/app_rb.html) for an example.
32
+ - **API Documentation on the Web**: RatatuiRuby's [extensive RDoc documentation is now available on the web](https://www.ratatui-ruby.dev/docs/v0.10/RatatuiRuby.html).
33
+ - **Guides on the Web**: RatatuiRuby's [in-depth guides are now available on the web](https://www.ratatui-ruby.dev/docs/v0.10/doc/index_md.html).
34
+ - **Versioned Examples, API Documentanion, and Guides**: API reference, guides, and examples are available on our website for current and past versions of ratatui_ruby, including the trunk version. Visit [www.ratatui-ruby.dev/docs](https://www.ratatui-ruby.dev/docs) to browse.
35
+
36
+ ### Fixed
37
+
38
+ - **Dependency Problems**: Removed the unused `ostruct` dependency from the gemspec. Added `rexml` as an explicit dependency.
39
+ - **Lazy REXML Loading**: `RatatuiRuby::Labs::A11y` now requires `rexml` lazily, preventing it from slowing down startup for users not using accessibility features.
40
+
41
+ ## [0.10.2] - 2026-01-14
42
+
43
+ ### Added
44
+
45
+ - **Experimental Labs System**: New `RatatuiRuby::Labs` module for opt-in experimental features via `RR_LABS` environment variable. Check with `Labs.enabled?(:a11y)` or enable programmatically with `Labs.enable!(:a11y)`. _Labs are subject to change even between patch releases._
46
+ - **A11Y Widget Tree Export (Lab)**: When `RR_LABS=A11Y` is set, the widget tree is serialized to XML and written to `Dir.tmpdir/ratatui_a11y.xml` every frame. This exports semantic structure (`<Paragraph>`, `<List>`, etc.) for accessibility tooling integration. Access is through `RatatuiRuby::Labs::A11y.dump_widget_tree(widget)` or automatic via `RatatuiRuby.draw`.
47
+ - **Inline Viewport**: New `viewport:` parameter for `init_terminal` and `run` accepts `:inline` or `:fullscreen` (default). Inline viewports occupy a fixed number of lines at the terminal bottom, preserving scrollback history above. Pass `height:` to specify inline viewport height (default: 8 lines). Fullscreen viewports use the alternate screen as before.
48
+ - **Insert Before**: New `insert_before(height, widget)` method inserts content above an inline viewport into scrollback without disrupting the running TUI. Essential for logging status updates, progress messages, or diagnostic output while your inline TUI continues running. Only works with inline viewports; raises `Error::Invariant` in fullscreen mode.
49
+ - **Terminal Area Accessors**: New methods to query terminal and viewport dimensions:
50
+ - `terminal_area` / `get_terminal_size` — full terminal backend size (always full dimensions)
51
+ - `viewport_area` / `get_viewport_area` — current viewport rendering area (inline viewport height or full terminal in fullscreen)
52
+ - Aliases: `terminal_size`, `viewport_size`, `get_terminal_area`, `get_viewport_size`
53
+ - **Cursor Position Accessors**: New methods for querying and setting cursor position:
54
+ - `cursor_position` / `get_cursor_position` — returns current cursor position as `Layout::Position` or `[x, y]` array
55
+ - `cursor_position=` / `set_cursor_position` — sets cursor position from `Layout::Position`, array, or separate x/y arguments
56
+ - **Error::Internal Exception**: New exception class for framework bugs, distinct from user errors. If you encounter this, please report it as a framework bug.
57
+
58
+ ### Changed
59
+
60
+ ### Fixed
61
+
62
+ ### Removed
63
+
21
64
  ## [0.10.1] - 2026-01-11
22
65
 
23
66
  ### Added
@@ -624,6 +667,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
624
667
  - **Testing Support**: Included `RatatuiRuby::TestHelper` and RSpec integration to make testing your TUI applications possible.
625
668
 
626
669
  [Unreleased]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/HEAD
670
+ [0.10.3]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/v0.10.3
671
+ [0.10.2]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/v0.10.2
627
672
  [0.10.1]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/v0.10.1
628
673
  [0.10.1]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/v0.10.1
629
674
  [0.10.1]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/v0.10.1
@@ -297,7 +297,7 @@ We provide these reference architectures to inspire you:
297
297
 
298
298
  ### Model-View-Update
299
299
 
300
- **Source:** [examples/app_all_events](../examples/app_all_events/README.md)
300
+ **Source:** [examples/app_all_events](../../examples/app_all_events/README.md)
301
301
 
302
302
  This pattern implements unidirectional data flow inspired by The Elm Architecture:
303
303
  * **Model:** A single immutable `Data.define` object holding all application state.
@@ -309,7 +309,7 @@ Use this when you want predictable state management and easy-to-test logic.
309
309
 
310
310
  ### Component-Based
311
311
 
312
- **Source:** [examples/app_color_picker](../examples/app_color_picker/README.md)
312
+ **Source:** [examples/app_color_picker](../../examples/app_color_picker/README.md)
313
313
 
314
314
  This pattern addresses the difficulty of mouse interaction and complex UI orchestration:
315
315
  * **Component Contract:** Every UI element implements `render(tui, frame, area)` and `handle_event(event)`.
@@ -190,4 +190,4 @@ See [RatatuiRuby::TestHelper::TestDoubles](../lib/ratatui_ruby/test_helper/test_
190
190
 
191
191
  ## Example
192
192
 
193
- Check out the [examples directory](../examples/) for fully tested applications showcasing these patterns.
193
+ Check out the [examples directory](../../examples/) for fully tested applications showcasing these patterns.
@@ -242,6 +242,6 @@ The interface uses structural typing. Any class with a matching `render` signatu
242
242
 
243
243
  ## Related Resources
244
244
 
245
- - [Custom Render Example](../examples/widget_render/README.md) — Full working example
246
- - [Cell Example](../examples/widget_cell/README.md) — Low-level cell drawing
245
+ - [Custom Render Example](../../examples/widget_render/README.md) — Full working example
246
+ - [Cell Example](../../examples/widget_cell/README.md) — Low-level cell drawing
247
247
  - [Application Testing](./application_testing.md) — Test helper reference
@@ -0,0 +1,375 @@
1
+ <!--
2
+ SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
3
+
4
+ SPDX-License-Identifier: CC-BY-SA-4.0
5
+ -->
6
+
7
+ # Ratatui Features Audit - Complete Comprehensive Catalog
8
+
9
+ These documents catalog EVERY public feature, method, function, enum variant, and constructor in the Ratatui Rust library with precise file/line references. This has the finished items; [the other has the unfinished items](./api_completeness_audit-unfinished.md).
10
+
11
+ ## Terminal & Initialization Features
12
+
13
+ | Feature Name | File/Line | Status |
14
+ |--------------|-----------|--------|
15
+ | run | ratatui/src/init.rs:251 | ✅ |
16
+ | init | ratatui/src/init.rs:298 | ✅ |
17
+ | init_with_options | ratatui/src/init.rs:382 | ✅ |
18
+ | restore | ratatui/src/init.rs:457 | ✅ |
19
+ | Viewport::Fullscreen | ratatui-core/src/terminal/viewport.rs:22 | ✅ |
20
+ | Viewport::Inline(u16) | ratatui-core/src/terminal/viewport.rs:28 | ✅ |
21
+ | Terminal::draw | ratatui-core/src/terminal/terminal.rs:373 | ✅ |
22
+ | Terminal::size | ratatui-core/src/terminal/terminal.rs:568 | ✅ |
23
+ | Terminal::insert_before | ratatui-core/src/terminal/terminal.rs:648 | ✅ |
24
+ | TerminalOptions struct | ratatui-core/src/terminal/terminal.rs:104 | ✅ |
25
+ | Frame struct | ratatui-core/src/terminal/frame.rs:17 | ✅ |
26
+ | Frame::render_widget | ratatui-core/src/terminal/frame.rs:93 | ✅ |
27
+ | Frame::render_stateful_widget | ratatui-core/src/terminal/frame.rs:124 | ✅ |
28
+ | Frame::set_cursor_position | ratatui-core/src/terminal/frame.rs:141 | ✅ |
29
+
30
+
31
+ ## Layout Features
32
+
33
+ | Feature Name | File/Line | Status |
34
+ |--------------|-----------|--------|
35
+ | Layout struct | ratatui-core/src/layout/layout.rs:193 | ✅ |
36
+ | Layout::horizontal | ratatui-core/src/layout/layout.rs:285 | ✅ |
37
+ | Layout::vertical | ratatui-core/src/layout/layout.rs:265 | ✅ |
38
+ | Layout::constraints | ratatui-core/src/layout/layout.rs:377 | ✅ |
39
+ | Layout::spacing | ratatui-core/src/layout/layout.rs:521 | ✅ |
40
+ | Layout::split | ratatui-core/src/layout/layout.rs:663 | ✅ |
41
+ | Layout::split_with_spacers | ratatui-core/src/layout/layout.rs:713 | ✅ |
42
+ | Constraint::Min(u16) | ratatui-core/src/layout/constraint.rs:94 | ✅ |
43
+ | Constraint::Max(u16) | ratatui-core/src/layout/constraint.rs:117 | ✅ |
44
+ | Constraint::Length(u16) | ratatui-core/src/layout/constraint.rs:140 | ✅ |
45
+ | Constraint::Percentage(u16) | ratatui-core/src/layout/constraint.rs:168 | ✅ |
46
+ | Constraint::Ratio(u32, u32) | ratatui-core/src/layout/constraint.rs:192 | ✅ |
47
+ | Constraint::Fill(u16) | ratatui-core/src/layout/constraint.rs:218 | ✅ |
48
+ | Constraint::from_lengths | ratatui-core/src/layout/constraint.rs:230 | ✅ |
49
+ | Constraint::from_ratios | ratatui-core/src/layout/constraint.rs:254 | ✅ |
50
+ | Constraint::from_percentages | ratatui-core/src/layout/constraint.rs:277 | ✅ |
51
+ | Constraint::from_maxes | ratatui-core/src/layout/constraint.rs:300 | ✅ |
52
+ | Constraint::from_mins | ratatui-core/src/layout/constraint.rs:320 | ✅ |
53
+ | Constraint::from_fills | ratatui-core/src/layout/constraint.rs:341 | ✅ |
54
+ | Flex::Legacy | ratatui-core/src/layout/flex.rs:75 | ✅ |
55
+ | Flex::Start | ratatui-core/src/layout/flex.rs:98 | ✅ |
56
+ | Flex::End | ratatui-core/src/layout/flex.rs:120 | ✅ |
57
+ | Flex::Center | ratatui-core/src/layout/flex.rs:142 | ✅ |
58
+ | Flex::SpaceBetween | ratatui-core/src/layout/flex.rs:164 | ✅ |
59
+ | Flex::SpaceEvenly | ratatui-core/src/layout/flex.rs:187 | ✅ |
60
+ | Flex::SpaceAround | ratatui-core/src/layout/flex.rs:209 | ✅ |
61
+ | Direction::Horizontal | ratatui-core/src/layout/direction.rs:16 | ✅ |
62
+ | Direction::Vertical | ratatui-core/src/layout/direction.rs:20 | ✅ |
63
+ | Position struct | ratatui-core/src/layout/position.rs:57 | ✅ |
64
+ | Size struct | ratatui-core/src/layout/size.rs:46 | ✅ |
65
+ | Rect struct | ratatui-core/src/layout/rect.rs:134 | ✅ |
66
+ | Rect::new | ratatui-core/src/layout/rect.rs:166 | ✅ |
67
+ | Rect::area | ratatui-core/src/layout/rect.rs:190 | ✅ |
68
+ | Rect::is_empty | ratatui-core/src/layout/rect.rs:195 | ✅ |
69
+ | Rect::left | ratatui-core/src/layout/rect.rs:200 | ✅ |
70
+ | Rect::right | ratatui-core/src/layout/rect.rs:205 | ✅ |
71
+ | Rect::top | ratatui-core/src/layout/rect.rs:214 | ✅ |
72
+ | Rect::bottom | ratatui-core/src/layout/rect.rs:219 | ✅ |
73
+ | Rect::inner | ratatui-core/src/layout/rect.rs:228 | ✅ |
74
+ | Rect::outer | ratatui-core/src/layout/rect.rs:248 | ✅ |
75
+ | Rect::offset | ratatui-core/src/layout/rect.rs:276 | ✅ |
76
+ | Rect::resize | ratatui-core/src/layout/rect.rs:289 | ✅ |
77
+ | Rect::union | ratatui-core/src/layout/rect.rs:305 | ✅ |
78
+ | Rect::intersection | ratatui-core/src/layout/rect.rs:322 | ✅ |
79
+ | Rect::clamp | ratatui-core/src/layout/rect.rs:387 | ✅ |
80
+ | Rect::rows | ratatui-core/src/layout/rect/iter.rs:4 | ✅ |
81
+ | Rect::columns | ratatui-core/src/layout/rect/iter.rs:66 | ✅ |
82
+ | Rect::positions | ratatui-core/src/layout/rect/iter.rs:130 | ✅ |
83
+
84
+ ## Style Features
85
+
86
+ | Feature Name | File/Line | Status |
87
+ |--------------|-----------|--------|
88
+ | Color::Reset | ratatui-core/src/style/color.rs:30 | ✅ |
89
+ | Color::Black | ratatui-core/src/style/color.rs:32 | ✅ |
90
+ | Color::Red | ratatui-core/src/style/color.rs:34 | ✅ |
91
+ | Color::Green | ratatui-core/src/style/color.rs:36 | ✅ |
92
+ | Color::Yellow | ratatui-core/src/style/color.rs:38 | ✅ |
93
+ | Color::Blue | ratatui-core/src/style/color.rs:40 | ✅ |
94
+ | Color::Magenta | ratatui-core/src/style/color.rs:42 | ✅ |
95
+ | Color::Cyan | ratatui-core/src/style/color.rs:44 | ✅ |
96
+ | Color::Gray | ratatui-core/src/style/color.rs:46 | ✅ |
97
+ | Color::DarkGray | ratatui-core/src/style/color.rs:48 | ✅ |
98
+ | Color::LightRed | ratatui-core/src/style/color.rs:50 | ✅ |
99
+ | Color::LightGreen | ratatui-core/src/style/color.rs:52 | ✅ |
100
+ | Color::LightYellow | ratatui-core/src/style/color.rs:54 | ✅ |
101
+ | Color::LightBlue | ratatui-core/src/style/color.rs:56 | ✅ |
102
+ | Color::LightMagenta | ratatui-core/src/style/color.rs:58 | ✅ |
103
+ | Color::LightCyan | ratatui-core/src/style/color.rs:60 | ✅ |
104
+ | Color::White | ratatui-core/src/style/color.rs:62 | ✅ |
105
+ | Color::Rgb(u8, u8, u8) | ratatui-core/src/style/color.rs:64 | ✅ |
106
+ | Color::Indexed(u8) | ratatui-core/src/style/color.rs:66 | ✅ |
107
+ | Color::from_u32 | ratatui-core/src/style/color.rs:133 | ✅ |
108
+ | Color::from_hsl | ratatui-core/src/style/color.rs:416 | ✅ |
109
+ | Color::from_hsluv | ratatui-core/src/style/color.rs:469 | ✅ |
110
+ | Style struct | ratatui-core/src/style.rs:239 | ✅ |
111
+ | Style::fg | ratatui-core/src/style.rs:335 | ✅ |
112
+ | Style::bg | ratatui-core/src/style.rs:352 | ✅ |
113
+ | Style::underline_color | ratatui-core/src/style.rs:387 | ✅ |
114
+ | Style::add_modifier | ratatui-core/src/style.rs:408 | ✅ |
115
+ | Style::remove_modifier | ratatui-core/src/style.rs:430 | ✅ |
116
+ | Modifier::BOLD | ratatui-core/src/style.rs:105 | ✅ |
117
+ | Modifier::DIM | ratatui-core/src/style.rs:106 | ✅ |
118
+ | Modifier::ITALIC | ratatui-core/src/style.rs:107 | ✅ |
119
+ | Modifier::UNDERLINED | ratatui-core/src/style.rs:108 | ✅ |
120
+ | Modifier::SLOW_BLINK | ratatui-core/src/style.rs:109 | ✅ |
121
+ | Modifier::RAPID_BLINK | ratatui-core/src/style.rs:110 | ✅ |
122
+ | Modifier::REVERSED | ratatui-core/src/style.rs:111 | ✅ |
123
+ | Modifier::HIDDEN | ratatui-core/src/style.rs:112 | ✅ |
124
+ | Modifier::CROSSED_OUT | ratatui-core/src/style.rs:113 | ✅ |
125
+
126
+ ## Text Features
127
+
128
+ | Feature Name | File/Line | Status |
129
+ |--------------|-----------| -------|
130
+ | Text struct | ratatui-core/src/text/text.rs:196 | ✅ |
131
+ | Span struct | ratatui-core/src/text/span.rs:99 | ✅ |
132
+ | Line struct | ratatui-core/src/text/line.rs:183 | ✅ |
133
+
134
+ ## Symbol Sets
135
+
136
+ | Feature Name | File/Line | Status |
137
+ |--------------|-----------|--------|
138
+ | half_block::UPPER | ratatui-core/src/symbols/half_block.rs:1 | ✅ |
139
+ | half_block::LOWER | ratatui-core/src/symbols/half_block.rs:3 | ✅ |
140
+ | half_block::FULL | ratatui-core/src/symbols/half_block.rs:5 | ✅ |
141
+ | Marker::Dot | ratatui-core/src/symbols/marker.rs:11 | ✅ |
142
+ | Marker::Block | ratatui-core/src/symbols/marker.rs:13 | ✅ |
143
+ | Marker::Bar | ratatui-core/src/symbols/marker.rs:17 | ✅ |
144
+ | Marker::Braille | ratatui-core/src/symbols/marker.rs:21 | ✅ |
145
+ | Marker::HalfBlock | ratatui-core/src/symbols/marker.rs:25 | ✅ |
146
+ | bar::Set struct | ratatui-core/src/symbols/bar.rs:8 | ✅ |
147
+ | bar::THREE_LEVELS | ratatui-core/src/symbols/bar.rs:29 | ✅ |
148
+ | bar::NINE_LEVELS | ratatui-core/src/symbols/bar.rs:41 | ✅ |
149
+ | border::Set struct | ratatui-core/src/symbols/border.rs:12 | ✅ |
150
+ | border::PLAIN | ratatui-core/src/symbols/border.rs:43 | ✅ |
151
+ | border::ROUNDED | ratatui-core/src/symbols/border.rs:62 | ✅ |
152
+ | border::DOUBLE | ratatui-core/src/symbols/border.rs:81 | ✅ |
153
+ | border::THICK | ratatui-core/src/symbols/border.rs:100 | ✅ |
154
+ | border::QUADRANT_OUTSIDE | ratatui-core/src/symbols/border.rs:195 | ✅ |
155
+ | border::QUADRANT_INSIDE | ratatui-core/src/symbols/border.rs:214 | ✅ |
156
+ | line::Set struct | ratatui-core/src/symbols/line.rs:62 | ✅ |
157
+ | line::NORMAL | ratatui-core/src/symbols/line.rs:82 | ✅ |
158
+ | line::DOUBLE | ratatui-core/src/symbols/line.rs:104 | ✅ |
159
+ | line::THICK | ratatui-core/src/symbols/line.rs:118 | ✅ |
160
+
161
+ ## Widgets
162
+
163
+ ### Paragraph Widget
164
+
165
+ | Feature Name | File/Line | Status |
166
+ |--------------|-----------|--------|
167
+ | Paragraph struct | ratatui-widgets/src/paragraph.rs:80 | ✅ |
168
+ | Paragraph::block | ratatui-widgets/src/paragraph.rs:174 | ✅ |
169
+ | Paragraph::style | ratatui-widgets/src/paragraph.rs:198 | ✅ |
170
+ | Paragraph::wrap | ratatui-widgets/src/paragraph.rs:115 | ✅ |
171
+ | Paragraph::scroll | ratatui-widgets/src/paragraph.rs:161 | ✅ |
172
+ | Paragraph::alignment | ratatui-widgets/src/paragraph.rs:199 | ✅ |
173
+ | Wrap struct | ratatui-widgets/src/paragraph.rs:240 | ✅ |
174
+ | Wrap::trim | ratatui-widgets/src/paragraph.rs:242 | ✅ |
175
+
176
+ ### Block Widget
177
+
178
+ | Feature Name | File/Line | Status |
179
+ |--------------|-----------|--------|
180
+ | Block struct | ratatui-widgets/src/block.rs:75 | ✅ |
181
+ | Block::borders | ratatui-widgets/src/block.rs:85 | ✅ |
182
+ | Block::border_style | ratatui-widgets/src/block.rs:89 | ✅ |
183
+ | Block::border_set | ratatui-widgets/src/block.rs:91 | ✅ |
184
+ | Block::padding | ratatui-widgets/src/block.rs:97 | ✅ |
185
+ | Padding struct | ratatui-widgets/src/block/padding.rs:27 | ✅ |
186
+ | Padding::ZERO | ratatui-widgets/src/block/padding.rs:40 | ✅ |
187
+ | Padding::new | ratatui-widgets/src/block/padding.rs:50 | ✅ |
188
+ | Padding::horizontal | ratatui-widgets/src/block/padding.rs:66 | ✅ |
189
+ | Padding::vertical | ratatui-widgets/src/block/padding.rs:76 | ✅ |
190
+ | Padding::uniform | ratatui-widgets/src/block/padding.rs:86 | ✅ |
191
+ | Padding::proportional | ratatui-widgets/src/block/padding.rs:99 | ✅ |
192
+ | Padding::symmetric | ratatui-widgets/src/block/padding.rs:112 | ✅ |
193
+ | Padding::left | ratatui-widgets/src/block/padding.rs:122 | ✅ |
194
+ | Padding::right | ratatui-widgets/src/block/padding.rs:132 | ✅ |
195
+ | Padding::top | ratatui-widgets/src/block/padding.rs:142 | ✅ |
196
+ | Padding::bottom | ratatui-widgets/src/block/padding.rs:152 | ✅ |
197
+ | Borders::TOP | ratatui-widgets/src/borders.rs:33 | ✅ |
198
+ | Borders::RIGHT | ratatui-widgets/src/borders.rs:35 | ✅ |
199
+ | Borders::BOTTOM | ratatui-widgets/src/borders.rs:37 | ✅ |
200
+ | Borders::LEFT | ratatui-widgets/src/borders.rs:39 | ✅ |
201
+ | Borders::ALL | ratatui-widgets/src/borders.rs:41 | ✅ |
202
+ | Borders::NONE | ratatui-widgets/src/borders.rs:43 | ✅ |
203
+ | BorderType::Plain | ratatui-widgets/src/borders.rs:64 | ✅ |
204
+ | BorderType::Rounded | ratatui-widgets/src/borders.rs:66 | ✅ |
205
+ | BorderType::Double | ratatui-widgets/src/borders.rs:71 | ✅ |
206
+ | BorderType::Thick | ratatui-widgets/src/borders.rs:81 | ✅ |
207
+ | BorderType::QuadrantInside | ratatui-widgets/src/borders.rs:139 | ✅ |
208
+ | BorderType::QuadrantOutside | ratatui-widgets/src/borders.rs:144 | ✅ |
209
+ | TitlePosition::Top | ratatui-widgets/src/block.rs:49 | ✅ |
210
+ | TitlePosition::Bottom | ratatui-widgets/src/block.rs:51 | ✅ |
211
+
212
+ ### Table Widget
213
+
214
+ | Feature Name | File/Line | Status |
215
+ |--------------|-----------|--------|
216
+ | Table struct | ratatui-widgets/src/table.rs:233 | ✅ |
217
+ | Table::rows | ratatui-widgets/src/table.rs:235 | ✅ |
218
+ | Table::header | ratatui-widgets/src/table.rs:238 | ✅ |
219
+ | Table::footer | ratatui-widgets/src/table.rs:241 | ✅ |
220
+ | Table::widths | ratatui-widgets/src/table.rs:244 | ✅ |
221
+ | Table::column_spacing | ratatui-widgets/src/table.rs:247 | ✅ |
222
+ | Table::row_highlight_style | ratatui-widgets/src/table.rs:256 | ✅ |
223
+ | Table::column_highlight_style | ratatui-widgets/src/table.rs:259 | ✅ |
224
+ | Table::cell_highlight_style | ratatui-widgets/src/table.rs:262 | ✅ |
225
+ | Table::highlight_symbol | ratatui-widgets/src/table.rs:265 | ✅ |
226
+ | Table::highlight_spacing | ratatui-widgets/src/table.rs:268 | ✅ |
227
+ | Table::flex | ratatui-widgets/src/table.rs:271 | ✅ |
228
+ | Row struct | ratatui-widgets/src/table/row.rs:75 | ✅ |
229
+ | Cell struct | ratatui-widgets/src/table/cell.rs:51 | ✅ |
230
+ | HighlightSpacing::Always | ratatui-widgets/src/table/highlight_spacing.rs:10 | ✅ |
231
+ | HighlightSpacing::WhenSelected | ratatui-widgets/src/table/highlight_spacing.rs:14 | ✅ |
232
+ | HighlightSpacing::Never | ratatui-widgets/src/table/highlight_spacing.rs:18 | ✅ |
233
+
234
+
235
+ ### List Widget
236
+
237
+ | Feature Name | File/Line | Status |
238
+ |--------------|-----------|--------|
239
+ | List struct | ratatui-widgets/src/list.rs:109 | ✅ |
240
+ | List::items | ratatui-widgets/src/list.rs:113 | ✅ |
241
+ | List::direction | ratatui-widgets/src/list.rs:117 | ✅ |
242
+ | List::highlight_style | ratatui-widgets/src/list.rs:119 | ✅ |
243
+ | List::highlight_symbol | ratatui-widgets/src/list.rs:121 | ✅ |
244
+ | List::repeat_highlight_symbol | ratatui-widgets/src/list.rs:123 | ✅ |
245
+ | List::highlight_spacing | ratatui-widgets/src/list.rs:125 | ✅ |
246
+ | List::scroll_padding | ratatui-widgets/src/list.rs:127 | ✅ |
247
+ | ListDirection::TopToBottom | ratatui-widgets/src/list.rs:140 | ✅ |
248
+ | ListDirection::BottomToTop | ratatui-widgets/src/list.rs:142 | ✅ |
249
+ | ListItem struct | ratatui-widgets/src/list/item.rs:73 | ✅ |
250
+
251
+
252
+ ### BarChart Widget
253
+
254
+ | Feature Name | File/Line | Status |
255
+ |--------------|-----------|--------|
256
+ | BarChart struct | ratatui-widgets/src/barchart.rs:83 | ✅ |
257
+ | BarChart::bar_width | ratatui-widgets/src/barchart.rs:87 | ✅ |
258
+ | BarChart::bar_gap | ratatui-widgets/src/barchart.rs:89 | ✅ |
259
+ | BarChart::group_gap | ratatui-widgets/src/barchart.rs:91 | ✅ |
260
+ | BarChart::bar_set | ratatui-widgets/src/barchart.rs:93 | ✅ |
261
+ | BarChart::max | ratatui-widgets/src/barchart.rs:106 | ✅ |
262
+ | BarChart::direction | ratatui-widgets/src/barchart.rs:108 | ✅ |
263
+ | Bar struct | ratatui-widgets/src/barchart/bar.rs:34 | ✅ |
264
+ | BarGroup struct | ratatui-widgets/src/barchart/bar_group.rs:21 | ✅ |
265
+
266
+ ### Chart Widget
267
+
268
+ | Feature Name | File/Line | Status |
269
+ |--------------|-----------|--------|
270
+ | Chart struct | ratatui-widgets/src/chart.rs:510 | ✅ |
271
+ | Axis struct | ratatui-widgets/src/chart.rs:40 | ✅ |
272
+ | Axis::bounds | ratatui-widgets/src/chart.rs:44 | ✅ |
273
+ | Axis::labels | ratatui-widgets/src/chart.rs:46 | ✅ |
274
+ | Axis::labels_alignment | ratatui-widgets/src/chart.rs:50 | ✅ |
275
+ | Dataset struct | ratatui-widgets/src/chart.rs:320 | ✅ |
276
+ | Dataset::marker | ratatui-widgets/src/chart.rs:326 | ✅ |
277
+ | Dataset::graph_type | ratatui-widgets/src/chart.rs:328 | ✅ |
278
+ | GraphType::Scatter | ratatui-widgets/src/chart.rs:161 | ✅ |
279
+ | GraphType::Line | ratatui-widgets/src/chart.rs:167 | ✅ |
280
+ | GraphType::Bar | ratatui-widgets/src/chart.rs:170 | ✅ |
281
+ | LegendPosition::TopLeft | ratatui-widgets/src/chart.rs:184 | ✅ |
282
+ | LegendPosition::Top | ratatui-widgets/src/chart.rs:179 | ✅ |
283
+ | LegendPosition::TopRight | ratatui-widgets/src/chart.rs:182 | ✅ |
284
+ | LegendPosition::Left | ratatui-widgets/src/chart.rs:186 | ✅ |
285
+ | LegendPosition::Right | ratatui-widgets/src/chart.rs:187 | ✅ |
286
+ | LegendPosition::BottomLeft | ratatui-widgets/src/chart.rs:194 | ✅ |
287
+ | LegendPosition::Bottom | ratatui-widgets/src/chart.rs:190 | ✅ |
288
+ | LegendPosition::BottomRight | ratatui-widgets/src/chart.rs:192 | ✅ |
289
+
290
+ ### Gauge Widget
291
+
292
+ | Feature Name | File/Line | Status |
293
+ |--------------|-----------|--------|
294
+ | Gauge struct | ratatui-widgets/src/gauge.rs:45 | ✅ |
295
+ | Gauge::ratio | ratatui-widgets/src/gauge.rs:47 | ✅ |
296
+ | Gauge::label | ratatui-widgets/src/gauge.rs:48 | ✅ |
297
+ | Gauge::use_unicode | ratatui-widgets/src/gauge.rs:49 | ✅ |
298
+ | Gauge::gauge_style | ratatui-widgets/src/gauge.rs:51 | ✅ |
299
+ | LineGauge struct | ratatui-widgets/src/gauge.rs:269 | ✅ |
300
+ | LineGauge::filled_symbol | ratatui-widgets/src/gauge.rs:274 | ✅ |
301
+ | LineGauge::unfilled_symbol | ratatui-widgets/src/gauge.rs:275 | ✅ |
302
+ | LineGauge::filled_style | ratatui-widgets/src/gauge.rs:276 | ✅ |
303
+ | LineGauge::unfilled_style | ratatui-widgets/src/gauge.rs:277 | ✅ |
304
+
305
+ ### Sparkline Widget
306
+
307
+ | Feature Name | File/Line | Status |
308
+ |--------------|-----------|--------|
309
+ | Sparkline struct | ratatui-widgets/src/sparkline.rs:66 | ✅ |
310
+ | RenderDirection::LeftToRight | ratatui-widgets/src/sparkline.rs:93 | ✅ |
311
+ | RenderDirection::RightToLeft | ratatui-widgets/src/sparkline.rs:96 | ✅ |
312
+
313
+ ### Scrollbar Widget
314
+
315
+ | Feature Name | File/Line | Status |
316
+ |--------------|-----------|--------|
317
+ | Scrollbar struct | ratatui-widgets/src/scrollbar.rs:87 | ✅ |
318
+ | ScrollbarOrientation::VerticalRight | ratatui-widgets/src/scrollbar.rs:112 | ✅ |
319
+ | ScrollbarOrientation::VerticalLeft | ratatui-widgets/src/scrollbar.rs:115 | ✅ |
320
+ | ScrollbarOrientation::HorizontalBottom | ratatui-widgets/src/scrollbar.rs:118 | ✅ |
321
+ | ScrollbarOrientation::HorizontalTop | ratatui-widgets/src/scrollbar.rs:121 | ✅ |
322
+
323
+
324
+ ### Calendar Widget
325
+
326
+ | Feature Name | File/Line | Status |
327
+ |--------------|-----------|--------|
328
+ | Monthly struct | ratatui-widgets/src/calendar.rs:26 | ✅ |
329
+
330
+ ### Canvas Widget
331
+
332
+ | Feature Name | File/Line | Status |
333
+ |--------------|-----------|--------|
334
+ | Canvas struct | ratatui-widgets/src/canvas.rs:721 | ✅ |
335
+ | Line shape | ratatui-widgets/src/canvas/line.rs:8 | ✅ |
336
+ | Circle shape | ratatui-widgets/src/canvas/circle.rs:9 | ✅ |
337
+ | Rectangle shape | ratatui-widgets/src/canvas/rectangle.rs:10 | ✅ |
338
+ | Map struct | ratatui-widgets/src/canvas/map.rs:38 | ✅ |
339
+ | MapResolution::Low | ratatui-widgets/src/canvas/map.rs:13 | ✅ |
340
+ | MapResolution::High | ratatui-widgets/src/canvas/map.rs:16 | ✅ |
341
+
342
+ ### Tabs Widget
343
+
344
+ | Feature Name | File/Line | Status |
345
+ |--------------|-----------|--------|
346
+ | Tabs struct | ratatui-widgets/src/tabs.rs:51 | ✅ |
347
+
348
+ ### Other Widgets
349
+
350
+ | Feature Name | File/Line | Status |
351
+ |--------------|-----------|--------|
352
+ | Clear widget | ratatui-widgets/src/clear.rs:30 | ✅ |
353
+ | RatatuiLogo widget | ratatui-widgets/src/logo.rs:59 | ✅ |
354
+ | RatatuiLogo Size::Tiny | ratatui-widgets/src/logo.rs:68 | ✅ |
355
+ | RatatuiLogo Size::Small | ratatui-widgets/src/logo.rs:71 | ✅ |
356
+ | RatatuiLogo Size::Medium | ratatui-widgets/src/logo.rs:74 | ✅ |
357
+ | RatatuiLogo Size::Large | ratatui-widgets/src/logo.rs:77 | ✅ |
358
+
359
+ ## Buffer Features
360
+
361
+ | Feature Name | File/Line | Status |
362
+ |--------------|-----------|--------|
363
+ | Buffer struct | ratatui-core/src/buffer/buffer.rs:66 | ✅ |
364
+ | Buffer::content | ratatui-core/src/buffer/buffer.rs:107 | ✅ |
365
+ | Buffer::get | ratatui-core/src/buffer/buffer.rs:130 | ✅ |
366
+ | Cell struct | ratatui-core/src/buffer/cell.rs:9 | ✅ |
367
+
368
+
369
+
370
+ ## Backend Features
371
+
372
+ | Feature Name | File/Line | Status |
373
+ |--------------|-----------|--------|
374
+ | TestBackend | ratatui-core/src/backend/test.rs:* | ✅ |
375
+ | CrosstermBackend | ratatui-crossterm/src/lib.rs:* | ✅ |