class RailsHeroicon::RailsHeroicon

Constants

VARIANTS

Attributes

options[R]

Public Class Methods

new(icon, variant: "outline", size: nil, **options) click to toggle source
# File lib/rails_heroicon/rails_heroicon.rb, line 9
def initialize(icon, variant: "outline", size: nil, **options)
  raise UndefinedVariant unless VARIANTS.include?(variant.to_s)

  @icon = icon.to_s
  @variant = variant.to_s
  @options = options
  @size = icon_size_with(size)

  @options.merge!(a11y)
  @options.merge!({
    viewBox: outline? ? "0 0 24 24" : "0 0 20 20",
    height: @size,
    width: @size,
    version: "1.1",
    fill: outline? ? "none" : "currentColor",
    stroke: solid? ? "none" : "currentColor"
  })
end

Public Instance Methods

svg_path() click to toggle source

Finds the svg icon with respect to variant.

# File lib/rails_heroicon/rails_heroicon.rb, line 29
def svg_path
  file_path = if solid?
                "#{SOLID_ICON_PATH}/#{@icon}.svg"
              else
                "#{OUTLINE_ICON_PATH}/#{@icon}.svg"
              end

  raise UndefinedIcon, @icon unless File.exist?(file_path)

  File.read(file_path)
end

Private Instance Methods

a11y() click to toggle source
# File lib/rails_heroicon/rails_heroicon.rb, line 43
def a11y
  accessible = {}

  if @options[:"aria-label"].nil? && @options["aria-label"].nil? && @options.dig(:aria, :label).nil?
    accessible[:"aria-hidden"] = "true"
  else
    accessible[:role] = "img"
  end

  accessible
end
icon_size_with(size) click to toggle source

If the user has explicitly stated the size attribute, then use that. If size attribute is not passed then default to 24 if variant is outline, else default to 20 if variant is solid.

# File lib/rails_heroicon/rails_heroicon.rb, line 57
def icon_size_with(size)
  if outline? && size.nil?
    24
  elsif solid? && size.nil?
    20
  else
    size
  end
end
outline?() click to toggle source
# File lib/rails_heroicon/rails_heroicon.rb, line 67
def outline?
  @variant == "outline"
end
solid?() click to toggle source
# File lib/rails_heroicon/rails_heroicon.rb, line 71
def solid?
  @variant == "solid"
end