ratatui_ruby 0.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.
- checksums.yaml +7 -0
- data/.build.yml +34 -0
- data/.pre-commit-config.yaml +9 -0
- data/.rubocop.yml +8 -0
- data/.ruby-version +1 -0
- data/AGENTS.md +119 -0
- data/CHANGELOG.md +15 -0
- data/CODE_OF_CONDUCT.md +30 -0
- data/CONTRIBUTING.md +40 -0
- data/LICENSE +15 -0
- data/LICENSES/AGPL-3.0-or-later.txt +661 -0
- data/LICENSES/BSD-2-Clause.txt +9 -0
- data/LICENSES/CC-BY-SA-4.0.txt +427 -0
- data/LICENSES/CC0-1.0.txt +121 -0
- data/LICENSES/MIT.txt +21 -0
- data/README.md +86 -0
- data/REUSE.toml +17 -0
- data/Rakefile +108 -0
- data/docs/application_testing.md +96 -0
- data/docs/contributors/design/ruby_frontend.md +100 -0
- data/docs/contributors/design/rust_backend.md +61 -0
- data/docs/contributors/design.md +11 -0
- data/docs/contributors/index.md +16 -0
- data/docs/images/examples-analytics.rb.png +0 -0
- data/docs/images/examples-box_demo.rb.png +0 -0
- data/docs/images/examples-dashboard.rb.png +0 -0
- data/docs/images/examples-login_form.rb.png +0 -0
- data/docs/images/examples-map_demo.rb.png +0 -0
- data/docs/images/examples-mouse_events.rb.png +0 -0
- data/docs/images/examples-scrollbar_demo.rb.png +0 -0
- data/docs/images/examples-stock_ticker.rb.png +0 -0
- data/docs/images/examples-system_monitor.rb.png +0 -0
- data/docs/index.md +18 -0
- data/docs/quickstart.md +126 -0
- data/examples/analytics.rb +87 -0
- data/examples/box_demo.rb +71 -0
- data/examples/dashboard.rb +72 -0
- data/examples/login_form.rb +114 -0
- data/examples/map_demo.rb +58 -0
- data/examples/mouse_events.rb +95 -0
- data/examples/scrollbar_demo.rb +75 -0
- data/examples/stock_ticker.rb +85 -0
- data/examples/system_monitor.rb +93 -0
- data/examples/test_analytics.rb +65 -0
- data/examples/test_box_demo.rb +38 -0
- data/examples/test_dashboard.rb +38 -0
- data/examples/test_login_form.rb +63 -0
- data/examples/test_map_demo.rb +100 -0
- data/examples/test_stock_ticker.rb +39 -0
- data/examples/test_system_monitor.rb +40 -0
- data/ext/ratatui_ruby/.cargo/config.toml +8 -0
- data/ext/ratatui_ruby/.gitignore +4 -0
- data/ext/ratatui_ruby/Cargo.lock +698 -0
- data/ext/ratatui_ruby/Cargo.toml +16 -0
- data/ext/ratatui_ruby/extconf.rb +12 -0
- data/ext/ratatui_ruby/src/events.rs +279 -0
- data/ext/ratatui_ruby/src/lib.rs +105 -0
- data/ext/ratatui_ruby/src/rendering.rs +31 -0
- data/ext/ratatui_ruby/src/style.rs +149 -0
- data/ext/ratatui_ruby/src/terminal.rs +131 -0
- data/ext/ratatui_ruby/src/widgets/barchart.rs +73 -0
- data/ext/ratatui_ruby/src/widgets/block.rs +12 -0
- data/ext/ratatui_ruby/src/widgets/canvas.rs +146 -0
- data/ext/ratatui_ruby/src/widgets/center.rs +81 -0
- data/ext/ratatui_ruby/src/widgets/cursor.rs +29 -0
- data/ext/ratatui_ruby/src/widgets/gauge.rs +50 -0
- data/ext/ratatui_ruby/src/widgets/layout.rs +82 -0
- data/ext/ratatui_ruby/src/widgets/linechart.rs +154 -0
- data/ext/ratatui_ruby/src/widgets/list.rs +62 -0
- data/ext/ratatui_ruby/src/widgets/mod.rs +18 -0
- data/ext/ratatui_ruby/src/widgets/overlay.rs +20 -0
- data/ext/ratatui_ruby/src/widgets/paragraph.rs +56 -0
- data/ext/ratatui_ruby/src/widgets/scrollbar.rs +68 -0
- data/ext/ratatui_ruby/src/widgets/sparkline.rs +59 -0
- data/ext/ratatui_ruby/src/widgets/table.rs +117 -0
- data/ext/ratatui_ruby/src/widgets/tabs.rs +51 -0
- data/lib/ratatui_ruby/output.rb +7 -0
- data/lib/ratatui_ruby/schema/bar_chart.rb +28 -0
- data/lib/ratatui_ruby/schema/block.rb +23 -0
- data/lib/ratatui_ruby/schema/canvas.rb +62 -0
- data/lib/ratatui_ruby/schema/center.rb +19 -0
- data/lib/ratatui_ruby/schema/constraint.rb +33 -0
- data/lib/ratatui_ruby/schema/cursor.rb +17 -0
- data/lib/ratatui_ruby/schema/gauge.rb +24 -0
- data/lib/ratatui_ruby/schema/layout.rb +22 -0
- data/lib/ratatui_ruby/schema/line_chart.rb +41 -0
- data/lib/ratatui_ruby/schema/list.rb +22 -0
- data/lib/ratatui_ruby/schema/overlay.rb +15 -0
- data/lib/ratatui_ruby/schema/paragraph.rb +37 -0
- data/lib/ratatui_ruby/schema/scrollbar.rb +33 -0
- data/lib/ratatui_ruby/schema/sparkline.rb +24 -0
- data/lib/ratatui_ruby/schema/style.rb +31 -0
- data/lib/ratatui_ruby/schema/table.rb +24 -0
- data/lib/ratatui_ruby/schema/tabs.rb +22 -0
- data/lib/ratatui_ruby/test_helper.rb +75 -0
- data/lib/ratatui_ruby/version.rb +10 -0
- data/lib/ratatui_ruby.rb +87 -0
- data/sig/ratatui_ruby/ratatui_ruby.rbs +16 -0
- data/sig/ratatui_ruby/schema/bar_chart.rbs +14 -0
- data/sig/ratatui_ruby/schema/block.rbs +11 -0
- data/sig/ratatui_ruby/schema/canvas.rbs +62 -0
- data/sig/ratatui_ruby/schema/center.rbs +11 -0
- data/sig/ratatui_ruby/schema/constraint.rbs +13 -0
- data/sig/ratatui_ruby/schema/cursor.rbs +10 -0
- data/sig/ratatui_ruby/schema/gauge.rbs +13 -0
- data/sig/ratatui_ruby/schema/layout.rbs +11 -0
- data/sig/ratatui_ruby/schema/line_chart.rbs +20 -0
- data/sig/ratatui_ruby/schema/list.rbs +11 -0
- data/sig/ratatui_ruby/schema/overlay.rbs +9 -0
- data/sig/ratatui_ruby/schema/paragraph.rbs +11 -0
- data/sig/ratatui_ruby/schema/scrollbar.rbs +20 -0
- data/sig/ratatui_ruby/schema/sparkline.rbs +12 -0
- data/sig/ratatui_ruby/schema/style.rbs +13 -0
- data/sig/ratatui_ruby/schema/table.rbs +13 -0
- data/sig/ratatui_ruby/schema/tabs.rbs +11 -0
- data/sig/ratatui_ruby/test_helper.rbs +11 -0
- data/sig/ratatui_ruby/version.rbs +6 -0
- data/vendor/goodcop/base.yml +1047 -0
- metadata +196 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Point < Data
|
|
6
|
+
attr_reader x: Float
|
|
7
|
+
attr_reader y: Float
|
|
8
|
+
|
|
9
|
+
def self.new: (x: Float, y: Float) -> Point
|
|
10
|
+
| (Float, Float) -> Point
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Line < Data
|
|
14
|
+
attr_reader x1: Float
|
|
15
|
+
attr_reader y1: Float
|
|
16
|
+
attr_reader x2: Float
|
|
17
|
+
attr_reader y2: Float
|
|
18
|
+
attr_reader color: String | Symbol
|
|
19
|
+
|
|
20
|
+
def self.new: (x1: Float, y1: Float, x2: Float, y2: Float, color: String | Symbol) -> Line
|
|
21
|
+
| (Float, Float, Float, Float, String | Symbol) -> Line
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class Rectangle < Data
|
|
25
|
+
attr_reader x: Float
|
|
26
|
+
attr_reader y: Float
|
|
27
|
+
attr_reader width: Float
|
|
28
|
+
attr_reader height: Float
|
|
29
|
+
attr_reader color: String | Symbol
|
|
30
|
+
|
|
31
|
+
def self.new: (x: Float, y: Float, width: Float, height: Float, color: String | Symbol) -> Rectangle
|
|
32
|
+
| (Float, Float, Float, Float, String | Symbol) -> Rectangle
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class Circle < Data
|
|
36
|
+
attr_reader x: Float
|
|
37
|
+
attr_reader y: Float
|
|
38
|
+
attr_reader radius: Float
|
|
39
|
+
attr_reader color: String | Symbol
|
|
40
|
+
|
|
41
|
+
def self.new: (x: Float, y: Float, radius: Float, color: String | Symbol) -> Circle
|
|
42
|
+
| (Float, Float, Float, String | Symbol) -> Circle
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class Map < Data
|
|
46
|
+
attr_reader color: String | Symbol
|
|
47
|
+
attr_reader resolution: Symbol
|
|
48
|
+
|
|
49
|
+
def self.new: (color: String | Symbol, resolution: Symbol) -> Map
|
|
50
|
+
| (String | Symbol, Symbol) -> Map
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
class Canvas < Data
|
|
54
|
+
attr_reader shapes: Array[Line | Rectangle | Circle | Map]
|
|
55
|
+
attr_reader x_bounds: Array[Float]
|
|
56
|
+
attr_reader y_bounds: Array[Float]
|
|
57
|
+
attr_reader marker: Symbol
|
|
58
|
+
attr_reader block: Block?
|
|
59
|
+
|
|
60
|
+
def self.new: (?shapes: Array[Line | Rectangle | Circle | Map], ?x_bounds: Array[Float], ?y_bounds: Array[Float], ?marker: Symbol, ?block: Block?) -> Canvas
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Center < Data
|
|
6
|
+
attr_reader child: widget
|
|
7
|
+
attr_reader width_percent: Integer
|
|
8
|
+
attr_reader height_percent: Integer
|
|
9
|
+
def self.new: (child: widget, width_percent: Integer, height_percent: Integer) -> Center
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Constraint < Data
|
|
6
|
+
attr_reader type: Symbol
|
|
7
|
+
attr_reader value: Integer
|
|
8
|
+
def self.length: (Integer) -> Constraint
|
|
9
|
+
def self.percentage: (Integer) -> Constraint
|
|
10
|
+
def self.min: (Integer) -> Constraint
|
|
11
|
+
def self.new: (type: Symbol, value: Integer) -> Constraint
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Cursor < Data
|
|
6
|
+
attr_reader x: Integer
|
|
7
|
+
attr_reader y: Integer
|
|
8
|
+
def self.new: (x: Integer, y: Integer) -> Cursor
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Gauge < Data
|
|
6
|
+
attr_reader ratio: Float
|
|
7
|
+
attr_reader label: String?
|
|
8
|
+
attr_reader style: Style
|
|
9
|
+
attr_reader block: Block?
|
|
10
|
+
|
|
11
|
+
def self.new: (?ratio: Float, ?label: String?, ?style: Style, ?block: Block?) -> Gauge
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Layout < Data
|
|
6
|
+
attr_reader direction: Symbol
|
|
7
|
+
attr_reader constraints: Array[Constraint]
|
|
8
|
+
attr_reader children: Array[widget]
|
|
9
|
+
def self.new: (?direction: Symbol, ?constraints: Array[Constraint], ?children: Array[widget]) -> Layout
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Dataset < Data
|
|
6
|
+
attr_reader name: String | Symbol
|
|
7
|
+
attr_reader data: Array[[Float, Float]]
|
|
8
|
+
attr_reader color: String | Symbol
|
|
9
|
+
def self.new: (name: String | Symbol, data: Array[[Float, Float]], ?color: String | Symbol) -> Dataset
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class LineChart < Data
|
|
13
|
+
attr_reader datasets: Array[Dataset]
|
|
14
|
+
attr_reader x_labels: Array[String]
|
|
15
|
+
attr_reader y_labels: Array[String]
|
|
16
|
+
attr_reader y_bounds: [Float, Float]
|
|
17
|
+
attr_reader block: Block?
|
|
18
|
+
def self.new: (datasets: Array[Dataset], ?x_labels: Array[String], ?y_labels: Array[String], ?y_bounds: [Float, Float], ?block: Block?) -> LineChart
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class List < Data
|
|
6
|
+
attr_reader items: Array[String]
|
|
7
|
+
attr_reader selected_index: Integer?
|
|
8
|
+
attr_reader block: Block?
|
|
9
|
+
def self.new: (?items: Array[String], ?selected_index: Integer?, ?block: Block?) -> List
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Paragraph < Data
|
|
6
|
+
attr_reader text: String
|
|
7
|
+
attr_reader style: Style
|
|
8
|
+
attr_reader block: Block?
|
|
9
|
+
def self.new: (text: String, ?style: Style?, ?fg: (String | Symbol)?, ?bg: (String | Symbol)?, ?block: Block?) -> Paragraph
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Scrollbar < Data
|
|
6
|
+
attr_reader content_length: Integer
|
|
7
|
+
attr_reader position: Integer
|
|
8
|
+
attr_reader orientation: Symbol
|
|
9
|
+
attr_reader thumb_symbol: String
|
|
10
|
+
attr_reader block: Block?
|
|
11
|
+
|
|
12
|
+
def self.new: (
|
|
13
|
+
content_length: Integer,
|
|
14
|
+
position: Integer,
|
|
15
|
+
?orientation: Symbol,
|
|
16
|
+
?thumb_symbol: String,
|
|
17
|
+
?block: Block?
|
|
18
|
+
) -> Scrollbar
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Sparkline < Data
|
|
6
|
+
attr_reader data: Array[Integer]
|
|
7
|
+
attr_reader max: Integer?
|
|
8
|
+
attr_reader style: Style?
|
|
9
|
+
attr_reader block: Block?
|
|
10
|
+
def self.new: (data: Array[Integer], ?max: Integer?, ?style: Style?, ?block: Block?) -> Sparkline
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Style < Data
|
|
6
|
+
attr_reader fg: (String | Symbol)?
|
|
7
|
+
attr_reader bg: (String | Symbol)?
|
|
8
|
+
attr_reader modifiers: Array[Symbol]
|
|
9
|
+
|
|
10
|
+
def self.new: (?fg: (String | Symbol)?, ?bg: (String | Symbol)?, ?modifiers: Array[Symbol]) -> Style
|
|
11
|
+
def self.default: () -> Style
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Table < Data
|
|
6
|
+
attr_reader header: Array[String | Paragraph]?
|
|
7
|
+
attr_reader rows: Array[Array[String | Paragraph | Style | _ToS]]
|
|
8
|
+
attr_reader widths: Array[Constraint]
|
|
9
|
+
attr_reader block: Block?
|
|
10
|
+
|
|
11
|
+
def self.new: (?header: Array[String | Paragraph]?, ?rows: Array[Array[String | Paragraph | Style | _ToS]], ?widths: Array[Constraint], ?block: Block?) -> Table
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
class Tabs < Data
|
|
6
|
+
attr_reader titles: Array[String | _ToS]
|
|
7
|
+
attr_reader selected_index: Integer
|
|
8
|
+
attr_reader block: Block?
|
|
9
|
+
def self.new: (?titles: Array[String | _ToS], ?selected_index: Integer, ?block: Block?) -> Tabs
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
module RatatuiRuby
|
|
5
|
+
module TestHelper
|
|
6
|
+
def with_test_terminal: (?Integer width, ?Integer height) { () -> void } -> void
|
|
7
|
+
def buffer_content: () -> Array[String]
|
|
8
|
+
def cursor_position: () -> { x: Integer, y: Integer }
|
|
9
|
+
def inject_event: (String event_type, Hash[Symbol, untyped] data) -> void
|
|
10
|
+
end
|
|
11
|
+
end
|