ratatui_ruby 0.4.0 → 0.6.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 +98 -176
- data/CHANGELOG.md +80 -6
- data/README.md +19 -7
- data/REUSE.toml +15 -0
- data/doc/application_architecture.md +179 -45
- data/doc/application_testing.md +80 -32
- data/doc/contributors/design/ruby_frontend.md +48 -8
- data/doc/contributors/design/rust_backend.md +1 -0
- data/doc/contributors/developing_examples.md +191 -48
- data/doc/contributors/documentation_style.md +7 -0
- data/doc/contributors/examples_audit/p1_high.md +21 -0
- data/doc/contributors/examples_audit/p2_moderate.md +81 -0
- data/doc/contributors/examples_audit.md +41 -0
- data/doc/contributors/index.md +2 -0
- data/doc/event_handling.md +21 -7
- data/doc/images/app_all_events.png +0 -0
- data/doc/images/app_color_picker.png +0 -0
- data/doc/images/app_login_form.png +0 -0
- data/doc/images/app_stateful_interaction.png +0 -0
- data/doc/images/verify_quickstart_dsl.png +0 -0
- data/doc/images/verify_quickstart_layout.png +0 -0
- data/doc/images/verify_quickstart_lifecycle.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_demo.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_canvas_demo.png +0 -0
- data/doc/images/widget_cell_demo.png +0 -0
- data/doc/images/widget_center_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_overlay_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_rich_text.png +0 -0
- data/doc/images/widget_scroll_text.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_demo.png +0 -0
- data/doc/images/widget_table_flex.png +0 -0
- data/doc/images/widget_tabs_demo.png +0 -0
- data/doc/images/widget_text_width.png +0 -0
- data/doc/interactive_design.md +25 -30
- data/doc/quickstart.md +150 -130
- data/doc/terminal_limitations.md +92 -0
- data/examples/app_all_events/README.md +99 -0
- data/examples/app_all_events/app.rb +96 -0
- data/examples/app_all_events/model/app_model.rb +157 -0
- data/examples/app_all_events/model/event_color_cycle.rb +41 -0
- data/examples/app_all_events/model/event_entry.rb +92 -0
- data/examples/app_all_events/model/msg.rb +37 -0
- data/examples/app_all_events/model/timestamp.rb +54 -0
- data/examples/app_all_events/update.rb +73 -0
- data/examples/app_all_events/view/app_view.rb +78 -0
- data/examples/app_all_events/view/controls_view.rb +52 -0
- data/examples/app_all_events/view/counts_view.rb +59 -0
- data/examples/app_all_events/view/live_view.rb +70 -0
- data/examples/app_all_events/view/log_view.rb +55 -0
- data/examples/app_all_events/view.rb +7 -0
- data/examples/app_color_picker/README.md +134 -0
- data/examples/app_color_picker/app.rb +74 -0
- data/examples/app_color_picker/clipboard.rb +84 -0
- data/examples/app_color_picker/color.rb +191 -0
- data/examples/app_color_picker/controls.rb +90 -0
- data/examples/app_color_picker/copy_dialog.rb +166 -0
- data/examples/app_color_picker/export_pane.rb +126 -0
- data/examples/app_color_picker/harmony.rb +56 -0
- data/examples/app_color_picker/input.rb +174 -0
- data/examples/app_color_picker/main_container.rb +178 -0
- data/examples/app_color_picker/palette.rb +109 -0
- data/examples/app_login_form/README.md +47 -0
- data/examples/{login_form → app_login_form}/app.rb +38 -42
- data/examples/app_stateful_interaction/README.md +31 -0
- data/examples/app_stateful_interaction/app.rb +272 -0
- data/examples/timeout_demo.rb +43 -0
- data/examples/verify_quickstart_dsl/README.md +48 -0
- data/examples/{quickstart_dsl → verify_quickstart_dsl}/app.rb +17 -6
- data/examples/verify_quickstart_layout/README.md +71 -0
- data/examples/verify_quickstart_layout/app.rb +71 -0
- data/examples/verify_quickstart_lifecycle/README.md +56 -0
- data/examples/verify_quickstart_lifecycle/app.rb +54 -0
- data/examples/verify_readme_usage/README.md +43 -0
- data/examples/verify_readme_usage/app.rb +40 -0
- data/examples/widget_barchart_demo/README.md +49 -0
- data/examples/widget_barchart_demo/app.rb +238 -0
- data/examples/widget_block_demo/README.md +34 -0
- data/examples/widget_block_demo/app.rb +256 -0
- data/examples/widget_box_demo/README.md +45 -0
- data/examples/{box_demo → widget_box_demo}/app.rb +99 -65
- data/examples/widget_calendar_demo/README.md +39 -0
- data/examples/widget_calendar_demo/app.rb +109 -0
- data/examples/widget_canvas_demo/README.md +27 -0
- data/examples/widget_canvas_demo/app.rb +123 -0
- data/examples/widget_cell_demo/README.md +36 -0
- data/examples/widget_cell_demo/app.rb +111 -0
- data/examples/widget_center_demo/README.md +29 -0
- data/examples/widget_center_demo/app.rb +116 -0
- data/examples/widget_chart_demo/README.md +41 -0
- data/examples/widget_chart_demo/app.rb +218 -0
- data/examples/widget_gauge_demo/README.md +41 -0
- data/examples/widget_gauge_demo/app.rb +212 -0
- data/examples/widget_layout_split/README.md +44 -0
- data/examples/widget_layout_split/app.rb +246 -0
- data/examples/widget_line_gauge_demo/README.md +41 -0
- data/examples/widget_line_gauge_demo/app.rb +217 -0
- data/examples/widget_list_demo/README.md +49 -0
- data/examples/widget_list_demo/app.rb +366 -0
- data/examples/widget_map_demo/README.md +39 -0
- data/examples/{map_demo → widget_map_demo}/app.rb +24 -21
- data/examples/widget_overlay_demo/app.rb +248 -0
- data/examples/widget_popup_demo/README.md +36 -0
- data/examples/widget_popup_demo/app.rb +104 -0
- data/examples/widget_ratatui_logo_demo/README.md +34 -0
- data/examples/widget_ratatui_logo_demo/app.rb +103 -0
- data/examples/widget_ratatui_mascot_demo/README.md +34 -0
- data/examples/widget_ratatui_mascot_demo/app.rb +93 -0
- data/examples/widget_rect/README.md +38 -0
- data/examples/widget_rect/app.rb +205 -0
- data/examples/widget_render/README.md +37 -0
- data/examples/widget_render/app.rb +184 -0
- data/examples/widget_rich_text/README.md +35 -0
- data/examples/widget_rich_text/app.rb +166 -0
- data/examples/widget_scroll_text/README.md +37 -0
- data/examples/widget_scroll_text/app.rb +107 -0
- data/examples/widget_scrollbar_demo/README.md +37 -0
- data/examples/widget_scrollbar_demo/app.rb +153 -0
- data/examples/widget_sparkline_demo/README.md +42 -0
- data/examples/widget_sparkline_demo/app.rb +275 -0
- data/examples/widget_style_colors/README.md +34 -0
- data/examples/widget_style_colors/app.rb +19 -21
- data/examples/widget_table_demo/README.md +48 -0
- data/examples/widget_table_demo/app.rb +239 -0
- data/examples/widget_tabs_demo/README.md +41 -0
- data/examples/widget_tabs_demo/app.rb +181 -0
- data/examples/widget_text_width/README.md +35 -0
- data/examples/widget_text_width/app.rb +106 -0
- data/ext/ratatui_ruby/Cargo.lock +11 -4
- data/ext/ratatui_ruby/Cargo.toml +2 -1
- data/ext/ratatui_ruby/src/events.rs +359 -62
- data/ext/ratatui_ruby/src/frame.rs +227 -0
- data/ext/ratatui_ruby/src/lib.rs +110 -27
- data/ext/ratatui_ruby/src/rendering.rs +8 -4
- data/ext/ratatui_ruby/src/string_width.rs +101 -0
- data/ext/ratatui_ruby/src/style.rs +138 -57
- data/ext/ratatui_ruby/src/terminal.rs +42 -22
- data/ext/ratatui_ruby/src/text.rs +14 -7
- data/ext/ratatui_ruby/src/widgets/barchart.rs +74 -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/gauge.rs +9 -2
- data/ext/ratatui_ruby/src/widgets/layout.rs +9 -4
- data/ext/ratatui_ruby/src/widgets/line_gauge.rs +9 -2
- data/ext/ratatui_ruby/src/widgets/list.rs +211 -12
- data/ext/ratatui_ruby/src/widgets/list_state.rs +137 -0
- data/ext/ratatui_ruby/src/widgets/mod.rs +3 -0
- 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 +97 -3
- data/ext/ratatui_ruby/src/widgets/scrollbar_state.rs +169 -0
- data/ext/ratatui_ruby/src/widgets/sparkline.rs +14 -11
- data/ext/ratatui_ruby/src/widgets/table.rs +121 -5
- data/ext/ratatui_ruby/src/widgets/table_state.rs +121 -0
- data/ext/ratatui_ruby/src/widgets/tabs.rs +11 -11
- data/lib/ratatui_ruby/cell.rb +7 -7
- data/lib/ratatui_ruby/event/key/character.rb +35 -0
- data/lib/ratatui_ruby/event/key/media.rb +44 -0
- data/lib/ratatui_ruby/event/key/modifier.rb +95 -0
- data/lib/ratatui_ruby/event/key/navigation.rb +55 -0
- data/lib/ratatui_ruby/event/key/system.rb +45 -0
- data/lib/ratatui_ruby/event/key.rb +112 -52
- data/lib/ratatui_ruby/event/mouse.rb +3 -3
- data/lib/ratatui_ruby/event/none.rb +43 -0
- data/lib/ratatui_ruby/event/paste.rb +1 -1
- data/lib/ratatui_ruby/event.rb +56 -4
- data/lib/ratatui_ruby/frame.rb +183 -0
- data/lib/ratatui_ruby/list_state.rb +88 -0
- data/lib/ratatui_ruby/schema/bar_chart/bar.rb +13 -13
- 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 +30 -25
- data/lib/ratatui_ruby/schema/gauge.rb +54 -52
- 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 +103 -80
- data/lib/ratatui_ruby/schema/list_item.rb +41 -0
- 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 +99 -56
- 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 +66 -46
- data/lib/ratatui_ruby/schema/table.rb +126 -115
- data/lib/ratatui_ruby/schema/tabs.rb +66 -67
- data/lib/ratatui_ruby/schema/text.rb +69 -1
- data/lib/ratatui_ruby/scrollbar_state.rb +112 -0
- data/lib/ratatui_ruby/session/autodoc.rb +482 -0
- data/lib/ratatui_ruby/session.rb +55 -23
- data/lib/ratatui_ruby/table_state.rb +90 -0
- data/lib/ratatui_ruby/test_helper/event_injection.rb +169 -0
- data/lib/ratatui_ruby/test_helper/snapshot.rb +390 -0
- data/lib/ratatui_ruby/test_helper/style_assertions.rb +351 -0
- data/lib/ratatui_ruby/test_helper/terminal.rb +127 -0
- data/lib/ratatui_ruby/test_helper/test_doubles.rb +68 -0
- data/lib/ratatui_ruby/test_helper.rb +66 -193
- data/lib/ratatui_ruby/version.rb +1 -1
- data/lib/ratatui_ruby.rb +100 -51
- 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_stateful_interaction/app.rbs +33 -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_demo/app.rbs +32 -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_map_demo/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_demo/app.rbs +11 -0
- data/sig/examples/widget_text_width/app.rbs +10 -0
- data/sig/ratatui_ruby/event.rbs +11 -1
- data/sig/ratatui_ruby/frame.rbs +11 -0
- data/sig/ratatui_ruby/list_state.rbs +13 -0
- data/sig/ratatui_ruby/ratatui_ruby.rbs +5 -4
- data/sig/ratatui_ruby/schema/bar_chart/bar.rbs +3 -3
- data/sig/ratatui_ruby/schema/draw.rbs +4 -0
- data/sig/ratatui_ruby/schema/gauge.rbs +2 -2
- data/sig/ratatui_ruby/schema/layout.rbs +1 -1
- data/sig/ratatui_ruby/schema/line_gauge.rbs +2 -2
- data/sig/ratatui_ruby/schema/list.rbs +4 -2
- data/sig/ratatui_ruby/schema/list_item.rbs +10 -0
- data/sig/ratatui_ruby/schema/rect.rbs +3 -0
- data/sig/ratatui_ruby/schema/style.rbs +3 -3
- data/sig/ratatui_ruby/schema/table.rbs +3 -1
- data/sig/ratatui_ruby/schema/text.rbs +8 -6
- data/sig/ratatui_ruby/scrollbar_state.rbs +18 -0
- data/sig/ratatui_ruby/session.rbs +107 -0
- data/sig/ratatui_ruby/table_state.rbs +15 -0
- data/sig/ratatui_ruby/test_helper/event_injection.rbs +16 -0
- data/sig/ratatui_ruby/test_helper/snapshot.rbs +12 -0
- data/sig/ratatui_ruby/test_helper/style_assertions.rbs +64 -0
- data/sig/ratatui_ruby/test_helper/terminal.rbs +14 -0
- data/sig/ratatui_ruby/test_helper/test_doubles.rbs +22 -0
- data/sig/ratatui_ruby/test_helper.rbs +5 -4
- data/tasks/autodoc/examples.rb +79 -0
- data/tasks/autodoc/inventory.rb +63 -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 +53 -0
- data/tasks/bump/changelog.rb +3 -3
- data/tasks/bump/history.rb +2 -2
- data/tasks/bump/links.rb +67 -0
- 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 +70 -30
- data/tasks/terminal_preview/app_screenshot.rb +14 -6
- 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 +10 -11
- 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 +232 -127
- 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/list_styles.png +0 -0
- data/doc/images/login_form.png +0 -0
- data/doc/images/quickstart_dsl.png +0 -0
- data/doc/images/quickstart_lifecycle.png +0 -0
- data/doc/images/readme_usage.png +0 -0
- data/doc/images/rich_text.png +0 -0
- data/doc/images/scroll_text.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/doc/images/table_select.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.rb +0 -63
- data/examples/block_padding/app.rbs +0 -7
- data/examples/block_padding/test_app.rb +0 -31
- data/examples/block_titles/app.rb +0 -61
- 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.rb +0 -39
- 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.rb +0 -198
- 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/tasks/bump/comparison_links.rb +0 -41
- /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/{mouse_events.png → app_mouse_events.png} +0 -0
- /data/doc/images/{map_demo.png → widget_map_demo.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/ratatui_logo_demo.png → exe/.gitkeep} +0 -0
|
@@ -4,128 +4,129 @@
|
|
|
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
|
-
|
|
7
|
+
# Displays high-density data in a compact row.
|
|
8
|
+
#
|
|
9
|
+
# Users need context. A single value ("90% CPU") tells you current status, but not the trend.
|
|
10
|
+
# Full charts take up too much room.
|
|
11
|
+
#
|
|
12
|
+
# This widget solves the density problem. It condenses history into a single line of variable-height blocks.
|
|
13
|
+
#
|
|
14
|
+
# Use it in dashboards, headers, or list items to providing trending data at a glance.
|
|
15
|
+
#
|
|
16
|
+
# {rdoc-image:/doc/images/widget_sparkline_demo.png}[link:/examples/widget_sparkline_demo/app_rb.html]
|
|
17
|
+
#
|
|
18
|
+
# === Example
|
|
19
|
+
#
|
|
20
|
+
# Run the interactive demo from the terminal:
|
|
21
|
+
#
|
|
22
|
+
# ruby examples/widget_sparkline_demo/app.rb
|
|
23
|
+
class Sparkline < Data.define(:data, :max, :style, :block, :direction, :absent_value_symbol, :absent_value_style, :bar_set)
|
|
24
|
+
##
|
|
25
|
+
# :attr_reader: data
|
|
26
|
+
# Array of integer values to plot.
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
##
|
|
29
|
+
# :attr_reader: max
|
|
30
|
+
# Maximum value for scaling (optional).
|
|
31
|
+
#
|
|
32
|
+
# If nil, derived from data max.
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
##
|
|
35
|
+
# :attr_reader: style
|
|
36
|
+
# Style for the bars.
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
##
|
|
39
|
+
# :attr_reader: block
|
|
40
|
+
# Optional wrapping block.
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
##
|
|
43
|
+
# :attr_reader: direction
|
|
44
|
+
# Direction to render data.
|
|
45
|
+
#
|
|
46
|
+
# Accepts +:left_to_right+ (default) or +:right_to_left+.
|
|
47
|
+
# Use +:right_to_left+ when new data should appear on the left.
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
##
|
|
50
|
+
# :attr_reader: absent_value_symbol
|
|
51
|
+
# Character to render for absent (nil) values (optional).
|
|
52
|
+
#
|
|
53
|
+
# If nil, absent values are rendered with a space.
|
|
53
54
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
##
|
|
56
|
+
# :attr_reader: absent_value_style
|
|
57
|
+
# Style for absent (nil) values (optional).
|
|
57
58
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
59
|
+
##
|
|
60
|
+
# :attr_reader: bar_set
|
|
61
|
+
# Custom characters for the bars (optional).
|
|
62
|
+
#
|
|
63
|
+
# A Hash with keys defining the characters for the bars.
|
|
64
|
+
# Keys: <tt>:empty</tt>, <tt>:one_eighth</tt>, <tt>:one_quarter</tt>, <tt>:three_eighths</tt>, <tt>:half</tt>, <tt>:five_eighths</tt>, <tt>:three_quarters</tt>, <tt>:seven_eighths</tt>, <tt>:full</tt>.
|
|
65
|
+
#
|
|
66
|
+
# You can also use integers (0-8) as keys, where 0 is empty, 4 is half, and 8 is full.
|
|
67
|
+
#
|
|
68
|
+
# Alternatively, you can pass an Array of 9 strings, where index 0 is empty and index 8 is full.
|
|
69
|
+
#
|
|
70
|
+
# === Examples
|
|
71
|
+
#
|
|
72
|
+
# bar_set: {
|
|
73
|
+
# empty: " ",
|
|
74
|
+
# one_eighth: " ",
|
|
75
|
+
# one_quarter: "▂",
|
|
76
|
+
# three_eighths: "▃",
|
|
77
|
+
# half: "▄",
|
|
78
|
+
# five_eighths: "▅",
|
|
79
|
+
# three_quarters: "▆",
|
|
80
|
+
# seven_eighths: "▇",
|
|
81
|
+
# full: "█"
|
|
82
|
+
# }
|
|
83
|
+
#
|
|
84
|
+
# # Numeric keys (0-8)
|
|
85
|
+
# bar_set: {
|
|
86
|
+
# 0 => " ", 1 => " ", 2 => "▂", 3 => "▃", 4 => "▄", 5 => "▅", 6 => "▆", 7 => "▇", 8 => "█"
|
|
87
|
+
# }
|
|
88
|
+
#
|
|
89
|
+
# # Array (9 items)
|
|
90
|
+
# bar_set: [" ", " ", "▂", "▃", "▄", "▅", "▆", "▇", "█"]
|
|
90
91
|
|
|
91
|
-
|
|
92
|
+
BAR_KEYS = %i[empty one_eighth one_quarter three_eighths half five_eighths three_quarters seven_eighths full].freeze
|
|
92
93
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
end
|
|
94
|
+
# Creates a new Sparkline widget.
|
|
95
|
+
#
|
|
96
|
+
# [data] Array of Integers or nil. nil marks an absent value (distinct from 0).
|
|
97
|
+
# [max] Max value (optional).
|
|
98
|
+
# [style] Style (optional).
|
|
99
|
+
# [block] Block (optional).
|
|
100
|
+
# [direction] +:left_to_right+ or +:right_to_left+ (default: +:left_to_right+).
|
|
101
|
+
# [absent_value_symbol] Character for absent (nil) values (optional).
|
|
102
|
+
# [absent_value_style] Style for absent (nil) values (optional).
|
|
103
|
+
# [bar_set] Hash or Array of custom characters (optional).
|
|
104
|
+
def initialize(data:, max: nil, style: nil, block: nil, direction: :left_to_right, absent_value_symbol: nil, absent_value_style: nil, bar_set: nil)
|
|
105
|
+
if bar_set
|
|
106
|
+
if bar_set.is_a?(Array) && bar_set.size == 9
|
|
107
|
+
# Convert Array to Hash using BAR_KEYS order
|
|
108
|
+
bar_set = BAR_KEYS.zip(bar_set).to_h
|
|
109
|
+
else
|
|
110
|
+
bar_set = bar_set.dup
|
|
111
|
+
# Normalize numeric keys (0-8) to symbolic keys
|
|
112
|
+
BAR_KEYS.each_with_index do |key, i|
|
|
113
|
+
if (val = bar_set.delete(i) || bar_set.delete(i.to_s))
|
|
114
|
+
bar_set[key] = val
|
|
115
115
|
end
|
|
116
116
|
end
|
|
117
117
|
end
|
|
118
|
-
coerced_data = data.map { |v| v.nil? ? nil : Integer(v) }
|
|
119
|
-
super(
|
|
120
|
-
data: coerced_data,
|
|
121
|
-
max: max.nil? ? nil : Integer(max),
|
|
122
|
-
style: style,
|
|
123
|
-
block: block,
|
|
124
|
-
direction: direction,
|
|
125
|
-
absent_value_symbol: absent_value_symbol,
|
|
126
|
-
absent_value_style: absent_value_style,
|
|
127
|
-
bar_set: bar_set
|
|
128
|
-
)
|
|
129
118
|
end
|
|
119
|
+
coerced_data = data.map { |v| v.nil? ? nil : Integer(v) }
|
|
120
|
+
super(
|
|
121
|
+
data: coerced_data,
|
|
122
|
+
max: max.nil? ? nil : Integer(max),
|
|
123
|
+
style:,
|
|
124
|
+
block:,
|
|
125
|
+
direction:,
|
|
126
|
+
absent_value_symbol:,
|
|
127
|
+
absent_value_style:,
|
|
128
|
+
bar_set:
|
|
129
|
+
)
|
|
130
130
|
end
|
|
131
|
+
end
|
|
131
132
|
end
|
|
@@ -4,56 +4,76 @@
|
|
|
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
|
+
#
|
|
24
|
+
# === Supported Colors
|
|
25
|
+
#
|
|
26
|
+
# ==== Integer
|
|
27
|
+
# Represents an indexed color from the Xterm 256-color palette (0-255).
|
|
28
|
+
# * <tt>0</tt>–<tt>15</tt>: Standard and bright ANSI colors.
|
|
29
|
+
# * <tt>16</tt>–<tt>231</tt>: {6x6x6 Color Cube}[https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit].
|
|
30
|
+
# * <tt>232</tt>–<tt>255</tt>: Grayscale ramp.
|
|
31
|
+
#
|
|
32
|
+
# ==== Symbol
|
|
33
|
+
# Represents a named color from the standard ANSI palette. Supported values:
|
|
34
|
+
# * <tt>:black</tt>, <tt>:red</tt>, <tt>:green</tt>, <tt>:yellow</tt>,
|
|
35
|
+
# <tt>:blue</tt>, <tt>:magenta</tt>, <tt>:cyan</tt>, <tt>:gray</tt>
|
|
36
|
+
# * <tt>:dark_gray</tt>, <tt>:light_red</tt>, <tt>:light_green</tt>,
|
|
37
|
+
# <tt>:light_yellow</tt>, <tt>:light_blue</tt>, <tt>:light_magenta</tt>,
|
|
38
|
+
# <tt>:light_cyan</tt>, <tt>:white</tt>
|
|
39
|
+
#
|
|
40
|
+
# ==== String
|
|
41
|
+
# Represents a specific RGB color using a Hex code (<tt>"#RRGGBB"</tt>).
|
|
42
|
+
# Requires a terminal emulator with "True Color" (24-bit color) support.
|
|
43
|
+
class Style < Data.define(:fg, :bg, :modifiers)
|
|
44
|
+
##
|
|
45
|
+
# :attr_reader: fg
|
|
46
|
+
# Foreground color.
|
|
8
47
|
#
|
|
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>).
|
|
48
|
+
# Symbol (<tt>:red</tt>), Hex String (<tt>"#ffffff"</tt>), or Integer (0-255).
|
|
29
49
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
50
|
+
##
|
|
51
|
+
# :attr_reader: bg
|
|
52
|
+
# Background color.
|
|
53
|
+
#
|
|
54
|
+
# Symbol (<tt>:black</tt>), Hex String (<tt>"#000000"</tt>), or Integer (0-255).
|
|
35
55
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
56
|
+
##
|
|
57
|
+
# :attr_reader: modifiers
|
|
58
|
+
# Text effects.
|
|
59
|
+
#
|
|
60
|
+
# Array of symbols: <tt>:bold</tt>, <tt>:dim</tt>, <tt>:italic</tt>, <tt>:underlined</tt>,
|
|
61
|
+
# <tt>:slow_blink</tt>, <tt>:rapid_blink</tt>, <tt>:reversed</tt>, <tt>:hidden</tt>, <tt>:crossed_out</tt>.
|
|
42
62
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
63
|
+
# Creates a new Style.
|
|
64
|
+
#
|
|
65
|
+
# [fg] Color (Symbol/String/Integer).
|
|
66
|
+
# [bg] Color (Symbol/String/Integer).
|
|
67
|
+
# [modifiers] Array of Symbols.
|
|
68
|
+
def initialize(fg: nil, bg: nil, modifiers: [])
|
|
69
|
+
super
|
|
70
|
+
end
|
|
51
71
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
end
|
|
72
|
+
# Returns an empty style.
|
|
73
|
+
#
|
|
74
|
+
# Use this as a baseline to prevent style inheritance issues or when no styling is required.
|
|
75
|
+
def self.default
|
|
76
|
+
new
|
|
58
77
|
end
|
|
78
|
+
end
|
|
59
79
|
end
|
|
@@ -4,125 +4,136 @@
|
|
|
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, :offset, :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 (<tt>:always</tt>, <tt>:when_selected</tt>, <tt>:never</tt>).
|
|
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: offset
|
|
66
|
+
# Scroll offset (Integer or nil).
|
|
8
67
|
#
|
|
9
|
-
#
|
|
10
|
-
# Aligning columns manually in a monospaced environment is painful and error-prone.
|
|
68
|
+
# Controls the viewport's starting row position in the table.
|
|
11
69
|
#
|
|
12
|
-
#
|
|
70
|
+
# When +nil+ (default), Ratatui auto-scrolls to keep the selection visible ("natural scrolling").
|
|
13
71
|
#
|
|
14
|
-
#
|
|
72
|
+
# When set, forces the viewport to start at this row index. Use this for:
|
|
73
|
+
# - **Passive scrolling**: Scroll through a log table without selecting rows.
|
|
74
|
+
# - **Click-to-select math**: Calculate which row index corresponds to a click coordinate.
|
|
15
75
|
#
|
|
16
|
-
#
|
|
76
|
+
# *Important*: When both +offset+ and +selected_row+ are set, Ratatui may still adjust
|
|
77
|
+
# the viewport during rendering to ensure the selection stays visible. Set +selected_row+
|
|
78
|
+
# to +nil+ for fully manual scroll control.
|
|
79
|
+
|
|
80
|
+
##
|
|
81
|
+
# :attr_reader: block
|
|
82
|
+
# Optional wrapping block.
|
|
83
|
+
|
|
84
|
+
##
|
|
85
|
+
# :attr_reader: footer
|
|
86
|
+
# Footer row content (Array of Strings).
|
|
87
|
+
|
|
88
|
+
##
|
|
89
|
+
# :attr_reader: flex
|
|
90
|
+
# Flex mode for column distribution.
|
|
91
|
+
|
|
92
|
+
##
|
|
93
|
+
# :attr_reader: style
|
|
94
|
+
# Base style for the entire table.
|
|
95
|
+
|
|
96
|
+
##
|
|
97
|
+
# :attr_reader: column_spacing
|
|
98
|
+
# Spacing between columns (Integer, default 1).
|
|
99
|
+
|
|
100
|
+
# Creates a new Table.
|
|
17
101
|
#
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
102
|
+
# [header] Array of strings/paragraphs.
|
|
103
|
+
# [rows] 2D Array of strings/paragraphs.
|
|
104
|
+
# [widths] Array of Constraints.
|
|
105
|
+
# [highlight_style] Style object.
|
|
106
|
+
# [highlight_symbol] String.
|
|
107
|
+
# [highlight_spacing] Symbol (optional, default: <tt>:when_selected</tt>).
|
|
108
|
+
# [column_highlight_style] Style object.
|
|
109
|
+
# [cell_highlight_style] Style object.
|
|
110
|
+
# [selected_row] Integer (nullable).
|
|
111
|
+
# [selected_column] Integer (nullable).
|
|
112
|
+
# [offset] Numeric (nullable, coerced to Integer). Forces scroll position when set.
|
|
113
|
+
# [block] Block (optional).
|
|
114
|
+
# [footer] Array of strings/paragraphs (optional).
|
|
115
|
+
# [flex] Symbol (optional, default: <tt>:legacy</tt>).
|
|
116
|
+
# [style] Style object or Hash (optional).
|
|
117
|
+
# [column_spacing] Integer (optional, default: 1).
|
|
118
|
+
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, offset: nil, block: nil, footer: nil, flex: :legacy, style: nil, column_spacing: 1)
|
|
119
|
+
super(
|
|
120
|
+
header:,
|
|
121
|
+
rows:,
|
|
122
|
+
widths:,
|
|
123
|
+
highlight_style:,
|
|
124
|
+
highlight_symbol:,
|
|
125
|
+
highlight_spacing:,
|
|
126
|
+
column_highlight_style:,
|
|
127
|
+
cell_highlight_style:,
|
|
128
|
+
selected_row: selected_row.nil? ? nil : Integer(selected_row),
|
|
129
|
+
selected_column: selected_column.nil? ? nil : Integer(selected_column),
|
|
130
|
+
offset: offset.nil? ? nil : Integer(offset),
|
|
131
|
+
block:,
|
|
132
|
+
footer:,
|
|
133
|
+
flex:,
|
|
134
|
+
style:,
|
|
135
|
+
column_spacing: Integer(column_spacing)
|
|
136
|
+
)
|
|
127
137
|
end
|
|
138
|
+
end
|
|
128
139
|
end
|