ratatui_ruby 0.4.0 → 0.5.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 +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/AGENTS.md +87 -171
- data/CHANGELOG.md +38 -1
- data/README.md +8 -3
- data/REUSE.toml +20 -0
- data/doc/application_architecture.md +105 -45
- data/doc/application_testing.md +5 -3
- data/doc/contributors/design/ruby_frontend.md +9 -5
- data/doc/contributors/developing_examples.md +76 -18
- data/doc/contributors/documentation_style.md +7 -0
- data/doc/contributors/index.md +2 -0
- data/doc/event_handling.md +10 -4
- data/doc/images/app_all_events.png +0 -0
- data/doc/images/app_color_picker.png +0 -0
- data/doc/images/verify_readme_usage.png +0 -0
- data/doc/images/widget_barchart_demo.png +0 -0
- data/doc/images/widget_block_padding.png +0 -0
- data/doc/images/widget_block_titles.png +0 -0
- data/doc/images/widget_box_demo.png +0 -0
- data/doc/images/widget_calendar_demo.png +0 -0
- data/doc/images/widget_cell_demo.png +0 -0
- data/doc/images/widget_chart_demo.png +0 -0
- data/doc/images/widget_gauge_demo.png +0 -0
- data/doc/images/widget_layout_split.png +0 -0
- data/doc/images/widget_line_gauge_demo.png +0 -0
- data/doc/images/widget_list_demo.png +0 -0
- data/doc/images/widget_ratatui_logo_demo.png +0 -0
- data/doc/images/widget_ratatui_mascot_demo.png +0 -0
- data/doc/images/widget_render.png +0 -0
- data/doc/images/widget_scrollbar_demo.png +0 -0
- data/doc/images/widget_sparkline_demo.png +0 -0
- data/doc/images/widget_style_colors.png +0 -0
- data/doc/images/widget_table_flex.png +0 -0
- data/doc/images/widget_tabs_demo.png +0 -0
- data/doc/interactive_design.md +25 -30
- data/doc/quickstart.md +147 -120
- data/examples/app_all_events/README.md +81 -0
- data/examples/app_all_events/app.rb +93 -0
- data/examples/app_all_events/model/event_color_cycle.rb +41 -0
- data/examples/app_all_events/model/event_entry.rb +75 -0
- data/examples/app_all_events/model/events.rb +180 -0
- data/examples/app_all_events/model/highlight.rb +57 -0
- data/examples/app_all_events/model/timestamp.rb +54 -0
- data/examples/app_all_events/test/snapshots/after_focus_lost.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_focus_regained.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_horizontal_resize.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_key_a.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_key_ctrl_x.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_mouse_click.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_mouse_drag.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_multiple_events.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_paste.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_resize.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_right_click.txt +24 -0
- data/examples/app_all_events/test/snapshots/after_vertical_resize.txt +24 -0
- data/examples/app_all_events/test/snapshots/initial_state.txt +24 -0
- data/examples/app_all_events/view/app_view.rb +78 -0
- data/examples/app_all_events/view/controls_view.rb +50 -0
- data/examples/app_all_events/view/counts_view.rb +55 -0
- data/examples/app_all_events/view/live_view.rb +69 -0
- data/examples/app_all_events/view/log_view.rb +60 -0
- data/examples/app_all_events/view.rb +7 -0
- data/examples/app_all_events/view_state.rb +42 -0
- data/examples/app_color_picker/README.md +94 -0
- data/examples/app_color_picker/app.rb +112 -0
- data/examples/app_color_picker/clipboard.rb +84 -0
- data/examples/app_color_picker/color.rb +191 -0
- data/examples/app_color_picker/copy_dialog.rb +170 -0
- data/examples/app_color_picker/harmony.rb +56 -0
- data/examples/app_color_picker/input.rb +142 -0
- data/examples/app_color_picker/palette.rb +80 -0
- data/examples/app_color_picker/scene.rb +201 -0
- data/examples/{login_form → app_login_form}/app.rb +39 -42
- data/examples/{map_demo → app_map_demo}/app.rb +24 -21
- data/examples/{table_select → app_table_select}/app.rb +68 -65
- data/examples/{quickstart_dsl → verify_quickstart_dsl}/app.rb +15 -6
- data/examples/verify_quickstart_layout/app.rb +69 -0
- data/examples/{quickstart_lifecycle → verify_quickstart_lifecycle}/app.rb +19 -10
- data/examples/verify_readme_usage/app.rb +34 -0
- data/examples/widget_barchart_demo/app.rb +238 -0
- data/examples/{block_padding → widget_block_padding}/app.rb +17 -13
- data/examples/{block_titles → widget_block_titles}/app.rb +25 -17
- data/examples/{box_demo → widget_box_demo}/app.rb +99 -65
- data/examples/widget_calendar_demo/app.rb +109 -0
- data/examples/widget_cell_demo/app.rb +104 -0
- data/examples/widget_chart_demo/app.rb +213 -0
- data/examples/widget_gauge_demo/app.rb +212 -0
- data/examples/widget_layout_split/app.rb +246 -0
- data/examples/widget_line_gauge_demo/app.rb +217 -0
- data/examples/widget_list_demo/app.rb +382 -0
- data/examples/widget_list_styles/app.rb +141 -0
- data/examples/widget_popup_demo/app.rb +104 -0
- data/examples/widget_ratatui_logo_demo/app.rb +103 -0
- data/examples/widget_ratatui_mascot_demo/app.rb +93 -0
- data/examples/widget_rect/app.rb +205 -0
- data/examples/widget_render/app.rb +184 -0
- data/examples/widget_rich_text/app.rb +137 -0
- data/examples/widget_scroll_text/app.rb +108 -0
- data/examples/widget_scrollbar_demo/app.rb +153 -0
- data/examples/widget_sparkline_demo/app.rb +274 -0
- data/examples/widget_style_colors/app.rb +19 -21
- data/examples/widget_table_flex/app.rb +95 -0
- data/examples/widget_tabs_demo/app.rb +167 -0
- data/ext/ratatui_ruby/Cargo.lock +1 -1
- data/ext/ratatui_ruby/Cargo.toml +1 -1
- data/ext/ratatui_ruby/src/events.rs +121 -36
- data/ext/ratatui_ruby/src/frame.rs +115 -0
- data/ext/ratatui_ruby/src/lib.rs +79 -26
- data/ext/ratatui_ruby/src/rendering.rs +8 -4
- data/ext/ratatui_ruby/src/style.rs +138 -57
- data/ext/ratatui_ruby/src/terminal.rs +5 -9
- data/ext/ratatui_ruby/src/text.rs +13 -6
- data/ext/ratatui_ruby/src/widgets/barchart.rs +56 -54
- data/ext/ratatui_ruby/src/widgets/block.rs +7 -6
- data/ext/ratatui_ruby/src/widgets/canvas.rs +21 -3
- data/ext/ratatui_ruby/src/widgets/chart.rs +20 -10
- data/ext/ratatui_ruby/src/widgets/layout.rs +9 -4
- data/ext/ratatui_ruby/src/widgets/list.rs +32 -9
- data/ext/ratatui_ruby/src/widgets/overlay.rs +2 -1
- data/ext/ratatui_ruby/src/widgets/paragraph.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/ratatui_logo.rs +19 -8
- data/ext/ratatui_ruby/src/widgets/ratatui_mascot.rs +17 -10
- data/ext/ratatui_ruby/src/widgets/scrollbar.rs +4 -2
- data/ext/ratatui_ruby/src/widgets/sparkline.rs +14 -11
- data/ext/ratatui_ruby/src/widgets/table.rs +8 -4
- data/ext/ratatui_ruby/src/widgets/tabs.rs +11 -11
- data/lib/ratatui_ruby/cell.rb +3 -3
- data/lib/ratatui_ruby/event/key.rb +1 -1
- data/lib/ratatui_ruby/event/none.rb +43 -0
- data/lib/ratatui_ruby/event.rb +56 -4
- data/lib/ratatui_ruby/frame.rb +87 -0
- data/lib/ratatui_ruby/schema/bar_chart/bar.rb +11 -11
- data/lib/ratatui_ruby/schema/bar_chart/bar_group.rb +1 -5
- data/lib/ratatui_ruby/schema/bar_chart.rb +217 -217
- data/lib/ratatui_ruby/schema/block.rb +163 -168
- data/lib/ratatui_ruby/schema/calendar.rb +66 -67
- data/lib/ratatui_ruby/schema/canvas.rb +63 -63
- data/lib/ratatui_ruby/schema/center.rb +46 -46
- data/lib/ratatui_ruby/schema/chart.rb +135 -143
- data/lib/ratatui_ruby/schema/clear.rb +42 -42
- data/lib/ratatui_ruby/schema/constraint.rb +76 -76
- data/lib/ratatui_ruby/schema/cursor.rb +25 -25
- data/lib/ratatui_ruby/schema/gauge.rb +53 -53
- data/lib/ratatui_ruby/schema/layout.rb +87 -87
- data/lib/ratatui_ruby/schema/line_gauge.rb +62 -62
- data/lib/ratatui_ruby/schema/list.rb +86 -84
- data/lib/ratatui_ruby/schema/overlay.rb +31 -31
- data/lib/ratatui_ruby/schema/paragraph.rb +80 -80
- data/lib/ratatui_ruby/schema/ratatui_logo.rb +10 -6
- data/lib/ratatui_ruby/schema/ratatui_mascot.rb +10 -5
- data/lib/ratatui_ruby/schema/rect.rb +60 -60
- data/lib/ratatui_ruby/schema/scrollbar.rb +119 -119
- data/lib/ratatui_ruby/schema/shape/label.rb +1 -1
- data/lib/ratatui_ruby/schema/sparkline.rb +111 -110
- data/lib/ratatui_ruby/schema/style.rb +46 -46
- data/lib/ratatui_ruby/schema/table.rb +112 -119
- data/lib/ratatui_ruby/schema/tabs.rb +66 -67
- data/lib/ratatui_ruby/session/autodoc.rb +417 -0
- data/lib/ratatui_ruby/session.rb +40 -23
- data/lib/ratatui_ruby/test_helper.rb +185 -19
- data/lib/ratatui_ruby/version.rb +1 -1
- data/lib/ratatui_ruby.rb +65 -39
- data/{examples/sparkline_demo → sig/examples/app_all_events}/app.rbs +3 -2
- data/sig/examples/app_all_events/model/event_entry.rbs +16 -0
- data/sig/examples/app_all_events/model/events.rbs +15 -0
- data/sig/examples/app_all_events/model/timestamp.rbs +11 -0
- data/sig/examples/app_all_events/view/app_view.rbs +8 -0
- data/sig/examples/app_all_events/view/controls_view.rbs +6 -0
- data/sig/examples/app_all_events/view/counts_view.rbs +6 -0
- data/sig/examples/app_all_events/view/live_view.rbs +6 -0
- data/sig/examples/app_all_events/view/log_view.rbs +6 -0
- data/sig/examples/app_all_events/view.rbs +8 -0
- data/sig/examples/app_all_events/view_state.rbs +15 -0
- data/{examples/list_demo → sig/examples/app_color_picker}/app.rbs +2 -2
- data/sig/examples/app_login_form/app.rbs +11 -0
- data/sig/examples/app_map_demo/app.rbs +11 -0
- data/sig/examples/app_table_select/app.rbs +11 -0
- data/sig/examples/verify_quickstart_dsl/app.rbs +11 -0
- data/sig/examples/verify_quickstart_lifecycle/app.rbs +11 -0
- data/sig/examples/verify_readme_usage/app.rbs +11 -0
- data/sig/examples/widget_block_padding/app.rbs +11 -0
- data/sig/examples/widget_block_titles/app.rbs +11 -0
- data/sig/examples/widget_box_demo/app.rbs +11 -0
- data/sig/examples/widget_calendar_demo/app.rbs +11 -0
- data/sig/examples/widget_cell_demo/app.rbs +11 -0
- data/sig/examples/widget_chart_demo/app.rbs +11 -0
- data/{examples/gauge_demo → sig/examples/widget_gauge_demo}/app.rbs +4 -0
- data/sig/examples/widget_layout_split/app.rbs +10 -0
- data/sig/examples/widget_line_gauge_demo/app.rbs +11 -0
- data/sig/examples/widget_list_demo/app.rbs +12 -0
- data/sig/examples/widget_list_styles/app.rbs +11 -0
- data/sig/examples/widget_popup_demo/app.rbs +11 -0
- data/sig/examples/widget_ratatui_logo_demo/app.rbs +11 -0
- data/sig/examples/widget_ratatui_mascot_demo/app.rbs +11 -0
- data/sig/examples/widget_rect/app.rbs +12 -0
- data/sig/examples/widget_render/app.rbs +10 -0
- data/sig/examples/widget_rich_text/app.rbs +11 -0
- data/sig/examples/widget_scroll_text/app.rbs +11 -0
- data/sig/examples/widget_scrollbar_demo/app.rbs +11 -0
- data/sig/examples/widget_sparkline_demo/app.rbs +10 -0
- data/{examples → sig/examples}/widget_style_colors/app.rbs +1 -1
- data/sig/examples/widget_table_flex/app.rbs +11 -0
- data/sig/ratatui_ruby/frame.rbs +9 -0
- data/sig/ratatui_ruby/ratatui_ruby.rbs +3 -2
- data/sig/ratatui_ruby/schema/draw.rbs +4 -0
- data/sig/ratatui_ruby/schema/layout.rbs +1 -1
- data/sig/ratatui_ruby/session.rbs +94 -0
- data/tasks/autodoc/inventory.rb +61 -0
- data/tasks/autodoc/member.rb +56 -0
- data/tasks/autodoc/name.rb +19 -0
- data/tasks/autodoc/notice.rb +26 -0
- data/tasks/autodoc/rbs.rb +38 -0
- data/tasks/autodoc/rdoc.rb +45 -0
- data/tasks/autodoc.rake +47 -0
- data/tasks/bump/history.rb +2 -2
- data/tasks/doc.rake +600 -6
- data/tasks/example_viewer.html.erb +172 -0
- data/tasks/lint.rake +8 -4
- data/tasks/resources/index.html.erb +6 -0
- data/tasks/sourcehut.rake +4 -4
- data/tasks/terminal_preview/app_screenshot.rb +1 -3
- data/tasks/terminal_preview/crash_report.rb +7 -9
- data/tasks/terminal_preview/launcher_script.rb +4 -6
- data/tasks/terminal_preview/preview_collection.rb +4 -6
- data/tasks/terminal_preview/safety_confirmation.rb +3 -5
- data/tasks/terminal_preview/saved_screenshot.rb +7 -9
- data/tasks/terminal_preview/terminal_window.rb +7 -9
- data/tasks/test.rake +1 -1
- data/tasks/website/index_page.rb +3 -3
- data/tasks/website/version.rb +10 -10
- data/tasks/website/version_menu.rb +10 -12
- data/tasks/website/versioned_documentation.rb +49 -17
- data/tasks/website/website.rb +6 -8
- data/tasks/website.rake +4 -4
- metadata +156 -125
- data/LICENSES/BSD-2-Clause.txt +0 -9
- data/doc/contributors/better_dx.md +0 -543
- data/doc/contributors/example_analysis.md +0 -82
- data/doc/images/all_events.png +0 -0
- data/doc/images/block_padding.png +0 -0
- data/doc/images/block_titles.png +0 -0
- data/doc/images/box_demo.png +0 -0
- data/doc/images/calendar_demo.png +0 -0
- data/doc/images/cell_demo.png +0 -0
- data/doc/images/chart_demo.png +0 -0
- data/doc/images/flex_layout.png +0 -0
- data/doc/images/gauge_demo.png +0 -0
- data/doc/images/line_gauge_demo.png +0 -0
- data/doc/images/list_demo.png +0 -0
- data/doc/images/readme_usage.png +0 -0
- data/doc/images/scrollbar_demo.png +0 -0
- data/doc/images/sparkline_demo.png +0 -0
- data/doc/images/table_flex.png +0 -0
- data/examples/all_events/app.rb +0 -169
- data/examples/all_events/app.rbs +0 -7
- data/examples/all_events/test_app.rb +0 -139
- data/examples/analytics/app.rb +0 -258
- data/examples/analytics/app.rbs +0 -7
- data/examples/analytics/test_app.rb +0 -132
- data/examples/block_padding/app.rbs +0 -7
- data/examples/block_padding/test_app.rb +0 -31
- data/examples/block_titles/app.rbs +0 -7
- data/examples/block_titles/test_app.rb +0 -34
- data/examples/box_demo/app.rbs +0 -7
- data/examples/box_demo/test_app.rb +0 -88
- data/examples/calendar_demo/app.rb +0 -101
- data/examples/calendar_demo/app.rbs +0 -7
- data/examples/calendar_demo/test_app.rb +0 -108
- data/examples/cell_demo/app.rb +0 -108
- data/examples/cell_demo/app.rbs +0 -7
- data/examples/cell_demo/test_app.rb +0 -36
- data/examples/chart_demo/app.rb +0 -203
- data/examples/chart_demo/app.rbs +0 -7
- data/examples/chart_demo/test_app.rb +0 -102
- data/examples/custom_widget/app.rb +0 -51
- data/examples/custom_widget/app.rbs +0 -7
- data/examples/custom_widget/test_app.rb +0 -30
- data/examples/flex_layout/app.rb +0 -156
- data/examples/flex_layout/app.rbs +0 -7
- data/examples/flex_layout/test_app.rb +0 -65
- data/examples/gauge_demo/app.rb +0 -182
- data/examples/gauge_demo/test_app.rb +0 -120
- data/examples/hit_test/app.rb +0 -175
- data/examples/hit_test/app.rbs +0 -7
- data/examples/hit_test/test_app.rb +0 -102
- data/examples/line_gauge_demo/app.rb +0 -190
- data/examples/line_gauge_demo/app.rbs +0 -7
- data/examples/line_gauge_demo/test_app.rb +0 -129
- data/examples/list_demo/app.rb +0 -253
- data/examples/list_demo/test_app.rb +0 -237
- data/examples/list_styles/app.rb +0 -140
- data/examples/list_styles/app.rbs +0 -7
- data/examples/list_styles/test_app.rb +0 -157
- data/examples/login_form/app.rbs +0 -7
- data/examples/login_form/test_app.rb +0 -51
- data/examples/map_demo/app.rbs +0 -7
- data/examples/map_demo/test_app.rb +0 -149
- data/examples/mouse_events/app.rb +0 -97
- data/examples/mouse_events/app.rbs +0 -7
- data/examples/mouse_events/test_app.rb +0 -53
- data/examples/popup_demo/app.rb +0 -103
- data/examples/popup_demo/app.rbs +0 -7
- data/examples/popup_demo/test_app.rb +0 -54
- data/examples/quickstart_dsl/app.rbs +0 -7
- data/examples/quickstart_dsl/test_app.rb +0 -29
- data/examples/quickstart_lifecycle/app.rbs +0 -7
- data/examples/quickstart_lifecycle/test_app.rb +0 -29
- data/examples/ratatui_logo_demo/app.rb +0 -79
- data/examples/ratatui_logo_demo/app.rbs +0 -7
- data/examples/ratatui_logo_demo/test_app.rb +0 -51
- data/examples/ratatui_mascot_demo/app.rb +0 -84
- data/examples/ratatui_mascot_demo/app.rbs +0 -7
- data/examples/ratatui_mascot_demo/test_app.rb +0 -47
- data/examples/readme_usage/app.rb +0 -29
- data/examples/readme_usage/app.rbs +0 -7
- data/examples/readme_usage/test_app.rb +0 -29
- data/examples/rich_text/app.rb +0 -141
- data/examples/rich_text/app.rbs +0 -7
- data/examples/rich_text/test_app.rb +0 -166
- data/examples/scroll_text/app.rb +0 -103
- data/examples/scroll_text/app.rbs +0 -7
- data/examples/scroll_text/test_app.rb +0 -110
- data/examples/scrollbar_demo/app.rb +0 -143
- data/examples/scrollbar_demo/app.rbs +0 -7
- data/examples/scrollbar_demo/test_app.rb +0 -77
- data/examples/sparkline_demo/app.rb +0 -240
- data/examples/sparkline_demo/test_app.rb +0 -107
- data/examples/table_flex/app.rb +0 -65
- data/examples/table_flex/app.rbs +0 -7
- data/examples/table_flex/test_app.rb +0 -36
- data/examples/table_select/app.rbs +0 -7
- data/examples/table_select/test_app.rb +0 -180
- data/examples/widget_style_colors/test_app.rb +0 -48
- /data/doc/images/{analytics.png → app_analytics.png} +0 -0
- /data/doc/images/{custom_widget.png → app_custom_widget.png} +0 -0
- /data/doc/images/{login_form.png → app_login_form.png} +0 -0
- /data/doc/images/{map_demo.png → app_map_demo.png} +0 -0
- /data/doc/images/{mouse_events.png → app_mouse_events.png} +0 -0
- /data/doc/images/{table_select.png → app_table_select.png} +0 -0
- /data/doc/images/{quickstart_dsl.png → verify_quickstart_dsl.png} +0 -0
- /data/doc/images/{ratatui_logo_demo.png → verify_quickstart_layout.png} +0 -0
- /data/doc/images/{quickstart_lifecycle.png → verify_quickstart_lifecycle.png} +0 -0
- /data/doc/images/{list_styles.png → widget_list_styles.png} +0 -0
- /data/doc/images/{popup_demo.png → widget_popup_demo.png} +0 -0
- /data/doc/images/{hit_test.png → widget_rect.png} +0 -0
- /data/doc/images/{rich_text.png → widget_rich_text.png} +0 -0
- /data/doc/images/{scroll_text.png → widget_scroll_text.png} +0 -0
|
@@ -4,56 +4,56 @@
|
|
|
4
4
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
5
|
|
|
6
6
|
module RatatuiRuby
|
|
7
|
-
|
|
7
|
+
# Defines colors and text modifiers.
|
|
8
|
+
#
|
|
9
|
+
# The terminal is traditionally monochrome, but efficient interfaces use color to convey meaning.
|
|
10
|
+
# Red for errors. Green for success. Bold for headers.
|
|
11
|
+
#
|
|
12
|
+
# This value object encapsulates those choices. It applies foreground and background colors. It adds effects like italics or blinking.
|
|
13
|
+
#
|
|
14
|
+
# Use it to theme your application or highlight critical data.
|
|
15
|
+
#
|
|
16
|
+
# === Examples
|
|
17
|
+
#
|
|
18
|
+
# # Standard colors
|
|
19
|
+
# Style.new(fg: :red, bg: :white, modifiers: [:bold])
|
|
20
|
+
#
|
|
21
|
+
# # Hex colors
|
|
22
|
+
# Style.new(fg: "#ff00ff")
|
|
23
|
+
class Style < Data.define(:fg, :bg, :modifiers)
|
|
24
|
+
##
|
|
25
|
+
# :attr_reader: fg
|
|
26
|
+
# Foreground color.
|
|
8
27
|
#
|
|
9
|
-
#
|
|
10
|
-
# Red for errors. Green for success. Bold for headers.
|
|
11
|
-
#
|
|
12
|
-
# This value object encapsulates those choices. It applies foreground and background colors. It adds effects like italics or blinking.
|
|
13
|
-
#
|
|
14
|
-
# Use it to theme your application or highlight critical data.
|
|
15
|
-
#
|
|
16
|
-
# === Examples
|
|
17
|
-
#
|
|
18
|
-
# # Standard colors
|
|
19
|
-
# Style.new(fg: :red, bg: :white, modifiers: [:bold])
|
|
20
|
-
#
|
|
21
|
-
# # Hex colors
|
|
22
|
-
# Style.new(fg: "#ff00ff")
|
|
23
|
-
class Style < Data.define(:fg, :bg, :modifiers)
|
|
24
|
-
##
|
|
25
|
-
# :attr_reader: fg
|
|
26
|
-
# Foreground color.
|
|
27
|
-
#
|
|
28
|
-
# Symbol (<tt>:red</tt>) or Hex String (<tt>"#ffffff"</tt>).
|
|
28
|
+
# Symbol (<tt>:red</tt>) or Hex String (<tt>"#ffffff"</tt>).
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
##
|
|
31
|
+
# :attr_reader: bg
|
|
32
|
+
# Background color.
|
|
33
|
+
#
|
|
34
|
+
# Symbol (<tt>:black</tt>) or Hex String (<tt>"#000000"</tt>).
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
##
|
|
37
|
+
# :attr_reader: modifiers
|
|
38
|
+
# Text effects.
|
|
39
|
+
#
|
|
40
|
+
# Array of symbols: <tt>:bold</tt>, <tt>:dim</tt>, <tt>:italic</tt>, <tt>:underlined</tt>,
|
|
41
|
+
# <tt>:slow_blink</tt>, <tt>:rapid_blink</tt>, <tt>:reversed</tt>, <tt>:hidden</tt>, <tt>:crossed_out</tt>.
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
# Creates a new Style.
|
|
44
|
+
#
|
|
45
|
+
# [fg] Color (Symbol/String).
|
|
46
|
+
# [bg] Color (Symbol/String).
|
|
47
|
+
# [modifiers] Array of Symbols.
|
|
48
|
+
def initialize(fg: nil, bg: nil, modifiers: [])
|
|
49
|
+
super
|
|
50
|
+
end
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
end
|
|
52
|
+
# Returns an empty style.
|
|
53
|
+
#
|
|
54
|
+
# Use this as a baseline to prevent style inheritance issues or when no styling is required.
|
|
55
|
+
def self.default
|
|
56
|
+
new
|
|
58
57
|
end
|
|
58
|
+
end
|
|
59
59
|
end
|
|
@@ -4,125 +4,118 @@
|
|
|
4
4
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
5
|
|
|
6
6
|
module RatatuiRuby
|
|
7
|
-
|
|
7
|
+
# Displays structured data in rows and columns.
|
|
8
|
+
#
|
|
9
|
+
# Data is often multidimensional. You need to show relationships between fields (Name, Age, ID).
|
|
10
|
+
# Aligning columns manually in a monospaced environment is painful and error-prone.
|
|
11
|
+
#
|
|
12
|
+
# This widget creates a grid. It enforces column widths using constraints. It renders headers, rows, and footers aligned perfectly.
|
|
13
|
+
#
|
|
14
|
+
# Use it to display database records, logs, or file lists.
|
|
15
|
+
#
|
|
16
|
+
# {rdoc-image:/doc/images/widget_table_flex.png}[link:/examples/widget_table_flex/app_rb.html]
|
|
17
|
+
#
|
|
18
|
+
# === Example
|
|
19
|
+
#
|
|
20
|
+
# Run the interactive demo from the terminal:
|
|
21
|
+
#
|
|
22
|
+
# ruby examples/widget_table_flex/app.rb
|
|
23
|
+
class Table < Data.define(:header, :rows, :widths, :highlight_style, :highlight_symbol, :highlight_spacing, :column_highlight_style, :cell_highlight_style, :selected_row, :selected_column, :block, :footer, :flex, :style, :column_spacing)
|
|
24
|
+
##
|
|
25
|
+
# :attr_reader: header
|
|
26
|
+
# Header row content (Array of Strings).
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# :attr_reader: rows
|
|
30
|
+
# Data rows (Array of Arrays of Strings).
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# :attr_reader: widths
|
|
34
|
+
# Column width constraints (Array of Constraint).
|
|
35
|
+
|
|
36
|
+
##
|
|
37
|
+
# :attr_reader: highlight_style
|
|
38
|
+
# Style for the selected row.
|
|
39
|
+
|
|
40
|
+
##
|
|
41
|
+
# :attr_reader: highlight_symbol
|
|
42
|
+
# Symbol for the selected row.
|
|
43
|
+
|
|
44
|
+
##
|
|
45
|
+
# :attr_reader: highlight_spacing
|
|
46
|
+
# When to show the highlight symbol column (:always, :when_selected, :never).
|
|
47
|
+
|
|
48
|
+
##
|
|
49
|
+
# :attr_reader: column_highlight_style
|
|
50
|
+
# Style for the selected column.
|
|
51
|
+
|
|
52
|
+
##
|
|
53
|
+
# :attr_reader: cell_highlight_style
|
|
54
|
+
# Style for the selected cell (intersection of row and column).
|
|
55
|
+
|
|
56
|
+
##
|
|
57
|
+
# :attr_reader: selected_row
|
|
58
|
+
# Index of the selected row (Integer or nil).
|
|
59
|
+
|
|
60
|
+
##
|
|
61
|
+
# :attr_reader: selected_column
|
|
62
|
+
# Index of the selected column (Integer or nil).
|
|
63
|
+
|
|
64
|
+
##
|
|
65
|
+
# :attr_reader: block
|
|
66
|
+
# Optional wrapping block.
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
# :attr_reader: footer
|
|
70
|
+
# Footer row content (Array of Strings).
|
|
71
|
+
|
|
72
|
+
##
|
|
73
|
+
# :attr_reader: flex
|
|
74
|
+
# Flex mode for column distribution.
|
|
75
|
+
|
|
76
|
+
##
|
|
77
|
+
# :attr_reader: style
|
|
78
|
+
# Base style for the entire table.
|
|
79
|
+
|
|
80
|
+
##
|
|
81
|
+
# :attr_reader: column_spacing
|
|
82
|
+
# Spacing between columns (Integer, default 1).
|
|
83
|
+
|
|
84
|
+
# Creates a new Table.
|
|
8
85
|
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
##
|
|
44
|
-
# :attr_reader: highlight_style
|
|
45
|
-
# Style for the selected row.
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
# :attr_reader: highlight_symbol
|
|
49
|
-
# Symbol for the selected row.
|
|
50
|
-
|
|
51
|
-
##
|
|
52
|
-
# :attr_reader: highlight_spacing
|
|
53
|
-
# When to show the highlight symbol column (:always, :when_selected, :never).
|
|
54
|
-
|
|
55
|
-
##
|
|
56
|
-
# :attr_reader: column_highlight_style
|
|
57
|
-
# Style for the selected column.
|
|
58
|
-
|
|
59
|
-
##
|
|
60
|
-
# :attr_reader: cell_highlight_style
|
|
61
|
-
# Style for the selected cell (intersection of row and column).
|
|
62
|
-
|
|
63
|
-
##
|
|
64
|
-
# :attr_reader: selected_row
|
|
65
|
-
# Index of the selected row (Integer or nil).
|
|
66
|
-
|
|
67
|
-
##
|
|
68
|
-
# :attr_reader: selected_column
|
|
69
|
-
# Index of the selected column (Integer or nil).
|
|
70
|
-
|
|
71
|
-
##
|
|
72
|
-
# :attr_reader: block
|
|
73
|
-
# Optional wrapping block.
|
|
74
|
-
|
|
75
|
-
##
|
|
76
|
-
# :attr_reader: footer
|
|
77
|
-
# Footer row content (Array of Strings).
|
|
78
|
-
|
|
79
|
-
##
|
|
80
|
-
# :attr_reader: flex
|
|
81
|
-
# Flex mode for column distribution.
|
|
82
|
-
|
|
83
|
-
##
|
|
84
|
-
# :attr_reader: style
|
|
85
|
-
# Base style for the entire table.
|
|
86
|
-
|
|
87
|
-
##
|
|
88
|
-
# :attr_reader: column_spacing
|
|
89
|
-
# Spacing between columns (Integer, default 1).
|
|
90
|
-
|
|
91
|
-
# Creates a new Table.
|
|
92
|
-
#
|
|
93
|
-
# [header] Array of strings/paragraphs.
|
|
94
|
-
# [rows] 2D Array of strings/paragraphs.
|
|
95
|
-
# [widths] Array of Constraints.
|
|
96
|
-
# [highlight_style] Style object.
|
|
97
|
-
# [highlight_symbol] String.
|
|
98
|
-
# [highlight_spacing] Symbol (optional, default: <tt>:when_selected</tt>).
|
|
99
|
-
# [column_highlight_style] Style object.
|
|
100
|
-
# [cell_highlight_style] Style object.
|
|
101
|
-
# [selected_row] Integer (nullable).
|
|
102
|
-
# [selected_column] Integer (nullable).
|
|
103
|
-
# [block] Block (optional).
|
|
104
|
-
# [footer] Array of strings/paragraphs (optional).
|
|
105
|
-
# [flex] Symbol (optional, default: <tt>:legacy</tt>).
|
|
106
|
-
# [style] Style object or Hash (optional).
|
|
107
|
-
# [column_spacing] Integer (optional, default: 1).
|
|
108
|
-
def initialize(header: nil, rows: [], widths: [], highlight_style: nil, highlight_symbol: "> ", highlight_spacing: :when_selected, column_highlight_style: nil, cell_highlight_style: nil, selected_row: nil, selected_column: nil, block: nil, footer: nil, flex: :legacy, style: nil, column_spacing: 1)
|
|
109
|
-
super(
|
|
110
|
-
header: header,
|
|
111
|
-
rows: rows,
|
|
112
|
-
widths: widths,
|
|
113
|
-
highlight_style: highlight_style,
|
|
114
|
-
highlight_symbol: highlight_symbol,
|
|
115
|
-
highlight_spacing: highlight_spacing,
|
|
116
|
-
column_highlight_style: column_highlight_style,
|
|
117
|
-
cell_highlight_style: cell_highlight_style,
|
|
118
|
-
selected_row: selected_row.nil? ? nil : Integer(selected_row),
|
|
119
|
-
selected_column: selected_column.nil? ? nil : Integer(selected_column),
|
|
120
|
-
block: block,
|
|
121
|
-
footer: footer,
|
|
122
|
-
flex: flex,
|
|
123
|
-
style: style,
|
|
124
|
-
column_spacing: Integer(column_spacing)
|
|
125
|
-
)
|
|
126
|
-
end
|
|
86
|
+
# [header] Array of strings/paragraphs.
|
|
87
|
+
# [rows] 2D Array of strings/paragraphs.
|
|
88
|
+
# [widths] Array of Constraints.
|
|
89
|
+
# [highlight_style] Style object.
|
|
90
|
+
# [highlight_symbol] String.
|
|
91
|
+
# [highlight_spacing] Symbol (optional, default: <tt>:when_selected</tt>).
|
|
92
|
+
# [column_highlight_style] Style object.
|
|
93
|
+
# [cell_highlight_style] Style object.
|
|
94
|
+
# [selected_row] Integer (nullable).
|
|
95
|
+
# [selected_column] Integer (nullable).
|
|
96
|
+
# [block] Block (optional).
|
|
97
|
+
# [footer] Array of strings/paragraphs (optional).
|
|
98
|
+
# [flex] Symbol (optional, default: <tt>:legacy</tt>).
|
|
99
|
+
# [style] Style object or Hash (optional).
|
|
100
|
+
# [column_spacing] Integer (optional, default: 1).
|
|
101
|
+
def initialize(header: nil, rows: [], widths: [], highlight_style: nil, highlight_symbol: "> ", highlight_spacing: :when_selected, column_highlight_style: nil, cell_highlight_style: nil, selected_row: nil, selected_column: nil, block: nil, footer: nil, flex: :legacy, style: nil, column_spacing: 1)
|
|
102
|
+
super(
|
|
103
|
+
header:,
|
|
104
|
+
rows:,
|
|
105
|
+
widths:,
|
|
106
|
+
highlight_style:,
|
|
107
|
+
highlight_symbol:,
|
|
108
|
+
highlight_spacing:,
|
|
109
|
+
column_highlight_style:,
|
|
110
|
+
cell_highlight_style:,
|
|
111
|
+
selected_row: selected_row.nil? ? nil : Integer(selected_row),
|
|
112
|
+
selected_column: selected_column.nil? ? nil : Integer(selected_column),
|
|
113
|
+
block:,
|
|
114
|
+
footer:,
|
|
115
|
+
flex:,
|
|
116
|
+
style:,
|
|
117
|
+
column_spacing: Integer(column_spacing)
|
|
118
|
+
)
|
|
127
119
|
end
|
|
120
|
+
end
|
|
128
121
|
end
|
|
@@ -4,81 +4,80 @@
|
|
|
4
4
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
5
|
|
|
6
6
|
module RatatuiRuby
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# Tab titles (Array of Strings).
|
|
7
|
+
# Displays a tab bar for navigation.
|
|
8
|
+
#
|
|
9
|
+
# Screen real estate is limited. You cannot show everything at once. Segregating content into views is necessary for complex apps.
|
|
10
|
+
#
|
|
11
|
+
# This widget separates dimensions. It displays a row of titles, indicating which view is active.
|
|
12
|
+
#
|
|
13
|
+
# Use it at the top of your interface to switch between major modes or contexts.
|
|
14
|
+
#
|
|
15
|
+
# {rdoc-image:/doc/images/widget_tabs_demo.png}[link:/examples/widget_tabs_demo/app_rb.html]
|
|
16
|
+
#
|
|
17
|
+
# === Example
|
|
18
|
+
#
|
|
19
|
+
# Run the interactive demo from the terminal:
|
|
20
|
+
#
|
|
21
|
+
# ruby examples/widget_tabs_demo/app.rb
|
|
22
|
+
class Tabs < Data.define(:titles, :selected_index, :block, :divider, :highlight_style, :style, :padding_left, :padding_right)
|
|
23
|
+
##
|
|
24
|
+
# :attr_reader: titles
|
|
25
|
+
# Tab titles (Array of Strings).
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
##
|
|
28
|
+
# :attr_reader: selected_index
|
|
29
|
+
# Index of the active tab.
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
##
|
|
32
|
+
# :attr_reader: block
|
|
33
|
+
# Optional wrapping block.
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
##
|
|
36
|
+
# :attr_reader: divider
|
|
37
|
+
# Separator string between tabs.
|
|
39
38
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
##
|
|
40
|
+
# :attr_reader: highlight_style
|
|
41
|
+
# Style for the selected tab title.
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
##
|
|
44
|
+
# :attr_reader: style
|
|
45
|
+
# Base style for the tabs area.
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
##
|
|
48
|
+
# :attr_reader: padding_left
|
|
49
|
+
# Left padding for the tabs area (Integer, default: 0).
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
##
|
|
52
|
+
# :attr_reader: padding_right
|
|
53
|
+
# Right padding for the tabs area (Integer, default: 0).
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
55
|
+
# Creates a new Tabs widget.
|
|
56
|
+
#
|
|
57
|
+
# [titles] Array of Strings/Lines.
|
|
58
|
+
# [selected_index] Integer (default: 0).
|
|
59
|
+
# [block] Block (optional).
|
|
60
|
+
# [divider] String (optional).
|
|
61
|
+
# [highlight_style] Style (optional).
|
|
62
|
+
# [style] Style (optional).
|
|
63
|
+
# [padding_left] Integer (default: 0).
|
|
64
|
+
# [padding_right] Integer (default: 0).
|
|
65
|
+
def initialize(titles: [], selected_index: 0, block: nil, divider: nil, highlight_style: nil, style: nil, padding_left: 0, padding_right: 0)
|
|
66
|
+
super(
|
|
67
|
+
titles:,
|
|
68
|
+
selected_index: Integer(selected_index),
|
|
69
|
+
block:,
|
|
70
|
+
divider:,
|
|
71
|
+
highlight_style:,
|
|
72
|
+
style:,
|
|
73
|
+
padding_left: Integer(padding_left),
|
|
74
|
+
padding_right: Integer(padding_right)
|
|
75
|
+
)
|
|
76
|
+
end
|
|
78
77
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
end
|
|
78
|
+
# Returns the total width of the tabs.
|
|
79
|
+
def width
|
|
80
|
+
RatatuiRuby._tabs_width(self)
|
|
83
81
|
end
|
|
82
|
+
end
|
|
84
83
|
end
|