ratatui_ruby 0.5.0 → 0.7.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.
Files changed (311) hide show
  1. checksums.yaml +4 -4
  2. data/.builds/ruby-3.2.yml +1 -1
  3. data/.builds/ruby-3.3.yml +1 -1
  4. data/.builds/ruby-3.4.yml +1 -1
  5. data/.builds/ruby-4.0.0.yml +1 -1
  6. data/AGENTS.md +10 -4
  7. data/CHANGELOG.md +79 -7
  8. data/README.md +37 -5
  9. data/REUSE.toml +2 -7
  10. data/doc/application_architecture.md +96 -22
  11. data/doc/application_testing.md +76 -30
  12. data/doc/contributors/architectural_overhaul/chat_conversations.md +4952 -0
  13. data/doc/contributors/architectural_overhaul/implementation_plan.md +60 -0
  14. data/doc/contributors/architectural_overhaul/task.md +37 -0
  15. data/doc/contributors/design/ruby_frontend.md +288 -56
  16. data/doc/contributors/design/rust_backend.md +349 -54
  17. data/doc/contributors/developing_examples.md +134 -49
  18. data/doc/contributors/index.md +7 -5
  19. data/doc/contributors/v1.0.0_blockers.md +1729 -0
  20. data/doc/event_handling.md +11 -3
  21. data/doc/images/app_all_events.png +0 -0
  22. data/doc/images/app_color_picker.png +0 -0
  23. data/doc/images/app_login_form.png +0 -0
  24. data/doc/images/app_stateful_interaction.png +0 -0
  25. data/doc/images/verify_quickstart_dsl.png +0 -0
  26. data/doc/images/verify_quickstart_layout.png +0 -0
  27. data/doc/images/verify_quickstart_lifecycle.png +0 -0
  28. data/doc/images/verify_readme_usage.png +0 -0
  29. data/doc/images/widget_barchart_demo.png +0 -0
  30. data/doc/images/widget_block_demo.png +0 -0
  31. data/doc/images/widget_canvas_demo.png +0 -0
  32. data/doc/images/widget_cell_demo.png +0 -0
  33. data/doc/images/widget_center_demo.png +0 -0
  34. data/doc/images/widget_chart_demo.png +0 -0
  35. data/doc/images/widget_list_demo.png +0 -0
  36. data/doc/images/widget_overlay_demo.png +0 -0
  37. data/doc/images/widget_render.png +0 -0
  38. data/doc/images/widget_rich_text.png +0 -0
  39. data/doc/images/widget_scroll_text.png +0 -0
  40. data/doc/images/widget_sparkline_demo.png +0 -0
  41. data/doc/images/widget_table_demo.png +0 -0
  42. data/doc/images/widget_tabs_demo.png +0 -0
  43. data/doc/images/widget_text_width.png +0 -0
  44. data/doc/index.md +11 -6
  45. data/doc/interactive_design.md +2 -2
  46. data/doc/quickstart.md +127 -165
  47. data/doc/terminal_limitations.md +92 -0
  48. data/doc/v0.7.0_migration.md +236 -0
  49. data/doc/why.md +93 -0
  50. data/examples/app_all_events/README.md +47 -27
  51. data/examples/app_all_events/app.rb +38 -35
  52. data/examples/app_all_events/model/app_model.rb +157 -0
  53. data/examples/app_all_events/model/event_entry.rb +17 -0
  54. data/examples/app_all_events/model/msg.rb +37 -0
  55. data/examples/app_all_events/update.rb +73 -0
  56. data/examples/app_all_events/view/app_view.rb +9 -9
  57. data/examples/app_all_events/view/controls_view.rb +9 -7
  58. data/examples/app_all_events/view/counts_view.rb +13 -9
  59. data/examples/app_all_events/view/live_view.rb +9 -8
  60. data/examples/app_all_events/view/log_view.rb +11 -16
  61. data/examples/app_color_picker/README.md +84 -42
  62. data/examples/app_color_picker/app.rb +24 -62
  63. data/examples/app_color_picker/controls.rb +90 -0
  64. data/examples/app_color_picker/copy_dialog.rb +45 -49
  65. data/examples/app_color_picker/export_pane.rb +126 -0
  66. data/examples/app_color_picker/input.rb +99 -67
  67. data/examples/app_color_picker/main_container.rb +178 -0
  68. data/examples/app_color_picker/palette.rb +55 -26
  69. data/examples/app_login_form/README.md +49 -0
  70. data/examples/app_login_form/app.rb +2 -3
  71. data/examples/app_stateful_interaction/README.md +33 -0
  72. data/examples/app_stateful_interaction/app.rb +272 -0
  73. data/examples/timeout_demo.rb +43 -0
  74. data/examples/verify_quickstart_dsl/README.md +49 -0
  75. data/examples/verify_quickstart_dsl/app.rb +2 -0
  76. data/examples/verify_quickstart_layout/README.md +71 -0
  77. data/examples/verify_quickstart_layout/app.rb +2 -0
  78. data/examples/verify_quickstart_lifecycle/README.md +56 -0
  79. data/examples/verify_quickstart_lifecycle/app.rb +10 -4
  80. data/examples/verify_readme_usage/README.md +43 -0
  81. data/examples/verify_readme_usage/app.rb +8 -2
  82. data/examples/widget_barchart_demo/README.md +50 -0
  83. data/examples/widget_barchart_demo/app.rb +5 -5
  84. data/examples/widget_block_demo/README.md +36 -0
  85. data/examples/widget_block_demo/app.rb +256 -0
  86. data/examples/widget_box_demo/README.md +45 -0
  87. data/examples/widget_calendar_demo/README.md +39 -0
  88. data/examples/widget_calendar_demo/app.rb +5 -1
  89. data/examples/widget_canvas_demo/README.md +27 -0
  90. data/examples/widget_canvas_demo/app.rb +123 -0
  91. data/examples/widget_cell_demo/README.md +36 -0
  92. data/examples/widget_cell_demo/app.rb +31 -24
  93. data/examples/widget_center_demo/README.md +29 -0
  94. data/examples/widget_center_demo/app.rb +116 -0
  95. data/examples/widget_chart_demo/README.md +41 -0
  96. data/examples/widget_chart_demo/app.rb +7 -2
  97. data/examples/widget_gauge_demo/README.md +41 -0
  98. data/examples/widget_layout_split/README.md +44 -0
  99. data/examples/widget_line_gauge_demo/README.md +41 -0
  100. data/examples/widget_list_demo/README.md +49 -0
  101. data/examples/widget_list_demo/app.rb +91 -107
  102. data/examples/widget_map_demo/README.md +39 -0
  103. data/examples/{app_map_demo → widget_map_demo}/app.rb +4 -4
  104. data/examples/widget_overlay_demo/README.md +36 -0
  105. data/examples/widget_overlay_demo/app.rb +248 -0
  106. data/examples/widget_popup_demo/README.md +36 -0
  107. data/examples/widget_ratatui_logo_demo/README.md +34 -0
  108. data/examples/widget_ratatui_logo_demo/app.rb +1 -1
  109. data/examples/widget_ratatui_mascot_demo/README.md +34 -0
  110. data/examples/widget_rect/README.md +38 -0
  111. data/examples/widget_render/README.md +37 -0
  112. data/examples/widget_render/app.rb +3 -3
  113. data/examples/widget_rich_text/README.md +35 -0
  114. data/examples/widget_rich_text/app.rb +62 -33
  115. data/examples/widget_scroll_text/README.md +37 -0
  116. data/examples/widget_scroll_text/app.rb +0 -1
  117. data/examples/widget_scrollbar_demo/README.md +37 -0
  118. data/examples/widget_sparkline_demo/README.md +42 -0
  119. data/examples/widget_sparkline_demo/app.rb +4 -3
  120. data/examples/widget_style_colors/README.md +34 -0
  121. data/examples/widget_table_demo/README.md +48 -0
  122. data/examples/{app_table_select → widget_table_demo}/app.rb +65 -12
  123. data/examples/widget_tabs_demo/README.md +41 -0
  124. data/examples/widget_tabs_demo/app.rb +15 -1
  125. data/examples/widget_text_width/README.md +35 -0
  126. data/examples/widget_text_width/app.rb +113 -0
  127. data/exe/.gitkeep +0 -0
  128. data/ext/ratatui_ruby/Cargo.lock +11 -4
  129. data/ext/ratatui_ruby/Cargo.toml +2 -1
  130. data/ext/ratatui_ruby/src/events.rs +238 -26
  131. data/ext/ratatui_ruby/src/frame.rs +116 -3
  132. data/ext/ratatui_ruby/src/lib.rs +37 -6
  133. data/ext/ratatui_ruby/src/rendering.rs +22 -21
  134. data/ext/ratatui_ruby/src/string_width.rs +101 -0
  135. data/ext/ratatui_ruby/src/terminal.rs +39 -15
  136. data/ext/ratatui_ruby/src/text.rs +13 -4
  137. data/ext/ratatui_ruby/src/widgets/barchart.rs +24 -6
  138. data/ext/ratatui_ruby/src/widgets/canvas.rs +5 -5
  139. data/ext/ratatui_ruby/src/widgets/gauge.rs +9 -2
  140. data/ext/ratatui_ruby/src/widgets/line_gauge.rs +9 -2
  141. data/ext/ratatui_ruby/src/widgets/list.rs +179 -3
  142. data/ext/ratatui_ruby/src/widgets/list_state.rs +137 -0
  143. data/ext/ratatui_ruby/src/widgets/mod.rs +3 -0
  144. data/ext/ratatui_ruby/src/widgets/scrollbar.rs +93 -1
  145. data/ext/ratatui_ruby/src/widgets/scrollbar_state.rs +169 -0
  146. data/ext/ratatui_ruby/src/widgets/table.rs +191 -34
  147. data/ext/ratatui_ruby/src/widgets/table_state.rs +121 -0
  148. data/lib/ratatui_ruby/buffer/cell.rb +168 -0
  149. data/lib/ratatui_ruby/buffer.rb +15 -0
  150. data/lib/ratatui_ruby/cell.rb +4 -4
  151. data/lib/ratatui_ruby/event/key/character.rb +35 -0
  152. data/lib/ratatui_ruby/event/key/media.rb +44 -0
  153. data/lib/ratatui_ruby/event/key/modifier.rb +95 -0
  154. data/lib/ratatui_ruby/event/key/navigation.rb +55 -0
  155. data/lib/ratatui_ruby/event/key/system.rb +45 -0
  156. data/lib/ratatui_ruby/event/key.rb +111 -51
  157. data/lib/ratatui_ruby/event/mouse.rb +3 -3
  158. data/lib/ratatui_ruby/event/paste.rb +1 -1
  159. data/lib/ratatui_ruby/frame.rb +100 -4
  160. data/lib/ratatui_ruby/layout/constraint.rb +95 -0
  161. data/lib/ratatui_ruby/layout/layout.rb +106 -0
  162. data/lib/ratatui_ruby/layout/rect.rb +118 -0
  163. data/lib/ratatui_ruby/layout.rb +19 -0
  164. data/lib/ratatui_ruby/list_state.rb +88 -0
  165. data/lib/ratatui_ruby/schema/bar_chart/bar.rb +2 -2
  166. data/lib/ratatui_ruby/schema/cursor.rb +5 -0
  167. data/lib/ratatui_ruby/schema/gauge.rb +3 -1
  168. data/lib/ratatui_ruby/schema/layout.rb +1 -1
  169. data/lib/ratatui_ruby/schema/line_gauge.rb +2 -2
  170. data/lib/ratatui_ruby/schema/list.rb +25 -4
  171. data/lib/ratatui_ruby/schema/list_item.rb +41 -0
  172. data/lib/ratatui_ruby/schema/rect.rb +43 -0
  173. data/lib/ratatui_ruby/schema/row.rb +66 -0
  174. data/lib/ratatui_ruby/schema/style.rb +24 -4
  175. data/lib/ratatui_ruby/schema/table.rb +29 -11
  176. data/lib/ratatui_ruby/schema/text.rb +96 -3
  177. data/lib/ratatui_ruby/scrollbar_state.rb +112 -0
  178. data/lib/ratatui_ruby/style/style.rb +81 -0
  179. data/lib/ratatui_ruby/style.rb +15 -0
  180. data/lib/ratatui_ruby/table_state.rb +90 -0
  181. data/lib/ratatui_ruby/test_helper/event_injection.rb +169 -0
  182. data/lib/ratatui_ruby/test_helper/snapshot.rb +414 -0
  183. data/lib/ratatui_ruby/test_helper/style_assertions.rb +351 -0
  184. data/lib/ratatui_ruby/test_helper/terminal.rb +127 -0
  185. data/lib/ratatui_ruby/test_helper/test_doubles.rb +68 -0
  186. data/lib/ratatui_ruby/test_helper.rb +65 -358
  187. data/lib/ratatui_ruby/tui/buffer_factories.rb +20 -0
  188. data/lib/ratatui_ruby/tui/canvas_factories.rb +44 -0
  189. data/lib/ratatui_ruby/tui/core.rb +38 -0
  190. data/lib/ratatui_ruby/tui/layout_factories.rb +74 -0
  191. data/lib/ratatui_ruby/tui/state_factories.rb +33 -0
  192. data/lib/ratatui_ruby/tui/style_factories.rb +20 -0
  193. data/lib/ratatui_ruby/tui/text_factories.rb +44 -0
  194. data/lib/ratatui_ruby/tui/widget_factories.rb +195 -0
  195. data/lib/ratatui_ruby/tui.rb +75 -0
  196. data/lib/ratatui_ruby/version.rb +1 -1
  197. data/lib/ratatui_ruby/widgets/bar_chart/bar.rb +47 -0
  198. data/lib/ratatui_ruby/widgets/bar_chart/bar_group.rb +25 -0
  199. data/lib/ratatui_ruby/widgets/bar_chart.rb +239 -0
  200. data/lib/ratatui_ruby/widgets/block.rb +192 -0
  201. data/lib/ratatui_ruby/widgets/calendar.rb +84 -0
  202. data/lib/ratatui_ruby/widgets/canvas.rb +231 -0
  203. data/lib/ratatui_ruby/widgets/cell.rb +47 -0
  204. data/lib/ratatui_ruby/widgets/center.rb +59 -0
  205. data/lib/ratatui_ruby/widgets/chart.rb +185 -0
  206. data/lib/ratatui_ruby/widgets/clear.rb +54 -0
  207. data/lib/ratatui_ruby/widgets/cursor.rb +42 -0
  208. data/lib/ratatui_ruby/widgets/gauge.rb +72 -0
  209. data/lib/ratatui_ruby/widgets/line_gauge.rb +80 -0
  210. data/lib/ratatui_ruby/widgets/list.rb +127 -0
  211. data/lib/ratatui_ruby/widgets/list_item.rb +43 -0
  212. data/lib/ratatui_ruby/widgets/overlay.rb +43 -0
  213. data/lib/ratatui_ruby/widgets/paragraph.rb +99 -0
  214. data/lib/ratatui_ruby/widgets/ratatui_logo.rb +31 -0
  215. data/lib/ratatui_ruby/widgets/ratatui_mascot.rb +36 -0
  216. data/lib/ratatui_ruby/widgets/row.rb +68 -0
  217. data/lib/ratatui_ruby/widgets/scrollbar.rb +143 -0
  218. data/lib/ratatui_ruby/widgets/shape/label.rb +68 -0
  219. data/lib/ratatui_ruby/widgets/sparkline.rb +134 -0
  220. data/lib/ratatui_ruby/widgets/table.rb +141 -0
  221. data/lib/ratatui_ruby/widgets/tabs.rb +85 -0
  222. data/lib/ratatui_ruby/widgets.rb +40 -0
  223. data/lib/ratatui_ruby.rb +64 -57
  224. data/sig/examples/app_all_events/view.rbs +1 -1
  225. data/sig/examples/app_all_events/view_state.rbs +1 -1
  226. data/sig/examples/app_stateful_interaction/app.rbs +33 -0
  227. data/sig/examples/widget_block_demo/app.rbs +32 -0
  228. data/sig/examples/{app_map_demo → widget_map_demo}/app.rbs +2 -2
  229. data/sig/examples/{app_table_select → widget_table_demo}/app.rbs +2 -2
  230. data/sig/examples/{widget_table_flex → widget_text_width}/app.rbs +2 -3
  231. data/sig/ratatui_ruby/event.rbs +11 -1
  232. data/sig/ratatui_ruby/frame.rbs +2 -0
  233. data/sig/ratatui_ruby/list_state.rbs +13 -0
  234. data/sig/ratatui_ruby/ratatui_ruby.rbs +2 -2
  235. data/sig/ratatui_ruby/schema/bar_chart/bar.rbs +3 -3
  236. data/sig/ratatui_ruby/schema/gauge.rbs +2 -2
  237. data/sig/ratatui_ruby/schema/line_gauge.rbs +2 -2
  238. data/sig/ratatui_ruby/schema/list.rbs +4 -2
  239. data/sig/ratatui_ruby/schema/list_item.rbs +10 -0
  240. data/sig/ratatui_ruby/schema/rect.rbs +3 -0
  241. data/sig/ratatui_ruby/schema/row.rbs +22 -0
  242. data/sig/ratatui_ruby/schema/style.rbs +3 -3
  243. data/sig/ratatui_ruby/schema/table.rbs +3 -1
  244. data/sig/ratatui_ruby/schema/text.rbs +9 -6
  245. data/sig/ratatui_ruby/scrollbar_state.rbs +18 -0
  246. data/sig/ratatui_ruby/session.rbs +41 -48
  247. data/sig/ratatui_ruby/table_state.rbs +15 -0
  248. data/sig/ratatui_ruby/test_helper/event_injection.rbs +16 -0
  249. data/sig/ratatui_ruby/test_helper/snapshot.rbs +12 -0
  250. data/sig/ratatui_ruby/test_helper/style_assertions.rbs +64 -0
  251. data/sig/ratatui_ruby/test_helper/terminal.rbs +14 -0
  252. data/sig/ratatui_ruby/test_helper/test_doubles.rbs +22 -0
  253. data/sig/ratatui_ruby/test_helper.rbs +5 -4
  254. data/sig/ratatui_ruby/tui/buffer_factories.rbs +10 -0
  255. data/sig/ratatui_ruby/tui/canvas_factories.rbs +14 -0
  256. data/sig/ratatui_ruby/tui/core.rbs +14 -0
  257. data/sig/ratatui_ruby/tui/layout_factories.rbs +19 -0
  258. data/sig/ratatui_ruby/tui/state_factories.rbs +12 -0
  259. data/sig/ratatui_ruby/tui/style_factories.rbs +10 -0
  260. data/sig/ratatui_ruby/tui/text_factories.rbs +14 -0
  261. data/sig/ratatui_ruby/tui/widget_factories.rbs +39 -0
  262. data/sig/ratatui_ruby/tui.rbs +19 -0
  263. data/tasks/autodoc/examples.rb +79 -0
  264. data/tasks/autodoc.rake +7 -35
  265. data/tasks/bump/changelog.rb +3 -3
  266. data/tasks/bump/links.rb +67 -0
  267. data/tasks/sourcehut.rake +64 -21
  268. data/tasks/terminal_preview/app_screenshot.rb +13 -3
  269. data/tasks/terminal_preview/saved_screenshot.rb +4 -3
  270. metadata +169 -48
  271. data/doc/contributors/dwim_dx.md +0 -366
  272. data/doc/images/app_analytics.png +0 -0
  273. data/doc/images/app_custom_widget.png +0 -0
  274. data/doc/images/app_mouse_events.png +0 -0
  275. data/doc/images/app_table_select.png +0 -0
  276. data/doc/images/widget_block_padding.png +0 -0
  277. data/doc/images/widget_block_titles.png +0 -0
  278. data/doc/images/widget_list_styles.png +0 -0
  279. data/doc/images/widget_table_flex.png +0 -0
  280. data/examples/app_all_events/model/events.rb +0 -180
  281. data/examples/app_all_events/model/highlight.rb +0 -57
  282. data/examples/app_all_events/test/snapshots/after_focus_lost.txt +0 -24
  283. data/examples/app_all_events/test/snapshots/after_focus_regained.txt +0 -24
  284. data/examples/app_all_events/test/snapshots/after_horizontal_resize.txt +0 -24
  285. data/examples/app_all_events/test/snapshots/after_key_a.txt +0 -24
  286. data/examples/app_all_events/test/snapshots/after_key_ctrl_x.txt +0 -24
  287. data/examples/app_all_events/test/snapshots/after_mouse_click.txt +0 -24
  288. data/examples/app_all_events/test/snapshots/after_mouse_drag.txt +0 -24
  289. data/examples/app_all_events/test/snapshots/after_multiple_events.txt +0 -24
  290. data/examples/app_all_events/test/snapshots/after_paste.txt +0 -24
  291. data/examples/app_all_events/test/snapshots/after_resize.txt +0 -24
  292. data/examples/app_all_events/test/snapshots/after_right_click.txt +0 -24
  293. data/examples/app_all_events/test/snapshots/after_vertical_resize.txt +0 -24
  294. data/examples/app_all_events/test/snapshots/initial_state.txt +0 -24
  295. data/examples/app_all_events/view_state.rb +0 -42
  296. data/examples/app_color_picker/scene.rb +0 -201
  297. data/examples/widget_block_padding/app.rb +0 -67
  298. data/examples/widget_block_titles/app.rb +0 -69
  299. data/examples/widget_list_styles/app.rb +0 -141
  300. data/examples/widget_table_flex/app.rb +0 -95
  301. data/lib/ratatui_ruby/session/autodoc.rb +0 -417
  302. data/lib/ratatui_ruby/session.rb +0 -163
  303. data/sig/examples/widget_block_padding/app.rbs +0 -11
  304. data/sig/examples/widget_block_titles/app.rbs +0 -11
  305. data/sig/examples/widget_list_styles/app.rbs +0 -11
  306. data/tasks/autodoc/inventory.rb +0 -61
  307. data/tasks/autodoc/notice.rb +0 -26
  308. data/tasks/autodoc/rbs.rb +0 -38
  309. data/tasks/autodoc/rdoc.rb +0 -45
  310. data/tasks/bump/comparison_links.rb +0 -41
  311. /data/doc/images/{app_map_demo.png → widget_map_demo.png} +0 -0
@@ -1,417 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
- # SPDX-License-Identifier: AGPL-3.0-or-later
5
-
6
- # !!! DO NOT EDIT THIS FILE BY HAND !!!
7
- # This file is automatically generated by `rake autodoc:rdoc:session`.
8
- # Any changes will be overwritten.
9
-
10
- module RatatuiRuby
11
- class Session
12
- # == RatatuiRuby Delegates
13
- #
14
- # :method: _paragraph_line_count
15
- # :call-seq: _paragraph_line_count(*args, **kwargs, &block)
16
- #
17
- # Delegates to RatatuiRuby._paragraph_line_count.
18
- #
19
- # :method: _paragraph_line_width
20
- # :call-seq: _paragraph_line_width(*args, **kwargs, &block)
21
- #
22
- # Delegates to RatatuiRuby._paragraph_line_width.
23
- #
24
- # :method: _tabs_width
25
- # :call-seq: _tabs_width(*args, **kwargs, &block)
26
- #
27
- # Delegates to RatatuiRuby._tabs_width.
28
- #
29
- # :method: clear_events
30
- # :call-seq: clear_events(*args, **kwargs, &block)
31
- #
32
- # Delegates to RatatuiRuby.clear_events.
33
- #
34
- # :method: draw
35
- # :call-seq: draw(*args, **kwargs, &block)
36
- #
37
- # Delegates to RatatuiRuby.draw.
38
- #
39
- # :method: experimental_warnings
40
- # :call-seq: experimental_warnings(*args, **kwargs, &block)
41
- #
42
- # Delegates to RatatuiRuby.experimental_warnings.
43
- #
44
- # :method: experimental_warnings=
45
- # :call-seq: experimental_warnings=(*args, **kwargs, &block)
46
- #
47
- # Delegates to RatatuiRuby.experimental_warnings=.
48
- #
49
- # :method: get_buffer_content
50
- # :call-seq: get_buffer_content(*args, **kwargs, &block)
51
- #
52
- # Delegates to RatatuiRuby.get_buffer_content.
53
- #
54
- # :method: get_cell_at
55
- # :call-seq: get_cell_at(*args, **kwargs, &block)
56
- #
57
- # Delegates to RatatuiRuby.get_cell_at.
58
- #
59
- # :method: get_cursor_position
60
- # :call-seq: get_cursor_position(*args, **kwargs, &block)
61
- #
62
- # Delegates to RatatuiRuby.get_cursor_position.
63
- #
64
- # :method: init_terminal
65
- # :call-seq: init_terminal(*args, **kwargs, &block)
66
- #
67
- # Delegates to RatatuiRuby.init_terminal.
68
- #
69
- # :method: init_test_terminal
70
- # :call-seq: init_test_terminal(*args, **kwargs, &block)
71
- #
72
- # Delegates to RatatuiRuby.init_test_terminal.
73
- #
74
- # :method: inject_test_event
75
- # :call-seq: inject_test_event(*args, **kwargs, &block)
76
- #
77
- # Delegates to RatatuiRuby.inject_test_event.
78
- #
79
- # :method: poll_event
80
- # :call-seq: poll_event(*args, **kwargs, &block)
81
- #
82
- # Delegates to RatatuiRuby.poll_event.
83
- #
84
- # :method: resize_terminal
85
- # :call-seq: resize_terminal(*args, **kwargs, &block)
86
- #
87
- # Delegates to RatatuiRuby.resize_terminal.
88
- #
89
- # :method: restore_terminal
90
- # :call-seq: restore_terminal(*args, **kwargs, &block)
91
- #
92
- # Delegates to RatatuiRuby.restore_terminal.
93
- #
94
- # :method: run
95
- # :call-seq: run(*args, **kwargs, &block)
96
- #
97
- # Delegates to RatatuiRuby.run.
98
- #
99
- # :method: warn_experimental_feature
100
- # :call-seq: warn_experimental_feature(*args, **kwargs, &block)
101
- #
102
- # Delegates to RatatuiRuby.warn_experimental_feature.
103
- #
104
- # == Widget Factories
105
- #
106
- # :method: axis
107
- # :call-seq: axis(*args, **kwargs, &block)
108
- #
109
- # Factory for RatatuiRuby::Axis.new.
110
- #
111
- # :method: bar_chart
112
- # :call-seq: bar_chart(*args, **kwargs, &block)
113
- #
114
- # Factory for RatatuiRuby::BarChart.new.
115
- #
116
- # :method: bar_chart_bar
117
- # :call-seq: bar_chart_bar(*args, **kwargs, &block)
118
- #
119
- # Factory for RatatuiRuby::BarChart::Bar.new.
120
- #
121
- # :method: bar_chart_bar_group
122
- # :call-seq: bar_chart_bar_group(*args, **kwargs, &block)
123
- #
124
- # Factory for RatatuiRuby::BarChart::BarGroup.new.
125
- #
126
- # :method: block
127
- # :call-seq: block(*args, **kwargs, &block)
128
- #
129
- # Factory for RatatuiRuby::Block.new.
130
- #
131
- # :method: calendar
132
- # :call-seq: calendar(*args, **kwargs, &block)
133
- #
134
- # Factory for RatatuiRuby::Calendar.new.
135
- #
136
- # :method: canvas
137
- # :call-seq: canvas(*args, **kwargs, &block)
138
- #
139
- # Factory for RatatuiRuby::Canvas.new.
140
- #
141
- # :method: cell
142
- # :call-seq: cell(*args, **kwargs, &block)
143
- #
144
- # Factory for RatatuiRuby::Cell.new.
145
- #
146
- # :method: cell_char
147
- # :call-seq: cell_char(*args, **kwargs, &block)
148
- #
149
- # Helper for RatatuiRuby::Cell.char.
150
- #
151
- # :method: cell_default
152
- # :call-seq: cell_default(*args, **kwargs, &block)
153
- #
154
- # Helper for RatatuiRuby::Cell.default.
155
- #
156
- # :method: cell_empty
157
- # :call-seq: cell_empty(*args, **kwargs, &block)
158
- #
159
- # Helper for RatatuiRuby::Cell.empty.
160
- #
161
- # :method: cell_symbol
162
- # :call-seq: cell_symbol(*args, **kwargs, &block)
163
- #
164
- # Helper for RatatuiRuby::Cell.symbol.
165
- #
166
- # :method: center
167
- # :call-seq: center(*args, **kwargs, &block)
168
- #
169
- # Factory for RatatuiRuby::Center.new.
170
- #
171
- # :method: chart
172
- # :call-seq: chart(*args, **kwargs, &block)
173
- #
174
- # Factory for RatatuiRuby::Chart.new.
175
- #
176
- # :method: clear
177
- # :call-seq: clear(*args, **kwargs, &block)
178
- #
179
- # Factory for RatatuiRuby::Clear.new.
180
- #
181
- # :method: constraint
182
- # :call-seq: constraint(*args, **kwargs, &block)
183
- #
184
- # Factory for RatatuiRuby::Constraint.new.
185
- #
186
- # :method: constraint_fill
187
- # :call-seq: constraint_fill(*args, **kwargs, &block)
188
- #
189
- # Helper for RatatuiRuby::Constraint.fill.
190
- #
191
- # :method: constraint_length
192
- # :call-seq: constraint_length(*args, **kwargs, &block)
193
- #
194
- # Helper for RatatuiRuby::Constraint.length.
195
- #
196
- # :method: constraint_max
197
- # :call-seq: constraint_max(*args, **kwargs, &block)
198
- #
199
- # Helper for RatatuiRuby::Constraint.max.
200
- #
201
- # :method: constraint_min
202
- # :call-seq: constraint_min(*args, **kwargs, &block)
203
- #
204
- # Helper for RatatuiRuby::Constraint.min.
205
- #
206
- # :method: constraint_percentage
207
- # :call-seq: constraint_percentage(*args, **kwargs, &block)
208
- #
209
- # Helper for RatatuiRuby::Constraint.percentage.
210
- #
211
- # :method: constraint_ratio
212
- # :call-seq: constraint_ratio(*args, **kwargs, &block)
213
- #
214
- # Helper for RatatuiRuby::Constraint.ratio.
215
- #
216
- # :method: cursor
217
- # :call-seq: cursor(*args, **kwargs, &block)
218
- #
219
- # Factory for RatatuiRuby::Cursor.new.
220
- #
221
- # :method: dataset
222
- # :call-seq: dataset(*args, **kwargs, &block)
223
- #
224
- # Factory for RatatuiRuby::Dataset.new.
225
- #
226
- # :method: draw_cell_cmd
227
- # :call-seq: draw_cell_cmd(*args, **kwargs, &block)
228
- #
229
- # Factory for RatatuiRuby::Draw::CellCmd.new.
230
- #
231
- # :method: draw_string_cmd
232
- # :call-seq: draw_string_cmd(*args, **kwargs, &block)
233
- #
234
- # Factory for RatatuiRuby::Draw::StringCmd.new.
235
- #
236
- # :method: error
237
- # :call-seq: error(*args, **kwargs, &block)
238
- #
239
- # Factory for RatatuiRuby::Error.new.
240
- #
241
- # :method: event
242
- # :call-seq: event(*args, **kwargs, &block)
243
- #
244
- # Factory for RatatuiRuby::Event.new.
245
- #
246
- # :method: event_focus_gained
247
- # :call-seq: event_focus_gained(*args, **kwargs, &block)
248
- #
249
- # Factory for RatatuiRuby::Event::FocusGained.new.
250
- #
251
- # :method: event_focus_lost
252
- # :call-seq: event_focus_lost(*args, **kwargs, &block)
253
- #
254
- # Factory for RatatuiRuby::Event::FocusLost.new.
255
- #
256
- # :method: event_key
257
- # :call-seq: event_key(*args, **kwargs, &block)
258
- #
259
- # Factory for RatatuiRuby::Event::Key.new.
260
- #
261
- # :method: event_mouse
262
- # :call-seq: event_mouse(*args, **kwargs, &block)
263
- #
264
- # Factory for RatatuiRuby::Event::Mouse.new.
265
- #
266
- # :method: event_none
267
- # :call-seq: event_none(*args, **kwargs, &block)
268
- #
269
- # Factory for RatatuiRuby::Event::None.new.
270
- #
271
- # :method: event_paste
272
- # :call-seq: event_paste(*args, **kwargs, &block)
273
- #
274
- # Factory for RatatuiRuby::Event::Paste.new.
275
- #
276
- # :method: event_resize
277
- # :call-seq: event_resize(*args, **kwargs, &block)
278
- #
279
- # Factory for RatatuiRuby::Event::Resize.new.
280
- #
281
- # :method: frame
282
- # :call-seq: frame(*args, **kwargs, &block)
283
- #
284
- # Factory for RatatuiRuby::Frame.new.
285
- #
286
- # :method: gauge
287
- # :call-seq: gauge(*args, **kwargs, &block)
288
- #
289
- # Factory for RatatuiRuby::Gauge.new.
290
- #
291
- # :method: layout
292
- # :call-seq: layout(*args, **kwargs, &block)
293
- #
294
- # Factory for RatatuiRuby::Layout.new.
295
- #
296
- # :method: layout_split
297
- # :call-seq: layout_split(*args, **kwargs, &block)
298
- #
299
- # Helper for RatatuiRuby::Layout.split.
300
- #
301
- # :method: line_chart
302
- # :call-seq: line_chart(*args, **kwargs, &block)
303
- #
304
- # Factory for RatatuiRuby::LineChart.new.
305
- #
306
- # :method: line_gauge
307
- # :call-seq: line_gauge(*args, **kwargs, &block)
308
- #
309
- # Factory for RatatuiRuby::LineGauge.new.
310
- #
311
- # :method: list
312
- # :call-seq: list(*args, **kwargs, &block)
313
- #
314
- # Factory for RatatuiRuby::List.new.
315
- #
316
- # :method: overlay
317
- # :call-seq: overlay(*args, **kwargs, &block)
318
- #
319
- # Factory for RatatuiRuby::Overlay.new.
320
- #
321
- # :method: paragraph
322
- # :call-seq: paragraph(*args, **kwargs, &block)
323
- #
324
- # Factory for RatatuiRuby::Paragraph.new.
325
- #
326
- # :method: paragraph_new
327
- # :call-seq: paragraph_new(*args, **kwargs, &block)
328
- #
329
- # Helper for RatatuiRuby::Paragraph.new.
330
- #
331
- # :method: ratatui_logo
332
- # :call-seq: ratatui_logo(*args, **kwargs, &block)
333
- #
334
- # Factory for RatatuiRuby::RatatuiLogo.new.
335
- #
336
- # :method: ratatui_mascot
337
- # :call-seq: ratatui_mascot(*args, **kwargs, &block)
338
- #
339
- # Factory for RatatuiRuby::RatatuiMascot.new.
340
- #
341
- # :method: rect
342
- # :call-seq: rect(*args, **kwargs, &block)
343
- #
344
- # Factory for RatatuiRuby::Rect.new.
345
- #
346
- # :method: scrollbar
347
- # :call-seq: scrollbar(*args, **kwargs, &block)
348
- #
349
- # Factory for RatatuiRuby::Scrollbar.new.
350
- #
351
- # :method: shape_circle
352
- # :call-seq: shape_circle(*args, **kwargs, &block)
353
- #
354
- # Factory for RatatuiRuby::Shape::Circle.new.
355
- #
356
- # :method: shape_label
357
- # :call-seq: shape_label(*args, **kwargs, &block)
358
- #
359
- # Factory for RatatuiRuby::Shape::Label.new.
360
- #
361
- # :method: shape_line
362
- # :call-seq: shape_line(*args, **kwargs, &block)
363
- #
364
- # Factory for RatatuiRuby::Shape::Line.new.
365
- #
366
- # :method: shape_map
367
- # :call-seq: shape_map(*args, **kwargs, &block)
368
- #
369
- # Factory for RatatuiRuby::Shape::Map.new.
370
- #
371
- # :method: shape_point
372
- # :call-seq: shape_point(*args, **kwargs, &block)
373
- #
374
- # Factory for RatatuiRuby::Shape::Point.new.
375
- #
376
- # :method: shape_rectangle
377
- # :call-seq: shape_rectangle(*args, **kwargs, &block)
378
- #
379
- # Factory for RatatuiRuby::Shape::Rectangle.new.
380
- #
381
- # :method: sparkline
382
- # :call-seq: sparkline(*args, **kwargs, &block)
383
- #
384
- # Factory for RatatuiRuby::Sparkline.new.
385
- #
386
- # :method: style
387
- # :call-seq: style(*args, **kwargs, &block)
388
- #
389
- # Factory for RatatuiRuby::Style.new.
390
- #
391
- # :method: style_default
392
- # :call-seq: style_default(*args, **kwargs, &block)
393
- #
394
- # Helper for RatatuiRuby::Style.default.
395
- #
396
- # :method: table
397
- # :call-seq: table(*args, **kwargs, &block)
398
- #
399
- # Factory for RatatuiRuby::Table.new.
400
- #
401
- # :method: tabs
402
- # :call-seq: tabs(*args, **kwargs, &block)
403
- #
404
- # Factory for RatatuiRuby::Tabs.new.
405
- #
406
- # :method: text_line
407
- # :call-seq: text_line(*args, **kwargs, &block)
408
- #
409
- # Factory for RatatuiRuby::Text::Line.new.
410
- #
411
- # :method: text_span
412
- # :call-seq: text_span(*args, **kwargs, &block)
413
- #
414
- # Factory for RatatuiRuby::Text::Span.new.
415
- #
416
- end
417
- end
@@ -1,163 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
- # SPDX-License-Identifier: AGPL-3.0-or-later
5
-
6
- module RatatuiRuby
7
- # Manages the terminal lifecycle and provides a concise API for the render loop.
8
- #
9
- # Writing a TUI loop involves repetitive boilerplate. You constantly instantiate widgets (<tt>RatatuiRuby::Paragraph.new</tt>) and call global methods (<tt>RatatuiRuby.draw</tt>). This is verbose and hard to read.
10
- #
11
- # The Session object simplifies this. It acts as a factory and a facade. It provides short helper methods for every widget and delegates core commands to the main module.
12
- #
13
- # Use it within <tt>RatatuiRuby.run</tt> to build your interface cleanly.
14
- #
15
- # == Available Methods
16
- #
17
- # The session dynamically defines factory methods for all RatatuiRuby constants.
18
- #
19
- # * <tt>draw(node)</tt> -> Delegates to <tt>RatatuiRuby.draw</tt>
20
- # * <tt>poll_event</tt> -> Delegates to <tt>RatatuiRuby.poll_event</tt>
21
- #
22
- # === Widget Factories
23
- #
24
- # The session acts as a dynamic factory. It creates a helper method for **every** class defined in the `RatatuiRuby` module.
25
- #
26
- # **The Rule:**
27
- # To instantiate a class like `RatatuiRuby::SomeWidget`, call `tui.some_widget(...)`.
28
- #
29
- # **Common Examples:**
30
- # * <tt>paragraph(...)</tt> -> <tt>RatatuiRuby::Paragraph.new(...)</tt>
31
- # * <tt>block(...)</tt> -> <tt>RatatuiRuby::Block.new(...)</tt>
32
- # * <tt>layout(...)</tt> -> <tt>RatatuiRuby::Layout.new(...)</tt>
33
- # * <tt>list(...)</tt> -> <tt>RatatuiRuby::List.new(...)</tt>
34
- # * <tt>table(...)</tt> -> <tt>RatatuiRuby::Table.new(...)</tt>
35
- # * <tt>style(...)</tt> -> <tt>RatatuiRuby::Style.new(...)</tt>
36
- #
37
- # If a new class is added to the library, it is automatically available here.
38
- #
39
- # === Nested Helpers
40
- #
41
- # * <tt>text_span(...)</tt> -> <tt>RatatuiRuby::Text::Span.new(...)</tt>
42
- # * <tt>text_line(...)</tt> -> <tt>RatatuiRuby::Text::Line.new(...)</tt>
43
- #
44
- # === Examples
45
- #
46
- # ==== Basic Usage (Recommended)
47
- #
48
- # RatatuiRuby.run do |tui|
49
- # loop do
50
- # tui.draw \
51
- # tui.paragraph \
52
- # text: "Hello, Ratatui! Press 'q' to quit.",
53
- # alignment: :center,
54
- # block: tui.block(
55
- # title: "My Ruby TUI App",
56
- # borders: [:all],
57
- # border_color: "cyan"
58
- # )
59
- # event = tui.poll_event
60
- # break if event == "q" || event == :ctrl_c
61
- # end
62
- # end
63
- #
64
- # ==== Raw API (Verbose)
65
- #
66
- # RatatuiRuby.run do
67
- # loop do
68
- # RatatuiRuby.draw \
69
- # RatatuiRuby::Paragraph.new(
70
- # text: "Hello, Ratatui! Press 'q' to quit.",
71
- # alignment: :center,
72
- # block: RatatuiRuby::Block.new(
73
- # title: "My Ruby TUI App",
74
- # borders: [:all],
75
- # border_color: "cyan"
76
- # )
77
- # )
78
- # event = RatatuiRuby.poll_event
79
- # break if event == "q" || event == :ctrl_c
80
- # end
81
- # end
82
- #
83
- # ==== Mixed Usage (Flexible)
84
- #
85
- # RatatuiRuby.run do |tui|
86
- # loop do
87
- # RatatuiRuby.draw \
88
- # tui.paragraph \
89
- # text: "Hello, Ratatui! Press 'q' to quit.",
90
- # alignment: :center,
91
- # block: tui.block(
92
- # title: "My Ruby TUI App",
93
- # borders: [:all],
94
- # border_color: "cyan"
95
- # )
96
- # event = RatatuiRuby.poll_event
97
- # break if event == "q" || event == :ctrl_c
98
- # end
99
- # end
100
- class Session
101
- # Wrap methods directly
102
- RatatuiRuby.singleton_methods(false).each do |method_name|
103
- define_method(method_name) do |*args, **kwargs, &block|
104
- RatatuiRuby.public_send(method_name, *args, **kwargs, &block)
105
- end
106
- end
107
-
108
- # Wrap classes and modules as snake_case factories
109
- RatatuiRuby.constants.each do |const_name|
110
- next if const_name == :Buffer
111
-
112
- const = RatatuiRuby.const_get(const_name)
113
- next unless const.is_a?(Module) # Class is a Module, so this catches both
114
-
115
- # 1. Top-level factories (for Classes only)
116
- # e.g. RatatuiRuby::Paragraph -> tui.paragraph(...)
117
- if const.is_a?(Class)
118
- method_name = const_name.to_s
119
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
120
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
121
- .downcase
122
-
123
- define_method(method_name) do |*args, **kwargs, &block|
124
- const.new(*args, **kwargs, &block)
125
- end
126
-
127
- # 2. Class Method Helpers (for Classes only)
128
- # e.g. Layout.split -> layout_split
129
- const.singleton_methods(false).each do |class_method|
130
- session_method_name = "#{method_name}_#{class_method}"
131
-
132
- define_method(session_method_name) do |*args, **kwargs, &block|
133
- const.public_send(class_method, *args, **kwargs, &block)
134
- end
135
- end
136
- end
137
-
138
- # 3. Nested Class Factories (for both Modules and Classes)
139
- # e.g. RatatuiRuby::Text::Span -> tui.text_span(...)
140
- # e.g. RatatuiRuby::Shape::Line -> tui.shape_line(...)
141
- const.constants.each do |child_name|
142
- child = const.const_get(child_name)
143
- next unless child.is_a?(Class)
144
-
145
- parent_prefix = const_name.to_s
146
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
147
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
148
- .downcase
149
-
150
- child_suffix = child_name.to_s
151
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
152
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
153
- .downcase
154
-
155
- method_name = "#{parent_prefix}_#{child_suffix}"
156
-
157
- define_method(method_name) do |*args, **kwargs, &block|
158
- child.new(*args, **kwargs, &block)
159
- end
160
- end
161
- end
162
- end
163
- end
@@ -1,11 +0,0 @@
1
- # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
- #
3
- # SPDX-License-Identifier: AGPL-3.0-or-later
4
-
5
- class WidgetBlockPadding
6
- # @public
7
- def self.new: () -> WidgetBlockPadding
8
-
9
- # @public
10
- def run: () -> void
11
- end
@@ -1,11 +0,0 @@
1
- # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
- #
3
- # SPDX-License-Identifier: AGPL-3.0-or-later
4
-
5
- class WidgetBlockTitles
6
- # @public
7
- def self.new: () -> WidgetBlockTitles
8
-
9
- # @public
10
- def run: () -> void
11
- end
@@ -1,11 +0,0 @@
1
- # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
- #
3
- # SPDX-License-Identifier: AGPL-3.0-or-later
4
-
5
- class WidgetListStyles
6
- # @public
7
- def self.new: () -> WidgetListStyles
8
-
9
- # @public
10
- def run: () -> void
11
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
- # SPDX-License-Identifier: AGPL-3.0-or-later
5
-
6
- require_relative "name"
7
- require_relative "member"
8
-
9
- module Autodoc
10
- class Inventory
11
- include Enumerable
12
-
13
- def each(&)
14
- delegates.each(&)
15
- factories.each(&)
16
- end
17
-
18
- def delegates
19
- RatatuiRuby.singleton_methods(false).sort.map do |method_name|
20
- Member::Delegate.new(name: method_name)
21
- end
22
- end
23
-
24
- def factories
25
- members = []
26
- RatatuiRuby.constants.sort.each do |const_name|
27
- next if const_name == :Buffer
28
-
29
- const = RatatuiRuby.const_get(const_name)
30
- next unless const.is_a?(Module)
31
-
32
- if const.is_a?(Class)
33
- snake_name = Name.new(const_name).snake
34
- members << Member::Factory.new(name: snake_name, const_name:)
35
-
36
- const.singleton_methods(false).sort.each do |class_method|
37
- members << Member::Helper.new(
38
- name: "#{snake_name}_#{class_method}",
39
- class_method:,
40
- const_name:
41
- )
42
- end
43
- end
44
-
45
- const.constants.sort.each do |child_name|
46
- child = const.const_get(child_name)
47
- next unless child.is_a?(Class)
48
-
49
- parent_prefix = Name.new(const_name).snake
50
- child_suffix = Name.new(child_name).snake
51
-
52
- members << Member::Factory.new(
53
- name: "#{parent_prefix}_#{child_suffix}",
54
- const_name: "#{const_name}::#{child_name}"
55
- )
56
- end
57
- end
58
- members
59
- end
60
- end
61
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
- # SPDX-License-Identifier: AGPL-3.0-or-later
5
-
6
- module Autodoc
7
- class Notice < Data.define(:task_name)
8
- def rbs
9
- [
10
- "# !!! DO NOT EDIT THIS FILE BY HAND !!!",
11
- "# This file is automatically generated by `rake #{task_name}`.",
12
- "# Any changes will be overwritten.",
13
- "",
14
- ]
15
- end
16
-
17
- def rdoc
18
- [
19
- "# !!! DO NOT EDIT THIS FILE BY HAND !!!",
20
- "# This file is automatically generated by `rake #{task_name}`.",
21
- "# Any changes will be overwritten.",
22
- "",
23
- ]
24
- end
25
- end
26
- end