ratatui_ruby 1.0.1 → 1.1.1

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/ext/ratatui_ruby/Cargo.lock +1 -1
  3. data/ext/ratatui_ruby/Cargo.toml +1 -1
  4. data/ext/ratatui_ruby/src/events.rs +171 -203
  5. data/ext/ratatui_ruby/src/lib.rs +36 -0
  6. data/ext/ratatui_ruby/src/lib_header.rs +11 -0
  7. data/ext/ratatui_ruby/src/terminal/capabilities.rs +46 -0
  8. data/ext/ratatui_ruby/src/terminal/init.rs +92 -0
  9. data/ext/ratatui_ruby/src/terminal/mod.rs +12 -3
  10. data/ext/ratatui_ruby/src/terminal/queries.rs +15 -0
  11. data/ext/ratatui_ruby/src/terminal/query.rs +64 -2
  12. data/lib/ratatui_ruby/backend/window_size.rb +50 -0
  13. data/lib/ratatui_ruby/backend.rb +59 -0
  14. data/lib/ratatui_ruby/event/key/navigation.rb +10 -1
  15. data/lib/ratatui_ruby/event/key.rb +84 -0
  16. data/lib/ratatui_ruby/event/mouse.rb +95 -3
  17. data/lib/ratatui_ruby/event/resize.rb +45 -3
  18. data/lib/ratatui_ruby/layout/alignment.rb +91 -0
  19. data/lib/ratatui_ruby/layout/layout.rb +1 -2
  20. data/lib/ratatui_ruby/layout/size.rb +10 -3
  21. data/lib/ratatui_ruby/layout.rb +4 -0
  22. data/lib/ratatui_ruby/terminal/capabilities.rb +316 -0
  23. data/lib/ratatui_ruby/terminal/viewport.rb +1 -1
  24. data/lib/ratatui_ruby/terminal.rb +66 -0
  25. data/lib/ratatui_ruby/test_helper/global_state.rb +111 -0
  26. data/lib/ratatui_ruby/test_helper.rb +3 -0
  27. data/lib/ratatui_ruby/version.rb +1 -1
  28. data/lib/ratatui_ruby/widgets/table.rb +2 -2
  29. data/lib/ratatui_ruby.rb +25 -4
  30. data/sig/examples/app_external_editor/app.rbs +12 -0
  31. data/sig/generated/event_key_predicates.rbs +1348 -0
  32. data/sig/ratatui_ruby/backend/window_size.rbs +17 -0
  33. data/sig/ratatui_ruby/backend.rbs +12 -0
  34. data/sig/ratatui_ruby/event.rbs +7 -0
  35. data/sig/ratatui_ruby/layout/alignment.rbs +26 -0
  36. data/sig/ratatui_ruby/ratatui_ruby.rbs +2 -0
  37. data/sig/ratatui_ruby/terminal/capabilities.rbs +38 -0
  38. data/sig/ratatui_ruby/terminal/viewport.rbs +15 -1
  39. metadata +15 -1
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
+ # SPDX-License-Identifier: LGPL-3.0-or-later
6
+ #++
7
+
8
+ module RatatuiRuby
9
+ module Backend
10
+ class WindowSize < Data
11
+ attr_reader columns_rows: Layout::Size
12
+ attr_reader pixels: Layout::Size
13
+
14
+ def self.new: (columns_rows: Layout::Size, pixels: Layout::Size) -> instance
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
+ # SPDX-License-Identifier: LGPL-3.0-or-later
6
+ #++
7
+
8
+ module RatatuiRuby
9
+ module Backend
10
+ def self.window_size: () -> WindowSize?
11
+ end
12
+ end
@@ -111,6 +111,11 @@ module RatatuiRuby
111
111
  def drag?: () -> bool
112
112
  def scroll_up?: () -> bool
113
113
  def scroll_down?: () -> bool
114
+ def left?: () -> bool
115
+ def right?: () -> bool
116
+ def middle?: () -> bool
117
+ def to_sym: () -> Symbol
118
+ def ==: (top other) -> bool
114
119
  def deconstruct_keys: (Array[Symbol]?) -> { type: :mouse, kind: String, x: Integer, y: Integer, button: String, modifiers: Array[String] }
115
120
  end
116
121
 
@@ -119,6 +124,8 @@ module RatatuiRuby
119
124
  attr_reader height: Integer
120
125
 
121
126
  def initialize: (width: Integer, height: Integer) -> void
127
+ def to_sym: () -> Symbol
128
+ def ==: (top other) -> bool
122
129
  def deconstruct_keys: (Array[Symbol]?) -> { type: :resize, width: Integer, height: Integer }
123
130
  end
124
131
 
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
+ # SPDX-License-Identifier: LGPL-3.0-or-later
6
+ #++
7
+
8
+ module RatatuiRuby
9
+ module Layout
10
+ module HorizontalAlignment
11
+ LEFT: :left
12
+ CENTER: :center
13
+ RIGHT: :right
14
+ ALL: Array[:left | :center | :right]
15
+ end
16
+
17
+ module VerticalAlignment
18
+ TOP: :top
19
+ CENTER: :center
20
+ BOTTOM: :bottom
21
+ ALL: Array[:top | :center | :bottom]
22
+ end
23
+
24
+ Alignment: singleton(HorizontalAlignment)
25
+ end
26
+ end
@@ -102,6 +102,8 @@ module RatatuiRuby
102
102
  def self._get_terminal_size: () -> Hash[String, Integer]
103
103
  def self._get_viewport_type: () -> String
104
104
  def self.insert_before: (Integer height, ?widget? widget) ?{ () -> widget } -> void
105
+ def self._frame_count: () -> Integer
106
+ def self.frame_count: () -> Integer
105
107
 
106
108
  # Color conversion (internal, Rust FFI)
107
109
  def self._color_from_u32: (Integer) -> String
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
+ # SPDX-License-Identifier: LGPL-3.0-or-later
6
+ #++
7
+
8
+ module RatatuiRuby
9
+ class Terminal
10
+ # Environment-based terminal capability detection.
11
+ # Provides class methods for detecting terminal capabilities.
12
+ module Capabilities
13
+ def tty?: () -> bool
14
+ def dumb?: () -> bool
15
+ def no_color?: () -> bool
16
+ def force_color?: () -> bool
17
+ def interactive?: () -> bool
18
+ def available_color_count: () -> Integer
19
+ def color_support: () -> (:none | :basic | :ansi256 | :truecolor)
20
+ def supports_keyboard_enhancement?: () -> bool
21
+ def force_color_output: (bool enable) -> void
22
+
23
+ private
24
+
25
+ # FFI methods (defined in Rust, exposed on Terminal singleton)
26
+ def _available_color_count: () -> Integer
27
+ def _supports_keyboard_enhancement: () -> bool
28
+ def _force_color_output: (bool enable) -> void
29
+ end
30
+
31
+ extend Capabilities
32
+
33
+ private
34
+
35
+ # FFI singleton method for Backend.window_size
36
+ def self._terminal_window_size: () -> [Integer, Integer, Integer, Integer]?
37
+ end
38
+ end
@@ -2,7 +2,21 @@
2
2
  # SPDX-License-Identifier: LGPL-3.0-or-later
3
3
 
4
4
  module RatatuiRuby
5
- module Terminal
5
+ class Terminal
6
+ @viewport: Terminal::Viewport
7
+ @terminal_id: Integer
8
+
9
+ attr_reader terminal_id: Integer
10
+
11
+ def initialize: (?viewport: (Terminal::Viewport | :fullscreen | :inline)?, ?height: Integer?) -> void
12
+ def size: () -> Layout::Rect
13
+
14
+ # Private native methods (defined in Rust)
15
+ def self._init_test_terminal_instance: (Integer width, Integer height, String viewport_type, Integer? viewport_height) -> Integer
16
+ def self._get_terminal_size_instance: (Integer terminal_id) -> Layout::Rect
17
+
18
+ private def resolve_viewport: ((Terminal::Viewport | :fullscreen | :inline)? viewport, Integer? height) -> Terminal::Viewport
19
+
6
20
  class Viewport < Data
7
21
  attr_reader type: Symbol
8
22
  attr_reader height: Integer?
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.1
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kerrick Long
@@ -424,9 +424,11 @@ files:
424
424
  - ext/ratatui_ruby/src/events.rs
425
425
  - ext/ratatui_ruby/src/frame.rs
426
426
  - ext/ratatui_ruby/src/lib.rs
427
+ - ext/ratatui_ruby/src/lib_header.rs
427
428
  - ext/ratatui_ruby/src/rendering.rs
428
429
  - ext/ratatui_ruby/src/string_width.rs
429
430
  - ext/ratatui_ruby/src/style.rs
431
+ - ext/ratatui_ruby/src/terminal/capabilities.rs
430
432
  - ext/ratatui_ruby/src/terminal/init.rs
431
433
  - ext/ratatui_ruby/src/terminal/mod.rs
432
434
  - ext/ratatui_ruby/src/terminal/mutations.rs
@@ -460,6 +462,8 @@ files:
460
462
  - ext/ratatui_ruby/src/widgets/table_state.rs
461
463
  - ext/ratatui_ruby/src/widgets/tabs.rs
462
464
  - lib/ratatui_ruby.rb
465
+ - lib/ratatui_ruby/backend.rb
466
+ - lib/ratatui_ruby/backend/window_size.rb
463
467
  - lib/ratatui_ruby/buffer.rb
464
468
  - lib/ratatui_ruby/buffer/cell.rb
465
469
  - lib/ratatui_ruby/cell.rb
@@ -484,6 +488,7 @@ files:
484
488
  - lib/ratatui_ruby/labs/a11y.rb
485
489
  - lib/ratatui_ruby/labs/frame_a11y_capture.rb
486
490
  - lib/ratatui_ruby/layout.rb
491
+ - lib/ratatui_ruby/layout/alignment.rb
487
492
  - lib/ratatui_ruby/layout/constraint.rb
488
493
  - lib/ratatui_ruby/layout/layout.rb
489
494
  - lib/ratatui_ruby/layout/position.rb
@@ -498,11 +503,14 @@ files:
498
503
  - lib/ratatui_ruby/symbols.rb
499
504
  - lib/ratatui_ruby/synthetic_events.rb
500
505
  - lib/ratatui_ruby/table_state.rb
506
+ - lib/ratatui_ruby/terminal.rb
507
+ - lib/ratatui_ruby/terminal/capabilities.rb
501
508
  - lib/ratatui_ruby/terminal/viewport.rb
502
509
  - lib/ratatui_ruby/terminal_lifecycle.rb
503
510
  - lib/ratatui_ruby/terminal_lifecycle.rb.bak
504
511
  - lib/ratatui_ruby/test_helper.rb
505
512
  - lib/ratatui_ruby/test_helper/event_injection.rb
513
+ - lib/ratatui_ruby/test_helper/global_state.rb
506
514
  - lib/ratatui_ruby/test_helper/snapshot.rb
507
515
  - lib/ratatui_ruby/test_helper/snapshots/axis_labels_alignment.ansi
508
516
  - lib/ratatui_ruby/test_helper/snapshots/axis_labels_alignment.txt
@@ -580,6 +588,7 @@ files:
580
588
  - sig/examples/app_all_events/view/log_view.rbs
581
589
  - sig/examples/app_cli_rich_moments/app.rbs
582
590
  - sig/examples/app_color_picker/app.rbs
591
+ - sig/examples/app_external_editor/app.rbs
583
592
  - sig/examples/app_login_form/app.rbs
584
593
  - sig/examples/app_stateful_interaction/app.rbs
585
594
  - sig/examples/verify_quickstart_dsl/app.rbs
@@ -607,9 +616,12 @@ files:
607
616
  - sig/examples/widget_style_colors/app.rbs
608
617
  - sig/examples/widget_table_demo/app.rbs
609
618
  - sig/examples/widget_text_width/app.rbs
619
+ - sig/generated/event_key_predicates.rbs
610
620
  - sig/manifest.yaml
611
621
  - sig/patches/data.rbs
612
622
  - sig/patches/debugger__.rbs
623
+ - sig/ratatui_ruby/backend.rbs
624
+ - sig/ratatui_ruby/backend/window_size.rbs
613
625
  - sig/ratatui_ruby/buffer.rbs
614
626
  - sig/ratatui_ruby/buffer/cell.rbs
615
627
  - sig/ratatui_ruby/cell.rbs
@@ -621,6 +633,7 @@ files:
621
633
  - sig/ratatui_ruby/frame.rbs
622
634
  - sig/ratatui_ruby/interfaces.rbs
623
635
  - sig/ratatui_ruby/labs.rbs
636
+ - sig/ratatui_ruby/layout/alignment.rbs
624
637
  - sig/ratatui_ruby/layout/constraint.rbs
625
638
  - sig/ratatui_ruby/layout/layout.rbs
626
639
  - sig/ratatui_ruby/layout/position.rbs
@@ -637,6 +650,7 @@ files:
637
650
  - sig/ratatui_ruby/symbols.rbs
638
651
  - sig/ratatui_ruby/synthetic_events.rbs
639
652
  - sig/ratatui_ruby/table_state.rbs
653
+ - sig/ratatui_ruby/terminal/capabilities.rbs
640
654
  - sig/ratatui_ruby/terminal/viewport.rbs
641
655
  - sig/ratatui_ruby/terminal_lifecycle.rbs
642
656
  - sig/ratatui_ruby/test_helper.rbs