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.
- checksums.yaml +4 -4
- data/.builds/ruby-3.2.yml +1 -1
- data/.builds/ruby-3.3.yml +1 -1
- data/.builds/ruby-3.4.yml +1 -1
- data/.builds/ruby-4.0.0.yml +1 -1
- data/CHANGELOG.md +24 -0
- data/doc/concepts/application_architecture.md +2 -2
- data/doc/concepts/application_testing.md +1 -1
- data/doc/concepts/custom_widgets.md +2 -2
- data/doc/contributors/todo/align/api_completeness_audit-finished.md +375 -0
- data/doc/contributors/todo/align/api_completeness_audit-unfinished.md +206 -0
- data/doc/contributors/todo/align/terminal.md +647 -0
- data/doc/getting_started/quickstart.md +41 -41
- data/doc/images/app_cli_rich_moments.gif +0 -0
- data/examples/app_cli_rich_moments/README.md +81 -0
- data/examples/app_cli_rich_moments/app.rb +189 -0
- data/ext/ratatui_ruby/Cargo.lock +1 -1
- data/ext/ratatui_ruby/Cargo.toml +1 -1
- data/ext/ratatui_ruby/src/frame.rs +17 -4
- data/ext/ratatui_ruby/src/lib.rs +17 -3
- data/ext/ratatui_ruby/src/lib.rs.bak +286 -0
- data/ext/ratatui_ruby/src/rendering.rs +38 -25
- data/ext/ratatui_ruby/src/rendering.rs.bak +152 -0
- data/ext/ratatui_ruby/src/terminal.rs +245 -33
- data/ext/ratatui_ruby/src/terminal.rs.bak +381 -0
- data/ext/ratatui_ruby/src/terminal.rs.orig +409 -0
- data/ext/ratatui_ruby/src/widgets/barchart.rs +4 -3
- data/ext/ratatui_ruby/src/widgets/block.rs +4 -4
- data/ext/ratatui_ruby/src/widgets/calendar.rs +4 -3
- data/ext/ratatui_ruby/src/widgets/canvas.rs +7 -4
- data/ext/ratatui_ruby/src/widgets/center.rs +3 -3
- data/ext/ratatui_ruby/src/widgets/chart.rs +4 -4
- data/ext/ratatui_ruby/src/widgets/clear.rs +6 -6
- data/ext/ratatui_ruby/src/widgets/cursor.rs +10 -7
- data/ext/ratatui_ruby/src/widgets/gauge.rs +4 -3
- data/ext/ratatui_ruby/src/widgets/layout.rs +3 -3
- data/ext/ratatui_ruby/src/widgets/line_gauge.rs +4 -3
- data/ext/ratatui_ruby/src/widgets/list.rs +6 -9
- data/ext/ratatui_ruby/src/widgets/overlay.rs +3 -3
- data/ext/ratatui_ruby/src/widgets/paragraph.rs +5 -6
- data/ext/ratatui_ruby/src/widgets/ratatui_logo.rs +4 -4
- data/ext/ratatui_ruby/src/widgets/ratatui_mascot.rs +8 -4
- data/ext/ratatui_ruby/src/widgets/scrollbar.rs +10 -10
- data/ext/ratatui_ruby/src/widgets/sparkline.rs +4 -3
- data/ext/ratatui_ruby/src/widgets/table.rs +6 -6
- data/ext/ratatui_ruby/src/widgets/tabs.rs +4 -3
- data/lib/ratatui_ruby/labs/a11y.rb +173 -0
- data/lib/ratatui_ruby/labs/frame_a11y_capture.rb +50 -0
- data/lib/ratatui_ruby/labs.rb +47 -0
- data/lib/ratatui_ruby/layout/position.rb +26 -0
- data/lib/ratatui_ruby/terminal/viewport.rb +80 -0
- data/lib/ratatui_ruby/terminal_lifecycle.rb +164 -6
- data/lib/ratatui_ruby/terminal_lifecycle.rb.bak +197 -0
- data/lib/ratatui_ruby/test_helper/terminal.rb +8 -1
- data/lib/ratatui_ruby/tui/core.rb +16 -0
- data/lib/ratatui_ruby/version.rb +1 -1
- data/lib/ratatui_ruby.rb +82 -3
- data/migrate_to_buffer.rb +145 -0
- data/sig/examples/app_cli_rich_moments/app.rbs +12 -0
- data/sig/ratatui_ruby/labs.rbs +87 -0
- data/sig/ratatui_ruby/ratatui_ruby.rbs +12 -4
- data/sig/ratatui_ruby/terminal/viewport.rbs +19 -0
- data/sig/ratatui_ruby/terminal_lifecycle.rbs +13 -5
- data/sig/ratatui_ruby/tui/core.rbs +3 -0
- metadata +21 -2
- /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
|