class Lookbook::Component

def alpine_component

def alpine_component
  nil
end

def component_name

def component_name
  self.class.name.chomp("::Component").delete_prefix("Lookbook::").underscore.tr("/", "_").tr("_", "-")
end

def initialize(alpine_data: [], **html_attrs)

def initialize(alpine_data: [], **html_attrs)
  @alpine_data ||= alpine_data
  @html_attrs = html_attrs
  @html_attrs[:class] = {"#{@html_attrs[:class]}": true} if @html_attrs[:class].is_a? String
end

def prepare_alpine_data(x_data = nil)

def prepare_alpine_data(x_data = nil)
  alpine_component_name = x_data || @html_attrs&.dig(:x_data) || alpine_component
  if alpine_component_name.present?
    args = Array.wrap(alpine_data)
    args.any? ? "#{alpine_component_name}(#{safe_join(args).gsub(""", "'").tr("\"", "'")})" : alpine_component_name
  end
end

def render_component_tag(tag = :div, **attrs, &block)

def render_component_tag(tag = :div, **attrs, &block)
  merged_classes = class_names(attrs[:class], @html_attrs[:class])
  merge_attrs = @html_attrs.except(:class).deep_merge(attrs.except(:class))
  render Lookbook::TagComponent.new(tag: tag,
    name: component_name,
    **merge_attrs,
    x_data: prepare_alpine_data(attrs[:x_data]),
    class: merged_classes), &block
end