Sha256: 489a6b08604bcd34accac0062379cca39aaa08b7757b988bab0d9ae9f95d30dc
Contents?: true
Size: 1.41 KB
Versions: 13
Compression:
Stored size: 1.41 KB
Contents
module Lookbook class BaseComponent < ViewComponent::Base include Lookbook::ComponentHelper 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 render_component_tag(tag = :div, **attrs, &block) merged_classes = class_names(attrs[:class], @html_attrs[:class]) merged_attrs = @html_attrs.except(:class).deep_merge(attrs.except(:class)) lookbook_tag tag, name: component_name, **merged_attrs, "x-data": prepare_alpine_data(merged_attrs[:"x-data"]), class: merged_classes, &block end def component_name self.class.name.chomp("::Component").delete_prefix("Lookbook::").underscore.tr("/", "_").tr("_", "-") end protected attr_reader :alpine_data def alpine_component nil end def alpine_encode(data) if data.is_a? String "'#{json_escape data}'" else json_escape data.to_json.tr("\"", "'") end end 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).compact args.any? ? "#{alpine_component_name}(#{args.join(",")})" : alpine_component_name end end end end
Version data entries
13 entries across 13 versions & 1 rubygems