ratatui_ruby 0.10.1 → 0.10.2

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 (66) 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 +24 -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/ext/ratatui_ruby/Cargo.lock +1 -1
  18. data/ext/ratatui_ruby/Cargo.toml +1 -1
  19. data/ext/ratatui_ruby/src/frame.rs +17 -4
  20. data/ext/ratatui_ruby/src/lib.rs +17 -3
  21. data/ext/ratatui_ruby/src/lib.rs.bak +286 -0
  22. data/ext/ratatui_ruby/src/rendering.rs +38 -25
  23. data/ext/ratatui_ruby/src/rendering.rs.bak +152 -0
  24. data/ext/ratatui_ruby/src/terminal.rs +245 -33
  25. data/ext/ratatui_ruby/src/terminal.rs.bak +381 -0
  26. data/ext/ratatui_ruby/src/terminal.rs.orig +409 -0
  27. data/ext/ratatui_ruby/src/widgets/barchart.rs +4 -3
  28. data/ext/ratatui_ruby/src/widgets/block.rs +4 -4
  29. data/ext/ratatui_ruby/src/widgets/calendar.rs +4 -3
  30. data/ext/ratatui_ruby/src/widgets/canvas.rs +7 -4
  31. data/ext/ratatui_ruby/src/widgets/center.rs +3 -3
  32. data/ext/ratatui_ruby/src/widgets/chart.rs +4 -4
  33. data/ext/ratatui_ruby/src/widgets/clear.rs +6 -6
  34. data/ext/ratatui_ruby/src/widgets/cursor.rs +10 -7
  35. data/ext/ratatui_ruby/src/widgets/gauge.rs +4 -3
  36. data/ext/ratatui_ruby/src/widgets/layout.rs +3 -3
  37. data/ext/ratatui_ruby/src/widgets/line_gauge.rs +4 -3
  38. data/ext/ratatui_ruby/src/widgets/list.rs +6 -9
  39. data/ext/ratatui_ruby/src/widgets/overlay.rs +3 -3
  40. data/ext/ratatui_ruby/src/widgets/paragraph.rs +5 -6
  41. data/ext/ratatui_ruby/src/widgets/ratatui_logo.rs +4 -4
  42. data/ext/ratatui_ruby/src/widgets/ratatui_mascot.rs +8 -4
  43. data/ext/ratatui_ruby/src/widgets/scrollbar.rs +10 -10
  44. data/ext/ratatui_ruby/src/widgets/sparkline.rs +4 -3
  45. data/ext/ratatui_ruby/src/widgets/table.rs +6 -6
  46. data/ext/ratatui_ruby/src/widgets/tabs.rs +4 -3
  47. data/lib/ratatui_ruby/labs/a11y.rb +173 -0
  48. data/lib/ratatui_ruby/labs/frame_a11y_capture.rb +50 -0
  49. data/lib/ratatui_ruby/labs.rb +47 -0
  50. data/lib/ratatui_ruby/layout/position.rb +26 -0
  51. data/lib/ratatui_ruby/terminal/viewport.rb +80 -0
  52. data/lib/ratatui_ruby/terminal_lifecycle.rb +164 -6
  53. data/lib/ratatui_ruby/terminal_lifecycle.rb.bak +197 -0
  54. data/lib/ratatui_ruby/test_helper/terminal.rb +8 -1
  55. data/lib/ratatui_ruby/tui/core.rb +16 -0
  56. data/lib/ratatui_ruby/version.rb +1 -1
  57. data/lib/ratatui_ruby.rb +82 -3
  58. data/migrate_to_buffer.rb +145 -0
  59. data/sig/examples/app_cli_rich_moments/app.rbs +12 -0
  60. data/sig/ratatui_ruby/labs.rbs +87 -0
  61. data/sig/ratatui_ruby/ratatui_ruby.rbs +12 -4
  62. data/sig/ratatui_ruby/terminal/viewport.rbs +19 -0
  63. data/sig/ratatui_ruby/terminal_lifecycle.rbs +13 -5
  64. data/sig/ratatui_ruby/tui/core.rbs +3 -0
  65. metadata +21 -2
  66. /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: 8a44249eb77ada15e7b0705c6fc4367241584f68271d932bc76b1b2dc1ee7d98
4
+ data.tar.gz: 4758da71c5a93dd47d0f6b1929e8980ff70c9f4de49d09c70948546266b91def
5
5
  SHA512:
6
- metadata.gz: 5cb1c1695d98e23db66e938e2f8525d148d2a0076520312d62f17aacfe437c116b35477dc9c670b8e0a452831ca2e6a34684feac38d928a988430f49795f4534
7
- data.tar.gz: e3c222831be6b4812f41bfbffe15024508a587769df0cbf5f1b5a65f7ac19c0010dbab7ffcafe7d669c41817a6bb2475d2437522d587f13f8f79c07338d6ba9d
6
+ metadata.gz: bb685f50e374810635686659567feeca0bf0f47760718b84586226585e417c6bfb51a75720bc4ec563f49e80f46382a74283a22d523f38ff5b140cfe0e849cd8
7
+ data.tar.gz: 0e56b7c647489c2ef550575b6666317c9d93be3a911f386e2f113e3cb4a55eb0fc654623525d0117139466323496421770e487b4f547bddeac22df4024bf6de3
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.2.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.2.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.2.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.2.gem
20
20
  sources:
21
21
  - https://git.sr.ht/~kerrick/ratatui_ruby
22
22
  tasks:
data/CHANGELOG.md CHANGED
@@ -18,6 +18,29 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
18
18
 
19
19
  ### Removed
20
20
 
21
+ ## [0.10.2] - 2026-01-14
22
+
23
+ ### Added
24
+
25
+ - **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._
26
+ - **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`.
27
+ - **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.
28
+ - **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.
29
+ - **Terminal Area Accessors**: New methods to query terminal and viewport dimensions:
30
+ - `terminal_area` / `get_terminal_size` — full terminal backend size (always full dimensions)
31
+ - `viewport_area` / `get_viewport_area` — current viewport rendering area (inline viewport height or full terminal in fullscreen)
32
+ - Aliases: `terminal_size`, `viewport_size`, `get_terminal_area`, `get_viewport_size`
33
+ - **Cursor Position Accessors**: New methods for querying and setting cursor position:
34
+ - `cursor_position` / `get_cursor_position` — returns current cursor position as `Layout::Position` or `[x, y]` array
35
+ - `cursor_position=` / `set_cursor_position` — sets cursor position from `Layout::Position`, array, or separate x/y arguments
36
+ - **Error::Internal Exception**: New exception class for framework bugs, distinct from user errors. If you encounter this, please report it as a framework bug.
37
+
38
+ ### Changed
39
+
40
+ ### Fixed
41
+
42
+ ### Removed
43
+
21
44
  ## [0.10.1] - 2026-01-11
22
45
 
23
46
  ### Added
@@ -624,6 +647,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
624
647
  - **Testing Support**: Included `RatatuiRuby::TestHelper` and RSpec integration to make testing your TUI applications possible.
625
648
 
626
649
  [Unreleased]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/HEAD
650
+ [0.10.2]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/v0.10.2
627
651
  [0.10.1]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/v0.10.1
628
652
  [0.10.1]: https://git.sr.ht/~kerrick/ratatui_ruby/refs/v0.10.1
629
653
  [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:* | ✅ |