require "ratatui_ruby"
class Spinner
def main
RatatuiRuby.run(viewport: :inline, height: 1) do |tui|
until connected?
status = tui.paragraph(text: "#{spin} Connecting...")
tui.draw { |frame| frame.render_widget(status, frame.area) }
return ending(tui, "Canceled!", :red) if tui.poll_event.ctrl_c?
end
ending(tui, "Connected!", :green)
end
end
def ending(tui, text, fg) = tui.draw do |frame|
frame.render_widget(tui.paragraph(text:, fg:), frame.area)
puts
end
def initialize = (@frame, @finish = 0, Time.now + 2)
def connected? = Time.now >= @finish
def spin = SPINNER[(@frame += 1) % SPINNER.length]
SPINNER = %w[⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏]
end
Spinner.new.main