heroicon 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d5ce70d82b7a63366314de5b26135a0e9e12a2def71059104ff094eed1f9dd7
4
- data.tar.gz: e170e3883881e592130b588e4e6db9f03bf355db5156b4388aa15ecbb1cc8652
3
+ metadata.gz: 4b1da2f6a254f8d75998ee51b23dae5e795f1b020c2a4558aa765f99b5b0c290
4
+ data.tar.gz: df21e11c2767a743614d7ee5a01f95bd32aec73ea3445a409ed8462166f9cd6a
5
5
  SHA512:
6
- metadata.gz: 773bcdd25e8fb9bba1c2e5c022a9ecc09f87c5220c8366175c2ced86605788858359644dcb8a82fbca378b521a1b2382baea920e0f9c8f32508edfb3f22b3e51
7
- data.tar.gz: c32decc196fb36b017dc6871f808869c011c98890f84c13b627501a42f0039afdc0353e21c7e26b7f4f6f3a576f602c689b10a00d414ef6677fa78b172b04070
6
+ metadata.gz: 0525f055760da3fb88e91f688ac16511cc9d15a434f46708e8134b95fd9e0b1727684ed5e11f7ac567a7b144d1e2feffe363b623af4e495ceb368688d43b193c
7
+ data.tar.gz: bf4faf542d32e2b246d2bfae07fd71fb99adaa01d06b7eed63f2904e3502ebd113b77c7a1205a1ac3c2cbc99764ee2880df47923ce780b6ddc17f12ba38e238e
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # Heroicon
2
+
2
3
  [![Build Status](https://github.com/bharget/heroicon/workflows/CI/badge.svg)](https://github.com/bharget/heroicon/actions)
3
4
  [![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/testdouble/standard)
4
5
 
5
6
  Ruby on Rails view helpers for the beautiful hand-crafted SVG icons, Heroicons.
6
7
 
7
- Used in production at [Morning Brew ☕](https://www.morningbrew.com/?utm_source=bharget_github)
8
-
8
+ Used in production at [Morning Brew ☕](https://www.morningbrew.com/?utm_source=bharget_github)
9
9
 
10
10
  This gem has no official affiliation with Tailwind CSS or the Heroicon team (yet!). Check out their sites:
11
11
 
@@ -14,6 +14,7 @@ This gem has no official affiliation with Tailwind CSS or the Heroicon team (yet
14
14
  - [Heroicons](https://heroicons.com/?utm_source=bharget_github)
15
15
 
16
16
  ## Installation
17
+
17
18
  Add this line to your application's Gemfile:
18
19
 
19
20
  ```ruby
@@ -21,11 +22,13 @@ gem "heroicon"
21
22
  ```
22
23
 
23
24
  And then execute:
25
+
24
26
  ```bash
25
27
  $ bundle
26
28
  ```
27
29
 
28
30
  Run the installer
31
+
29
32
  ```bash
30
33
  $ rails g heroicon:install
31
34
  ```
@@ -38,7 +41,7 @@ To use a icon in your views, simply use the provided view helper with the name o
38
41
  <%= heroicon "search" %>
39
42
  ```
40
43
 
41
- Heroicon comes with two variants, `:outline` and `:solid`. By default it uses the variant provided in the configuration file that was generated during installation. To overwrite this in the view, use
44
+ Heroicon comes with two variants, `:outline` and `:solid`. The default variant is `:solid`. This can be changed in `config/initializers/heroicon.rb`, which is generated during installation (See [Configuration](#configuration)). To overwrite this in the view, use
42
45
 
43
46
  ```rb
44
47
  <%= heroicon "search", variant: :outline %>
@@ -50,7 +53,35 @@ You can also pass HTML options directly to the icon.
50
53
  <%= heroicon "search", options: { class: "text-primary-500" } %>
51
54
  ```
52
55
 
53
- Heroicon currently supports icons up to [`Version 0.4.2`](https://github.com/tailwindlabs/heroicons/releases/tag/v0.4.2). If there is a icon that is missing, feel free to contribute by following our contributing guide below.
56
+ Heroicon currently supports icons up to [`Version 1.0.1`](https://github.com/tailwindlabs/heroicons/releases/tag/v1.0.1). If there is a icon that is missing, feel free to contribute by following our contributing guide below.
57
+
58
+ # Configuration
59
+
60
+ After running `rails g heroicon:install` in the installation step, a configuration file will be created at `config/initializers/heroicon.rb`.
61
+
62
+ Currently there are two configuration options:
63
+
64
+ - `variant`: The default variant to use if no variant is specified in the view.
65
+ - You can set this to either `:outline` or `:solid`. Defaults to `:solid`.
66
+ - `default_class`: A default class that gets applied to every icon.
67
+ - This accepts either a String to apply to every icon, or a Hash, which applies the class based on the variant of the icon (see the example below).
68
+ - You can disable this on a per-icon basis by passing `disable_default_class: true` in the options hash within the view.
69
+ - _Note: If you use the `default_class` option with PurgeCSS (or something similar), make sure you add the classes you want to use to the generated CSS file. For PurgeCSS, you may want to add `config/intializers/heroicon.rb` to the list of purged paths._
70
+
71
+ An example configuration looks like this:
72
+
73
+ ```ruby
74
+ Heroicon.configure do |config|
75
+ config.variant = :solid
76
+ config.default_class = {solid: "h-5 w-5", outline: "h-6 w-6"}
77
+ end
78
+ ```
79
+
80
+ Disabling the default class in the view:
81
+
82
+ ```rb
83
+ <%= heroicon "search", options: { class: "custom-class" disable_default_class: true } %>
84
+ ```
54
85
 
55
86
  ## Contributing
56
87
 
@@ -71,4 +102,5 @@ bundle exec rake test
71
102
  ```
72
103
 
73
104
  ## License
105
+
74
106
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -1,5 +1,5 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2
- <path fill="#fff" d="M12 14l9-5-9-5-9 5 9 5z"/>
3
- <path fill="#fff" d="M12 14l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14z"/>
2
+ <path d="M12 14l9-5-9-5-9 5 9 5z"/>
3
+ <path d="M12 14l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14z"/>
4
4
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 14l9-5-9-5-9 5 9 5zm0 0l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14zm-4 6v-7.5l4-2.222"/>
5
5
  </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 13l-5 5m0 0l-5-5m5 5V6"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 17l-5-5m0 0l5-5m-5 5h12"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 11l5-5m0 0l5 5m-5-5v12"/>
3
+ </svg>
@@ -1,4 +1,4 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2
- <path fill="#fff" d="M9 17a2 2 0 11-4 0 2 2 0 014 0zM19 17a2 2 0 11-4 0 2 2 0 014 0z"/>
2
+ <path d="M9 17a2 2 0 11-4 0 2 2 0 014 0zM19 17a2 2 0 11-4 0 2 2 0 014 0z"/>
3
3
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16V6a1 1 0 00-1-1H4a1 1 0 00-1 1v10a1 1 0 001 1h1m8-1a1 1 0 01-1 1H9m4-1V8a1 1 0 011-1h2.586a1 1 0 01.707.293l3.414 3.414a1 1 0 01.293.707V16a1 1 0 01-1 1h-1m-6-1a1 1 0 001 1h1M5 17a2 2 0 104 0m-4 0a2 2 0 114 0m6 0a2 2 0 104 0m-4 0a2 2 0 114 0"/>
4
4
  </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
2
+ <path fill-rule="evenodd" d="M14.707 10.293a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 111.414-1.414L9 12.586V5a1 1 0 012 0v7.586l2.293-2.293a1 1 0 011.414 0z" clip-rule="evenodd"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
2
+ <path fill-rule="evenodd" d="M9.707 14.707a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 1.414L7.414 9H15a1 1 0 110 2H7.414l2.293 2.293a1 1 0 010 1.414z" clip-rule="evenodd"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
2
+ <path fill-rule="evenodd" d="M10.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 11H5a1 1 0 110-2h7.586l-2.293-2.293a1 1 0 010-1.414z" clip-rule="evenodd"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
2
+ <path fill-rule="evenodd" d="M5.293 9.707a1 1 0 010-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 01-1.414 1.414L11 7.414V15a1 1 0 11-2 0V7.414L6.707 9.707a1 1 0 01-1.414 0z" clip-rule="evenodd"/>
3
+ </svg>
@@ -2,8 +2,13 @@
2
2
 
3
3
  module Heroicon
4
4
  module ApplicationHelper
5
- def heroicon(name, variant: Heroicon.configuration.variant, options: {})
6
- raw Heroicon::Icon.render(name: name, variant: variant, options: options)
5
+ def heroicon(name, variant: Heroicon.configuration.variant, options: {}, path_options: {})
6
+ raw Heroicon::Icon.render(
7
+ name: name,
8
+ variant: variant,
9
+ options: options,
10
+ path_options: path_options
11
+ )
7
12
  end
8
13
  end
9
14
  end
@@ -2,4 +2,9 @@
2
2
 
3
3
  Heroicon.configure do |config|
4
4
  config.variant = :solid # Options are :solid and :outline
5
+
6
+ ##
7
+ # You can set a default class, which will get applied to every icon with
8
+ # the given variant. To do so, un-comment the line below.
9
+ # config.default_class = {solid: "h-5 w-5", outline: "h-6 w-6"}
5
10
  end
@@ -2,10 +2,13 @@
2
2
 
3
3
  module Heroicon
4
4
  class Configuration
5
+ DEFAULT_VARIANT = :solid
6
+
5
7
  attr_accessor :variant
8
+ attr_accessor :default_class
6
9
 
7
10
  def initialize
8
- @variant = :solid
11
+ @variant = DEFAULT_VARIANT
9
12
  end
10
13
  end
11
14
 
data/lib/heroicon/icon.rb CHANGED
@@ -2,12 +2,13 @@
2
2
 
3
3
  module Heroicon
4
4
  class Icon
5
- attr_reader :name, :variant, :options
5
+ attr_reader :name, :variant, :options, :path_options
6
6
 
7
- def initialize(name:, variant:, options:)
7
+ def initialize(name:, variant:, options:, path_options:)
8
8
  @name = name
9
9
  @variant = safe_variant(variant)
10
10
  @options = options
11
+ @path_options = path_options
11
12
  end
12
13
 
13
14
  def render
@@ -15,6 +16,16 @@ module Heroicon
15
16
 
16
17
  doc = Nokogiri::HTML::DocumentFragment.parse(file)
17
18
  svg = doc.at_css "svg"
19
+
20
+ path_options.each do |key, value|
21
+ attribute = key.to_s.dasherize
22
+ svg.css("path[#{attribute}]").each do |item|
23
+ item[attribute] = value.to_s
24
+ end
25
+ end
26
+
27
+ prepend_default_class_name
28
+
18
29
  options.each do |key, value|
19
30
  svg[key.to_s] = value
20
31
  end
@@ -24,6 +35,34 @@ module Heroicon
24
35
 
25
36
  private
26
37
 
38
+ ##
39
+ # Prepends the default CSS class name for an icon. You can provide a String, which will apply
40
+ # to all icons, or a Hash, which will apply to the specified variant.
41
+ #
42
+ # @example
43
+ # Heroicon.configure do |config|
44
+ # config.default_class = { solid: "h-5 w-5", outline: "h-6 w-6" }
45
+ # end
46
+ #
47
+ # #=> <svg class="h-5 w-5">...</svg>
48
+ def prepend_default_class_name
49
+ return if disable_default_class?
50
+
51
+ default_class_config = Heroicon.configuration.default_class
52
+
53
+ default_class = if default_class_config.is_a?(String)
54
+ default_class_config
55
+ elsif default_class_config.is_a?(Hash)
56
+ default_class_config[variant]
57
+ end
58
+
59
+ options[:class] = "#{default_class} #{options[:class]}".strip if default_class.present?
60
+ end
61
+
62
+ def disable_default_class?
63
+ @disable_default_class ||= !!options.delete(:disable_default_class)
64
+ end
65
+
27
66
  def safe_variant(provided_variant)
28
67
  if %i[solid outline].include?(provided_variant.to_sym)
29
68
  provided_variant
@@ -45,13 +84,15 @@ module Heroicon
45
84
  def warning
46
85
  return unless Rails.env.development?
47
86
 
48
- <<-HTML
87
+ script = <<-HTML
49
88
  <script type="text/javascript">
50
89
  //<![CDATA[
51
90
  console.warn("Heroicon: Failed to find heroicon: #{name}")
52
91
  //]]>
53
92
  </script>
54
93
  HTML
94
+
95
+ script.strip
55
96
  end
56
97
 
57
98
  class << self
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Heroicon
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroicon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Hargett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-02 00:00:00.000000000 Z
11
+ date: 2021-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: mocha
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  description: Ruby on Rails view helpers for the beautiful hand-crafted SVG icons,
98
112
  Heroicons.
99
113
  email:
@@ -120,6 +134,10 @@ files:
120
134
  - app/assets/images/heroicon/outline/arrow-narrow-right.svg
121
135
  - app/assets/images/heroicon/outline/arrow-narrow-up.svg
122
136
  - app/assets/images/heroicon/outline/arrow-right.svg
137
+ - app/assets/images/heroicon/outline/arrow-sm-down.svg
138
+ - app/assets/images/heroicon/outline/arrow-sm-left.svg
139
+ - app/assets/images/heroicon/outline/arrow-sm-right.svg
140
+ - app/assets/images/heroicon/outline/arrow-sm-up.svg
123
141
  - app/assets/images/heroicon/outline/arrow-up.svg
124
142
  - app/assets/images/heroicon/outline/arrows-expand.svg
125
143
  - app/assets/images/heroicon/outline/at-symbol.svg
@@ -346,6 +364,10 @@ files:
346
364
  - app/assets/images/heroicon/solid/arrow-narrow-right.svg
347
365
  - app/assets/images/heroicon/solid/arrow-narrow-up.svg
348
366
  - app/assets/images/heroicon/solid/arrow-right.svg
367
+ - app/assets/images/heroicon/solid/arrow-sm-down.svg
368
+ - app/assets/images/heroicon/solid/arrow-sm-left.svg
369
+ - app/assets/images/heroicon/solid/arrow-sm-right.svg
370
+ - app/assets/images/heroicon/solid/arrow-sm-up.svg
349
371
  - app/assets/images/heroicon/solid/arrow-up.svg
350
372
  - app/assets/images/heroicon/solid/arrows-expand.svg
351
373
  - app/assets/images/heroicon/solid/at-symbol.svg