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
@@ -0,0 +1,206 @@
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 unfinished items; [the other has the finished items](./api_completeness_audit-finished.md).
10
+
11
+ ## Terminal & Initialization Features
12
+
13
+ | Feature Name | File/Line | Status |
14
+ |--------------|-----------|--------|
15
+ | try_init | ratatui/src/init.rs:330 | ❌ |
16
+ | try_init_with_options | ratatui/src/init.rs:425 | ❌ |
17
+ | try_restore | ratatui/src/init.rs:487 | ❌ |
18
+ | Viewport::Fixed(Rect) | ratatui-core/src/terminal/viewport.rs:30 | ❌ |
19
+ | Terminal struct | ratatui-core/src/terminal/terminal.rs:76 | ⚠️ |
20
+ | Terminal::hide_cursor | ratatui-core/src/terminal/terminal.rs:495 | ❌ |
21
+ | Terminal::show_cursor | ratatui-core/src/terminal/terminal.rs:502 | ❌ |
22
+ | Terminal::get_cursor | ratatui-core/src/terminal/terminal.rs:513 | ❌ |
23
+ | Terminal::set_cursor | ratatui-core/src/terminal/terminal.rs:520 | ❌ |
24
+ | Terminal::get_cursor_position | ratatui-core/src/terminal/terminal.rs:527 | ⚠️ |
25
+ | Terminal::set_cursor_position | ratatui-core/src/terminal/terminal.rs:532 | ⚠️ |
26
+ | Terminal::clear | ratatui-core/src/terminal/terminal.rs:540 | ❌ |
27
+ | Terminal::swap_buffers | ratatui-core/src/terminal/terminal.rs:562 | ❌ |
28
+ | CompletedFrame struct | ratatui-core/src/terminal/frame.rs:40 | ❌ |
29
+
30
+ **Notes:**
31
+ - **Terminal struct**: No direct Terminal object; abstracted behind `RatatuiRuby` module methods
32
+ - **Terminal::get_cursor_position/set_cursor_position**: Only available via [Frame](file:///Users/kerrick/Developer/ratatui_ruby/lib/ratatui_ruby/frame.rb#72-257) during draw, not on Terminal
33
+
34
+ ## Layout Features
35
+
36
+ | Feature Name | File/Line | Status |
37
+ |--------------|-----------|--------|
38
+ | Spacing enum | ratatui-core/src/layout/layout.rs:80 | ❌ |
39
+ | HorizontalAlignment::Left | ratatui-core/src/layout/alignment.rs:25 | ❌ |
40
+ | HorizontalAlignment::Center | ratatui-core/src/layout/alignment.rs:26 | ❌ |
41
+ | HorizontalAlignment::Right | ratatui-core/src/layout/alignment.rs:27 | ❌ |
42
+ | VerticalAlignment::Top | ratatui-core/src/layout/alignment.rs:40 | ❌ |
43
+ | VerticalAlignment::Center | ratatui-core/src/layout/alignment.rs:41 | ❌ |
44
+ | VerticalAlignment::Bottom | ratatui-core/src/layout/alignment.rs:42 | ❌ |
45
+ | Offset struct | ratatui-core/src/layout/offset.rs:10 | ❌ |
46
+ | Margin struct | ratatui-core/src/layout/margin.rs:38 | ❌ |
47
+
48
+ ## Style Features
49
+
50
+ | Feature Name | File/Line | Status |
51
+ |--------------|-----------|--------|
52
+ | Styled trait | ratatui-core/src/style/stylize.rs:15 | ❌ |
53
+ | Stylize trait | ratatui-core/src/style/stylize.rs:* | ❌ |
54
+
55
+ ## Text Features
56
+
57
+ | Feature Name | File/Line | Status |
58
+ |--------------|-----------| -------|
59
+ | Masked struct | ratatui-core/src/text/masked.rs:26 | ❌ |
60
+ | ToText trait | ratatui-core/src/text/text.rs:721 | ❌ |
61
+ | ToSpan trait | ratatui-core/src/text/span.rs:481 | ❌ |
62
+ | StyledGrapheme struct | ratatui-core/src/text/grapheme.rs:12 | ❌ |
63
+ | ToLine trait | ratatui-core/src/text/line.rs:810 | ❌ |
64
+
65
+ ## Widgets
66
+
67
+ ### Block Widget
68
+
69
+ | Feature Name | File/Line | Status |
70
+ |--------------|-----------|--------|
71
+ | BorderType::LightDoubleDashed | ratatui-widgets/src/borders.rs:89 | ❌ |
72
+ | BorderType::HeavyDoubleDashed | ratatui-widgets/src/borders.rs:97 | ❌ |
73
+ | BorderType::LightTripleDashed | ratatui-widgets/src/borders.rs:105 | ❌ |
74
+ | BorderType::HeavyTripleDashed | ratatui-widgets/src/borders.rs:113 | ❌ |
75
+ | BorderType::LightQuadrupleDashed | ratatui-widgets/src/borders.rs:121 | ❌ |
76
+ | BorderType::HeavyQuadrupleDashed | ratatui-widgets/src/borders.rs:129 | ❌ |
77
+
78
+ ### Table Widget
79
+
80
+ | Feature Name | File/Line | Status |
81
+ |--------------|-----------|--------|
82
+ | TableState struct | ratatui-widgets/src/table/state.rs:55 | ⚠️ |
83
+ | TableState::new | ratatui-widgets/src/table/state.rs:62 | ⚠️ |
84
+ | TableState::with_offset | ratatui-widgets/src/table/state.rs:79 | ❌ |
85
+ | TableState::with_selected | ratatui-widgets/src/table/state.rs:96 | ❌ |
86
+ | TableState::with_selected_column | ratatui-widgets/src/table/state.rs:116 | ❌ |
87
+ | TableState::with_selected_cell | ratatui-widgets/src/table/state.rs:135 | ❌ |
88
+ | TableState::offset | ratatui-widgets/src/table/state.rs:161 | ⚠️ |
89
+ | TableState::offset_mut | ratatui-widgets/src/table/state.rs:175 | ❌ |
90
+ | TableState::selected | ratatui-widgets/src/table/state.rs:189 | ⚠️ |
91
+ | TableState::selected_column | ratatui-widgets/src/table/state.rs:205 | ⚠️ |
92
+ | TableState::selected_cell | ratatui-widgets/src/table/state.rs:220 | ❌ |
93
+ | TableState::selected_mut | ratatui-widgets/src/table/state.rs:238 | ❌ |
94
+ | TableState::select | ratatui-widgets/src/table/state.rs:269 | ⚠️ |
95
+ | TableState::select_next | ratatui-widgets/src/table/state.rs:336 | ❌ |
96
+ | TableState::select_previous | ratatui-widgets/src/table/state.rs:371 | ❌ |
97
+ | TableState::select_next_column | ratatui-widgets/src/table/state.rs:353 | ❌ |
98
+ | TableState::select_previous_column | ratatui-widgets/src/table/state.rs:388 | ❌ |
99
+ | TableState::scroll_down_by | ratatui-widgets/src/table/state.rs:475 | ❌ |
100
+ | TableState::scroll_up_by | ratatui-widgets/src/table/state.rs:494 | ❌ |
101
+
102
+ **Notes:**
103
+ - **TableState**: Implemented as Data.define attributes on Table widget itself (selected_row, selected_column, offset) instead of separate state object
104
+
105
+ ### List Widget
106
+
107
+ | Feature Name | File/Line | Status |
108
+ |--------------|-----------|--------|
109
+ | ListState struct | ratatui-widgets/src/list/state.rs:45 | ⚠️ |
110
+ | ListState::with_offset | ratatui-widgets/src/list/state.rs:51 | ❌ |
111
+ | ListState::with_selected | ratatui-widgets/src/list/state.rs:68 | ❌ |
112
+ | ListState::offset | ratatui-widgets/src/list/state.rs:85 | ⚠️ |
113
+ | ListState::offset_mut | ratatui-widgets/src/list/state.rs:99 | ❌ |
114
+ | ListState::selected | ratatui-widgets/src/list/state.rs:113 | ⚠️ |
115
+ | ListState::selected_mut | ratatui-widgets/src/list/state.rs:129 | ❌ |
116
+ | ListState::select | ratatui-widgets/src/list/state.rs:145 | ⚠️ |
117
+ | ListState::select_next | ratatui-widgets/src/list/state.rs:177 | ❌ |
118
+ | ListState::select_previous | ratatui-widgets/src/list/state.rs:195 | ❌ |
119
+ | ListState::select_first | ratatui-widgets/src/list/state.rs:200 | ❌ |
120
+ | ListState::select_last | ratatui-widgets/src/list/state.rs:217 | ❌ |
121
+
122
+ **Notes:**
123
+ - **ListState**: Implemented as Data.define attributes on List widget itself (selected_index, offset) instead of separate state object
124
+ | ListState::scroll_down_by | ratatui-widgets/src/list/state.rs:248 | ❌ |
125
+ | ListState::scroll_up_by | ratatui-widgets/src/list/state.rs:267 | ❌ |
126
+
127
+ ### Sparkline Widget
128
+
129
+ | Feature Name | File/Line | Status |
130
+ |--------------|-----------|--------|
131
+ | SparklineBar struct | ratatui-widgets/src/sparkline.rs:253 | ❌ |
132
+
133
+ ### Scrollbar Widget
134
+
135
+ | Feature Name | File/Line | Status |
136
+ |--------------|-----------|--------|
137
+ | ScrollbarState struct | ratatui-widgets/src/scrollbar.rs:149 | ⚠️ |
138
+ | ScrollDirection::Forward | ratatui-widgets/src/scrollbar.rs:169 | ❌ |
139
+ | ScrollDirection::Backward | ratatui-widgets/src/scrollbar.rs:172 | ❌ |
140
+
141
+ **Notes:**
142
+ - **ScrollbarState**: Implemented as Data.define attributes on Scrollbar widget itself (content_length, position) instead of separate state object
143
+
144
+ ### Calendar Widget
145
+
146
+ | Feature Name | File/Line | Status |
147
+ |--------------|-----------|--------|
148
+ | CalendarEventStore struct | ratatui-widgets/src/calendar.rs:258 | ❌ |
149
+
150
+ ### Canvas Widget
151
+
152
+ | Feature Name | File/Line | Status |
153
+ |--------------|-----------|--------|
154
+ | Context struct | ratatui-widgets/src/canvas.rs:515 | ❌ |
155
+ | Painter struct | ratatui-widgets/src/canvas.rs:403 | ❌ |
156
+ | Label struct | ratatui-widgets/src/canvas.rs:61 | ❌ |
157
+ | Points shape | ratatui-widgets/src/canvas/points.rs:7 | ❌ |
158
+
159
+ ## Buffer Features
160
+
161
+ | Feature Name | File/Line | Status |
162
+ |--------------|-----------|--------|
163
+ | Buffer::empty | ratatui-core/src/buffer/buffer.rs:77 | ❌ |
164
+ | Buffer::filled | ratatui-core/src/buffer/buffer.rs:83 | ❌ |
165
+ | Buffer::with_lines | ratatui-core/src/buffer/buffer.rs:91 | ❌ |
166
+ | Buffer::get_mut | ratatui-core/src/buffer/buffer.rs:150 | ❌ |
167
+ | Buffer::index_of | ratatui-core/src/buffer/buffer.rs:248 | ❌ |
168
+ | Buffer::set_string | ratatui-core/src/buffer/buffer.rs:323 | ❌ |
169
+ | Buffer::set_stringn | ratatui-core/src/buffer/buffer.rs:335 | ❌ |
170
+ | Buffer::set_line | ratatui-core/src/buffer/buffer.rs:372 | ❌ |
171
+ | Buffer::set_span | ratatui-core/src/buffer/buffer.rs:394 | ❌ |
172
+ | Buffer::set_style | ratatui-core/src/buffer/buffer.rs:404 | ❌ |
173
+ | Buffer::reset | ratatui-core/src/buffer/buffer.rs:427 | ❌ |
174
+ | Cell::set_style | ratatui-core/src/buffer/cell.rs:153 | ❌ |
175
+ | Cell::reset | ratatui-core/src/buffer/cell.rs:193 | ❌ |
176
+
177
+ **Notes:**
178
+ - **Buffer**: Read-only access implemented via `RatatuiRuby.get_cell_at`. Direct mutation methods not exposed in Ruby API
179
+
180
+ ## Widget Traits
181
+
182
+ | Feature Name | File/Line | Status |
183
+ |--------------|-----------|--------|
184
+ | Widget trait | ratatui-core/src/widgets/widget.rs:70 | ⚠️ |
185
+ | StatefulWidget trait | ratatui-core/src/widgets/stateful_widget.rs:124 | ⚠️ |
186
+
187
+ **Notes:**
188
+ - **Widget/StatefulWidget traits**: Not exposed as Ruby traits. Widgets implement `CoerceableWidget` mixin and rendering handled via FFI
189
+
190
+ ## Backend Features
191
+
192
+ | Feature Name | File/Line | Status |
193
+ |--------------|-----------|--------|
194
+ | Backend trait | ratatui-core/src/backend.rs:148 | ⚠️ |
195
+ | ClearType::All | ratatui-core/src/backend.rs:117 | ❌ |
196
+ | ClearType::AfterCursor | ratatui-core/src/backend.rs:119 | ❌ |
197
+ | ClearType::BeforeCursor | ratatui-core/src/backend.rs:121 | ❌ |
198
+ | ClearType::CurrentLine | ratatui-core/src/backend.rs:123 | ❌ |
199
+ | ClearType::UntilNewLine | ratatui-core/src/backend.rs:125 | ❌ |
200
+ | WindowSize struct | ratatui-core/src/backend.rs:130 | ❌ |
201
+ | TermionBackend | ratatui-termion/src/lib.rs:* | ❌ |
202
+ | TermwizBackend | ratatui-termwiz/src/lib.rs:* | ❌ |
203
+
204
+ **Notes:**
205
+ - **Backend trait**: Abstracted away. Terminal uses Crossterm backend internally, not exposed to Ruby API
206
+ - **ClearType**: Not exposed. Clearing handled via `Clear` widget