natty-ui 0.5.3 → 0.7.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.
@@ -28,7 +28,7 @@ module NattyUI
28
28
  #
29
29
  # @param question [#to_s] Question to display
30
30
  # @param choices [#to_s] choices selectable via index (0..9)
31
- # @param result [Symbol] defines how the result ist returned
31
+ # @param result [Symbol] defines how the result will be returned
32
32
  # @param kw_choices [{Char => #to_s}] choices selectable with given char
33
33
  # @return [Char] when `result` is configured as `:char`
34
34
  # @return [#to_s] when `result` is configured as `:choice`
@@ -47,7 +47,7 @@ module NattyUI
47
47
  class Query < Element
48
48
  protected
49
49
 
50
- def _call(question, choices, kw_choices, result_typye)
50
+ def _call(question, choices, kw_choices, result_type)
51
51
  choices = grab(choices, kw_choices)
52
52
  return if choices.empty?
53
53
  wrapper.temporary do
@@ -58,17 +58,17 @@ module NattyUI
58
58
  title: question,
59
59
  symbol: :query
60
60
  )
61
- read(choices, result_typye)
61
+ read(choices, result_type)
62
62
  end
63
63
  end
64
64
 
65
- def read(choices, result_typye)
65
+ def read(choices, result_type)
66
66
  while true
67
67
  char = NattyUI.in_stream.getch
68
68
  return if "\3\4\e".include?(char)
69
69
  next unless choices.key?(char)
70
- return char if result_typye == :char
71
- return choices[char] if result_typye == :choice
70
+ return char if result_type == :char
71
+ return choices[char] if result_type == :choice
72
72
  return char, choices[char]
73
73
  end
74
74
  end
@@ -80,7 +80,7 @@ module NattyUI
80
80
  .to_h
81
81
  .merge!(kw_choices)
82
82
  .transform_keys! { |k| [k.to_s[0], ' '].max }
83
- .transform_values! { |v| v.to_s.tr("\r\n", ' ') }
83
+ .transform_values! { |v| v.to_s.tr("\r\n\t", ' ') }
84
84
  end
85
85
  end
86
86
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'element'
4
+
5
+ module NattyUI
6
+ module Features
7
+ # Request user input.
8
+ #
9
+ # @param question [#to_s] Question to display
10
+ # @param password [Boolean] whether to hide the input
11
+ # @return [String] the user input
12
+ # @return [nil] when input was aborted with `^C` or `^D`
13
+ def request(question, password: false)
14
+ _element(:Request, question, password)
15
+ end
16
+ end
17
+
18
+ class Wrapper
19
+ #
20
+ # An {Element} to request user input.
21
+ #
22
+ # @see Features#request
23
+ class Request < Element
24
+ protected
25
+
26
+ def _call(question, password)
27
+ return read_password(question) if password
28
+ NattyUI.readline(prompt(question), stream: wrapper.stream)
29
+ ensure
30
+ finish
31
+ end
32
+
33
+ def read_password(question)
34
+ (wrapper.stream << prompt(question)).flush
35
+ NattyUI.in_stream.getpass
36
+ rescue Interrupt
37
+ nil
38
+ end
39
+
40
+ def prompt(question) = "#{prefix}▶︎ #{question}: "
41
+ end
42
+ end
43
+ end
@@ -56,7 +56,7 @@ module NattyUI
56
56
  *args,
57
57
  max_width: max_width,
58
58
  prefix: prefix ? "#{@prefix}#{prefix}" : @prefix,
59
- suffix: suffix ? "#{@suffix}#{suffix}" : @suffix
59
+ suffix: suffix ? "#{suffix}#{@suffix}" : @suffix
60
60
  )
61
61
  self
62
62
  end
@@ -68,7 +68,7 @@ module NattyUI
68
68
  # @return [Section] itself
69
69
  def space(lines = 1)
70
70
  @parent.puts(
71
- "\n" * ([lines.to_i, 1].max - 1),
71
+ "\n" * [lines.to_i, 1].max,
72
72
  prefix: @prefix,
73
73
  suffix: @suffix
74
74
  )
@@ -92,8 +92,8 @@ module NattyUI
92
92
 
93
93
  protected
94
94
 
95
- def initialize(parent, prefix: nil, suffix: nil, **_)
96
- super(parent)
95
+ def initialize(parent, prefix: nil, suffix: nil, **opts)
96
+ super(parent, **opts)
97
97
  @prefix = prefix
98
98
  @suffix = suffix
99
99
  end
@@ -30,16 +30,14 @@ module NattyUI
30
30
  end
31
31
 
32
32
  def finish
33
- unless failed?
34
- @status = :completed if @status == :closed
35
- @temp.call
36
- end
33
+ return @parent.failed(*@final_text) if failed?
34
+ @temp.call
37
35
  _section(
38
36
  @parent,
39
37
  :Message,
40
38
  @final_text,
41
39
  title: @final_text.shift,
42
- symbol: @status
40
+ symbol: @status = :completed
43
41
  )
44
42
  end
45
43
  end
@@ -1,11 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'io/console'
3
4
  require_relative 'wrapper/ask'
4
5
  require_relative 'wrapper/framed'
5
6
  require_relative 'wrapper/heading'
7
+ require_relative 'wrapper/list_in_columns'
6
8
  require_relative 'wrapper/message'
7
9
  require_relative 'wrapper/progress'
8
10
  require_relative 'wrapper/query'
11
+ require_relative 'wrapper/request'
9
12
  require_relative 'wrapper/section'
10
13
  require_relative 'wrapper/task'
11
14
 
@@ -74,9 +77,8 @@ module NattyUI
74
77
  # @return [Wrapper] itself
75
78
  def space(lines = 1)
76
79
  lines = [lines.to_i, 1].max
77
- @stream << ("\n" * lines)
78
80
  @lines_written += lines
79
- @stream.flush
81
+ (@stream << ("\n" * lines)).flush
80
82
  self
81
83
  end
82
84
 
@@ -136,11 +138,6 @@ module NattyUI
136
138
 
137
139
  protected
138
140
 
139
- def embellish(obj)
140
- obj = NattyUI.plain(obj)
141
- obj.empty? ? nil : obj
142
- end
143
-
144
141
  def temp_func
145
142
  lambda do
146
143
  @stream.flush
@@ -156,10 +153,18 @@ module NattyUI
156
153
  @ws = false
157
154
  end
158
155
 
156
+ def embellish(obj) = (obj = NattyUI.plain(obj)).empty? ? nil : obj
157
+
159
158
  def wrapper = self
160
159
  def prefix = nil
161
160
  alias suffix prefix
162
161
 
162
+ def prefix_width = 0
163
+ alias suffix_width prefix_width
164
+ alias width prefix_width
165
+
166
+ alias available_width screen_columns
167
+
163
168
  private_class_method :new
164
169
  end
165
170
  end
data/lib/natty-ui.rb CHANGED
@@ -2,9 +2,10 @@
2
2
 
3
3
  require 'readline'
4
4
  unless defined?(Reline)
5
- # only load the Reline::Unicode part
5
+ # load the Reline::Unicode part only
6
6
  # @!visibility private
7
7
  module Reline
8
+ # @!visibility private
8
9
  def self.ambiguous_width = 1
9
10
  end
10
11
  require 'reline/unicode'
@@ -24,7 +25,7 @@ module NattyUI
24
25
  class << self
25
26
  # @see .valid_in?
26
27
  # @return [IO] IO stream used to read input
27
- # @raise TypeError when a non-readable stream will be assigned
28
+ # @raise [TypeError] when a non-readable stream will be assigned
28
29
  attr_reader :in_stream
29
30
 
30
31
  # @param [IO] stream to read input
@@ -43,7 +44,7 @@ module NattyUI
43
44
  # @param [Boolean, :auto] ansi whether ANSI should be supported
44
45
  # or automatically selected
45
46
  # @return [Wrapper] wrapper for the given `stream`
46
- # @raise TypeError when `stream` is not a writable stream
47
+ # @raise [TypeError] when `stream` is not a writable stream
47
48
  def new(stream, ansi: :auto)
48
49
  unless valid_out?(stream)
49
50
  raise(TypeError, "writable IO required - #{stream.inspect}")
@@ -76,10 +77,9 @@ module NattyUI
76
77
  # Translate embedded attribute descriptions into ANSI control codes.
77
78
  #
78
79
  # @param [#to_s] str string to edit
79
- # @return ]String] edited string
80
+ # @return [String] edited string
80
81
  def embellish(str)
81
- str = str.to_s
82
- return +'' if str.empty?
82
+ return +'' if (str = str.to_s).empty?
83
83
  reset = false
84
84
  ret =
85
85
  str.gsub(/(\[\[((?~\]\]))\]\])/) do
@@ -104,11 +104,8 @@ module NattyUI
104
104
  .to_s
105
105
  .gsub(/(\[\[((?~\]\]))\]\])/) do
106
106
  match = Regexp.last_match[2]
107
- unless match.delete_prefix!('/')
108
- ansi = Ansi.try_convert(match)
109
- next ansi ? nil : "[[#{match}]]"
110
- end
111
- match.empty? ? nil : "[[#{match}]]"
107
+ next match.empty? ? nil : "[[#{match}]]" if match.delete_prefix!('/')
108
+ Ansi.try_convert(match) ? nil : "[[#{match}]]"
112
109
  end
113
110
  end
114
111
 
@@ -118,8 +115,7 @@ module NattyUI
118
115
  # @param [#to_s] str string to calculate
119
116
  # @return [Integer] the display size
120
117
  def display_width(str)
121
- str = str.to_s
122
- str.empty? ? 0 : Reline::Unicode.calculate_width(str)
118
+ (str = str.to_s).empty? ? 0 : Reline::Unicode.calculate_width(str)
123
119
  end
124
120
 
125
121
  # Convert given arguments into strings and yield each line.
@@ -136,12 +132,11 @@ module NattyUI
136
132
  # @return [Enumerator] line enumerator
137
133
  def each_line(*strs, max_width: nil, &block)
138
134
  return to_enum(__method__, *strs, max_width: max_width) unless block
139
- unless max_width
135
+ if max_width.nil?
140
136
  strs.each { |str| str.to_s.each_line(chomp: true, &block) }
141
137
  return nil
142
138
  end
143
- max_width = max_width.to_i
144
- return if max_width <= 0
139
+ return if (max_width = max_width.to_i) <= 0
145
140
  strs.each do |str|
146
141
  str
147
142
  .to_s
@@ -156,19 +151,28 @@ module NattyUI
156
151
 
157
152
  # Read user input line from {.in_stream}.
158
153
  #
154
+ # This method uses Ruby's Readline implementation (default gem). See there
155
+ # for more information.
156
+ #
159
157
  # @see .valid_out?
160
158
  #
161
159
  # @param [#to_s] prompt input prompt
160
+ # @param [false, nil, #call] completion disable autocompletion, use default
161
+ # autocompletion or use given completion proc
162
162
  # @param [IO] stream writeable IO used to display output
163
163
  # @return [String] user input line
164
- # @return [nil] when user interrputed input with `^C` or `^D`
165
- def readline(prompt = nil, stream: StdOut.stream)
164
+ # @return [nil] when user interrupted input with `^C` or `^D`
165
+ def readline(prompt = nil, completion: false, stream: StdOut.stream)
166
+ cp = Readline.completion_proc
167
+ Readline.completion_proc = completion == false ? ->(*_) {} : completion
166
168
  Readline.output = stream
167
169
  Readline.input = @in_stream
168
170
  Readline.readline(prompt.to_s)
169
171
  rescue Interrupt
170
172
  stream.puts
171
173
  nil
174
+ ensure
175
+ Readline.completion_proc = cp
172
176
  end
173
177
 
174
178
  private
data/lib/natty_ui.rb ADDED
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'natty-ui'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: natty-ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Blumtritt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-11 00:00:00.000000000 Z
11
+ date: 2023-11-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  This is the beautiful, nice, nifty, fancy, neat, pretty, cool, lovely,
@@ -23,29 +23,34 @@ extra_rdoc_files:
23
23
  - README.md
24
24
  - LICENSE
25
25
  files:
26
+ - ".yardopts"
26
27
  - LICENSE
27
28
  - README.md
29
+ - examples/attributes.rb
28
30
  - examples/basic.rb
29
- - examples/colors.rb
30
- - examples/illustration.svg
31
+ - examples/illustration.png
32
+ - examples/list_in_columns.rb
31
33
  - examples/progress.rb
32
34
  - examples/query.rb
33
35
  - lib/natty-ui.rb
34
36
  - lib/natty-ui/ansi.rb
35
37
  - lib/natty-ui/ansi_wrapper.rb
38
+ - lib/natty-ui/features.rb
36
39
  - lib/natty-ui/version.rb
37
40
  - lib/natty-ui/wrapper.rb
38
41
  - lib/natty-ui/wrapper/ask.rb
39
42
  - lib/natty-ui/wrapper/element.rb
40
- - lib/natty-ui/wrapper/features.rb
41
43
  - lib/natty-ui/wrapper/framed.rb
42
44
  - lib/natty-ui/wrapper/heading.rb
45
+ - lib/natty-ui/wrapper/list_in_columns.rb
43
46
  - lib/natty-ui/wrapper/message.rb
44
47
  - lib/natty-ui/wrapper/mixins.rb
45
48
  - lib/natty-ui/wrapper/progress.rb
46
49
  - lib/natty-ui/wrapper/query.rb
50
+ - lib/natty-ui/wrapper/request.rb
47
51
  - lib/natty-ui/wrapper/section.rb
48
52
  - lib/natty-ui/wrapper/task.rb
53
+ - lib/natty_ui.rb
49
54
  homepage: https://github.com/mblumtritt/natty-ui
50
55
  licenses:
51
56
  - BSD-3-Clause
@@ -69,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
74
  - !ruby/object:Gem::Version
70
75
  version: '0'
71
76
  requirements: []
72
- rubygems_version: 3.4.21
77
+ rubygems_version: 3.4.22
73
78
  signing_key:
74
79
  specification_version: 4
75
80
  summary: This is the beautiful, nice, nifty, fancy, neat, pretty, cool, lovely, natty
data/examples/colors.rb DELETED
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # require 'natty-ui'
4
- require_relative '../lib/natty-ui'
5
-
6
- 256.times { |i| print NattyUI::Ansi.embellish("color #{i} ", i) }
7
- puts
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 688"><style>text{dominant-baseline:text-before-edge;white-space:pre;font:13px Courier,monospace;fill:#bbb}.u{text-decoration:underline}.c1{fill:#0080d5}.f{fill:#fff}.c2{fill:#a5faff}.c3{fill:#ff50a5}.c4{fill:#50d0ff}.c5{fill:#2ad5d5}.c6{fill:#fffa50}.c7{fill:#ff5050}.c8{fill:#50ff50}.c9{fill:#ffa5ff}.ca{fill:#ffff50}.cb{fill:#55aad5}.cc{fill:#d5802a}</style><rect width="100%" height="100%" style="fill:#000;shape-rendering:crispEdges"/><text class="c1">═</text><text x="8" class="c1">═</text><text x="16" class="c1">═</text><text x="24" class="c1">═</text><text x="32" class="c1">═</text><text x="40" class="c1">═</text><text x="48" class="c1">═</text><text x="64" class="f">N</text><text x="72" class="f">a</text><text x="80" class="f">t</text><text x="88" class="f">t</text><text x="96" class="f">y</text><text x="104" class="f">U</text><text x="112" class="f">I</text><text x="128" class="f">B</text><text x="136" class="f">a</text><text x="144" class="f">s</text><text x="152" class="f">i</text><text x="160" class="f">c</text><text x="176" class="f">F</text><text x="184" class="f">e</text><text x="192" class="f">a</text><text x="200" class="f">t</text><text x="208" class="f">u</text><text x="216" class="f">r</text><text x="224" class="f">e</text><text x="240" class="f">D</text><text x="248" class="f">e</text><text x="256" class="f">m</text><text x="264" class="f">o</text><text x="280" class="c4">═</text><text x="288" class="c4">═</text><text x="296" class="c4">═</text><text x="304" class="c4">═</text><text x="312" class="c4">═</text><text x="320" class="c4">═</text><text x="328" class="c4">═</text><text y="32">T</text><text x="8" y="32">h</text><text x="16" y="32">i</text><text x="24" y="32">s</text><text x="40" y="32">i</text><text x="48" y="32">s</text><text x="64" y="32">a</text><text x="80" y="32">s</text><text x="88" y="32">h</text><text x="96" y="32">o</text><text x="104" y="32">r</text><text x="112" y="32">t</text><text x="128" y="32">d</text><text x="136" y="32">e</text><text x="144" y="32">m</text><text x="152" y="32">o</text><text x="168" y="32">o</text><text x="176" y="32">f</text><text x="192" y="32">t</text><text x="200" y="32">h</text><text x="208" y="32">e</text><text x="224" y="32">b</text><text x="232" y="32">a</text><text x="240" y="32">s</text><text x="248" y="32">i</text><text x="256" y="32">c</text><text x="272" y="32">f</text><text x="280" y="32">e</text><text x="288" y="32">a</text><text x="296" y="32">t</text><text x="304" y="32">u</text><text x="312" y="32">r</text><text x="320" y="32">e</text><text x="328" y="32">s</text><text x="344" y="32">o</text><text x="352" y="32">f</text><text x="368" y="32" class="c2">N</text><text x="376" y="32" class="c2">a</text><text x="384" y="32" class="c2">t</text><text x="392" y="32" class="c2">t</text><text x="400" y="32" class="c2">y</text><text x="408" y="32" class="c2">U</text><text x="416" y="32" class="c2">I</text><text x="424" y="32">.</text><text y="64" class="c1">━</text><text x="8" y="64" class="c1">━</text><text x="16" y="64" class="c1">━</text><text x="24" y="64" class="c1">━</text><text x="32" y="64" class="c1">━</text><text x="48" y="64" class="f">F</text><text x="56" y="64" class="f">e</text><text x="64" y="64" class="f">a</text><text x="72" y="64" class="f">t</text><text x="80" y="64" class="f">u</text><text x="88" y="64" class="f">r</text><text x="96" y="64" class="f">e</text><text x="104" y="64" class="f">:</text><text x="120" y="64" class="f">A</text><text x="128" y="64" class="f">N</text><text x="136" y="64" class="f">S</text><text x="144" y="64" class="f">I</text><text x="160" y="64" class="f">C</text><text x="168" y="64" class="f">o</text><text x="176" y="64" class="f">l</text><text x="184" y="64" class="f">o</text><text x="192" y="64" class="f">r</text><text x="200" y="64" class="f">s</text><text x="216" y="64" class="f">a</text><text x="224" y="64" class="f">n</text><text x="232" y="64" class="f">d</text><text x="248" y="64" class="f">A</text><text x="256" y="64" class="f">t</text><text x="264" y="64" class="f">t</text><text x="272" y="64" class="f">r</text><text x="280" y="64" class="f">i</text><text x="288" y="64" class="f">b</text><text x="296" y="64" class="f">u</text><text x="304" y="64" class="f">t</text><text x="312" y="64" class="f">e</text><text x="320" y="64" class="f">s</text><text x="336" y="64" class="c4">━</text><text x="344" y="64" class="c4">━</text><text x="352" y="64" class="c4">━</text><text x="360" y="64" class="c4">━</text><text x="368" y="64" class="c4">━</text><text y="96">L</text><text x="8" y="96">i</text><text x="16" y="96">k</text><text x="24" y="96">e</text><text x="40" y="96">y</text><text x="48" y="96">o</text><text x="56" y="96">u</text><text x="72" y="96">m</text><text x="80" y="96">i</text><text x="88" y="96">g</text><text x="96" y="96">h</text><text x="104" y="96">t</text><text x="120" y="96">n</text><text x="128" y="96">o</text><text x="136" y="96">t</text><text x="144" y="96">i</text><text x="152" y="96">c</text><text x="160" y="96">e</text><text x="168" y="96">d</text><text x="184" y="96">y</text><text x="192" y="96">o</text><text x="200" y="96">u</text><text x="216" y="96">c</text><text x="224" y="96">a</text><text x="232" y="96">n</text><text x="248" y="96" class="c5">c</text><text x="256" y="96" class="c5">o</text><text x="264" y="96" class="c5">l</text><text x="272" y="96" class="c5">o</text><text x="280" y="96" class="c5">r</text><text x="296" y="96" class="cc">t</text><text x="304" y="96" class="cc">e</text><text x="312" y="96" class="cc">x</text><text x="320" y="96" class="cc">t</text><text x="336" y="96">f</text><text x="344" y="96">o</text><text x="352" y="96">r</text><text x="368" y="96">t</text><text x="376" y="96">e</text><text x="384" y="96">r</text><text x="392" y="96">m</text><text x="400" y="96">i</text><text x="408" y="96">n</text><text x="416" y="96">a</text><text x="424" y="96">l</text><text x="432" y="96">s</text><text x="448" y="96">s</text><text x="456" y="96">u</text><text x="464" y="96">p</text><text x="472" y="96">p</text><text x="480" y="96">o</text><text x="488" y="96">r</text><text x="496" y="96">t</text><text x="504" y="96">i</text><text x="512" y="96">n</text><text x="520" y="96">g</text><text x="536" y="96">t</text><text x="544" y="96">h</text><text x="552" y="96">i</text><text x="560" y="96">s</text><text y="112">f</text><text x="8" y="112">e</text><text x="16" y="112">a</text><text x="24" y="112">t</text><text x="32" y="112">u</text><text x="40" y="112">r</text><text x="48" y="112">e</text><text x="56" y="112">.</text><text x="72" y="112">Y</text><text x="80" y="112">o</text><text x="88" y="112">u</text><text x="104" y="112">c</text><text x="112" y="112">a</text><text x="120" y="112">n</text><text x="136" y="112">e</text><text x="144" y="112">n</text><text x="152" y="112">f</text><text x="160" y="112">o</text><text x="168" y="112">r</text><text x="176" y="112">e</text><text x="184" y="112">c</text><text x="192" y="112">e</text><text x="208" y="112">t</text><text x="216" y="112">h</text><text x="224" y="112">e</text><text x="240" y="112">n</text><text x="248" y="112">o</text><text x="256" y="112">n</text><text x="264" y="112">-</text><text x="272" y="112">A</text><text x="280" y="112">N</text><text x="288" y="112">S</text><text x="296" y="112">I</text><text x="312" y="112">v</text><text x="320" y="112">e</text><text x="328" y="112">r</text><text x="336" y="112">s</text><text x="344" y="112">i</text><text x="352" y="112">o</text><text x="360" y="112">n</text><text x="376" y="112">b</text><text x="384" y="112">y</text><text x="400" y="112">s</text><text x="408" y="112">e</text><text x="416" y="112">t</text><text x="424" y="112">t</text><text x="432" y="112">i</text><text x="440" y="112">n</text><text x="448" y="112">g</text><text x="464" y="112">t</text><text x="472" y="112">h</text><text x="480" y="112">e</text><text x="496" y="112">e</text><text x="504" y="112">n</text><text x="512" y="112">v</text><text x="520" y="112">i</text><text x="528" y="112">r</text><text x="536" y="112">o</text><text x="544" y="112">n</text><text x="552" y="112">m</text><text x="560" y="112">e</text><text x="568" y="112">n</text><text x="576" y="112">t</text><text y="128">v</text><text x="8" y="128">a</text><text x="16" y="128">r</text><text x="24" y="128">i</text><text x="32" y="128">a</text><text x="40" y="128">b</text><text x="48" y="128">l</text><text x="56" y="128">e</text><text x="72" y="128" class="cb">N</text><text x="80" y="128" class="cb">O</text><text x="88" y="128" class="cb">_</text><text x="96" y="128" class="cb">C</text><text x="104" y="128" class="cb">O</text><text x="112" y="128" class="cb">L</text><text x="120" y="128" class="cb">O</text><text x="128" y="128" class="cb">R</text><text x="144" y="128">t</text><text x="152" y="128">o</text><text x="168" y="128">&apos;</text><text x="176" y="128" class="cb">1</text><text x="184" y="128">&apos;</text><text x="192" y="128">.</text><text x="208" y="128">(</text><text x="216" y="128">s</text><text x="224" y="128">e</text><text x="232" y="128">e</text><text x="248" y="128">a</text><text x="256" y="128">l</text><text x="264" y="128">s</text><text x="272" y="128">o</text><text x="288" y="128" class="u">h</text><text x="296" y="128" class="u">t</text><text x="304" y="128" class="u">t</text><text x="312" y="128" class="u">p</text><text x="320" y="128" class="u">s</text><text x="328" y="128" class="u">:</text><text x="336" y="128" class="u">/</text><text x="344" y="128" class="u">/</text><text x="352" y="128" class="u">n</text><text x="360" y="128" class="u">o</text><text x="368" y="128" class="u">-</text><text x="376" y="128" class="u">c</text><text x="384" y="128" class="u">o</text><text x="392" y="128" class="u">l</text><text x="400" y="128" class="u">o</text><text x="408" y="128" class="u">r</text><text x="416" y="128" class="u">.</text><text x="424" y="128" class="u">o</text><text x="432" y="128" class="u">r</text><text x="440" y="128" class="u">g</text><text x="448" y="128">)</text><text y="160">Y</text><text x="8" y="160">o</text><text x="16" y="160">u</text><text x="32" y="160">c</text><text x="40" y="160">a</text><text x="48" y="160">n</text><text x="64" y="160">n</text><text x="72" y="160">o</text><text x="80" y="160">t</text><text x="96" y="160">o</text><text x="104" y="160">n</text><text x="112" y="160">l</text><text x="120" y="160">y</text><text x="136" y="160">c</text><text x="144" y="160">o</text><text x="152" y="160">l</text><text x="160" y="160">o</text><text x="168" y="160">r</text><text x="184" y="160">y</text><text x="192" y="160">o</text><text x="200" y="160">u</text><text x="208" y="160">r</text><text x="224" y="160">t</text><text x="232" y="160">e</text><text x="240" y="160">x</text><text x="248" y="160">t</text><text x="264" y="160">b</text><text x="272" y="160">u</text><text x="280" y="160">t</text><text x="296" y="160">a</text><text x="304" y="160">l</text><text x="312" y="160">s</text><text x="320" y="160">o</text><text x="336" y="160">m</text><text x="344" y="160">o</text><text x="352" y="160">d</text><text x="360" y="160">i</text><text x="368" y="160">f</text><text x="376" y="160">y</text><text x="384" y="160">,</text><text x="400" y="160" class="u">d</text><text x="408" y="160" class="u">e</text><text x="416" y="160" class="u">c</text><text x="424" y="160" class="u">o</text><text x="432" y="160" class="u">r</text><text x="440" y="160" class="u">a</text><text x="448" y="160" class="u">t</text><text x="456" y="160" class="u">e</text><text x="472" y="160">a</text><text x="480" y="160">n</text><text x="488" y="160">d</text><text x="504" y="160">m</text><text x="512" y="160">a</text><text x="520" y="160">n</text><text x="528" y="160">i</text><text x="536" y="160">p</text><text x="544" y="160">u</text><text x="552" y="160">l</text><text x="560" y="160">a</text><text x="568" y="160">t</text><text x="576" y="160">e</text><text y="176">i</text><text x="8" y="176">t</text><text x="16" y="176">.</text><text x="32" y="176">T</text><text x="40" y="176">h</text><text x="48" y="176">e</text><text x="64" y="176">a</text><text x="72" y="176">t</text><text x="80" y="176">t</text><text x="88" y="176">r</text><text x="96" y="176">i</text><text x="104" y="176">b</text><text x="112" y="176">u</text><text x="120" y="176">t</text><text x="128" y="176">e</text><text x="136" y="176">s</text><text x="152" y="176">a</text><text x="160" y="176">r</text><text x="168" y="176">e</text><text x="184" y="176">d</text><text x="192" y="176">i</text><text x="200" y="176">r</text><text x="208" y="176">e</text><text x="216" y="176">c</text><text x="224" y="176">t</text><text x="240" y="176">e</text><text x="248" y="176">m</text><text x="256" y="176">b</text><text x="264" y="176">e</text><text x="272" y="176">d</text><text x="280" y="176">d</text><text x="288" y="176">e</text><text x="296" y="176">d</text><text x="312" y="176">i</text><text x="320" y="176">n</text><text x="328" y="176">t</text><text x="336" y="176">o</text><text x="352" y="176">t</text><text x="360" y="176">h</text><text x="368" y="176">e</text><text x="384" y="176">t</text><text x="392" y="176">e</text><text x="400" y="176">x</text><text x="408" y="176">t</text><text x="424" y="176">l</text><text x="432" y="176">i</text><text x="440" y="176">k</text><text x="448" y="176">e</text><text x="464" y="176">&apos;</text><text x="472" y="176">[</text><text x="480" y="176">[</text><text x="488" y="176">b</text><text x="496" y="176">o</text><text x="504" y="176">l</text><text x="512" y="176">d</text><text x="528" y="176">r</text><text x="536" y="176">e</text><text x="544" y="176">d</text><text x="552" y="176">]</text><text x="560" y="176">]</text><text x="568" y="176">&apos;</text><text y="192">a</text><text x="8" y="192">n</text><text x="16" y="192">d</text><text x="32" y="192">c</text><text x="40" y="192">a</text><text x="48" y="192">n</text><text x="64" y="192">b</text><text x="72" y="192">e</text><text x="88" y="192">r</text><text x="96" y="192">e</text><text x="104" y="192">s</text><text x="112" y="192">e</text><text x="120" y="192">t</text><text x="128" y="192">t</text><text x="136" y="192">e</text><text x="144" y="192">d</text><text x="160" y="192">w</text><text x="168" y="192">i</text><text x="176" y="192">t</text><text x="184" y="192">h</text><text x="200" y="192">&apos;</text><text x="208" y="192">[</text><text x="216" y="192">[</text><text x="224" y="192">/</text><text x="232" y="192">]</text><text x="240" y="192">]</text><text x="248" y="192">&apos;</text><text x="264" y="192">o</text><text x="272" y="192">r</text><text x="288" y="192">a</text><text x="296" y="192">t</text><text x="312" y="192">t</text><text x="320" y="192">h</text><text x="328" y="192">e</text><text x="344" y="192">l</text><text x="352" y="192">i</text><text x="360" y="192">n</text><text x="368" y="192">e</text><text x="384" y="192">e</text><text x="392" y="192">n</text><text x="400" y="192">d</text><text x="408" y="192">.</text><text y="224" class="c1">━</text><text x="8" y="224" class="c1">━</text><text x="16" y="224" class="c1">━</text><text x="24" y="224" class="c1">━</text><text x="32" y="224" class="c1">━</text><text x="48" y="224" class="f">F</text><text x="56" y="224" class="f">e</text><text x="64" y="224" class="f">a</text><text x="72" y="224" class="f">t</text><text x="80" y="224" class="f">u</text><text x="88" y="224" class="f">r</text><text x="96" y="224" class="f">e</text><text x="104" y="224" class="f">:</text><text x="120" y="224" class="f">S</text><text x="128" y="224" class="f">e</text><text x="136" y="224" class="f">c</text><text x="144" y="224" class="f">t</text><text x="152" y="224" class="f">i</text><text x="160" y="224" class="f">o</text><text x="168" y="224" class="f">n</text><text x="176" y="224" class="f">s</text><text x="192" y="224" class="c4">━</text><text x="200" y="224" class="c4">━</text><text x="208" y="224" class="c4">━</text><text x="216" y="224" class="c4">━</text><text x="224" y="224" class="c4">━</text><text y="256">S</text><text x="8" y="256">e</text><text x="16" y="256">c</text><text x="24" y="256">t</text><text x="32" y="256">i</text><text x="40" y="256">o</text><text x="48" y="256">n</text><text x="56" y="256">s</text><text x="72" y="256">g</text><text x="80" y="256">r</text><text x="88" y="256">o</text><text x="96" y="256">u</text><text x="104" y="256">p</text><text x="120" y="256">t</text><text x="128" y="256">e</text><text x="136" y="256">x</text><text x="144" y="256">t</text><text x="160" y="256">l</text><text x="168" y="256">i</text><text x="176" y="256">n</text><text x="184" y="256">e</text><text x="192" y="256">s</text><text x="208" y="256">t</text><text x="216" y="256">o</text><text x="224" y="256">g</text><text x="232" y="256">e</text><text x="240" y="256">t</text><text x="248" y="256">h</text><text x="256" y="256">e</text><text x="264" y="256">r</text><text x="280" y="256">a</text><text x="288" y="256">n</text><text x="296" y="256">d</text><text x="304" y="256">/</text><text x="312" y="256">o</text><text x="320" y="256">r</text><text x="336" y="256">d</text><text x="344" y="256">e</text><text x="352" y="256">f</text><text x="360" y="256">i</text><text x="368" y="256">n</text><text x="376" y="256">e</text><text x="392" y="256">t</text><text x="400" y="256">h</text><text x="408" y="256">e</text><text x="416" y="256">i</text><text x="424" y="256">r</text><text x="440" y="256">s</text><text x="448" y="256">t</text><text x="456" y="256">y</text><text x="464" y="256">l</text><text x="472" y="256">e</text><text x="480" y="256">.</text><text x="496" y="256">T</text><text x="504" y="256">h</text><text x="512" y="256">e</text><text x="520" y="256">r</text><text x="528" y="256">e</text><text x="544" y="256">a</text><text x="552" y="256">r</text><text x="560" y="256">e</text><text y="272">s</text><text x="8" y="272">e</text><text x="16" y="272">v</text><text x="24" y="272">e</text><text x="32" y="272">r</text><text x="40" y="272">a</text><text x="48" y="272">l</text><text x="64" y="272">s</text><text x="72" y="272">e</text><text x="80" y="272">c</text><text x="88" y="272">t</text><text x="96" y="272">i</text><text x="104" y="272">o</text><text x="112" y="272">n</text><text x="128" y="272">t</text><text x="136" y="272">y</text><text x="144" y="272">p</text><text x="152" y="272">e</text><text x="160" y="272">s</text><text x="176" y="272">w</text><text x="184" y="272">h</text><text x="192" y="272">i</text><text x="200" y="272">c</text><text x="208" y="272">h</text><text x="224" y="272">a</text><text x="232" y="272">l</text><text x="240" y="272">l</text><text x="256" y="272">c</text><text x="264" y="272">a</text><text x="272" y="272">n</text><text x="288" y="272">b</text><text x="296" y="272">e</text><text x="312" y="272">s</text><text x="320" y="272">t</text><text x="328" y="272">a</text><text x="336" y="272">c</text><text x="344" y="272">k</text><text x="352" y="272">e</text><text x="360" y="272">d</text><text x="368" y="272">.</text><text y="304">H</text><text x="8" y="304">a</text><text x="16" y="304">v</text><text x="24" y="304">e</text><text x="40" y="304">a</text><text x="56" y="304">l</text><text x="64" y="304">o</text><text x="72" y="304">o</text><text x="80" y="304">k</text><text x="96" y="304">a</text><text x="104" y="304">t</text><text x="120" y="304">t</text><text x="128" y="304">h</text><text x="136" y="304">e</text><text x="152" y="304">d</text><text x="160" y="304">i</text><text x="168" y="304">f</text><text x="176" y="304">f</text><text x="184" y="304">e</text><text x="192" y="304">r</text><text x="200" y="304">e</text><text x="208" y="304">n</text><text x="216" y="304">t</text><text x="232" y="304">t</text><text x="240" y="304">y</text><text x="248" y="304">p</text><text x="256" y="304">e</text><text x="264" y="304">s</text><text x="280" y="304">o</text><text x="288" y="304">f</text><text x="304" y="304">s</text><text x="312" y="304">e</text><text x="320" y="304">c</text><text x="328" y="304">t</text><text x="336" y="304">i</text><text x="344" y="304">o</text><text x="352" y="304">n</text><text x="360" y="304">s</text><text x="368" y="304">:</text><text y="336" class="f">•</text><text x="16" y="336" class="f">G</text><text x="24" y="336" class="f">e</text><text x="32" y="336" class="f">n</text><text x="40" y="336" class="f">e</text><text x="48" y="336" class="f">r</text><text x="56" y="336" class="f">i</text><text x="64" y="336" class="f">c</text><text x="80" y="336" class="f">M</text><text x="88" y="336" class="f">e</text><text x="96" y="336" class="f">s</text><text x="104" y="336" class="f">s</text><text x="112" y="336" class="f">a</text><text x="120" y="336" class="f">g</text><text x="128" y="336" class="f">e</text><text y="352" class="c2">i</text><text x="16" y="352" class="c2">I</text><text x="24" y="352" class="c2">n</text><text x="32" y="352" class="c2">f</text><text x="40" y="352" class="c2">o</text><text x="48" y="352" class="c2">r</text><text x="56" y="352" class="c2">m</text><text x="64" y="352" class="c2">a</text><text x="72" y="352" class="c2">t</text><text x="80" y="352" class="c2">i</text><text x="88" y="352" class="c2">o</text><text x="96" y="352" class="c2">n</text><text x="104" y="352" class="c2">a</text><text x="112" y="352" class="c2">l</text><text x="128" y="352" class="c2">M</text><text x="136" y="352" class="c2">e</text><text x="144" y="352" class="c2">s</text><text x="152" y="352" class="c2">s</text><text x="160" y="352" class="c2">a</text><text x="168" y="352" class="c2">g</text><text x="176" y="352" class="c2">e</text><text y="368" class="c6">!</text><text x="16" y="368" class="c6">W</text><text x="24" y="368" class="c6">a</text><text x="32" y="368" class="c6">r</text><text x="40" y="368" class="c6">n</text><text x="48" y="368" class="c6">i</text><text x="56" y="368" class="c6">n</text><text x="64" y="368" class="c6">g</text><text x="80" y="368" class="c6">M</text><text x="88" y="368" class="c6">e</text><text x="96" y="368" class="c6">s</text><text x="104" y="368" class="c6">s</text><text x="112" y="368" class="c6">a</text><text x="120" y="368" class="c6">g</text><text x="128" y="368" class="c6">e</text><text y="384" class="c7">X</text><text x="16" y="384" class="c7">E</text><text x="24" y="384" class="c7">r</text><text x="32" y="384" class="c7">r</text><text x="40" y="384" class="c7">o</text><text x="48" y="384" class="c7">r</text><text x="64" y="384" class="c7">M</text><text x="72" y="384" class="c7">e</text><text x="80" y="384" class="c7">s</text><text x="88" y="384" class="c7">s</text><text x="96" y="384" class="c7">a</text><text x="104" y="384" class="c7">g</text><text x="112" y="384" class="c7">e</text><text y="400" class="c8">✓</text><text x="16" y="400" class="c8">C</text><text x="24" y="400" class="c8">o</text><text x="32" y="400" class="c8">m</text><text x="40" y="400" class="c8">p</text><text x="48" y="400" class="c8">l</text><text x="56" y="400" class="c8">e</text><text x="64" y="400" class="c8">t</text><text x="72" y="400" class="c8">i</text><text x="80" y="400" class="c8">o</text><text x="88" y="400" class="c8">n</text><text x="104" y="400" class="c8">M</text><text x="112" y="400" class="c8">e</text><text x="120" y="400" class="c8">s</text><text x="128" y="400" class="c8">s</text><text x="136" y="400" class="c8">a</text><text x="144" y="400" class="c8">g</text><text x="152" y="400" class="c8">e</text><text y="416" class="c3">F</text><text x="16" y="416" class="c3">F</text><text x="24" y="416" class="c3">a</text><text x="32" y="416" class="c3">i</text><text x="40" y="416" class="c3">l</text><text x="48" y="416" class="c3">u</text><text x="56" y="416" class="c3">r</text><text x="64" y="416" class="c3">e</text><text x="80" y="416" class="c3">M</text><text x="88" y="416" class="c3">e</text><text x="96" y="416" class="c3">s</text><text x="104" y="416" class="c3">s</text><text x="112" y="416" class="c3">a</text><text x="120" y="416" class="c3">g</text><text x="128" y="416" class="c3">e</text><text y="432" class="f">◉</text><text x="16" y="432" class="c9">C</text><text x="24" y="432" class="c9">u</text><text x="32" y="432" class="c9">s</text><text x="40" y="432" class="c9">t</text><text x="48" y="432" class="c9">o</text><text x="56" y="432" class="c9">m</text><text x="64" y="432" class="c9">i</text><text x="72" y="432" class="c9">z</text><text x="80" y="432" class="c9">e</text><text x="88" y="432" class="c9">d</text><text x="104" y="432" class="c9">M</text><text x="112" y="432" class="c9">e</text><text x="120" y="432" class="c9">s</text><text x="128" y="432" class="c9">s</text><text x="136" y="432" class="c9">a</text><text x="144" y="432" class="c9">g</text><text x="152" y="432" class="c9">e</text><text y="464">Y</text><text x="8" y="464">o</text><text x="16" y="464">u</text><text x="32" y="464">c</text><text x="40" y="464">a</text><text x="48" y="464">n</text><text x="64" y="464">s</text><text x="72" y="464">t</text><text x="80" y="464">a</text><text x="88" y="464">c</text><text x="96" y="464">k</text><text x="112" y="464">a</text><text x="120" y="464">l</text><text x="128" y="464">l</text><text x="144" y="464">k</text><text x="152" y="464">i</text><text x="160" y="464">n</text><text x="168" y="464">d</text><text x="176" y="464">s</text><text x="192" y="464">o</text><text x="200" y="464">f</text><text x="216" y="464">s</text><text x="224" y="464">e</text><text x="232" y="464">c</text><text x="240" y="464">t</text><text x="248" y="464">i</text><text x="256" y="464">o</text><text x="264" y="464">n</text><text x="272" y="464">s</text><text x="288" y="464">t</text><text x="296" y="464">o</text><text x="304" y="464">g</text><text x="312" y="464">e</text><text x="320" y="464">t</text><text x="328" y="464">h</text><text x="336" y="464">e</text><text x="344" y="464">r</text><text x="352" y="464">:</text><text y="496" class="c1">┌</text><text x="8" y="496" class="c1">─</text><text x="16" y="496" class="c1">─</text><text x="32" y="496" class="f">S</text><text x="40" y="496" class="f">i</text><text x="48" y="496" class="f">m</text><text x="56" y="496" class="f">p</text><text x="64" y="496" class="f">l</text><text x="72" y="496" class="f">e</text><text x="88" y="496" class="f">F</text><text x="96" y="496" class="f">r</text><text x="104" y="496" class="f">a</text><text x="112" y="496" class="f">m</text><text x="120" y="496" class="f">e</text><text x="128" y="496" class="f">d</text><text x="144" y="496" class="f">S</text><text x="152" y="496" class="f">e</text><text x="160" y="496" class="f">c</text><text x="168" y="496" class="f">t</text><text x="176" y="496" class="f">i</text><text x="184" y="496" class="f">o</text><text x="192" y="496" class="f">n</text><text x="208" y="496" class="c1">─</text><text x="216" y="496" class="c1">─</text><text x="224" y="496" class="c1">─</text><text x="232" y="496" class="c1">─</text><text x="240" y="496" class="c1">─</text><text y="512" class="c1">│</text><text x="16" y="512" class="c1">┏</text><text x="24" y="512" class="c1">━</text><text x="32" y="512" class="c1">━</text><text x="48" y="512" class="f">H</text><text x="56" y="512" class="f">e</text><text x="64" y="512" class="f">a</text><text x="72" y="512" class="f">v</text><text x="80" y="512" class="f">y</text><text x="96" y="512" class="f">F</text><text x="104" y="512" class="f">r</text><text x="112" y="512" class="f">a</text><text x="120" y="512" class="f">m</text><text x="128" y="512" class="f">e</text><text x="136" y="512" class="f">d</text><text x="152" y="512" class="f">S</text><text x="160" y="512" class="f">e</text><text x="168" y="512" class="f">c</text><text x="176" y="512" class="f">t</text><text x="184" y="512" class="f">i</text><text x="192" y="512" class="f">o</text><text x="200" y="512" class="f">n</text><text x="216" y="512" class="c1">━</text><text x="224" y="512" class="c1">━</text><text x="232" y="512" class="c1">━</text><text x="240" y="512" class="c1">━</text><text x="248" y="512" class="c1">━</text><text y="528" class="c1">│</text><text x="16" y="528" class="c1">┃</text><text x="32" y="528" class="c1">┍</text><text x="40" y="528" class="c1">━</text><text x="48" y="528" class="c1">━</text><text x="64" y="528" class="f">S</text><text x="72" y="528" class="f">e</text><text x="80" y="528" class="f">m</text><text x="88" y="528" class="f">i</text><text x="104" y="528" class="f">F</text><text x="112" y="528" class="f">r</text><text x="120" y="528" class="f">a</text><text x="128" y="528" class="f">m</text><text x="136" y="528" class="f">e</text><text x="144" y="528" class="f">d</text><text x="160" y="528" class="f">S</text><text x="168" y="528" class="f">e</text><text x="176" y="528" class="f">c</text><text x="184" y="528" class="f">t</text><text x="192" y="528" class="f">i</text><text x="200" y="528" class="f">o</text><text x="208" y="528" class="f">n</text><text x="224" y="528" class="c1">━</text><text x="232" y="528" class="c1">━</text><text x="240" y="528" class="c1">━</text><text x="248" y="528" class="c1">━</text><text x="256" y="528" class="c1">━</text><text y="544" class="c1">│</text><text x="16" y="544" class="c1">┃</text><text x="32" y="544" class="c1">│</text><text x="48" y="544" class="c1">╔</text><text x="56" y="544" class="c1">═</text><text x="64" y="544" class="c1">═</text><text x="80" y="544" class="f">D</text><text x="88" y="544" class="f">o</text><text x="96" y="544" class="f">u</text><text x="104" y="544" class="f">b</text><text x="112" y="544" class="f">l</text><text x="120" y="544" class="f">e</text><text x="136" y="544" class="f">F</text><text x="144" y="544" class="f">r</text><text x="152" y="544" class="f">a</text><text x="160" y="544" class="f">m</text><text x="168" y="544" class="f">e</text><text x="176" y="544" class="f">d</text><text x="192" y="544" class="f">S</text><text x="200" y="544" class="f">e</text><text x="208" y="544" class="f">c</text><text x="216" y="544" class="f">t</text><text x="224" y="544" class="f">i</text><text x="232" y="544" class="f">o</text><text x="240" y="544" class="f">n</text><text x="256" y="544" class="c1">═</text><text x="264" y="544" class="c1">═</text><text x="272" y="544" class="c1">═</text><text x="280" y="544" class="c1">═</text><text x="288" y="544" class="c1">═</text><text y="560" class="c1">│</text><text x="16" y="560" class="c1">┃</text><text x="32" y="560" class="c1">│</text><text x="48" y="560" class="c1">║</text><text x="64" y="560" class="f">💛</text><text x="80" y="560" class="ca">F</text><text x="88" y="560" class="ca">r</text><text x="96" y="560" class="ca">a</text><text x="104" y="560" class="ca">m</text><text x="112" y="560" class="ca">e</text><text x="120" y="560" class="ca">s</text><text x="136" y="560" class="ca">a</text><text x="144" y="560" class="ca">r</text><text x="152" y="560" class="ca">e</text><text x="168" y="560" class="ca">n</text><text x="176" y="560" class="ca">i</text><text x="184" y="560" class="ca">c</text><text x="192" y="560" class="ca">e</text><text y="576" class="c1">│</text><text x="16" y="576" class="c1">┃</text><text x="32" y="576" class="c1">│</text><text x="48" y="576" class="c1">║</text><text x="88" y="576">J</text><text x="96" y="576">u</text><text x="104" y="576">s</text><text x="112" y="576">t</text><text x="128" y="576">t</text><text x="136" y="576">o</text><text x="152" y="576">s</text><text x="160" y="576">h</text><text x="168" y="576">o</text><text x="176" y="576">w</text><text x="192" y="576">y</text><text x="200" y="576">o</text><text x="208" y="576">u</text><text x="224" y="576">t</text><text x="232" y="576">h</text><text x="240" y="576">a</text><text x="248" y="576">t</text><text x="264" y="576">a</text><text x="272" y="576">l</text><text x="280" y="576">l</text><text x="296" y="576">s</text><text x="304" y="576">e</text><text x="312" y="576">c</text><text x="320" y="576">t</text><text x="328" y="576">i</text><text x="336" y="576">o</text><text x="344" y="576">n</text><text x="352" y="576">s</text><text y="592" class="c1">│</text><text x="16" y="592" class="c1">┃</text><text x="32" y="592" class="c1">│</text><text x="48" y="592" class="c1">║</text><text x="88" y="592">c</text><text x="96" y="592">a</text><text x="104" y="592">n</text><text x="120" y="592">b</text><text x="128" y="592">e</text><text x="144" y="592">s</text><text x="152" y="592">t</text><text x="160" y="592">a</text><text x="168" y="592">c</text><text x="176" y="592">k</text><text x="184" y="592">e</text><text x="192" y="592">d</text><text x="200" y="592">.</text><text x="208" y="592">.</text><text x="216" y="592">.</text><text y="608" class="c1">│</text><text x="16" y="608" class="c1">┃</text><text x="32" y="608" class="c1">│</text><text x="48" y="608" class="c1">╚</text><text x="56" y="608" class="c1">═</text><text x="64" y="608" class="c1">═</text><text x="72" y="608" class="c1">═</text><text x="80" y="608" class="c1">═</text><text x="88" y="608" class="c1">═</text><text x="96" y="608" class="c1">═</text><text x="104" y="608" class="c1">═</text><text x="112" y="608" class="c1">═</text><text x="120" y="608" class="c1">═</text><text x="128" y="608" class="c1">═</text><text y="624" class="c1">│</text><text x="16" y="624" class="c1">┃</text><text x="32" y="624" class="c1">┕</text><text x="40" y="624" class="c1">━</text><text x="48" y="624" class="c1">━</text><text x="56" y="624" class="c1">━</text><text x="64" y="624" class="c1">━</text><text x="72" y="624" class="c1">━</text><text x="80" y="624" class="c1">━</text><text x="88" y="624" class="c1">━</text><text x="96" y="624" class="c1">━</text><text x="104" y="624" class="c1">━</text><text x="112" y="624" class="c1">━</text><text y="640" class="c1">│</text><text x="16" y="640" class="c1">┗</text><text x="24" y="640" class="c1">━</text><text x="32" y="640" class="c1">━</text><text x="40" y="640" class="c1">━</text><text x="48" y="640" class="c1">━</text><text x="56" y="640" class="c1">━</text><text x="64" y="640" class="c1">━</text><text x="72" y="640" class="c1">━</text><text x="80" y="640" class="c1">━</text><text x="88" y="640" class="c1">━</text><text x="96" y="640" class="c1">━</text><text y="656" class="c1">└</text><text x="8" y="656" class="c1">─</text><text x="16" y="656" class="c1">─</text><text x="24" y="656" class="c1">─</text><text x="32" y="656" class="c1">─</text><text x="40" y="656" class="c1">─</text><text x="48" y="656" class="c1">─</text><text x="56" y="656" class="c1">─</text><text x="64" y="656" class="c1">─</text><text x="72" y="656" class="c1">─</text><text x="80" y="656" class="c1">─</text></svg>
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module NattyUI
4
- #
5
- # Mix-in for output functionality.
6
- #
7
- module Features
8
- protected
9
-
10
- def _element(type, *args)
11
- wrapper.class.const_get(type).__send__(:new, self).__send__(:_call, *args)
12
- end
13
-
14
- def _section(owner, type, args, **opts, &block)
15
- sec = wrapper.class.const_get(type).__send__(:new, owner, **opts)
16
- sec.puts(*args) if args && !args.empty?
17
- block ? sec.__send__(:_call, &block) : sec
18
- end
19
- end
20
- end