class CKEditor5::Rails::Presets::PresetBuilder

def cdn(cdn = nil, &block)

def cdn(cdn = nil, &block)
  return @cdn if cdn.nil? && block.nil?
  if block_given?
    unless block.arity == 3
      raise ArgumentError,
            'Block must accept exactly 3 arguments: bundle, version, path'
    end
    @cdn = block
  else
    @cdn = cdn
  end
end

def ckbox(version = nil, theme: :lark)

def ckbox(version = nil, theme: :lark)
  return @ckbox if version.nil?
  @ckbox = { version: version, theme: theme }
end

def configure(key, value)

def configure(key, value)
  @config[key] = value
end

def editable_height(height = nil)

def editable_height(height = nil)
  return @editable_height if height.nil?
  @editable_height = height
end

def gpl

def gpl
  license_key('GPL')
  premium(false)
end

def initialize

def initialize
  @version = nil
  @premium = false
  @cdn = :jsdelivr
  @translations = []
  @license_key = nil
  @type = :classic
  @ckbox = nil
  @editable_height = nil
  @config = {
    plugins: [],
    toolbar: []
  }
end

def inline_plugin(name, code)

def inline_plugin(name, code)
  @config[:plugins] << Editor::PropsInlinePlugin.new(name, code)
end

def language(ui, content: ui) # rubocop:disable Naming/MethodParameterName

rubocop:disable Naming/MethodParameterName
def language(ui, content: ui) # rubocop:disable Naming/MethodParameterName
  @config[:language] = {
    ui: ui,
    content: content
  }
end

def license_key(license_key = nil)

def license_key(license_key = nil)
  return @license_key if license_key.nil?
  @license_key = license_key
end

def menubar(visible: true)

def menubar(visible: true)
  @config[:menuBar] = {
    isVisible: visible
  }
end

def plugin(name, **kwargs)

def plugin(name, **kwargs)
  @config[:plugins] << Editor::PropsPlugin.new(name, **kwargs)
end

def plugins(*names, **kwargs)

def plugins(*names, **kwargs)
  names.each { |name| plugin(name, **kwargs) }
end

def premium(premium = nil)

def premium(premium = nil)
  return @premium if premium.nil?
  @premium = premium
end

def to_h_with_overrides(**overrides)

def to_h_with_overrides(**overrides)
  {
    version: overrides.fetch(:version, version),
    premium: overrides.fetch(:premium, premium),
    cdn: overrides.fetch(:cdn, cdn),
    translations: overrides.fetch(:translations, translations),
    license_key: overrides.fetch(:license_key, license_key),
    type: overrides.fetch(:type, type),
    ckbox: overrides.fetch(:ckbox, ckbox),
    config: config.merge(overrides.fetch(:config, {}))
  }
end

def toolbar(*items, should_group_when_full: true, &block)

def toolbar(*items, should_group_when_full: true, &block)
  if @config[:toolbar].blank? || !items.empty?
    @config[:toolbar] = {
      items: items,
      shouldNotGroupWhenFull: !should_group_when_full
    }
  end
  return unless block
  builder = ToolbarBuilder.new(@config[:toolbar])
  builder.instance_eval(&block)
end

def translations(*translations)

def translations(*translations)
  return @translations if translations.empty?
  @translations = translations
end

def type(type = nil)

def type(type = nil)
  return @type if type.nil?
  raise ArgumentError, "Invalid editor type: #{type}" unless Editor::Props.valid_editor_type?(type)
  @type = type
end

def version(version = nil)

def version(version = nil)
  return @version.to_s if version.nil?
  @version = Semver.new(version)
end