ratatui_ruby 0.6.0 → 0.7.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.
- checksums.yaml +4 -4
- data/.builds/ruby-3.2.yml +1 -1
- data/.builds/ruby-3.3.yml +1 -1
- data/.builds/ruby-3.4.yml +1 -1
- data/.builds/ruby-4.0.0.yml +1 -1
- data/AGENTS.md +4 -4
- data/CHANGELOG.md +48 -0
- data/README.md +26 -1
- data/doc/application_architecture.md +16 -16
- data/doc/application_testing.md +1 -1
- data/doc/async.md +160 -0
- data/doc/contributors/architectural_overhaul/chat_conversations.md +4952 -0
- data/doc/contributors/architectural_overhaul/implementation_plan.md +60 -0
- data/doc/contributors/architectural_overhaul/task.md +37 -0
- data/doc/contributors/design/ruby_frontend.md +277 -81
- data/doc/contributors/design/rust_backend.md +349 -55
- data/doc/contributors/developing_examples.md +5 -5
- data/doc/contributors/index.md +7 -5
- data/doc/contributors/v1.0.0_blockers.md +1729 -0
- data/doc/debugging.md +71 -0
- data/doc/index.md +11 -6
- data/doc/interactive_design.md +2 -2
- data/doc/quickstart.md +66 -97
- data/doc/v0.7.0_migration.md +236 -0
- data/doc/why.md +93 -0
- data/examples/app_all_events/README.md +6 -4
- data/examples/app_all_events/app.rb +1 -1
- data/examples/app_all_events/model/app_model.rb +1 -1
- data/examples/app_all_events/model/msg.rb +1 -1
- data/examples/app_all_events/update.rb +1 -1
- data/examples/app_all_events/view/app_view.rb +1 -1
- data/examples/app_all_events/view/controls_view.rb +1 -1
- data/examples/app_all_events/view/counts_view.rb +1 -1
- data/examples/app_all_events/view/live_view.rb +1 -1
- data/examples/app_all_events/view/log_view.rb +1 -1
- data/examples/app_color_picker/README.md +7 -5
- data/examples/app_color_picker/app.rb +1 -1
- data/examples/app_login_form/README.md +2 -0
- data/examples/app_stateful_interaction/README.md +2 -0
- data/examples/app_stateful_interaction/app.rb +1 -1
- data/examples/verify_quickstart_dsl/README.md +4 -3
- data/examples/verify_quickstart_dsl/app.rb +1 -1
- data/examples/verify_quickstart_layout/README.md +1 -1
- data/examples/verify_quickstart_lifecycle/README.md +3 -3
- data/examples/verify_quickstart_lifecycle/app.rb +2 -2
- data/examples/verify_readme_usage/README.md +1 -1
- data/examples/widget_barchart_demo/README.md +2 -1
- data/examples/widget_block_demo/README.md +2 -0
- data/examples/widget_box_demo/README.md +3 -3
- data/examples/widget_calendar_demo/README.md +3 -3
- data/examples/widget_calendar_demo/app.rb +5 -1
- data/examples/widget_canvas_demo/README.md +3 -3
- data/examples/widget_cell_demo/README.md +3 -3
- data/examples/widget_center_demo/README.md +3 -3
- data/examples/widget_chart_demo/README.md +3 -3
- data/examples/widget_gauge_demo/README.md +3 -3
- data/examples/widget_layout_split/README.md +3 -3
- data/examples/widget_line_gauge_demo/README.md +3 -3
- data/examples/widget_list_demo/README.md +3 -3
- data/examples/widget_map_demo/README.md +3 -3
- data/examples/widget_map_demo/app.rb +2 -2
- data/examples/widget_overlay_demo/README.md +36 -0
- data/examples/widget_popup_demo/README.md +3 -3
- data/examples/widget_ratatui_logo_demo/README.md +3 -3
- data/examples/widget_ratatui_logo_demo/app.rb +1 -1
- data/examples/widget_ratatui_mascot_demo/README.md +3 -3
- data/examples/widget_rect/README.md +3 -3
- data/examples/widget_render/README.md +3 -3
- data/examples/widget_render/app.rb +3 -3
- data/examples/widget_rich_text/README.md +3 -3
- data/examples/widget_scroll_text/README.md +3 -3
- data/examples/widget_scrollbar_demo/README.md +3 -3
- data/examples/widget_sparkline_demo/README.md +3 -3
- data/examples/widget_style_colors/README.md +3 -3
- data/examples/widget_table_demo/README.md +3 -3
- data/examples/widget_table_demo/app.rb +19 -4
- data/examples/widget_tabs_demo/README.md +3 -3
- data/examples/widget_text_width/README.md +3 -3
- data/examples/widget_text_width/app.rb +8 -1
- data/ext/ratatui_ruby/Cargo.lock +1 -1
- data/ext/ratatui_ruby/Cargo.toml +1 -1
- data/ext/ratatui_ruby/src/frame.rs +6 -5
- data/ext/ratatui_ruby/src/lib.rs +3 -2
- data/ext/ratatui_ruby/src/rendering.rs +22 -21
- data/ext/ratatui_ruby/src/style.rs +25 -9
- data/ext/ratatui_ruby/src/text.rs +12 -3
- data/ext/ratatui_ruby/src/widgets/canvas.rs +5 -5
- data/ext/ratatui_ruby/src/widgets/table.rs +81 -36
- data/lib/ratatui_ruby/buffer/cell.rb +168 -0
- data/lib/ratatui_ruby/buffer.rb +15 -0
- data/lib/ratatui_ruby/frame.rb +8 -8
- data/lib/ratatui_ruby/layout/constraint.rb +95 -0
- data/lib/ratatui_ruby/layout/layout.rb +106 -0
- data/lib/ratatui_ruby/layout/rect.rb +118 -0
- data/lib/ratatui_ruby/layout.rb +19 -0
- data/lib/ratatui_ruby/list_state.rb +2 -2
- data/lib/ratatui_ruby/schema/layout.rb +1 -1
- data/lib/ratatui_ruby/schema/row.rb +66 -0
- data/lib/ratatui_ruby/schema/table.rb +10 -10
- data/lib/ratatui_ruby/schema/text.rb +27 -2
- data/lib/ratatui_ruby/style/style.rb +81 -0
- data/lib/ratatui_ruby/style.rb +15 -0
- data/lib/ratatui_ruby/table_state.rb +1 -1
- data/lib/ratatui_ruby/test_helper/snapshot.rb +24 -0
- data/lib/ratatui_ruby/test_helper/style_assertions.rb +1 -1
- data/lib/ratatui_ruby/tui/buffer_factories.rb +20 -0
- data/lib/ratatui_ruby/tui/canvas_factories.rb +44 -0
- data/lib/ratatui_ruby/tui/core.rb +38 -0
- data/lib/ratatui_ruby/tui/layout_factories.rb +74 -0
- data/lib/ratatui_ruby/tui/state_factories.rb +33 -0
- data/lib/ratatui_ruby/tui/style_factories.rb +20 -0
- data/lib/ratatui_ruby/tui/text_factories.rb +44 -0
- data/lib/ratatui_ruby/tui/widget_factories.rb +195 -0
- data/lib/ratatui_ruby/tui.rb +75 -0
- data/lib/ratatui_ruby/version.rb +1 -1
- data/lib/ratatui_ruby/widgets/bar_chart/bar.rb +47 -0
- data/lib/ratatui_ruby/widgets/bar_chart/bar_group.rb +25 -0
- data/lib/ratatui_ruby/widgets/bar_chart.rb +239 -0
- data/lib/ratatui_ruby/widgets/block.rb +192 -0
- data/lib/ratatui_ruby/widgets/calendar.rb +84 -0
- data/lib/ratatui_ruby/widgets/canvas.rb +231 -0
- data/lib/ratatui_ruby/widgets/cell.rb +47 -0
- data/lib/ratatui_ruby/widgets/center.rb +59 -0
- data/lib/ratatui_ruby/widgets/chart.rb +185 -0
- data/lib/ratatui_ruby/widgets/clear.rb +54 -0
- data/lib/ratatui_ruby/widgets/cursor.rb +42 -0
- data/lib/ratatui_ruby/widgets/gauge.rb +72 -0
- data/lib/ratatui_ruby/widgets/line_gauge.rb +80 -0
- data/lib/ratatui_ruby/widgets/list.rb +127 -0
- data/lib/ratatui_ruby/widgets/list_item.rb +43 -0
- data/lib/ratatui_ruby/widgets/overlay.rb +43 -0
- data/lib/ratatui_ruby/widgets/paragraph.rb +99 -0
- data/lib/ratatui_ruby/widgets/ratatui_logo.rb +31 -0
- data/lib/ratatui_ruby/widgets/ratatui_mascot.rb +36 -0
- data/lib/ratatui_ruby/widgets/row.rb +68 -0
- data/lib/ratatui_ruby/widgets/scrollbar.rb +143 -0
- data/lib/ratatui_ruby/widgets/shape/label.rb +68 -0
- data/lib/ratatui_ruby/widgets/sparkline.rb +134 -0
- data/lib/ratatui_ruby/widgets/table.rb +141 -0
- data/lib/ratatui_ruby/widgets/tabs.rb +85 -0
- data/lib/ratatui_ruby/widgets.rb +40 -0
- data/lib/ratatui_ruby.rb +23 -39
- data/sig/examples/app_all_events/view.rbs +1 -1
- data/sig/examples/app_all_events/view_state.rbs +1 -1
- data/sig/ratatui_ruby/schema/row.rbs +22 -0
- data/sig/ratatui_ruby/schema/table.rbs +1 -1
- data/sig/ratatui_ruby/schema/text.rbs +1 -0
- data/sig/ratatui_ruby/session.rbs +29 -49
- data/sig/ratatui_ruby/tui/buffer_factories.rbs +10 -0
- data/sig/ratatui_ruby/tui/canvas_factories.rbs +14 -0
- data/sig/ratatui_ruby/tui/core.rbs +14 -0
- data/sig/ratatui_ruby/tui/layout_factories.rbs +19 -0
- data/sig/ratatui_ruby/tui/state_factories.rbs +12 -0
- data/sig/ratatui_ruby/tui/style_factories.rbs +10 -0
- data/sig/ratatui_ruby/tui/text_factories.rbs +14 -0
- data/sig/ratatui_ruby/tui/widget_factories.rbs +39 -0
- data/sig/ratatui_ruby/tui.rbs +19 -0
- data/tasks/autodoc.rake +1 -35
- data/tasks/bump/changelog.rb +8 -0
- data/tasks/bump/ruby_gem.rb +12 -0
- data/tasks/bump/unreleased_section.rb +16 -0
- data/tasks/sourcehut.rake +4 -1
- metadata +64 -15
- data/doc/contributors/dwim_dx.md +0 -366
- data/doc/contributors/examples_audit/p1_high.md +0 -21
- data/doc/contributors/examples_audit/p2_moderate.md +0 -81
- data/doc/contributors/examples_audit.md +0 -41
- data/doc/images/app_analytics.png +0 -0
- data/doc/images/app_custom_widget.png +0 -0
- data/doc/images/app_mouse_events.png +0 -0
- data/doc/images/widget_table_flex.png +0 -0
- data/lib/ratatui_ruby/session/autodoc.rb +0 -482
- data/lib/ratatui_ruby/session.rb +0 -178
- data/tasks/autodoc/inventory.rb +0 -63
- data/tasks/autodoc/notice.rb +0 -26
- data/tasks/autodoc/rbs.rb +0 -38
- data/tasks/autodoc/rdoc.rb +0 -45
data/tasks/autodoc/inventory.rb
DELETED
|
@@ -1,63 +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
|
-
require_relative "name"
|
|
7
|
-
require_relative "member"
|
|
8
|
-
|
|
9
|
-
module Autodoc
|
|
10
|
-
class Inventory
|
|
11
|
-
include Enumerable
|
|
12
|
-
|
|
13
|
-
def each(&)
|
|
14
|
-
delegates.each(&)
|
|
15
|
-
factories.each(&)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def delegates
|
|
19
|
-
RatatuiRuby.singleton_methods(false).sort.map do |method_name|
|
|
20
|
-
Member::Delegate.new(name: method_name)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def factories
|
|
25
|
-
members = []
|
|
26
|
-
RatatuiRuby.constants.sort.each do |const_name|
|
|
27
|
-
next if const_name == :Buffer
|
|
28
|
-
|
|
29
|
-
const = RatatuiRuby.const_get(const_name)
|
|
30
|
-
next unless const.is_a?(Module)
|
|
31
|
-
|
|
32
|
-
if const.is_a?(Class)
|
|
33
|
-
snake_name = Name.new(const_name).snake
|
|
34
|
-
members << Member::Factory.new(name: snake_name, const_name:)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Singleton methods (for both Classes and Modules)
|
|
38
|
-
parent_prefix = Name.new(const_name).snake
|
|
39
|
-
const.singleton_methods(false).sort.each do |class_method|
|
|
40
|
-
members << Member::Helper.new(
|
|
41
|
-
name: "#{parent_prefix}_#{class_method}",
|
|
42
|
-
class_method:,
|
|
43
|
-
const_name:
|
|
44
|
-
)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
const.constants.sort.each do |child_name|
|
|
48
|
-
child = const.const_get(child_name)
|
|
49
|
-
next unless child.is_a?(Class)
|
|
50
|
-
|
|
51
|
-
parent_prefix = Name.new(const_name).snake
|
|
52
|
-
child_suffix = Name.new(child_name).snake
|
|
53
|
-
|
|
54
|
-
members << Member::Factory.new(
|
|
55
|
-
name: "#{parent_prefix}_#{child_suffix}",
|
|
56
|
-
const_name: "#{const_name}::#{child_name}"
|
|
57
|
-
)
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
members
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
data/tasks/autodoc/notice.rb
DELETED
|
@@ -1,26 +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
|
-
module Autodoc
|
|
7
|
-
class Notice < Data.define(:task_name)
|
|
8
|
-
def rbs
|
|
9
|
-
[
|
|
10
|
-
"# !!! DO NOT EDIT THIS FILE BY HAND !!!",
|
|
11
|
-
"# This file is automatically generated by `rake #{task_name}`.",
|
|
12
|
-
"# Any changes will be overwritten.",
|
|
13
|
-
"",
|
|
14
|
-
]
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def rdoc
|
|
18
|
-
[
|
|
19
|
-
"# !!! DO NOT EDIT THIS FILE BY HAND !!!",
|
|
20
|
-
"# This file is automatically generated by `rake #{task_name}`.",
|
|
21
|
-
"# Any changes will be overwritten.",
|
|
22
|
-
"",
|
|
23
|
-
]
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
data/tasks/autodoc/rbs.rb
DELETED
|
@@ -1,38 +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
|
-
module Autodoc
|
|
7
|
-
class Rbs < Data.define(:path, :notice)
|
|
8
|
-
def write(inventory)
|
|
9
|
-
FileUtils.mkdir_p(File.dirname(path))
|
|
10
|
-
|
|
11
|
-
# REUSE-IgnoreStart
|
|
12
|
-
lines = [
|
|
13
|
-
"# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>",
|
|
14
|
-
"# SPDX-License-Identifier: AGPL-3.0-or-later",
|
|
15
|
-
"",
|
|
16
|
-
]
|
|
17
|
-
# REUSE-IgnoreEnd
|
|
18
|
-
lines += notice.rbs
|
|
19
|
-
lines += [
|
|
20
|
-
"module RatatuiRuby",
|
|
21
|
-
" class Session",
|
|
22
|
-
" def self.new: () -> Session",
|
|
23
|
-
" | () { (Session) -> void } -> void",
|
|
24
|
-
"",
|
|
25
|
-
]
|
|
26
|
-
|
|
27
|
-
inventory.each do |member|
|
|
28
|
-
lines << member.rbs
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
lines << " end"
|
|
32
|
-
lines << "end"
|
|
33
|
-
|
|
34
|
-
File.write(path, "#{lines.join("\n")}\n")
|
|
35
|
-
puts "Generated #{path}"
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
data/tasks/autodoc/rdoc.rb
DELETED
|
@@ -1,45 +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
|
-
module Autodoc
|
|
7
|
-
class Rdoc < Data.define(:path, :notice)
|
|
8
|
-
def write(inventory)
|
|
9
|
-
FileUtils.mkdir_p(File.dirname(path))
|
|
10
|
-
|
|
11
|
-
# REUSE-IgnoreStart
|
|
12
|
-
lines = [
|
|
13
|
-
"# frozen_string_literal: true",
|
|
14
|
-
"",
|
|
15
|
-
"# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>",
|
|
16
|
-
"# SPDX-License-Identifier: AGPL-3.0-or-later",
|
|
17
|
-
"",
|
|
18
|
-
]
|
|
19
|
-
# REUSE-IgnoreEnd
|
|
20
|
-
lines += notice.rdoc
|
|
21
|
-
lines += [
|
|
22
|
-
"module RatatuiRuby",
|
|
23
|
-
" class Session",
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
lines << " # == RatatuiRuby Delegates"
|
|
27
|
-
lines << " #"
|
|
28
|
-
inventory.delegates.each do |member|
|
|
29
|
-
lines += member.rdoc
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
lines << " # == Widget Factories"
|
|
33
|
-
lines << " #"
|
|
34
|
-
inventory.factories.each do |member|
|
|
35
|
-
lines += member.rdoc
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
lines << " end"
|
|
39
|
-
lines << "end"
|
|
40
|
-
|
|
41
|
-
File.write(path, "#{lines.join("\n")}\n")
|
|
42
|
-
puts "Generated #{path}"
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|