ratatui_ruby 1.0.0 → 1.1.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 (88) 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 +3 -2
  7. data/CHANGELOG.md +33 -7
  8. data/Steepfile +1 -0
  9. data/doc/concepts/application_testing.md +5 -5
  10. data/doc/concepts/event_handling.md +1 -1
  11. data/doc/contributors/design/ruby_frontend.md +40 -12
  12. data/doc/contributors/design/rust_backend.md +13 -1
  13. data/doc/contributors/releasing.md +215 -0
  14. data/doc/contributors/todo/align/api_completeness_audit-finished.md +6 -0
  15. data/doc/contributors/todo/align/api_completeness_audit-unfinished.md +1 -7
  16. data/doc/contributors/todo/align/term.md +351 -0
  17. data/doc/contributors/upstream_requests/paragraph_span_rects.md +259 -0
  18. data/doc/getting_started/quickstart.md +1 -1
  19. data/doc/getting_started/why.md +3 -3
  20. data/doc/images/app_external_editor.gif +0 -0
  21. data/doc/index.md +1 -6
  22. data/examples/app_external_editor/README.md +62 -0
  23. data/examples/app_external_editor/app.rb +344 -0
  24. data/examples/widget_list/app.rb +2 -4
  25. data/examples/widget_table/app.rb +8 -2
  26. data/ext/ratatui_ruby/Cargo.lock +1 -1
  27. data/ext/ratatui_ruby/Cargo.toml +1 -1
  28. data/ext/ratatui_ruby/src/events.rs +171 -203
  29. data/ext/ratatui_ruby/src/lib.rs +36 -0
  30. data/ext/ratatui_ruby/src/lib_header.rs +11 -0
  31. data/ext/ratatui_ruby/src/terminal/capabilities.rs +46 -0
  32. data/ext/ratatui_ruby/src/terminal/init.rs +92 -0
  33. data/ext/ratatui_ruby/src/terminal/mod.rs +12 -3
  34. data/ext/ratatui_ruby/src/terminal/queries.rs +15 -0
  35. data/ext/ratatui_ruby/src/terminal/query.rs +64 -2
  36. data/lib/ratatui_ruby/backend/window_size.rb +50 -0
  37. data/lib/ratatui_ruby/backend.rb +59 -0
  38. data/lib/ratatui_ruby/event/key/navigation.rb +10 -1
  39. data/lib/ratatui_ruby/event/key.rb +84 -0
  40. data/lib/ratatui_ruby/event/mouse.rb +95 -3
  41. data/lib/ratatui_ruby/event/resize.rb +45 -3
  42. data/lib/ratatui_ruby/layout/alignment.rb +91 -0
  43. data/lib/ratatui_ruby/layout/layout.rb +1 -2
  44. data/lib/ratatui_ruby/layout/size.rb +10 -3
  45. data/lib/ratatui_ruby/layout.rb +4 -0
  46. data/lib/ratatui_ruby/terminal/capabilities.rb +316 -0
  47. data/lib/ratatui_ruby/terminal/viewport.rb +1 -1
  48. data/lib/ratatui_ruby/terminal.rb +66 -0
  49. data/lib/ratatui_ruby/test_helper/global_state.rb +111 -0
  50. data/lib/ratatui_ruby/test_helper.rb +3 -0
  51. data/lib/ratatui_ruby/version.rb +1 -1
  52. data/lib/ratatui_ruby/widgets/table.rb +2 -2
  53. data/lib/ratatui_ruby.rb +25 -4
  54. data/sig/examples/app_external_editor/app.rbs +12 -0
  55. data/sig/generated/event_key_predicates.rbs +1348 -0
  56. data/sig/ratatui_ruby/backend/window_size.rbs +17 -0
  57. data/sig/ratatui_ruby/backend.rbs +12 -0
  58. data/sig/ratatui_ruby/event.rbs +7 -0
  59. data/sig/ratatui_ruby/layout/alignment.rbs +26 -0
  60. data/sig/ratatui_ruby/ratatui_ruby.rbs +2 -0
  61. data/sig/ratatui_ruby/terminal/capabilities.rbs +38 -0
  62. data/sig/ratatui_ruby/terminal/viewport.rbs +15 -1
  63. data/tasks/bump/bump_workflow.rb +49 -0
  64. data/tasks/bump/changelog.rb +57 -0
  65. data/tasks/bump/patch_release.rb +19 -0
  66. data/tasks/bump/release_branch.rb +17 -0
  67. data/tasks/bump/release_from_trunk.rb +49 -0
  68. data/tasks/bump/repository.rb +54 -0
  69. data/tasks/bump/ruby_gem.rb +6 -26
  70. data/tasks/bump/sem_ver.rb +4 -0
  71. data/tasks/bump/unreleased_section.rb +17 -0
  72. data/tasks/bump.rake +21 -11
  73. data/tasks/doc/documentation.rb +59 -0
  74. data/tasks/doc/link/file_url.rb +30 -0
  75. data/tasks/doc/link/relative_path.rb +61 -0
  76. data/tasks/doc/link/web_url.rb +55 -0
  77. data/tasks/doc/link.rb +52 -0
  78. data/tasks/doc/link_audit.rb +116 -0
  79. data/tasks/doc/problem.rb +40 -0
  80. data/tasks/doc/source_file.rb +93 -0
  81. data/tasks/doc.rake +18 -0
  82. data/tasks/rbs_predicates/predicate_catalog.rb +52 -0
  83. data/tasks/rbs_predicates/predicate_tests.rb +124 -0
  84. data/tasks/rbs_predicates/rbs_signature.rb +63 -0
  85. data/tasks/rbs_predicates.rake +31 -0
  86. data/tasks/test.rake +3 -0
  87. data/tasks/website/version.rb +23 -28
  88. metadata +38 -1
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
+ # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
7
+
8
+ # NOTE: Do NOT require predicate_catalog here - it requires ratatui_ruby,
9
+ # which needs the native extension to be compiled first. Require inside tasks.
10
+
11
+ namespace :rbs do
12
+ desc "Generate RBS declarations for Event::Key predicates"
13
+ task predicates: :compile do
14
+ require_relative "rbs_predicates/predicate_catalog"
15
+ require_relative "rbs_predicates/rbs_signature"
16
+
17
+ catalog = PredicateCatalog.new
18
+ signature = RbsSignature.new(catalog)
19
+ signature.write
20
+ end
21
+
22
+ desc "Generate Minitest assertions for Event::Key predicates"
23
+ task tests: :compile do
24
+ require_relative "rbs_predicates/predicate_catalog"
25
+ require_relative "rbs_predicates/predicate_tests"
26
+
27
+ catalog = PredicateCatalog.new
28
+ tests = PredicateTests.new(catalog)
29
+ tests.persist!
30
+ end
31
+ end
data/tasks/test.rake CHANGED
@@ -30,4 +30,7 @@ namespace :test do
30
30
  Minitest::TestTask.create(:ruby) do |t|
31
31
  t.test_globs = ["test/**/*.rb", "examples/**/test_*.rb"]
32
32
  end
33
+
34
+ # Regenerate predicate tests before running Ruby tests
35
+ Rake::Task["test:ruby"].enhance(["rbs:tests"])
33
36
  end
@@ -37,10 +37,24 @@ class Version
37
37
  raise NotImplementedError
38
38
  end
39
39
 
40
- def checkout(globs:, &block)
40
+ def ref
41
41
  raise NotImplementedError
42
42
  end
43
43
 
44
+ def checkout(globs:, &block)
45
+ Dir.mktmpdir do |path|
46
+ # Use git archive to export the version at the specified ref
47
+ # Pipe to tar to extract into the temporary directory
48
+ system("git archive #{ref} | tar -x -C #{path}")
49
+
50
+ # Remove the native extension directory as we don't need it for builds
51
+ # and it can cause issues if not meant to be compiled in this context
52
+ FileUtils.rm_rf("#{path}/ext")
53
+
54
+ yield path
55
+ end
56
+ end
57
+
44
58
  def latest?
45
59
  false
46
60
  end
@@ -63,26 +77,12 @@ class Edge < Version
63
77
  :edge
64
78
  end
65
79
 
66
- def edge?
67
- true
80
+ def ref
81
+ "trunk"
68
82
  end
69
83
 
70
- def checkout(globs:, &block)
71
- Dir.mktmpdir do |path|
72
- # Use git ls-files for accurate source list
73
- files = `git ls-files`.split("\n").select do |f|
74
- globs.any? { |glob| File.fnmatch(glob, f, File::FNM_PATHNAME) }
75
- end
76
-
77
- files.each do |file|
78
- dest = File.join(path, file)
79
- next unless File.exist?(file) # Skip files that are in the index but deleted in the working tree
80
- FileUtils.mkdir_p(File.dirname(dest))
81
- FileUtils.cp(file, dest)
82
- end
83
-
84
- yield path
85
- end
84
+ def edge?
85
+ true
86
86
  end
87
87
  end
88
88
 
@@ -106,6 +106,10 @@ class Tagged < Version
106
106
  :version
107
107
  end
108
108
 
109
+ def ref
110
+ @tag
111
+ end
112
+
109
113
  def semver
110
114
  Gem::Version.new(@tag.sub(/^v/, ""))
111
115
  end
@@ -115,13 +119,4 @@ class Tagged < Version
115
119
  def latest?
116
120
  @is_latest
117
121
  end
118
-
119
- def checkout(globs:, &block)
120
- Dir.mktmpdir do |path|
121
- system("git archive #{@tag} | tar -x -C #{path}")
122
- # We could enforce globs here too, but git archive is usually sufficient.
123
- FileUtils.rm_rf("#{path}/ext")
124
- yield path
125
- end
126
- end
127
122
  end
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: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kerrick Long
@@ -438,10 +438,13 @@ files:
438
438
  - doc/contributors/developing_examples.md
439
439
  - doc/contributors/documentation_style.md
440
440
  - doc/contributors/index.md
441
+ - doc/contributors/releasing.md
441
442
  - doc/contributors/todo/align/api_completeness_audit-finished.md
442
443
  - doc/contributors/todo/align/api_completeness_audit-unfinished.md
444
+ - doc/contributors/todo/align/term.md
443
445
  - doc/contributors/todo/align/terminal.md
444
446
  - doc/contributors/todo/future_work.md
447
+ - doc/contributors/upstream_requests/paragraph_span_rects.md
445
448
  - doc/contributors/upstream_requests/tab_rects.md
446
449
  - doc/contributors/upstream_requests/title_rects.md
447
450
  - doc/custom.css
@@ -452,6 +455,7 @@ files:
452
455
  - doc/images/app_color_picker.png
453
456
  - doc/images/app_debugging_showcase.gif
454
457
  - doc/images/app_debugging_showcase.png
458
+ - doc/images/app_external_editor.gif
455
459
  - doc/images/app_login_form.png
456
460
  - doc/images/app_stateful_interaction.png
457
461
  - doc/images/verify_quickstart_dsl.png
@@ -518,6 +522,8 @@ files:
518
522
  - examples/app_color_picker/palette.rb
519
523
  - examples/app_debugging_showcase/README.md
520
524
  - examples/app_debugging_showcase/app.rb
525
+ - examples/app_external_editor/README.md
526
+ - examples/app_external_editor/app.rb
521
527
  - examples/app_login_form/README.md
522
528
  - examples/app_login_form/app.rb
523
529
  - examples/app_stateful_interaction/README.md
@@ -604,9 +610,11 @@ files:
604
610
  - ext/ratatui_ruby/src/events.rs
605
611
  - ext/ratatui_ruby/src/frame.rs
606
612
  - ext/ratatui_ruby/src/lib.rs
613
+ - ext/ratatui_ruby/src/lib_header.rs
607
614
  - ext/ratatui_ruby/src/rendering.rs
608
615
  - ext/ratatui_ruby/src/string_width.rs
609
616
  - ext/ratatui_ruby/src/style.rs
617
+ - ext/ratatui_ruby/src/terminal/capabilities.rs
610
618
  - ext/ratatui_ruby/src/terminal/init.rs
611
619
  - ext/ratatui_ruby/src/terminal/mod.rs
612
620
  - ext/ratatui_ruby/src/terminal/mutations.rs
@@ -640,6 +648,8 @@ files:
640
648
  - ext/ratatui_ruby/src/widgets/table_state.rs
641
649
  - ext/ratatui_ruby/src/widgets/tabs.rs
642
650
  - lib/ratatui_ruby.rb
651
+ - lib/ratatui_ruby/backend.rb
652
+ - lib/ratatui_ruby/backend/window_size.rb
643
653
  - lib/ratatui_ruby/buffer.rb
644
654
  - lib/ratatui_ruby/buffer/cell.rb
645
655
  - lib/ratatui_ruby/cell.rb
@@ -664,6 +674,7 @@ files:
664
674
  - lib/ratatui_ruby/labs/a11y.rb
665
675
  - lib/ratatui_ruby/labs/frame_a11y_capture.rb
666
676
  - lib/ratatui_ruby/layout.rb
677
+ - lib/ratatui_ruby/layout/alignment.rb
667
678
  - lib/ratatui_ruby/layout/constraint.rb
668
679
  - lib/ratatui_ruby/layout/layout.rb
669
680
  - lib/ratatui_ruby/layout/position.rb
@@ -678,11 +689,14 @@ files:
678
689
  - lib/ratatui_ruby/symbols.rb
679
690
  - lib/ratatui_ruby/synthetic_events.rb
680
691
  - lib/ratatui_ruby/table_state.rb
692
+ - lib/ratatui_ruby/terminal.rb
693
+ - lib/ratatui_ruby/terminal/capabilities.rb
681
694
  - lib/ratatui_ruby/terminal/viewport.rb
682
695
  - lib/ratatui_ruby/terminal_lifecycle.rb
683
696
  - lib/ratatui_ruby/terminal_lifecycle.rb.bak
684
697
  - lib/ratatui_ruby/test_helper.rb
685
698
  - lib/ratatui_ruby/test_helper/event_injection.rb
699
+ - lib/ratatui_ruby/test_helper/global_state.rb
686
700
  - lib/ratatui_ruby/test_helper/snapshot.rb
687
701
  - lib/ratatui_ruby/test_helper/snapshots/axis_labels_alignment.ansi
688
702
  - lib/ratatui_ruby/test_helper/snapshots/axis_labels_alignment.txt
@@ -762,6 +776,7 @@ files:
762
776
  - sig/examples/app_all_events/view/log_view.rbs
763
777
  - sig/examples/app_cli_rich_moments/app.rbs
764
778
  - sig/examples/app_color_picker/app.rbs
779
+ - sig/examples/app_external_editor/app.rbs
765
780
  - sig/examples/app_login_form/app.rbs
766
781
  - sig/examples/app_stateful_interaction/app.rbs
767
782
  - sig/examples/verify_quickstart_dsl/app.rbs
@@ -789,9 +804,12 @@ files:
789
804
  - sig/examples/widget_style_colors/app.rbs
790
805
  - sig/examples/widget_table_demo/app.rbs
791
806
  - sig/examples/widget_text_width/app.rbs
807
+ - sig/generated/event_key_predicates.rbs
792
808
  - sig/manifest.yaml
793
809
  - sig/patches/data.rbs
794
810
  - sig/patches/debugger__.rbs
811
+ - sig/ratatui_ruby/backend.rbs
812
+ - sig/ratatui_ruby/backend/window_size.rbs
795
813
  - sig/ratatui_ruby/buffer.rbs
796
814
  - sig/ratatui_ruby/buffer/cell.rbs
797
815
  - sig/ratatui_ruby/cell.rbs
@@ -803,6 +821,7 @@ files:
803
821
  - sig/ratatui_ruby/frame.rbs
804
822
  - sig/ratatui_ruby/interfaces.rbs
805
823
  - sig/ratatui_ruby/labs.rbs
824
+ - sig/ratatui_ruby/layout/alignment.rbs
806
825
  - sig/ratatui_ruby/layout/constraint.rbs
807
826
  - sig/ratatui_ruby/layout/layout.rbs
808
827
  - sig/ratatui_ruby/layout/position.rbs
@@ -819,6 +838,7 @@ files:
819
838
  - sig/ratatui_ruby/symbols.rbs
820
839
  - sig/ratatui_ruby/synthetic_events.rbs
821
840
  - sig/ratatui_ruby/table_state.rbs
841
+ - sig/ratatui_ruby/terminal/capabilities.rbs
822
842
  - sig/ratatui_ruby/terminal/viewport.rbs
823
843
  - sig/ratatui_ruby/terminal_lifecycle.rbs
824
844
  - sig/ratatui_ruby/test_helper.rbs
@@ -863,16 +883,29 @@ files:
863
883
  - tasks/autodoc/member.rb
864
884
  - tasks/autodoc/name.rb
865
885
  - tasks/bump.rake
886
+ - tasks/bump/bump_workflow.rb
866
887
  - tasks/bump/cargo_lockfile.rb
867
888
  - tasks/bump/changelog.rb
868
889
  - tasks/bump/header.rb
869
890
  - tasks/bump/history.rb
870
891
  - tasks/bump/links.rb
871
892
  - tasks/bump/manifest.rb
893
+ - tasks/bump/patch_release.rb
894
+ - tasks/bump/release_branch.rb
895
+ - tasks/bump/release_from_trunk.rb
896
+ - tasks/bump/repository.rb
872
897
  - tasks/bump/ruby_gem.rb
873
898
  - tasks/bump/sem_ver.rb
874
899
  - tasks/bump/unreleased_section.rb
875
900
  - tasks/doc.rake
901
+ - tasks/doc/documentation.rb
902
+ - tasks/doc/link.rb
903
+ - tasks/doc/link/file_url.rb
904
+ - tasks/doc/link/relative_path.rb
905
+ - tasks/doc/link/web_url.rb
906
+ - tasks/doc/link_audit.rb
907
+ - tasks/doc/problem.rb
908
+ - tasks/doc/source_file.rb
876
909
  - tasks/example_viewer.html.erb
877
910
  - tasks/extension.rake
878
911
  - tasks/license.rake
@@ -882,6 +915,10 @@ files:
882
915
  - tasks/license/snippets_md.rb
883
916
  - tasks/license/snippets_rdoc.rb
884
917
  - tasks/lint.rake
918
+ - tasks/rbs_predicates.rake
919
+ - tasks/rbs_predicates/predicate_catalog.rb
920
+ - tasks/rbs_predicates/predicate_tests.rb
921
+ - tasks/rbs_predicates/rbs_signature.rb
885
922
  - tasks/rdoc_config.rb
886
923
  - tasks/resources/build.yml.erb
887
924
  - tasks/resources/index.html.erb