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.
Files changed (441) 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 +98 -176
  7. data/CHANGELOG.md +80 -6
  8. data/README.md +19 -7
  9. data/REUSE.toml +15 -0
  10. data/doc/application_architecture.md +179 -45
  11. data/doc/application_testing.md +80 -32
  12. data/doc/contributors/design/ruby_frontend.md +48 -8
  13. data/doc/contributors/design/rust_backend.md +1 -0
  14. data/doc/contributors/developing_examples.md +191 -48
  15. data/doc/contributors/documentation_style.md +7 -0
  16. data/doc/contributors/examples_audit/p1_high.md +21 -0
  17. data/doc/contributors/examples_audit/p2_moderate.md +81 -0
  18. data/doc/contributors/examples_audit.md +41 -0
  19. data/doc/contributors/index.md +2 -0
  20. data/doc/event_handling.md +21 -7
  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_box_demo.png +0 -0
  32. data/doc/images/widget_calendar_demo.png +0 -0
  33. data/doc/images/widget_canvas_demo.png +0 -0
  34. data/doc/images/widget_cell_demo.png +0 -0
  35. data/doc/images/widget_center_demo.png +0 -0
  36. data/doc/images/widget_chart_demo.png +0 -0
  37. data/doc/images/widget_gauge_demo.png +0 -0
  38. data/doc/images/widget_layout_split.png +0 -0
  39. data/doc/images/widget_line_gauge_demo.png +0 -0
  40. data/doc/images/widget_list_demo.png +0 -0
  41. data/doc/images/widget_overlay_demo.png +0 -0
  42. data/doc/images/widget_ratatui_logo_demo.png +0 -0
  43. data/doc/images/widget_ratatui_mascot_demo.png +0 -0
  44. data/doc/images/widget_render.png +0 -0
  45. data/doc/images/widget_rich_text.png +0 -0
  46. data/doc/images/widget_scroll_text.png +0 -0
  47. data/doc/images/widget_scrollbar_demo.png +0 -0
  48. data/doc/images/widget_sparkline_demo.png +0 -0
  49. data/doc/images/widget_style_colors.png +0 -0
  50. data/doc/images/widget_table_demo.png +0 -0
  51. data/doc/images/widget_table_flex.png +0 -0
  52. data/doc/images/widget_tabs_demo.png +0 -0
  53. data/doc/images/widget_text_width.png +0 -0
  54. data/doc/interactive_design.md +25 -30
  55. data/doc/quickstart.md +150 -130
  56. data/doc/terminal_limitations.md +92 -0
  57. data/examples/app_all_events/README.md +99 -0
  58. data/examples/app_all_events/app.rb +96 -0
  59. data/examples/app_all_events/model/app_model.rb +157 -0
  60. data/examples/app_all_events/model/event_color_cycle.rb +41 -0
  61. data/examples/app_all_events/model/event_entry.rb +92 -0
  62. data/examples/app_all_events/model/msg.rb +37 -0
  63. data/examples/app_all_events/model/timestamp.rb +54 -0
  64. data/examples/app_all_events/update.rb +73 -0
  65. data/examples/app_all_events/view/app_view.rb +78 -0
  66. data/examples/app_all_events/view/controls_view.rb +52 -0
  67. data/examples/app_all_events/view/counts_view.rb +59 -0
  68. data/examples/app_all_events/view/live_view.rb +70 -0
  69. data/examples/app_all_events/view/log_view.rb +55 -0
  70. data/examples/app_all_events/view.rb +7 -0
  71. data/examples/app_color_picker/README.md +134 -0
  72. data/examples/app_color_picker/app.rb +74 -0
  73. data/examples/app_color_picker/clipboard.rb +84 -0
  74. data/examples/app_color_picker/color.rb +191 -0
  75. data/examples/app_color_picker/controls.rb +90 -0
  76. data/examples/app_color_picker/copy_dialog.rb +166 -0
  77. data/examples/app_color_picker/export_pane.rb +126 -0
  78. data/examples/app_color_picker/harmony.rb +56 -0
  79. data/examples/app_color_picker/input.rb +174 -0
  80. data/examples/app_color_picker/main_container.rb +178 -0
  81. data/examples/app_color_picker/palette.rb +109 -0
  82. data/examples/app_login_form/README.md +47 -0
  83. data/examples/{login_form → app_login_form}/app.rb +38 -42
  84. data/examples/app_stateful_interaction/README.md +31 -0
  85. data/examples/app_stateful_interaction/app.rb +272 -0
  86. data/examples/timeout_demo.rb +43 -0
  87. data/examples/verify_quickstart_dsl/README.md +48 -0
  88. data/examples/{quickstart_dsl → verify_quickstart_dsl}/app.rb +17 -6
  89. data/examples/verify_quickstart_layout/README.md +71 -0
  90. data/examples/verify_quickstart_layout/app.rb +71 -0
  91. data/examples/verify_quickstart_lifecycle/README.md +56 -0
  92. data/examples/verify_quickstart_lifecycle/app.rb +54 -0
  93. data/examples/verify_readme_usage/README.md +43 -0
  94. data/examples/verify_readme_usage/app.rb +40 -0
  95. data/examples/widget_barchart_demo/README.md +49 -0
  96. data/examples/widget_barchart_demo/app.rb +238 -0
  97. data/examples/widget_block_demo/README.md +34 -0
  98. data/examples/widget_block_demo/app.rb +256 -0
  99. data/examples/widget_box_demo/README.md +45 -0
  100. data/examples/{box_demo → widget_box_demo}/app.rb +99 -65
  101. data/examples/widget_calendar_demo/README.md +39 -0
  102. data/examples/widget_calendar_demo/app.rb +109 -0
  103. data/examples/widget_canvas_demo/README.md +27 -0
  104. data/examples/widget_canvas_demo/app.rb +123 -0
  105. data/examples/widget_cell_demo/README.md +36 -0
  106. data/examples/widget_cell_demo/app.rb +111 -0
  107. data/examples/widget_center_demo/README.md +29 -0
  108. data/examples/widget_center_demo/app.rb +116 -0
  109. data/examples/widget_chart_demo/README.md +41 -0
  110. data/examples/widget_chart_demo/app.rb +218 -0
  111. data/examples/widget_gauge_demo/README.md +41 -0
  112. data/examples/widget_gauge_demo/app.rb +212 -0
  113. data/examples/widget_layout_split/README.md +44 -0
  114. data/examples/widget_layout_split/app.rb +246 -0
  115. data/examples/widget_line_gauge_demo/README.md +41 -0
  116. data/examples/widget_line_gauge_demo/app.rb +217 -0
  117. data/examples/widget_list_demo/README.md +49 -0
  118. data/examples/widget_list_demo/app.rb +366 -0
  119. data/examples/widget_map_demo/README.md +39 -0
  120. data/examples/{map_demo → widget_map_demo}/app.rb +24 -21
  121. data/examples/widget_overlay_demo/app.rb +248 -0
  122. data/examples/widget_popup_demo/README.md +36 -0
  123. data/examples/widget_popup_demo/app.rb +104 -0
  124. data/examples/widget_ratatui_logo_demo/README.md +34 -0
  125. data/examples/widget_ratatui_logo_demo/app.rb +103 -0
  126. data/examples/widget_ratatui_mascot_demo/README.md +34 -0
  127. data/examples/widget_ratatui_mascot_demo/app.rb +93 -0
  128. data/examples/widget_rect/README.md +38 -0
  129. data/examples/widget_rect/app.rb +205 -0
  130. data/examples/widget_render/README.md +37 -0
  131. data/examples/widget_render/app.rb +184 -0
  132. data/examples/widget_rich_text/README.md +35 -0
  133. data/examples/widget_rich_text/app.rb +166 -0
  134. data/examples/widget_scroll_text/README.md +37 -0
  135. data/examples/widget_scroll_text/app.rb +107 -0
  136. data/examples/widget_scrollbar_demo/README.md +37 -0
  137. data/examples/widget_scrollbar_demo/app.rb +153 -0
  138. data/examples/widget_sparkline_demo/README.md +42 -0
  139. data/examples/widget_sparkline_demo/app.rb +275 -0
  140. data/examples/widget_style_colors/README.md +34 -0
  141. data/examples/widget_style_colors/app.rb +19 -21
  142. data/examples/widget_table_demo/README.md +48 -0
  143. data/examples/widget_table_demo/app.rb +239 -0
  144. data/examples/widget_tabs_demo/README.md +41 -0
  145. data/examples/widget_tabs_demo/app.rb +181 -0
  146. data/examples/widget_text_width/README.md +35 -0
  147. data/examples/widget_text_width/app.rb +106 -0
  148. data/ext/ratatui_ruby/Cargo.lock +11 -4
  149. data/ext/ratatui_ruby/Cargo.toml +2 -1
  150. data/ext/ratatui_ruby/src/events.rs +359 -62
  151. data/ext/ratatui_ruby/src/frame.rs +227 -0
  152. data/ext/ratatui_ruby/src/lib.rs +110 -27
  153. data/ext/ratatui_ruby/src/rendering.rs +8 -4
  154. data/ext/ratatui_ruby/src/string_width.rs +101 -0
  155. data/ext/ratatui_ruby/src/style.rs +138 -57
  156. data/ext/ratatui_ruby/src/terminal.rs +42 -22
  157. data/ext/ratatui_ruby/src/text.rs +14 -7
  158. data/ext/ratatui_ruby/src/widgets/barchart.rs +74 -54
  159. data/ext/ratatui_ruby/src/widgets/block.rs +7 -6
  160. data/ext/ratatui_ruby/src/widgets/canvas.rs +21 -3
  161. data/ext/ratatui_ruby/src/widgets/chart.rs +20 -10
  162. data/ext/ratatui_ruby/src/widgets/gauge.rs +9 -2
  163. data/ext/ratatui_ruby/src/widgets/layout.rs +9 -4
  164. data/ext/ratatui_ruby/src/widgets/line_gauge.rs +9 -2
  165. data/ext/ratatui_ruby/src/widgets/list.rs +211 -12
  166. data/ext/ratatui_ruby/src/widgets/list_state.rs +137 -0
  167. data/ext/ratatui_ruby/src/widgets/mod.rs +3 -0
  168. data/ext/ratatui_ruby/src/widgets/overlay.rs +2 -1
  169. data/ext/ratatui_ruby/src/widgets/paragraph.rs +1 -1
  170. data/ext/ratatui_ruby/src/widgets/ratatui_logo.rs +19 -8
  171. data/ext/ratatui_ruby/src/widgets/ratatui_mascot.rs +17 -10
  172. data/ext/ratatui_ruby/src/widgets/scrollbar.rs +97 -3
  173. data/ext/ratatui_ruby/src/widgets/scrollbar_state.rs +169 -0
  174. data/ext/ratatui_ruby/src/widgets/sparkline.rs +14 -11
  175. data/ext/ratatui_ruby/src/widgets/table.rs +121 -5
  176. data/ext/ratatui_ruby/src/widgets/table_state.rs +121 -0
  177. data/ext/ratatui_ruby/src/widgets/tabs.rs +11 -11
  178. data/lib/ratatui_ruby/cell.rb +7 -7
  179. data/lib/ratatui_ruby/event/key/character.rb +35 -0
  180. data/lib/ratatui_ruby/event/key/media.rb +44 -0
  181. data/lib/ratatui_ruby/event/key/modifier.rb +95 -0
  182. data/lib/ratatui_ruby/event/key/navigation.rb +55 -0
  183. data/lib/ratatui_ruby/event/key/system.rb +45 -0
  184. data/lib/ratatui_ruby/event/key.rb +112 -52
  185. data/lib/ratatui_ruby/event/mouse.rb +3 -3
  186. data/lib/ratatui_ruby/event/none.rb +43 -0
  187. data/lib/ratatui_ruby/event/paste.rb +1 -1
  188. data/lib/ratatui_ruby/event.rb +56 -4
  189. data/lib/ratatui_ruby/frame.rb +183 -0
  190. data/lib/ratatui_ruby/list_state.rb +88 -0
  191. data/lib/ratatui_ruby/schema/bar_chart/bar.rb +13 -13
  192. data/lib/ratatui_ruby/schema/bar_chart/bar_group.rb +1 -5
  193. data/lib/ratatui_ruby/schema/bar_chart.rb +217 -217
  194. data/lib/ratatui_ruby/schema/block.rb +163 -168
  195. data/lib/ratatui_ruby/schema/calendar.rb +66 -67
  196. data/lib/ratatui_ruby/schema/canvas.rb +63 -63
  197. data/lib/ratatui_ruby/schema/center.rb +46 -46
  198. data/lib/ratatui_ruby/schema/chart.rb +135 -143
  199. data/lib/ratatui_ruby/schema/clear.rb +42 -42
  200. data/lib/ratatui_ruby/schema/constraint.rb +76 -76
  201. data/lib/ratatui_ruby/schema/cursor.rb +30 -25
  202. data/lib/ratatui_ruby/schema/gauge.rb +54 -52
  203. data/lib/ratatui_ruby/schema/layout.rb +87 -87
  204. data/lib/ratatui_ruby/schema/line_gauge.rb +62 -62
  205. data/lib/ratatui_ruby/schema/list.rb +103 -80
  206. data/lib/ratatui_ruby/schema/list_item.rb +41 -0
  207. data/lib/ratatui_ruby/schema/overlay.rb +31 -31
  208. data/lib/ratatui_ruby/schema/paragraph.rb +80 -80
  209. data/lib/ratatui_ruby/schema/ratatui_logo.rb +10 -6
  210. data/lib/ratatui_ruby/schema/ratatui_mascot.rb +10 -5
  211. data/lib/ratatui_ruby/schema/rect.rb +99 -56
  212. data/lib/ratatui_ruby/schema/scrollbar.rb +119 -119
  213. data/lib/ratatui_ruby/schema/shape/label.rb +1 -1
  214. data/lib/ratatui_ruby/schema/sparkline.rb +111 -110
  215. data/lib/ratatui_ruby/schema/style.rb +66 -46
  216. data/lib/ratatui_ruby/schema/table.rb +126 -115
  217. data/lib/ratatui_ruby/schema/tabs.rb +66 -67
  218. data/lib/ratatui_ruby/schema/text.rb +69 -1
  219. data/lib/ratatui_ruby/scrollbar_state.rb +112 -0
  220. data/lib/ratatui_ruby/session/autodoc.rb +482 -0
  221. data/lib/ratatui_ruby/session.rb +55 -23
  222. data/lib/ratatui_ruby/table_state.rb +90 -0
  223. data/lib/ratatui_ruby/test_helper/event_injection.rb +169 -0
  224. data/lib/ratatui_ruby/test_helper/snapshot.rb +390 -0
  225. data/lib/ratatui_ruby/test_helper/style_assertions.rb +351 -0
  226. data/lib/ratatui_ruby/test_helper/terminal.rb +127 -0
  227. data/lib/ratatui_ruby/test_helper/test_doubles.rb +68 -0
  228. data/lib/ratatui_ruby/test_helper.rb +66 -193
  229. data/lib/ratatui_ruby/version.rb +1 -1
  230. data/lib/ratatui_ruby.rb +100 -51
  231. data/{examples/sparkline_demo → sig/examples/app_all_events}/app.rbs +3 -2
  232. data/sig/examples/app_all_events/model/event_entry.rbs +16 -0
  233. data/sig/examples/app_all_events/model/events.rbs +15 -0
  234. data/sig/examples/app_all_events/model/timestamp.rbs +11 -0
  235. data/sig/examples/app_all_events/view/app_view.rbs +8 -0
  236. data/sig/examples/app_all_events/view/controls_view.rbs +6 -0
  237. data/sig/examples/app_all_events/view/counts_view.rbs +6 -0
  238. data/sig/examples/app_all_events/view/live_view.rbs +6 -0
  239. data/sig/examples/app_all_events/view/log_view.rbs +6 -0
  240. data/sig/examples/app_all_events/view.rbs +8 -0
  241. data/sig/examples/app_all_events/view_state.rbs +15 -0
  242. data/{examples/list_demo → sig/examples/app_color_picker}/app.rbs +2 -2
  243. data/sig/examples/app_login_form/app.rbs +11 -0
  244. data/sig/examples/app_stateful_interaction/app.rbs +33 -0
  245. data/sig/examples/verify_quickstart_dsl/app.rbs +11 -0
  246. data/sig/examples/verify_quickstart_lifecycle/app.rbs +11 -0
  247. data/sig/examples/verify_readme_usage/app.rbs +11 -0
  248. data/sig/examples/widget_block_demo/app.rbs +32 -0
  249. data/sig/examples/widget_box_demo/app.rbs +11 -0
  250. data/sig/examples/widget_calendar_demo/app.rbs +11 -0
  251. data/sig/examples/widget_cell_demo/app.rbs +11 -0
  252. data/sig/examples/widget_chart_demo/app.rbs +11 -0
  253. data/{examples/gauge_demo → sig/examples/widget_gauge_demo}/app.rbs +4 -0
  254. data/sig/examples/widget_layout_split/app.rbs +10 -0
  255. data/sig/examples/widget_line_gauge_demo/app.rbs +11 -0
  256. data/sig/examples/widget_list_demo/app.rbs +12 -0
  257. data/sig/examples/widget_map_demo/app.rbs +11 -0
  258. data/sig/examples/widget_popup_demo/app.rbs +11 -0
  259. data/sig/examples/widget_ratatui_logo_demo/app.rbs +11 -0
  260. data/sig/examples/widget_ratatui_mascot_demo/app.rbs +11 -0
  261. data/sig/examples/widget_rect/app.rbs +12 -0
  262. data/sig/examples/widget_render/app.rbs +10 -0
  263. data/sig/examples/widget_rich_text/app.rbs +11 -0
  264. data/sig/examples/widget_scroll_text/app.rbs +11 -0
  265. data/sig/examples/widget_scrollbar_demo/app.rbs +11 -0
  266. data/sig/examples/widget_sparkline_demo/app.rbs +10 -0
  267. data/{examples → sig/examples}/widget_style_colors/app.rbs +1 -1
  268. data/sig/examples/widget_table_demo/app.rbs +11 -0
  269. data/sig/examples/widget_text_width/app.rbs +10 -0
  270. data/sig/ratatui_ruby/event.rbs +11 -1
  271. data/sig/ratatui_ruby/frame.rbs +11 -0
  272. data/sig/ratatui_ruby/list_state.rbs +13 -0
  273. data/sig/ratatui_ruby/ratatui_ruby.rbs +5 -4
  274. data/sig/ratatui_ruby/schema/bar_chart/bar.rbs +3 -3
  275. data/sig/ratatui_ruby/schema/draw.rbs +4 -0
  276. data/sig/ratatui_ruby/schema/gauge.rbs +2 -2
  277. data/sig/ratatui_ruby/schema/layout.rbs +1 -1
  278. data/sig/ratatui_ruby/schema/line_gauge.rbs +2 -2
  279. data/sig/ratatui_ruby/schema/list.rbs +4 -2
  280. data/sig/ratatui_ruby/schema/list_item.rbs +10 -0
  281. data/sig/ratatui_ruby/schema/rect.rbs +3 -0
  282. data/sig/ratatui_ruby/schema/style.rbs +3 -3
  283. data/sig/ratatui_ruby/schema/table.rbs +3 -1
  284. data/sig/ratatui_ruby/schema/text.rbs +8 -6
  285. data/sig/ratatui_ruby/scrollbar_state.rbs +18 -0
  286. data/sig/ratatui_ruby/session.rbs +107 -0
  287. data/sig/ratatui_ruby/table_state.rbs +15 -0
  288. data/sig/ratatui_ruby/test_helper/event_injection.rbs +16 -0
  289. data/sig/ratatui_ruby/test_helper/snapshot.rbs +12 -0
  290. data/sig/ratatui_ruby/test_helper/style_assertions.rbs +64 -0
  291. data/sig/ratatui_ruby/test_helper/terminal.rbs +14 -0
  292. data/sig/ratatui_ruby/test_helper/test_doubles.rbs +22 -0
  293. data/sig/ratatui_ruby/test_helper.rbs +5 -4
  294. data/tasks/autodoc/examples.rb +79 -0
  295. data/tasks/autodoc/inventory.rb +63 -0
  296. data/tasks/autodoc/member.rb +56 -0
  297. data/tasks/autodoc/name.rb +19 -0
  298. data/tasks/autodoc/notice.rb +26 -0
  299. data/tasks/autodoc/rbs.rb +38 -0
  300. data/tasks/autodoc/rdoc.rb +45 -0
  301. data/tasks/autodoc.rake +53 -0
  302. data/tasks/bump/changelog.rb +3 -3
  303. data/tasks/bump/history.rb +2 -2
  304. data/tasks/bump/links.rb +67 -0
  305. data/tasks/doc.rake +600 -6
  306. data/tasks/example_viewer.html.erb +172 -0
  307. data/tasks/lint.rake +8 -4
  308. data/tasks/resources/index.html.erb +6 -0
  309. data/tasks/sourcehut.rake +70 -30
  310. data/tasks/terminal_preview/app_screenshot.rb +14 -6
  311. data/tasks/terminal_preview/crash_report.rb +7 -9
  312. data/tasks/terminal_preview/launcher_script.rb +4 -6
  313. data/tasks/terminal_preview/preview_collection.rb +4 -6
  314. data/tasks/terminal_preview/safety_confirmation.rb +3 -5
  315. data/tasks/terminal_preview/saved_screenshot.rb +10 -11
  316. data/tasks/terminal_preview/terminal_window.rb +7 -9
  317. data/tasks/test.rake +1 -1
  318. data/tasks/website/index_page.rb +3 -3
  319. data/tasks/website/version.rb +10 -10
  320. data/tasks/website/version_menu.rb +10 -12
  321. data/tasks/website/versioned_documentation.rb +49 -17
  322. data/tasks/website/website.rb +6 -8
  323. data/tasks/website.rake +4 -4
  324. metadata +232 -127
  325. data/LICENSES/BSD-2-Clause.txt +0 -9
  326. data/doc/contributors/better_dx.md +0 -543
  327. data/doc/contributors/example_analysis.md +0 -82
  328. data/doc/images/all_events.png +0 -0
  329. data/doc/images/block_padding.png +0 -0
  330. data/doc/images/block_titles.png +0 -0
  331. data/doc/images/box_demo.png +0 -0
  332. data/doc/images/calendar_demo.png +0 -0
  333. data/doc/images/cell_demo.png +0 -0
  334. data/doc/images/chart_demo.png +0 -0
  335. data/doc/images/flex_layout.png +0 -0
  336. data/doc/images/gauge_demo.png +0 -0
  337. data/doc/images/line_gauge_demo.png +0 -0
  338. data/doc/images/list_demo.png +0 -0
  339. data/doc/images/list_styles.png +0 -0
  340. data/doc/images/login_form.png +0 -0
  341. data/doc/images/quickstart_dsl.png +0 -0
  342. data/doc/images/quickstart_lifecycle.png +0 -0
  343. data/doc/images/readme_usage.png +0 -0
  344. data/doc/images/rich_text.png +0 -0
  345. data/doc/images/scroll_text.png +0 -0
  346. data/doc/images/scrollbar_demo.png +0 -0
  347. data/doc/images/sparkline_demo.png +0 -0
  348. data/doc/images/table_flex.png +0 -0
  349. data/doc/images/table_select.png +0 -0
  350. data/examples/all_events/app.rb +0 -169
  351. data/examples/all_events/app.rbs +0 -7
  352. data/examples/all_events/test_app.rb +0 -139
  353. data/examples/analytics/app.rb +0 -258
  354. data/examples/analytics/app.rbs +0 -7
  355. data/examples/analytics/test_app.rb +0 -132
  356. data/examples/block_padding/app.rb +0 -63
  357. data/examples/block_padding/app.rbs +0 -7
  358. data/examples/block_padding/test_app.rb +0 -31
  359. data/examples/block_titles/app.rb +0 -61
  360. data/examples/block_titles/app.rbs +0 -7
  361. data/examples/block_titles/test_app.rb +0 -34
  362. data/examples/box_demo/app.rbs +0 -7
  363. data/examples/box_demo/test_app.rb +0 -88
  364. data/examples/calendar_demo/app.rb +0 -101
  365. data/examples/calendar_demo/app.rbs +0 -7
  366. data/examples/calendar_demo/test_app.rb +0 -108
  367. data/examples/cell_demo/app.rb +0 -108
  368. data/examples/cell_demo/app.rbs +0 -7
  369. data/examples/cell_demo/test_app.rb +0 -36
  370. data/examples/chart_demo/app.rb +0 -203
  371. data/examples/chart_demo/app.rbs +0 -7
  372. data/examples/chart_demo/test_app.rb +0 -102
  373. data/examples/custom_widget/app.rb +0 -51
  374. data/examples/custom_widget/app.rbs +0 -7
  375. data/examples/custom_widget/test_app.rb +0 -30
  376. data/examples/flex_layout/app.rb +0 -156
  377. data/examples/flex_layout/app.rbs +0 -7
  378. data/examples/flex_layout/test_app.rb +0 -65
  379. data/examples/gauge_demo/app.rb +0 -182
  380. data/examples/gauge_demo/test_app.rb +0 -120
  381. data/examples/hit_test/app.rb +0 -175
  382. data/examples/hit_test/app.rbs +0 -7
  383. data/examples/hit_test/test_app.rb +0 -102
  384. data/examples/line_gauge_demo/app.rb +0 -190
  385. data/examples/line_gauge_demo/app.rbs +0 -7
  386. data/examples/line_gauge_demo/test_app.rb +0 -129
  387. data/examples/list_demo/app.rb +0 -253
  388. data/examples/list_demo/test_app.rb +0 -237
  389. data/examples/list_styles/app.rb +0 -140
  390. data/examples/list_styles/app.rbs +0 -7
  391. data/examples/list_styles/test_app.rb +0 -157
  392. data/examples/login_form/app.rbs +0 -7
  393. data/examples/login_form/test_app.rb +0 -51
  394. data/examples/map_demo/app.rbs +0 -7
  395. data/examples/map_demo/test_app.rb +0 -149
  396. data/examples/mouse_events/app.rb +0 -97
  397. data/examples/mouse_events/app.rbs +0 -7
  398. data/examples/mouse_events/test_app.rb +0 -53
  399. data/examples/popup_demo/app.rb +0 -103
  400. data/examples/popup_demo/app.rbs +0 -7
  401. data/examples/popup_demo/test_app.rb +0 -54
  402. data/examples/quickstart_dsl/app.rbs +0 -7
  403. data/examples/quickstart_dsl/test_app.rb +0 -29
  404. data/examples/quickstart_lifecycle/app.rb +0 -39
  405. data/examples/quickstart_lifecycle/app.rbs +0 -7
  406. data/examples/quickstart_lifecycle/test_app.rb +0 -29
  407. data/examples/ratatui_logo_demo/app.rb +0 -79
  408. data/examples/ratatui_logo_demo/app.rbs +0 -7
  409. data/examples/ratatui_logo_demo/test_app.rb +0 -51
  410. data/examples/ratatui_mascot_demo/app.rb +0 -84
  411. data/examples/ratatui_mascot_demo/app.rbs +0 -7
  412. data/examples/ratatui_mascot_demo/test_app.rb +0 -47
  413. data/examples/readme_usage/app.rb +0 -29
  414. data/examples/readme_usage/app.rbs +0 -7
  415. data/examples/readme_usage/test_app.rb +0 -29
  416. data/examples/rich_text/app.rb +0 -141
  417. data/examples/rich_text/app.rbs +0 -7
  418. data/examples/rich_text/test_app.rb +0 -166
  419. data/examples/scroll_text/app.rb +0 -103
  420. data/examples/scroll_text/app.rbs +0 -7
  421. data/examples/scroll_text/test_app.rb +0 -110
  422. data/examples/scrollbar_demo/app.rb +0 -143
  423. data/examples/scrollbar_demo/app.rbs +0 -7
  424. data/examples/scrollbar_demo/test_app.rb +0 -77
  425. data/examples/sparkline_demo/app.rb +0 -240
  426. data/examples/sparkline_demo/test_app.rb +0 -107
  427. data/examples/table_flex/app.rb +0 -65
  428. data/examples/table_flex/app.rbs +0 -7
  429. data/examples/table_flex/test_app.rb +0 -36
  430. data/examples/table_select/app.rb +0 -198
  431. data/examples/table_select/app.rbs +0 -7
  432. data/examples/table_select/test_app.rb +0 -180
  433. data/examples/widget_style_colors/test_app.rb +0 -48
  434. data/tasks/bump/comparison_links.rb +0 -41
  435. /data/doc/images/{analytics.png → app_analytics.png} +0 -0
  436. /data/doc/images/{custom_widget.png → app_custom_widget.png} +0 -0
  437. /data/doc/images/{mouse_events.png → app_mouse_events.png} +0 -0
  438. /data/doc/images/{map_demo.png → widget_map_demo.png} +0 -0
  439. /data/doc/images/{popup_demo.png → widget_popup_demo.png} +0 -0
  440. /data/doc/images/{hit_test.png → widget_rect.png} +0 -0
  441. /data/{doc/images/ratatui_logo_demo.png → exe/.gitkeep} +0 -0
@@ -0,0 +1,482 @@
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: _text_width
30
+ # :call-seq: _text_width(*args, **kwargs, &block)
31
+ #
32
+ # Delegates to RatatuiRuby._text_width.
33
+ #
34
+ # :method: clear_events
35
+ # :call-seq: clear_events(*args, **kwargs, &block)
36
+ #
37
+ # Delegates to RatatuiRuby.clear_events.
38
+ #
39
+ # :method: draw
40
+ # :call-seq: draw(*args, **kwargs, &block)
41
+ #
42
+ # Delegates to RatatuiRuby.draw.
43
+ #
44
+ # :method: experimental_warnings
45
+ # :call-seq: experimental_warnings(*args, **kwargs, &block)
46
+ #
47
+ # Delegates to RatatuiRuby.experimental_warnings.
48
+ #
49
+ # :method: experimental_warnings=
50
+ # :call-seq: experimental_warnings=(*args, **kwargs, &block)
51
+ #
52
+ # Delegates to RatatuiRuby.experimental_warnings=.
53
+ #
54
+ # :method: get_buffer_content
55
+ # :call-seq: get_buffer_content(*args, **kwargs, &block)
56
+ #
57
+ # Delegates to RatatuiRuby.get_buffer_content.
58
+ #
59
+ # :method: get_cell_at
60
+ # :call-seq: get_cell_at(*args, **kwargs, &block)
61
+ #
62
+ # Delegates to RatatuiRuby.get_cell_at.
63
+ #
64
+ # :method: get_cursor_position
65
+ # :call-seq: get_cursor_position(*args, **kwargs, &block)
66
+ #
67
+ # Delegates to RatatuiRuby.get_cursor_position.
68
+ #
69
+ # :method: init_terminal
70
+ # :call-seq: init_terminal(*args, **kwargs, &block)
71
+ #
72
+ # Delegates to RatatuiRuby.init_terminal.
73
+ #
74
+ # :method: init_test_terminal
75
+ # :call-seq: init_test_terminal(*args, **kwargs, &block)
76
+ #
77
+ # Delegates to RatatuiRuby.init_test_terminal.
78
+ #
79
+ # :method: inject_test_event
80
+ # :call-seq: inject_test_event(*args, **kwargs, &block)
81
+ #
82
+ # Delegates to RatatuiRuby.inject_test_event.
83
+ #
84
+ # :method: poll_event
85
+ # :call-seq: poll_event(*args, **kwargs, &block)
86
+ #
87
+ # Delegates to RatatuiRuby.poll_event.
88
+ #
89
+ # :method: resize_terminal
90
+ # :call-seq: resize_terminal(*args, **kwargs, &block)
91
+ #
92
+ # Delegates to RatatuiRuby.resize_terminal.
93
+ #
94
+ # :method: restore_terminal
95
+ # :call-seq: restore_terminal(*args, **kwargs, &block)
96
+ #
97
+ # Delegates to RatatuiRuby.restore_terminal.
98
+ #
99
+ # :method: run
100
+ # :call-seq: run(*args, **kwargs, &block)
101
+ #
102
+ # Delegates to RatatuiRuby.run.
103
+ #
104
+ # :method: warn_experimental_feature
105
+ # :call-seq: warn_experimental_feature(*args, **kwargs, &block)
106
+ #
107
+ # Delegates to RatatuiRuby.warn_experimental_feature.
108
+ #
109
+ # == Widget Factories
110
+ #
111
+ # :method: axis
112
+ # :call-seq: axis(*args, **kwargs, &block)
113
+ #
114
+ # Factory for RatatuiRuby::Axis.new.
115
+ #
116
+ # :method: bar_chart
117
+ # :call-seq: bar_chart(*args, **kwargs, &block)
118
+ #
119
+ # Factory for RatatuiRuby::BarChart.new.
120
+ #
121
+ # :method: bar_chart_bar
122
+ # :call-seq: bar_chart_bar(*args, **kwargs, &block)
123
+ #
124
+ # Factory for RatatuiRuby::BarChart::Bar.new.
125
+ #
126
+ # :method: bar_chart_bar_group
127
+ # :call-seq: bar_chart_bar_group(*args, **kwargs, &block)
128
+ #
129
+ # Factory for RatatuiRuby::BarChart::BarGroup.new.
130
+ #
131
+ # :method: block
132
+ # :call-seq: block(*args, **kwargs, &block)
133
+ #
134
+ # Factory for RatatuiRuby::Block.new.
135
+ #
136
+ # :method: calendar
137
+ # :call-seq: calendar(*args, **kwargs, &block)
138
+ #
139
+ # Factory for RatatuiRuby::Calendar.new.
140
+ #
141
+ # :method: canvas
142
+ # :call-seq: canvas(*args, **kwargs, &block)
143
+ #
144
+ # Factory for RatatuiRuby::Canvas.new.
145
+ #
146
+ # :method: cell
147
+ # :call-seq: cell(*args, **kwargs, &block)
148
+ #
149
+ # Factory for RatatuiRuby::Cell.new.
150
+ #
151
+ # :method: cell_char
152
+ # :call-seq: cell_char(*args, **kwargs, &block)
153
+ #
154
+ # Helper for RatatuiRuby::Cell.char.
155
+ #
156
+ # :method: cell_default
157
+ # :call-seq: cell_default(*args, **kwargs, &block)
158
+ #
159
+ # Helper for RatatuiRuby::Cell.default.
160
+ #
161
+ # :method: cell_empty
162
+ # :call-seq: cell_empty(*args, **kwargs, &block)
163
+ #
164
+ # Helper for RatatuiRuby::Cell.empty.
165
+ #
166
+ # :method: cell_symbol
167
+ # :call-seq: cell_symbol(*args, **kwargs, &block)
168
+ #
169
+ # Helper for RatatuiRuby::Cell.symbol.
170
+ #
171
+ # :method: center
172
+ # :call-seq: center(*args, **kwargs, &block)
173
+ #
174
+ # Factory for RatatuiRuby::Center.new.
175
+ #
176
+ # :method: chart
177
+ # :call-seq: chart(*args, **kwargs, &block)
178
+ #
179
+ # Factory for RatatuiRuby::Chart.new.
180
+ #
181
+ # :method: clear
182
+ # :call-seq: clear(*args, **kwargs, &block)
183
+ #
184
+ # Factory for RatatuiRuby::Clear.new.
185
+ #
186
+ # :method: constraint
187
+ # :call-seq: constraint(*args, **kwargs, &block)
188
+ #
189
+ # Factory for RatatuiRuby::Constraint.new.
190
+ #
191
+ # :method: constraint_fill
192
+ # :call-seq: constraint_fill(*args, **kwargs, &block)
193
+ #
194
+ # Helper for RatatuiRuby::Constraint.fill.
195
+ #
196
+ # :method: constraint_length
197
+ # :call-seq: constraint_length(*args, **kwargs, &block)
198
+ #
199
+ # Helper for RatatuiRuby::Constraint.length.
200
+ #
201
+ # :method: constraint_max
202
+ # :call-seq: constraint_max(*args, **kwargs, &block)
203
+ #
204
+ # Helper for RatatuiRuby::Constraint.max.
205
+ #
206
+ # :method: constraint_min
207
+ # :call-seq: constraint_min(*args, **kwargs, &block)
208
+ #
209
+ # Helper for RatatuiRuby::Constraint.min.
210
+ #
211
+ # :method: constraint_percentage
212
+ # :call-seq: constraint_percentage(*args, **kwargs, &block)
213
+ #
214
+ # Helper for RatatuiRuby::Constraint.percentage.
215
+ #
216
+ # :method: constraint_ratio
217
+ # :call-seq: constraint_ratio(*args, **kwargs, &block)
218
+ #
219
+ # Helper for RatatuiRuby::Constraint.ratio.
220
+ #
221
+ # :method: cursor
222
+ # :call-seq: cursor(*args, **kwargs, &block)
223
+ #
224
+ # Factory for RatatuiRuby::Cursor.new.
225
+ #
226
+ # :method: dataset
227
+ # :call-seq: dataset(*args, **kwargs, &block)
228
+ #
229
+ # Factory for RatatuiRuby::Dataset.new.
230
+ #
231
+ # :method: draw_cell
232
+ # :call-seq: draw_cell(*args, **kwargs, &block)
233
+ #
234
+ # Helper for RatatuiRuby::Draw.cell.
235
+ #
236
+ # :method: draw_string
237
+ # :call-seq: draw_string(*args, **kwargs, &block)
238
+ #
239
+ # Helper for RatatuiRuby::Draw.string.
240
+ #
241
+ # :method: draw_cell_cmd
242
+ # :call-seq: draw_cell_cmd(*args, **kwargs, &block)
243
+ #
244
+ # Factory for RatatuiRuby::Draw::CellCmd.new.
245
+ #
246
+ # :method: draw_string_cmd
247
+ # :call-seq: draw_string_cmd(*args, **kwargs, &block)
248
+ #
249
+ # Factory for RatatuiRuby::Draw::StringCmd.new.
250
+ #
251
+ # :method: error
252
+ # :call-seq: error(*args, **kwargs, &block)
253
+ #
254
+ # Factory for RatatuiRuby::Error.new.
255
+ #
256
+ # :method: error_safety
257
+ # :call-seq: error_safety(*args, **kwargs, &block)
258
+ #
259
+ # Factory for RatatuiRuby::Error::Safety.new.
260
+ #
261
+ # :method: error_terminal
262
+ # :call-seq: error_terminal(*args, **kwargs, &block)
263
+ #
264
+ # Factory for RatatuiRuby::Error::Terminal.new.
265
+ #
266
+ # :method: event
267
+ # :call-seq: event(*args, **kwargs, &block)
268
+ #
269
+ # Factory for RatatuiRuby::Event.new.
270
+ #
271
+ # :method: event_focus_gained
272
+ # :call-seq: event_focus_gained(*args, **kwargs, &block)
273
+ #
274
+ # Factory for RatatuiRuby::Event::FocusGained.new.
275
+ #
276
+ # :method: event_focus_lost
277
+ # :call-seq: event_focus_lost(*args, **kwargs, &block)
278
+ #
279
+ # Factory for RatatuiRuby::Event::FocusLost.new.
280
+ #
281
+ # :method: event_key
282
+ # :call-seq: event_key(*args, **kwargs, &block)
283
+ #
284
+ # Factory for RatatuiRuby::Event::Key.new.
285
+ #
286
+ # :method: event_mouse
287
+ # :call-seq: event_mouse(*args, **kwargs, &block)
288
+ #
289
+ # Factory for RatatuiRuby::Event::Mouse.new.
290
+ #
291
+ # :method: event_none
292
+ # :call-seq: event_none(*args, **kwargs, &block)
293
+ #
294
+ # Factory for RatatuiRuby::Event::None.new.
295
+ #
296
+ # :method: event_paste
297
+ # :call-seq: event_paste(*args, **kwargs, &block)
298
+ #
299
+ # Factory for RatatuiRuby::Event::Paste.new.
300
+ #
301
+ # :method: event_resize
302
+ # :call-seq: event_resize(*args, **kwargs, &block)
303
+ #
304
+ # Factory for RatatuiRuby::Event::Resize.new.
305
+ #
306
+ # :method: frame
307
+ # :call-seq: frame(*args, **kwargs, &block)
308
+ #
309
+ # Factory for RatatuiRuby::Frame.new.
310
+ #
311
+ # :method: gauge
312
+ # :call-seq: gauge(*args, **kwargs, &block)
313
+ #
314
+ # Factory for RatatuiRuby::Gauge.new.
315
+ #
316
+ # :method: layout
317
+ # :call-seq: layout(*args, **kwargs, &block)
318
+ #
319
+ # Factory for RatatuiRuby::Layout.new.
320
+ #
321
+ # :method: layout_split
322
+ # :call-seq: layout_split(*args, **kwargs, &block)
323
+ #
324
+ # Helper for RatatuiRuby::Layout.split.
325
+ #
326
+ # :method: line_chart
327
+ # :call-seq: line_chart(*args, **kwargs, &block)
328
+ #
329
+ # Factory for RatatuiRuby::LineChart.new.
330
+ #
331
+ # :method: line_gauge
332
+ # :call-seq: line_gauge(*args, **kwargs, &block)
333
+ #
334
+ # Factory for RatatuiRuby::LineGauge.new.
335
+ #
336
+ # :method: list
337
+ # :call-seq: list(*args, **kwargs, &block)
338
+ #
339
+ # Factory for RatatuiRuby::List.new.
340
+ #
341
+ # :method: list_item
342
+ # :call-seq: list_item(*args, **kwargs, &block)
343
+ #
344
+ # Factory for RatatuiRuby::ListItem.new.
345
+ #
346
+ # :method: list_state
347
+ # :call-seq: list_state(*args, **kwargs, &block)
348
+ #
349
+ # Factory for RatatuiRuby::ListState.new.
350
+ #
351
+ # :method: list_state_new
352
+ # :call-seq: list_state_new(*args, **kwargs, &block)
353
+ #
354
+ # Helper for RatatuiRuby::ListState.new.
355
+ #
356
+ # :method: overlay
357
+ # :call-seq: overlay(*args, **kwargs, &block)
358
+ #
359
+ # Factory for RatatuiRuby::Overlay.new.
360
+ #
361
+ # :method: paragraph
362
+ # :call-seq: paragraph(*args, **kwargs, &block)
363
+ #
364
+ # Factory for RatatuiRuby::Paragraph.new.
365
+ #
366
+ # :method: paragraph_new
367
+ # :call-seq: paragraph_new(*args, **kwargs, &block)
368
+ #
369
+ # Helper for RatatuiRuby::Paragraph.new.
370
+ #
371
+ # :method: ratatui_logo
372
+ # :call-seq: ratatui_logo(*args, **kwargs, &block)
373
+ #
374
+ # Factory for RatatuiRuby::RatatuiLogo.new.
375
+ #
376
+ # :method: ratatui_mascot
377
+ # :call-seq: ratatui_mascot(*args, **kwargs, &block)
378
+ #
379
+ # Factory for RatatuiRuby::RatatuiMascot.new.
380
+ #
381
+ # :method: rect
382
+ # :call-seq: rect(*args, **kwargs, &block)
383
+ #
384
+ # Factory for RatatuiRuby::Rect.new.
385
+ #
386
+ # :method: scrollbar
387
+ # :call-seq: scrollbar(*args, **kwargs, &block)
388
+ #
389
+ # Factory for RatatuiRuby::Scrollbar.new.
390
+ #
391
+ # :method: scrollbar_state
392
+ # :call-seq: scrollbar_state(*args, **kwargs, &block)
393
+ #
394
+ # Factory for RatatuiRuby::ScrollbarState.new.
395
+ #
396
+ # :method: scrollbar_state_new
397
+ # :call-seq: scrollbar_state_new(*args, **kwargs, &block)
398
+ #
399
+ # Helper for RatatuiRuby::ScrollbarState.new.
400
+ #
401
+ # :method: shape_circle
402
+ # :call-seq: shape_circle(*args, **kwargs, &block)
403
+ #
404
+ # Factory for RatatuiRuby::Shape::Circle.new.
405
+ #
406
+ # :method: shape_label
407
+ # :call-seq: shape_label(*args, **kwargs, &block)
408
+ #
409
+ # Factory for RatatuiRuby::Shape::Label.new.
410
+ #
411
+ # :method: shape_line
412
+ # :call-seq: shape_line(*args, **kwargs, &block)
413
+ #
414
+ # Factory for RatatuiRuby::Shape::Line.new.
415
+ #
416
+ # :method: shape_map
417
+ # :call-seq: shape_map(*args, **kwargs, &block)
418
+ #
419
+ # Factory for RatatuiRuby::Shape::Map.new.
420
+ #
421
+ # :method: shape_point
422
+ # :call-seq: shape_point(*args, **kwargs, &block)
423
+ #
424
+ # Factory for RatatuiRuby::Shape::Point.new.
425
+ #
426
+ # :method: shape_rectangle
427
+ # :call-seq: shape_rectangle(*args, **kwargs, &block)
428
+ #
429
+ # Factory for RatatuiRuby::Shape::Rectangle.new.
430
+ #
431
+ # :method: sparkline
432
+ # :call-seq: sparkline(*args, **kwargs, &block)
433
+ #
434
+ # Factory for RatatuiRuby::Sparkline.new.
435
+ #
436
+ # :method: style
437
+ # :call-seq: style(*args, **kwargs, &block)
438
+ #
439
+ # Factory for RatatuiRuby::Style.new.
440
+ #
441
+ # :method: style_default
442
+ # :call-seq: style_default(*args, **kwargs, &block)
443
+ #
444
+ # Helper for RatatuiRuby::Style.default.
445
+ #
446
+ # :method: table
447
+ # :call-seq: table(*args, **kwargs, &block)
448
+ #
449
+ # Factory for RatatuiRuby::Table.new.
450
+ #
451
+ # :method: table_state
452
+ # :call-seq: table_state(*args, **kwargs, &block)
453
+ #
454
+ # Factory for RatatuiRuby::TableState.new.
455
+ #
456
+ # :method: table_state_new
457
+ # :call-seq: table_state_new(*args, **kwargs, &block)
458
+ #
459
+ # Helper for RatatuiRuby::TableState.new.
460
+ #
461
+ # :method: tabs
462
+ # :call-seq: tabs(*args, **kwargs, &block)
463
+ #
464
+ # Factory for RatatuiRuby::Tabs.new.
465
+ #
466
+ # :method: text_width
467
+ # :call-seq: text_width(*args, **kwargs, &block)
468
+ #
469
+ # Helper for RatatuiRuby::Text.width.
470
+ #
471
+ # :method: text_line
472
+ # :call-seq: text_line(*args, **kwargs, &block)
473
+ #
474
+ # Factory for RatatuiRuby::Text::Line.new.
475
+ #
476
+ # :method: text_span
477
+ # :call-seq: text_span(*args, **kwargs, &block)
478
+ #
479
+ # Factory for RatatuiRuby::Text::Span.new.
480
+ #
481
+ end
482
+ end
@@ -12,6 +12,14 @@ module RatatuiRuby
12
12
  #
13
13
  # Use it within <tt>RatatuiRuby.run</tt> to build your interface cleanly.
14
14
  #
15
+ # == Thread/Ractor Safety
16
+ #
17
+ # Session is an *I/O handle*, not a data object. It has side effects (draw,
18
+ # poll_event) and is intentionally *not* Ractor-shareable. Caching it in
19
+ # instance variables (<tt>@tui = tui</tt>) during your application's run loop
20
+ # is fine. However, do not include it in immutable TEA Models/Messages or
21
+ # pass it to other Ractors.
22
+ #
15
23
  # == Available Methods
16
24
  #
17
25
  # The session dynamically defines factory methods for all RatatuiRuby constants.
@@ -40,6 +48,7 @@ module RatatuiRuby
40
48
  #
41
49
  # * <tt>text_span(...)</tt> -> <tt>RatatuiRuby::Text::Span.new(...)</tt>
42
50
  # * <tt>text_line(...)</tt> -> <tt>RatatuiRuby::Text::Line.new(...)</tt>
51
+ # * <tt>text_width(string)</tt> -> <tt>RatatuiRuby::Text.width(string)</tt>
43
52
  #
44
53
  # === Examples
45
54
  #
@@ -105,40 +114,63 @@ module RatatuiRuby
105
114
  end
106
115
  end
107
116
 
108
- # Wrap classes as snake_case factories
117
+ # Wrap classes and modules as snake_case factories
109
118
  RatatuiRuby.constants.each do |const_name|
110
119
  next if const_name == :Buffer
111
120
 
112
- klass = RatatuiRuby.const_get(const_name)
113
- next unless klass.is_a?(Class)
121
+ const = RatatuiRuby.const_get(const_name)
122
+ next unless const.is_a?(Module) # Class is a Module, so this catches both
114
123
 
115
- method_name = const_name.to_s
116
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
117
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
118
- .downcase
124
+ # 1. Top-level factories (for Classes only)
125
+ # e.g. RatatuiRuby::Paragraph -> tui.paragraph(...)
126
+ if const.is_a?(Class)
127
+ method_name = const_name.to_s
128
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
129
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
130
+ .downcase
119
131
 
120
- define_method(method_name) do |*args, **kwargs, &block|
121
- klass.new(*args, **kwargs, &block)
132
+ define_method(method_name) do |*args, **kwargs, &block|
133
+ const.new(*args, **kwargs, &block)
134
+ end
122
135
  end
123
- end
124
136
 
125
- # Wrap nested module classes with prefixed names (e.g., shape_line, text_span)
126
- { Shape: :shape, Text: :text }.each do |mod_name, prefix|
127
- next unless RatatuiRuby.const_defined?(mod_name)
137
+ # 2. Singleton Method Helpers (for both Classes and Modules)
138
+ # e.g. Layout.split -> layout_split
139
+ # e.g. Text.width -> text_width
140
+ const.singleton_methods(false).each do |class_method|
141
+ parent_prefix = const_name.to_s
142
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
143
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
144
+ .downcase
145
+
146
+ session_method_name = "#{parent_prefix}_#{class_method}"
147
+
148
+ define_method(session_method_name) do |*args, **kwargs, &block|
149
+ const.public_send(class_method, *args, **kwargs, &block)
150
+ end
151
+ end
152
+
153
+ # 3. Nested Class Factories (for both Modules and Classes)
154
+ # e.g. RatatuiRuby::Text::Span -> tui.text_span(...)
155
+ # e.g. RatatuiRuby::Shape::Line -> tui.shape_line(...)
156
+ const.constants.each do |child_name|
157
+ child = const.const_get(child_name)
158
+ next unless child.is_a?(Class)
159
+
160
+ parent_prefix = const_name.to_s
161
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
162
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
163
+ .downcase
128
164
 
129
- mod = RatatuiRuby.const_get(mod_name)
130
- mod.constants.each do |const_name|
131
- klass = mod.const_get(const_name)
132
- next unless klass.is_a?(Class)
165
+ child_suffix = child_name.to_s
166
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
167
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
168
+ .downcase
133
169
 
134
- class_snake = const_name.to_s
135
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
136
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
137
- .downcase
138
- method_name = "#{prefix}_#{class_snake}"
170
+ method_name = "#{parent_prefix}_#{child_suffix}"
139
171
 
140
172
  define_method(method_name) do |*args, **kwargs, &block|
141
- klass.new(*args, **kwargs, &block)
173
+ child.new(*args, **kwargs, &block)
142
174
  end
143
175
  end
144
176
  end
@@ -0,0 +1,90 @@
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
+ # Mutable state object for Table widgets.
8
+ #
9
+ # When using {Frame#render_stateful_widget}, the State object is the
10
+ # *single source of truth* for selection and scroll offset. Widget
11
+ # properties (+selected_row+, +selected_column+, +offset+) are *ignored*
12
+ # in stateful mode.
13
+ #
14
+ # == Example
15
+ #
16
+ # @table_state = RatatuiRuby::TableState.new
17
+ # @table_state.select(1) # Select second row
18
+ # @table_state.select_column(0) # Select first column
19
+ #
20
+ # RatatuiRuby.draw do |frame|
21
+ # table = RatatuiRuby::Table.new(rows: [...], widths: [...])
22
+ # frame.render_stateful_widget(table, frame.area, @table_state)
23
+ # end
24
+ #
25
+ class TableState
26
+ ##
27
+ # :method: new
28
+ # :call-seq: new(selected = nil) -> TableState
29
+ #
30
+ # Creates a new TableState with optional initial row selection.
31
+ #
32
+ # (Native method implemented in Rust)
33
+
34
+ ##
35
+ # :method: select
36
+ # :call-seq: select(index) -> nil
37
+ #
38
+ # Sets the selected row index. Pass +nil+ to deselect.
39
+ #
40
+ # (Native method implemented in Rust)
41
+
42
+ ##
43
+ # :method: selected
44
+ # :call-seq: selected() -> Integer or nil
45
+ #
46
+ # Returns the currently selected row index.
47
+ #
48
+ # (Native method implemented in Rust)
49
+
50
+ ##
51
+ # :method: select_column
52
+ # :call-seq: select_column(index) -> nil
53
+ #
54
+ # Sets the selected column index. Pass +nil+ to deselect.
55
+ #
56
+ # (Native method implemented in Rust)
57
+
58
+ ##
59
+ # :method: selected_column
60
+ # :call-seq: selected_column() -> Integer or nil
61
+ #
62
+ # Returns the currently selected column index.
63
+ #
64
+ # (Native method implemented in Rust)
65
+
66
+ ##
67
+ # :method: offset
68
+ # :call-seq: offset() -> Integer
69
+ #
70
+ # Returns the current scroll offset.
71
+ #
72
+ # (Native method implemented in Rust)
73
+
74
+ ##
75
+ # :method: scroll_down_by
76
+ # :call-seq: scroll_down_by(n) -> nil
77
+ #
78
+ # Scrolls down by +n+ rows.
79
+ #
80
+ # (Native method implemented in Rust)
81
+
82
+ ##
83
+ # :method: scroll_up_by
84
+ # :call-seq: scroll_up_by(n) -> nil
85
+ #
86
+ # Scrolls up by +n+ rows.
87
+ #
88
+ # (Native method implemented in Rust)
89
+ end
90
+ end