rails_icons 1.0.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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +6 -5
  3. data/README.md +27 -13
  4. data/lib/generators/rails_icons/initializer_generator.rb +24 -65
  5. data/lib/generators/rails_icons/install_generator.rb +8 -4
  6. data/lib/generators/rails_icons/sync_generator.rb +12 -43
  7. data/lib/rails_icons/base_generator.rb +20 -0
  8. data/lib/rails_icons/configuration/animated.rb +3 -1
  9. data/lib/rails_icons/configuration/boxicons.rb +77 -0
  10. data/lib/rails_icons/configuration/feather.rb +24 -1
  11. data/lib/rails_icons/configuration/flags.rb +68 -0
  12. data/lib/rails_icons/configuration/heroicons.rb +39 -4
  13. data/lib/rails_icons/configuration/linear.rb +48 -0
  14. data/lib/rails_icons/configuration/lucide.rb +24 -1
  15. data/lib/rails_icons/configuration/phosphor.rb +144 -0
  16. data/lib/rails_icons/configuration/radix.rb +46 -0
  17. data/lib/rails_icons/configuration/sidekickicons.rb +104 -0
  18. data/lib/rails_icons/configuration/tabler.rb +29 -1
  19. data/lib/rails_icons/configuration/weather.rb +54 -0
  20. data/lib/rails_icons/configuration.rb +4 -11
  21. data/lib/rails_icons/errors.rb +15 -1
  22. data/lib/rails_icons/icon/attributes.rb +7 -1
  23. data/lib/rails_icons/icon/file_path.rb +57 -0
  24. data/lib/rails_icons/icon.rb +4 -18
  25. data/lib/rails_icons/libraries.rb +28 -41
  26. data/lib/rails_icons/sync/engine.rb +75 -0
  27. data/lib/rails_icons/sync/process_variants.rb +74 -0
  28. data/lib/rails_icons/sync/transformations.rb +27 -0
  29. data/lib/rails_icons/version.rb +1 -1
  30. data/lib/rails_icons.rb +1 -1
  31. metadata +15 -4
  32. data/lib/generators/rails_icons/sync/engine.rb +0 -87
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 50dffad405d19a7a365d8dd5684422ac4b0b31fc5e8c9e001d841c2625ed0f66
4
- data.tar.gz: ac27f4feb6a7dae8d240896cbcad704675f566080aea2a1df4bad68608bcd0ae
3
+ metadata.gz: 6413197bc61eb646096a2c6abbf25696fd6eb8c986d85cc08519509066f83e85
4
+ data.tar.gz: e1a1f952e9f499a39adba3958be58fc7f7aafbd779397ce5b7d62c4e1d16cb9c
5
5
  SHA512:
6
- metadata.gz: 1b3b458095eb630a39f217be671c6bf58dc400c6e5caea9e7eee7ceebc51df6329dced01d3451f483b936f3fb5d59aaeea05de519565e36c12de3aa80abfbeb3
7
- data.tar.gz: 60a93aed59ef5c518c39d95b3814062a02240aa86cbfe34ca771164504747ea965fae97a3456cc50dc06e620c04ccc2c5d7825d7724ec7f3850abd583be0cf91
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.0.0)
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.5)
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.16.4)
119
+ nokogiri (1.18.3)
120
120
  mini_portile2 (~> 2.8.2)
121
121
  racc (~> 1.4)
122
- nokogiri (1.16.4-arm64-darwin)
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.7.3)
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
@@ -16,7 +16,11 @@ The icons are sourced directly from their respective GitHub repositories, ensuri
16
16
  **Sponsored By [Rails Designer](https://railsdesigner.com/)**
17
17
 
18
18
  <a href="https://railsdesigner.com/" target="_blank">
19
- <img src="https://raw.githubusercontent.com/Rails-Designer/rails_icons/main/docs/rails_designer_icon.jpg" alt="Rails Designer logo" width="240" />
19
+ <picture>
20
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Rails-Designer/rails_icons/HEAD/.github/logo-dark.svg">
21
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/Rails-Designer/rails_icons/HEAD/.github/logo-light.svg">
22
+ <img alt="Rails Designer" src="https://raw.githubusercontent.com/Rails-Designer/rails_icons/HEAD/.github/logo-light.svg" width="240" style="max-width: 100%;">
23
+ </picture>
20
24
  </a>
21
25
 
22
26
 
@@ -36,7 +40,7 @@ rails generate rails_icons:install --libraries=LIBRARY_NAME
36
40
  ```bash
37
41
  rails generate rails_icons:install --libraries=heroicons
38
42
 
39
- Or multiple at once
43
+ # Or multiple at once
40
44
  rails generate rails_icons:install --libraries=heroicons lucide
41
45
  ```
42
46
 
@@ -50,12 +54,17 @@ icon "check"
50
54
  # Use another variant
51
55
  icon "check", variant: "solid"
52
56
 
53
- # Set library explictly
57
+ # Set library explicitly
54
58
  icon "check", library: "heroicons"
55
59
 
56
60
  # Add CSS
57
61
  icon "check", class: "text-green-500"
58
62
 
63
+ # Add CSS with class_names
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
+
59
68
  # Add data attributes
60
69
  icon "check", data: { controller: "swap" }
61
70
 
@@ -66,10 +75,17 @@ icon "check", stroke_width: 2
66
75
 
67
76
  ## First-party libraries
68
77
 
69
- - [Feather](https://github.com/feathericons/feather)
70
- - [Heroicons](https://github.com/tailwindlabs/heroicons)
71
- - [Lucide](https://github.com/lucide-icons/lucide)
72
- - [Tabler](https://github.com/tabler/tabler-icons)
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)
73
89
 
74
90
 
75
91
  ## Animated icons
@@ -81,7 +97,7 @@ Rails Icons also includes a few animated icons. Great for loading states and so
81
97
  - `fading-dots`
82
98
  - `bouncing-dots`
83
99
 
84
- Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as other libraries are available.
100
+ Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as the others libraries are available.
85
101
 
86
102
 
87
103
  ## Custom icon library
@@ -92,7 +108,6 @@ Need to use an icon from another library?
92
108
  2. add the (SVG) icons to the created directory **app/assets/svg/icons/simple_icons**;
93
109
 
94
110
  Every custom icon can now be used with the same interface as first-party icon libraries.
95
-
96
111
  ```ruby
97
112
  icon "apple", library: "simple_icons", class: "text-black"
98
113
  ```
@@ -100,13 +115,12 @@ icon "apple", library: "simple_icons", class: "text-black"
100
115
 
101
116
  ## Sync icons
102
117
 
103
- If a library gets updated, sync the icons to your app by running
104
-
118
+ To sync all libraries, run
105
119
  ```bash
106
- rails generate rails_icons:sync --libraries=LIBRARY_NAME
120
+ rails generate rails_icons:sync
107
121
  ```
108
122
 
109
- **Example**
123
+ To sync only a specific library, run
110
124
  ```bash
111
125
  rails generate rails_icons:sync --libraries=heroicons
112
126
 
@@ -1,11 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rails_icons/base_generator"
4
+
3
5
  module RailsIcons
4
- class InitializerGenerator < Rails::Generators::Base
6
+ class InitializerGenerator < RailsIcons::BaseGenerator
5
7
  source_root File.expand_path("templates", __dir__)
6
8
 
7
- class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons::Libraries.all.keys.join("/")})"
8
- class_option :destination, type: :string, default: "app/assets/svg/icons/", desc: "Specify destination folder for icons"
9
+ desc "Create the Rails Icons initializer."
10
+
11
+ class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons.libraries.keys.join("/")})"
12
+ class_option :destination, type: :string, default: RailsIcons.configuration.destination_path, desc: "Specify destination folder for icons"
9
13
  class_option :custom, type: :string, desc: "Name of the custom library"
10
14
 
11
15
  def copy_initializer
@@ -18,16 +22,26 @@ module RailsIcons
18
22
  return unless File.exist?(INITIALIZER)
19
23
  return if default_configuration_exists?
20
24
 
21
- if options[:libraries].present?
25
+ if libraries.present?
22
26
  default_configuration = <<~RB.indent(2)
23
- config.default_library = "#{options[:libraries].first}"
24
- # config.default_variant = "" # Set a default variant if multiple exist
27
+ config.default_library = "#{libraries.first}"
28
+ # config.default_variant = "" # Set a default variant for all libraries
25
29
  RB
26
30
 
27
31
  insert_into_file INITIALIZER, default_configuration, after: "RailsIcons.configure do |config|\n"
28
32
  end
29
33
  end
30
34
 
35
+ def insert_custom_destination_path
36
+ return if options[:destination] && options[:destination] == RailsIcons.configuration.destination_path
37
+
38
+ insert_into_file INITIALIZER, <<~RB.indent(2), after: "RailsIcons.configure do |config|\n"
39
+ # Default destination path
40
+ config.destination_path = "#{options[:destination]}"
41
+
42
+ RB
43
+ end
44
+
31
45
  def insert_libraries_configuration
32
46
  insert_into_file INITIALIZER, "\n#{library_configuration}", before: "end"
33
47
  end
@@ -61,67 +75,10 @@ module RailsIcons
61
75
  insert_into_file INITIALIZER, "\n#{custom_configuration}", after: "custom: {"
62
76
  end
63
77
 
64
- def create_custom_directory
65
- FileUtils.mkdir_p(File.join(options[:destination], options[:custom]))
66
- end
78
+ def create_custom_directory = FileUtils.mkdir_p(File.join(options[:destination], options[:custom]))
67
79
 
68
80
  def library_configuration
69
- configs = {
70
- feather: feather_config,
71
- heroicons: heroicons_config,
72
- lucide: lucide_config,
73
- tabler: tabler_config
74
- }
75
-
76
- options[:libraries].map { configs[_1.to_sym] }.join("\n")
77
- end
78
-
79
- def feather_config
80
- <<~RB.indent(2)
81
- # Override Feather defaults
82
- # config.libraries.feather.default.css = "size-6"
83
- # config.libraries.feather.default.stroke_width = "2"
84
- # config.libraries.feather.default.data = {}
85
- RB
86
- end
87
-
88
- def heroicons_config
89
- <<~RB.indent(2)
90
- # Override Heroicon defaults
91
- # config.libraries.heroicons.outline.default.css = "size-6"
92
- # config.libraries.heroicons.outline.default.stroke_width = "1.5"
93
- # config.libraries.heroicons.outline.default.data = {}
94
-
95
- # config.libraries.heroicons.solid.default.css = "size-6"
96
- # config.libraries.heroicons.solid.default.data = {}
97
-
98
- # config.libraries.heroicons.mini.default.css = "size-5"
99
- # config.libraries.heroicons.mini.default.data = {}
100
-
101
- # config.libraries.heroicons.micro.default.css = "size-4"
102
- # config.libraries.heroicons.micro.default.data = {}
103
- RB
104
- end
105
-
106
- def lucide_config
107
- <<~RB.indent(2)
108
- # Override Lucide defaults
109
- # config.libraries.lucide.outline.default.css = "size-6"
110
- # config.libraries.lucide.outline.default.stroke_width = "1.5"
111
- # config.libraries.lucide.outline.default.data = {}
112
- RB
113
- end
114
-
115
- def tabler_config
116
- <<~RB.indent(2)
117
- # Override Tabler defaults
118
- # config.libraries.tabler.solid.default.css = "size-6"
119
- # config.libraries.tabler.solid.default.data = {}
120
-
121
- # config.libraries.tabler.outline.default.css = "size-6"
122
- # config.libraries.tabler.outline.default.stroke_width = "2"
123
- # config.libraries.tabler.outline.default.data = {}
124
- RB
81
+ libraries.map { RailsIcons.libraries[_1.to_sym].initializer_config }.join("\n")
125
82
  end
126
83
 
127
84
  def custom_configuration
@@ -140,5 +97,7 @@ module RailsIcons
140
97
 
141
98
  File.readlines(INITIALIZER).any? { _1.match?(line) }
142
99
  end
100
+
101
+ def libraries = options[:libraries].map(&:downcase)
143
102
  end
144
103
  end
@@ -1,11 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rails_icons/base_generator"
4
+
3
5
  module RailsIcons
4
- class InstallGenerator < Rails::Generators::Base
6
+ class InstallGenerator < RailsIcons::BaseGenerator
5
7
  source_root File.expand_path("templates", __dir__)
6
8
 
7
- class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons::Libraries.all.keys.join("/")})"
8
- class_option :destination, type: :string, default: "app/assets/svg/icons/", desc: "Specify destination folder for icons"
9
+ desc "Install Rails Icons with the chosen libraries. This creates the configuration initializer and will sync the icons."
10
+
11
+ class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons.libraries.keys.join("/")})"
12
+ class_option :destination, type: :string, default: RailsIcons.configuration.destination_path, desc: "Specify destination folder for icons"
9
13
  class_option :skip_sync, type: :boolean, default: false
10
14
 
11
15
  def initializer_generator
@@ -20,6 +24,6 @@ module RailsIcons
20
24
 
21
25
  private
22
26
 
23
- def attributes = ["--libraries=#{options[:libraries].join(" ")}", "--destination=#{options[:destination]}"].join(" ")
27
+ def attributes = ["--libraries=#{options[:libraries].map(&:downcase).join(" ")}", "--destination=#{options[:destination]}"].join(" ")
24
28
  end
25
29
  end
@@ -1,59 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "fileutils"
4
- require_relative "sync/engine"
3
+ require "rails_icons/base_generator"
4
+ require "rails_icons/sync/engine"
5
5
 
6
6
  module RailsIcons
7
- class SyncGenerator < Rails::Generators::Base
8
- class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons::Libraries.all.keys.join("/")})"
9
- class_option :destination, type: :string, default: "app/assets/svg/icons/", desc: "Specify destination folder for icons"
10
-
11
- desc "Sync an icon library(s) from their respective git repos."
7
+ class SyncGenerator < RailsIcons::BaseGenerator
12
8
  source_root File.expand_path("templates", __dir__)
13
9
 
14
- def sync_icons
15
- raise "[Rails Icons] Not a valid library" if options[:libraries].empty?
16
-
17
- clean_temp_directory
10
+ desc "Sync the chosen icon libraries from their respective git repos."
18
11
 
19
- options[:libraries].each { |library| sync(library) }
12
+ class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons.libraries.keys.join("/")})"
20
13
 
21
- clean_temp_directory
22
- end
14
+ def sync_icons = libraries.each { Sync::Engine.new(_1).sync }
23
15
 
24
16
  private
25
17
 
26
- def clean_temp_directory
27
- FileUtils.rm_rf(temp_directory) if Dir.exist?(temp_directory)
28
- end
29
-
30
- def sync(name)
31
- library = RailsIcons::Libraries.all.fetch(name.to_sym)
32
- library_path = File.join(temp_directory, library[:name])
33
-
34
- Sync::Engine.new(temp_directory, library).sync
35
-
36
- raise_library_not_found(name) unless Dir.exist?(library_path)
37
- copy_library(library[:name], library_path)
38
- end
39
-
40
- def temp_directory
41
- Rails.root.join("tmp/icons")
42
- end
43
-
44
- def copy_library(library, source)
45
- destination = File.join(options[:destination], library)
46
-
47
- FileUtils.mkdir_p(destination)
48
-
49
- FileUtils.cp_r(Dir.glob("#{source}/*"), destination)
50
-
51
- say "[Rails Icons] Synced '#{library}' library successfully #{%w[😃 🎉 ✨].sample}", :green
18
+ def libraries
19
+ options[:libraries].map(&:downcase).presence || synced_libraries
52
20
  end
53
21
 
54
- def raise_library_not_found(library)
55
- say "[Rails Icons] Could not find '#{library}' library 🤷", :red
56
- exit 1
22
+ def synced_libraries
23
+ RailsIcons.libraries.keys.map(&:to_s).select do |library|
24
+ Dir.exist?(File.join(RailsIcons.configuration.destination_path, library.to_s))
25
+ end
57
26
  end
58
27
  end
59
28
  end
@@ -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
@@ -2,7 +2,9 @@
2
2
 
3
3
  module RailsIcons
4
4
  class Configuration
5
- class Animated
5
+ module Animated
6
+ extend self
7
+
6
8
  def config
7
9
  ActiveSupport::OrderedOptions.new.tap do |options|
8
10
  options.default = default_options
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsIcons
4
+ class Configuration
5
+ module Boxicons
6
+ extend self
7
+
8
+ def config
9
+ ActiveSupport::OrderedOptions.new.tap do |options|
10
+ options.default_variant = :regular
11
+ options.exclude_variants = []
12
+
13
+ setup_regular_config(options)
14
+ setup_solid_config(options)
15
+ setup_logos_config(options)
16
+ end
17
+ end
18
+
19
+ def initializer_config
20
+ <<~RB.indent(2)
21
+ # Override Boxicons defaults
22
+ # config.libraries.boxicons.exclude_variants = [] # Exclude specific variants
23
+
24
+ # config.libraries.boxicons.solid.css = "size-6"
25
+ # config.libraries.boxicons.solid.data = {}
26
+
27
+ # config.libraries.boxicons.regular.css = "size-6"
28
+ # config.libraries.boxicons.regular.data = {}
29
+
30
+ # config.libraries.boxicons.logos.css = "size-6"
31
+ # config.libraries.boxicons.logos.data = {}
32
+ RB
33
+ end
34
+
35
+ def source
36
+ {
37
+ url: "https://github.com/atisawd/boxicons.git",
38
+ variants: {
39
+ logos: "svg/logos",
40
+ regular: "svg/regular",
41
+ solid: "svg/solid"
42
+ }
43
+ }
44
+ end
45
+
46
+ def transformations
47
+ {
48
+ filenames: {
49
+ delete_prefix: ["bxl-", "bx-", "bxs-"]
50
+ }
51
+ }
52
+ end
53
+
54
+ def setup_regular_config(options)
55
+ options.regular = ActiveSupport::OrderedOptions.new
56
+ options.regular.default = default_options
57
+ end
58
+
59
+ def setup_solid_config(options)
60
+ options.solid = ActiveSupport::OrderedOptions.new
61
+ options.solid.default = default_options
62
+ end
63
+
64
+ def setup_logos_config(options)
65
+ options.logos = ActiveSupport::OrderedOptions.new
66
+ options.logos.default = default_options
67
+ end
68
+
69
+ def default_options
70
+ ActiveSupport::OrderedOptions.new.tap do |options|
71
+ options.css = "size-6"
72
+ options.data = {}
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -2,15 +2,38 @@
2
2
 
3
3
  module RailsIcons
4
4
  class Configuration
5
- class Feather
5
+ module Feather
6
+ extend self
7
+
6
8
  def config
7
9
  ActiveSupport::OrderedOptions.new.tap do |options|
8
10
  options.default_variant = nil
11
+ options.exclude_variants = []
9
12
 
10
13
  options.default = default_options
11
14
  end
12
15
  end
13
16
 
17
+ def initializer_config
18
+ <<~RB.indent(2)
19
+ # Override Feather defaults
20
+ # config.libraries.feather.exclude_variants = [] # Feather has no variants, this is provided for backwards compatibility
21
+
22
+ # config.libraries.feather.default.css = "size-6"
23
+ # config.libraries.feather.default.stroke_width = "2"
24
+ # config.libraries.feather.default.data = {}
25
+ RB
26
+ end
27
+
28
+ def source
29
+ {
30
+ url: "https://github.com/feathericons/feather.git",
31
+ variants: {
32
+ ".": "icons" # Feather has no variants, store in the top directory
33
+ }
34
+ }
35
+ end
36
+
14
37
  private
15
38
 
16
39
  def default_options
@@ -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
@@ -2,10 +2,13 @@
2
2
 
3
3
  module RailsIcons
4
4
  class Configuration
5
- class Heroicons
5
+ module Heroicons
6
+ extend self
7
+
6
8
  def config
7
9
  ActiveSupport::OrderedOptions.new.tap do |options|
8
10
  options.default_variant = :outline
11
+ options.exclude_variants = []
9
12
 
10
13
  setup_outline_config(options)
11
14
  setup_solid_config(options)
@@ -14,6 +17,38 @@ module RailsIcons
14
17
  end
15
18
  end
16
19
 
20
+ def initializer_config
21
+ <<~RB.indent(2)
22
+ # Override Heroicon defaults
23
+ # config.libraries.heroicons.exclude_variants = [:mini, :micro] # Exclude specific variants
24
+
25
+ # config.libraries.heroicons.outline.default.css = "size-6"
26
+ # config.libraries.heroicons.outline.default.stroke_width = "1.5"
27
+ # config.libraries.heroicons.outline.default.data = {}
28
+
29
+ # config.libraries.heroicons.solid.default.css = "size-6"
30
+ # config.libraries.heroicons.solid.default.data = {}
31
+
32
+ # config.libraries.heroicons.mini.default.css = "size-5"
33
+ # config.libraries.heroicons.mini.default.data = {}
34
+
35
+ # config.libraries.heroicons.micro.default.css = "size-4"
36
+ # config.libraries.heroicons.micro.default.data = {}
37
+ RB
38
+ end
39
+
40
+ def source
41
+ {
42
+ url: "https://github.com/tailwindlabs/heroicons.git",
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
+
17
52
  private
18
53
 
19
54
  def setup_outline_config(options)
@@ -36,16 +71,16 @@ module RailsIcons
36
71
  options.micro.default = default_micro_options
37
72
  end
38
73
 
39
- def default_solid_options
74
+ def default_outline_options
40
75
  ActiveSupport::OrderedOptions.new.tap do |options|
76
+ options.stroke_width = 1.5
41
77
  options.css = "size-6"
42
78
  options.data = {}
43
79
  end
44
80
  end
45
81
 
46
- def default_outline_options
82
+ def default_solid_options
47
83
  ActiveSupport::OrderedOptions.new.tap do |options|
48
- options.stroke_width = 1.5
49
84
  options.css = "size-6"
50
85
  options.data = {}
51
86
  end