class ViewComponent::Config

def default_generate_options

def default_generate_options
  options = ActiveSupport::OrderedOptions.new(false)
  options.preview_path = ""
  options.path = "app/components"
  options
end

def default_preview_paths

def default_preview_paths
  (default_rails_preview_paths + default_rails_engines_preview_paths).uniq
end

def default_previews_options

def default_previews_options
  options = ActiveSupport::OrderedOptions.new
  options.controller = "ViewComponentsController"
  options.route = "/rails/view_components"
  options.enabled = Rails.env.development? || Rails.env.test?
  options.default_layout = nil
  options.paths = default_preview_paths
  options
end

def default_rails_engines_preview_paths

def default_rails_engines_preview_paths
  return [] unless defined?(Rails::Engine)
  registered_rails_engines_with_previews.map do |descendant|
    "#{descendant.root}/test/components/previews"
  end
end

def default_rails_preview_paths

def default_rails_preview_paths
  return [] unless defined?(Rails.root) && Dir.exist?("#{Rails.root}/test/components/previews")
  ["#{Rails.root}/test/components/previews"]
end

def defaults

def defaults
  ActiveSupport::OrderedOptions.new.merge!({
    generate: default_generate_options,
    previews: default_previews_options,
    instrumentation_enabled: false
  })
end

def initialize

def initialize
  @config = self.class.defaults
end

def registered_rails_engines_with_previews

def registered_rails_engines_with_previews
  Rails::Engine.descendants.select do |descendant|
    defined?(descendant.root) && Dir.exist?("#{descendant.root}/test/components/previews")
  end
end