lib/ckeditor5/rails/editor/props_plugin.rb



# frozen_string_literal: true

module CKEditor5::Rails::Editor
  class PropsPlugin
    delegate :to_h, to: :import_meta

    def initialize(name, premium: false, **js_import_meta)
      @name = name
      @js_import_meta = if js_import_meta.empty?
                          { import_name: premium ? 'ckeditor5-premium-features' : 'ckeditor5' }
                        else
                          js_import_meta
                        end
    end

    def self.normalize(plugin)
      case plugin
      when String, Symbol then new(plugin)
      when PropsPlugin, PropsInlinePlugin then plugin
      else raise ArgumentError, "Invalid plugin: #{plugin}"
      end
    end

    def to_h
      meta = ::CKEditor5::Rails::Assets::JSImportMeta.new(
        import_as: js_import_meta[:window_name] ? nil : name,
        **js_import_meta
      ).to_h

      meta.merge!({ type: :external })
      meta
    end

    private

    attr_reader :name, :js_import_meta
  end
end