Class: PhlexKit::Spinner

Inherits:
BaseComponent show all
Defined in:
app/components/phlex_kit/spinner/spinner.rb

Overview

Loading spinner, ported from shadcn/ui's Spinner (a spinning loader icon; not in ruby_ui). Sizes via SIZES.fetch. .pk-spinner (spinner.css).

Constant Summary collapse

SIZES =
{ sm: "sm", md: nil, lg: "lg" }.freeze

Instance Method Summary collapse

Methods inherited from BaseComponent

#on

Constructor Details

#initialize(size: :md, **attrs) ⇒ Spinner

Returns a new instance of Spinner.



7
8
9
10
# File 'app/components/phlex_kit/spinner/spinner.rb', line 7

def initialize(size: :md, **attrs)
  @size = size.to_sym
  @attrs = attrs
end

Instance Method Details

#view_templateObject



12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/components/phlex_kit/spinner/spinner.rb', line 12

def view_template
  # A visible loader, not decoration: role=status + label, aria-hidden off.
  base = {
    class: [ "pk-spinner", fetch_option(SIZES, @size, :size) ].compact.join(" "),
    role: "status",
    "aria-hidden": false
  }
  # Default label only when the caller didn't supply their own — `mix`
  # would fuse aria-label="Loading Saving" instead of overriding.
  base[:aria] = { label: "Loading" } unless aria_labelled?
  render Icon.new(:loader, size: nil, **mix(base, @attrs))
end