phlex-icons-remix 2.40.0 → 2.42.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 (94) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/devcontainer.json +13 -13
  3. data/.ruby-version +1 -1
  4. data/.vscode/extensions.json +9 -0
  5. data/.vscode/settings.json +22 -0
  6. data/README.md +65 -38
  7. data/generators/huge.rb +101 -0
  8. data/lib/phlex-icons/railtie.rb +9 -1
  9. data/lib/phlex-icons/remix/ai.rb +23 -0
  10. data/lib/phlex-icons/remix/ai_agent_fill.rb +23 -0
  11. data/lib/phlex-icons/remix/ai_agent_line.rb +23 -0
  12. data/lib/phlex-icons/remix/ai_generate_2_fill.rb +23 -0
  13. data/lib/phlex-icons/remix/ai_generate_2_line.rb +23 -0
  14. data/lib/phlex-icons/remix/ai_generate_3d_fill.rb +23 -0
  15. data/lib/phlex-icons/remix/ai_generate_3d_line.rb +23 -0
  16. data/lib/phlex-icons/remix/apps_ai_fill.rb +23 -0
  17. data/lib/phlex-icons/remix/apps_ai_line.rb +23 -0
  18. data/lib/phlex-icons/remix/atom_fill.rb +23 -0
  19. data/lib/phlex-icons/remix/atom_line.rb +23 -0
  20. data/lib/phlex-icons/remix/book_ai_fill.rb +23 -0
  21. data/lib/phlex-icons/remix/book_ai_line.rb +23 -0
  22. data/lib/phlex-icons/remix/brain_3_fill.rb +23 -0
  23. data/lib/phlex-icons/remix/brain_3_line.rb +23 -0
  24. data/lib/phlex-icons/remix/brain_ai_3_fill.rb +23 -0
  25. data/lib/phlex-icons/remix/brain_ai_3_line.rb +23 -0
  26. data/lib/phlex-icons/remix/brush_ai_3_fill.rb +23 -0
  27. data/lib/phlex-icons/remix/brush_ai_3_line.rb +23 -0
  28. data/lib/phlex-icons/remix/camera_4_fill.rb +23 -0
  29. data/lib/phlex-icons/remix/camera_4_line.rb +23 -0
  30. data/lib/phlex-icons/remix/camera_ai_2_fill.rb +23 -0
  31. data/lib/phlex-icons/remix/camera_ai_2_line.rb +23 -0
  32. data/lib/phlex-icons/remix/chat_ai_2_fill.rb +23 -0
  33. data/lib/phlex-icons/remix/chat_ai_2_line.rb +23 -0
  34. data/lib/phlex-icons/remix/chat_ai_3_fill.rb +23 -0
  35. data/lib/phlex-icons/remix/chat_ai_3_line.rb +23 -0
  36. data/lib/phlex-icons/remix/chat_ai_4_fill.rb +23 -0
  37. data/lib/phlex-icons/remix/chat_ai_4_line.rb +23 -0
  38. data/lib/phlex-icons/remix/chat_smile_ai_3_fill.rb +23 -0
  39. data/lib/phlex-icons/remix/chat_smile_ai_3_line.rb +23 -0
  40. data/lib/phlex-icons/remix/code_view.rb +1 -1
  41. data/lib/phlex-icons/remix/deepseek_fill.rb +23 -0
  42. data/lib/phlex-icons/remix/deepseek_line.rb +23 -0
  43. data/lib/phlex-icons/remix/file_ai_2_fill.rb +23 -0
  44. data/lib/phlex-icons/remix/file_ai_2_line.rb +23 -0
  45. data/lib/phlex-icons/remix/file_ai_fill.rb +23 -0
  46. data/lib/phlex-icons/remix/file_ai_line.rb +23 -0
  47. data/lib/phlex-icons/remix/function_ai_fill.rb +23 -0
  48. data/lib/phlex-icons/remix/function_ai_line.rb +23 -0
  49. data/lib/phlex-icons/remix/game_2_fill.rb +23 -0
  50. data/lib/phlex-icons/remix/game_2_line.rb +23 -0
  51. data/lib/phlex-icons/remix/goblet_broken_fill.rb +23 -0
  52. data/lib/phlex-icons/remix/goblet_broken_line.rb +23 -0
  53. data/lib/phlex-icons/remix/lightbulb_ai_fill.rb +23 -0
  54. data/lib/phlex-icons/remix/lightbulb_ai_line.rb +23 -0
  55. data/lib/phlex-icons/remix/loop_left_ai_fill.rb +23 -0
  56. data/lib/phlex-icons/remix/loop_left_ai_line.rb +23 -0
  57. data/lib/phlex-icons/remix/loop_right_ai_fill.rb +23 -0
  58. data/lib/phlex-icons/remix/loop_right_ai_line.rb +23 -0
  59. data/lib/phlex-icons/remix/mark_pen_fill.rb +1 -1
  60. data/lib/phlex-icons/remix/mark_pen_line.rb +1 -1
  61. data/lib/phlex-icons/remix/markup_fill.rb +1 -1
  62. data/lib/phlex-icons/remix/markup_line.rb +1 -1
  63. data/lib/phlex-icons/remix/message_ai_3_fill.rb +23 -0
  64. data/lib/phlex-icons/remix/message_ai_3_line.rb +23 -0
  65. data/lib/phlex-icons/remix/painting_ai_fill.rb +23 -0
  66. data/lib/phlex-icons/remix/painting_ai_line.rb +23 -0
  67. data/lib/phlex-icons/remix/painting_fill.rb +23 -0
  68. data/lib/phlex-icons/remix/painting_line.rb +23 -0
  69. data/lib/phlex-icons/remix/pencil_ai_2_fill.rb +23 -0
  70. data/lib/phlex-icons/remix/pencil_ai_2_line.rb +23 -0
  71. data/lib/phlex-icons/remix/pencil_ai_fill.rb +23 -0
  72. data/lib/phlex-icons/remix/pencil_ai_line.rb +23 -0
  73. data/lib/phlex-icons/remix/remix_fill.rb +23 -0
  74. data/lib/phlex-icons/remix/remix_line.rb +23 -0
  75. data/lib/phlex-icons/remix/search_ai_2_fill.rb +23 -0
  76. data/lib/phlex-icons/remix/search_ai_2_line.rb +23 -0
  77. data/lib/phlex-icons/remix/search_ai_3_fill.rb +23 -0
  78. data/lib/phlex-icons/remix/search_ai_3_line.rb +23 -0
  79. data/lib/phlex-icons/remix/search_ai_4_fill.rb +23 -0
  80. data/lib/phlex-icons/remix/search_ai_4_line.rb +23 -0
  81. data/lib/phlex-icons/remix/search_ai_fill.rb +23 -0
  82. data/lib/phlex-icons/remix/search_ai_line.rb +23 -0
  83. data/lib/phlex-icons/remix/speech_to_text_fill.rb +23 -0
  84. data/lib/phlex-icons/remix/speech_to_text_line.rb +23 -0
  85. data/lib/phlex-icons/remix/target_fill.rb +23 -0
  86. data/lib/phlex-icons/remix/target_line.rb +23 -0
  87. data/lib/phlex-icons/remix/text_to_speech_fill.rb +23 -0
  88. data/lib/phlex-icons/remix/text_to_speech_line.rb +23 -0
  89. data/lib/phlex-icons/remix/wrench_fill.rb +23 -0
  90. data/lib/phlex-icons/remix/wrench_line.rb +23 -0
  91. data/lib/phlex-icons/remix.rb +78 -1
  92. data/lib/phlex-icons/version.rb +1 -1
  93. data/mise.toml +2 -0
  94. metadata +84 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b025c133870618b4abad31d8f4a1e07389bc1f4800e3bc1b9665d223a5ef2001
4
- data.tar.gz: 015c18049eeadb096cedef105c1d53d85c176972345827ca6ca50743ab6909ba
3
+ metadata.gz: 025106b80b8f7608a8c723b6ae6356208175bdab993c3314ffaeee7dcb9cf5ed
4
+ data.tar.gz: f5a32e0842334319d9e4f84d994c19742021818e6cb4cb0e7d8775b6f4fa8e29
5
5
  SHA512:
6
- metadata.gz: d379b2a62b3fea57cc1fde82221c725f5c5679763537511f0095a76ddba09acc1db4a1e772b7b31184a2d10af2eaa0efb6a44393072f873076a9b370c4a7e570
7
- data.tar.gz: 22a32139e15b28a26e4fa139d37ccb669b7af22f0676f042c5b93147fe8ee7c651af07bc9f8ad16cb94f8bdb42912862ee461d911762c3a3cda0658dd077b331
6
+ metadata.gz: 7318d775f28a6805336ceae63a374810384dab6df6d8e521f0bf9767f0fadd2de4d0701a6a6ed5c7ff72257aea031033ddf791260ad4dbcd3c1882071980d4a1
7
+ data.tar.gz: 85ff7eb729b94dbf63266c97cfb9796c4a35b782ad2e65623c1f60c652bc17f9211fbd7d19ddcdac5f1434d70c73f9149bf7c711cf34655ef7b434e3eca09a70
@@ -1,23 +1,23 @@
1
1
  // For format details, see https://aka.ms/devcontainer.json. For config options, see the
2
2
  // README at: https://github.com/devcontainers/templates/tree/main/src/ruby
3
3
  {
4
- "name": "phlex-icons",
5
- // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
6
- "image": "ghcr.io/rails/devcontainer/images/ruby:3.3.4",
4
+ "name": "phlex-icons",
5
+ // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
6
+ "image": "ghcr.io/rails/devcontainer/images/ruby:3.4.7",
7
7
 
8
- // Features to add to the dev container. More info: https://containers.dev/features.
9
- "features": {
8
+ // Features to add to the dev container. More info: https://containers.dev/features.
9
+ "features": {
10
10
  "ghcr.io/jungaretti/features/vim": {}
11
11
  },
12
12
 
13
- // Use 'forwardPorts' to make a list of ports inside the container available locally.
14
- // "forwardPorts": [],
13
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
14
+ // "forwardPorts": [],
15
15
 
16
- // Use 'postCreateCommand' to run commands after the container is created.
17
- "postCreateCommand": ".devcontainer/setup.sh",
16
+ // Use 'postCreateCommand' to run commands after the container is created.
17
+ "postCreateCommand": ".devcontainer/setup.sh",
18
18
 
19
- // Configure tool-specific properties.
20
- "customizations": {
19
+ // Configure tool-specific properties.
20
+ "customizations": {
21
21
  "vscode": {
22
22
  "settings": {
23
23
  "workbench": {
@@ -48,6 +48,6 @@
48
48
  }
49
49
  }
50
50
 
51
- // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
52
- // "remoteUser": "root"
51
+ // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
52
+ // "remoteUser": "root"
53
53
  }
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.3.4
1
+ 3.4.7
@@ -0,0 +1,9 @@
1
+ {
2
+ "recommendations": [
3
+ "Shopify.ruby-lsp",
4
+ "eamodio.gitlens",
5
+ "hverlin.mise-vscode",
6
+ "vscode-icons-team.vscode-icons",
7
+ "waderyan.gitblame"
8
+ ]
9
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "workbench.iconTheme": "vscode-icons",
3
+ "editor.formatOnSave": true,
4
+ "editor.quickSuggestions": {
5
+ "strings": "on"
6
+ },
7
+ "[ruby]": {
8
+ "editor.defaultFormatter": "Shopify.ruby-lsp",
9
+ "editor.formatOnSave": true,
10
+ "editor.tabSize": 2,
11
+ "editor.insertSpaces": true,
12
+ "editor.semanticHighlighting.enabled": true,
13
+ "editor.formatOnType": true
14
+ },
15
+ "rubyLsp.rubyVersionManager": {
16
+ "identifier": "mise"
17
+ },
18
+ "rubyLsp.formatter": "rubocop_internal",
19
+ "mise.configureExtensionsAutomaticallyIgnoreList": [
20
+ "ms-vscode.js-debug"
21
+ ]
22
+ }
data/README.md CHANGED
@@ -10,23 +10,25 @@
10
10
 
11
11
  # PhlexIcons
12
12
 
13
- General icons extension for [Phlex](https://phlex.fun). Includes more than 🎨 14,500 icons from:
14
- - [Bootstrap Icons](https://icons.getbootstrap.com) (2,000+)
13
+ PhlexIcons brings 19,250+ SVG icons to [Phlex](https://phlex.fun) through a single, consistent API:
14
+ - [Bootstrap Icons](https://icons.getbootstrap.com) (2,050+)
15
15
  - [Flag Icons](https://flagicons.lipis.dev) (250+)
16
16
  - [Heroicons](https://heroicons.com) (300+)
17
- - [Lucide Icons](https://lucide.dev/icons) (1,500+)
17
+ - [Hugeicons](https://hugeicons.com) (4,450+)
18
+ - [Lucide Icons](https://lucide.dev/icons) (1,600+)
18
19
  - [Material Design Icons](https://fonts.google.com/icons?icon.style=Filled&icon.set=Material+Icons) (2,100+)
19
20
  - [RadixUI Icons](https://radix-ui.com/icons) (300+)
20
- - [Remix Icons](https://remixicon.com) (3,000+)
21
- - [Tabler Icons](https://tabler.io/icons) (4,900+)
21
+ - [Remix Icons](https://remixicon.com) (3,050+)
22
+ - [Tabler Icons](https://tabler.io/icons) (4,950+)
22
23
 
23
- And happy to extend to other icon packs!
24
+ More packs can be added over time.
24
25
 
25
- If you don't want to add all icon packs to your application, you can add a specific icon pack by using one (or multiple) of the following gems:
26
+ Prefer not to include every pack? Install only the packs you need with these gems:
26
27
 
27
28
  - [phlex-icons-bootstrap](https://rubygems.org/gems/phlex-icons-bootstrap)
28
29
  - [phlex-icons-flag](https://rubygems.org/gems/phlex-icons-flag)
29
30
  - [phlex-icons-hero](https://rubygems.org/gems/phlex-icons-hero)
31
+ - [phlex-icons-huge](https://rubygems.org/gems/phlex-icons-huge)
30
32
  - [phlex-icons-lucide](https://rubygems.org/gems/phlex-icons-lucide)
31
33
  - [phlex-icons-material](https://rubygems.org/gems/phlex-icons-material)
32
34
  - [phlex-icons-radix](https://rubygems.org/gems/phlex-icons-radix)
@@ -39,6 +41,16 @@ Other Phlex icon gems:
39
41
  - [phlex-remixicon](https://github.com/danieldocki/phlex-remixicon)
40
42
  - [phlex-lucide](https://github.com/akodkod/phlex-lucide)
41
43
 
44
+ ## Features
45
+
46
+ - **Unified API**: One way to render icons across all supported packs.
47
+ - **Use everything or just a pack**: Depend on the main gem or install per-pack gems.
48
+ - **Configurable defaults**: Global defaults and per-pack variants.
49
+ - **Works anywhere Phlex works**: With `Phlex::Kit` or plain Phlex components.
50
+ - **Rails helper**: Simple `phlex_icon` helper (name is configurable).
51
+ - **Custom icons**: Add your own icons alongside built-in packs.
52
+ - **Kept up-to-date**: Auto-generated packs and weekly updates.
53
+
42
54
  ## Installation
43
55
 
44
56
  Install the gem and add it to the application's Gemfile by executing:
@@ -53,9 +65,26 @@ If bundler is not being used to manage dependencies, install the gem by executin
53
65
  gem install phlex-icons
54
66
  ```
55
67
 
68
+ ## Quick start
69
+
70
+ ```ruby
71
+ require 'phlex-icons' # Not needed in Rails apps; Bundler will require it.
72
+
73
+ class IconsDemo < Phlex::HTML
74
+ include PhlexIcons
75
+
76
+ def view_template
77
+ div do
78
+ Hero::Home(variant: :solid, class: 'w-6 h-6')
79
+ Icon('bootstrap/house', class: 'w-6 h-6') # string form
80
+ end
81
+ end
82
+ end
83
+ ```
84
+
56
85
  ## Configuration
57
86
 
58
- The gem provides global configuration options, and per icons pack configuration options.
87
+ The gem provides global configuration options and per-pack options.
59
88
 
60
89
  ### Global configuration
61
90
 
@@ -101,6 +130,10 @@ end
101
130
  PhlexIcons::Hero.configuration.default_variant = :solid # or :outline
102
131
  ```
103
132
 
133
+ ### Hugeicons configuration
134
+
135
+ Nothing to configure for Hugeicons, as we are providing only the free stroke variant.
136
+
104
137
  ### Lucide Icons configuration
105
138
 
106
139
  Nothing to configure for Lucide Icons.
@@ -144,7 +177,7 @@ PhlexIcons::Tabler.configuration.default_variant = :outline # or :filled
144
177
  ```ruby
145
178
  require 'phlex-icons' # No need to require the gem if you are using it in a Rails application.
146
179
 
147
- class PhlexIcons < Phlex::HTML
180
+ class IconsDemo < Phlex::HTML
148
181
  include PhlexIcons
149
182
 
150
183
  def view_template
@@ -152,6 +185,7 @@ class PhlexIcons < Phlex::HTML
152
185
  Bootstrap::House(class: 'size-4')
153
186
  Flag::Sa(variant: :rectangle, class: 'size-4')
154
187
  Hero::Home(variant: :solid, class: 'size-4')
188
+ Huge::Home08(variant: :stroke, class: 'size-4')
155
189
  Lucide::House(class: 'size-4')
156
190
  Material::House(variant: :filled, class: 'size-4')
157
191
  Radix::Home(class: 'size-4')
@@ -170,12 +204,13 @@ end
170
204
  ```ruby
171
205
  require 'phlex-icons' # No need to require the gem if you are using it in a Rails application.
172
206
 
173
- class PhlexIcons < Phlex::HTML
207
+ class IconsDemo < Phlex::HTML
174
208
  def view_template
175
209
  div do
176
210
  render PhlexIcons::Bootstrap::House.new(class: 'size-4')
177
211
  render PhlexIcons::Flag::Sa.new(variant: :rectangle, class: 'size-4')
178
212
  render PhlexIcons::Hero::Home.new(variant: :solid, class: 'size-4')
213
+ render PhlexIcons::Huge::Home08.new(variant: :stroke, class: 'size-4')
179
214
  render PhlexIcons::Lucide::House.new(class: 'size-4')
180
215
  render PhlexIcons::Material::House.new(variant: :filled, class: 'size-4')
181
216
  render PhlexIcons::Radix::Home.new(class: 'size-4')
@@ -183,7 +218,7 @@ class PhlexIcons < Phlex::HTML
183
218
  render PhlexIcons::Tabler::Home.new(variant: :filled, class: 'size-4')
184
219
 
185
220
  # or with a string
186
- render PhlexIcons::Icon('bootstrap/house', class: 'size-4')
221
+ render PhlexIcons::Icon.new('bootstrap/house', class: 'size-4')
187
222
  end
188
223
  end
189
224
  end
@@ -191,9 +226,11 @@ end
191
226
 
192
227
  ### Rails View Helper
193
228
 
194
- `phlex-icons` provides a convenient helper method to render icons directly in your ERB or Phlex views.
229
+ PhlexIcons provides a convenient helper method to render icons directly in your ERB or Phlex views.
230
+
231
+ By default, the helper method is named `phlex_icon`, but it is configurable. You can change it by configuring `PhlexIcons.configuration.helper_method_name`.
195
232
 
196
- By default, the helper method is named `phlex_icon`, but is configurable.
233
+ To use the helper method inside Phlex views/components, you need to register it in your base component (Or any other component) using `register_output_helper`.
197
234
 
198
235
  ```erb
199
236
  <%# Render a Bootstrap house icon with default size %>
@@ -217,15 +254,15 @@ By default, the helper method is named `phlex_icon`, but is configurable.
217
254
 
218
255
  The first argument is the icon identifier. Such as: `'pack/icon_name:variant'`.
219
256
 
220
- * If `default_pack` is configured, you can omit the pack name (e.g., `'icon_name:variant'` instead of `'pack/icon_name:variant'`).
221
- * The `:variant` part is optional.
222
- * Examples: `'hero/house:solid'`, `'house:solid'`, `'house'`
257
+ - If `default_pack` is configured, you can omit the pack name (e.g., `'icon_name:variant'` instead of `'pack/icon_name:variant'`).
258
+ - The `:variant` part is optional.
259
+ - Examples: `'hero/house:solid'`, `'house:solid'`, `'house'`
223
260
 
224
261
  Subsequent arguments are passed as options to the icon component, such as `variant`, `class`, etc.
225
262
 
226
- ### Specific icon pack(s)
263
+ ### Use only specific packs
227
264
 
228
- Let's say you want to use only Heroicons and Flag Icons, you can use the following gems:
265
+ For example, to use only Heroicons and Flag Icons, add:
229
266
  - [phlex-icons-flag](https://rubygems.org/gems/phlex-icons-flag)
230
267
  - [phlex-icons-hero](https://rubygems.org/gems/phlex-icons-hero)
231
268
 
@@ -252,12 +289,12 @@ class PhlexIcons < Phlex::HTML
252
289
  end
253
290
  ```
254
291
 
255
- ### Add custom icons to your Rails application
292
+ ### Add custom icons (Rails)
256
293
 
257
- You can extend the gem in your Rails application to add new icons by creating a `phlex-icons/custom` directory inside `views/components` directory. Then, you can create a new component for each icon you want to add. For example:
294
+ To add your own icons in a Rails app, create a `phlex_icons/custom` directory under `app/components`, then create one component per icon. For example:
258
295
 
259
296
  ```ruby
260
- # app/views/components/phlex-icons/custom/icon_class_name.rb
297
+ # app/components/phlex_icons/custom/icon_class_name.rb
261
298
 
262
299
  module PhlexIcons
263
300
  module Custom
@@ -270,33 +307,23 @@ module PhlexIcons
270
307
  end
271
308
  ```
272
309
 
273
- Finally, you will need to create a `PhlexIcons::Custom` module in `phlex-icons/custom.rb` file to include your custom icons and make them a `Phlex::Kit`:
274
-
275
- ```ruby
276
- # app/views/components/phlex-icons/custom.rb
277
-
278
- module PhlexIcons
279
- module Custom
280
- extend Phlex::Kit
281
- end
282
- end
283
- ```
284
-
285
310
  Now, you can use your custom icons like any other icon pack as described above.
286
311
 
287
312
  ## Update icon packs
288
313
 
289
- All icon packs provided in this gem are auto-generated by their generator under [`generators`](/generators) directory. You just need to clone the repo and run the generator for the icon pack you want to update. Also, there is a GitHub Action that will run the generator for all icon packs and update the gem weekly on each Friday.
314
+ All packs are generated from the scripts under [`generators`](/generators). Clone the repo and run the relevant generator to update a pack. A GitHub Action also regenerates all packs weekly and ships updates.
290
315
 
291
- ## What is the icon pack version used in the gem?
316
+ ## Icon pack versions
292
317
 
293
- Each icon pack contains a `VERSION` constant in its module represents the version of the icon pack used in the gem. So, for example, to get the Bootstrap version used in the gem you can access it by `PhlexIcons::Bootstrap::VERSION`.
318
+ Each pack exposes a `VERSION` constant indicating the source version used by the gem. For example: `PhlexIcons::Bootstrap::VERSION`.
294
319
 
295
320
  ## Development
296
321
 
297
- After checking out the repo, open it in VSCode and click `Reopen in Container` to start a development container. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
322
+ After checking out the repo, open it in VS Code and choose `Reopen in Container` to start a development container. Then run `rake spec` to execute tests. Use `bin/console` to experiment interactively.
323
+
324
+ If you prefer not to use the dev container, install Mise and run `mise trust && mise install` to set up dependencies.
298
325
 
299
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
326
+ To install this gem locally, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, then run `bundle exec rake release` to tag, push, and publish the gem to [rubygems.org](https://rubygems.org).
300
327
 
301
328
  ## Contributing
302
329
 
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ REPO_URL = 'https://github.com/hugeicons/hugeicons-static.git'
6
+ REPO_NAME = 'hugeicons-static'
7
+ ICONS_PACK_MODULE_PATH = 'lib/phlex-icons/huge.rb'
8
+ ICONS_PACK_PATH = 'lib/phlex-icons/huge'
9
+ VARIANTS = %i[stroke].freeze
10
+
11
+ TEMPLATE = ERB.new <<~TEMPLATE
12
+ # frozen_string_literal: true
13
+
14
+ # rubocop:disable #{ROBOCOP_DISABLE_WARNINGS}
15
+ module PhlexIcons
16
+ module Huge
17
+ class <%= icon_name %> < Base
18
+ def stroke
19
+ <%= stroke_icon %>
20
+ end
21
+ end
22
+ end
23
+ end
24
+ # rubocop:enable #{ROBOCOP_DISABLE_WARNINGS}
25
+ TEMPLATE
26
+
27
+ VARIANT_TEMPLATE = ERB.new <<~VARIANT_TEMPLATE
28
+ # frozen_string_literal: true
29
+
30
+ # rubocop:disable #{ROBOCOP_DISABLE_WARNINGS}
31
+ module PhlexIcons
32
+ module Huge
33
+ class <%= icon_name %><%= variant.to_s.capitalize %> < Base
34
+ def view_template
35
+ render <%= icon_name %>.new(variant: :<%= variant %>, **attrs)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ # rubocop:enable #{ROBOCOP_DISABLE_WARNINGS}
41
+ VARIANT_TEMPLATE
42
+
43
+ REPLACEMENTS = {
44
+ '1st-' => 'first-',
45
+ '2nd-' => 'second-',
46
+ '3rd-' => 'third-',
47
+ '3-d-' => 'three-d-',
48
+ '3d-' => 'three-d-',
49
+ '4k' => 'four-k',
50
+ '7z-' => 'seven-z-',
51
+ 'comment ' => 'comment-',
52
+ 'image-flip ' => 'image-flip'
53
+ }.freeze
54
+
55
+ def main
56
+ run_generator do
57
+ new_version = JSON.parse(File.read("generators/#{REPO_NAME}/package.json"))['version']
58
+ update_icon_path_version(new_version)
59
+
60
+ icon_file_names.tqdm.each { create_icon_component(_1) }
61
+ end
62
+ end
63
+
64
+ def icon_file_names
65
+ Dir.glob("generators/#{REPO_NAME}/icons/*").map { |file| File.basename(file) }
66
+ end
67
+
68
+ def create_icon_component(icon_file_name)
69
+ File.write(
70
+ File.join(ICONS_PACK_PATH, component_file_name(icon_file_name, REPLACEMENTS)),
71
+ TEMPLATE.result_with_hash(
72
+ icon_name: component_class_name(icon_file_name, REPLACEMENTS),
73
+ stroke_icon: read_and_convert_icon(stroke_icon_file_path(icon_file_name))
74
+ )
75
+ )
76
+
77
+ VARIANTS.each do |variant|
78
+ File.write(
79
+ File.join(ICONS_PACK_PATH, variant_component_file_name(icon_file_name, variant, REPLACEMENTS)),
80
+ VARIANT_TEMPLATE.result_with_hash(
81
+ icon_name: component_class_name(icon_file_name, REPLACEMENTS),
82
+ variant: variant
83
+ )
84
+ )
85
+ end
86
+ end
87
+
88
+ def read_and_convert_icon(icon_file_path)
89
+ icon_file_content = File.read(icon_file_path)
90
+ .sub('width="24"', '')
91
+ .sub('height="24"', '')
92
+ .gsub(/stroke="#[0-9A-Fa-f]{6}"/, 'stroke="currentColor"')
93
+
94
+ Phlexing::Converter.convert(icon_file_content).sub('svg(', "svg(\n**attrs,")
95
+ end
96
+
97
+ def stroke_icon_file_path(icon_file_name)
98
+ "generators/#{REPO_NAME}/icons/#{icon_file_name}"
99
+ end
100
+
101
+ main if __FILE__ == $PROGRAM_NAME
@@ -9,7 +9,15 @@ module PhlexIcons
9
9
  helper_method_name = PhlexIcons.configuration.helper_method_name
10
10
 
11
11
  define_method helper_method_name do |name, **options|
12
- PhlexIcons::Icon.call(name, **options)&.html_safe
12
+ component, fiber_id = Thread.current[:__phlex_component__]
13
+
14
+ if component && fiber_id == Fiber.current.object_id
15
+ component.instance_exec { render PhlexIcons::Icon.new(name, **options) }
16
+
17
+ nil
18
+ else
19
+ PhlexIcons::Icon.call(name, **options)&.html_safe
20
+ end
13
21
  end
14
22
  end
15
23
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LineLength
4
+ module PhlexIcons
5
+ module Remix
6
+ class Ai < Base
7
+ def view_template
8
+ svg(
9
+ **attrs,
10
+ viewbox: '0 0 24 24',
11
+ fill: 'currentColor',
12
+ xmlns: 'http://www.w3.org/2000/svg'
13
+ ) do |s|
14
+ s.path(
15
+ d:
16
+ 'M16.4004 21H14.2461L12.2461 16H5.75391L3.75391 21H1.59961L8 4.99996H10L16.4004 21ZM21 12V21H19V12H21ZM6.55371 14H11.4463L9 7.88473L6.55371 14ZM19.5293 2.3193C19.7058 1.89351 20.2942 1.8935 20.4707 2.3193L20.7236 2.93063C21.1555 3.97343 21.9615 4.80613 22.9746 5.2568L23.6914 5.57613C24.1022 5.75881 24.1022 6.35634 23.6914 6.53902L22.9326 6.87691C21.945 7.31619 21.1534 8.11942 20.7139 9.12789L20.4668 9.69332C20.2863 10.1075 19.7136 10.1075 19.5332 9.69332L19.2861 9.12789C18.8466 8.11941 18.0551 7.31619 17.0674 6.87691L16.3076 6.53902C15.8974 6.35617 15.8974 5.75894 16.3076 5.57613L17.0254 5.2568C18.0384 4.80613 18.8445 3.97343 19.2764 2.93063L19.5293 2.3193Z'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LineLength
4
+ module PhlexIcons
5
+ module Remix
6
+ class AiAgentFill < Base
7
+ def view_template
8
+ svg(
9
+ **attrs,
10
+ viewbox: '0 0 24 24',
11
+ fill: 'currentColor',
12
+ xmlns: 'http://www.w3.org/2000/svg'
13
+ ) do |s|
14
+ s.path(
15
+ d:
16
+ 'M12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2ZM12 15C9.71266 15 7.65042 15.961 6.19238 17.5C7.65042 19.039 9.71266 20 12 20C14.2871 20 16.3486 19.0387 17.8066 17.5C16.3486 15.9613 14.2871 15 12 15ZM12.4707 5.31934C12.2943 4.89337 11.7058 4.89339 11.5293 5.31934L11.2764 5.93066C10.8445 6.97341 10.0384 7.80621 9.02539 8.25684L8.30762 8.57617C7.89751 8.75905 7.89744 9.35625 8.30762 9.53906L9.06738 9.87695C10.0551 10.3163 10.8476 11.1193 11.2871 12.1279L11.5332 12.6934C11.7138 13.1073 12.2863 13.1073 12.4668 12.6934L12.7139 12.1279C13.1534 11.1194 13.9449 10.3163 14.9326 9.87695L15.6924 9.53906C16.1026 9.35624 16.1025 8.75907 15.6924 8.57617L14.9746 8.25684C13.9616 7.8062 13.1556 6.9734 12.7236 5.93066L12.4707 5.31934Z'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LineLength
4
+ module PhlexIcons
5
+ module Remix
6
+ class AiAgentLine < Base
7
+ def view_template
8
+ svg(
9
+ **attrs,
10
+ viewbox: '0 0 24 24',
11
+ fill: 'currentColor',
12
+ xmlns: 'http://www.w3.org/2000/svg'
13
+ ) do |s|
14
+ s.path(
15
+ d:
16
+ 'M12 2C17.5228 2 22 6.47715 22 12C22 14.7096 20.9205 17.1697 19.1709 18.9697C17.3551 20.8376 14.8124 22 12 22C9.18756 22 6.64488 20.8376 4.8291 18.9697C3.07949 17.1697 2 14.7096 2 12C2 6.47715 6.47715 2 12 2ZM12 16C10.0022 16 8.20124 16.8375 6.9248 18.1816C8.30642 19.3175 10.0724 20 12 20C13.9274 20 15.6927 19.3173 17.0742 18.1816C15.7978 16.8377 13.9975 16 12 16ZM12 4C7.58172 4 4 7.58172 4 12C4 13.7701 4.57462 15.4044 5.54785 16.7295C7.1822 15.0483 9.46797 14 12 14C14.5318 14 16.8169 15.0485 18.4512 16.7295C19.4246 15.4043 20 13.7703 20 12C20 7.58172 16.4183 4 12 4ZM11.5293 5.31934C11.7058 4.89329 12.2943 4.89329 12.4707 5.31934L12.7236 5.93066C13.1556 6.97343 13.9615 7.80622 14.9746 8.25684L15.6924 8.5752C16.1029 8.75796 16.1028 9.35627 15.6924 9.53906L14.9326 9.87695C13.9448 10.3163 13.1534 11.1193 12.7139 12.1279L12.4668 12.6934C12.2864 13.1074 11.7137 13.1074 11.5332 12.6934L11.2871 12.1279C10.8476 11.1193 10.0552 10.3163 9.06738 9.87695L8.30762 9.53906C7.89719 9.35628 7.89717 8.75795 8.30762 8.5752L9.02539 8.25684C10.0385 7.80623 10.8445 6.97345 11.2764 5.93066L11.5293 5.31934Z'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LineLength
4
+ module PhlexIcons
5
+ module Remix
6
+ class AiGenerate2Fill < Base
7
+ def view_template
8
+ svg(
9
+ **attrs,
10
+ viewbox: '0 0 24 24',
11
+ fill: 'currentColor',
12
+ xmlns: 'http://www.w3.org/2000/svg'
13
+ ) do |s|
14
+ s.path(
15
+ d:
16
+ 'M18 3C20.2091 3 22 4.79086 22 7V17C22 19.2091 20.2091 21 18 21H6C3.79086 21 2 19.2091 2 17V7C2 4.79086 3.79086 3 6 3H18ZM12.5879 7.39941C12.3673 6.86706 11.6327 6.86708 11.4121 7.39941L11.0947 8.16309C10.5548 9.46657 9.54772 10.5081 8.28125 11.0713L7.38477 11.4697C6.87165 11.6982 6.87153 12.4455 7.38477 12.6738L8.33496 13.0957C9.56954 13.6448 10.5591 14.6486 11.1084 15.9092L11.416 16.6162C11.6416 17.1338 12.3584 17.1338 12.584 16.6162L12.8916 15.9092C13.4409 14.6486 14.4305 13.6448 15.665 13.0957L16.6152 12.6738C17.1285 12.4455 17.1284 11.6982 16.6152 11.4697L15.7188 11.0713C14.4522 10.5081 13.4442 9.46657 12.9043 8.16309L12.5879 7.39941Z'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LineLength
4
+ module PhlexIcons
5
+ module Remix
6
+ class AiGenerate2Line < Base
7
+ def view_template
8
+ svg(
9
+ **attrs,
10
+ viewbox: '0 0 24 24',
11
+ fill: 'currentColor',
12
+ xmlns: 'http://www.w3.org/2000/svg'
13
+ ) do |s|
14
+ s.path(
15
+ d:
16
+ 'M18 3C20.2091 3 22 4.79086 22 7V17C22 19.2091 20.2091 21 18 21H6C3.79086 21 2 19.2091 2 17V7C2 4.79086 3.79086 3 6 3H18ZM6 5C4.89543 5 4 5.89543 4 7V17C4 18.1046 4.89543 19 6 19H18C19.1046 19 20 18.1046 20 17V7C20 5.89543 19.1046 5 18 5H6ZM11.4121 7.39941C11.6327 6.86708 12.3673 6.86706 12.5879 7.39941L12.9043 8.16309C13.4442 9.46657 14.4522 10.5081 15.7188 11.0713L16.6152 11.4697C17.1284 11.6982 17.1285 12.4455 16.6152 12.6738L15.665 13.0957C14.4305 13.6448 13.4409 14.6486 12.8916 15.9092L12.584 16.6162C12.3584 17.1338 11.6416 17.1338 11.416 16.6162L11.1084 15.9092C10.5591 14.6486 9.56954 13.6448 8.33496 13.0957L7.38477 12.6738C6.87153 12.4455 6.87165 11.6982 7.38477 11.4697L8.28125 11.0713C9.54772 10.5081 10.5548 9.46657 11.0947 8.16309L11.4121 7.39941Z'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LineLength
4
+ module PhlexIcons
5
+ module Remix
6
+ class AiGenerate3dFill < Base
7
+ def view_template
8
+ svg(
9
+ **attrs,
10
+ viewbox: '0 0 24 24',
11
+ fill: 'currentColor',
12
+ xmlns: 'http://www.w3.org/2000/svg'
13
+ ) do |s|
14
+ s.path(
15
+ d:
16
+ 'M14.2676 2.3125C13.4737 3.32993 13 4.60947 13 6C13 9.31371 15.6863 12 19 12C19.8925 12 20.7388 11.8036 21.5 11.4541V17.5L12 23L2.5 17.5V6.5L12 1L14.2676 2.3125ZM4.5 16.3467L12 20.6895V12L4.5 7.65723V16.3467ZM18.5293 2.31934C18.7059 1.8935 19.2943 1.89349 19.4707 2.31934L19.7236 2.93066C20.1556 3.97346 20.9615 4.80618 21.9746 5.25684L22.6924 5.57617C23.1026 5.75901 23.1026 6.3562 22.6924 6.53906L21.9326 6.87695C20.9449 7.31624 20.1534 8.11944 19.7139 9.12793L19.4668 9.69336C19.2864 10.1075 18.7137 10.1075 18.5332 9.69336L18.2871 9.12793C17.8476 8.11929 17.0552 7.31628 16.0674 6.87695L15.3076 6.53906C14.8974 6.35622 14.8974 5.75899 15.3076 5.57617L16.0254 5.25684C17.0385 4.80618 17.8445 3.97348 18.2764 2.93066L18.5293 2.31934Z'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LineLength
4
+ module PhlexIcons
5
+ module Remix
6
+ class AiGenerate3dLine < Base
7
+ def view_template
8
+ svg(
9
+ **attrs,
10
+ viewbox: '0 0 24 24',
11
+ fill: 'currentColor',
12
+ xmlns: 'http://www.w3.org/2000/svg'
13
+ ) do |s|
14
+ s.path(
15
+ d:
16
+ 'M15.1416 2.81836L13.1016 3.94824L12 3.31055L4.5 7.65234V7.6582L12 12V20.6895L19.5 16.3467V11.5L21.5 10.3291V17.5L12 23L2.5 17.5V6.5L12 1L15.1416 2.81836ZM18.5293 2.31934C18.7059 1.8935 19.2943 1.89349 19.4707 2.31934L19.7236 2.93066C20.1556 3.97346 20.9615 4.80618 21.9746 5.25684L22.6924 5.57617C23.1026 5.75901 23.1026 6.3562 22.6924 6.53906L21.9326 6.87695C20.9449 7.31624 20.1534 8.11944 19.7139 9.12793L19.4668 9.69336C19.2864 10.1075 18.7137 10.1075 18.5332 9.69336L18.2871 9.12793C17.8476 8.11929 17.0552 7.31628 16.0674 6.87695L15.3076 6.53906C14.8974 6.35622 14.8974 5.75899 15.3076 5.57617L16.0254 5.25684C17.0385 4.80618 17.8445 3.97348 18.2764 2.93066L18.5293 2.31934Z'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LineLength
4
+ module PhlexIcons
5
+ module Remix
6
+ class AppsAiFill < Base
7
+ def view_template
8
+ svg(
9
+ **attrs,
10
+ viewbox: '0 0 24 24',
11
+ fill: 'currentColor',
12
+ xmlns: 'http://www.w3.org/2000/svg'
13
+ ) do |s|
14
+ s.path(
15
+ d:
16
+ 'M6.75 2.5C9.09721 2.5 11 4.40279 11 6.75V11H6.75C4.40279 11 2.5 9.09721 2.5 6.75 2.5 4.40279 4.40279 2.5 6.75 2.5ZM6.75 13H11V17.25C11 19.5972 9.09721 21.5 6.75 21.5 4.40279 21.5 2.5 19.5972 2.5 17.25 2.5 14.9028 4.40279 13 6.75 13ZM13 13H17.25C19.5972 13 21.5 14.9028 21.5 17.25 21.5 19.5972 19.5972 21.5 17.25 21.5 14.9028 21.5 13 19.5972 13 17.25V13ZM18.008 10.0695 17.746 10.6702C17.5543 11.1099 16.9457 11.1099 16.7539 10.6702L16.492 10.0695C16.0251 8.99837 15.184 8.14559 14.1345 7.67906L13.3273 7.32028C12.8909 7.12628 12.8909 6.49155 13.3273 6.29754L14.0893 5.95881C15.1658 5.48028 16.022 4.59594 16.4809 3.48847L16.7499 2.83932C16.9374 2.38689 17.5626 2.38689 17.75 2.83932L18.019 3.48847C18.478 4.59594 19.3342 5.48028 20.4107 5.95881L21.1726 6.29754C21.6091 6.49155 21.6091 7.12628 21.1726 7.32028L20.3656 7.67906C19.316 8.14559 18.475 8.99837 18.008 10.0695Z'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LineLength
4
+ module PhlexIcons
5
+ module Remix
6
+ class AppsAiLine < Base
7
+ def view_template
8
+ svg(
9
+ **attrs,
10
+ viewbox: '0 0 24 24',
11
+ fill: 'currentColor',
12
+ xmlns: 'http://www.w3.org/2000/svg'
13
+ ) do |s|
14
+ s.path(
15
+ d:
16
+ 'M11 17.2498C11 19.597 9.09721 21.4998 6.75 21.4998C4.40279 21.4998 2.5 19.597 2.5 17.2498C2.50011 14.9027 4.40286 12.9998 6.75 12.9998H11V17.2498ZM17.25 12.9998C19.5971 12.9998 21.4999 14.9027 21.5 17.2498C21.5 19.597 19.5972 21.4998 17.25 21.4998C14.9028 21.4998 13 19.597 13 17.2498V12.9998H17.25ZM6.75 14.9998C5.50743 14.9998 4.50011 16.0073 4.5 17.2498C4.5 18.4925 5.50736 19.4998 6.75 19.4998C7.99264 19.4998 9 18.4925 9 17.2498V14.9998H6.75ZM15 17.2498C15 18.4925 16.0074 19.4998 17.25 19.4998C18.4926 19.4998 19.5 18.4925 19.5 17.2498C19.4999 16.0073 18.4926 14.9998 17.25 14.9998H15V17.2498ZM6.75 2.4998C9.09714 2.4998 10.9999 4.40269 11 6.74981V10.9998H6.75C4.40279 10.9998 2.5 9.09703 2.5 6.74981C2.50011 4.40269 4.40286 2.4998 6.75 2.4998ZM16.75 2.83965C16.9375 2.38722 17.5626 2.38722 17.75 2.83965L18.0195 3.48809C18.4785 4.59556 19.3346 5.48026 20.4111 5.95879L21.1729 6.29766C21.609 6.49178 21.6091 7.12607 21.1729 7.32013L20.3652 7.67852C19.3158 8.14506 18.4748 8.99814 18.0078 10.0692L17.7461 10.6697C17.5544 11.1095 16.9457 11.1095 16.7539 10.6697L16.4922 10.0692C16.0252 8.99814 15.1842 8.14506 14.1348 7.67852L13.3271 7.32013C12.891 7.1261 12.891 6.49175 13.3271 6.29766L14.0889 5.95879C15.1654 5.48026 16.0216 4.59556 16.4805 3.48809L16.75 2.83965ZM6.75 4.49981C5.50743 4.49981 4.50011 5.50726 4.5 6.74981C4.5 7.99245 5.50736 8.99982 6.75 8.99982H9V6.74981C8.99989 5.50726 7.99257 4.49981 6.75 4.49981Z'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ # rubocop:enable Layout/LineLength