Class: PhlexKit::Toggle

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

Overview

Two-state pressable button. Ported from ruby_ui's RubyUI::Toggle. Renders a wrapper (display:contents) holding the

Direct Known Subclasses

ToggleGroupItem

Constant Summary collapse

VARIANTS =
{ default: nil, outline: "outline" }.freeze
SIZES =
{ sm: "sm", default: nil, lg: "lg" }.freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseComponent

#on

Constructor Details

#initialize(pressed: false, name: nil, value: "1", unpressed_value: nil, variant: :default, size: :default, disabled: false, wrapper: {}, **attrs) ⇒ Toggle

Returns a new instance of Toggle.



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

def initialize(pressed: false, name: nil, value: "1", unpressed_value: nil,
               variant: :default, size: :default, disabled: false, wrapper: {}, **attrs)
  @pressed = pressed
  @name = name
  @value = value
  @unpressed_value = unpressed_value
  @variant = variant.to_sym
  @size = size.to_sym
  @disabled = disabled
  @wrapper = wrapper
  @attrs = attrs
end

Class Method Details

.modifier_classes(variant:, size:) ⇒ Object



9
10
11
# File 'app/components/phlex_kit/toggle/toggle.rb', line 9

def self.modifier_classes(variant:, size:)
  [ VARIANTS.fetch(variant, nil), SIZES.fetch(size, nil) ].compact
end

Instance Method Details

#view_template(&block) ⇒ Object



26
27
28
29
30
31
# File 'app/components/phlex_kit/toggle/toggle.rb', line 26

def view_template(&block)
  span(**mix(wrapper_default_attrs, @wrapper)) do
    button(**mix(button_default_attrs, @attrs), &block)
    render_hidden_input if @name
  end
end