ratatui_ruby 0.7.1 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. checksums.yaml +4 -4
  2. data/.builds/ruby-3.2.yml +1 -1
  3. data/.builds/ruby-3.3.yml +1 -1
  4. data/.builds/ruby-3.4.yml +1 -1
  5. data/.builds/ruby-4.0.0.yml +1 -1
  6. data/AGENTS.md +12 -4
  7. data/CHANGELOG.md +49 -0
  8. data/README.md +7 -7
  9. data/Rakefile +1 -1
  10. data/doc/{application_architecture.md → concepts/application_architecture.md} +30 -0
  11. data/doc/{application_testing.md → concepts/application_testing.md} +4 -2
  12. data/doc/{event_handling.md → concepts/event_handling.md} +1 -1
  13. data/doc/contributors/auditing/parity.md +233 -0
  14. data/doc/contributors/developing_examples.md +10 -10
  15. data/doc/contributors/upstream_requests/tab_rects.md +173 -0
  16. data/doc/contributors/upstream_requests/title_rects.md +132 -0
  17. data/doc/contributors/v1.0.0_blockers.md +54 -747
  18. data/doc/{quickstart.md → getting_started/quickstart.md} +26 -26
  19. data/doc/{why.md → getting_started/why.md} +1 -1
  20. data/doc/index.md +23 -9
  21. data/doc/{terminal_limitations.md → troubleshooting/terminal_limitations.md} +33 -0
  22. data/doc/troubleshooting/tui_output.md +76 -0
  23. data/examples/app_all_events/README.md +1 -0
  24. data/examples/app_all_events/app.rb +2 -0
  25. data/examples/app_all_events/model/app_model.rb +2 -0
  26. data/examples/app_all_events/model/event_color_cycle.rb +2 -0
  27. data/examples/app_all_events/model/event_entry.rb +2 -0
  28. data/examples/app_all_events/model/msg.rb +2 -0
  29. data/examples/app_all_events/model/timestamp.rb +2 -0
  30. data/examples/app_all_events/update.rb +2 -0
  31. data/examples/app_all_events/view/app_view.rb +2 -0
  32. data/examples/app_all_events/view/controls_view.rb +2 -0
  33. data/examples/app_all_events/view/counts_view.rb +2 -0
  34. data/examples/app_all_events/view/live_view.rb +2 -0
  35. data/examples/app_all_events/view/log_view.rb +2 -0
  36. data/examples/app_all_events/view.rb +2 -0
  37. data/examples/app_color_picker/README.md +2 -0
  38. data/examples/app_color_picker/app.rb +2 -0
  39. data/examples/app_color_picker/clipboard.rb +2 -0
  40. data/examples/app_color_picker/color.rb +2 -0
  41. data/examples/app_color_picker/controls.rb +2 -0
  42. data/examples/app_color_picker/copy_dialog.rb +2 -0
  43. data/examples/app_color_picker/export_pane.rb +2 -0
  44. data/examples/app_color_picker/harmony.rb +2 -0
  45. data/examples/app_color_picker/input.rb +2 -0
  46. data/examples/app_color_picker/main_container.rb +2 -0
  47. data/examples/app_color_picker/palette.rb +2 -0
  48. data/examples/app_login_form/README.md +3 -0
  49. data/examples/app_login_form/app.rb +2 -0
  50. data/examples/app_stateful_interaction/README.md +2 -0
  51. data/examples/app_stateful_interaction/app.rb +2 -0
  52. data/examples/timeout_demo.rb +2 -0
  53. data/examples/verify_quickstart_dsl/README.md +2 -2
  54. data/examples/verify_quickstart_dsl/app.rb +2 -0
  55. data/examples/verify_quickstart_layout/README.md +2 -2
  56. data/examples/verify_quickstart_layout/app.rb +2 -0
  57. data/examples/verify_quickstart_lifecycle/README.md +2 -2
  58. data/examples/verify_quickstart_lifecycle/app.rb +2 -0
  59. data/examples/verify_readme_usage/app.rb +2 -0
  60. data/examples/{widget_barchart_demo → widget_barchart}/README.md +5 -3
  61. data/examples/{widget_barchart_demo → widget_barchart}/app.rb +7 -5
  62. data/examples/{widget_block_demo → widget_block}/README.md +5 -3
  63. data/examples/{widget_block_demo → widget_block}/app.rb +6 -4
  64. data/examples/{widget_box_demo → widget_box}/README.md +7 -4
  65. data/examples/{widget_box_demo → widget_box}/app.rb +7 -5
  66. data/examples/{widget_calendar_demo → widget_calendar}/README.md +6 -3
  67. data/examples/{widget_calendar_demo → widget_calendar}/app.rb +6 -4
  68. data/examples/{widget_canvas_demo → widget_canvas}/README.md +2 -2
  69. data/examples/{widget_canvas_demo → widget_canvas}/app.rb +6 -4
  70. data/examples/{widget_cell_demo → widget_cell}/README.md +6 -3
  71. data/examples/{widget_cell_demo → widget_cell}/app.rb +7 -5
  72. data/examples/{widget_center_demo → widget_center}/README.md +2 -2
  73. data/examples/{widget_center_demo → widget_center}/app.rb +6 -4
  74. data/examples/{widget_chart_demo → widget_chart}/README.md +7 -4
  75. data/examples/{widget_chart_demo → widget_chart}/app.rb +7 -5
  76. data/examples/{widget_gauge_demo → widget_gauge}/README.md +6 -3
  77. data/examples/{widget_gauge_demo → widget_gauge}/app.rb +7 -5
  78. data/examples/widget_layout_split/README.md +5 -2
  79. data/examples/widget_layout_split/app.rb +3 -1
  80. data/examples/{widget_line_gauge_demo → widget_line_gauge}/README.md +6 -3
  81. data/examples/{widget_line_gauge_demo → widget_line_gauge}/app.rb +7 -5
  82. data/examples/{widget_list_demo → widget_list}/README.md +7 -4
  83. data/examples/{widget_list_demo → widget_list}/app.rb +7 -5
  84. data/examples/{widget_map_demo → widget_map}/README.md +7 -4
  85. data/examples/{widget_map_demo → widget_map}/app.rb +4 -2
  86. data/examples/{widget_overlay_demo → widget_overlay}/README.md +6 -3
  87. data/examples/{widget_overlay_demo → widget_overlay}/app.rb +5 -3
  88. data/examples/{widget_popup_demo → widget_popup}/README.md +7 -4
  89. data/examples/{widget_popup_demo → widget_popup}/app.rb +6 -4
  90. data/examples/{widget_ratatui_logo_demo → widget_ratatui_logo}/README.md +6 -3
  91. data/examples/{widget_ratatui_logo_demo → widget_ratatui_logo}/app.rb +8 -6
  92. data/examples/{widget_ratatui_mascot_demo → widget_ratatui_mascot}/README.md +6 -3
  93. data/examples/{widget_ratatui_mascot_demo → widget_ratatui_mascot}/app.rb +6 -4
  94. data/examples/widget_rect/README.md +5 -2
  95. data/examples/widget_rect/app.rb +2 -0
  96. data/examples/widget_render/README.md +4 -1
  97. data/examples/widget_render/app.rb +2 -0
  98. data/examples/widget_rich_text/README.md +4 -1
  99. data/examples/widget_rich_text/app.rb +2 -0
  100. data/examples/widget_scroll_text/README.md +4 -1
  101. data/examples/widget_scroll_text/app.rb +3 -1
  102. data/examples/{widget_scrollbar_demo → widget_scrollbar}/README.md +7 -4
  103. data/examples/{widget_scrollbar_demo → widget_scrollbar}/app.rb +6 -4
  104. data/examples/{widget_sparkline_demo → widget_sparkline}/README.md +6 -3
  105. data/examples/{widget_sparkline_demo → widget_sparkline}/app.rb +7 -5
  106. data/examples/widget_style_colors/README.md +4 -1
  107. data/examples/widget_style_colors/app.rb +2 -0
  108. data/examples/{widget_table_demo → widget_table}/README.md +7 -4
  109. data/examples/{widget_table_demo → widget_table}/app.rb +4 -2
  110. data/examples/{widget_tabs_demo → widget_tabs}/README.md +6 -3
  111. data/examples/{widget_tabs_demo → widget_tabs}/app.rb +7 -5
  112. data/examples/widget_text_width/README.md +5 -2
  113. data/examples/widget_text_width/app.rb +2 -0
  114. data/exe/.gitkeep +0 -0
  115. data/ext/ratatui_ruby/Cargo.lock +1 -1
  116. data/ext/ratatui_ruby/Cargo.toml +1 -1
  117. data/ext/ratatui_ruby/extconf.rb +2 -0
  118. data/ext/ratatui_ruby/src/lib.rs +2 -2
  119. data/ext/ratatui_ruby/src/rendering.rs +9 -0
  120. data/ext/ratatui_ruby/src/style.rs +22 -2
  121. data/ext/ratatui_ruby/src/text.rs +26 -0
  122. data/ext/ratatui_ruby/src/widgets/barchart.rs +8 -6
  123. data/ext/ratatui_ruby/src/widgets/chart.rs +31 -4
  124. data/ext/ratatui_ruby/src/widgets/table.rs +13 -5
  125. data/ext/ratatui_ruby/src/widgets/tabs.rs +49 -9
  126. data/lib/ratatui_ruby/buffer/cell.rb +2 -0
  127. data/lib/ratatui_ruby/buffer.rb +2 -0
  128. data/lib/ratatui_ruby/cell.rb +2 -0
  129. data/lib/ratatui_ruby/event/focus_gained.rb +2 -0
  130. data/lib/ratatui_ruby/event/focus_lost.rb +2 -0
  131. data/lib/ratatui_ruby/event/key/character.rb +2 -0
  132. data/lib/ratatui_ruby/event/key/media.rb +2 -0
  133. data/lib/ratatui_ruby/event/key/modifier.rb +2 -0
  134. data/lib/ratatui_ruby/event/key/navigation.rb +2 -0
  135. data/lib/ratatui_ruby/event/key/system.rb +2 -0
  136. data/lib/ratatui_ruby/event/key.rb +2 -0
  137. data/lib/ratatui_ruby/event/mouse.rb +2 -0
  138. data/lib/ratatui_ruby/event/none.rb +2 -0
  139. data/lib/ratatui_ruby/event/paste.rb +2 -0
  140. data/lib/ratatui_ruby/event/resize.rb +2 -0
  141. data/lib/ratatui_ruby/event.rb +2 -0
  142. data/lib/ratatui_ruby/frame.rb +2 -0
  143. data/lib/ratatui_ruby/layout/constraint.rb +2 -0
  144. data/lib/ratatui_ruby/layout/layout.rb +2 -0
  145. data/lib/ratatui_ruby/layout/rect.rb +2 -0
  146. data/lib/ratatui_ruby/layout.rb +2 -0
  147. data/lib/ratatui_ruby/list_state.rb +2 -0
  148. data/lib/ratatui_ruby/schema/bar_chart/bar.rb +2 -0
  149. data/lib/ratatui_ruby/schema/bar_chart/bar_group.rb +2 -0
  150. data/lib/ratatui_ruby/schema/bar_chart.rb +4 -2
  151. data/lib/ratatui_ruby/schema/block.rb +4 -2
  152. data/lib/ratatui_ruby/schema/calendar.rb +4 -2
  153. data/lib/ratatui_ruby/schema/canvas.rb +2 -0
  154. data/lib/ratatui_ruby/schema/center.rb +2 -0
  155. data/lib/ratatui_ruby/schema/chart.rb +4 -2
  156. data/lib/ratatui_ruby/schema/clear.rb +2 -0
  157. data/lib/ratatui_ruby/schema/constraint.rb +2 -0
  158. data/lib/ratatui_ruby/schema/cursor.rb +2 -0
  159. data/lib/ratatui_ruby/schema/draw.rb +2 -0
  160. data/lib/ratatui_ruby/schema/gauge.rb +4 -2
  161. data/lib/ratatui_ruby/schema/layout.rb +2 -0
  162. data/lib/ratatui_ruby/schema/line_gauge.rb +4 -2
  163. data/lib/ratatui_ruby/schema/list.rb +3 -1
  164. data/lib/ratatui_ruby/schema/list_item.rb +2 -0
  165. data/lib/ratatui_ruby/schema/overlay.rb +2 -0
  166. data/lib/ratatui_ruby/schema/paragraph.rb +2 -0
  167. data/lib/ratatui_ruby/schema/ratatui_logo.rb +4 -2
  168. data/lib/ratatui_ruby/schema/ratatui_mascot.rb +4 -2
  169. data/lib/ratatui_ruby/schema/rect.rb +2 -0
  170. data/lib/ratatui_ruby/schema/row.rb +2 -0
  171. data/lib/ratatui_ruby/schema/scrollbar.rb +4 -2
  172. data/lib/ratatui_ruby/schema/shape/label.rb +2 -0
  173. data/lib/ratatui_ruby/schema/sparkline.rb +4 -2
  174. data/lib/ratatui_ruby/schema/style.rb +2 -0
  175. data/lib/ratatui_ruby/schema/table.rb +2 -0
  176. data/lib/ratatui_ruby/schema/tabs.rb +4 -2
  177. data/lib/ratatui_ruby/schema/text.rb +2 -0
  178. data/lib/ratatui_ruby/scrollbar_state.rb +2 -0
  179. data/lib/ratatui_ruby/style/style.rb +3 -0
  180. data/lib/ratatui_ruby/style.rb +2 -0
  181. data/lib/ratatui_ruby/table_state.rb +2 -0
  182. data/lib/ratatui_ruby/test_helper/event_injection.rb +2 -0
  183. data/lib/ratatui_ruby/test_helper/snapshot.rb +62 -21
  184. data/lib/ratatui_ruby/test_helper/snapshots/axis_labels_alignment.ansi +24 -0
  185. data/lib/ratatui_ruby/test_helper/snapshots/axis_labels_alignment.txt +24 -0
  186. data/lib/ratatui_ruby/test_helper/snapshots/barchart_styled_label.ansi +5 -0
  187. data/lib/ratatui_ruby/test_helper/snapshots/barchart_styled_label.txt +5 -0
  188. data/lib/ratatui_ruby/test_helper/snapshots/chart_rendering.ansi +24 -0
  189. data/lib/ratatui_ruby/test_helper/snapshots/chart_rendering.txt +24 -0
  190. data/lib/ratatui_ruby/test_helper/snapshots/half_block_marker.ansi +12 -0
  191. data/lib/ratatui_ruby/test_helper/snapshots/half_block_marker.txt +12 -0
  192. data/lib/ratatui_ruby/test_helper/snapshots/legend_position_bottom.ansi +12 -0
  193. data/lib/ratatui_ruby/test_helper/snapshots/legend_position_bottom.txt +12 -0
  194. data/lib/ratatui_ruby/test_helper/snapshots/legend_position_left.ansi +12 -0
  195. data/lib/ratatui_ruby/test_helper/snapshots/legend_position_left.txt +12 -0
  196. data/lib/ratatui_ruby/test_helper/snapshots/legend_position_right.ansi +12 -0
  197. data/lib/ratatui_ruby/test_helper/snapshots/legend_position_right.txt +12 -0
  198. data/lib/ratatui_ruby/test_helper/snapshots/legend_position_top.ansi +12 -0
  199. data/lib/ratatui_ruby/test_helper/snapshots/legend_position_top.txt +12 -0
  200. data/lib/ratatui_ruby/test_helper/snapshots/my_snapshot.txt +1 -0
  201. data/lib/ratatui_ruby/test_helper/snapshots/styled_axis_title.ansi +10 -0
  202. data/lib/ratatui_ruby/test_helper/snapshots/styled_axis_title.txt +10 -0
  203. data/lib/ratatui_ruby/test_helper/snapshots/styled_dataset_name.ansi +10 -0
  204. data/lib/ratatui_ruby/test_helper/snapshots/styled_dataset_name.txt +10 -0
  205. data/lib/ratatui_ruby/test_helper/style_assertions.rb +2 -0
  206. data/lib/ratatui_ruby/test_helper/terminal.rb +5 -0
  207. data/lib/ratatui_ruby/test_helper/test_doubles.rb +2 -0
  208. data/lib/ratatui_ruby/test_helper.rb +6 -4
  209. data/lib/ratatui_ruby/tui/buffer_factories.rb +2 -0
  210. data/lib/ratatui_ruby/tui/canvas_factories.rb +2 -0
  211. data/lib/ratatui_ruby/tui/core.rb +2 -0
  212. data/lib/ratatui_ruby/tui/layout_factories.rb +2 -0
  213. data/lib/ratatui_ruby/tui/state_factories.rb +2 -0
  214. data/lib/ratatui_ruby/tui/style_factories.rb +2 -0
  215. data/lib/ratatui_ruby/tui/text_factories.rb +2 -0
  216. data/lib/ratatui_ruby/tui/widget_factories.rb +2 -0
  217. data/lib/ratatui_ruby/tui.rb +2 -0
  218. data/lib/ratatui_ruby/version.rb +3 -1
  219. data/lib/ratatui_ruby/widgets/bar_chart/bar.rb +2 -0
  220. data/lib/ratatui_ruby/widgets/bar_chart/bar_group.rb +2 -0
  221. data/lib/ratatui_ruby/widgets/bar_chart.rb +7 -4
  222. data/lib/ratatui_ruby/widgets/block.rb +46 -2
  223. data/lib/ratatui_ruby/widgets/calendar.rb +4 -2
  224. data/lib/ratatui_ruby/widgets/canvas.rb +2 -0
  225. data/lib/ratatui_ruby/widgets/cell.rb +2 -0
  226. data/lib/ratatui_ruby/widgets/center.rb +2 -0
  227. data/lib/ratatui_ruby/widgets/chart.rb +13 -6
  228. data/lib/ratatui_ruby/widgets/clear.rb +2 -0
  229. data/lib/ratatui_ruby/widgets/cursor.rb +2 -0
  230. data/lib/ratatui_ruby/widgets/gauge.rb +4 -2
  231. data/lib/ratatui_ruby/widgets/line_gauge.rb +4 -2
  232. data/lib/ratatui_ruby/widgets/list.rb +3 -1
  233. data/lib/ratatui_ruby/widgets/list_item.rb +2 -0
  234. data/lib/ratatui_ruby/widgets/overlay.rb +2 -0
  235. data/lib/ratatui_ruby/widgets/paragraph.rb +2 -0
  236. data/lib/ratatui_ruby/widgets/ratatui_logo.rb +4 -2
  237. data/lib/ratatui_ruby/widgets/ratatui_mascot.rb +4 -2
  238. data/lib/ratatui_ruby/widgets/row.rb +2 -0
  239. data/lib/ratatui_ruby/widgets/scrollbar.rb +4 -2
  240. data/lib/ratatui_ruby/widgets/shape/label.rb +2 -0
  241. data/lib/ratatui_ruby/widgets/sparkline.rb +7 -4
  242. data/lib/ratatui_ruby/widgets/table.rb +2 -0
  243. data/lib/ratatui_ruby/widgets/tabs.rb +12 -8
  244. data/lib/ratatui_ruby/widgets.rb +2 -0
  245. data/lib/ratatui_ruby.rb +130 -9
  246. data/tasks/autodoc/examples.rb +2 -0
  247. data/tasks/autodoc/member.rb +2 -0
  248. data/tasks/autodoc/name.rb +2 -0
  249. data/tasks/autodoc.rake +2 -0
  250. data/tasks/bump/cargo_lockfile.rb +2 -0
  251. data/tasks/bump/changelog.rb +2 -0
  252. data/tasks/bump/header.rb +2 -0
  253. data/tasks/bump/history.rb +2 -0
  254. data/tasks/bump/links.rb +2 -0
  255. data/tasks/bump/manifest.rb +2 -0
  256. data/tasks/bump/ruby_gem.rb +2 -0
  257. data/tasks/bump/sem_ver.rb +2 -0
  258. data/tasks/bump/unreleased_section.rb +2 -0
  259. data/tasks/bump.rake +2 -0
  260. data/tasks/doc.rake +268 -0
  261. data/tasks/extension.rake +2 -0
  262. data/tasks/lint.rake +115 -0
  263. data/tasks/rdoc_config.rb +18 -4
  264. data/tasks/sourcehut.rake +2 -0
  265. data/tasks/terminal_preview/app_screenshot.rb +2 -0
  266. data/tasks/terminal_preview/crash_report.rb +2 -0
  267. data/tasks/terminal_preview/example_app.rb +2 -0
  268. data/tasks/terminal_preview/launcher_script.rb +2 -0
  269. data/tasks/terminal_preview/preview_collection.rb +2 -0
  270. data/tasks/terminal_preview/preview_timing.rb +2 -0
  271. data/tasks/terminal_preview/safety_confirmation.rb +2 -0
  272. data/tasks/terminal_preview/saved_screenshot.rb +2 -0
  273. data/tasks/terminal_preview/system_appearance.rb +2 -0
  274. data/tasks/terminal_preview/terminal_window.rb +2 -0
  275. data/tasks/terminal_preview/window_id.rb +2 -0
  276. data/tasks/terminal_preview.rake +2 -0
  277. data/tasks/test.rake +2 -0
  278. data/tasks/website/index_page.rb +2 -0
  279. data/tasks/website/version.rb +12 -2
  280. data/tasks/website/version_menu.rb +2 -0
  281. data/tasks/website/versioned_documentation.rb +2 -0
  282. data/tasks/website/website.rb +2 -0
  283. data/tasks/website.rake +2 -0
  284. metadata +97 -75
  285. data/doc/contributors/architectural_overhaul/chat_conversations.md +0 -4952
  286. data/doc/contributors/architectural_overhaul/implementation_plan.md +0 -60
  287. data/doc/contributors/architectural_overhaul/task.md +0 -37
  288. /data/doc/{async.md → concepts/async.md} +0 -0
  289. /data/doc/{interactive_design.md → concepts/interactive_design.md} +0 -0
  290. /data/doc/images/{widget_barchart_demo.png → widget_barchart.png} +0 -0
  291. /data/doc/images/{widget_block_demo.png → widget_block.png} +0 -0
  292. /data/doc/images/{widget_box_demo.png → widget_box.png} +0 -0
  293. /data/doc/images/{widget_calendar_demo.png → widget_calendar.png} +0 -0
  294. /data/doc/images/{widget_canvas_demo.png → widget_canvas.png} +0 -0
  295. /data/doc/images/{widget_cell_demo.png → widget_cell.png} +0 -0
  296. /data/doc/images/{widget_center_demo.png → widget_center.png} +0 -0
  297. /data/doc/images/{widget_chart_demo.png → widget_chart.png} +0 -0
  298. /data/doc/images/{widget_gauge_demo.png → widget_gauge.png} +0 -0
  299. /data/doc/images/{widget_line_gauge_demo.png → widget_line_gauge.png} +0 -0
  300. /data/doc/images/{widget_list_demo.png → widget_list.png} +0 -0
  301. /data/doc/images/{widget_map_demo.png → widget_map.png} +0 -0
  302. /data/doc/images/{widget_overlay_demo.png → widget_overlay.png} +0 -0
  303. /data/doc/images/{widget_popup_demo.png → widget_popup.png} +0 -0
  304. /data/doc/images/{widget_ratatui_logo_demo.png → widget_ratatui_logo.png} +0 -0
  305. /data/doc/images/{widget_ratatui_mascot_demo.png → widget_ratatui_mascot.png} +0 -0
  306. /data/doc/images/{widget_scrollbar_demo.png → widget_scrollbar.png} +0 -0
  307. /data/doc/images/{widget_sparkline_demo.png → widget_sparkline.png} +0 -0
  308. /data/doc/images/{widget_table_demo.png → widget_table.png} +0 -0
  309. /data/doc/images/{widget_tabs_demo.png → widget_tabs.png} +0 -0
  310. /data/doc/{v0.7.0_migration.md → migration/v0_7_0.md} +0 -0
  311. /data/doc/{debugging.md → troubleshooting/debugging.md} +0 -0
data/tasks/lint.rake CHANGED
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "rubocop/rake_task"
7
9
  require "rubycritic/rake_task"
@@ -35,6 +37,95 @@ namespace :reuse do
35
37
  task :lint do
36
38
  sh "reuse lint"
37
39
  end
40
+
41
+ desc "Add SPDX headers to files missing them (per AGENTS.md standards)"
42
+ task :fix do
43
+ copyright = "Kerrick Long <me@kerricklong.com>"
44
+
45
+ # Code files: AGPL-3.0-or-later
46
+ code_extensions = %w[rb rs rake gemspec rbs toml yml yaml json lock].freeze
47
+ code_license = "AGPL-3.0-or-later"
48
+
49
+ # Documentation files: CC-BY-SA-4.0
50
+ doc_extensions = %w[md txt].freeze
51
+ doc_license = "CC-BY-SA-4.0"
52
+
53
+ # Find files missing headers (listed after "no copyright and licensing" message)
54
+ puts "Checking for files missing REUSE headers..."
55
+ output = `reuse lint 2>&1`
56
+ in_missing_section = false
57
+ missing_files = output.lines.filter_map do |line|
58
+ in_missing_section = true if line.include?("no copyright and licensing")
59
+ in_missing_section = false if line.start_with?("# ") && !line.include?("copyright")
60
+ next unless in_missing_section
61
+
62
+ line.match(/^\* (.+)/)&.[](1)
63
+ end
64
+
65
+ if missing_files.empty?
66
+ puts "All files have REUSE headers!"
67
+ else
68
+ missing_files.each do |file|
69
+ ext = File.extname(file).delete(".")
70
+ license = if code_extensions.include?(ext)
71
+ code_license
72
+ elsif doc_extensions.include?(ext)
73
+ doc_license
74
+ else
75
+ puts " Skipping #{file} (unknown extension: .#{ext})"
76
+ next
77
+ end
78
+
79
+ puts " Annotating #{file} with #{license}"
80
+ sh "reuse annotate --license #{license} --copyright '#{copyright}' --skip-existing '#{file}'", verbose: false
81
+ end
82
+ end
83
+ end
84
+
85
+ desc "Normalize Ruby files: frozen_string_literal at top, SPDX in #--/#++ block"
86
+ task :normalize_ruby do
87
+ ruby_extensions = %w[rb rake gemspec].freeze
88
+ ruby_files = Dir.glob("**/*.{#{ruby_extensions.join(',')}}")
89
+ .reject { |f| f.start_with?("vendor/", "tmp/", ".") }
90
+
91
+ fixed_count = 0
92
+ ruby_files.each do |file|
93
+ content = File.read(file)
94
+ original = content.dup
95
+
96
+ # Skip if no SPDX header
97
+ next unless content.match?(/# SPDX-/)
98
+
99
+ # Extract components
100
+ frozen = content.match?(/^# frozen_string_literal: true/)
101
+ spdx_match = content.match(/(# SPDX-FileCopyrightText:[^\n]+\n(?:#[^\n]*\n)*# SPDX-License-Identifier:[^\n]+\n)/m)
102
+ next unless spdx_match
103
+
104
+ spdx_block = spdx_match[1]
105
+
106
+ # Remove existing frozen_string_literal and SPDX block (and any #--/#+++)
107
+ cleaned = content
108
+ .sub(/^# frozen_string_literal: true\n+/, "")
109
+ .sub(/^#--\s*\n/, "")
110
+ .sub(spdx_block, "")
111
+ .sub(/^#\+\+\s*\n/, "")
112
+ .sub(/\A\n+/, "") # Remove leading blank lines
113
+
114
+ # Rebuild file in correct order: frozen, blank, #--, SPDX, #++, rest
115
+ new_content = ""
116
+ new_content += "# frozen_string_literal: true\n\n" if frozen
117
+ new_content += "#--\n#{spdx_block}#++\n\n"
118
+ new_content += cleaned.sub(/\A\n+/, "") # Ensure no double blank lines
119
+
120
+ if new_content != original
121
+ File.write(file, new_content)
122
+ puts " Normalized #{file}"
123
+ fixed_count += 1
124
+ end
125
+ end
126
+
127
+ puts fixed_count.zero? ? "All Ruby files properly normalized!" : "Fixed #{fixed_count} files."
128
+ end
38
129
  end
39
130
  task(:reuse) { Rake::Task["reuse:lint"].invoke }
40
131
 
@@ -47,7 +138,31 @@ namespace :lint do
47
138
  task code: %w[rubocop rubycritic cargo:fmt cargo:clippy cargo:test]
48
139
  task licenses: %w[reuse:lint]
49
140
  task all: %w[docs code licenses]
141
+
142
+ namespace :fix do
143
+ desc "Auto-fix RuboCop offenses (most aggressive)"
144
+ task :rubocop do
145
+ sh "bundle exec rubocop --autocorrect-all"
146
+ end
147
+
148
+ desc "Auto-fix Clippy warnings (most aggressive: --fix --allow-dirty --allow-staged)"
149
+ task :clippy do
150
+ sh "cd ext/ratatui_ruby && cargo clippy --fix --allow-dirty --allow-staged"
151
+ end
152
+
153
+ desc "Add SPDX headers and normalize Ruby file structure"
154
+ task reuse: %w[reuse:fix reuse:normalize_ruby]
155
+
156
+ desc "Run all auto-fix tasks"
157
+ task all: %w[lint:fix:rubocop lint:fix:clippy lint:fix:reuse]
158
+ end
50
159
  end
51
160
 
161
+ desc "Run all lint auto-fix tasks"
162
+ task("lint:fix") { Rake::Task["lint:fix:all"].invoke }
163
+
164
+ # Aliases for convenience
165
+ task "rubocop:autocorrect_all" => "lint:fix:rubocop"
166
+
52
167
  desc "Run all lint tasks"
53
168
  task(:lint) { Rake::Task["lint:all"].invoke }
data/tasks/rdoc_config.rb CHANGED
@@ -1,15 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  module RDocConfig
7
- RDOC_FILES = %w[
8
- **/*.md
9
- **/*.rdoc
9
+ MAX_FILE_SIZE = 100_000 # 100KB - skip large files like chat logs
10
+
11
+ RDOC_FILES = Dir.glob(%w[
12
+ doc/**/*.md
13
+ examples/**/*.md
14
+ *.md
15
+ *.rdoc
10
16
  lib/**/*.rb
11
17
  exe/**/*
12
- ].freeze
18
+ ]).reject { |f|
19
+ # Skip large files
20
+ if File.size(f) > MAX_FILE_SIZE
21
+ warn "RDoc: skipping #{f} (#{File.size(f) / 1024}KB > #{MAX_FILE_SIZE / 1024}KB limit)"
22
+ next true
23
+ end
24
+ # Skip verification examples (internal testing, not user-facing)
25
+ f.start_with?("examples/verify_")
26
+ }.freeze
13
27
 
14
28
  MAIN = "README.md"
15
29
  end
data/tasks/sourcehut.rake CHANGED
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  desc "Generate SourceHut build manifests from template"
7
9
  task sourcehut: "sourcehut:build"
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "tmpdir"
7
9
  require_relative "launcher_script"
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  class CrashReport < Data.define(:app, :error, :preamble)
7
9
  def self.new(app, error, preamble = nil)
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  class ExampleApp < Data.define(:directory)
7
9
  def self.all
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "fileutils"
7
9
  require "tmpdir"
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "fileutils"
7
9
  require_relative "example_app"
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  class PreviewTiming
7
9
  def self.window_startup
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require_relative "preview_timing"
7
9
  require_relative "system_appearance"
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "time"
7
9
 
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  class SystemAppearance
7
9
  def self.dark?
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require_relative "window_id"
7
9
  require_relative "preview_timing"
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  class WindowID < Data.define(:value)
7
9
  def valid?
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "fileutils"
7
9
  require_relative "terminal_preview/preview_collection"
data/tasks/test.rake CHANGED
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "minitest/test_task"
7
9
 
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "erb"
7
9
 
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "rubygems"
7
9
  require "fileutils"
@@ -13,7 +15,14 @@ class Version
13
15
  .sort_by(&:semver)
14
16
  .reverse
15
17
 
16
- [Edge.new] + sorted_versions
18
+ # Keep only the latest patch for each minor version
19
+ # e.g., if we have v0.6.0, v0.6.1, v0.6.2, only keep v0.6.2
20
+ latest_per_minor = sorted_versions
21
+ .group_by { |v| v.semver.segments[0..1] } # group by [major, minor]
22
+ .values
23
+ .map(&:first) # take the first (highest patch) from each group
24
+
25
+ [Edge.new] + latest_per_minor
17
26
  end
18
27
 
19
28
  def slug
@@ -85,7 +94,8 @@ class Tagged < Version
85
94
  end
86
95
 
87
96
  def slug
88
- @tag
97
+ segments = semver.segments
98
+ "v#{segments[0]}.#{segments[1]}"
89
99
  end
90
100
 
91
101
  def name
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  class VersionMenu
7
9
  def initialize(root:, versions:)
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require_relative "../rdoc_config"
7
9
 
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require_relative "version"
7
9
  require_relative "versioned_documentation"
data/tasks/website.rake CHANGED
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ #--
3
4
  # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
4
5
  # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
5
7
 
6
8
  require "erb"
7
9
  require "fileutils"
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.7.1
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kerrick Long
@@ -105,22 +105,24 @@ files:
105
105
  - README.md
106
106
  - REUSE.toml
107
107
  - Rakefile
108
- - doc/application_architecture.md
109
- - doc/application_testing.md
110
- - doc/async.md
111
- - doc/contributors/architectural_overhaul/chat_conversations.md
112
- - doc/contributors/architectural_overhaul/implementation_plan.md
113
- - doc/contributors/architectural_overhaul/task.md
108
+ - doc/concepts/application_architecture.md
109
+ - doc/concepts/application_testing.md
110
+ - doc/concepts/async.md
111
+ - doc/concepts/event_handling.md
112
+ - doc/concepts/interactive_design.md
113
+ - doc/contributors/auditing/parity.md
114
114
  - doc/contributors/design.md
115
115
  - doc/contributors/design/ruby_frontend.md
116
116
  - doc/contributors/design/rust_backend.md
117
117
  - doc/contributors/developing_examples.md
118
118
  - doc/contributors/documentation_style.md
119
119
  - doc/contributors/index.md
120
+ - doc/contributors/upstream_requests/tab_rects.md
121
+ - doc/contributors/upstream_requests/title_rects.md
120
122
  - doc/contributors/v1.0.0_blockers.md
121
123
  - doc/custom.css
122
- - doc/debugging.md
123
- - doc/event_handling.md
124
+ - doc/getting_started/quickstart.md
125
+ - doc/getting_started/why.md
124
126
  - doc/images/app_all_events.png
125
127
  - doc/images/app_color_picker.png
126
128
  - doc/images/app_login_form.png
@@ -129,39 +131,38 @@ files:
129
131
  - doc/images/verify_quickstart_layout.png
130
132
  - doc/images/verify_quickstart_lifecycle.png
131
133
  - doc/images/verify_readme_usage.png
132
- - doc/images/widget_barchart_demo.png
133
- - doc/images/widget_block_demo.png
134
- - doc/images/widget_box_demo.png
135
- - doc/images/widget_calendar_demo.png
136
- - doc/images/widget_canvas_demo.png
137
- - doc/images/widget_cell_demo.png
138
- - doc/images/widget_center_demo.png
139
- - doc/images/widget_chart_demo.png
140
- - doc/images/widget_gauge_demo.png
134
+ - doc/images/widget_barchart.png
135
+ - doc/images/widget_block.png
136
+ - doc/images/widget_box.png
137
+ - doc/images/widget_calendar.png
138
+ - doc/images/widget_canvas.png
139
+ - doc/images/widget_cell.png
140
+ - doc/images/widget_center.png
141
+ - doc/images/widget_chart.png
142
+ - doc/images/widget_gauge.png
141
143
  - doc/images/widget_layout_split.png
142
- - doc/images/widget_line_gauge_demo.png
143
- - doc/images/widget_list_demo.png
144
- - doc/images/widget_map_demo.png
145
- - doc/images/widget_overlay_demo.png
146
- - doc/images/widget_popup_demo.png
147
- - doc/images/widget_ratatui_logo_demo.png
148
- - doc/images/widget_ratatui_mascot_demo.png
144
+ - doc/images/widget_line_gauge.png
145
+ - doc/images/widget_list.png
146
+ - doc/images/widget_map.png
147
+ - doc/images/widget_overlay.png
148
+ - doc/images/widget_popup.png
149
+ - doc/images/widget_ratatui_logo.png
150
+ - doc/images/widget_ratatui_mascot.png
149
151
  - doc/images/widget_rect.png
150
152
  - doc/images/widget_render.png
151
153
  - doc/images/widget_rich_text.png
152
154
  - doc/images/widget_scroll_text.png
153
- - doc/images/widget_scrollbar_demo.png
154
- - doc/images/widget_sparkline_demo.png
155
+ - doc/images/widget_scrollbar.png
156
+ - doc/images/widget_sparkline.png
155
157
  - doc/images/widget_style_colors.png
156
- - doc/images/widget_table_demo.png
157
- - doc/images/widget_tabs_demo.png
158
+ - doc/images/widget_table.png
159
+ - doc/images/widget_tabs.png
158
160
  - doc/images/widget_text_width.png
159
161
  - doc/index.md
160
- - doc/interactive_design.md
161
- - doc/quickstart.md
162
- - doc/terminal_limitations.md
163
- - doc/v0.7.0_migration.md
164
- - doc/why.md
162
+ - doc/migration/v0_7_0.md
163
+ - doc/troubleshooting/debugging.md
164
+ - doc/troubleshooting/terminal_limitations.md
165
+ - doc/troubleshooting/tui_output.md
165
166
  - examples/app_all_events/README.md
166
167
  - examples/app_all_events/app.rb
167
168
  - examples/app_all_events/model/app_model.rb
@@ -200,40 +201,40 @@ files:
200
201
  - examples/verify_quickstart_lifecycle/app.rb
201
202
  - examples/verify_readme_usage/README.md
202
203
  - examples/verify_readme_usage/app.rb
203
- - examples/widget_barchart_demo/README.md
204
- - examples/widget_barchart_demo/app.rb
205
- - examples/widget_block_demo/README.md
206
- - examples/widget_block_demo/app.rb
207
- - examples/widget_box_demo/README.md
208
- - examples/widget_box_demo/app.rb
209
- - examples/widget_calendar_demo/README.md
210
- - examples/widget_calendar_demo/app.rb
211
- - examples/widget_canvas_demo/README.md
212
- - examples/widget_canvas_demo/app.rb
213
- - examples/widget_cell_demo/README.md
214
- - examples/widget_cell_demo/app.rb
215
- - examples/widget_center_demo/README.md
216
- - examples/widget_center_demo/app.rb
217
- - examples/widget_chart_demo/README.md
218
- - examples/widget_chart_demo/app.rb
219
- - examples/widget_gauge_demo/README.md
220
- - examples/widget_gauge_demo/app.rb
204
+ - examples/widget_barchart/README.md
205
+ - examples/widget_barchart/app.rb
206
+ - examples/widget_block/README.md
207
+ - examples/widget_block/app.rb
208
+ - examples/widget_box/README.md
209
+ - examples/widget_box/app.rb
210
+ - examples/widget_calendar/README.md
211
+ - examples/widget_calendar/app.rb
212
+ - examples/widget_canvas/README.md
213
+ - examples/widget_canvas/app.rb
214
+ - examples/widget_cell/README.md
215
+ - examples/widget_cell/app.rb
216
+ - examples/widget_center/README.md
217
+ - examples/widget_center/app.rb
218
+ - examples/widget_chart/README.md
219
+ - examples/widget_chart/app.rb
220
+ - examples/widget_gauge/README.md
221
+ - examples/widget_gauge/app.rb
221
222
  - examples/widget_layout_split/README.md
222
223
  - examples/widget_layout_split/app.rb
223
- - examples/widget_line_gauge_demo/README.md
224
- - examples/widget_line_gauge_demo/app.rb
225
- - examples/widget_list_demo/README.md
226
- - examples/widget_list_demo/app.rb
227
- - examples/widget_map_demo/README.md
228
- - examples/widget_map_demo/app.rb
229
- - examples/widget_overlay_demo/README.md
230
- - examples/widget_overlay_demo/app.rb
231
- - examples/widget_popup_demo/README.md
232
- - examples/widget_popup_demo/app.rb
233
- - examples/widget_ratatui_logo_demo/README.md
234
- - examples/widget_ratatui_logo_demo/app.rb
235
- - examples/widget_ratatui_mascot_demo/README.md
236
- - examples/widget_ratatui_mascot_demo/app.rb
224
+ - examples/widget_line_gauge/README.md
225
+ - examples/widget_line_gauge/app.rb
226
+ - examples/widget_list/README.md
227
+ - examples/widget_list/app.rb
228
+ - examples/widget_map/README.md
229
+ - examples/widget_map/app.rb
230
+ - examples/widget_overlay/README.md
231
+ - examples/widget_overlay/app.rb
232
+ - examples/widget_popup/README.md
233
+ - examples/widget_popup/app.rb
234
+ - examples/widget_ratatui_logo/README.md
235
+ - examples/widget_ratatui_logo/app.rb
236
+ - examples/widget_ratatui_mascot/README.md
237
+ - examples/widget_ratatui_mascot/app.rb
237
238
  - examples/widget_rect/README.md
238
239
  - examples/widget_rect/app.rb
239
240
  - examples/widget_render/README.md
@@ -242,16 +243,16 @@ files:
242
243
  - examples/widget_rich_text/app.rb
243
244
  - examples/widget_scroll_text/README.md
244
245
  - examples/widget_scroll_text/app.rb
245
- - examples/widget_scrollbar_demo/README.md
246
- - examples/widget_scrollbar_demo/app.rb
247
- - examples/widget_sparkline_demo/README.md
248
- - examples/widget_sparkline_demo/app.rb
246
+ - examples/widget_scrollbar/README.md
247
+ - examples/widget_scrollbar/app.rb
248
+ - examples/widget_sparkline/README.md
249
+ - examples/widget_sparkline/app.rb
249
250
  - examples/widget_style_colors/README.md
250
251
  - examples/widget_style_colors/app.rb
251
- - examples/widget_table_demo/README.md
252
- - examples/widget_table_demo/app.rb
253
- - examples/widget_tabs_demo/README.md
254
- - examples/widget_tabs_demo/app.rb
252
+ - examples/widget_table/README.md
253
+ - examples/widget_table/app.rb
254
+ - examples/widget_tabs/README.md
255
+ - examples/widget_tabs/app.rb
255
256
  - examples/widget_text_width/README.md
256
257
  - examples/widget_text_width/app.rb
257
258
  - exe/.gitkeep
@@ -353,6 +354,27 @@ files:
353
354
  - lib/ratatui_ruby/test_helper.rb
354
355
  - lib/ratatui_ruby/test_helper/event_injection.rb
355
356
  - lib/ratatui_ruby/test_helper/snapshot.rb
357
+ - lib/ratatui_ruby/test_helper/snapshots/axis_labels_alignment.ansi
358
+ - lib/ratatui_ruby/test_helper/snapshots/axis_labels_alignment.txt
359
+ - lib/ratatui_ruby/test_helper/snapshots/barchart_styled_label.ansi
360
+ - lib/ratatui_ruby/test_helper/snapshots/barchart_styled_label.txt
361
+ - lib/ratatui_ruby/test_helper/snapshots/chart_rendering.ansi
362
+ - lib/ratatui_ruby/test_helper/snapshots/chart_rendering.txt
363
+ - lib/ratatui_ruby/test_helper/snapshots/half_block_marker.ansi
364
+ - lib/ratatui_ruby/test_helper/snapshots/half_block_marker.txt
365
+ - lib/ratatui_ruby/test_helper/snapshots/legend_position_bottom.ansi
366
+ - lib/ratatui_ruby/test_helper/snapshots/legend_position_bottom.txt
367
+ - lib/ratatui_ruby/test_helper/snapshots/legend_position_left.ansi
368
+ - lib/ratatui_ruby/test_helper/snapshots/legend_position_left.txt
369
+ - lib/ratatui_ruby/test_helper/snapshots/legend_position_right.ansi
370
+ - lib/ratatui_ruby/test_helper/snapshots/legend_position_right.txt
371
+ - lib/ratatui_ruby/test_helper/snapshots/legend_position_top.ansi
372
+ - lib/ratatui_ruby/test_helper/snapshots/legend_position_top.txt
373
+ - lib/ratatui_ruby/test_helper/snapshots/my_snapshot.txt
374
+ - lib/ratatui_ruby/test_helper/snapshots/styled_axis_title.ansi
375
+ - lib/ratatui_ruby/test_helper/snapshots/styled_axis_title.txt
376
+ - lib/ratatui_ruby/test_helper/snapshots/styled_dataset_name.ansi
377
+ - lib/ratatui_ruby/test_helper/snapshots/styled_dataset_name.txt
356
378
  - lib/ratatui_ruby/test_helper/style_assertions.rb
357
379
  - lib/ratatui_ruby/test_helper/terminal.rb
358
380
  - lib/ratatui_ruby/test_helper/test_doubles.rb
@@ -533,7 +555,7 @@ metadata:
533
555
  allowed_push_host: https://rubygems.org
534
556
  homepage_uri: https://sr.ht/~kerrick/ratatui_ruby/
535
557
  bug_tracker_uri: https://todo.sr.ht/~kerrick/ratatui_ruby
536
- changelog_uri: https://git.sr.ht/~kerrick/ratatui_ruby/tree/main/item/CHANGELOG.md
558
+ changelog_uri: https://git.sr.ht/~kerrick/ratatui_ruby/tree/stable/item/CHANGELOG.md
537
559
  mailing_list_uri: https://lists.sr.ht/~kerrick/ratatui_ruby-discuss
538
560
  source_code_uri: https://git.sr.ht/~kerrick/ratatui_ruby
539
561
  documentation_uri: https://git.sr.ht/~kerrick/ratatui_ruby/tree/HEAD/doc/index.md