rails_icons 1.1.0 → 1.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -5
- data/README.md +17 -13
- data/lib/generators/rails_icons/initializer_generator.rb +8 -4
- 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 +20 -0
- data/lib/rails_icons/configuration/boxicons.rb +3 -0
- data/lib/rails_icons/configuration/feather.rb +3 -0
- data/lib/rails_icons/configuration/flags.rb +68 -0
- data/lib/rails_icons/configuration/heroicons.rb +6 -3
- data/lib/rails_icons/configuration/linear.rb +48 -0
- data/lib/rails_icons/configuration/lucide.rb +3 -0
- data/lib/rails_icons/configuration/phosphor.rb +3 -0
- data/lib/rails_icons/configuration/radix.rb +2 -0
- data/lib/rails_icons/configuration/sidekickicons.rb +104 -0
- data/lib/rails_icons/configuration/tabler.rb +4 -0
- data/lib/rails_icons/configuration/weather.rb +54 -0
- data/lib/rails_icons/errors.rb +15 -1
- data/lib/rails_icons/icon/file_path.rb +1 -1
- data/lib/rails_icons/icon.rb +1 -1
- data/lib/rails_icons/libraries.rb +9 -1
- data/lib/rails_icons/sync/engine.rb +2 -2
- data/lib/rails_icons/sync/process_variants.rb +12 -2
- 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: 6413197bc61eb646096a2c6abbf25696fd6eb8c986d85cc08519509066f83e85
|
4
|
+
data.tar.gz: e1a1f952e9f499a39adba3958be58fc7f7aafbd779397ce5b7d62c4e1d16cb9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37de7ecd41860ff20570285ba3910192c5e52273a0991ae06f51a6d823078031bb0304fce7fae49a8866d5b71c2caf3a99f6123b1cfa9209b61b35acf86e1018
|
7
|
+
data.tar.gz: 4590aceead66f68e8b890a53823eb9fe8c959c58678631f854bedf49c763c81deda9de0175763b26fb2ad135be3d561e8ab3dd5a2c19b921cd06fad710330884
|
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.2.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
@@ -40,7 +40,7 @@ rails generate rails_icons:install --libraries=LIBRARY_NAME
|
|
40
40
|
```bash
|
41
41
|
rails generate rails_icons:install --libraries=heroicons
|
42
42
|
|
43
|
-
Or multiple at once
|
43
|
+
# Or multiple at once
|
44
44
|
rails generate rails_icons:install --libraries=heroicons lucide
|
45
45
|
```
|
46
46
|
|
@@ -54,16 +54,16 @@ icon "check"
|
|
54
54
|
# Use another variant
|
55
55
|
icon "check", variant: "solid"
|
56
56
|
|
57
|
-
# Set library
|
57
|
+
# Set library explicitly
|
58
58
|
icon "check", library: "heroicons"
|
59
59
|
|
60
60
|
# Add CSS
|
61
61
|
icon "check", class: "text-green-500"
|
62
62
|
|
63
63
|
# 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
64
|
icon "check", class: ["size-4", "bg-red-500": !verified?, "bg-green-500": verified?]
|
65
|
+
# ↳ Article: https://railsdesigner.com/conditional-css-classes-in-rails/
|
66
|
+
# ↳ Documentation: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-token_list
|
67
67
|
|
68
68
|
# Add data attributes
|
69
69
|
icon "check", data: { controller: "swap" }
|
@@ -75,13 +75,17 @@ icon "check", stroke_width: 2
|
|
75
75
|
|
76
76
|
## First-party libraries
|
77
77
|
|
78
|
-
- [Boxicons](https://
|
79
|
-
- [Feather](https://
|
80
|
-
- [
|
81
|
-
- [
|
82
|
-
- [
|
83
|
-
- [
|
84
|
-
- [
|
78
|
+
- [Boxicons](https://railsdesigner.com/rails-icons/boxicons/) (1600+ icons)
|
79
|
+
- [Feather](https://railsdesigner.com/rails-icons/feather/) (280+ icons)
|
80
|
+
- [Flags](https://railsdesigner.com/rails-icons/flags/) (540+ icons)
|
81
|
+
- [Heroicons](https://railsdesigner.com/rails-icons/heroicons/) (300+ icons)
|
82
|
+
- [Linear](https://railsdesigner.com/rails-icons/linear/) (170+ icons)
|
83
|
+
- [Lucide](https://railsdesigner.com/rails-icons/lucide/) (1500+ icons)
|
84
|
+
- [Phosphor](https://railsdesigner.com/rails-icons/phosphor/) (9000+ icons)
|
85
|
+
- [Radix](https://railsdesigner.com/rails-icons/radix/) (300+ icons)
|
86
|
+
- [SidekickIcons](https://railsdesigner.com/rails-icons/sidekickicons/) (49 icons, complementing [Heroicons](https://railsdesigner.com/rails-icons/heroicons/))
|
87
|
+
- [Tabler](https://railsdesigner.com/rails-icons/tabler/) (5700+ icons)
|
88
|
+
- [Weather](https://railsdesigner.com/rails-icons/weather/) (215+ icons)
|
85
89
|
|
86
90
|
|
87
91
|
## Animated icons
|
@@ -93,7 +97,7 @@ Rails Icons also includes a few animated icons. Great for loading states and so
|
|
93
97
|
- `fading-dots`
|
94
98
|
- `bouncing-dots`
|
95
99
|
|
96
|
-
Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as
|
100
|
+
Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as the others libraries are available.
|
97
101
|
|
98
102
|
|
99
103
|
## Custom icon library
|
@@ -111,7 +115,7 @@ icon "apple", library: "simple_icons", class: "text-black"
|
|
111
115
|
|
112
116
|
## Sync icons
|
113
117
|
|
114
|
-
To sync all
|
118
|
+
To sync all libraries, run
|
115
119
|
```bash
|
116
120
|
rails generate rails_icons:sync
|
117
121
|
```
|
@@ -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
|
|
@@ -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,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsIcons
|
4
|
+
class BaseGenerator < Rails::Generators::Base
|
5
|
+
def initialize(*arguments)
|
6
|
+
super(*arguments)
|
7
|
+
|
8
|
+
validate!
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def validate!
|
14
|
+
raise RailsIcons::LibraryNotFound.new("") if options.libraries.empty?
|
15
|
+
raise RailsIcons::LibraryNotFound.new(invalid_libraries.join(", ")) if invalid_libraries.any?
|
16
|
+
end
|
17
|
+
|
18
|
+
def invalid_libraries = options.libraries.map(&:to_sym).map(&:downcase).reject { RailsIcons.libraries.key?(_1) }
|
19
|
+
end
|
20
|
+
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,8 @@ module RailsIcons
|
|
18
19
|
def initializer_config
|
19
20
|
<<~RB.indent(2)
|
20
21
|
# Override Boxicons defaults
|
22
|
+
# config.libraries.boxicons.exclude_variants = [] # Exclude specific variants
|
23
|
+
|
21
24
|
# config.libraries.boxicons.solid.css = "size-6"
|
22
25
|
# config.libraries.boxicons.solid.data = {}
|
23
26
|
|
@@ -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 Feather defaults
|
20
|
+
# config.libraries.feather.exclude_variants = [] # Feather has no variants, this is provided for backwards compatibility
|
21
|
+
|
19
22
|
# config.libraries.feather.default.css = "size-6"
|
20
23
|
# config.libraries.feather.default.stroke_width = "2"
|
21
24
|
# config.libraries.feather.default.data = {}
|
@@ -0,0 +1,68 @@
|
|
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.exclude_variants = [:square, :landscape]
|
22
|
+
|
23
|
+
# config.libraries.flags.square.default.css = "size-6"
|
24
|
+
# config.libraries.flags.square.default.data = {}
|
25
|
+
|
26
|
+
# config.libraries.flags.landscape.default.css = "size-6"
|
27
|
+
# config.libraries.flags.landscape.default.data = {}
|
28
|
+
RB
|
29
|
+
end
|
30
|
+
|
31
|
+
def source
|
32
|
+
{
|
33
|
+
url: "https://github.com/lipis/flag-icons.git",
|
34
|
+
variants: {
|
35
|
+
square: "flags/1x1",
|
36
|
+
landscape: "flags/4x3"
|
37
|
+
}
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def setup_square_config(options)
|
44
|
+
options.square = ActiveSupport::OrderedOptions.new
|
45
|
+
options.square.default = default_square_options
|
46
|
+
end
|
47
|
+
|
48
|
+
def setup_landscape_config(options)
|
49
|
+
options.landscape = ActiveSupport::OrderedOptions.new
|
50
|
+
options.landscape.default = default_landscape_options
|
51
|
+
end
|
52
|
+
|
53
|
+
def default_square_options
|
54
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
55
|
+
options.css = "size-6"
|
56
|
+
options.data = {}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def default_landscape_options
|
61
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
62
|
+
options.css = "size-6"
|
63
|
+
options.data = {}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
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,8 @@ module RailsIcons
|
|
19
20
|
def initializer_config
|
20
21
|
<<~RB.indent(2)
|
21
22
|
# Override Heroicon defaults
|
23
|
+
# config.libraries.heroicons.exclude_variants = [:mini, :micro] # Exclude specific variants
|
24
|
+
|
22
25
|
# config.libraries.heroicons.outline.default.css = "size-6"
|
23
26
|
# config.libraries.heroicons.outline.default.stroke_width = "1.5"
|
24
27
|
# config.libraries.heroicons.outline.default.data = {}
|
@@ -68,16 +71,16 @@ module RailsIcons
|
|
68
71
|
options.micro.default = default_micro_options
|
69
72
|
end
|
70
73
|
|
71
|
-
def
|
74
|
+
def default_outline_options
|
72
75
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
76
|
+
options.stroke_width = 1.5
|
73
77
|
options.css = "size-6"
|
74
78
|
options.data = {}
|
75
79
|
end
|
76
80
|
end
|
77
81
|
|
78
|
-
def
|
82
|
+
def default_solid_options
|
79
83
|
ActiveSupport::OrderedOptions.new.tap do |options|
|
80
|
-
options.stroke_width = 1.5
|
81
84
|
options.css = "size-6"
|
82
85
|
options.data = {}
|
83
86
|
end
|
@@ -0,0 +1,48 @@
|
|
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.exclude_variants = []
|
21
|
+
|
22
|
+
# config.libraries.linear.default.css = "size-6"
|
23
|
+
# config.libraries.linear.default.stroke_width = "2"
|
24
|
+
# config.libraries.linear.default.data = {}
|
25
|
+
RB
|
26
|
+
end
|
27
|
+
|
28
|
+
def source
|
29
|
+
{
|
30
|
+
url: "https://github.com/cjpatoilo/linearicons.git",
|
31
|
+
variants: {
|
32
|
+
".": "dist/svg" # Linear has no variants, store in the top directory
|
33
|
+
}
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def default_options
|
40
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
41
|
+
options.stroke_width = "2"
|
42
|
+
options.css = "size-6"
|
43
|
+
options.data = {}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
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,8 @@ module RailsIcons
|
|
16
17
|
def initializer_config
|
17
18
|
<<~RB.indent(2)
|
18
19
|
# Override Lucide defaults
|
20
|
+
# config.libraries.lucide.exclude_variants = [] # Exclude specific variants
|
21
|
+
|
19
22
|
# config.libraries.lucide.outline.default.css = "size-6"
|
20
23
|
# config.libraries.lucide.outline.default.stroke_width = "1.5"
|
21
24
|
# 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,8 @@ module RailsIcons
|
|
21
22
|
def initializer_config
|
22
23
|
<<~RB.indent(2)
|
23
24
|
# Override Phosphor defaults
|
25
|
+
# config.libraries.phosphor.exclude_variants = [:duotone, :thin] # Exclude specific variants
|
26
|
+
|
24
27
|
# config.libraries.phosphor.bold.default.css = "size-6"
|
25
28
|
# config.libraries.phosphor.bold.default.data = {}
|
26
29
|
|
@@ -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,7 @@ module RailsIcons
|
|
16
17
|
def initializer_config
|
17
18
|
<<~RB.indent(2)
|
18
19
|
# Override Radix defaults
|
20
|
+
# config.libraries.radix.exclude_variants = [] # Radix has no variants, this is provided for backwards compatibility
|
19
21
|
# config.libraries.radix.default.css = "size-6"
|
20
22
|
# config.libraries.radix.default.stroke_width = "2"
|
21
23
|
# config.libraries.radix.default.data = {}
|
@@ -0,0 +1,104 @@
|
|
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.exclude_variants = [:mini, :micro] # Exclude specific variants
|
24
|
+
|
25
|
+
# config.libraries.sidekickicons.outline.default.css = "size-6"
|
26
|
+
# config.libraries.sidekickicons.outline.default.stroke_width = "1.5"
|
27
|
+
# config.libraries.sidekickicons.outline.default.data = {}
|
28
|
+
|
29
|
+
# config.libraries.sidekickicons.solid.default.css = "size-6"
|
30
|
+
# config.libraries.sidekickicons.solid.default.data = {}
|
31
|
+
|
32
|
+
# config.libraries.sidekickicons.mini.default.css = "size-5"
|
33
|
+
# config.libraries.sidekickicons.mini.default.data = {}
|
34
|
+
|
35
|
+
# config.libraries.sidekickicons.micro.default.css = "size-4"
|
36
|
+
# config.libraries.sidekickicons.micro.default.data = {}
|
37
|
+
RB
|
38
|
+
end
|
39
|
+
|
40
|
+
def source
|
41
|
+
{
|
42
|
+
url: "https://github.com/ndri/sidekickicons",
|
43
|
+
variants: {
|
44
|
+
outline: "optimized/24/outline",
|
45
|
+
solid: "optimized/24/solid",
|
46
|
+
mini: "optimized/20/solid",
|
47
|
+
micro: "optimized/16/solid"
|
48
|
+
}
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def setup_outline_config(options)
|
55
|
+
options.outline = ActiveSupport::OrderedOptions.new
|
56
|
+
options.outline.default = default_outline_options
|
57
|
+
end
|
58
|
+
|
59
|
+
def setup_solid_config(options)
|
60
|
+
options.solid = ActiveSupport::OrderedOptions.new
|
61
|
+
options.solid.default = default_solid_options
|
62
|
+
end
|
63
|
+
|
64
|
+
def setup_mini_config(options)
|
65
|
+
options.mini = ActiveSupport::OrderedOptions.new
|
66
|
+
options.mini.default = default_mini_options
|
67
|
+
end
|
68
|
+
|
69
|
+
def setup_micro_config(options)
|
70
|
+
options.micro = ActiveSupport::OrderedOptions.new
|
71
|
+
options.micro.default = default_micro_options
|
72
|
+
end
|
73
|
+
|
74
|
+
def default_solid_options
|
75
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
76
|
+
options.css = "size-6"
|
77
|
+
options.data = {}
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def default_outline_options
|
82
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
83
|
+
options.stroke_width = 1.5
|
84
|
+
options.css = "size-6"
|
85
|
+
options.data = {}
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def default_mini_options
|
90
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
91
|
+
options.css = "size-5"
|
92
|
+
options.data = {}
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def default_micro_options
|
97
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
98
|
+
options.css = "size-4"
|
99
|
+
options.data = {}
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
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,9 @@ module RailsIcons
|
|
17
18
|
def initializer_config
|
18
19
|
<<~RB.indent(2)
|
19
20
|
# Override Tabler defaults
|
21
|
+
# config.libraries.tabler.exclude_variants = [] # Exclude specific variants
|
22
|
+
|
23
|
+
# config.libraries.tabler.regular.default.css = "size-6"
|
20
24
|
# config.libraries.tabler.solid.default.css = "size-6"
|
21
25
|
# config.libraries.tabler.solid.default.data = {}
|
22
26
|
|
@@ -0,0 +1,54 @@
|
|
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.exclude_variants = []
|
21
|
+
|
22
|
+
# config.libraries.weather.default.css = "size-6"
|
23
|
+
# config.libraries.weather.default.data = {}
|
24
|
+
RB
|
25
|
+
end
|
26
|
+
|
27
|
+
def source
|
28
|
+
{
|
29
|
+
url: "https://github.com/erikflowers/weather-icons.git",
|
30
|
+
variants: {
|
31
|
+
".": "svg" # Weather has no variants, store in the top directory
|
32
|
+
}
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def transformations
|
37
|
+
{
|
38
|
+
filenames: {
|
39
|
+
delete_prefix: ["wi-"]
|
40
|
+
}
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def default_options
|
47
|
+
ActiveSupport::OrderedOptions.new.tap do |options|
|
48
|
+
options.css = "size-6"
|
49
|
+
options.data = {}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
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
|
data/lib/rails_icons/icon.rb
CHANGED
@@ -10,7 +10,7 @@ class RailsIcons::Icon
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def svg
|
13
|
-
raise RailsIcons::
|
13
|
+
raise RailsIcons::IconNotFound, error_message unless File.exist?(file_path)
|
14
14
|
|
15
15
|
Nokogiri::HTML::DocumentFragment.parse(File.read(file_path))
|
16
16
|
.at_css("svg")
|
@@ -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
|
@@ -32,12 +32,12 @@ module RailsIcons
|
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
|
-
TEMP_DIRECTORY = Rails.root.join("tmp/
|
35
|
+
TEMP_DIRECTORY = Rails.root.join("tmp/rails_icons").freeze
|
36
36
|
|
37
37
|
def clone_repository
|
38
38
|
raise "[Rails Icons] Failed to clone repository" unless system("git clone '#{@library[:url]}' '#{@temp_directory}'")
|
39
39
|
|
40
|
-
say "'#{@name}' repository cloned successfully."
|
40
|
+
say "[Rails Icons] '#{@name}' repository cloned successfully."
|
41
41
|
end
|
42
42
|
|
43
43
|
def process_variants = Sync::ProcessVariants.new(@temp_directory, @name, @library).process
|
@@ -12,8 +12,11 @@ module RailsIcons
|
|
12
12
|
|
13
13
|
def process
|
14
14
|
original_variants = Dir.children(@temp_directory)
|
15
|
+
excluded_variants = RailsIcons.configuration.libraries.dig(@name.to_sym)&.exclude_variants || []
|
15
16
|
|
16
17
|
@library[:variants].each do |variant_name, variant_source_path|
|
18
|
+
next if excluded_variants.include?(variant_name)
|
19
|
+
|
17
20
|
source = File.join(@temp_directory, variant_source_path)
|
18
21
|
destination = File.join(@temp_directory, variant_name.to_s)
|
19
22
|
|
@@ -26,7 +29,8 @@ module RailsIcons
|
|
26
29
|
apply_transformations_to(destination)
|
27
30
|
end
|
28
31
|
|
29
|
-
|
32
|
+
remove_files_and_folders_for(original_variants)
|
33
|
+
remove_previously_downloaded(excluded_variants)
|
30
34
|
|
31
35
|
say "[Rails Icons] Icon variants processed successfully"
|
32
36
|
end
|
@@ -50,12 +54,18 @@ module RailsIcons
|
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
53
|
-
def
|
57
|
+
def remove_files_and_folders_for(paths)
|
54
58
|
paths.each do |path|
|
55
59
|
FileUtils.rm_rf(File.join(@temp_directory, path))
|
56
60
|
end
|
57
61
|
end
|
58
62
|
|
63
|
+
def remove_previously_downloaded(variants)
|
64
|
+
variants.each do |variant|
|
65
|
+
FileUtils.rm_rf(File.join(RailsIcons.configuration.destination_path, @name, variant.to_s))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
59
69
|
def transformations
|
60
70
|
RailsIcons.libraries.dig(@name.to_sym)&.try(:transformations) || {}
|
61
71
|
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.2.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-03-03 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
|