rails_icons 1.1.0 → 1.3.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/Gemfile.lock +6 -5
- data/README.md +22 -16
- data/lib/generators/rails_icons/initializer_generator.rb +10 -6
- data/lib/generators/rails_icons/install_generator.rb +5 -3
- data/lib/generators/rails_icons/sync_generator.rb +5 -8
- data/lib/rails_icons/base_generator.rb +46 -0
- data/lib/rails_icons/configuration/boxicons.rb +4 -0
- data/lib/rails_icons/configuration/feather.rb +4 -0
- data/lib/rails_icons/configuration/flags.rb +69 -0
- data/lib/rails_icons/configuration/heroicons.rb +7 -3
- data/lib/rails_icons/configuration/linear.rb +49 -0
- data/lib/rails_icons/configuration/lucide.rb +4 -0
- data/lib/rails_icons/configuration/phosphor.rb +4 -0
- data/lib/rails_icons/configuration/radix.rb +3 -0
- data/lib/rails_icons/configuration/sidekickicons.rb +105 -0
- data/lib/rails_icons/configuration/tabler.rb +5 -0
- data/lib/rails_icons/configuration/weather.rb +55 -0
- data/lib/rails_icons/errors.rb +15 -1
- data/lib/rails_icons/helpers/icon_helper.rb +2 -2
- data/lib/rails_icons/icon/file_path.rb +1 -1
- data/lib/rails_icons/icon.rb +8 -6
- data/lib/rails_icons/libraries.rb +9 -1
- data/lib/rails_icons/sync/engine.rb +4 -2
- data/lib/rails_icons/sync/process_variants.rb +14 -2
- data/lib/rails_icons/sync/transformations.rb +2 -0
- data/lib/rails_icons/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea0d1a2d414fe4308cfd7a65732fe7422e9a1f10edab64f6673cf0a667ef351f
|
4
|
+
data.tar.gz: 9fa4bab3788760957dce0e13135777fd9a432774fdd2172da077f9d716f5ed5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35389cf6c698b29f48229d34db04108c2471f8cb48f6e7b1d1dca8b812a381bcd6c1601fd39e360339aaa3487944130580881c2fa09323b9eeba1023be9714f3
|
7
|
+
data.tar.gz: 5ce92e169233c6a19c6e2e6b626996436d2ddda6b0f1c1c2e14d8b20d58b0550ccbab7b47767cabd0f7106ef8646483abdbfca20a3a7dbaf25108746fbf6158c
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rails_icons (1.
|
4
|
+
rails_icons (1.3.0)
|
5
5
|
nokogiri (~> 1.16, >= 1.16.4)
|
6
6
|
rails (> 6.1)
|
7
7
|
|
@@ -104,7 +104,7 @@ GEM
|
|
104
104
|
marcel (1.0.4)
|
105
105
|
method_source (1.0.0)
|
106
106
|
mini_mime (1.1.5)
|
107
|
-
mini_portile2 (2.8.
|
107
|
+
mini_portile2 (2.8.8)
|
108
108
|
minitest (5.22.3)
|
109
109
|
net-imap (0.4.10)
|
110
110
|
date
|
@@ -116,10 +116,10 @@ GEM
|
|
116
116
|
net-smtp (0.5.0)
|
117
117
|
net-protocol
|
118
118
|
nio4r (2.7.1)
|
119
|
-
nokogiri (1.
|
119
|
+
nokogiri (1.18.3)
|
120
120
|
mini_portile2 (~> 2.8.2)
|
121
121
|
racc (~> 1.4)
|
122
|
-
nokogiri (1.
|
122
|
+
nokogiri (1.18.3-arm64-darwin)
|
123
123
|
racc (~> 1.4)
|
124
124
|
parallel (1.24.0)
|
125
125
|
parser (3.3.0.5)
|
@@ -132,7 +132,7 @@ GEM
|
|
132
132
|
railties (>= 7.0.0)
|
133
133
|
psych (5.1.2)
|
134
134
|
stringio
|
135
|
-
racc (1.
|
135
|
+
racc (1.8.1)
|
136
136
|
rack (2.2.9)
|
137
137
|
rack-test (2.1.0)
|
138
138
|
rack (>= 1.3)
|
@@ -215,6 +215,7 @@ GEM
|
|
215
215
|
PLATFORMS
|
216
216
|
arm64-darwin-22
|
217
217
|
ruby
|
218
|
+
x86_64-linux
|
218
219
|
|
219
220
|
DEPENDENCIES
|
220
221
|
debug (~> 1.9, >= 1.9.2)
|
data/README.md
CHANGED
@@ -4,10 +4,10 @@ Add any icon library to a Rails app. Rails Icons has first-party support for a [
|
|
4
4
|
|
5
5
|
```erb
|
6
6
|
# Using the default icon library
|
7
|
-
|
7
|
+
icon "check", class: "text-gray-500"
|
8
8
|
|
9
9
|
# Using any custom library
|
10
|
-
|
10
|
+
icon "apple", library: "simple_icons", class: "text-black"
|
11
11
|
```
|
12
12
|
|
13
13
|
The icons are sourced directly from their respective GitHub repositories, ensuring Rails Icons remain lightweight.
|
@@ -23,6 +23,8 @@ The icons are sourced directly from their respective GitHub repositories, ensuri
|
|
23
23
|
</picture>
|
24
24
|
</a>
|
25
25
|
|
26
|
+
Want to make JavaScript your second-favorite language? 👉 [JavaScript for Rails Developers](https://javascriptforrails.com/)
|
27
|
+
|
26
28
|
|
27
29
|
## Install
|
28
30
|
|
@@ -40,7 +42,7 @@ rails generate rails_icons:install --libraries=LIBRARY_NAME
|
|
40
42
|
```bash
|
41
43
|
rails generate rails_icons:install --libraries=heroicons
|
42
44
|
|
43
|
-
Or multiple at once
|
45
|
+
# Or multiple at once
|
44
46
|
rails generate rails_icons:install --libraries=heroicons lucide
|
45
47
|
```
|
46
48
|
|
@@ -54,16 +56,16 @@ icon "check"
|
|
54
56
|
# Use another variant
|
55
57
|
icon "check", variant: "solid"
|
56
58
|
|
57
|
-
# Set library
|
59
|
+
# Set library explicitly
|
58
60
|
icon "check", library: "heroicons"
|
59
61
|
|
60
62
|
# Add CSS
|
61
63
|
icon "check", class: "text-green-500"
|
62
64
|
|
63
65
|
# Add CSS with class_names
|
64
|
-
# article: https://railsdesigner.com/conditional-css-classes-in-rails/
|
65
|
-
# docs: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-token_list
|
66
66
|
icon "check", class: ["size-4", "bg-red-500": !verified?, "bg-green-500": verified?]
|
67
|
+
# ↳ Article: https://railsdesigner.com/conditional-css-classes-in-rails/
|
68
|
+
# ↳ Documentation: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-token_list
|
67
69
|
|
68
70
|
# Add data attributes
|
69
71
|
icon "check", data: { controller: "swap" }
|
@@ -75,13 +77,17 @@ icon "check", stroke_width: 2
|
|
75
77
|
|
76
78
|
## First-party libraries
|
77
79
|
|
78
|
-
- [Boxicons](https://
|
79
|
-
- [Feather](https://
|
80
|
-
- [
|
81
|
-
- [
|
82
|
-
- [
|
83
|
-
- [
|
84
|
-
- [
|
80
|
+
- [Boxicons](https://railsdesigner.com/rails-icons/boxicons/) (1600+ icons)
|
81
|
+
- [Feather](https://railsdesigner.com/rails-icons/feather/) (280+ icons)
|
82
|
+
- [Flags](https://railsdesigner.com/rails-icons/flags/) (540+ icons)
|
83
|
+
- [Heroicons](https://railsdesigner.com/rails-icons/heroicons/) (300+ icons)
|
84
|
+
- [Linear](https://railsdesigner.com/rails-icons/linear/) (170+ icons)
|
85
|
+
- [Lucide](https://railsdesigner.com/rails-icons/lucide/) (1500+ icons)
|
86
|
+
- [Phosphor](https://railsdesigner.com/rails-icons/phosphor/) (9000+ icons)
|
87
|
+
- [Radix](https://railsdesigner.com/rails-icons/radix/) (300+ icons)
|
88
|
+
- [SidekickIcons](https://railsdesigner.com/rails-icons/sidekickicons/) (49 icons, complementing [Heroicons](https://railsdesigner.com/rails-icons/heroicons/))
|
89
|
+
- [Tabler](https://railsdesigner.com/rails-icons/tabler/) (5700+ icons)
|
90
|
+
- [Weather](https://railsdesigner.com/rails-icons/weather/) (215+ icons)
|
85
91
|
|
86
92
|
|
87
93
|
## Animated icons
|
@@ -93,7 +99,7 @@ Rails Icons also includes a few animated icons. Great for loading states and so
|
|
93
99
|
- `fading-dots`
|
94
100
|
- `bouncing-dots`
|
95
101
|
|
96
|
-
Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as
|
102
|
+
Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as the others libraries are available.
|
97
103
|
|
98
104
|
|
99
105
|
## Custom icon library
|
@@ -101,7 +107,7 @@ Use like this: `icon "faded-spinner", library: "animated"`. The same attributes
|
|
101
107
|
Need to use an icon from another library?
|
102
108
|
|
103
109
|
1. run `rails generate rails_icons:initializer --custom=simple_icons`;
|
104
|
-
2. add the (SVG) icons to the created directory
|
110
|
+
2. add the (SVG) icons to the created directory *app/assets/svg/icons/simple_icons*;
|
105
111
|
|
106
112
|
Every custom icon can now be used with the same interface as first-party icon libraries.
|
107
113
|
```ruby
|
@@ -111,7 +117,7 @@ icon "apple", library: "simple_icons", class: "text-black"
|
|
111
117
|
|
112
118
|
## Sync icons
|
113
119
|
|
114
|
-
To sync all
|
120
|
+
To sync all libraries, run
|
115
121
|
```bash
|
116
122
|
rails generate rails_icons:sync
|
117
123
|
```
|
@@ -1,7 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "rails_icons/base_generator"
|
4
|
+
|
3
5
|
module RailsIcons
|
4
|
-
class InitializerGenerator <
|
6
|
+
class InitializerGenerator < RailsIcons::BaseGenerator
|
5
7
|
source_root File.expand_path("templates", __dir__)
|
6
8
|
|
7
9
|
desc "Create the Rails Icons initializer."
|
@@ -20,9 +22,9 @@ module RailsIcons
|
|
20
22
|
return unless File.exist?(INITIALIZER)
|
21
23
|
return if default_configuration_exists?
|
22
24
|
|
23
|
-
if
|
25
|
+
if libraries.present?
|
24
26
|
default_configuration = <<~RB.indent(2)
|
25
|
-
config.default_library = "#{
|
27
|
+
config.default_library = "#{libraries.first}"
|
26
28
|
# config.default_variant = "" # Set a default variant for all libraries
|
27
29
|
RB
|
28
30
|
|
@@ -45,7 +47,7 @@ module RailsIcons
|
|
45
47
|
end
|
46
48
|
|
47
49
|
def setup_custom_configuration
|
48
|
-
return
|
50
|
+
return if options[:custom].blank?
|
49
51
|
|
50
52
|
insert_custom_configuration
|
51
53
|
create_custom_directory
|
@@ -56,7 +58,7 @@ module RailsIcons
|
|
56
58
|
INITIALIZER = "config/initializers/rails_icons.rb"
|
57
59
|
|
58
60
|
def insert_custom_configuration
|
59
|
-
unless
|
61
|
+
unless file_contains?(INITIALIZER, "config.libraries.merge!")
|
60
62
|
custom_default_configuration = <<~RB.indent(2)
|
61
63
|
config.libraries.merge!(
|
62
64
|
|
@@ -76,7 +78,7 @@ module RailsIcons
|
|
76
78
|
def create_custom_directory = FileUtils.mkdir_p(File.join(options[:destination], options[:custom]))
|
77
79
|
|
78
80
|
def library_configuration
|
79
|
-
|
81
|
+
libraries.map { RailsIcons.libraries[_1.to_sym].initializer_config }.join("\n")
|
80
82
|
end
|
81
83
|
|
82
84
|
def custom_configuration
|
@@ -95,5 +97,7 @@ module RailsIcons
|
|
95
97
|
|
96
98
|
File.readlines(INITIALIZER).any? { _1.match?(line) }
|
97
99
|
end
|
100
|
+
|
101
|
+
def libraries = options[:libraries].map(&:downcase)
|
98
102
|
end
|
99
103
|
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "rails_icons/base_generator"
|
4
|
+
|
3
5
|
module RailsIcons
|
4
|
-
class InstallGenerator <
|
6
|
+
class InstallGenerator < RailsIcons::BaseGenerator
|
5
7
|
source_root File.expand_path("templates", __dir__)
|
6
8
|
|
7
|
-
desc "Install Rails Icons with the
|
9
|
+
desc "Install Rails Icons with the chosen libraries. This creates the configuration initializer and will sync the icons."
|
8
10
|
|
9
11
|
class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons.libraries.keys.join("/")})"
|
10
12
|
class_option :destination, type: :string, default: RailsIcons.configuration.destination_path, desc: "Specify destination folder for icons"
|
@@ -22,6 +24,6 @@ module RailsIcons
|
|
22
24
|
|
23
25
|
private
|
24
26
|
|
25
|
-
def attributes = ["--libraries=#{options[:libraries].join(" ")}", "--destination=#{options[:destination]}"].join(" ")
|
27
|
+
def attributes = ["--libraries=#{options[:libraries].map(&:downcase).join(" ")}", "--destination=#{options[:destination]}"].join(" ")
|
26
28
|
end
|
27
29
|
end
|
@@ -1,25 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "rails_icons/base_generator"
|
3
4
|
require "rails_icons/sync/engine"
|
4
5
|
|
5
6
|
module RailsIcons
|
6
|
-
class SyncGenerator <
|
7
|
+
class SyncGenerator < RailsIcons::BaseGenerator
|
7
8
|
source_root File.expand_path("templates", __dir__)
|
8
9
|
|
9
|
-
desc "Sync the
|
10
|
+
desc "Sync the chosen icon libraries from their respective git repos."
|
10
11
|
|
11
12
|
class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons.libraries.keys.join("/")})"
|
12
13
|
|
13
|
-
def sync_icons
|
14
|
-
raise "[Rails Icons] Not a valid library" if libraries.empty?
|
15
|
-
|
16
|
-
libraries.each { Sync::Engine.new(_1).sync }
|
17
|
-
end
|
14
|
+
def sync_icons = libraries.each { Sync::Engine.new(_1).sync }
|
18
15
|
|
19
16
|
private
|
20
17
|
|
21
18
|
def libraries
|
22
|
-
options[:libraries].presence || synced_libraries
|
19
|
+
options[:libraries].map(&:downcase).presence || synced_libraries
|
23
20
|
end
|
24
21
|
|
25
22
|
def synced_libraries
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsIcons
|
4
|
+
class BaseGenerator < Rails::Generators::Base
|
5
|
+
hide!
|
6
|
+
|
7
|
+
def initialize(*arguments)
|
8
|
+
super(*arguments)
|
9
|
+
|
10
|
+
validate!
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def validate!
|
16
|
+
return if custom_library?
|
17
|
+
|
18
|
+
raise RailsIcons::LibraryNotFound.new("") if options.libraries.empty?
|
19
|
+
raise RailsIcons::LibraryNotFound.new(invalid_libraries.join(", ")) if invalid_libraries.any?
|
20
|
+
end
|
21
|
+
|
22
|
+
def invalid_libraries = options.libraries.map(&:to_sym).map(&:downcase).reject { RailsIcons.libraries.key?(_1) }
|
23
|
+
|
24
|
+
def custom_library? = options.custom.present?
|
25
|
+
|
26
|
+
# Uses `gsub_file` as a read-only operation to check file content. This
|
27
|
+
# approach is preferred over `File.read` because `gsub_file` is properly stubbed
|
28
|
+
# in generator tests, while `File.read` would fail in the test environment.
|
29
|
+
#
|
30
|
+
def file_contains?(path, content)
|
31
|
+
return false unless File.exist?(path)
|
32
|
+
|
33
|
+
result = false
|
34
|
+
|
35
|
+
gsub_file(path, /.*/) do |file_content|
|
36
|
+
result = file_content.include?(content)
|
37
|
+
|
38
|
+
file_content
|
39
|
+
end
|
40
|
+
|
41
|
+
result
|
42
|
+
rescue Thor::Error
|
43
|
+
false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -8,6 +8,7 @@ module RailsIcons
|
|
8
8
|
def config
|
9
9
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
10
|
options.default_variant = :regular
|
11
|
+
options.exclude_variants = []
|
11
12
|
|
12
13
|
setup_regular_config(options)
|
13
14
|
setup_solid_config(options)
|
@@ -18,6 +19,9 @@ module RailsIcons
|
|
18
19
|
def initializer_config
|
19
20
|
<<~RB.indent(2)
|
20
21
|
# Override Boxicons defaults
|
22
|
+
# config.libraries.boxicons.default_variant = "" # Set a default variant for Boxicons
|
23
|
+
# config.libraries.boxicons.exclude_variants = [] # Exclude specific variants
|
24
|
+
|
21
25
|
# config.libraries.boxicons.solid.css = "size-6"
|
22
26
|
# config.libraries.boxicons.solid.data = {}
|
23
27
|
|
@@ -8,6 +8,7 @@ module RailsIcons
|
|
8
8
|
def config
|
9
9
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
10
|
options.default_variant = nil
|
11
|
+
options.exclude_variants = []
|
11
12
|
|
12
13
|
options.default = default_options
|
13
14
|
end
|
@@ -16,6 +17,9 @@ module RailsIcons
|
|
16
17
|
def initializer_config
|
17
18
|
<<~RB.indent(2)
|
18
19
|
# Override Feather defaults
|
20
|
+
# config.libraries.feather.default_variant = "" # Feather has no variants, this is provided for backwards compatibility
|
21
|
+
# config.libraries.feather.exclude_variants = [] # Feather has no variants, this is provided for backwards compatibility
|
22
|
+
|
19
23
|
# config.libraries.feather.default.css = "size-6"
|
20
24
|
# config.libraries.feather.default.stroke_width = "2"
|
21
25
|
# config.libraries.feather.default.data = {}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsIcons
|
4
|
+
class Configuration
|
5
|
+
module Flags
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def config
|
9
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
|
+
options.default_variant = "landscape"
|
11
|
+
options.exclude_variants = []
|
12
|
+
|
13
|
+
setup_square_config(options)
|
14
|
+
setup_landscape_config(options)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def initializer_config
|
19
|
+
<<~RB.indent(2)
|
20
|
+
# Override Flags defaults
|
21
|
+
# config.libraries.flags.default_variant = "" # Set a default variant for Flags
|
22
|
+
# config.libraries.flags.exclude_variants = [:square, :landscape]
|
23
|
+
|
24
|
+
# config.libraries.flags.square.default.css = "size-6"
|
25
|
+
# config.libraries.flags.square.default.data = {}
|
26
|
+
|
27
|
+
# config.libraries.flags.landscape.default.css = "size-6"
|
28
|
+
# config.libraries.flags.landscape.default.data = {}
|
29
|
+
RB
|
30
|
+
end
|
31
|
+
|
32
|
+
def source
|
33
|
+
{
|
34
|
+
url: "https://github.com/lipis/flag-icons.git",
|
35
|
+
variants: {
|
36
|
+
square: "flags/1x1",
|
37
|
+
landscape: "flags/4x3"
|
38
|
+
}
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def setup_square_config(options)
|
45
|
+
options.square = ActiveSupport::OrderedOptions.new
|
46
|
+
options.square.default = default_square_options
|
47
|
+
end
|
48
|
+
|
49
|
+
def setup_landscape_config(options)
|
50
|
+
options.landscape = ActiveSupport::OrderedOptions.new
|
51
|
+
options.landscape.default = default_landscape_options
|
52
|
+
end
|
53
|
+
|
54
|
+
def default_square_options
|
55
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
56
|
+
options.css = "size-6"
|
57
|
+
options.data = {}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def default_landscape_options
|
62
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
63
|
+
options.css = "size-6"
|
64
|
+
options.data = {}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -8,6 +8,7 @@ module RailsIcons
|
|
8
8
|
def config
|
9
9
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
10
|
options.default_variant = :outline
|
11
|
+
options.exclude_variants = []
|
11
12
|
|
12
13
|
setup_outline_config(options)
|
13
14
|
setup_solid_config(options)
|
@@ -19,6 +20,9 @@ module RailsIcons
|
|
19
20
|
def initializer_config
|
20
21
|
<<~RB.indent(2)
|
21
22
|
# Override Heroicon defaults
|
23
|
+
# config.libraries.heroicons.default_variant = "" # Set a default variant for Heroicons
|
24
|
+
# config.libraries.heroicons.exclude_variants = [:mini, :micro] # Exclude specific variants
|
25
|
+
|
22
26
|
# config.libraries.heroicons.outline.default.css = "size-6"
|
23
27
|
# config.libraries.heroicons.outline.default.stroke_width = "1.5"
|
24
28
|
# config.libraries.heroicons.outline.default.data = {}
|
@@ -68,16 +72,16 @@ module RailsIcons
|
|
68
72
|
options.micro.default = default_micro_options
|
69
73
|
end
|
70
74
|
|
71
|
-
def
|
75
|
+
def default_outline_options
|
72
76
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
77
|
+
options.stroke_width = 1.5
|
73
78
|
options.css = "size-6"
|
74
79
|
options.data = {}
|
75
80
|
end
|
76
81
|
end
|
77
82
|
|
78
|
-
def
|
83
|
+
def default_solid_options
|
79
84
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
80
|
-
options.stroke_width = 1.5
|
81
85
|
options.css = "size-6"
|
82
86
|
options.data = {}
|
83
87
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsIcons
|
4
|
+
class Configuration
|
5
|
+
module Linear
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def config
|
9
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
|
+
options.default_variant = nil
|
11
|
+
options.exclude_variants = []
|
12
|
+
|
13
|
+
options.default = default_options
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def initializer_config
|
18
|
+
<<~RB.indent(2)
|
19
|
+
# Override Linear defaults
|
20
|
+
# config.libraries.linear.default_variant = "" # Set a default variant for Linear
|
21
|
+
# config.libraries.linear.exclude_variants = []
|
22
|
+
|
23
|
+
# config.libraries.linear.default.css = "size-6"
|
24
|
+
# config.libraries.linear.default.stroke_width = "2"
|
25
|
+
# config.libraries.linear.default.data = {}
|
26
|
+
RB
|
27
|
+
end
|
28
|
+
|
29
|
+
def source
|
30
|
+
{
|
31
|
+
url: "https://github.com/cjpatoilo/linearicons.git",
|
32
|
+
variants: {
|
33
|
+
".": "dist/svg" # Linear has no variants, store in the top directory
|
34
|
+
}
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def default_options
|
41
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
42
|
+
options.stroke_width = "2"
|
43
|
+
options.css = "size-6"
|
44
|
+
options.data = {}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -8,6 +8,7 @@ module RailsIcons
|
|
8
8
|
def config
|
9
9
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
10
|
options.default_variant = :outline
|
11
|
+
options.exclude_variants = []
|
11
12
|
|
12
13
|
setup_outline_config(options)
|
13
14
|
end
|
@@ -16,6 +17,9 @@ module RailsIcons
|
|
16
17
|
def initializer_config
|
17
18
|
<<~RB.indent(2)
|
18
19
|
# Override Lucide defaults
|
20
|
+
# config.libraries.lucide.default_variant = "" # Set a default variant for Lucide
|
21
|
+
# config.libraries.lucide.exclude_variants = [] # Exclude specific variants
|
22
|
+
|
19
23
|
# config.libraries.lucide.outline.default.css = "size-6"
|
20
24
|
# config.libraries.lucide.outline.default.stroke_width = "1.5"
|
21
25
|
# config.libraries.lucide.outline.default.data = {}
|
@@ -8,6 +8,7 @@ module RailsIcons
|
|
8
8
|
def config
|
9
9
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
10
|
options.default_variant = :regular
|
11
|
+
options.exclude_variants = []
|
11
12
|
|
12
13
|
setup_bold_config(options)
|
13
14
|
setup_duotone_config(options)
|
@@ -21,6 +22,9 @@ module RailsIcons
|
|
21
22
|
def initializer_config
|
22
23
|
<<~RB.indent(2)
|
23
24
|
# Override Phosphor defaults
|
25
|
+
# config.libraries.phosphor.default_variant = "" # Set a default variant for Phosphor
|
26
|
+
# config.libraries.phosphor.exclude_variants = [:duotone, :thin] # Exclude specific variants
|
27
|
+
|
24
28
|
# config.libraries.phosphor.bold.default.css = "size-6"
|
25
29
|
# config.libraries.phosphor.bold.default.data = {}
|
26
30
|
|
@@ -8,6 +8,7 @@ module RailsIcons
|
|
8
8
|
def config
|
9
9
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
10
|
options.default_variant = nil
|
11
|
+
options.exclude_variants = []
|
11
12
|
|
12
13
|
options.default = default_options
|
13
14
|
end
|
@@ -16,6 +17,8 @@ module RailsIcons
|
|
16
17
|
def initializer_config
|
17
18
|
<<~RB.indent(2)
|
18
19
|
# Override Radix defaults
|
20
|
+
# config.libraries.radix.default_variant = "" # Radix has no variants, this is provided for backwards compatibility
|
21
|
+
# config.libraries.radix.exclude_variants = [] # Radix has no variants, this is provided for backwards compatibility
|
19
22
|
# config.libraries.radix.default.css = "size-6"
|
20
23
|
# config.libraries.radix.default.stroke_width = "2"
|
21
24
|
# config.libraries.radix.default.data = {}
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsIcons
|
4
|
+
class Configuration
|
5
|
+
module Sidekickicons
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def config
|
9
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
|
+
options.default_variant = :outline
|
11
|
+
options.exclude_variants = []
|
12
|
+
|
13
|
+
setup_outline_config(options)
|
14
|
+
setup_solid_config(options)
|
15
|
+
setup_mini_config(options)
|
16
|
+
setup_micro_config(options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def initializer_config
|
21
|
+
<<~RB.indent(2)
|
22
|
+
# Override Sidekickicons defaults
|
23
|
+
# config.libraries.sidekickicons.default_variant = "" # Set a default variant for Sidekickicons
|
24
|
+
# config.libraries.sidekickicons.exclude_variants = [:mini, :micro] # Exclude specific variants
|
25
|
+
|
26
|
+
# config.libraries.sidekickicons.outline.default.css = "size-6"
|
27
|
+
# config.libraries.sidekickicons.outline.default.stroke_width = "1.5"
|
28
|
+
# config.libraries.sidekickicons.outline.default.data = {}
|
29
|
+
|
30
|
+
# config.libraries.sidekickicons.solid.default.css = "size-6"
|
31
|
+
# config.libraries.sidekickicons.solid.default.data = {}
|
32
|
+
|
33
|
+
# config.libraries.sidekickicons.mini.default.css = "size-5"
|
34
|
+
# config.libraries.sidekickicons.mini.default.data = {}
|
35
|
+
|
36
|
+
# config.libraries.sidekickicons.micro.default.css = "size-4"
|
37
|
+
# config.libraries.sidekickicons.micro.default.data = {}
|
38
|
+
RB
|
39
|
+
end
|
40
|
+
|
41
|
+
def source
|
42
|
+
{
|
43
|
+
url: "https://github.com/ndri/sidekickicons",
|
44
|
+
variants: {
|
45
|
+
outline: "optimized/24/outline",
|
46
|
+
solid: "optimized/24/solid",
|
47
|
+
mini: "optimized/20/solid",
|
48
|
+
micro: "optimized/16/solid"
|
49
|
+
}
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def setup_outline_config(options)
|
56
|
+
options.outline = ActiveSupport::OrderedOptions.new
|
57
|
+
options.outline.default = default_outline_options
|
58
|
+
end
|
59
|
+
|
60
|
+
def setup_solid_config(options)
|
61
|
+
options.solid = ActiveSupport::OrderedOptions.new
|
62
|
+
options.solid.default = default_solid_options
|
63
|
+
end
|
64
|
+
|
65
|
+
def setup_mini_config(options)
|
66
|
+
options.mini = ActiveSupport::OrderedOptions.new
|
67
|
+
options.mini.default = default_mini_options
|
68
|
+
end
|
69
|
+
|
70
|
+
def setup_micro_config(options)
|
71
|
+
options.micro = ActiveSupport::OrderedOptions.new
|
72
|
+
options.micro.default = default_micro_options
|
73
|
+
end
|
74
|
+
|
75
|
+
def default_solid_options
|
76
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
77
|
+
options.css = "size-6"
|
78
|
+
options.data = {}
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def default_outline_options
|
83
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
84
|
+
options.stroke_width = 1.5
|
85
|
+
options.css = "size-6"
|
86
|
+
options.data = {}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def default_mini_options
|
91
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
92
|
+
options.css = "size-5"
|
93
|
+
options.data = {}
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def default_micro_options
|
98
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
99
|
+
options.css = "size-4"
|
100
|
+
options.data = {}
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -8,6 +8,7 @@ module RailsIcons
|
|
8
8
|
def config
|
9
9
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
10
|
options.default_variant = :outline
|
11
|
+
options.exclude_variants = []
|
11
12
|
|
12
13
|
setup_outline_config(options)
|
13
14
|
setup_filled_config(options)
|
@@ -17,6 +18,10 @@ module RailsIcons
|
|
17
18
|
def initializer_config
|
18
19
|
<<~RB.indent(2)
|
19
20
|
# Override Tabler defaults
|
21
|
+
# config.libraries.tabler.default_variant = "" # Set a default variant for Tabler
|
22
|
+
# config.libraries.tabler.exclude_variants = [] # Exclude specific variants
|
23
|
+
|
24
|
+
# config.libraries.tabler.regular.default.css = "size-6"
|
20
25
|
# config.libraries.tabler.solid.default.css = "size-6"
|
21
26
|
# config.libraries.tabler.solid.default.data = {}
|
22
27
|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsIcons
|
4
|
+
class Configuration
|
5
|
+
module Weather
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def config
|
9
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
10
|
+
options.default_variant = nil
|
11
|
+
options.exclude_variants = []
|
12
|
+
|
13
|
+
options.default = default_options
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def initializer_config
|
18
|
+
<<~RB.indent(2)
|
19
|
+
# Override Weather defaults
|
20
|
+
# config.libraries.weather.default_variant = "" # Set a default variant for Wweather
|
21
|
+
# config.libraries.weather.exclude_variants = []
|
22
|
+
|
23
|
+
# config.libraries.weather.default.css = "size-6"
|
24
|
+
# config.libraries.weather.default.data = {}
|
25
|
+
RB
|
26
|
+
end
|
27
|
+
|
28
|
+
def source
|
29
|
+
{
|
30
|
+
url: "https://github.com/erikflowers/weather-icons.git",
|
31
|
+
variants: {
|
32
|
+
".": "svg" # Weather has no variants, store in the top directory
|
33
|
+
}
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def transformations
|
38
|
+
{
|
39
|
+
filenames: {
|
40
|
+
delete_prefix: ["wi-"]
|
41
|
+
}
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def default_options
|
48
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
49
|
+
options.css = "size-6"
|
50
|
+
options.data = {}
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/rails_icons/errors.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module RailsIcons
|
4
|
-
class
|
4
|
+
class IconNotFound < StandardError
|
5
|
+
def initialize(icon_name)
|
6
|
+
super("The icon `#{icon_name}` is not available. Please check the icon name and try again.")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class LibraryNotFound < StandardError
|
11
|
+
def initialize(library_name)
|
12
|
+
if library_name.empty?
|
13
|
+
super("No libraries were specified. Please choose from: #{RailsIcons.libraries.keys.to_sentence(last_word_connector: " or ")}")
|
14
|
+
else
|
15
|
+
super("The library `#{library_name}` is not available. Please check the library name and try again.")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
5
19
|
end
|
@@ -5,10 +5,10 @@ require_relative "../configuration"
|
|
5
5
|
module RailsIcons
|
6
6
|
module Helpers
|
7
7
|
module IconHelper
|
8
|
-
def icon(name, library: RailsIcons.configuration.default_library, variant: nil, **arguments)
|
8
|
+
def icon(name, library: RailsIcons.configuration.default_library, from: library, variant: nil, **arguments)
|
9
9
|
RailsIcons::Icon.new(
|
10
10
|
name: name,
|
11
|
-
library: library,
|
11
|
+
library: from || library,
|
12
12
|
variant: variant,
|
13
13
|
arguments: arguments
|
14
14
|
).svg
|
data/lib/rails_icons/icon.rb
CHANGED
@@ -2,7 +2,9 @@ require "rails_icons/icon/file_path"
|
|
2
2
|
require "rails_icons/icon/attributes"
|
3
3
|
|
4
4
|
class RailsIcons::Icon
|
5
|
-
def initialize(name:, library:, arguments:, variant: nil)
|
5
|
+
def initialize(name:, library:, arguments:, variant: nil, config: RailsIcons.configuration)
|
6
|
+
@config = config # set first, config is used during initialization
|
7
|
+
|
6
8
|
@name = name
|
7
9
|
@library = library.to_s.inquiry
|
8
10
|
@variant = (variant || set_variant).to_s
|
@@ -10,7 +12,7 @@ class RailsIcons::Icon
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def svg
|
13
|
-
raise RailsIcons::
|
15
|
+
raise RailsIcons::IconNotFound, error_message unless File.exist?(file_path)
|
14
16
|
|
15
17
|
Nokogiri::HTML::DocumentFragment.parse(File.read(file_path))
|
16
18
|
.at_css("svg")
|
@@ -22,8 +24,8 @@ class RailsIcons::Icon
|
|
22
24
|
private
|
23
25
|
|
24
26
|
def set_variant
|
25
|
-
|
26
|
-
|
27
|
+
@config.libraries.dig(@library.to_sym, :default_variant).presence ||
|
28
|
+
@config.default_variant.presence
|
27
29
|
end
|
28
30
|
|
29
31
|
def error_message
|
@@ -55,7 +57,7 @@ class RailsIcons::Icon
|
|
55
57
|
def default(key) = library_attributes.dig(:default, key)
|
56
58
|
|
57
59
|
def library_attributes
|
58
|
-
custom_library? ? custom_library :
|
60
|
+
custom_library? ? custom_library : @config.libraries.dig(@library, @variant) || {}
|
59
61
|
end
|
60
62
|
|
61
63
|
def custom_library
|
@@ -65,7 +67,7 @@ class RailsIcons::Icon
|
|
65
67
|
&.dig("custom")
|
66
68
|
&.dig(@library.to_sym)&.with_defaults(
|
67
69
|
{
|
68
|
-
path: [
|
70
|
+
path: [@config.destination_path, @library].join("/")
|
69
71
|
}
|
70
72
|
) || {}
|
71
73
|
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
require_relative "configuration/animated"
|
2
2
|
require_relative "configuration/boxicons"
|
3
3
|
require_relative "configuration/feather"
|
4
|
+
require_relative "configuration/flags"
|
4
5
|
require_relative "configuration/heroicons"
|
6
|
+
require_relative "configuration/linear"
|
5
7
|
require_relative "configuration/lucide"
|
6
8
|
require_relative "configuration/phosphor"
|
7
9
|
require_relative "configuration/radix"
|
10
|
+
require_relative "configuration/sidekickicons"
|
8
11
|
require_relative "configuration/tabler"
|
12
|
+
require_relative "configuration/weather"
|
9
13
|
|
10
14
|
module RailsIcons
|
11
15
|
extend self
|
@@ -14,11 +18,15 @@ module RailsIcons
|
|
14
18
|
{
|
15
19
|
boxicons: RailsIcons::Configuration::Boxicons,
|
16
20
|
feather: RailsIcons::Configuration::Feather,
|
21
|
+
flags: RailsIcons::Configuration::Flags,
|
17
22
|
heroicons: RailsIcons::Configuration::Heroicons,
|
23
|
+
linear: RailsIcons::Configuration::Linear,
|
18
24
|
lucide: RailsIcons::Configuration::Lucide,
|
19
25
|
phosphor: RailsIcons::Configuration::Phosphor,
|
20
26
|
radix: RailsIcons::Configuration::Radix,
|
21
|
-
|
27
|
+
sidekickicons: RailsIcons::Configuration::Sidekickicons,
|
28
|
+
tabler: RailsIcons::Configuration::Tabler,
|
29
|
+
weather: RailsIcons::Configuration::Weather
|
22
30
|
}
|
23
31
|
end
|
24
32
|
end
|
@@ -6,6 +6,8 @@ require "rails_icons/sync/process_variants"
|
|
6
6
|
module RailsIcons
|
7
7
|
module Sync
|
8
8
|
class Engine < Rails::Generators::Base
|
9
|
+
hide!
|
10
|
+
|
9
11
|
def initialize(name)
|
10
12
|
super
|
11
13
|
|
@@ -32,12 +34,12 @@ module RailsIcons
|
|
32
34
|
|
33
35
|
private
|
34
36
|
|
35
|
-
TEMP_DIRECTORY = Rails.root.join("tmp/
|
37
|
+
TEMP_DIRECTORY = Rails.root.join("tmp/rails_icons").freeze
|
36
38
|
|
37
39
|
def clone_repository
|
38
40
|
raise "[Rails Icons] Failed to clone repository" unless system("git clone '#{@library[:url]}' '#{@temp_directory}'")
|
39
41
|
|
40
|
-
say "'#{@name}' repository cloned successfully."
|
42
|
+
say "[Rails Icons] '#{@name}' repository cloned successfully."
|
41
43
|
end
|
42
44
|
|
43
45
|
def process_variants = Sync::ProcessVariants.new(@temp_directory, @name, @library).process
|
@@ -6,14 +6,19 @@ require "rails_icons/sync/transformations"
|
|
6
6
|
module RailsIcons
|
7
7
|
module Sync
|
8
8
|
class ProcessVariants < Rails::Generators::Base
|
9
|
+
hide!
|
10
|
+
|
9
11
|
def initialize(temp_directory, name, library)
|
10
12
|
@temp_directory, @name, @library = temp_directory, name, library
|
11
13
|
end
|
12
14
|
|
13
15
|
def process
|
14
16
|
original_variants = Dir.children(@temp_directory)
|
17
|
+
excluded_variants = RailsIcons.configuration.libraries.dig(@name.to_sym)&.exclude_variants || []
|
15
18
|
|
16
19
|
@library[:variants].each do |variant_name, variant_source_path|
|
20
|
+
next if excluded_variants.include?(variant_name)
|
21
|
+
|
17
22
|
source = File.join(@temp_directory, variant_source_path)
|
18
23
|
destination = File.join(@temp_directory, variant_name.to_s)
|
19
24
|
|
@@ -26,7 +31,8 @@ module RailsIcons
|
|
26
31
|
apply_transformations_to(destination)
|
27
32
|
end
|
28
33
|
|
29
|
-
|
34
|
+
remove_files_and_folders_for(original_variants)
|
35
|
+
remove_previously_downloaded(excluded_variants)
|
30
36
|
|
31
37
|
say "[Rails Icons] Icon variants processed successfully"
|
32
38
|
end
|
@@ -50,12 +56,18 @@ module RailsIcons
|
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
53
|
-
def
|
59
|
+
def remove_files_and_folders_for(paths)
|
54
60
|
paths.each do |path|
|
55
61
|
FileUtils.rm_rf(File.join(@temp_directory, path))
|
56
62
|
end
|
57
63
|
end
|
58
64
|
|
65
|
+
def remove_previously_downloaded(variants)
|
66
|
+
variants.each do |variant|
|
67
|
+
FileUtils.rm_rf(File.join(RailsIcons.configuration.destination_path, @name, variant.to_s))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
59
71
|
def transformations
|
60
72
|
RailsIcons.libraries.dig(@name.to_sym)&.try(:transformations) || {}
|
61
73
|
end
|
data/lib/rails_icons/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_icons
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rails Designer Developers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -70,15 +70,20 @@ files:
|
|
70
70
|
- lib/generators/rails_icons/sync_generator.rb
|
71
71
|
- lib/generators/rails_icons/templates/initializer.rb.tt
|
72
72
|
- lib/rails_icons.rb
|
73
|
+
- lib/rails_icons/base_generator.rb
|
73
74
|
- lib/rails_icons/configuration.rb
|
74
75
|
- lib/rails_icons/configuration/animated.rb
|
75
76
|
- lib/rails_icons/configuration/boxicons.rb
|
76
77
|
- lib/rails_icons/configuration/feather.rb
|
78
|
+
- lib/rails_icons/configuration/flags.rb
|
77
79
|
- lib/rails_icons/configuration/heroicons.rb
|
80
|
+
- lib/rails_icons/configuration/linear.rb
|
78
81
|
- lib/rails_icons/configuration/lucide.rb
|
79
82
|
- lib/rails_icons/configuration/phosphor.rb
|
80
83
|
- lib/rails_icons/configuration/radix.rb
|
84
|
+
- lib/rails_icons/configuration/sidekickicons.rb
|
81
85
|
- lib/rails_icons/configuration/tabler.rb
|
86
|
+
- lib/rails_icons/configuration/weather.rb
|
82
87
|
- lib/rails_icons/engine.rb
|
83
88
|
- lib/rails_icons/errors.rb
|
84
89
|
- lib/rails_icons/helpers/icon_helper.rb
|