Module: RatatuiRuby::TUI::LayoutFactories

Included in:
RatatuiRuby::TUI
Defined in:
lib/ratatui_ruby/tui/layout_factories.rb

Overview

Layout factory methods for Session.

Provides convenient access to Layout::Rect, Layout::Constraint, and Layout::Layout without fully qualifying the class names.

Instance Method Summary collapse

Instance Method Details

#constraint(type_or_arg = nil, arg1 = nil, arg2 = nil) ⇒ Layout::Constraint

Creates a Layout::Constraint, with optional type-based dispatch.

When called with a type symbol as the first argument, dispatches to the appropriate constraint factory (TIMTOWTDI pattern).

Also available as: tui.percent(50), tui.flex(1)

Examples

– SPDX-SnippetBegin SPDX-FileCopyrightText: 2026 Kerrick Long SPDX-License-Identifier: MIT-0 ++

tui.constraint(:length, 10)     # => Constraint.length(10)
tui.constraint(:percentage, 50) # => Constraint.percentage(50)
tui.constraint(:min, 5)         # => Constraint.min(5)
tui.constraint(:fill, 2)        # => Constraint.fill(2)
tui.constraint(:ratio, 1, 3)    # => Constraint.ratio(1, 3)

– SPDX-SnippetEnd ++

Returns:



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 44

def constraint(type_or_arg = nil, arg1 = nil, arg2 = nil, **)
  # Type-based dispatch when first arg is a symbol
  if type_or_arg.is_a?(Symbol)
    case type_or_arg
    when :length, :fixed
      constraint_length(arg1 || raise(ArgumentError, "#{type_or_arg} requires a value"))
    when :percentage, :percent
      constraint_percentage(arg1 || raise(ArgumentError, "#{type_or_arg} requires a value"))
    when :min
      constraint_min(arg1 || raise(ArgumentError, "min requires a value"))
    when :max
      constraint_max(arg1 || raise(ArgumentError, "max requires a value"))
    when :fill, :flex, :fr
      constraint_fill(arg1 || 1)
    when :ratio, :aspect
      n = arg1 || raise(ArgumentError, "ratio requires numerator")
      d = arg2 || raise(ArgumentError, "ratio requires denominator")
      constraint_ratio(n, d)
    else
      # Use to_s since type_or_arg must be a Symbol here
      raise ArgumentError, "Unknown constraint type: :#{type_or_arg}. " \
        "Valid types: :length, :percentage, :min, :max, :fill, :ratio"
    end
  elsif type_or_arg.nil? && arg1.nil?
    Layout::Constraint.new(**)
  else
    Layout::Constraint.new(type_or_arg, arg1, arg2, **)
  end
end

#constraint_fill(n = 1) ⇒ Layout::Constraint

Creates a Layout::Constraint.fill.

Returns:



100
101
102
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 100

def constraint_fill(n = 1)
  Layout::Constraint.fill(n)
end

#constraint_length(n) ⇒ Layout::Constraint

Creates a Layout::Constraint.length.

Returns:



76
77
78
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 76

def constraint_length(n)
  Layout::Constraint.length(n)
end

#constraint_max(n) ⇒ Layout::Constraint

Creates a Layout::Constraint.max.

Returns:



94
95
96
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 94

def constraint_max(n)
  Layout::Constraint.max(n)
end

#constraint_min(n) ⇒ Layout::Constraint

Creates a Layout::Constraint.min.

Returns:



88
89
90
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 88

def constraint_min(n)
  Layout::Constraint.min(n)
end

#constraint_percentage(n) ⇒ Layout::Constraint

Creates a Layout::Constraint.percentage.

Returns:



82
83
84
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 82

def constraint_percentage(n)
  Layout::Constraint.percentage(n)
end

#constraint_ratio(numerator, denominator) ⇒ Layout::Constraint

Creates a Layout::Constraint.ratio.

Returns:



106
107
108
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 106

def constraint_ratio(numerator, denominator)
  Layout::Constraint.ratio(numerator, denominator)
end

#fixed(n) ⇒ Layout::Constraint

Alias for #constraint_length — CSS-inspired “fixed” sizing.

Returns:



130
131
132
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 130

def fixed(n)
  constraint_length(n)
end

#flex(n = 1) ⇒ Layout::Constraint

Alias for #constraint_fill — CSS Flexbox-inspired flexible sizing.

Returns:



142
143
144
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 142

def flex(n = 1)
  constraint_fill(n)
end

#fr(n = 1) ⇒ Layout::Constraint

Alias for #constraint_fill — CSS Grid-inspired “fr” (fraction) unit.

Returns:



148
149
150
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 148

def fr(n = 1)
  constraint_fill(n)
end

#layoutLayout::Layout

Creates a Layout::Layout.

Returns:



112
113
114
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 112

def layout(...)
  Layout::Layout.new(...)
end

#layout_split(area, direction: :vertical, constraints:, flex: :legacy) ⇒ Array<Layout::Rect>

Splits an area using Layout::Layout.split.

Returns:



118
119
120
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 118

def layout_split(area, direction: :vertical, constraints:, flex: :legacy)
  Layout::Layout.split(area, direction:, constraints:, flex:)
end

#percent(n) ⇒ Layout::Constraint

Alias for #constraint_percentage — CSS-inspired percent sizing.

Returns:



136
137
138
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 136

def percent(n)
  constraint_percentage(n)
end

#rectLayout::Rect

Creates a Layout::Rect.

Returns:



17
18
19
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 17

def rect(...)
  Layout::Rect.new(...)
end

#split(area, direction: :vertical, constraints:, flex: :legacy) ⇒ Array<Layout::Rect>

Alias for #layout_split — shorter, more ergonomic.

Returns:



124
125
126
# File 'lib/ratatui_ruby/tui/layout_factories.rb', line 124

def split(area, direction: :vertical, constraints:, flex: :legacy)
  layout_split(area, direction:, constraints:, flex:)
end