ratatui_ruby 0.3.1 → 0.4.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 (300) hide show
  1. checksums.yaml +4 -4
  2. data/.builds/ruby-3.2.yml +14 -12
  3. data/.builds/ruby-3.3.yml +14 -12
  4. data/.builds/ruby-3.4.yml +14 -12
  5. data/.builds/ruby-4.0.0.yml +14 -12
  6. data/AGENTS.md +54 -13
  7. data/CHANGELOG.md +186 -1
  8. data/README.md +17 -15
  9. data/doc/application_architecture.md +116 -0
  10. data/doc/application_testing.md +12 -7
  11. data/doc/contributors/better_dx.md +543 -0
  12. data/doc/contributors/design/ruby_frontend.md +1 -1
  13. data/doc/contributors/developing_examples.md +203 -0
  14. data/doc/contributors/documentation_style.md +97 -0
  15. data/doc/contributors/dwim_dx.md +366 -0
  16. data/doc/contributors/example_analysis.md +82 -0
  17. data/doc/custom.css +14 -0
  18. data/doc/event_handling.md +119 -0
  19. data/doc/images/all_events.png +0 -0
  20. data/doc/images/analytics.png +0 -0
  21. data/doc/images/block_padding.png +0 -0
  22. data/doc/images/block_titles.png +0 -0
  23. data/doc/images/box_demo.png +0 -0
  24. data/doc/images/calendar_demo.png +0 -0
  25. data/doc/images/cell_demo.png +0 -0
  26. data/doc/images/chart_demo.png +0 -0
  27. data/doc/images/custom_widget.png +0 -0
  28. data/doc/images/flex_layout.png +0 -0
  29. data/doc/images/gauge_demo.png +0 -0
  30. data/doc/images/hit_test.png +0 -0
  31. data/doc/images/line_gauge_demo.png +0 -0
  32. data/doc/images/list_demo.png +0 -0
  33. data/doc/images/list_styles.png +0 -0
  34. data/doc/images/login_form.png +0 -0
  35. data/doc/images/map_demo.png +0 -0
  36. data/doc/images/mouse_events.png +0 -0
  37. data/doc/images/popup_demo.png +0 -0
  38. data/doc/images/quickstart_dsl.png +0 -0
  39. data/doc/images/quickstart_lifecycle.png +0 -0
  40. data/doc/images/ratatui_logo_demo.png +0 -0
  41. data/doc/images/readme_usage.png +0 -0
  42. data/doc/images/rich_text.png +0 -0
  43. data/doc/images/scroll_text.png +0 -0
  44. data/doc/images/scrollbar_demo.png +0 -0
  45. data/doc/images/sparkline_demo.png +0 -0
  46. data/doc/images/table_flex.png +0 -0
  47. data/doc/images/table_select.png +0 -0
  48. data/doc/images/widget_style_colors.png +0 -0
  49. data/doc/index.md +1 -0
  50. data/doc/interactive_design.md +121 -0
  51. data/doc/quickstart.md +147 -72
  52. data/examples/all_events/app.rb +169 -0
  53. data/examples/all_events/app.rbs +7 -0
  54. data/examples/all_events/test_app.rb +139 -0
  55. data/examples/analytics/app.rb +258 -0
  56. data/examples/analytics/app.rbs +7 -0
  57. data/examples/analytics/test_app.rb +132 -0
  58. data/examples/block_padding/app.rb +63 -0
  59. data/examples/block_padding/app.rbs +7 -0
  60. data/examples/block_padding/test_app.rb +31 -0
  61. data/examples/block_titles/app.rb +61 -0
  62. data/examples/block_titles/app.rbs +7 -0
  63. data/examples/block_titles/test_app.rb +34 -0
  64. data/examples/box_demo/app.rb +216 -0
  65. data/examples/box_demo/app.rbs +7 -0
  66. data/examples/box_demo/test_app.rb +88 -0
  67. data/examples/calendar_demo/app.rb +101 -0
  68. data/examples/calendar_demo/app.rbs +7 -0
  69. data/examples/calendar_demo/test_app.rb +108 -0
  70. data/examples/cell_demo/app.rb +108 -0
  71. data/examples/cell_demo/app.rbs +7 -0
  72. data/examples/cell_demo/test_app.rb +36 -0
  73. data/examples/chart_demo/app.rb +203 -0
  74. data/examples/chart_demo/app.rbs +7 -0
  75. data/examples/chart_demo/test_app.rb +102 -0
  76. data/examples/custom_widget/app.rb +51 -0
  77. data/examples/custom_widget/app.rbs +7 -0
  78. data/examples/custom_widget/test_app.rb +30 -0
  79. data/examples/flex_layout/app.rb +156 -0
  80. data/examples/flex_layout/app.rbs +7 -0
  81. data/examples/flex_layout/test_app.rb +65 -0
  82. data/examples/gauge_demo/app.rb +182 -0
  83. data/examples/gauge_demo/app.rbs +7 -0
  84. data/examples/gauge_demo/test_app.rb +120 -0
  85. data/examples/hit_test/app.rb +175 -0
  86. data/examples/hit_test/app.rbs +7 -0
  87. data/examples/hit_test/test_app.rb +102 -0
  88. data/examples/line_gauge_demo/app.rb +190 -0
  89. data/examples/line_gauge_demo/app.rbs +7 -0
  90. data/examples/line_gauge_demo/test_app.rb +129 -0
  91. data/examples/list_demo/app.rb +253 -0
  92. data/examples/list_demo/app.rbs +12 -0
  93. data/examples/list_demo/test_app.rb +237 -0
  94. data/examples/list_styles/app.rb +140 -0
  95. data/examples/list_styles/app.rbs +7 -0
  96. data/examples/list_styles/test_app.rb +157 -0
  97. data/examples/{login_form.rb → login_form/app.rb} +12 -16
  98. data/examples/login_form/app.rbs +7 -0
  99. data/examples/login_form/test_app.rb +51 -0
  100. data/examples/map_demo/app.rb +90 -0
  101. data/examples/map_demo/app.rbs +7 -0
  102. data/examples/map_demo/test_app.rb +149 -0
  103. data/examples/{mouse_events.rb → mouse_events/app.rb} +29 -27
  104. data/examples/mouse_events/app.rbs +7 -0
  105. data/examples/mouse_events/test_app.rb +53 -0
  106. data/examples/{popup_demo.rb → popup_demo/app.rb} +15 -17
  107. data/examples/popup_demo/app.rbs +7 -0
  108. data/examples/{test_popup_demo.rb → popup_demo/test_app.rb} +18 -26
  109. data/examples/quickstart_dsl/app.rb +36 -0
  110. data/examples/quickstart_dsl/app.rbs +7 -0
  111. data/examples/quickstart_dsl/test_app.rb +29 -0
  112. data/examples/quickstart_lifecycle/app.rb +39 -0
  113. data/examples/quickstart_lifecycle/app.rbs +7 -0
  114. data/examples/quickstart_lifecycle/test_app.rb +29 -0
  115. data/examples/ratatui_logo_demo/app.rb +79 -0
  116. data/examples/ratatui_logo_demo/app.rbs +7 -0
  117. data/examples/ratatui_logo_demo/test_app.rb +51 -0
  118. data/examples/ratatui_mascot_demo/app.rb +84 -0
  119. data/examples/ratatui_mascot_demo/app.rbs +7 -0
  120. data/examples/ratatui_mascot_demo/test_app.rb +47 -0
  121. data/examples/readme_usage/app.rb +29 -0
  122. data/examples/readme_usage/app.rbs +7 -0
  123. data/examples/readme_usage/test_app.rb +29 -0
  124. data/examples/rich_text/app.rb +141 -0
  125. data/examples/rich_text/app.rbs +7 -0
  126. data/examples/rich_text/test_app.rb +166 -0
  127. data/examples/scroll_text/app.rb +103 -0
  128. data/examples/scroll_text/app.rbs +7 -0
  129. data/examples/scroll_text/test_app.rb +110 -0
  130. data/examples/scrollbar_demo/app.rb +143 -0
  131. data/examples/scrollbar_demo/app.rbs +7 -0
  132. data/examples/scrollbar_demo/test_app.rb +77 -0
  133. data/examples/sparkline_demo/app.rb +240 -0
  134. data/examples/sparkline_demo/app.rbs +10 -0
  135. data/examples/sparkline_demo/test_app.rb +107 -0
  136. data/examples/table_flex/app.rb +65 -0
  137. data/examples/table_flex/app.rbs +7 -0
  138. data/examples/table_flex/test_app.rb +36 -0
  139. data/examples/table_select/app.rb +198 -0
  140. data/examples/table_select/app.rbs +7 -0
  141. data/examples/table_select/test_app.rb +180 -0
  142. data/examples/widget_style_colors/app.rb +104 -0
  143. data/examples/widget_style_colors/app.rbs +14 -0
  144. data/examples/widget_style_colors/test_app.rb +48 -0
  145. data/ext/ratatui_ruby/Cargo.lock +889 -115
  146. data/ext/ratatui_ruby/Cargo.toml +4 -3
  147. data/ext/ratatui_ruby/clippy.toml +7 -0
  148. data/ext/ratatui_ruby/extconf.rb +7 -0
  149. data/ext/ratatui_ruby/src/events.rs +218 -229
  150. data/ext/ratatui_ruby/src/lib.rs +38 -10
  151. data/ext/ratatui_ruby/src/rendering.rs +90 -10
  152. data/ext/ratatui_ruby/src/style.rs +281 -98
  153. data/ext/ratatui_ruby/src/terminal.rs +119 -25
  154. data/ext/ratatui_ruby/src/text.rs +171 -0
  155. data/ext/ratatui_ruby/src/widgets/barchart.rs +97 -24
  156. data/ext/ratatui_ruby/src/widgets/block.rs +31 -3
  157. data/ext/ratatui_ruby/src/widgets/calendar.rs +45 -44
  158. data/ext/ratatui_ruby/src/widgets/canvas.rs +46 -29
  159. data/ext/ratatui_ruby/src/widgets/chart.rs +69 -27
  160. data/ext/ratatui_ruby/src/widgets/clear.rs +3 -1
  161. data/ext/ratatui_ruby/src/widgets/gauge.rs +11 -4
  162. data/ext/ratatui_ruby/src/widgets/layout.rs +218 -15
  163. data/ext/ratatui_ruby/src/widgets/line_gauge.rs +92 -0
  164. data/ext/ratatui_ruby/src/widgets/list.rs +91 -11
  165. data/ext/ratatui_ruby/src/widgets/mod.rs +3 -0
  166. data/ext/ratatui_ruby/src/widgets/overlay.rs +3 -2
  167. data/ext/ratatui_ruby/src/widgets/paragraph.rs +35 -13
  168. data/ext/ratatui_ruby/src/widgets/ratatui_logo.rs +29 -0
  169. data/ext/ratatui_ruby/src/widgets/ratatui_mascot.rs +44 -0
  170. data/ext/ratatui_ruby/src/widgets/scrollbar.rs +59 -7
  171. data/ext/ratatui_ruby/src/widgets/sparkline.rs +70 -6
  172. data/ext/ratatui_ruby/src/widgets/table.rs +173 -64
  173. data/ext/ratatui_ruby/src/widgets/tabs.rs +105 -5
  174. data/lib/ratatui_ruby/cell.rb +166 -0
  175. data/lib/ratatui_ruby/event/focus_gained.rb +49 -0
  176. data/lib/ratatui_ruby/event/focus_lost.rb +50 -0
  177. data/lib/ratatui_ruby/event/key.rb +211 -0
  178. data/lib/ratatui_ruby/event/mouse.rb +124 -0
  179. data/lib/ratatui_ruby/event/paste.rb +71 -0
  180. data/lib/ratatui_ruby/event/resize.rb +80 -0
  181. data/lib/ratatui_ruby/event.rb +79 -0
  182. data/lib/ratatui_ruby/schema/bar_chart/bar.rb +45 -0
  183. data/lib/ratatui_ruby/schema/bar_chart/bar_group.rb +27 -0
  184. data/lib/ratatui_ruby/schema/bar_chart.rb +228 -19
  185. data/lib/ratatui_ruby/schema/block.rb +186 -14
  186. data/lib/ratatui_ruby/schema/calendar.rb +74 -17
  187. data/lib/ratatui_ruby/schema/canvas.rb +215 -48
  188. data/lib/ratatui_ruby/schema/center.rb +49 -11
  189. data/lib/ratatui_ruby/schema/chart.rb +151 -41
  190. data/lib/ratatui_ruby/schema/clear.rb +41 -72
  191. data/lib/ratatui_ruby/schema/constraint.rb +82 -22
  192. data/lib/ratatui_ruby/schema/cursor.rb +27 -9
  193. data/lib/ratatui_ruby/schema/draw.rb +53 -0
  194. data/lib/ratatui_ruby/schema/gauge.rb +59 -15
  195. data/lib/ratatui_ruby/schema/layout.rb +95 -13
  196. data/lib/ratatui_ruby/schema/line_gauge.rb +78 -0
  197. data/lib/ratatui_ruby/schema/list.rb +93 -19
  198. data/lib/ratatui_ruby/schema/overlay.rb +34 -8
  199. data/lib/ratatui_ruby/schema/paragraph.rb +87 -30
  200. data/lib/ratatui_ruby/schema/ratatui_logo.rb +25 -0
  201. data/lib/ratatui_ruby/schema/ratatui_mascot.rb +29 -0
  202. data/lib/ratatui_ruby/schema/rect.rb +64 -15
  203. data/lib/ratatui_ruby/schema/scrollbar.rb +132 -24
  204. data/lib/ratatui_ruby/schema/shape/label.rb +66 -0
  205. data/lib/ratatui_ruby/schema/sparkline.rb +122 -15
  206. data/lib/ratatui_ruby/schema/style.rb +49 -21
  207. data/lib/ratatui_ruby/schema/table.rb +119 -21
  208. data/lib/ratatui_ruby/schema/tabs.rb +75 -13
  209. data/lib/ratatui_ruby/schema/text.rb +90 -0
  210. data/lib/ratatui_ruby/session.rb +146 -0
  211. data/lib/ratatui_ruby/test_helper.rb +156 -13
  212. data/lib/ratatui_ruby/version.rb +1 -1
  213. data/lib/ratatui_ruby.rb +143 -23
  214. data/sig/ratatui_ruby/event.rbs +69 -0
  215. data/sig/ratatui_ruby/ratatui_ruby.rbs +2 -1
  216. data/sig/ratatui_ruby/schema/bar_chart/bar.rbs +16 -0
  217. data/sig/ratatui_ruby/schema/bar_chart/bar_group.rbs +13 -0
  218. data/sig/ratatui_ruby/schema/bar_chart.rbs +20 -2
  219. data/sig/ratatui_ruby/schema/block.rbs +5 -4
  220. data/sig/ratatui_ruby/schema/calendar.rbs +6 -2
  221. data/sig/ratatui_ruby/schema/canvas.rbs +52 -39
  222. data/sig/ratatui_ruby/schema/center.rbs +3 -3
  223. data/sig/ratatui_ruby/schema/chart.rbs +8 -5
  224. data/sig/ratatui_ruby/schema/constraint.rbs +8 -5
  225. data/sig/ratatui_ruby/schema/cursor.rbs +1 -1
  226. data/sig/ratatui_ruby/schema/draw.rbs +23 -0
  227. data/sig/ratatui_ruby/schema/gauge.rbs +4 -2
  228. data/sig/ratatui_ruby/schema/layout.rbs +11 -1
  229. data/sig/ratatui_ruby/schema/line_gauge.rbs +16 -0
  230. data/sig/ratatui_ruby/schema/list.rbs +5 -1
  231. data/sig/ratatui_ruby/schema/paragraph.rbs +4 -1
  232. data/{lib/ratatui_ruby/output.rb → sig/ratatui_ruby/schema/ratatui_logo.rbs} +3 -2
  233. data/sig/ratatui_ruby/{buffer.rbs → schema/ratatui_mascot.rbs} +4 -3
  234. data/sig/ratatui_ruby/schema/rect.rbs +2 -1
  235. data/sig/ratatui_ruby/schema/scrollbar.rbs +18 -2
  236. data/sig/ratatui_ruby/schema/sparkline.rbs +6 -2
  237. data/sig/ratatui_ruby/schema/table.rbs +8 -1
  238. data/sig/ratatui_ruby/schema/tabs.rbs +5 -1
  239. data/sig/ratatui_ruby/schema/text.rbs +22 -0
  240. data/tasks/resources/build.yml.erb +13 -11
  241. data/tasks/terminal_preview/app_screenshot.rb +35 -0
  242. data/tasks/terminal_preview/crash_report.rb +54 -0
  243. data/tasks/terminal_preview/example_app.rb +25 -0
  244. data/tasks/terminal_preview/launcher_script.rb +48 -0
  245. data/tasks/terminal_preview/preview_collection.rb +60 -0
  246. data/tasks/terminal_preview/preview_timing.rb +22 -0
  247. data/tasks/terminal_preview/safety_confirmation.rb +58 -0
  248. data/tasks/terminal_preview/saved_screenshot.rb +55 -0
  249. data/tasks/terminal_preview/system_appearance.rb +11 -0
  250. data/tasks/terminal_preview/terminal_window.rb +138 -0
  251. data/tasks/terminal_preview/window_id.rb +14 -0
  252. data/tasks/terminal_preview.rake +28 -0
  253. data/tasks/test.rake +1 -1
  254. metadata +174 -53
  255. data/doc/images/examples-analytics.rb.png +0 -0
  256. data/doc/images/examples-box_demo.rb.png +0 -0
  257. data/doc/images/examples-calendar_demo.rb.png +0 -0
  258. data/doc/images/examples-chart_demo.rb.png +0 -0
  259. data/doc/images/examples-custom_widget.rb.png +0 -0
  260. data/doc/images/examples-dashboard.rb.png +0 -0
  261. data/doc/images/examples-list_styles.rb.png +0 -0
  262. data/doc/images/examples-login_form.rb.png +0 -0
  263. data/doc/images/examples-map_demo.rb.png +0 -0
  264. data/doc/images/examples-mouse_events.rb.png +0 -0
  265. data/doc/images/examples-popup_demo.rb.gif +0 -0
  266. data/doc/images/examples-quickstart_lifecycle.rb.png +0 -0
  267. data/doc/images/examples-scroll_text.rb.png +0 -0
  268. data/doc/images/examples-scrollbar_demo.rb.png +0 -0
  269. data/doc/images/examples-stock_ticker.rb.png +0 -0
  270. data/doc/images/examples-system_monitor.rb.png +0 -0
  271. data/doc/images/examples-table_select.rb.png +0 -0
  272. data/examples/analytics.rb +0 -88
  273. data/examples/box_demo.rb +0 -71
  274. data/examples/calendar_demo.rb +0 -55
  275. data/examples/chart_demo.rb +0 -84
  276. data/examples/custom_widget.rb +0 -43
  277. data/examples/dashboard.rb +0 -72
  278. data/examples/list_styles.rb +0 -66
  279. data/examples/map_demo.rb +0 -58
  280. data/examples/quickstart_dsl.rb +0 -30
  281. data/examples/quickstart_lifecycle.rb +0 -40
  282. data/examples/readme_usage.rb +0 -21
  283. data/examples/scroll_text.rb +0 -74
  284. data/examples/scrollbar_demo.rb +0 -75
  285. data/examples/stock_ticker.rb +0 -93
  286. data/examples/system_monitor.rb +0 -94
  287. data/examples/table_select.rb +0 -70
  288. data/examples/test_analytics.rb +0 -65
  289. data/examples/test_box_demo.rb +0 -38
  290. data/examples/test_calendar_demo.rb +0 -66
  291. data/examples/test_dashboard.rb +0 -38
  292. data/examples/test_list_styles.rb +0 -61
  293. data/examples/test_login_form.rb +0 -63
  294. data/examples/test_map_demo.rb +0 -100
  295. data/examples/test_scroll_text.rb +0 -130
  296. data/examples/test_stock_ticker.rb +0 -39
  297. data/examples/test_system_monitor.rb +0 -40
  298. data/examples/test_table_select.rb +0 -37
  299. data/ext/ratatui_ruby/src/buffer.rs +0 -54
  300. data/lib/ratatui_ruby/dsl.rb +0 -64
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ratatui_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kerrick Long
@@ -91,73 +91,157 @@ files:
91
91
  - README.md
92
92
  - REUSE.toml
93
93
  - Rakefile
94
+ - doc/application_architecture.md
94
95
  - doc/application_testing.md
96
+ - doc/contributors/better_dx.md
95
97
  - doc/contributors/design.md
96
98
  - doc/contributors/design/ruby_frontend.md
97
99
  - doc/contributors/design/rust_backend.md
100
+ - doc/contributors/developing_examples.md
101
+ - doc/contributors/documentation_style.md
102
+ - doc/contributors/dwim_dx.md
103
+ - doc/contributors/example_analysis.md
98
104
  - doc/contributors/index.md
99
105
  - doc/custom.css
100
- - doc/images/examples-analytics.rb.png
101
- - doc/images/examples-box_demo.rb.png
102
- - doc/images/examples-calendar_demo.rb.png
103
- - doc/images/examples-chart_demo.rb.png
104
- - doc/images/examples-custom_widget.rb.png
105
- - doc/images/examples-dashboard.rb.png
106
- - doc/images/examples-list_styles.rb.png
107
- - doc/images/examples-login_form.rb.png
108
- - doc/images/examples-map_demo.rb.png
109
- - doc/images/examples-mouse_events.rb.png
110
- - doc/images/examples-popup_demo.rb.gif
111
- - doc/images/examples-quickstart_lifecycle.rb.png
112
- - doc/images/examples-scroll_text.rb.png
113
- - doc/images/examples-scrollbar_demo.rb.png
114
- - doc/images/examples-stock_ticker.rb.png
115
- - doc/images/examples-system_monitor.rb.png
116
- - doc/images/examples-table_select.rb.png
106
+ - doc/event_handling.md
107
+ - doc/images/all_events.png
108
+ - doc/images/analytics.png
109
+ - doc/images/block_padding.png
110
+ - doc/images/block_titles.png
111
+ - doc/images/box_demo.png
112
+ - doc/images/calendar_demo.png
113
+ - doc/images/cell_demo.png
114
+ - doc/images/chart_demo.png
115
+ - doc/images/custom_widget.png
116
+ - doc/images/flex_layout.png
117
+ - doc/images/gauge_demo.png
118
+ - doc/images/hit_test.png
119
+ - doc/images/line_gauge_demo.png
120
+ - doc/images/list_demo.png
121
+ - doc/images/list_styles.png
122
+ - doc/images/login_form.png
123
+ - doc/images/map_demo.png
124
+ - doc/images/mouse_events.png
125
+ - doc/images/popup_demo.png
126
+ - doc/images/quickstart_dsl.png
127
+ - doc/images/quickstart_lifecycle.png
128
+ - doc/images/ratatui_logo_demo.png
129
+ - doc/images/readme_usage.png
130
+ - doc/images/rich_text.png
131
+ - doc/images/scroll_text.png
132
+ - doc/images/scrollbar_demo.png
133
+ - doc/images/sparkline_demo.png
134
+ - doc/images/table_flex.png
135
+ - doc/images/table_select.png
136
+ - doc/images/widget_style_colors.png
117
137
  - doc/index.md
138
+ - doc/interactive_design.md
118
139
  - doc/quickstart.md
119
- - examples/analytics.rb
120
- - examples/box_demo.rb
121
- - examples/calendar_demo.rb
122
- - examples/chart_demo.rb
123
- - examples/custom_widget.rb
124
- - examples/dashboard.rb
125
- - examples/list_styles.rb
126
- - examples/login_form.rb
127
- - examples/map_demo.rb
128
- - examples/mouse_events.rb
129
- - examples/popup_demo.rb
130
- - examples/quickstart_dsl.rb
131
- - examples/quickstart_lifecycle.rb
132
- - examples/readme_usage.rb
133
- - examples/scroll_text.rb
134
- - examples/scrollbar_demo.rb
135
- - examples/stock_ticker.rb
136
- - examples/system_monitor.rb
137
- - examples/table_select.rb
138
- - examples/test_analytics.rb
139
- - examples/test_box_demo.rb
140
- - examples/test_calendar_demo.rb
141
- - examples/test_dashboard.rb
142
- - examples/test_list_styles.rb
143
- - examples/test_login_form.rb
144
- - examples/test_map_demo.rb
145
- - examples/test_popup_demo.rb
146
- - examples/test_scroll_text.rb
147
- - examples/test_stock_ticker.rb
148
- - examples/test_system_monitor.rb
149
- - examples/test_table_select.rb
140
+ - examples/all_events/app.rb
141
+ - examples/all_events/app.rbs
142
+ - examples/all_events/test_app.rb
143
+ - examples/analytics/app.rb
144
+ - examples/analytics/app.rbs
145
+ - examples/analytics/test_app.rb
146
+ - examples/block_padding/app.rb
147
+ - examples/block_padding/app.rbs
148
+ - examples/block_padding/test_app.rb
149
+ - examples/block_titles/app.rb
150
+ - examples/block_titles/app.rbs
151
+ - examples/block_titles/test_app.rb
152
+ - examples/box_demo/app.rb
153
+ - examples/box_demo/app.rbs
154
+ - examples/box_demo/test_app.rb
155
+ - examples/calendar_demo/app.rb
156
+ - examples/calendar_demo/app.rbs
157
+ - examples/calendar_demo/test_app.rb
158
+ - examples/cell_demo/app.rb
159
+ - examples/cell_demo/app.rbs
160
+ - examples/cell_demo/test_app.rb
161
+ - examples/chart_demo/app.rb
162
+ - examples/chart_demo/app.rbs
163
+ - examples/chart_demo/test_app.rb
164
+ - examples/custom_widget/app.rb
165
+ - examples/custom_widget/app.rbs
166
+ - examples/custom_widget/test_app.rb
167
+ - examples/flex_layout/app.rb
168
+ - examples/flex_layout/app.rbs
169
+ - examples/flex_layout/test_app.rb
170
+ - examples/gauge_demo/app.rb
171
+ - examples/gauge_demo/app.rbs
172
+ - examples/gauge_demo/test_app.rb
173
+ - examples/hit_test/app.rb
174
+ - examples/hit_test/app.rbs
175
+ - examples/hit_test/test_app.rb
176
+ - examples/line_gauge_demo/app.rb
177
+ - examples/line_gauge_demo/app.rbs
178
+ - examples/line_gauge_demo/test_app.rb
179
+ - examples/list_demo/app.rb
180
+ - examples/list_demo/app.rbs
181
+ - examples/list_demo/test_app.rb
182
+ - examples/list_styles/app.rb
183
+ - examples/list_styles/app.rbs
184
+ - examples/list_styles/test_app.rb
185
+ - examples/login_form/app.rb
186
+ - examples/login_form/app.rbs
187
+ - examples/login_form/test_app.rb
188
+ - examples/map_demo/app.rb
189
+ - examples/map_demo/app.rbs
190
+ - examples/map_demo/test_app.rb
191
+ - examples/mouse_events/app.rb
192
+ - examples/mouse_events/app.rbs
193
+ - examples/mouse_events/test_app.rb
194
+ - examples/popup_demo/app.rb
195
+ - examples/popup_demo/app.rbs
196
+ - examples/popup_demo/test_app.rb
197
+ - examples/quickstart_dsl/app.rb
198
+ - examples/quickstart_dsl/app.rbs
199
+ - examples/quickstart_dsl/test_app.rb
200
+ - examples/quickstart_lifecycle/app.rb
201
+ - examples/quickstart_lifecycle/app.rbs
202
+ - examples/quickstart_lifecycle/test_app.rb
203
+ - examples/ratatui_logo_demo/app.rb
204
+ - examples/ratatui_logo_demo/app.rbs
205
+ - examples/ratatui_logo_demo/test_app.rb
206
+ - examples/ratatui_mascot_demo/app.rb
207
+ - examples/ratatui_mascot_demo/app.rbs
208
+ - examples/ratatui_mascot_demo/test_app.rb
209
+ - examples/readme_usage/app.rb
210
+ - examples/readme_usage/app.rbs
211
+ - examples/readme_usage/test_app.rb
212
+ - examples/rich_text/app.rb
213
+ - examples/rich_text/app.rbs
214
+ - examples/rich_text/test_app.rb
215
+ - examples/scroll_text/app.rb
216
+ - examples/scroll_text/app.rbs
217
+ - examples/scroll_text/test_app.rb
218
+ - examples/scrollbar_demo/app.rb
219
+ - examples/scrollbar_demo/app.rbs
220
+ - examples/scrollbar_demo/test_app.rb
221
+ - examples/sparkline_demo/app.rb
222
+ - examples/sparkline_demo/app.rbs
223
+ - examples/sparkline_demo/test_app.rb
224
+ - examples/table_flex/app.rb
225
+ - examples/table_flex/app.rbs
226
+ - examples/table_flex/test_app.rb
227
+ - examples/table_select/app.rb
228
+ - examples/table_select/app.rbs
229
+ - examples/table_select/test_app.rb
230
+ - examples/widget_style_colors/app.rb
231
+ - examples/widget_style_colors/app.rbs
232
+ - examples/widget_style_colors/test_app.rb
150
233
  - ext/ratatui_ruby/.cargo/config.toml
151
234
  - ext/ratatui_ruby/.gitignore
152
235
  - ext/ratatui_ruby/Cargo.lock
153
236
  - ext/ratatui_ruby/Cargo.toml
237
+ - ext/ratatui_ruby/clippy.toml
154
238
  - ext/ratatui_ruby/extconf.rb
155
- - ext/ratatui_ruby/src/buffer.rs
156
239
  - ext/ratatui_ruby/src/events.rs
157
240
  - ext/ratatui_ruby/src/lib.rs
158
241
  - ext/ratatui_ruby/src/rendering.rs
159
242
  - ext/ratatui_ruby/src/style.rs
160
243
  - ext/ratatui_ruby/src/terminal.rs
244
+ - ext/ratatui_ruby/src/text.rs
161
245
  - ext/ratatui_ruby/src/widgets/barchart.rs
162
246
  - ext/ratatui_ruby/src/widgets/block.rs
163
247
  - ext/ratatui_ruby/src/widgets/calendar.rs
@@ -168,18 +252,29 @@ files:
168
252
  - ext/ratatui_ruby/src/widgets/cursor.rs
169
253
  - ext/ratatui_ruby/src/widgets/gauge.rs
170
254
  - ext/ratatui_ruby/src/widgets/layout.rs
255
+ - ext/ratatui_ruby/src/widgets/line_gauge.rs
171
256
  - ext/ratatui_ruby/src/widgets/list.rs
172
257
  - ext/ratatui_ruby/src/widgets/mod.rs
173
258
  - ext/ratatui_ruby/src/widgets/overlay.rs
174
259
  - ext/ratatui_ruby/src/widgets/paragraph.rs
260
+ - ext/ratatui_ruby/src/widgets/ratatui_logo.rs
261
+ - ext/ratatui_ruby/src/widgets/ratatui_mascot.rs
175
262
  - ext/ratatui_ruby/src/widgets/scrollbar.rs
176
263
  - ext/ratatui_ruby/src/widgets/sparkline.rs
177
264
  - ext/ratatui_ruby/src/widgets/table.rs
178
265
  - ext/ratatui_ruby/src/widgets/tabs.rs
179
266
  - lib/ratatui_ruby.rb
180
- - lib/ratatui_ruby/dsl.rb
181
- - lib/ratatui_ruby/output.rb
267
+ - lib/ratatui_ruby/cell.rb
268
+ - lib/ratatui_ruby/event.rb
269
+ - lib/ratatui_ruby/event/focus_gained.rb
270
+ - lib/ratatui_ruby/event/focus_lost.rb
271
+ - lib/ratatui_ruby/event/key.rb
272
+ - lib/ratatui_ruby/event/mouse.rb
273
+ - lib/ratatui_ruby/event/paste.rb
274
+ - lib/ratatui_ruby/event/resize.rb
182
275
  - lib/ratatui_ruby/schema/bar_chart.rb
276
+ - lib/ratatui_ruby/schema/bar_chart/bar.rb
277
+ - lib/ratatui_ruby/schema/bar_chart/bar_group.rb
183
278
  - lib/ratatui_ruby/schema/block.rb
184
279
  - lib/ratatui_ruby/schema/calendar.rb
185
280
  - lib/ratatui_ruby/schema/canvas.rb
@@ -188,23 +283,32 @@ files:
188
283
  - lib/ratatui_ruby/schema/clear.rb
189
284
  - lib/ratatui_ruby/schema/constraint.rb
190
285
  - lib/ratatui_ruby/schema/cursor.rb
286
+ - lib/ratatui_ruby/schema/draw.rb
191
287
  - lib/ratatui_ruby/schema/gauge.rb
192
288
  - lib/ratatui_ruby/schema/layout.rb
289
+ - lib/ratatui_ruby/schema/line_gauge.rb
193
290
  - lib/ratatui_ruby/schema/list.rb
194
291
  - lib/ratatui_ruby/schema/overlay.rb
195
292
  - lib/ratatui_ruby/schema/paragraph.rb
293
+ - lib/ratatui_ruby/schema/ratatui_logo.rb
294
+ - lib/ratatui_ruby/schema/ratatui_mascot.rb
196
295
  - lib/ratatui_ruby/schema/rect.rb
197
296
  - lib/ratatui_ruby/schema/scrollbar.rb
297
+ - lib/ratatui_ruby/schema/shape/label.rb
198
298
  - lib/ratatui_ruby/schema/sparkline.rb
199
299
  - lib/ratatui_ruby/schema/style.rb
200
300
  - lib/ratatui_ruby/schema/table.rb
201
301
  - lib/ratatui_ruby/schema/tabs.rb
302
+ - lib/ratatui_ruby/schema/text.rb
303
+ - lib/ratatui_ruby/session.rb
202
304
  - lib/ratatui_ruby/test_helper.rb
203
305
  - lib/ratatui_ruby/version.rb
204
306
  - mise.toml
205
- - sig/ratatui_ruby/buffer.rbs
307
+ - sig/ratatui_ruby/event.rbs
206
308
  - sig/ratatui_ruby/ratatui_ruby.rbs
207
309
  - sig/ratatui_ruby/schema/bar_chart.rbs
310
+ - sig/ratatui_ruby/schema/bar_chart/bar.rbs
311
+ - sig/ratatui_ruby/schema/bar_chart/bar_group.rbs
208
312
  - sig/ratatui_ruby/schema/block.rbs
209
313
  - sig/ratatui_ruby/schema/calendar.rbs
210
314
  - sig/ratatui_ruby/schema/canvas.rbs
@@ -212,17 +316,22 @@ files:
212
316
  - sig/ratatui_ruby/schema/chart.rbs
213
317
  - sig/ratatui_ruby/schema/constraint.rbs
214
318
  - sig/ratatui_ruby/schema/cursor.rbs
319
+ - sig/ratatui_ruby/schema/draw.rbs
215
320
  - sig/ratatui_ruby/schema/gauge.rbs
216
321
  - sig/ratatui_ruby/schema/layout.rbs
322
+ - sig/ratatui_ruby/schema/line_gauge.rbs
217
323
  - sig/ratatui_ruby/schema/list.rbs
218
324
  - sig/ratatui_ruby/schema/overlay.rbs
219
325
  - sig/ratatui_ruby/schema/paragraph.rbs
326
+ - sig/ratatui_ruby/schema/ratatui_logo.rbs
327
+ - sig/ratatui_ruby/schema/ratatui_mascot.rbs
220
328
  - sig/ratatui_ruby/schema/rect.rbs
221
329
  - sig/ratatui_ruby/schema/scrollbar.rbs
222
330
  - sig/ratatui_ruby/schema/sparkline.rbs
223
331
  - sig/ratatui_ruby/schema/style.rbs
224
332
  - sig/ratatui_ruby/schema/table.rbs
225
333
  - sig/ratatui_ruby/schema/tabs.rbs
334
+ - sig/ratatui_ruby/schema/text.rbs
226
335
  - sig/ratatui_ruby/test_helper.rbs
227
336
  - sig/ratatui_ruby/version.rbs
228
337
  - tasks/bump.rake
@@ -243,6 +352,18 @@ files:
243
352
  - tasks/resources/index.html.erb
244
353
  - tasks/resources/rubies.yml
245
354
  - tasks/sourcehut.rake
355
+ - tasks/terminal_preview.rake
356
+ - tasks/terminal_preview/app_screenshot.rb
357
+ - tasks/terminal_preview/crash_report.rb
358
+ - tasks/terminal_preview/example_app.rb
359
+ - tasks/terminal_preview/launcher_script.rb
360
+ - tasks/terminal_preview/preview_collection.rb
361
+ - tasks/terminal_preview/preview_timing.rb
362
+ - tasks/terminal_preview/safety_confirmation.rb
363
+ - tasks/terminal_preview/saved_screenshot.rb
364
+ - tasks/terminal_preview/system_appearance.rb
365
+ - tasks/terminal_preview/terminal_window.rb
366
+ - tasks/terminal_preview/window_id.rb
246
367
  - tasks/test.rake
247
368
  - tasks/website.rake
248
369
  - tasks/website/index_page.rb
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,88 +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
- $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
7
- require "ratatui_ruby"
8
-
9
- # Analytics Dashboard Example
10
- # Demonstrates Tabs and BarChart widgets.
11
-
12
- class AnalyticsApp
13
- def initialize
14
- @selected_tab = 0
15
- @tabs = ["Revenue", "Traffic", "Errors"]
16
- end
17
-
18
- def run
19
- RatatuiRuby.init_terminal
20
- begin
21
- loop do
22
- render
23
- break if handle_input == :quit
24
- sleep 0.05
25
- end
26
- ensure
27
- RatatuiRuby.restore_terminal
28
- end
29
- end
30
-
31
- def render
32
- # Data for different tabs
33
- data = case @selected_tab
34
- when 0 # Revenue
35
- { "Q1" => 50, "Q2" => 80 }
36
- when 1 # Traffic
37
- { "Mon" => 120, "Tue" => 150 }
38
- when 2 # Errors
39
- { "DB" => 5, "UI" => 2 }
40
- end
41
-
42
- style = case @selected_tab
43
- when 0 then RatatuiRuby::Style.new(fg: "green")
44
- when 1 then RatatuiRuby::Style.new(fg: "blue")
45
- when 2 then RatatuiRuby::Style.new(fg: "red")
46
- end
47
-
48
- # Build the UI
49
- ui = RatatuiRuby::Layout.new(
50
- direction: :vertical,
51
- constraints: [
52
- RatatuiRuby::Constraint.new(type: :length, value: 3),
53
- RatatuiRuby::Constraint.new(type: :min, value: 0),
54
- ],
55
- children: [
56
- RatatuiRuby::Tabs.new(
57
- titles: @tabs,
58
- selected_index: @selected_tab,
59
- block: RatatuiRuby::Block.new(title: "Views", borders: [:all])
60
- ),
61
- RatatuiRuby::BarChart.new(
62
- data:,
63
- bar_width: 10,
64
- style:,
65
- block: RatatuiRuby::Block.new(title: "Analytics: #{@tabs[@selected_tab]}", borders: [:all])
66
- ),
67
- ]
68
- )
69
-
70
- RatatuiRuby.draw(ui)
71
- end
72
-
73
- def handle_input
74
- event = RatatuiRuby.poll_event
75
- if event
76
- case event[:code]
77
- when "q"
78
- :quit
79
- when "right"
80
- @selected_tab = (@selected_tab + 1) % @tabs.size
81
- when "left"
82
- @selected_tab = (@selected_tab - 1) % @tabs.size
83
- end
84
- end
85
- end
86
- end
87
-
88
- AnalyticsApp.new.run if __FILE__ == $0
data/examples/box_demo.rb DELETED
@@ -1,71 +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
- $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
7
- require "ratatui_ruby"
8
-
9
- class BoxDemoApp
10
- def initialize
11
- @color = "green"
12
- @text = "Press Arrow Keys (q to quit)"
13
- end
14
-
15
- def run
16
- RatatuiRuby.init_terminal
17
- begin
18
- loop do
19
- render
20
- break if handle_input == :quit
21
- end
22
- ensure
23
- RatatuiRuby.restore_terminal
24
- end
25
- end
26
-
27
- def render
28
- # 1. State/View
29
- block = RatatuiRuby::Block.new(
30
- title: "Box Demo",
31
- borders: [:all],
32
- border_color: @color
33
- )
34
-
35
- view_tree = RatatuiRuby::Paragraph.new(
36
- text: @text,
37
- fg: @color,
38
- block:
39
- )
40
-
41
- # 2. Render
42
- RatatuiRuby.draw(view_tree)
43
- end
44
-
45
- def handle_input
46
- # 3. Events
47
- event = RatatuiRuby.poll_event
48
- return unless event
49
-
50
- if event[:type] == :key
51
- case event[:code]
52
- when "q"
53
- :quit
54
- when "up"
55
- @color = "red"
56
- @text = "Up Pressed!"
57
- when "down"
58
- @color = "blue"
59
- @text = "Down Pressed!"
60
- when "left"
61
- @color = "yellow"
62
- @text = "Left Pressed!"
63
- when "right"
64
- @color = "magenta"
65
- @text = "Right Pressed!"
66
- end
67
- end
68
- end
69
- end
70
-
71
- BoxDemoApp.new.run if __FILE__ == $0
@@ -1,55 +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
- $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
7
- require "ratatui_ruby"
8
-
9
- # A demo application for the Calendar widget.
10
- module CalendarDemo
11
- def self.run
12
- RatatuiRuby.init_terminal
13
-
14
- loop do
15
- now = Time.now
16
- calendar = RatatuiRuby::Calendar.new(
17
- year: now.year,
18
- month: now.month,
19
- header_style: RatatuiRuby::Style.new(fg: "yellow", modifiers: [:bold]),
20
- block: RatatuiRuby::Block.new(title: " Calendar (q = quit) ", borders: [:all])
21
- )
22
-
23
- # Constrain the calendar to 24x10 characters
24
- view = RatatuiRuby::Layout.new(
25
- direction: :vertical,
26
- constraints: [
27
- RatatuiRuby::Constraint.length(10),
28
- RatatuiRuby::Constraint.min(0),
29
- ],
30
- children: [
31
- RatatuiRuby::Layout.new(
32
- direction: :horizontal,
33
- constraints: [
34
- RatatuiRuby::Constraint.length(24),
35
- RatatuiRuby::Constraint.min(0),
36
- ],
37
- children: [calendar, nil],
38
- ),
39
- nil,
40
- ],
41
- )
42
-
43
- RatatuiRuby.draw(view)
44
-
45
- event = RatatuiRuby.poll_event
46
- break if event && event[:type] == :key && event[:code] == "q"
47
-
48
- sleep 0.1
49
- end
50
- ensure
51
- RatatuiRuby.restore_terminal
52
- end
53
- end
54
-
55
- CalendarDemo.run if __FILE__ == $PROGRAM_NAME
@@ -1,84 +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
- $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
7
- require "ratatui_ruby"
8
-
9
- # Chart Demo
10
- # Demonstrates Scatter and Line datasets in a single Chart.
11
- class ChartDemoApp
12
- def run
13
- RatatuiRuby.init_terminal
14
- begin
15
- loop do
16
- render
17
- break if handle_input == :quit
18
- sleep 0.1
19
- end
20
- ensure
21
- RatatuiRuby.restore_terminal
22
- end
23
- end
24
-
25
- def render
26
- # Scatter data: Random points
27
- scatter_data = Array.new(20) { [rand(0.0..10.0), rand(-1.0..1.0)] }
28
-
29
- # Line data: Sine wave
30
- line_data = (0..100).map do |i|
31
- x = i / 10.0
32
- [x, Math.sin(x)]
33
- end
34
-
35
- datasets = [
36
- RatatuiRuby::Dataset.new(
37
- name: "Scatter",
38
- data: scatter_data,
39
- color: "red",
40
- marker: :dot,
41
- graph_type: :scatter,
42
- ),
43
- RatatuiRuby::Dataset.new(
44
- name: "Line",
45
- data: line_data,
46
- color: "green",
47
- marker: :braille,
48
- graph_type: :line,
49
- ),
50
- ]
51
-
52
- chart = RatatuiRuby::Chart.new(
53
- datasets:,
54
- x_axis: RatatuiRuby::Axis.new(
55
- title: "Time",
56
- bounds: [0.0, 10.0],
57
- labels: %w[0 5 10],
58
- style: RatatuiRuby::Style.new(fg: :yellow),
59
- ),
60
- y_axis: RatatuiRuby::Axis.new(
61
- title: "Amplitude",
62
- bounds: [-1.0, 1.0],
63
- labels: %w[-1 0 1],
64
- style: RatatuiRuby::Style.new(fg: :cyan),
65
- ),
66
- block: RatatuiRuby::Block.new(
67
- title: "Chart Demo (Q to quit)",
68
- borders: [:all],
69
- ),
70
- )
71
-
72
- RatatuiRuby.draw(chart)
73
- end
74
-
75
- def handle_input
76
- event = RatatuiRuby.poll_event
77
- return nil unless event
78
-
79
- return :quit if event[:type] == :key && event[:code] == "q"
80
- nil
81
- end
82
- end
83
-
84
- ChartDemoApp.new.run if __FILE__ == $PROGRAM_NAME