ratatui_ruby 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) 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 +87 -171
  7. data/CHANGELOG.md +38 -1
  8. data/README.md +8 -3
  9. data/REUSE.toml +20 -0
  10. data/doc/application_architecture.md +105 -45
  11. data/doc/application_testing.md +5 -3
  12. data/doc/contributors/design/ruby_frontend.md +9 -5
  13. data/doc/contributors/developing_examples.md +76 -18
  14. data/doc/contributors/documentation_style.md +7 -0
  15. data/doc/contributors/index.md +2 -0
  16. data/doc/event_handling.md +10 -4
  17. data/doc/images/app_all_events.png +0 -0
  18. data/doc/images/app_color_picker.png +0 -0
  19. data/doc/images/verify_readme_usage.png +0 -0
  20. data/doc/images/widget_barchart_demo.png +0 -0
  21. data/doc/images/widget_block_padding.png +0 -0
  22. data/doc/images/widget_block_titles.png +0 -0
  23. data/doc/images/widget_box_demo.png +0 -0
  24. data/doc/images/widget_calendar_demo.png +0 -0
  25. data/doc/images/widget_cell_demo.png +0 -0
  26. data/doc/images/widget_chart_demo.png +0 -0
  27. data/doc/images/widget_gauge_demo.png +0 -0
  28. data/doc/images/widget_layout_split.png +0 -0
  29. data/doc/images/widget_line_gauge_demo.png +0 -0
  30. data/doc/images/widget_list_demo.png +0 -0
  31. data/doc/images/widget_ratatui_logo_demo.png +0 -0
  32. data/doc/images/widget_ratatui_mascot_demo.png +0 -0
  33. data/doc/images/widget_render.png +0 -0
  34. data/doc/images/widget_scrollbar_demo.png +0 -0
  35. data/doc/images/widget_sparkline_demo.png +0 -0
  36. data/doc/images/widget_style_colors.png +0 -0
  37. data/doc/images/widget_table_flex.png +0 -0
  38. data/doc/images/widget_tabs_demo.png +0 -0
  39. data/doc/interactive_design.md +25 -30
  40. data/doc/quickstart.md +147 -120
  41. data/examples/app_all_events/README.md +81 -0
  42. data/examples/app_all_events/app.rb +93 -0
  43. data/examples/app_all_events/model/event_color_cycle.rb +41 -0
  44. data/examples/app_all_events/model/event_entry.rb +75 -0
  45. data/examples/app_all_events/model/events.rb +180 -0
  46. data/examples/app_all_events/model/highlight.rb +57 -0
  47. data/examples/app_all_events/model/timestamp.rb +54 -0
  48. data/examples/app_all_events/test/snapshots/after_focus_lost.txt +24 -0
  49. data/examples/app_all_events/test/snapshots/after_focus_regained.txt +24 -0
  50. data/examples/app_all_events/test/snapshots/after_horizontal_resize.txt +24 -0
  51. data/examples/app_all_events/test/snapshots/after_key_a.txt +24 -0
  52. data/examples/app_all_events/test/snapshots/after_key_ctrl_x.txt +24 -0
  53. data/examples/app_all_events/test/snapshots/after_mouse_click.txt +24 -0
  54. data/examples/app_all_events/test/snapshots/after_mouse_drag.txt +24 -0
  55. data/examples/app_all_events/test/snapshots/after_multiple_events.txt +24 -0
  56. data/examples/app_all_events/test/snapshots/after_paste.txt +24 -0
  57. data/examples/app_all_events/test/snapshots/after_resize.txt +24 -0
  58. data/examples/app_all_events/test/snapshots/after_right_click.txt +24 -0
  59. data/examples/app_all_events/test/snapshots/after_vertical_resize.txt +24 -0
  60. data/examples/app_all_events/test/snapshots/initial_state.txt +24 -0
  61. data/examples/app_all_events/view/app_view.rb +78 -0
  62. data/examples/app_all_events/view/controls_view.rb +50 -0
  63. data/examples/app_all_events/view/counts_view.rb +55 -0
  64. data/examples/app_all_events/view/live_view.rb +69 -0
  65. data/examples/app_all_events/view/log_view.rb +60 -0
  66. data/examples/app_all_events/view.rb +7 -0
  67. data/examples/app_all_events/view_state.rb +42 -0
  68. data/examples/app_color_picker/README.md +94 -0
  69. data/examples/app_color_picker/app.rb +112 -0
  70. data/examples/app_color_picker/clipboard.rb +84 -0
  71. data/examples/app_color_picker/color.rb +191 -0
  72. data/examples/app_color_picker/copy_dialog.rb +170 -0
  73. data/examples/app_color_picker/harmony.rb +56 -0
  74. data/examples/app_color_picker/input.rb +142 -0
  75. data/examples/app_color_picker/palette.rb +80 -0
  76. data/examples/app_color_picker/scene.rb +201 -0
  77. data/examples/{login_form → app_login_form}/app.rb +39 -42
  78. data/examples/{map_demo → app_map_demo}/app.rb +24 -21
  79. data/examples/{table_select → app_table_select}/app.rb +68 -65
  80. data/examples/{quickstart_dsl → verify_quickstart_dsl}/app.rb +15 -6
  81. data/examples/verify_quickstart_layout/app.rb +69 -0
  82. data/examples/{quickstart_lifecycle → verify_quickstart_lifecycle}/app.rb +19 -10
  83. data/examples/verify_readme_usage/app.rb +34 -0
  84. data/examples/widget_barchart_demo/app.rb +238 -0
  85. data/examples/{block_padding → widget_block_padding}/app.rb +17 -13
  86. data/examples/{block_titles → widget_block_titles}/app.rb +25 -17
  87. data/examples/{box_demo → widget_box_demo}/app.rb +99 -65
  88. data/examples/widget_calendar_demo/app.rb +109 -0
  89. data/examples/widget_cell_demo/app.rb +104 -0
  90. data/examples/widget_chart_demo/app.rb +213 -0
  91. data/examples/widget_gauge_demo/app.rb +212 -0
  92. data/examples/widget_layout_split/app.rb +246 -0
  93. data/examples/widget_line_gauge_demo/app.rb +217 -0
  94. data/examples/widget_list_demo/app.rb +382 -0
  95. data/examples/widget_list_styles/app.rb +141 -0
  96. data/examples/widget_popup_demo/app.rb +104 -0
  97. data/examples/widget_ratatui_logo_demo/app.rb +103 -0
  98. data/examples/widget_ratatui_mascot_demo/app.rb +93 -0
  99. data/examples/widget_rect/app.rb +205 -0
  100. data/examples/widget_render/app.rb +184 -0
  101. data/examples/widget_rich_text/app.rb +137 -0
  102. data/examples/widget_scroll_text/app.rb +108 -0
  103. data/examples/widget_scrollbar_demo/app.rb +153 -0
  104. data/examples/widget_sparkline_demo/app.rb +274 -0
  105. data/examples/widget_style_colors/app.rb +19 -21
  106. data/examples/widget_table_flex/app.rb +95 -0
  107. data/examples/widget_tabs_demo/app.rb +167 -0
  108. data/ext/ratatui_ruby/Cargo.lock +1 -1
  109. data/ext/ratatui_ruby/Cargo.toml +1 -1
  110. data/ext/ratatui_ruby/src/events.rs +121 -36
  111. data/ext/ratatui_ruby/src/frame.rs +115 -0
  112. data/ext/ratatui_ruby/src/lib.rs +79 -26
  113. data/ext/ratatui_ruby/src/rendering.rs +8 -4
  114. data/ext/ratatui_ruby/src/style.rs +138 -57
  115. data/ext/ratatui_ruby/src/terminal.rs +5 -9
  116. data/ext/ratatui_ruby/src/text.rs +13 -6
  117. data/ext/ratatui_ruby/src/widgets/barchart.rs +56 -54
  118. data/ext/ratatui_ruby/src/widgets/block.rs +7 -6
  119. data/ext/ratatui_ruby/src/widgets/canvas.rs +21 -3
  120. data/ext/ratatui_ruby/src/widgets/chart.rs +20 -10
  121. data/ext/ratatui_ruby/src/widgets/layout.rs +9 -4
  122. data/ext/ratatui_ruby/src/widgets/list.rs +32 -9
  123. data/ext/ratatui_ruby/src/widgets/overlay.rs +2 -1
  124. data/ext/ratatui_ruby/src/widgets/paragraph.rs +1 -1
  125. data/ext/ratatui_ruby/src/widgets/ratatui_logo.rs +19 -8
  126. data/ext/ratatui_ruby/src/widgets/ratatui_mascot.rs +17 -10
  127. data/ext/ratatui_ruby/src/widgets/scrollbar.rs +4 -2
  128. data/ext/ratatui_ruby/src/widgets/sparkline.rs +14 -11
  129. data/ext/ratatui_ruby/src/widgets/table.rs +8 -4
  130. data/ext/ratatui_ruby/src/widgets/tabs.rs +11 -11
  131. data/lib/ratatui_ruby/cell.rb +3 -3
  132. data/lib/ratatui_ruby/event/key.rb +1 -1
  133. data/lib/ratatui_ruby/event/none.rb +43 -0
  134. data/lib/ratatui_ruby/event.rb +56 -4
  135. data/lib/ratatui_ruby/frame.rb +87 -0
  136. data/lib/ratatui_ruby/schema/bar_chart/bar.rb +11 -11
  137. data/lib/ratatui_ruby/schema/bar_chart/bar_group.rb +1 -5
  138. data/lib/ratatui_ruby/schema/bar_chart.rb +217 -217
  139. data/lib/ratatui_ruby/schema/block.rb +163 -168
  140. data/lib/ratatui_ruby/schema/calendar.rb +66 -67
  141. data/lib/ratatui_ruby/schema/canvas.rb +63 -63
  142. data/lib/ratatui_ruby/schema/center.rb +46 -46
  143. data/lib/ratatui_ruby/schema/chart.rb +135 -143
  144. data/lib/ratatui_ruby/schema/clear.rb +42 -42
  145. data/lib/ratatui_ruby/schema/constraint.rb +76 -76
  146. data/lib/ratatui_ruby/schema/cursor.rb +25 -25
  147. data/lib/ratatui_ruby/schema/gauge.rb +53 -53
  148. data/lib/ratatui_ruby/schema/layout.rb +87 -87
  149. data/lib/ratatui_ruby/schema/line_gauge.rb +62 -62
  150. data/lib/ratatui_ruby/schema/list.rb +86 -84
  151. data/lib/ratatui_ruby/schema/overlay.rb +31 -31
  152. data/lib/ratatui_ruby/schema/paragraph.rb +80 -80
  153. data/lib/ratatui_ruby/schema/ratatui_logo.rb +10 -6
  154. data/lib/ratatui_ruby/schema/ratatui_mascot.rb +10 -5
  155. data/lib/ratatui_ruby/schema/rect.rb +60 -60
  156. data/lib/ratatui_ruby/schema/scrollbar.rb +119 -119
  157. data/lib/ratatui_ruby/schema/shape/label.rb +1 -1
  158. data/lib/ratatui_ruby/schema/sparkline.rb +111 -110
  159. data/lib/ratatui_ruby/schema/style.rb +46 -46
  160. data/lib/ratatui_ruby/schema/table.rb +112 -119
  161. data/lib/ratatui_ruby/schema/tabs.rb +66 -67
  162. data/lib/ratatui_ruby/session/autodoc.rb +417 -0
  163. data/lib/ratatui_ruby/session.rb +40 -23
  164. data/lib/ratatui_ruby/test_helper.rb +185 -19
  165. data/lib/ratatui_ruby/version.rb +1 -1
  166. data/lib/ratatui_ruby.rb +65 -39
  167. data/{examples/sparkline_demo → sig/examples/app_all_events}/app.rbs +3 -2
  168. data/sig/examples/app_all_events/model/event_entry.rbs +16 -0
  169. data/sig/examples/app_all_events/model/events.rbs +15 -0
  170. data/sig/examples/app_all_events/model/timestamp.rbs +11 -0
  171. data/sig/examples/app_all_events/view/app_view.rbs +8 -0
  172. data/sig/examples/app_all_events/view/controls_view.rbs +6 -0
  173. data/sig/examples/app_all_events/view/counts_view.rbs +6 -0
  174. data/sig/examples/app_all_events/view/live_view.rbs +6 -0
  175. data/sig/examples/app_all_events/view/log_view.rbs +6 -0
  176. data/sig/examples/app_all_events/view.rbs +8 -0
  177. data/sig/examples/app_all_events/view_state.rbs +15 -0
  178. data/{examples/list_demo → sig/examples/app_color_picker}/app.rbs +2 -2
  179. data/sig/examples/app_login_form/app.rbs +11 -0
  180. data/sig/examples/app_map_demo/app.rbs +11 -0
  181. data/sig/examples/app_table_select/app.rbs +11 -0
  182. data/sig/examples/verify_quickstart_dsl/app.rbs +11 -0
  183. data/sig/examples/verify_quickstart_lifecycle/app.rbs +11 -0
  184. data/sig/examples/verify_readme_usage/app.rbs +11 -0
  185. data/sig/examples/widget_block_padding/app.rbs +11 -0
  186. data/sig/examples/widget_block_titles/app.rbs +11 -0
  187. data/sig/examples/widget_box_demo/app.rbs +11 -0
  188. data/sig/examples/widget_calendar_demo/app.rbs +11 -0
  189. data/sig/examples/widget_cell_demo/app.rbs +11 -0
  190. data/sig/examples/widget_chart_demo/app.rbs +11 -0
  191. data/{examples/gauge_demo → sig/examples/widget_gauge_demo}/app.rbs +4 -0
  192. data/sig/examples/widget_layout_split/app.rbs +10 -0
  193. data/sig/examples/widget_line_gauge_demo/app.rbs +11 -0
  194. data/sig/examples/widget_list_demo/app.rbs +12 -0
  195. data/sig/examples/widget_list_styles/app.rbs +11 -0
  196. data/sig/examples/widget_popup_demo/app.rbs +11 -0
  197. data/sig/examples/widget_ratatui_logo_demo/app.rbs +11 -0
  198. data/sig/examples/widget_ratatui_mascot_demo/app.rbs +11 -0
  199. data/sig/examples/widget_rect/app.rbs +12 -0
  200. data/sig/examples/widget_render/app.rbs +10 -0
  201. data/sig/examples/widget_rich_text/app.rbs +11 -0
  202. data/sig/examples/widget_scroll_text/app.rbs +11 -0
  203. data/sig/examples/widget_scrollbar_demo/app.rbs +11 -0
  204. data/sig/examples/widget_sparkline_demo/app.rbs +10 -0
  205. data/{examples → sig/examples}/widget_style_colors/app.rbs +1 -1
  206. data/sig/examples/widget_table_flex/app.rbs +11 -0
  207. data/sig/ratatui_ruby/frame.rbs +9 -0
  208. data/sig/ratatui_ruby/ratatui_ruby.rbs +3 -2
  209. data/sig/ratatui_ruby/schema/draw.rbs +4 -0
  210. data/sig/ratatui_ruby/schema/layout.rbs +1 -1
  211. data/sig/ratatui_ruby/session.rbs +94 -0
  212. data/tasks/autodoc/inventory.rb +61 -0
  213. data/tasks/autodoc/member.rb +56 -0
  214. data/tasks/autodoc/name.rb +19 -0
  215. data/tasks/autodoc/notice.rb +26 -0
  216. data/tasks/autodoc/rbs.rb +38 -0
  217. data/tasks/autodoc/rdoc.rb +45 -0
  218. data/tasks/autodoc.rake +47 -0
  219. data/tasks/bump/history.rb +2 -2
  220. data/tasks/doc.rake +600 -6
  221. data/tasks/example_viewer.html.erb +172 -0
  222. data/tasks/lint.rake +8 -4
  223. data/tasks/resources/index.html.erb +6 -0
  224. data/tasks/sourcehut.rake +4 -4
  225. data/tasks/terminal_preview/app_screenshot.rb +1 -3
  226. data/tasks/terminal_preview/crash_report.rb +7 -9
  227. data/tasks/terminal_preview/launcher_script.rb +4 -6
  228. data/tasks/terminal_preview/preview_collection.rb +4 -6
  229. data/tasks/terminal_preview/safety_confirmation.rb +3 -5
  230. data/tasks/terminal_preview/saved_screenshot.rb +7 -9
  231. data/tasks/terminal_preview/terminal_window.rb +7 -9
  232. data/tasks/test.rake +1 -1
  233. data/tasks/website/index_page.rb +3 -3
  234. data/tasks/website/version.rb +10 -10
  235. data/tasks/website/version_menu.rb +10 -12
  236. data/tasks/website/versioned_documentation.rb +49 -17
  237. data/tasks/website/website.rb +6 -8
  238. data/tasks/website.rake +4 -4
  239. metadata +156 -125
  240. data/LICENSES/BSD-2-Clause.txt +0 -9
  241. data/doc/contributors/better_dx.md +0 -543
  242. data/doc/contributors/example_analysis.md +0 -82
  243. data/doc/images/all_events.png +0 -0
  244. data/doc/images/block_padding.png +0 -0
  245. data/doc/images/block_titles.png +0 -0
  246. data/doc/images/box_demo.png +0 -0
  247. data/doc/images/calendar_demo.png +0 -0
  248. data/doc/images/cell_demo.png +0 -0
  249. data/doc/images/chart_demo.png +0 -0
  250. data/doc/images/flex_layout.png +0 -0
  251. data/doc/images/gauge_demo.png +0 -0
  252. data/doc/images/line_gauge_demo.png +0 -0
  253. data/doc/images/list_demo.png +0 -0
  254. data/doc/images/readme_usage.png +0 -0
  255. data/doc/images/scrollbar_demo.png +0 -0
  256. data/doc/images/sparkline_demo.png +0 -0
  257. data/doc/images/table_flex.png +0 -0
  258. data/examples/all_events/app.rb +0 -169
  259. data/examples/all_events/app.rbs +0 -7
  260. data/examples/all_events/test_app.rb +0 -139
  261. data/examples/analytics/app.rb +0 -258
  262. data/examples/analytics/app.rbs +0 -7
  263. data/examples/analytics/test_app.rb +0 -132
  264. data/examples/block_padding/app.rbs +0 -7
  265. data/examples/block_padding/test_app.rb +0 -31
  266. data/examples/block_titles/app.rbs +0 -7
  267. data/examples/block_titles/test_app.rb +0 -34
  268. data/examples/box_demo/app.rbs +0 -7
  269. data/examples/box_demo/test_app.rb +0 -88
  270. data/examples/calendar_demo/app.rb +0 -101
  271. data/examples/calendar_demo/app.rbs +0 -7
  272. data/examples/calendar_demo/test_app.rb +0 -108
  273. data/examples/cell_demo/app.rb +0 -108
  274. data/examples/cell_demo/app.rbs +0 -7
  275. data/examples/cell_demo/test_app.rb +0 -36
  276. data/examples/chart_demo/app.rb +0 -203
  277. data/examples/chart_demo/app.rbs +0 -7
  278. data/examples/chart_demo/test_app.rb +0 -102
  279. data/examples/custom_widget/app.rb +0 -51
  280. data/examples/custom_widget/app.rbs +0 -7
  281. data/examples/custom_widget/test_app.rb +0 -30
  282. data/examples/flex_layout/app.rb +0 -156
  283. data/examples/flex_layout/app.rbs +0 -7
  284. data/examples/flex_layout/test_app.rb +0 -65
  285. data/examples/gauge_demo/app.rb +0 -182
  286. data/examples/gauge_demo/test_app.rb +0 -120
  287. data/examples/hit_test/app.rb +0 -175
  288. data/examples/hit_test/app.rbs +0 -7
  289. data/examples/hit_test/test_app.rb +0 -102
  290. data/examples/line_gauge_demo/app.rb +0 -190
  291. data/examples/line_gauge_demo/app.rbs +0 -7
  292. data/examples/line_gauge_demo/test_app.rb +0 -129
  293. data/examples/list_demo/app.rb +0 -253
  294. data/examples/list_demo/test_app.rb +0 -237
  295. data/examples/list_styles/app.rb +0 -140
  296. data/examples/list_styles/app.rbs +0 -7
  297. data/examples/list_styles/test_app.rb +0 -157
  298. data/examples/login_form/app.rbs +0 -7
  299. data/examples/login_form/test_app.rb +0 -51
  300. data/examples/map_demo/app.rbs +0 -7
  301. data/examples/map_demo/test_app.rb +0 -149
  302. data/examples/mouse_events/app.rb +0 -97
  303. data/examples/mouse_events/app.rbs +0 -7
  304. data/examples/mouse_events/test_app.rb +0 -53
  305. data/examples/popup_demo/app.rb +0 -103
  306. data/examples/popup_demo/app.rbs +0 -7
  307. data/examples/popup_demo/test_app.rb +0 -54
  308. data/examples/quickstart_dsl/app.rbs +0 -7
  309. data/examples/quickstart_dsl/test_app.rb +0 -29
  310. data/examples/quickstart_lifecycle/app.rbs +0 -7
  311. data/examples/quickstart_lifecycle/test_app.rb +0 -29
  312. data/examples/ratatui_logo_demo/app.rb +0 -79
  313. data/examples/ratatui_logo_demo/app.rbs +0 -7
  314. data/examples/ratatui_logo_demo/test_app.rb +0 -51
  315. data/examples/ratatui_mascot_demo/app.rb +0 -84
  316. data/examples/ratatui_mascot_demo/app.rbs +0 -7
  317. data/examples/ratatui_mascot_demo/test_app.rb +0 -47
  318. data/examples/readme_usage/app.rb +0 -29
  319. data/examples/readme_usage/app.rbs +0 -7
  320. data/examples/readme_usage/test_app.rb +0 -29
  321. data/examples/rich_text/app.rb +0 -141
  322. data/examples/rich_text/app.rbs +0 -7
  323. data/examples/rich_text/test_app.rb +0 -166
  324. data/examples/scroll_text/app.rb +0 -103
  325. data/examples/scroll_text/app.rbs +0 -7
  326. data/examples/scroll_text/test_app.rb +0 -110
  327. data/examples/scrollbar_demo/app.rb +0 -143
  328. data/examples/scrollbar_demo/app.rbs +0 -7
  329. data/examples/scrollbar_demo/test_app.rb +0 -77
  330. data/examples/sparkline_demo/app.rb +0 -240
  331. data/examples/sparkline_demo/test_app.rb +0 -107
  332. data/examples/table_flex/app.rb +0 -65
  333. data/examples/table_flex/app.rbs +0 -7
  334. data/examples/table_flex/test_app.rb +0 -36
  335. data/examples/table_select/app.rbs +0 -7
  336. data/examples/table_select/test_app.rb +0 -180
  337. data/examples/widget_style_colors/test_app.rb +0 -48
  338. /data/doc/images/{analytics.png → app_analytics.png} +0 -0
  339. /data/doc/images/{custom_widget.png → app_custom_widget.png} +0 -0
  340. /data/doc/images/{login_form.png → app_login_form.png} +0 -0
  341. /data/doc/images/{map_demo.png → app_map_demo.png} +0 -0
  342. /data/doc/images/{mouse_events.png → app_mouse_events.png} +0 -0
  343. /data/doc/images/{table_select.png → app_table_select.png} +0 -0
  344. /data/doc/images/{quickstart_dsl.png → verify_quickstart_dsl.png} +0 -0
  345. /data/doc/images/{ratatui_logo_demo.png → verify_quickstart_layout.png} +0 -0
  346. /data/doc/images/{quickstart_lifecycle.png → verify_quickstart_lifecycle.png} +0 -0
  347. /data/doc/images/{list_styles.png → widget_list_styles.png} +0 -0
  348. /data/doc/images/{popup_demo.png → widget_popup_demo.png} +0 -0
  349. /data/doc/images/{hit_test.png → widget_rect.png} +0 -0
  350. /data/doc/images/{rich_text.png → widget_rich_text.png} +0 -0
  351. /data/doc/images/{scroll_text.png → widget_scroll_text.png} +0 -0
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetBoxDemo
6
+ # @public
7
+ def self.new: () -> WidgetBoxDemo
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetCalendarDemo
6
+ # @public
7
+ def self.new: () -> WidgetCalendarDemo
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetCellDemo
6
+ # @public
7
+ def self.new: () -> WidgetCellDemo
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetChartDemo
6
+ # @public
7
+ def self.new: () -> WidgetChartDemo
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -1,3 +1,7 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
1
5
  class SystemMonitorApp
2
6
  # @public
3
7
  def self.new: () -> SystemMonitorApp
@@ -0,0 +1,10 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ class WidgetLayoutSplit
5
+ # @public
6
+ def self.new: () -> WidgetLayoutSplit
7
+
8
+ # @public
9
+ def run: () -> void
10
+ end
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetLineGaugeDemo
6
+ # @public
7
+ def self.new: () -> WidgetLineGaugeDemo
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,12 @@
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
+ class WidgetListDemo
7
+ # @public
8
+ def self.new: () -> WidgetListDemo
9
+
10
+ # @public
11
+ def run: () -> void
12
+ end
@@ -0,0 +1,11 @@
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
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetPopupDemo
6
+ # @public
7
+ def self.new: () -> WidgetPopupDemo
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetRatatuiLogoDemo
6
+ # @public
7
+ def self.new: () -> WidgetRatatuiLogoDemo
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetRatatuiMascotDemo
6
+ # @public
7
+ def self.new: () -> WidgetRatatuiMascotDemo
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,12 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ class WidgetRect
5
+ MENU_ITEMS: Array[String]
6
+
7
+ # @public
8
+ def self.new: () -> WidgetRect
9
+
10
+ # @public
11
+ def run: () -> void
12
+ end
@@ -0,0 +1,10 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ class WidgetRender
5
+ # @public
6
+ def self.new: () -> WidgetRender
7
+
8
+ # @public
9
+ def run: () -> void
10
+ end
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetRichText
6
+ # @public
7
+ def self.new: () -> WidgetRichText
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetScrollText
6
+ # @public
7
+ def self.new: () -> WidgetScrollText
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetScrollbarDemo
6
+ # @public
7
+ def self.new: () -> WidgetScrollbarDemo
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,10 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ class WidgetSparklineDemo
5
+ # @public
6
+ def self.new: () -> WidgetSparklineDemo
7
+
8
+ # @public
9
+ def run: () -> void
10
+ end
@@ -1,7 +1,7 @@
1
1
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
2
  # SPDX-License-Identifier: AGPL-3.0-or-later
3
3
 
4
- class ColorGradientDemo
4
+ class WidgetStyleColors
5
5
  def initialize: () -> void
6
6
  def run: () -> void
7
7
 
@@ -0,0 +1,11 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ class WidgetTableFlex
6
+ # @public
7
+ def self.new: () -> WidgetTableFlex
8
+
9
+ # @public
10
+ def run: () -> void
11
+ end
@@ -0,0 +1,9 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ module RatatuiRuby
5
+ class Frame
6
+ def area: () -> Rect
7
+ def render_widget: (widget widget, Rect area) -> nil
8
+ end
9
+ end
@@ -8,9 +8,10 @@ module RatatuiRuby
8
8
  def to_s: () -> String
9
9
  end
10
10
 
11
- def self.init_terminal: () -> void
11
+ def self.init_terminal: (focus_events: bool, bracketed_paste: bool) -> void
12
12
  def self.restore_terminal: () -> void
13
- def self.draw: (widget) -> void
13
+ def self.draw: (widget tree) -> void
14
+ | () { (Frame) -> void } -> void
14
15
  def self._poll_event: () -> Hash[Symbol, untyped]?
15
16
  def self.poll_event: () -> Event?
16
17
  def self.inject_test_event: (String, Hash[Symbol, untyped]) -> void
@@ -1,3 +1,7 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ #
3
+ # SPDX-License-Identifier: AGPL-3.0-or-later
4
+
1
5
  module RatatuiRuby
2
6
  module Draw
3
7
  class StringCmd < Data
@@ -16,6 +16,6 @@ module RatatuiRuby
16
16
 
17
17
  private
18
18
 
19
- def self._split: (Rect | Hash[Symbol, Integer], Symbol, Array[Constraint], Symbol) -> Array[Hash[Symbol, Integer]]
19
+ def self._split: (Rect, Symbol, Array[Constraint], Symbol) -> Array[Hash[Symbol, Integer]]
20
20
  end
21
21
  end
@@ -0,0 +1,94 @@
1
+ # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ # !!! DO NOT EDIT THIS FILE BY HAND !!!
5
+ # This file is automatically generated by `rake autodoc:rbs:session`.
6
+ # Any changes will be overwritten.
7
+
8
+ module RatatuiRuby
9
+ class Session
10
+ def self.new: () -> Session
11
+ | () { (Session) -> void } -> void
12
+
13
+ def _paragraph_line_count: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
14
+ def _paragraph_line_width: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
15
+ def _tabs_width: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
16
+ def clear_events: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
17
+ def draw: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
18
+ def experimental_warnings: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
19
+ def experimental_warnings=: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
20
+ def get_buffer_content: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
21
+ def get_cell_at: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
22
+ def get_cursor_position: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
23
+ def init_terminal: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
24
+ def init_test_terminal: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
25
+ def inject_test_event: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
26
+ def poll_event: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
27
+ def resize_terminal: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
28
+ def restore_terminal: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
29
+ def run: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
30
+ def warn_experimental_feature: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
31
+ def axis: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
32
+ def bar_chart: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
33
+ def bar_chart_bar: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
34
+ def bar_chart_bar_group: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
35
+ def block: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
36
+ def calendar: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
37
+ def canvas: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
38
+ def cell: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
39
+ def cell_char: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
40
+ def cell_default: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
41
+ def cell_empty: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
42
+ def cell_symbol: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
43
+ def center: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
44
+ def chart: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
45
+ def clear: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
46
+ def constraint: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
47
+ def constraint_fill: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
48
+ def constraint_length: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
49
+ def constraint_max: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
50
+ def constraint_min: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
51
+ def constraint_percentage: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
52
+ def constraint_ratio: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
53
+ def cursor: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
54
+ def dataset: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
55
+ def draw_cell_cmd: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
56
+ def draw_string_cmd: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
57
+ def error: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
58
+ def event: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
59
+ def event_focus_gained: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
60
+ def event_focus_lost: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
61
+ def event_key: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
62
+ def event_mouse: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
63
+ def event_none: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
64
+ def event_paste: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
65
+ def event_resize: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
66
+ def frame: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
67
+ def gauge: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
68
+ def layout: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
69
+ def layout_split: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
70
+ def line_chart: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
71
+ def line_gauge: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
72
+ def list: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
73
+ def overlay: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
74
+ def paragraph: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
75
+ def paragraph_new: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
76
+ def ratatui_logo: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
77
+ def ratatui_mascot: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
78
+ def rect: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
79
+ def scrollbar: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
80
+ def shape_circle: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
81
+ def shape_label: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
82
+ def shape_line: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
83
+ def shape_map: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
84
+ def shape_point: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
85
+ def shape_rectangle: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
86
+ def sparkline: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
87
+ def style: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
88
+ def style_default: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
89
+ def table: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
90
+ def tabs: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
91
+ def text_line: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
92
+ def text_span: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped
93
+ end
94
+ end
@@ -0,0 +1,61 @@
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
@@ -0,0 +1,56 @@
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
+ module Member
8
+ class Delegate < Data.define(:name)
9
+ def rbs
10
+ " def #{name}: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped"
11
+ end
12
+
13
+ def rdoc
14
+ [
15
+ " # :method: #{name}",
16
+ " # :call-seq: #{name}(*args, **kwargs, &block)",
17
+ " #",
18
+ " # Delegates to RatatuiRuby.#{name}.",
19
+ " #",
20
+ ]
21
+ end
22
+ end
23
+
24
+ class Factory < Data.define(:name, :const_name)
25
+ def rbs
26
+ " def #{name}: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped"
27
+ end
28
+
29
+ def rdoc
30
+ [
31
+ " # :method: #{name}",
32
+ " # :call-seq: #{name}(*args, **kwargs, &block)",
33
+ " #",
34
+ " # Factory for RatatuiRuby::#{const_name}.new.",
35
+ " #",
36
+ ]
37
+ end
38
+ end
39
+
40
+ class Helper < Data.define(:name, :class_method, :const_name)
41
+ def rbs
42
+ " def #{name}: (*untyped args, **untyped kwargs) ?{ (*untyped) -> untyped } -> untyped"
43
+ end
44
+
45
+ def rdoc
46
+ [
47
+ " # :method: #{name}",
48
+ " # :call-seq: #{name}(*args, **kwargs, &block)",
49
+ " #",
50
+ " # Helper for RatatuiRuby::#{const_name}.#{class_method}.",
51
+ " #",
52
+ ]
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,19 @@
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 Name < Data.define(:string)
8
+ def snake
9
+ string.to_s
10
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
11
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
12
+ .downcase
13
+ end
14
+
15
+ def to_s
16
+ string.to_s
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
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
@@ -0,0 +1,38 @@
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 Rbs < Data.define(:path, :notice)
8
+ def write(inventory)
9
+ FileUtils.mkdir_p(File.dirname(path))
10
+
11
+ # REUSE-IgnoreStart
12
+ lines = [
13
+ "# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>",
14
+ "# SPDX-License-Identifier: AGPL-3.0-or-later",
15
+ "",
16
+ ]
17
+ # REUSE-IgnoreEnd
18
+ lines += notice.rbs
19
+ lines += [
20
+ "module RatatuiRuby",
21
+ " class Session",
22
+ " def self.new: () -> Session",
23
+ " | () { (Session) -> void } -> void",
24
+ "",
25
+ ]
26
+
27
+ inventory.each do |member|
28
+ lines << member.rbs
29
+ end
30
+
31
+ lines << " end"
32
+ lines << "end"
33
+
34
+ File.write(path, "#{lines.join("\n")}\n")
35
+ puts "Generated #{path}"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,45 @@
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 Rdoc < Data.define(:path, :notice)
8
+ def write(inventory)
9
+ FileUtils.mkdir_p(File.dirname(path))
10
+
11
+ # REUSE-IgnoreStart
12
+ lines = [
13
+ "# frozen_string_literal: true",
14
+ "",
15
+ "# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>",
16
+ "# SPDX-License-Identifier: AGPL-3.0-or-later",
17
+ "",
18
+ ]
19
+ # REUSE-IgnoreEnd
20
+ lines += notice.rdoc
21
+ lines += [
22
+ "module RatatuiRuby",
23
+ " class Session",
24
+ ]
25
+
26
+ lines << " # == RatatuiRuby Delegates"
27
+ lines << " #"
28
+ inventory.delegates.each do |member|
29
+ lines += member.rdoc
30
+ end
31
+
32
+ lines << " # == Widget Factories"
33
+ lines << " #"
34
+ inventory.factories.each do |member|
35
+ lines += member.rdoc
36
+ end
37
+
38
+ lines << " end"
39
+ lines << "end"
40
+
41
+ File.write(path, "#{lines.join("\n")}\n")
42
+ puts "Generated #{path}"
43
+ end
44
+ end
45
+ end