ratatui_ruby 0.7.4 → 0.9.0
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 +70 -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 +15 -175
- data/doc/getting_started/quickstart.md +35 -9
- 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 +127 -6
- 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 +13 -1
- data/examples/verify_quickstart_lifecycle/app.rb +10 -4
- 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 +3 -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/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.rb +26 -2
- data/lib/ratatui_ruby/frame.rb +74 -2
- data/lib/ratatui_ruby/layout/constraint.rb +58 -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 +171 -0
- 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/table_state.rb +10 -2
- data/lib/ratatui_ruby/terminal_lifecycle.rb +144 -0
- data/lib/ratatui_ruby/test_helper/event_injection.rb +34 -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 +116 -81
- 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 +6 -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 +9 -3
- 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
|
@@ -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
|
module RatatuiRuby
|
|
@@ -21,6 +21,11 @@ module RatatuiRuby
|
|
|
21
21
|
#
|
|
22
22
|
# === Examples
|
|
23
23
|
#
|
|
24
|
+
#--
|
|
25
|
+
# SPDX-SnippetBegin
|
|
26
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
27
|
+
# SPDX-License-Identifier: MIT-0
|
|
28
|
+
#++
|
|
24
29
|
# # Single cell
|
|
25
30
|
# assert_cell_style(0, 0, fg: :red, modifiers: [:bold])
|
|
26
31
|
#
|
|
@@ -30,14 +35,25 @@ module RatatuiRuby
|
|
|
30
35
|
# # Entire header region
|
|
31
36
|
# assert_area_style({ x: 0, y: 0, w: 80, h: 1 }, bg: :blue)
|
|
32
37
|
#
|
|
38
|
+
#--
|
|
39
|
+
# SPDX-SnippetEnd
|
|
40
|
+
#++
|
|
33
41
|
module StyleAssertions
|
|
34
42
|
##
|
|
35
43
|
# Asserts that a cell has the expected style attributes.
|
|
36
44
|
#
|
|
37
45
|
# === Example
|
|
38
46
|
#
|
|
47
|
+
#--
|
|
48
|
+
# SPDX-SnippetBegin
|
|
49
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
50
|
+
# SPDX-License-Identifier: MIT-0
|
|
51
|
+
#++
|
|
39
52
|
# assert_cell_style(0, 0, char: "H", fg: :red)
|
|
40
53
|
#
|
|
54
|
+
#--
|
|
55
|
+
# SPDX-SnippetEnd
|
|
56
|
+
#++
|
|
41
57
|
# [x] Integer x-coordinate.
|
|
42
58
|
# [y] Integer y-coordinate.
|
|
43
59
|
# [expected_attributes] Hash of attribute names to expected values.
|
|
@@ -60,10 +76,18 @@ module RatatuiRuby
|
|
|
60
76
|
#
|
|
61
77
|
# === Examples
|
|
62
78
|
#
|
|
79
|
+
#--
|
|
80
|
+
# SPDX-SnippetBegin
|
|
81
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
82
|
+
# SPDX-License-Identifier: MIT-0
|
|
83
|
+
#++
|
|
63
84
|
# assert_color(:red, x: 10, y: 5)
|
|
64
85
|
# assert_color(5, x: 10, y: 5, layer: :bg)
|
|
65
86
|
# assert_color("#ff00ff", x: 10, y: 5)
|
|
66
87
|
#
|
|
88
|
+
#--
|
|
89
|
+
# SPDX-SnippetEnd
|
|
90
|
+
#++
|
|
67
91
|
# [expected] Symbol, Integer, or String (hex).
|
|
68
92
|
# [x] Integer x-coordinate.
|
|
69
93
|
# [y] Integer y-coordinate.
|
|
@@ -88,11 +112,19 @@ module RatatuiRuby
|
|
|
88
112
|
#
|
|
89
113
|
# === Examples
|
|
90
114
|
#
|
|
115
|
+
#--
|
|
116
|
+
# SPDX-SnippetBegin
|
|
117
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
118
|
+
# SPDX-License-Identifier: MIT-0
|
|
119
|
+
#++
|
|
91
120
|
# header = RatatuiRuby::Layout::Rect.new(x: 0, y: 0, width: 80, height: 1)
|
|
92
121
|
# assert_area_style(header, bg: :blue, modifiers: [:bold])
|
|
93
122
|
#
|
|
94
123
|
# assert_area_style({ x: 0, y: 0, w: 10, h: 1 }, fg: :red)
|
|
95
124
|
#
|
|
125
|
+
#--
|
|
126
|
+
# SPDX-SnippetEnd
|
|
127
|
+
#++
|
|
96
128
|
# [area] Rect-like object or Hash with x, y, width/w, height/h.
|
|
97
129
|
# [attributes] Style attributes to verify.
|
|
98
130
|
def assert_area_style(area, **attributes)
|
|
@@ -122,8 +154,16 @@ module RatatuiRuby
|
|
|
122
154
|
#
|
|
123
155
|
# === Example
|
|
124
156
|
#
|
|
157
|
+
#--
|
|
158
|
+
# SPDX-SnippetBegin
|
|
159
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
160
|
+
# SPDX-License-Identifier: MIT-0
|
|
161
|
+
#++
|
|
125
162
|
# assert_fg_color(:yellow, 0, 2)
|
|
126
163
|
#
|
|
164
|
+
#--
|
|
165
|
+
# SPDX-SnippetEnd
|
|
166
|
+
#++
|
|
127
167
|
# [expected] Symbol, Integer, or String (hex).
|
|
128
168
|
# [x] Integer x-coordinate.
|
|
129
169
|
# [y] Integer y-coordinate.
|
|
@@ -139,8 +179,16 @@ module RatatuiRuby
|
|
|
139
179
|
#
|
|
140
180
|
# === Example
|
|
141
181
|
#
|
|
182
|
+
#--
|
|
183
|
+
# SPDX-SnippetBegin
|
|
184
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
185
|
+
# SPDX-License-Identifier: MIT-0
|
|
186
|
+
#++
|
|
142
187
|
# assert_bg_color(:blue, 0, 2)
|
|
143
188
|
#
|
|
189
|
+
#--
|
|
190
|
+
# SPDX-SnippetEnd
|
|
191
|
+
#++
|
|
144
192
|
# [expected] Symbol, Integer, or String (hex).
|
|
145
193
|
# [x] Integer x-coordinate.
|
|
146
194
|
# [y] Integer y-coordinate.
|
|
@@ -154,8 +202,16 @@ module RatatuiRuby
|
|
|
154
202
|
#
|
|
155
203
|
# === Example
|
|
156
204
|
#
|
|
205
|
+
#--
|
|
206
|
+
# SPDX-SnippetBegin
|
|
207
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
208
|
+
# SPDX-License-Identifier: MIT-0
|
|
209
|
+
#++
|
|
157
210
|
# assert_bold(0, 2)
|
|
158
211
|
#
|
|
212
|
+
#--
|
|
213
|
+
# SPDX-SnippetEnd
|
|
214
|
+
#++
|
|
159
215
|
# [x] Integer x-coordinate.
|
|
160
216
|
# [y] Integer y-coordinate.
|
|
161
217
|
def assert_bold(x, y)
|
|
@@ -170,8 +226,16 @@ module RatatuiRuby
|
|
|
170
226
|
#
|
|
171
227
|
# === Example
|
|
172
228
|
#
|
|
229
|
+
#--
|
|
230
|
+
# SPDX-SnippetBegin
|
|
231
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
232
|
+
# SPDX-License-Identifier: MIT-0
|
|
233
|
+
#++
|
|
173
234
|
# assert_italic(0, 2)
|
|
174
235
|
#
|
|
236
|
+
#--
|
|
237
|
+
# SPDX-SnippetEnd
|
|
238
|
+
#++
|
|
175
239
|
# [x] Integer x-coordinate.
|
|
176
240
|
# [y] Integer y-coordinate.
|
|
177
241
|
def assert_italic(x, y)
|
|
@@ -186,8 +250,16 @@ module RatatuiRuby
|
|
|
186
250
|
#
|
|
187
251
|
# === Example
|
|
188
252
|
#
|
|
253
|
+
#--
|
|
254
|
+
# SPDX-SnippetBegin
|
|
255
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
256
|
+
# SPDX-License-Identifier: MIT-0
|
|
257
|
+
#++
|
|
189
258
|
# assert_underlined(0, 2)
|
|
190
259
|
#
|
|
260
|
+
#--
|
|
261
|
+
# SPDX-SnippetEnd
|
|
262
|
+
#++
|
|
191
263
|
# [x] Integer x-coordinate.
|
|
192
264
|
# [y] Integer y-coordinate.
|
|
193
265
|
def assert_underlined(x, y)
|
|
@@ -203,8 +275,16 @@ module RatatuiRuby
|
|
|
203
275
|
#
|
|
204
276
|
# === Example
|
|
205
277
|
#
|
|
278
|
+
#--
|
|
279
|
+
# SPDX-SnippetBegin
|
|
280
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
281
|
+
# SPDX-License-Identifier: MIT-0
|
|
282
|
+
#++
|
|
206
283
|
# assert_dim(0, 2)
|
|
207
284
|
#
|
|
285
|
+
#--
|
|
286
|
+
# SPDX-SnippetEnd
|
|
287
|
+
#++
|
|
208
288
|
# [x] Integer x-coordinate.
|
|
209
289
|
# [y] Integer y-coordinate.
|
|
210
290
|
def assert_dim(x, y)
|
|
@@ -219,8 +299,16 @@ module RatatuiRuby
|
|
|
219
299
|
#
|
|
220
300
|
# === Example
|
|
221
301
|
#
|
|
302
|
+
#--
|
|
303
|
+
# SPDX-SnippetBegin
|
|
304
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
305
|
+
# SPDX-License-Identifier: MIT-0
|
|
306
|
+
#++
|
|
222
307
|
# assert_reversed(0, 2)
|
|
223
308
|
#
|
|
309
|
+
#--
|
|
310
|
+
# SPDX-SnippetEnd
|
|
311
|
+
#++
|
|
224
312
|
# [x] Integer x-coordinate.
|
|
225
313
|
# [y] Integer y-coordinate.
|
|
226
314
|
def assert_reversed(x, y)
|
|
@@ -237,8 +325,16 @@ module RatatuiRuby
|
|
|
237
325
|
#
|
|
238
326
|
# === Example
|
|
239
327
|
#
|
|
328
|
+
#--
|
|
329
|
+
# SPDX-SnippetBegin
|
|
330
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
331
|
+
# SPDX-License-Identifier: MIT-0
|
|
332
|
+
#++
|
|
240
333
|
# assert_crossed_out(0, 2)
|
|
241
334
|
#
|
|
335
|
+
#--
|
|
336
|
+
# SPDX-SnippetEnd
|
|
337
|
+
#++
|
|
242
338
|
# [x] Integer x-coordinate.
|
|
243
339
|
# [y] Integer y-coordinate.
|
|
244
340
|
def assert_crossed_out(x, y)
|
|
@@ -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 "timeout"
|
|
@@ -23,6 +23,11 @@ module RatatuiRuby
|
|
|
23
23
|
#
|
|
24
24
|
# === Example
|
|
25
25
|
#
|
|
26
|
+
#--
|
|
27
|
+
# SPDX-SnippetBegin
|
|
28
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
29
|
+
# SPDX-License-Identifier: MIT-0
|
|
30
|
+
#++
|
|
26
31
|
# class MyTest < Minitest::Test
|
|
27
32
|
# include RatatuiRuby::TestHelper
|
|
28
33
|
#
|
|
@@ -33,6 +38,9 @@ module RatatuiRuby
|
|
|
33
38
|
# end
|
|
34
39
|
# end
|
|
35
40
|
# end
|
|
41
|
+
#--
|
|
42
|
+
# SPDX-SnippetEnd
|
|
43
|
+
#++
|
|
36
44
|
module Terminal
|
|
37
45
|
##
|
|
38
46
|
# Initializes a test terminal context with specified dimensions.
|
|
@@ -44,9 +52,17 @@ module RatatuiRuby
|
|
|
44
52
|
#
|
|
45
53
|
# === Example
|
|
46
54
|
#
|
|
55
|
+
#--
|
|
56
|
+
# SPDX-SnippetBegin
|
|
57
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
58
|
+
# SPDX-License-Identifier: MIT-0
|
|
59
|
+
#++
|
|
47
60
|
# with_test_terminal(120, 40) do
|
|
48
61
|
# # render and test your app
|
|
49
62
|
# end
|
|
63
|
+
#--
|
|
64
|
+
# SPDX-SnippetEnd
|
|
65
|
+
#++
|
|
50
66
|
def with_test_terminal(width = 80, height = 24, **opts)
|
|
51
67
|
# Defensive cleanup: reset any stale session state from previous test failures
|
|
52
68
|
RatatuiRuby.instance_variable_set(:@tui_session_active, false)
|
|
@@ -80,8 +96,16 @@ module RatatuiRuby
|
|
|
80
96
|
#
|
|
81
97
|
# === Example
|
|
82
98
|
#
|
|
99
|
+
#--
|
|
100
|
+
# SPDX-SnippetBegin
|
|
101
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
102
|
+
# SPDX-License-Identifier: MIT-0
|
|
103
|
+
#++
|
|
83
104
|
# buffer_content
|
|
84
105
|
# # => ["Row 1 text", "Row 2 text", ...]
|
|
106
|
+
#--
|
|
107
|
+
# SPDX-SnippetEnd
|
|
108
|
+
#++
|
|
85
109
|
def buffer_content
|
|
86
110
|
RatatuiRuby.get_buffer_content.split("\n")
|
|
87
111
|
end
|
|
@@ -91,8 +115,16 @@ module RatatuiRuby
|
|
|
91
115
|
#
|
|
92
116
|
# === Example
|
|
93
117
|
#
|
|
118
|
+
#--
|
|
119
|
+
# SPDX-SnippetBegin
|
|
120
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
121
|
+
# SPDX-License-Identifier: MIT-0
|
|
122
|
+
#++
|
|
94
123
|
# cursor_position
|
|
95
124
|
# # => { x: 0, y: 0 }
|
|
125
|
+
#--
|
|
126
|
+
# SPDX-SnippetEnd
|
|
127
|
+
#++
|
|
96
128
|
def cursor_position
|
|
97
129
|
x, y = RatatuiRuby.get_cursor_position
|
|
98
130
|
{ x:, y: }
|
|
@@ -108,8 +140,16 @@ module RatatuiRuby
|
|
|
108
140
|
#
|
|
109
141
|
# === Example
|
|
110
142
|
#
|
|
143
|
+
#--
|
|
144
|
+
# SPDX-SnippetBegin
|
|
145
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
146
|
+
# SPDX-License-Identifier: MIT-0
|
|
147
|
+
#++
|
|
111
148
|
# get_cell(0, 0)
|
|
112
149
|
# # => { "symbol" => "H", "fg" => :red, "bg" => nil }
|
|
150
|
+
#--
|
|
151
|
+
# SPDX-SnippetEnd
|
|
152
|
+
#++
|
|
113
153
|
def get_cell(x, y)
|
|
114
154
|
RatatuiRuby.get_cell_at(x, y)
|
|
115
155
|
end
|
|
@@ -120,10 +160,18 @@ module RatatuiRuby
|
|
|
120
160
|
#
|
|
121
161
|
# === Example
|
|
122
162
|
#
|
|
163
|
+
#--
|
|
164
|
+
# SPDX-SnippetBegin
|
|
165
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
166
|
+
# SPDX-License-Identifier: MIT-0
|
|
167
|
+
#++
|
|
123
168
|
# with_test_terminal do
|
|
124
169
|
# MyApp.new.render
|
|
125
170
|
# print_buffer # see exactly what would display
|
|
126
171
|
# end
|
|
172
|
+
#--
|
|
173
|
+
# SPDX-SnippetEnd
|
|
174
|
+
#++
|
|
127
175
|
def print_buffer
|
|
128
176
|
puts _render_buffer_with_ansi
|
|
129
177
|
end
|
|
@@ -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
|
module RatatuiRuby
|
|
@@ -21,12 +21,20 @@ module RatatuiRuby
|
|
|
21
21
|
#
|
|
22
22
|
# === Example
|
|
23
23
|
#
|
|
24
|
+
#--
|
|
25
|
+
# SPDX-SnippetBegin
|
|
26
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
27
|
+
# SPDX-License-Identifier: MIT-0
|
|
28
|
+
#++
|
|
24
29
|
# frame = MockFrame.new
|
|
25
30
|
# area = StubRect.new(width: 60, height: 20)
|
|
26
31
|
# MyView.new.call(state, tui, frame, area)
|
|
27
32
|
#
|
|
28
33
|
# widget = frame.rendered_widgets.first[:widget]
|
|
29
34
|
# assert_equal "Dashboard", widget.block.title
|
|
35
|
+
#--
|
|
36
|
+
# SPDX-SnippetEnd
|
|
37
|
+
#++
|
|
30
38
|
module TestDoubles
|
|
31
39
|
##
|
|
32
40
|
# Mock frame for view tests.
|
|
@@ -35,10 +43,18 @@ module RatatuiRuby
|
|
|
35
43
|
#
|
|
36
44
|
# === Example
|
|
37
45
|
#
|
|
46
|
+
#--
|
|
47
|
+
# SPDX-SnippetBegin
|
|
48
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
49
|
+
# SPDX-License-Identifier: MIT-0
|
|
50
|
+
#++
|
|
38
51
|
# frame = MockFrame.new
|
|
39
52
|
# View::Log.new.call(state, tui, frame, area)
|
|
40
53
|
# widget = frame.rendered_widgets.first[:widget]
|
|
41
54
|
# assert_equal "Event Log", widget.block.title
|
|
55
|
+
#--
|
|
56
|
+
# SPDX-SnippetEnd
|
|
57
|
+
#++
|
|
42
58
|
MockFrame = Data.define(:rendered_widgets) do
|
|
43
59
|
def initialize(rendered_widgets: [])
|
|
44
60
|
super
|
|
@@ -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 "fileutils"
|
|
@@ -33,6 +33,11 @@ module RatatuiRuby
|
|
|
33
33
|
#
|
|
34
34
|
# == Example
|
|
35
35
|
#
|
|
36
|
+
#--
|
|
37
|
+
# SPDX-SnippetBegin
|
|
38
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
39
|
+
# SPDX-License-Identifier: MIT-0
|
|
40
|
+
#++
|
|
36
41
|
# require "ratatui_ruby/test_helper"
|
|
37
42
|
#
|
|
38
43
|
# class TestMyApp < Minitest::Test
|
|
@@ -83,6 +88,9 @@ module RatatuiRuby
|
|
|
83
88
|
# assert_equal "Dashboard", widget.block.title
|
|
84
89
|
# end
|
|
85
90
|
# end
|
|
91
|
+
#--
|
|
92
|
+
# SPDX-SnippetEnd
|
|
93
|
+
#++
|
|
86
94
|
module TestHelper
|
|
87
95
|
include Terminal
|
|
88
96
|
include Snapshot
|
|
@@ -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
|
module RatatuiRuby
|
|
@@ -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
|
module RatatuiRuby
|
|
@@ -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
|
module RatatuiRuby
|
|
@@ -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
|
module RatatuiRuby
|
|
@@ -71,6 +71,36 @@ module RatatuiRuby
|
|
|
71
71
|
def layout_split(area, direction: :vertical, constraints:, flex: :legacy)
|
|
72
72
|
Layout::Layout.split(area, direction:, constraints:, flex:)
|
|
73
73
|
end
|
|
74
|
+
|
|
75
|
+
# Alias for {#layout_split} — shorter, more ergonomic.
|
|
76
|
+
# @return [Array<Layout::Rect>]
|
|
77
|
+
def split(area, direction: :vertical, constraints:, flex: :legacy)
|
|
78
|
+
layout_split(area, direction:, constraints:, flex:)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Alias for {#constraint_length} — CSS-inspired "fixed" sizing.
|
|
82
|
+
# @return [Layout::Constraint]
|
|
83
|
+
def fixed(n)
|
|
84
|
+
constraint_length(n)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Alias for {#constraint_percentage} — CSS-inspired percent sizing.
|
|
88
|
+
# @return [Layout::Constraint]
|
|
89
|
+
def percent(n)
|
|
90
|
+
constraint_percentage(n)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Alias for {#constraint_fill} — CSS Flexbox-inspired flexible sizing.
|
|
94
|
+
# @return [Layout::Constraint]
|
|
95
|
+
def flex(n = 1)
|
|
96
|
+
constraint_fill(n)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Alias for {#constraint_fill} — CSS Grid-inspired "fr" (fraction) unit.
|
|
100
|
+
# @return [Layout::Constraint]
|
|
101
|
+
def fr(n = 1)
|
|
102
|
+
constraint_fill(n)
|
|
103
|
+
end
|
|
74
104
|
end
|
|
75
105
|
end
|
|
76
106
|
end
|
|
@@ -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
|
module RatatuiRuby
|
|
@@ -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
|
module RatatuiRuby
|
|
@@ -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
|
module RatatuiRuby
|
|
@@ -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
|
module RatatuiRuby
|
data/lib/ratatui_ruby/tui.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 "tui/core"
|
|
@@ -49,6 +49,11 @@ module RatatuiRuby
|
|
|
49
49
|
#
|
|
50
50
|
# ==== Basic Usage (Recommended)
|
|
51
51
|
#
|
|
52
|
+
#--
|
|
53
|
+
# SPDX-SnippetBegin
|
|
54
|
+
# SPDX-FileCopyrightText: 2026 Kerrick Long
|
|
55
|
+
# SPDX-License-Identifier: MIT-0
|
|
56
|
+
#++
|
|
52
57
|
# RatatuiRuby.run do |tui|
|
|
53
58
|
# loop do
|
|
54
59
|
# tui.draw \
|
|
@@ -58,12 +63,15 @@ module RatatuiRuby
|
|
|
58
63
|
# block: tui.block(
|
|
59
64
|
# title: "My Ruby TUI App",
|
|
60
65
|
# borders: [:all],
|
|
61
|
-
#
|
|
66
|
+
# border_style: { fg: \"cyan\" }
|
|
62
67
|
# )
|
|
63
68
|
# event = tui.poll_event
|
|
64
69
|
# break if event == "q" || event == :ctrl_c
|
|
65
70
|
# end
|
|
66
71
|
# end
|
|
72
|
+
#--
|
|
73
|
+
# SPDX-SnippetEnd
|
|
74
|
+
#++
|
|
67
75
|
class TUI
|
|
68
76
|
include Core
|
|
69
77
|
include LayoutFactories
|
data/lib/ratatui_ruby/version.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
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
|
module RatatuiRuby
|
|
9
9
|
# The version of the ratatui_ruby gem.
|
|
10
10
|
# See https://semver.org/spec/v2.0.0.html
|
|
11
|
-
VERSION = "0.
|
|
11
|
+
VERSION = "0.9.0"
|
|
12
12
|
end
|
|
@@ -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
|
module RatatuiRuby
|
|
@@ -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
|
module RatatuiRuby
|