initialize

in app/components/primer/octicon_component.rb [34:82]


    def initialize(icon_name = nil, icon: nil, size: SIZE_DEFAULT, use_symbol: false, **system_arguments)
      icon_key = icon_name || icon

      
      if system_arguments[:height].present? && system_arguments[:height].to_i < 16 || system_arguments[:width].present? && system_arguments[:width].to_i < 16
        system_arguments.delete(:height)
        system_arguments.delete(:width)
      end

      cache_key = Primer::Octicon::Cache.get_key(
        symbol: icon_key,
        size: size,
        height: system_arguments[:height],
        width: system_arguments[:width]
      )

      @system_arguments = system_arguments
      @system_arguments[:tag] = :svg
      @system_arguments[:aria] ||= {}
      @use_symbol = use_symbol

      if @system_arguments[:aria][:label] || @system_arguments[:"aria-label"]
        @system_arguments[:role] = "img"
      else
        @system_arguments[:aria][:hidden] = true
      end

      if (cache_icon = Primer::Octicon::Cache.read(cache_key))
        @icon = cache_icon
      else
        
        
        octicon_options = {
          height: @system_arguments[:height] || SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, SIZE_DEFAULT)],
          width: @system_arguments[:width]
        }
        octicon_options.compact!

        @icon = Octicons::Octicon.new(icon_key, octicon_options)
        Primer::Octicon::Cache.set(cache_key, @icon)
      end

      @system_arguments[:classes] = class_names(
        @icon.options[:class],
        @system_arguments[:classes]
      )
      @system_arguments.merge!(@icon.options.except(:class, :'aria-hidden'))
    end