rails_heroicon 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,6 +3,8 @@ require "action_view"
3
3
  module RailsHeroicon
4
4
  module Helper
5
5
  include ActionView::Helpers::TagHelper
6
+
7
+ mattr_accessor :icon_cache, default: {}
6
8
  # To add a heroicon, call <tt><%= heroicon "icon_name" %></tt> on your erb template.
7
9
  # Head over to https://heroicons.com to view all the icons.
8
10
  #
@@ -34,10 +36,14 @@ module RailsHeroicon
34
36
  # The helper method automatically sets <tt>aria-hidden=true</tt> if <tt>aria-label</tt> is not set, and
35
37
  # if <tt>aria-label</tt> is set, then <tt>role=img</tt> is set automatically.
36
38
  def heroicon(symbol, title: nil, **options)
37
- icon = RailsHeroicon.new(symbol, **options)
39
+ cache_key = [symbol, title, options]
40
+ return icon_cache[cache_key] if icon_cache[cache_key]
38
41
 
42
+ icon = RailsHeroicon.new(symbol, **options)
39
43
  title_tag = content_tag(:title, title) if title
40
- content_tag(:svg, title_tag.to_s.html_safe + icon.svg_path.html_safe, icon.options)
44
+ tag = content_tag(:svg, title_tag.to_s.html_safe + icon.svg_path.html_safe, icon.options)
45
+ icon_cache[cache_key] = tag
46
+ tag
41
47
  end
42
48
  end
43
49
  end
@@ -2,7 +2,7 @@ require_relative "errors"
2
2
 
3
3
  module RailsHeroicon
4
4
  class RailsHeroicon
5
- VARIANTS = %w[outline solid mini].freeze
5
+ VARIANTS = %w[outline solid mini micro].freeze
6
6
 
7
7
  attr_reader :options
8
8
 
@@ -12,7 +12,7 @@ module RailsHeroicon
12
12
  @icon = icon.to_s
13
13
  @variant = variant.to_s
14
14
  @options = options.dup
15
- @size = icon_size_with(size)
15
+ @size = default_or_defined_size(size)
16
16
  @options.merge!(svg_properties)
17
17
  end
18
18
 
@@ -29,13 +29,14 @@ module RailsHeroicon
29
29
  def svg_properties
30
30
  properties = {}
31
31
 
32
- properties[:viewBox] = mini? ? "0 0 20 20" : "0 0 24 24"
32
+ properties[:xmlns] = "http://www.w3.org/2000/svg"
33
+ properties[:viewBox] = view_box
33
34
  properties[:height] = @size
34
35
  properties[:width] = @size
35
36
  properties[:version] = "1.1"
36
37
  properties[:fill] = outline? ? "none" : "currentColor"
37
38
  properties[:stroke] = outline? ? "currentColor" : "none"
38
- properties[:"stroke-width"] = "1.5" if outline?
39
+ properties[:"stroke-width"] = stroke_width
39
40
 
40
41
  if options[:"aria-label"].nil? && options["aria-label"].nil? && options.dig(:aria, :label).nil?
41
42
  properties[:"aria-hidden"] = "true"
@@ -47,14 +48,27 @@ module RailsHeroicon
47
48
  end
48
49
 
49
50
  # If the user has explicitly stated the size attribute, then use that. If size attribute is not passed
50
- # then default to 24 if variant is outline or solid, else default to 20 if variant is mini.
51
- def icon_size_with(size)
51
+ # then default to 24 if variant is outline or solid, else default to 20 if variant is mini, else default to 16 if
52
+ # variant is micro.
53
+ def default_or_defined_size(size)
52
54
  return size if size
55
+ return 16 if micro?
53
56
  return 20 if mini?
54
57
 
55
58
  24
56
59
  end
57
60
 
61
+ def stroke_width
62
+ return unless outline?
63
+ @options[:"stroke-width"] || 1.5
64
+ end
65
+
66
+ def view_box
67
+ return "0 0 20 20" if mini?
68
+ return "0 0 16 16" if micro?
69
+ "0 0 24 24"
70
+ end
71
+
58
72
  def outline?
59
73
  @variant == "outline"
60
74
  end
@@ -66,5 +80,9 @@ module RailsHeroicon
66
80
  def mini?
67
81
  @variant == "mini"
68
82
  end
83
+
84
+ def micro?
85
+ @variant == "micro"
86
+ end
69
87
  end
70
88
  end
@@ -1,3 +1,3 @@
1
1
  module RailsHeroicon
2
- VERSION = "2.1.1".freeze
2
+ VERSION = "2.2.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_heroicon
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - abeidahmed
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-08 00:00:00.000000000 Z
11
+ date: 2023-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -77,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
77
  - !ruby/object:Gem::Version
78
78
  version: '0'
79
79
  requirements: []
80
- rubygems_version: 3.3.7
80
+ rubygems_version: 3.1.6
81
81
  signing_key:
82
82
  specification_version: 4
83
83
  summary: Ruby on Rails view helpers for the awesome Heroicons by Steve Schoger.