ratatui_ruby 0.8.0 → 0.9.1
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 +2 -2
- data/.builds/ruby-3.3.yml +2 -2
- data/.builds/ruby-3.4.yml +2 -2
- data/.builds/ruby-4.0.0.yml +2 -2
- data/.pre-commit-config.yaml +1 -1
- data/AGENTS.md +3 -3
- data/CHANGELOG.md +77 -1
- data/LICENSES/LGPL-3.0-or-later.txt +304 -0
- data/LICENSES/MIT-0.txt +16 -0
- data/README.md +33 -5
- data/Rakefile +1 -1
- data/doc/concepts/application_architecture.md +44 -3
- data/doc/concepts/application_testing.md +43 -1
- data/doc/concepts/async.md +32 -2
- data/doc/concepts/custom_widgets.md +247 -0
- data/doc/concepts/event_handling.md +32 -3
- data/doc/concepts/interactive_design.md +32 -2
- data/doc/contributors/auditing/parity.md +7 -1
- data/doc/contributors/design/ruby_frontend.md +85 -1
- data/doc/contributors/design/rust_backend.md +67 -1
- data/doc/contributors/developing_examples.md +56 -2
- data/doc/contributors/documentation_style.md +20 -3
- data/doc/contributors/future_work.md +169 -0
- data/doc/contributors/index.md +1 -1
- data/doc/contributors/v1.0.0_blockers.md +19 -185
- data/doc/getting_started/quickstart.md +22 -4
- data/doc/getting_started/why.md +1 -1
- data/doc/index.md +2 -1
- data/doc/troubleshooting/debugging.md +32 -2
- data/doc/troubleshooting/terminal_limitations.md +8 -2
- data/doc/troubleshooting/tui_output.md +42 -0
- data/examples/app_all_events/README.md +14 -2
- data/examples/app_all_events/app.rb +1 -1
- data/examples/app_all_events/model/app_model.rb +1 -1
- data/examples/app_all_events/model/event_color_cycle.rb +1 -1
- data/examples/app_all_events/model/event_entry.rb +1 -1
- data/examples/app_all_events/model/msg.rb +1 -1
- data/examples/app_all_events/model/timestamp.rb +1 -1
- data/examples/app_all_events/update.rb +1 -1
- data/examples/app_all_events/view/app_view.rb +1 -1
- data/examples/app_all_events/view/controls_view.rb +1 -1
- data/examples/app_all_events/view/counts_view.rb +1 -1
- data/examples/app_all_events/view/live_view.rb +1 -1
- data/examples/app_all_events/view/log_view.rb +1 -1
- data/examples/app_all_events/view.rb +1 -1
- data/examples/app_color_picker/README.md +20 -2
- data/examples/app_color_picker/app.rb +1 -1
- data/examples/app_color_picker/clipboard.rb +1 -1
- data/examples/app_color_picker/color.rb +1 -1
- data/examples/app_color_picker/controls.rb +1 -1
- data/examples/app_color_picker/copy_dialog.rb +1 -1
- data/examples/app_color_picker/export_pane.rb +1 -1
- data/examples/app_color_picker/harmony.rb +1 -1
- data/examples/app_color_picker/input.rb +1 -1
- data/examples/app_color_picker/main_container.rb +1 -1
- data/examples/app_color_picker/palette.rb +1 -1
- data/examples/app_login_form/README.md +8 -2
- data/examples/app_login_form/app.rb +1 -1
- data/examples/app_stateful_interaction/README.md +2 -2
- data/examples/app_stateful_interaction/app.rb +71 -17
- data/examples/timeout_demo.rb +1 -1
- data/examples/verify_quickstart_dsl/README.md +6 -0
- data/examples/verify_quickstart_dsl/app.rb +3 -3
- data/examples/verify_quickstart_layout/README.md +6 -0
- data/examples/verify_quickstart_layout/app.rb +3 -3
- data/examples/verify_quickstart_lifecycle/README.md +6 -0
- data/examples/verify_quickstart_lifecycle/app.rb +3 -3
- data/examples/verify_readme_usage/README.md +6 -0
- data/examples/verify_readme_usage/app.rb +3 -3
- data/examples/widget_barchart/README.md +6 -0
- data/examples/widget_barchart/app.rb +2 -2
- data/examples/widget_block/README.md +7 -1
- data/examples/widget_block/app.rb +2 -2
- data/examples/widget_box/README.md +6 -0
- data/examples/widget_box/app.rb +9 -6
- data/examples/widget_calendar/README.md +6 -0
- data/examples/widget_calendar/app.rb +2 -2
- data/examples/widget_canvas/README.md +4 -0
- data/examples/widget_canvas/app.rb +2 -2
- data/examples/widget_cell/README.md +6 -0
- data/examples/widget_cell/app.rb +2 -3
- data/examples/widget_center/README.md +4 -0
- data/examples/widget_center/app.rb +2 -2
- data/examples/widget_chart/README.md +6 -0
- data/examples/widget_chart/app.rb +2 -2
- data/examples/widget_gauge/README.md +6 -0
- data/examples/widget_gauge/app.rb +2 -2
- data/examples/widget_layout_split/README.md +6 -0
- data/examples/widget_layout_split/app.rb +9 -3
- data/examples/widget_line_gauge/README.md +6 -0
- data/examples/widget_line_gauge/app.rb +2 -2
- data/examples/widget_list/README.md +6 -0
- data/examples/widget_list/app.rb +2 -2
- data/examples/widget_map/README.md +8 -2
- data/examples/widget_map/app.rb +2 -2
- data/examples/widget_overlay/README.md +7 -1
- data/examples/widget_overlay/app.rb +2 -2
- data/examples/widget_popup/README.md +6 -0
- data/examples/widget_popup/app.rb +2 -2
- data/examples/widget_ratatui_logo/README.md +6 -0
- data/examples/widget_ratatui_logo/app.rb +2 -3
- data/examples/widget_ratatui_mascot/README.md +6 -0
- data/examples/widget_ratatui_mascot/app.rb +2 -2
- data/examples/widget_rect/README.md +12 -0
- data/examples/widget_rect/app.rb +40 -26
- data/examples/widget_render/README.md +6 -0
- data/examples/widget_render/app.rb +2 -2
- data/examples/widget_render/app.rbs +41 -0
- data/examples/widget_rich_text/README.md +6 -0
- data/examples/widget_rich_text/app.rb +2 -2
- data/examples/widget_scroll_text/README.md +6 -0
- data/examples/widget_scroll_text/app.rb +2 -2
- data/examples/widget_scrollbar/README.md +6 -0
- data/examples/widget_scrollbar/app.rb +2 -2
- data/examples/widget_sparkline/README.md +6 -0
- data/examples/widget_sparkline/app.rb +2 -2
- data/examples/widget_style_colors/README.md +6 -0
- data/examples/widget_style_colors/app.rb +2 -2
- data/examples/widget_table/README.md +8 -2
- data/examples/widget_table/app.rb +2 -2
- data/examples/widget_tabs/README.md +6 -0
- data/examples/widget_tabs/app.rb +2 -2
- data/examples/widget_text_width/README.md +6 -0
- data/examples/widget_text_width/app.rb +4 -4
- data/ext/ratatui_ruby/Cargo.lock +1 -1
- data/ext/ratatui_ruby/Cargo.toml +1 -1
- data/ext/ratatui_ruby/extconf.rb +2 -2
- data/ext/ratatui_ruby/src/events.rs +1 -0
- data/ext/ratatui_ruby/src/rendering.rs +1 -1
- data/ext/ratatui_ruby/src/style.rs +0 -8
- data/ext/ratatui_ruby/src/widgets/chart.rs +0 -118
- data/ext/ratatui_ruby/src/widgets/list_state.rs +36 -0
- data/lib/ratatui_ruby/buffer/cell.rb +34 -2
- data/lib/ratatui_ruby/buffer.rb +2 -2
- data/lib/ratatui_ruby/cell.rb +34 -2
- data/lib/ratatui_ruby/event/focus_gained.rb +26 -2
- data/lib/ratatui_ruby/event/focus_lost.rb +26 -2
- data/lib/ratatui_ruby/event/key/character.rb +18 -2
- data/lib/ratatui_ruby/event/key/media.rb +2 -2
- data/lib/ratatui_ruby/event/key/modifier.rb +10 -2
- data/lib/ratatui_ruby/event/key/navigation.rb +2 -2
- data/lib/ratatui_ruby/event/key/system.rb +2 -2
- data/lib/ratatui_ruby/event/key.rb +114 -2
- data/lib/ratatui_ruby/event/mouse.rb +42 -2
- data/lib/ratatui_ruby/event/none.rb +10 -2
- data/lib/ratatui_ruby/event/paste.rb +34 -2
- data/lib/ratatui_ruby/event/resize.rb +34 -2
- data/lib/ratatui_ruby/event/sync.rb +52 -0
- data/lib/ratatui_ruby/event.rb +32 -2
- data/lib/ratatui_ruby/frame.rb +74 -2
- data/lib/ratatui_ruby/layout/constraint.rb +193 -2
- data/lib/ratatui_ruby/layout/layout.rb +47 -2
- data/lib/ratatui_ruby/layout/rect.rb +403 -2
- data/lib/ratatui_ruby/layout.rb +2 -2
- data/lib/ratatui_ruby/list_state.rb +113 -2
- data/lib/ratatui_ruby/output_guard.rb +26 -3
- data/lib/ratatui_ruby/schema/bar_chart/bar.rb +2 -2
- data/lib/ratatui_ruby/schema/bar_chart/bar_group.rb +2 -2
- data/lib/ratatui_ruby/schema/bar_chart.rb +50 -2
- data/lib/ratatui_ruby/schema/block.rb +21 -15
- data/lib/ratatui_ruby/schema/calendar.rb +2 -2
- data/lib/ratatui_ruby/schema/canvas.rb +10 -2
- data/lib/ratatui_ruby/schema/center.rb +10 -2
- data/lib/ratatui_ruby/schema/chart.rb +2 -28
- data/lib/ratatui_ruby/schema/clear.rb +10 -2
- data/lib/ratatui_ruby/schema/constraint.rb +58 -2
- data/lib/ratatui_ruby/schema/cursor.rb +10 -2
- data/lib/ratatui_ruby/schema/draw.rb +10 -2
- data/lib/ratatui_ruby/schema/gauge.rb +2 -2
- data/lib/ratatui_ruby/schema/layout.rb +18 -2
- data/lib/ratatui_ruby/schema/line_gauge.rb +2 -2
- data/lib/ratatui_ruby/schema/list.rb +10 -2
- data/lib/ratatui_ruby/schema/list_item.rb +10 -2
- data/lib/ratatui_ruby/schema/overlay.rb +10 -2
- data/lib/ratatui_ruby/schema/paragraph.rb +10 -2
- data/lib/ratatui_ruby/schema/ratatui_logo.rb +2 -2
- data/lib/ratatui_ruby/schema/ratatui_mascot.rb +2 -2
- data/lib/ratatui_ruby/schema/rect.rb +58 -2
- data/lib/ratatui_ruby/schema/row.rb +10 -2
- data/lib/ratatui_ruby/schema/scrollbar.rb +2 -2
- data/lib/ratatui_ruby/schema/shape/label.rb +10 -2
- data/lib/ratatui_ruby/schema/sparkline.rb +10 -2
- data/lib/ratatui_ruby/schema/style.rb +18 -2
- data/lib/ratatui_ruby/schema/table.rb +2 -2
- data/lib/ratatui_ruby/schema/tabs.rb +2 -2
- data/lib/ratatui_ruby/schema/text.rb +34 -2
- data/lib/ratatui_ruby/scrollbar_state.rb +10 -2
- data/lib/ratatui_ruby/style/style.rb +18 -2
- data/lib/ratatui_ruby/style.rb +2 -2
- data/lib/ratatui_ruby/synthetic_events.rb +86 -0
- data/lib/ratatui_ruby/table_state.rb +10 -2
- data/lib/ratatui_ruby/terminal_lifecycle.rb +18 -3
- data/lib/ratatui_ruby/test_helper/event_injection.rb +62 -2
- data/lib/ratatui_ruby/test_helper/snapshot.rb +74 -9
- data/lib/ratatui_ruby/test_helper/style_assertions.rb +98 -2
- data/lib/ratatui_ruby/test_helper/terminal.rb +50 -2
- data/lib/ratatui_ruby/test_helper/test_doubles.rb +18 -2
- data/lib/ratatui_ruby/test_helper.rb +10 -2
- data/lib/ratatui_ruby/tui/buffer_factories.rb +2 -2
- data/lib/ratatui_ruby/tui/canvas_factories.rb +2 -2
- data/lib/ratatui_ruby/tui/core.rb +2 -2
- data/lib/ratatui_ruby/tui/layout_factories.rb +32 -2
- data/lib/ratatui_ruby/tui/state_factories.rb +2 -2
- data/lib/ratatui_ruby/tui/style_factories.rb +2 -2
- data/lib/ratatui_ruby/tui/text_factories.rb +2 -2
- data/lib/ratatui_ruby/tui/widget_factories.rb +2 -2
- data/lib/ratatui_ruby/tui.rb +11 -3
- data/lib/ratatui_ruby/version.rb +3 -3
- data/lib/ratatui_ruby/widgets/bar_chart/bar.rb +2 -2
- data/lib/ratatui_ruby/widgets/bar_chart/bar_group.rb +2 -2
- data/lib/ratatui_ruby/widgets/bar_chart.rb +58 -2
- data/lib/ratatui_ruby/widgets/block.rb +37 -15
- data/lib/ratatui_ruby/widgets/calendar.rb +2 -2
- data/lib/ratatui_ruby/widgets/canvas.rb +10 -2
- data/lib/ratatui_ruby/widgets/cell.rb +10 -2
- data/lib/ratatui_ruby/widgets/center.rb +10 -2
- data/lib/ratatui_ruby/widgets/chart.rb +2 -28
- data/lib/ratatui_ruby/widgets/clear.rb +10 -2
- data/lib/ratatui_ruby/widgets/cursor.rb +10 -2
- data/lib/ratatui_ruby/widgets/gauge.rb +16 -2
- data/lib/ratatui_ruby/widgets/line_gauge.rb +16 -2
- data/lib/ratatui_ruby/widgets/list.rb +41 -2
- data/lib/ratatui_ruby/widgets/list_item.rb +10 -2
- data/lib/ratatui_ruby/widgets/overlay.rb +10 -2
- data/lib/ratatui_ruby/widgets/paragraph.rb +10 -2
- data/lib/ratatui_ruby/widgets/ratatui_logo.rb +2 -2
- data/lib/ratatui_ruby/widgets/ratatui_mascot.rb +2 -2
- data/lib/ratatui_ruby/widgets/row.rb +10 -2
- data/lib/ratatui_ruby/widgets/scrollbar.rb +2 -2
- data/lib/ratatui_ruby/widgets/shape/label.rb +10 -2
- data/lib/ratatui_ruby/widgets/sparkline.rb +10 -2
- data/lib/ratatui_ruby/widgets/table.rb +62 -2
- data/lib/ratatui_ruby/widgets/tabs.rb +2 -2
- data/lib/ratatui_ruby/widgets.rb +2 -2
- data/lib/ratatui_ruby.rb +101 -9
- data/sig/examples/app_all_events/view.rbs +7 -1
- data/sig/examples/app_all_events/view_state.rbs +7 -1
- data/sig/examples/app_color_picker/app.rbs +5 -0
- data/sig/examples/app_stateful_interaction/app.rbs +7 -1
- data/sig/examples/verify_quickstart_dsl/app.rbs +7 -1
- data/sig/examples/verify_quickstart_lifecycle/app.rbs +7 -1
- data/sig/examples/verify_readme_usage/app.rbs +7 -1
- data/sig/examples/widget_block_demo/app.rbs +6 -0
- data/sig/examples/widget_box_demo/app.rbs +7 -1
- data/sig/examples/widget_calendar_demo/app.rbs +7 -1
- data/sig/examples/widget_cell_demo/app.rbs +7 -1
- data/sig/examples/widget_chart_demo/app.rbs +7 -1
- data/sig/examples/widget_gauge_demo/app.rbs +7 -1
- data/sig/examples/widget_layout_split/app.rbs +7 -1
- data/sig/examples/widget_line_gauge_demo/app.rbs +7 -1
- data/sig/examples/widget_list_demo/app.rbs +5 -0
- data/sig/examples/widget_map_demo/app.rbs +7 -1
- data/sig/examples/widget_popup_demo/app.rbs +7 -1
- data/sig/examples/widget_ratatui_logo_demo/app.rbs +7 -1
- data/sig/examples/widget_ratatui_mascot_demo/app.rbs +7 -1
- data/sig/examples/widget_rect/app.rbs +7 -1
- data/sig/examples/widget_render/app.rbs +7 -1
- data/sig/examples/widget_rich_text/app.rbs +7 -1
- data/sig/examples/widget_scroll_text/app.rbs +7 -1
- data/sig/examples/widget_scrollbar_demo/app.rbs +7 -1
- data/sig/examples/widget_sparkline_demo/app.rbs +7 -1
- data/sig/examples/widget_style_colors/app.rbs +7 -1
- data/sig/examples/widget_table_demo/app.rbs +7 -1
- data/sig/examples/widget_text_width/app.rbs +7 -1
- data/sig/ratatui_ruby/event.rbs +7 -1
- data/sig/ratatui_ruby/frame.rbs +15 -3
- data/sig/ratatui_ruby/list_state.rbs +11 -1
- data/sig/ratatui_ruby/ratatui_ruby.rbs +8 -2
- data/sig/ratatui_ruby/schema/bar_chart/bar.rbs +7 -1
- data/sig/ratatui_ruby/schema/bar_chart/bar_group.rbs +6 -0
- data/sig/ratatui_ruby/schema/bar_chart.rbs +6 -0
- data/sig/ratatui_ruby/schema/block.rbs +7 -1
- data/sig/ratatui_ruby/schema/calendar.rbs +6 -0
- data/sig/ratatui_ruby/schema/canvas.rbs +6 -0
- data/sig/ratatui_ruby/schema/center.rbs +6 -0
- data/sig/ratatui_ruby/schema/chart.rbs +6 -9
- data/sig/ratatui_ruby/schema/constraint.rbs +14 -0
- data/sig/ratatui_ruby/schema/cursor.rbs +6 -0
- data/sig/ratatui_ruby/schema/draw.rbs +6 -0
- data/sig/ratatui_ruby/schema/gauge.rbs +9 -1
- data/sig/ratatui_ruby/schema/layout.rbs +6 -0
- data/sig/ratatui_ruby/schema/line_gauge.rbs +9 -1
- data/sig/ratatui_ruby/schema/list.rbs +9 -1
- data/sig/ratatui_ruby/schema/list_item.rbs +7 -1
- data/sig/ratatui_ruby/schema/overlay.rbs +6 -0
- data/sig/ratatui_ruby/schema/paragraph.rbs +6 -0
- data/sig/ratatui_ruby/schema/ratatui_logo.rbs +6 -0
- data/sig/ratatui_ruby/schema/ratatui_mascot.rbs +5 -0
- data/sig/ratatui_ruby/schema/rect.rbs +30 -0
- data/sig/ratatui_ruby/schema/row.rbs +7 -1
- data/sig/ratatui_ruby/schema/scrollbar.rbs +6 -0
- data/sig/ratatui_ruby/schema/sparkline.rbs +6 -0
- data/sig/ratatui_ruby/schema/style.rbs +7 -1
- data/sig/ratatui_ruby/schema/table.rbs +11 -1
- data/sig/ratatui_ruby/schema/tabs.rbs +6 -0
- data/sig/ratatui_ruby/schema/text.rbs +7 -1
- data/sig/ratatui_ruby/scrollbar_state.rbs +7 -1
- data/sig/ratatui_ruby/session.rbs +7 -1
- data/sig/ratatui_ruby/table_state.rbs +7 -1
- data/sig/ratatui_ruby/test_helper/event_injection.rbs +7 -1
- data/sig/ratatui_ruby/test_helper/snapshot.rbs +7 -1
- data/sig/ratatui_ruby/test_helper/style_assertions.rbs +7 -1
- data/sig/ratatui_ruby/test_helper/terminal.rbs +7 -1
- data/sig/ratatui_ruby/test_helper/test_doubles.rbs +7 -1
- data/sig/ratatui_ruby/test_helper.rbs +7 -1
- data/sig/ratatui_ruby/tui/buffer_factories.rbs +7 -1
- data/sig/ratatui_ruby/tui/canvas_factories.rbs +7 -1
- data/sig/ratatui_ruby/tui/core.rbs +7 -1
- data/sig/ratatui_ruby/tui/layout_factories.rbs +7 -1
- data/sig/ratatui_ruby/tui/state_factories.rbs +7 -1
- data/sig/ratatui_ruby/tui/style_factories.rbs +7 -1
- data/sig/ratatui_ruby/tui/text_factories.rbs +7 -1
- data/sig/ratatui_ruby/tui/widget_factories.rbs +7 -1
- data/sig/ratatui_ruby/tui.rbs +7 -1
- data/sig/ratatui_ruby/version.rbs +6 -0
- data/tasks/autodoc/examples.rb +1 -1
- data/tasks/autodoc/member.rb +1 -1
- data/tasks/autodoc/name.rb +1 -1
- data/tasks/bump/cargo_lockfile.rb +1 -1
- data/tasks/bump/changelog.rb +1 -1
- data/tasks/bump/header.rb +1 -1
- data/tasks/bump/history.rb +1 -1
- data/tasks/bump/links.rb +1 -1
- data/tasks/bump/manifest.rb +1 -1
- data/tasks/bump/ruby_gem.rb +1 -1
- data/tasks/bump/sem_ver.rb +1 -1
- data/tasks/bump/unreleased_section.rb +1 -1
- data/tasks/license/headers_md.rb +223 -0
- data/tasks/license/headers_rb.rb +210 -0
- data/tasks/license/license_utils.rb +130 -0
- data/tasks/license/snippets_md.rb +315 -0
- data/tasks/license/snippets_rdoc.rb +150 -0
- data/tasks/license.rake +91 -0
- data/tasks/rdoc_config.rb +1 -1
- data/tasks/resources/build.yml.erb +13 -7
- data/tasks/sourcehut.rake +3 -1
- data/tasks/terminal_preview/app_screenshot.rb +1 -1
- data/tasks/terminal_preview/crash_report.rb +1 -1
- data/tasks/terminal_preview/example_app.rb +1 -1
- data/tasks/terminal_preview/launcher_script.rb +1 -1
- data/tasks/terminal_preview/preview_collection.rb +1 -1
- data/tasks/terminal_preview/preview_timing.rb +1 -1
- data/tasks/terminal_preview/safety_confirmation.rb +1 -1
- data/tasks/terminal_preview/saved_screenshot.rb +1 -1
- data/tasks/terminal_preview/system_appearance.rb +1 -1
- data/tasks/terminal_preview/terminal_window.rb +1 -1
- data/tasks/terminal_preview/window_id.rb +1 -1
- data/tasks/website/index_page.rb +1 -1
- data/tasks/website/version.rb +1 -1
- data/tasks/website/version_menu.rb +1 -1
- data/tasks/website/versioned_documentation.rb +1 -1
- data/tasks/website/website.rb +1 -1
- metadata +15 -3
- data/doc/migration/v0_7_0.md +0 -236
data/lib/ratatui_ruby.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
#--
|
|
4
|
-
# SPDX-FileCopyrightText:
|
|
5
|
-
# SPDX-License-Identifier:
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
6
6
|
#++
|
|
7
7
|
|
|
8
8
|
require_relative "ratatui_ruby/version"
|
|
@@ -31,6 +31,9 @@ require_relative "ratatui_ruby/terminal_lifecycle"
|
|
|
31
31
|
# TUI facade (for external instantiation and caching)
|
|
32
32
|
require_relative "ratatui_ruby/tui"
|
|
33
33
|
|
|
34
|
+
# Synthetic events queue (for async synchronization)
|
|
35
|
+
require_relative "ratatui_ruby/synthetic_events"
|
|
36
|
+
|
|
34
37
|
begin
|
|
35
38
|
require "ratatui_ruby/ratatui_ruby"
|
|
36
39
|
rescue LoadError
|
|
@@ -53,11 +56,19 @@ module RatatuiRuby
|
|
|
53
56
|
#
|
|
54
57
|
# === Example
|
|
55
58
|
#
|
|
59
|
+
#--
|
|
60
|
+
# SPDX-SnippetBegin
|
|
61
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
62
|
+
# SPDX-License-Identifier: MIT-0
|
|
63
|
+
#++
|
|
56
64
|
# begin
|
|
57
65
|
# RatatuiRuby.run { |tui| ... }
|
|
58
66
|
# rescue RatatuiRuby::Error => e
|
|
59
67
|
# puts "RatatuiRuby error: #{e.message}"
|
|
60
68
|
# end
|
|
69
|
+
#--
|
|
70
|
+
# SPDX-SnippetEnd
|
|
71
|
+
#++
|
|
61
72
|
class Error < StandardError
|
|
62
73
|
# Operational failure during terminal I/O.
|
|
63
74
|
#
|
|
@@ -71,11 +82,19 @@ module RatatuiRuby
|
|
|
71
82
|
#
|
|
72
83
|
# === Example
|
|
73
84
|
#
|
|
85
|
+
#--
|
|
86
|
+
# SPDX-SnippetBegin
|
|
87
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
88
|
+
# SPDX-License-Identifier: MIT-0
|
|
89
|
+
#++
|
|
74
90
|
# begin
|
|
75
91
|
# RatatuiRuby.init_terminal
|
|
76
92
|
# rescue RatatuiRuby::Error::Terminal => e
|
|
77
93
|
# puts "Terminal failed: #{e.message}"
|
|
78
94
|
# end
|
|
95
|
+
#--
|
|
96
|
+
# SPDX-SnippetEnd
|
|
97
|
+
#++
|
|
79
98
|
class Terminal < Error; end
|
|
80
99
|
|
|
81
100
|
# Object lifetime violation.
|
|
@@ -91,26 +110,43 @@ module RatatuiRuby
|
|
|
91
110
|
#
|
|
92
111
|
# === Example
|
|
93
112
|
#
|
|
113
|
+
#--
|
|
114
|
+
# SPDX-SnippetBegin
|
|
115
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
116
|
+
# SPDX-License-Identifier: MIT-0
|
|
117
|
+
#++
|
|
94
118
|
# stored_frame = nil
|
|
95
119
|
# RatatuiRuby.draw { |frame| stored_frame = frame }
|
|
96
120
|
# stored_frame.area # => raises Error::Safety
|
|
121
|
+
#--
|
|
122
|
+
# SPDX-SnippetEnd
|
|
123
|
+
#++
|
|
97
124
|
class Safety < Error; end
|
|
98
125
|
|
|
99
|
-
#
|
|
126
|
+
# Invariant violation.
|
|
100
127
|
#
|
|
101
|
-
# The library
|
|
102
|
-
#
|
|
128
|
+
# The library enforces rules about valid states and contracts.
|
|
129
|
+
# Breaking these rules raises this error.
|
|
103
130
|
#
|
|
104
|
-
#
|
|
105
|
-
#
|
|
131
|
+
# Common causes:
|
|
132
|
+
# - Calling methods in the wrong order (e.g., \`init_terminal\` twice)
|
|
133
|
+
# - Callable return type mismatch (e.g., view returns \`nil\` instead of a widget)
|
|
106
134
|
#
|
|
107
|
-
# To resolve, check
|
|
108
|
-
#
|
|
135
|
+
# To resolve, check the method's documented contract. Ensure
|
|
136
|
+
# state preconditions are met and return types are correct.
|
|
109
137
|
#
|
|
110
138
|
# === Example
|
|
111
139
|
#
|
|
140
|
+
#--
|
|
141
|
+
# SPDX-SnippetBegin
|
|
142
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
143
|
+
# SPDX-License-Identifier: MIT-0
|
|
144
|
+
#++
|
|
112
145
|
# RatatuiRuby.init_terminal
|
|
113
146
|
# RatatuiRuby.init_terminal # => raises Error::Invariant
|
|
147
|
+
#--
|
|
148
|
+
# SPDX-SnippetEnd
|
|
149
|
+
#++
|
|
114
150
|
class Invariant < Error; end
|
|
115
151
|
end
|
|
116
152
|
|
|
@@ -149,8 +185,16 @@ module RatatuiRuby
|
|
|
149
185
|
# [event_type] "key" or "mouse"
|
|
150
186
|
# [data] a Hash containing event data
|
|
151
187
|
#
|
|
188
|
+
#--
|
|
189
|
+
# SPDX-SnippetBegin
|
|
190
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long
|
|
191
|
+
# SPDX-License-Identifier: MIT-0
|
|
192
|
+
#++
|
|
152
193
|
# inject_test_event("key", { code: "a" })
|
|
153
194
|
#
|
|
195
|
+
#--
|
|
196
|
+
# SPDX-SnippetEnd
|
|
197
|
+
#++
|
|
154
198
|
# (Native method implemented in Rust)
|
|
155
199
|
|
|
156
200
|
##
|
|
@@ -189,20 +233,44 @@ module RatatuiRuby
|
|
|
189
233
|
# {Frame} object for imperative drawing.
|
|
190
234
|
#
|
|
191
235
|
# [tree] A widget tree (Widgets::Paragraph, Layout::Layout, etc.) to render. Optional if
|
|
236
|
+
#--
|
|
237
|
+
# SPDX-SnippetBegin
|
|
238
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long
|
|
239
|
+
# SPDX-License-Identifier: MIT-0
|
|
240
|
+
#++
|
|
192
241
|
# a block is given.
|
|
193
242
|
#
|
|
243
|
+
#--
|
|
244
|
+
# SPDX-SnippetEnd
|
|
245
|
+
#++
|
|
194
246
|
# === Examples
|
|
195
247
|
#
|
|
196
248
|
# Legacy declarative style (tree-based):
|
|
197
249
|
#
|
|
250
|
+
#--
|
|
251
|
+
# SPDX-SnippetBegin
|
|
252
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
253
|
+
# SPDX-License-Identifier: MIT-0
|
|
254
|
+
#++
|
|
198
255
|
# RatatuiRuby.draw(Widgets::Paragraph.new(text: "Hello"))
|
|
199
256
|
#
|
|
257
|
+
#--
|
|
258
|
+
# SPDX-SnippetEnd
|
|
259
|
+
#++
|
|
200
260
|
# New imperative style (block-based):
|
|
201
261
|
#
|
|
262
|
+
#--
|
|
263
|
+
# SPDX-SnippetBegin
|
|
264
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
265
|
+
# SPDX-License-Identifier: MIT-0
|
|
266
|
+
#++
|
|
202
267
|
# RatatuiRuby.draw do |frame|
|
|
203
268
|
# frame.render_widget(Widgets::Paragraph.new(text: "Hello"), frame.area)
|
|
204
269
|
# end
|
|
205
270
|
#
|
|
271
|
+
#--
|
|
272
|
+
# SPDX-SnippetEnd
|
|
273
|
+
#++
|
|
206
274
|
def self.draw(tree = nil, &block)
|
|
207
275
|
if tree && block
|
|
208
276
|
raise ArgumentError, "Cannot provide both a tree and a block to draw"
|
|
@@ -229,11 +297,24 @@ module RatatuiRuby
|
|
|
229
297
|
# This method checks for an event. It returns the event if one is found. It returns {RatatuiRuby::Event::None} if the timeout expires.
|
|
230
298
|
#
|
|
231
299
|
# [timeout] Float seconds to wait (default: 0.016).
|
|
300
|
+
#--
|
|
301
|
+
# SPDX-SnippetBegin
|
|
302
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
303
|
+
# SPDX-License-Identifier: MIT-0
|
|
304
|
+
#++
|
|
232
305
|
# Pass <tt>nil</tt> to block indefinitely (wait forever).
|
|
233
306
|
# Pass <tt>0.0</tt> for a non-blocking check.
|
|
234
307
|
#
|
|
308
|
+
#--
|
|
309
|
+
# SPDX-SnippetEnd
|
|
310
|
+
#++
|
|
235
311
|
# === Examples
|
|
236
312
|
#
|
|
313
|
+
#--
|
|
314
|
+
# SPDX-SnippetBegin
|
|
315
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
316
|
+
# SPDX-License-Identifier: MIT-0
|
|
317
|
+
#++
|
|
237
318
|
# # Standard loop (approx 60 FPS)
|
|
238
319
|
# event = RatatuiRuby.poll_event
|
|
239
320
|
#
|
|
@@ -243,6 +324,9 @@ module RatatuiRuby
|
|
|
243
324
|
# # Non-blocking check (returns immediately)
|
|
244
325
|
# event = RatatuiRuby.poll_event(timeout: 0.0)
|
|
245
326
|
#
|
|
327
|
+
#--
|
|
328
|
+
# SPDX-SnippetEnd
|
|
329
|
+
#++
|
|
246
330
|
def self.poll_event(timeout: 0.016)
|
|
247
331
|
raise ArgumentError, "timeout must be non-negative" if timeout && timeout < 0
|
|
248
332
|
|
|
@@ -293,11 +377,19 @@ module RatatuiRuby
|
|
|
293
377
|
#
|
|
294
378
|
# === Example
|
|
295
379
|
#
|
|
380
|
+
#--
|
|
381
|
+
# SPDX-SnippetBegin
|
|
382
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long
|
|
383
|
+
# SPDX-License-Identifier: MIT-0
|
|
384
|
+
#++
|
|
296
385
|
# cell = RatatuiRuby.get_cell_at(10, 5)
|
|
297
386
|
# expect(cell.symbol).to eq("X")
|
|
298
387
|
# expect(cell.fg).to eq(:red)
|
|
299
388
|
# expect(cell).to be_bold
|
|
300
389
|
#
|
|
390
|
+
#--
|
|
391
|
+
# SPDX-SnippetEnd
|
|
392
|
+
#++
|
|
301
393
|
def self.get_cell_at(x, y)
|
|
302
394
|
raw = _get_cell_at(x, y)
|
|
303
395
|
Buffer::Cell.new(
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
module View
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
class ViewState < Data
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
6
|
+
#++
|
|
7
|
+
|
|
3
8
|
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
4
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
class AppStatefulInteraction
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
4
10
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
class WidgetLayoutSplit
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
3
8
|
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
4
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
class WidgetRect
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
class WidgetRender
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
class WidgetSparklineDemo
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
class WidgetStyleColors
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
#
|
|
3
9
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
10
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: MIT-0
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
class WidgetTextWidth
|
data/sig/ratatui_ruby/event.rbs
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
module RatatuiRuby
|
data/sig/ratatui_ruby/frame.rbs
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
6
|
+
#++
|
|
3
7
|
|
|
4
8
|
module RatatuiRuby
|
|
9
|
+
# Interface for custom widgets that can be passed to Frame#render_widget.
|
|
10
|
+
#
|
|
11
|
+
# Any Ruby object implementing this interface works as a widget.
|
|
12
|
+
# Return an Array of Draw commands describing what to render.
|
|
13
|
+
interface _CustomWidget
|
|
14
|
+
def render: (Rect area) -> Array[Draw::StringCmd | Draw::CellCmd]
|
|
15
|
+
end
|
|
16
|
+
|
|
5
17
|
class Frame
|
|
6
18
|
def area: () -> Rect
|
|
7
|
-
def render_widget: (widget widget, Rect area) -> nil
|
|
19
|
+
def render_widget: (_CustomWidget | widget widget, Rect area) -> nil
|
|
8
20
|
def render_stateful_widget: (widget widget, Rect area, (ListState | TableState | ScrollbarState) state) -> nil
|
|
9
21
|
def set_cursor_position: (Integer x, Integer y) -> nil
|
|
10
22
|
end
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
module RatatuiRuby
|
|
@@ -9,5 +15,9 @@ module RatatuiRuby
|
|
|
9
15
|
def offset: () -> Integer
|
|
10
16
|
def scroll_down_by: (Integer n) -> nil
|
|
11
17
|
def scroll_up_by: (Integer n) -> nil
|
|
18
|
+
def select_next: () -> nil
|
|
19
|
+
def select_previous: () -> nil
|
|
20
|
+
def select_first: () -> nil
|
|
21
|
+
def select_last: () -> nil
|
|
12
22
|
end
|
|
13
23
|
end
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
|
|
5
|
+
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
6
|
+
#++
|
|
7
|
+
|
|
2
8
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
9
|
|
|
4
10
|
module RatatuiRuby
|
|
5
|
-
type widget = Paragraph | Layout | List | Gauge | Table | Tabs | BarChart | Block | Sparkline
|
|
11
|
+
type widget = Paragraph | Layout | List | Gauge | Table | Tabs | BarChart | Block | Sparkline
|
|
6
12
|
|
|
7
13
|
interface _ToS
|
|
8
14
|
def to_s: () -> String
|