Module: Legion::CLI::Theme

Defined in:
lib/legion/cli/theme.rb

Constant Summary collapse

PALETTE =

LegionIO canonical palette: 17 shades, one hue, no exceptions. Sourced from legion_colors.html — the official color system.

{
  void:           [7,   6,   15],
  background:     [14,  13,  26],
  deep:           [18,  16,  41],
  core_shell:     [24,  22,  58],
  glow_center:    [26,  22,  64],
  guide_rings:    [30,  28,  58],
  core_mid:       [33,  30,  80],
  skip:           [42,  39,  96],
  inner_tier:     [49,  46,  128],
  mid_arcs:       [61,  56,  138],
  diagonal_nodes: [74,  68,  168],
  cardinal:       [95,  87,  196],
  mid_nodes:      [127, 119, 221],
  inner_nodes:    [139, 131, 230],
  innermost:      [160, 154, 232],
  near_white:     [184, 178, 239],
  self_point:     [197, 194, 245]
}.freeze
RESET =
"\e[0m"
BOLD =
"\e[1m"
DIM =
"\e[2m"
B =

── Banner ──────────────────────────────────────────

"\u2588"
LOGO =
[
  "#{B}      #{B * 5}  #{B * 5}  #{B * 2}  #{B * 5}  #{B}   #{B}",
  "#{B}      #{B}      #{B}      #{B * 2}  #{B}   #{B}  #{B * 2}  #{B}",
  "#{B}      #{B * 4}   #{B} #{B * 3}  #{B * 2}  #{B}   #{B}  #{B} #{B} #{B}",
  "#{B}      #{B}      #{B}   #{B}  #{B * 2}  #{B}   #{B}  #{B}  #{B * 2}",
  "#{B * 5}  #{B * 5}  #{B * 5}  #{B * 2}  #{B * 5}  #{B}   #{B}"
].freeze
LOGO_GRADIENT =
%i[cardinal mid_nodes self_point mid_nodes cardinal].freeze
PAD =
'      '

Class Method Summary collapse

Class Method Details

.c(name) ⇒ Object



36
37
38
39
40
41
# File 'lib/legion/cli/theme.rb', line 36

def self.c(name)
  rgb = PALETTE[name]
  return '' unless rgb

  fg(*rgb)
end

.divider(width = 50, color_enabled: true) ⇒ Object

── Decorative helpers ──────────────────────────────



103
104
105
106
107
# File 'lib/legion/cli/theme.rb', line 103

def self.divider(width = 50, color_enabled: true)
  return "\u2500" * width unless color_enabled

  "#{c(:inner_tier)}#{"\u2500" * width}#{RESET}"
end

.fg(red, green, blue) ⇒ Object



32
33
34
# File 'lib/legion/cli/theme.rb', line 32

def self.fg(red, green, blue)
  "\e[38;2;#{red};#{green};#{blue}m"
end

.orbital_header(text, color_enabled: true) ⇒ Object



109
110
111
112
113
# File 'lib/legion/cli/theme.rb', line 109

def self.orbital_header(text, color_enabled: true)
  return "── #{text} ──" unless color_enabled

  "#{c(:inner_tier)}── #{BOLD}#{c(:near_white)}#{text}#{RESET} #{c(:inner_tier)}──#{RESET}"
end

.plain_banner(version: nil) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/legion/cli/theme.rb', line 84

def self.plain_banner(version: nil)
  lines = []
  lines << "#{PAD}\u00b7 #{'' * 43} \u00b7"
  lines << "#{PAD}#{'' * 45}"
  lines << "#{PAD}│  \u00b7#{' ' * 39}\u00b7  │"
  LOGO.each { |row| lines << "#{PAD}#{row}" }
  lines << "#{PAD}│  \u00b7#{' ' * 39}\u00b7  │"
  lines << "#{PAD}#{'' * 45}"
  lines << "#{PAD}\u00b7 #{'' * 43} \u00b7"
  if version
    lines << ''
    lines << "#{PAD}  Async Job Engine & Extension Ecosystem"
    lines << "#{PAD}  v#{version}"
  end
  lines.join("\n")
end

.render_banner(version: nil, color: true) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/legion/cli/theme.rb', line 58

def self.render_banner(version: nil, color: true)
  return plain_banner(version: version) unless color

  lines = []
  lines << "#{PAD}#{c(:mid_arcs)}\u00b7 #{c(:inner_tier)}#{'' * 43} #{c(:mid_arcs)}\u00b7#{RESET}"
  lines << "#{PAD}#{c(:inner_tier)}#{'' * 45}#{RESET}"
  lines << "#{PAD}#{c(:inner_tier)}#{c(:cardinal)}  \u00b7#{' ' * 39}\u00b7  #{c(:inner_tier)}#{RESET}"

  LOGO.each_with_index do |row, i|
    lc = c(LOGO_GRADIENT[i])
    lines << "#{PAD}#{c(:inner_tier)}#{lc}    #{row}    #{c(:inner_tier)}#{RESET}"
  end

  lines << "#{PAD}#{c(:inner_tier)}#{c(:cardinal)}  \u00b7#{' ' * 39}\u00b7  #{c(:inner_tier)}#{RESET}"
  lines << "#{PAD}#{c(:inner_tier)}#{'' * 45}#{RESET}"
  lines << "#{PAD}#{c(:mid_arcs)}\u00b7 #{c(:inner_tier)}#{'' * 43} #{c(:mid_arcs)}\u00b7#{RESET}"

  if version
    lines << ''
    lines << "#{PAD}  #{c(:mid_nodes)}Async Job Engine & Extension Ecosystem#{RESET}"
    lines << "#{PAD}  #{c(:diagonal_nodes)}v#{version}#{RESET}"
  end

  lines.join("\n")
end