Class: Panda::Core::Base

Inherits:
ViewComponent::Base
  • Object
show all
Defined in:
app/components/panda/core/base.rb

Overview

Base class for all ViewComponent components in the Panda ecosystem.

This base component provides:

  • Tailwind CSS class merging via TailwindMerge
  • Attribute merging with sensible defaults
  • Rails helper integration (inherited from ViewComponent::Base)
  • Development-mode debugging comments

Examples:

Basic usage

class MyComponent < Panda::Core::Base
  def initialize(title:, variant: :primary, **attrs)
    @title = title
    @variant = variant
    super(**attrs)
  end

  attr_reader :title, :variant

  private

  def default_attrs
    { class: "my-component my-component--#{variant}" }
  end
end

With attribute merging

# Component definition
class ButtonComponent < Panda::Core::Base
  def initialize(text:, **attrs)
    @text = text
    super(**attrs)
  end

  attr_reader :text

  private

  def default_attrs
    { class: "btn btn-primary", type: "button" }
  end
end

# Usage - user attrs merge with defaults
render ButtonComponent.new(text: "Click me", class: "mt-4", type: "submit")
# => <button type="submit" class="btn btn-primary mt-4">Click me</button>

Constant Summary collapse

TAILWIND_MERGER =

Frozen instance of TailwindMerge for efficient class merging

::TailwindMerge::Merger.new.freeze

Instance Method Summary collapse

Constructor Details

#initialize(**user_attrs) ⇒ Base

Initialize the component with user-provided attributes. Subclasses should call super(**attrs) after setting their own instance variables.

Parameters:

  • attrs (Hash)

    User-provided HTML attributes



59
60
61
62
# File 'app/components/panda/core/base.rb', line 59

def initialize(**user_attrs)
  super()
  @attrs = merge_attrs(user_attrs, default_attrs)
end