heroicons_helper 0.3.0 → 0.4.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/heroicons_helper/icon.rb +75 -29
- data/lib/heroicons_helper/version.rb +1 -1
- data/lib/heroicons_helper.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a4fd38721f8363f1f2b36b45cec732c0dba30f7ac3ad5d1cb243a8e5a722bda
|
4
|
+
data.tar.gz: 59333a78638dacbc4690bc22d231382d79addea64d4bb703b2efbdb4ccc052df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1aef948793f04e86a224734f44da163f037a26c74f392757c0cb0b7546ae26edbfb00ef6ef0bd5bed5bea6b93be49933f3c432f28c94b9654b2905028dced010
|
7
|
+
data.tar.gz: 40c2239119dc8de51e43e55260e2bd9190faaad885ae1e53f4a5b4a24eb2420f5cc5d0e5fb13658c9a5cae55563d319fd858895a23dedbb5611da192d87bb654
|
data/README.md
CHANGED
@@ -37,7 +37,7 @@ where
|
|
37
37
|
This one method call returns an object that represents the Heroicon, and you should call `to_svg` to get the resulting SVG string:
|
38
38
|
|
39
39
|
```ruby
|
40
|
-
outline_icon = heroicon("x",
|
40
|
+
outline_icon = heroicon("x", variant: HeroiconsHelper::Icon::VARIANT_OUTLINE)
|
41
41
|
puts outline_icon.to_svg
|
42
42
|
```
|
43
43
|
```
|
@@ -3,22 +3,29 @@
|
|
3
3
|
module HeroiconsHelper
|
4
4
|
# Icon to show heroicons by name and variant.
|
5
5
|
class Icon
|
6
|
-
attr_reader :path, :attributes, :width, :height, :symbol, :variant
|
6
|
+
attr_reader :path, :attributes, :width, :height, :symbol, :variant, :keywords
|
7
7
|
|
8
8
|
VARIANT_OUTLINE = "outline"
|
9
9
|
VARIANT_SOLID = "solid"
|
10
10
|
VARIANTS = [VARIANT_OUTLINE, VARIANT_SOLID].freeze
|
11
11
|
|
12
12
|
def initialize(symbol, variant, attributes: {})
|
13
|
-
@symbol = symbol
|
14
|
-
@variant = variant
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
@path =
|
19
|
-
@width =
|
20
|
-
@height =
|
21
|
-
@
|
13
|
+
@symbol = symbol.to_s
|
14
|
+
@variant = variant.to_s
|
15
|
+
|
16
|
+
heroicon = get_heroicon(@symbol, @variant)
|
17
|
+
|
18
|
+
@path = heroicon["path"]
|
19
|
+
@width = heroicon["width"]
|
20
|
+
@height = heroicon["height"]
|
21
|
+
@keywords = heroicon["keywords"]
|
22
|
+
@attributes = attributes.dup
|
23
|
+
@attributes[:class] = classes
|
24
|
+
@attributes[:viewBox] = viewbox
|
25
|
+
@attributes.merge!(size)
|
26
|
+
@attributes[:version] = "1.1"
|
27
|
+
@attributes.merge!(variant_attributes)
|
28
|
+
@attributes.merge!(a11y)
|
22
29
|
end
|
23
30
|
|
24
31
|
# Returns an string representing a <svg> tag
|
@@ -26,54 +33,93 @@ module HeroiconsHelper
|
|
26
33
|
"<svg xmlns=\"http://www.w3.org/2000/svg\" #{html_attributes}>#{@path}</svg>"
|
27
34
|
end
|
28
35
|
|
29
|
-
private
|
30
|
-
|
31
|
-
def html_attributes
|
36
|
+
private def html_attributes
|
32
37
|
attrs = []
|
33
38
|
@attributes.each_pair { |attr, value| attrs << "#{attr}=\"#{value}\"" }
|
34
39
|
attrs.map(&:strip).join(" ")
|
35
40
|
end
|
36
41
|
|
37
|
-
|
42
|
+
# add some accessibility features to svg
|
43
|
+
private def a11y
|
44
|
+
accessible = {}
|
45
|
+
|
46
|
+
if @attributes[:"aria-label"].nil? && @attributes["aria-label"].nil?
|
47
|
+
accessible[:"aria-hidden"] = "true"
|
48
|
+
else
|
49
|
+
accessible[:role] = "img"
|
50
|
+
end
|
51
|
+
|
52
|
+
accessible
|
53
|
+
end
|
54
|
+
|
55
|
+
# prepare the octicon class
|
56
|
+
private def classes
|
57
|
+
"heroicon heroicon-#{@symbol}-#{@variant} #{@attributes[:class]} ".strip
|
58
|
+
end
|
59
|
+
|
60
|
+
private def variant_attributes
|
38
61
|
case @variant
|
39
62
|
when VARIANT_OUTLINE
|
40
63
|
{
|
41
|
-
viewBox: viewbox,
|
42
64
|
fill: "none",
|
43
65
|
stroke: "currentColor",
|
44
66
|
}
|
45
67
|
when VARIANT_SOLID
|
46
68
|
{
|
47
|
-
viewBox: viewbox,
|
48
69
|
fill: "currentColor",
|
49
70
|
}
|
50
71
|
end
|
51
72
|
end
|
52
73
|
|
53
|
-
def viewbox
|
74
|
+
private def viewbox
|
54
75
|
"0 0 #{@width} #{@height}"
|
55
76
|
end
|
56
77
|
|
57
|
-
|
58
|
-
|
59
|
-
|
78
|
+
# determine the height and width of the octicon based on :size option
|
79
|
+
private def size
|
80
|
+
size = {
|
81
|
+
width: @width,
|
82
|
+
height: @height,
|
83
|
+
}
|
84
|
+
|
85
|
+
# Specific size
|
86
|
+
unless @attributes[:width].nil? && @attributes[:height].nil?
|
87
|
+
size[:width] = @attributes[:width].nil? ? calculate_width(@attributes[:height]) : @attributes[:width]
|
88
|
+
size[:height] = @attributes[:height].nil? ? calculate_height(@attributes[:width]) : @attributes[:height]
|
89
|
+
@width = size[:width]
|
90
|
+
@height = size[:height]
|
91
|
+
end
|
92
|
+
|
93
|
+
size
|
94
|
+
end
|
95
|
+
|
96
|
+
private def calculate_width(height)
|
97
|
+
(height.to_i * @width) / @height
|
98
|
+
end
|
99
|
+
|
100
|
+
private def calculate_height(width)
|
101
|
+
(width.to_i * @height) / @width
|
102
|
+
end
|
103
|
+
|
104
|
+
private def get_heroicon(symbol, variant)
|
105
|
+
raise ArgumentError, "Icon name can't be empty" if symbol.empty?
|
60
106
|
|
61
|
-
|
62
|
-
raise ArgumentError, "Variant `#{variant.inspect}` is invalid; must be one of #{VARIANTS.join(", ")}" unless VARIANTS.include?(variant_s)
|
107
|
+
raise ArgumentError, "Variant `#{variant.inspect}` is invalid; must be one of #{VARIANTS.join(", ")}" unless VARIANTS.include?(variant)
|
63
108
|
|
64
|
-
icon = HeroiconsHelper::ICON_SYMBOLS[
|
109
|
+
icon = HeroiconsHelper::ICON_SYMBOLS[symbol]
|
65
110
|
|
66
111
|
raise ArgumentError, "Couldn't find Heroicon for `#{symbol.inspect}`" unless icon
|
67
112
|
|
68
|
-
|
69
|
-
raise ArgumentError, "Heroicon for `#{symbol.inspect}` doesn't have variant `#{variant.inspect}`" unless
|
113
|
+
icon_variant = icon["variants"][variant]
|
114
|
+
raise ArgumentError, "Heroicon for `#{symbol.inspect}` doesn't have variant `#{variant.inspect}`" unless icon_variant
|
70
115
|
|
71
116
|
{
|
72
117
|
"name" => icon["name"],
|
73
|
-
"variant" =>
|
74
|
-
"
|
75
|
-
"
|
76
|
-
"
|
118
|
+
"variant" => variant,
|
119
|
+
"keywords" => icon["keywords"] || [],
|
120
|
+
"width" => icon_variant["width"],
|
121
|
+
"height" => icon_variant["height"],
|
122
|
+
"path" => icon_variant["path"],
|
77
123
|
}
|
78
124
|
end
|
79
125
|
end
|
data/lib/heroicons_helper.rb
CHANGED
@@ -9,7 +9,7 @@ module HeroiconsHelper
|
|
9
9
|
file_data = File.read(File.join(File.dirname(__FILE__), "./heroicons_helper/data.json"))
|
10
10
|
ICON_SYMBOLS = JSON.parse(file_data).freeze
|
11
11
|
|
12
|
-
def heroicon(symbol, variant
|
12
|
+
def heroicon(symbol, variant:, **attributes)
|
13
13
|
::HeroiconsHelper::Icon.new(symbol, variant, attributes: attributes)
|
14
14
|
end
|
15
15
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heroicons_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garen J. Torikian
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-06-
|
11
|
+
date: 2022-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A package that distributes Heroicons as a gem, for easy inclusion in
|
14
14
|
Ruby projects.
|