unmagic-icon 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 66fe0a90a06ca3989154088d6e1d8cda87f6f1055d9b0ddf368ee2e9a054fd2f
4
- data.tar.gz: fb7ad24d2a2c4d56a9dc4246751ff12542424ebc392bddba9be78f8f3420bc47
3
+ metadata.gz: c5b83398a6488aca7718c59177ca2775d52f303a841c343eef276bb5ff839d6f
4
+ data.tar.gz: e1e6008c9a19de5d9a13a242995fbde2d3424fdde199715f103f31990466ad46
5
5
  SHA512:
6
- metadata.gz: c5e2c6186cb26a61779090c520930a9941725db13d2807df6a61ecad308debecaf86c928ca9e4b5bc6ca3dd3768b16fa1456ae42802a34bd6a90ab8963db3b71
7
- data.tar.gz: 65e389aa2b586335518e70919aa560601a8157cc8ef21bab78ed8ab52fdce9dc0ba35add14410a737d4fbc9690fafe673cc7d5a1ec9ec14aa31dd64e2649a694
6
+ metadata.gz: 3f83522a7112bb64594de36d766cefdf7ea8498494a9e18e49355b13d0702a91165beed958c2740924f7387f0a9acdb8fb2dc4fc79750a39785c920e7ccb5cd0
7
+ data.tar.gz: 113ba5070733c634c923f646d2bf5f501f0af3060b783f26e596d6bad507257483f3eaf0f1f0cd2fc0581475d68c01013e0c83846a5a54ddfb456d9e18f113e9
data/CHANGELOG.md CHANGED
@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.0] - 2026-09-30
11
+
12
+ ### Added
13
+ - Four pinned downloadable icon libraries: `gilbarbara-logos` (Gil Barbara SVG
14
+ Logos), `homarr-icons` (Homarr Dashboard Icons), `carbon-pictograms` (IBM
15
+ Carbon Pictograms), and `aws-architecture-icons` (official AWS service icons).
16
+ - Product-specific references for Microsoft Power BI, Dagster, IBM Cloud,
17
+ CloudFormation, AWS Cloud Development Kit, and distinct SageMaker products.
18
+ Preserve available Homarr light/dark variants and upstream filenames.
19
+ - Retain upstream license/README files and source provenance for the new
20
+ open-source libraries; fail downloads when required attribution is missing.
21
+ - Verify the pinned AWS archive with SHA-256 and retain AWS attribution and
22
+ usage terms. Install 64px service SVGs; AWS assets remain proprietary and
23
+ are downloaded directly rather than bundled in the gem.
24
+ - Installation examples, source pins, and licensing guidance for the new sets.
25
+
26
+ ## [0.3.1] - 2026-09-30
27
+
28
+ ### Changed
29
+ - Update Feather to 4.29.2, Tabler to 3.48.0, Lucide to 1.49.0,
30
+ Simple Icons to 16.33.0, Material File Icons to 5.38.1, Octicons to
31
+ 19.38.0, Iconoir to 7.12.1, and Lobe Icons to 1.95.1.
32
+ - Download Tabler and Octicons from their official npm SVG packages.
33
+
34
+ ### Fixed
35
+ - Extract Tabler's nested SVG directories, with outline icons at `tabler/name`
36
+ and filled variants at `tabler/filled/name`, avoiding filename collisions.
37
+ - Download Silk from its existing `master` branch.
38
+
10
39
  ## [0.3.0] - 2026-07-31
11
40
 
12
41
  ### Added
@@ -59,7 +88,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
59
88
  hooks into `assets:precompile`) and `unmagic:icons:download[library]`
60
89
  - `Unmagic::Icon::Web`, a Rack app for browsing the configured icon libraries
61
90
 
62
- [Unreleased]: https://github.com/unreasonable-magic/unmagic-icon/compare/v0.3.0...HEAD
91
+ [Unreleased]: https://github.com/unreasonable-magic/unmagic-icon/compare/v0.4.0...HEAD
92
+ [0.4.0]: https://github.com/unreasonable-magic/unmagic-icon/compare/v0.3.1...v0.4.0
93
+ [0.3.1]: https://github.com/unreasonable-magic/unmagic-icon/compare/v0.3.0...v0.3.1
63
94
  [0.3.0]: https://github.com/unreasonable-magic/unmagic-icon/compare/v0.2.1...v0.3.0
64
95
  [0.2.1]: https://github.com/unreasonable-magic/unmagic-icon/compare/v0.2.0...v0.2.1
65
96
  [0.2.0]: https://github.com/unreasonable-magic/unmagic-icon/compare/v0.1.0...v0.2.0
data/README.md CHANGED
@@ -122,7 +122,7 @@ Available libraries:
122
122
  | `heroicons` | Heroicons | Beautiful hand-crafted SVG icons by the makers of Tailwind CSS |
123
123
  | `devicons` | Devicons | Icons representing programming languages, designing & development tools |
124
124
  | `feather` | Feather Icons | Simply beautiful open source icons |
125
- | `tabler` | Tabler Icons | Over 5400 free SVG icons |
125
+ | `tabler` | Tabler Icons | Outline icons at `tabler/name`, filled icons at `tabler/filled/name` |
126
126
  | `lucide` | Lucide Icons | Beautiful & consistent icons |
127
127
  | `simple-icons` | Simple Icons | SVG icons for popular brands |
128
128
  | `material-file-icons` | Material File Icons | Material Design file icons with filename/extension aliases |
@@ -134,6 +134,133 @@ Available libraries:
134
134
  | `material-design-icons` | Material Design Icons | 7400+ Material Design icons (Pictogrammers @mdi) |
135
135
  | `phosphor` | Phosphor Icons | Flexible icon family with six weights (thin to fill, plus duotone) |
136
136
  | `lobe-icons` | Lobe Icons | Popular AI / LLM model brand logos and icons |
137
+ | `gilbarbara-logos` | Gil Barbara SVG Logos | Full-colour technology logos |
138
+ | `homarr-icons` | Homarr Dashboard Icons | Service logos with available light/dark variants |
139
+ | `carbon-pictograms` | IBM Carbon Pictograms | IBM pictograms including IBM Cloud |
140
+ | `aws-architecture-icons` | AWS Architecture Icons | Official 64px service SVGs; AWS usage terms apply |
141
+
142
+ ### Brand and cloud libraries
143
+
144
+ | Key | Pinned source | Example references |
145
+ | --- | --- | --- |
146
+ | `gilbarbara-logos` | [gilbarbara/logos](https://github.com/gilbarbara/logos/tree/37a6b807fd71c622efea27a9309b5d4edc792969), commit `37a6b807fd71c622efea27a9309b5d4edc792969` | `gilbarbara-logos/microsoft-power-bi`, `gilbarbara-logos/aws-cloudformation` |
147
+ | `homarr-icons` | [homarr-labs/dashboard-icons](https://github.com/homarr-labs/dashboard-icons/tree/c716eb6798576923fa08e9b3e4125173148994ed), commit `c716eb6798576923fa08e9b3e4125173148994ed` | `homarr-icons/powerbi`, `homarr-icons/dagster-light`, `homarr-icons/dagster-dark` |
148
+ | `carbon-pictograms` | [`@carbon/pictograms` 12.85.0](https://www.npmjs.com/package/@carbon/pictograms/v/12.85.0) | `carbon-pictograms/ibm--cloud` |
149
+ | `aws-architecture-icons` | Official July 31, 2026 ZIP, SHA-256 verified | `aws-architecture-icons/Arch_AWS-CloudFormation_64` |
150
+
151
+ Install these through the same initializer and task as other libraries:
152
+
153
+ ```ruby
154
+ Unmagic::Icon.configure do |config|
155
+ config.libraries = [:"gilbarbara-logos", :"homarr-icons", :"carbon-pictograms", :"aws-architecture-icons"]
156
+ end
157
+ ```
158
+
159
+ ```bash
160
+ bin/rails unmagic:icons:install
161
+ # Or individually:
162
+ bin/rails 'unmagic:icons:download[gilbarbara-logos]'
163
+ bin/rails 'unmagic:icons:download[homarr-icons]'
164
+ bin/rails 'unmagic:icons:download[carbon-pictograms]'
165
+ bin/rails 'unmagic:icons:download[aws-architecture-icons]'
166
+ ```
167
+
168
+ ```erb
169
+ <%= unmagic_icon "gilbarbara-logos/microsoft-power-bi", class: "size-6" %>
170
+ <%= unmagic_icon "gilbarbara-logos/aws-cloudformation" %>
171
+ <%= unmagic_icon "homarr-icons/powerbi" %>
172
+ <%= unmagic_icon "homarr-icons/dagster-light" %>
173
+ <%= unmagic_icon "homarr-icons/dagster-dark" %>
174
+ <%= unmagic_icon "carbon-pictograms/ibm--cloud" %>
175
+ <%= unmagic_icon "aws-architecture-icons/Arch_AWS-CloudFormation_64" %>
176
+ <%= unmagic_icon "aws-architecture-icons/Arch_AWS-Cloud-Development-Kit_64" %>
177
+ <%= unmagic_icon "aws-architecture-icons/Arch_Amazon-SageMaker_64" %>
178
+ <%= unmagic_icon "aws-architecture-icons/Arch_Amazon-SageMaker-AI_64" %>
179
+ ```
180
+
181
+ Names retain upstream spelling, case, punctuation, and variant suffixes. Select
182
+ light/dark assets explicitly; no automatic theme or product aliases are added.
183
+ SVG Logos' `slim` identifies the [Slim PHP framework](https://www.slimframework.com/),
184
+ **not** the Ruby template language. Unknown products raise instead of falling
185
+ back to a parent-company logo.
186
+
187
+ Downloads copy `logos/*.svg`, `svg/*.svg`, and `package/svg/*.svg`, respectively,
188
+ into their library directories. Dashboard's archive also contains PNG/WebP and
189
+ website assets (a large download); only its top-level SVG assets are installed.
190
+ Carbon's `@carbon/icons` 11.89.0 and `@carbon/pictograms` 12.85.0 packages were
191
+ both inspected: the former has a UI-sized `svg/32/ibm-cloud.svg`; the latter has
192
+ the IBM Cloud pictogram `svg/ibm--cloud.svg`. This integration selects the
193
+ pictograms family, excludes `src/svg` duplicates and JavaScript, and preserves
194
+ the double hyphen in its canonical name. The UI icons package is not installed.
195
+
196
+ SVG Logos, Homarr Dashboard Icons, and Carbon retain the upstream license and README alongside the SVGs,
197
+ plus a `manifest.json` recording its source, exact revision/version and license.
198
+ SVG Logos also retains `logos.json` with the original product identities and
199
+ links. The downloader does not execute npm scripts or upstream code. Existing
200
+ libraries and saved references are unchanged; rendering uses the same inline
201
+ SVG pipeline. As with existing libraries, downloaded SVGs are trusted assets,
202
+ not sanitized untrusted uploads.
203
+
204
+ #### Attribution and redistribution
205
+
206
+ These assets are not covered by this gem's MIT license. Keep the downloaded
207
+ legal files when redistributing them:
208
+
209
+ - **SVG Logos:** [CC0-1.0](https://github.com/gilbarbara/logos/blob/37a6b807fd71c622efea27a9309b5d4edc792969/LICENSE.txt).
210
+ The upstream README identifies logos as their respective owners' property;
211
+ CC0 does not waive trademark rights or third-party rights.
212
+ - **Homarr Dashboard Icons:** [Apache-2.0](https://github.com/homarr-labs/dashboard-icons/blob/c716eb6798576923fa08e9b3e4125173148994ed/LICENSE),
213
+ with copyright attribution to Bjorn Lammers, Meier Lukas, Thomas Camlong and
214
+ Homarr Labs. Preserve the license and applicable notices; identify changes
215
+ when distributing modified files. The README limits brand representations
216
+ to identification and disclaims endorsement.
217
+ - **IBM Carbon Pictograms:** Apache-2.0, as shipped in the pinned package's
218
+ `LICENSE` and `README.md`. Preserve these and applicable copyright notices;
219
+ identify modifications. Apache-2.0 does not grant general trademark rights.
220
+
221
+ Neither pinned Apache archive contains a separate `NOTICE` file. SVG bytes are
222
+ copied unchanged; rendering adds the gem's normal wrapper attributes. If you
223
+ redistribute rendered or otherwise modified assets, retain the license and
224
+ applicable notices and identify your modifications.
225
+
226
+ #### AWS Architecture Icons
227
+
228
+ The `aws-architecture-icons` downloader fetches the official July 31, 2026 ZIP
229
+ directly from AWS. It verifies SHA-256
230
+ `d2d166c453526471749d520e0db022c459abef759d2946cf2dd1d1c992dc6526`
231
+ before extraction and installs only `Architecture-Service-Icons_07312026/Arch_*/64/*.svg`.
232
+ Upstream filenames and SVG bytes remain unchanged. Other sizes, resource icons,
233
+ category icons, raster files, and macOS metadata are excluded.
234
+
235
+ AWS assets are proprietary. The [AWS Architecture Icons](https://aws.amazon.com/architecture/icons/)
236
+ page permits customers and partners to use them in architecture diagrams and
237
+ related materials. The [AWS Site Terms](https://aws.amazon.com/terms/) and
238
+ [AWS Intellectual Property License](https://aws.amazon.com/legal/aws-ip-license-terms/)
239
+ apply; downloading through this gem does not grant general redistribution or
240
+ trademark rights. No separate license file is included in the archive. The
241
+ installer writes `ATTRIBUTION.txt` with AWS ownership, source and terms links,
242
+ usage constraints and the extraction/rendering changes, plus provenance in
243
+ `manifest.json`. No AWS assets are bundled in the gem. Check AWS's terms for
244
+ your intended use, especially before redistributing an icon pack.
245
+
246
+ The inspected [official archive](https://d1.awsstatic.com/onedam/marketing-channels/website/public/shared/architecture-icon-release/Icon-package_07312026.5846e92413caa21490223536cc97f1269e44fa92.zip)
247
+ contains the following distinct service SVGs under
248
+ `Architecture-Service-Icons_07312026/`:
249
+
250
+ | Product | Category / exact filename |
251
+ | --- | --- |
252
+ | CloudFormation | `Arch_Management-Tools/64/Arch_AWS-CloudFormation_64.svg` |
253
+ | AWS Cloud Development Kit | `Arch_Developer-Tools/64/Arch_AWS-Cloud-Development-Kit_64.svg` |
254
+ | Amazon SageMaker | `Arch_Analytics/64/Arch_Amazon-SageMaker_64.svg` |
255
+ | Amazon SageMaker AI | `Arch_Artificial-Intelligence/64/Arch_Amazon-SageMaker-AI_64.svg` |
256
+ | Amazon SageMaker Studio Lab | `Arch_Artificial-Intelligence/64/Arch_Amazon-SageMaker-Studio-Lab_64.svg` |
257
+ | Amazon SageMaker Ground Truth | `Arch_Artificial-Intelligence/64/Arch_Amazon-SageMaker-Ground-Truth_64.svg` |
258
+
259
+ Each filename above is installed at `aws-architecture-icons/<filename-without-.svg>`.
260
+ For example, Studio Lab is `aws-architecture-icons/Arch_Amazon-SageMaker-Studio-Lab_64`
261
+ and Ground Truth is `aws-architecture-icons/Arch_Amazon-SageMaker-Ground-Truth_64`.
262
+ SageMaker and SageMaker AI remain distinct, with no ambiguous `sagemaker` alias
263
+ or fallback to AWS's company logo. Source and licensing review: 2026-09-30.
137
264
 
138
265
  ### Browsing icons
139
266
 
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "digest"
4
+
5
+ module Unmagic
6
+ class Icon
7
+ class Library
8
+ class Source
9
+ class AwsArchitectureIcons < Source
10
+ SHA256 = "d2d166c453526471749d520e0db022c459abef759d2946cf2dd1d1c992dc6526"
11
+ ATTRIBUTION = <<~TEXT
12
+ AWS Architecture Icons — July 31, 2026
13
+ Icons are the property of Amazon Web Services, Inc. and/or its affiliates.
14
+ Source: https://aws.amazon.com/architecture/icons/
15
+ Terms: https://aws.amazon.com/terms/
16
+ IP license: https://aws.amazon.com/legal/aws-ip-license-terms/
17
+
18
+ AWS permits customers and partners to use these assets in architecture
19
+ diagrams and related materials. These are proprietary assets, not assets
20
+ licensed under this gem's MIT license. Downloading does not grant general
21
+ redistribution or trademark rights; check AWS's terms for your use.
22
+ No separate license file is included in this upstream archive.
23
+
24
+ This download copies the 64px architecture service SVGs unchanged,
25
+ preserving their upstream filenames. The gem's renderer adds its normal
26
+ SVG wrapper attributes. Other sizes, resource icons and category icons
27
+ are not installed.
28
+ TEXT
29
+
30
+ key :"aws-architecture-icons"
31
+ title "AWS Architecture Icons"
32
+ description "Official AWS service icons for architecture diagrams (AWS usage terms apply)"
33
+ url "https://d1.awsstatic.com/onedam/marketing-channels/website/public/shared/architecture-icon-release/Icon-package_07312026.5846e92413caa21490223536cc97f1269e44fa92.zip"
34
+ archive :zip
35
+ extract "Architecture-Service-Icons_07312026/Arch_*/64/*.svg"
36
+ provenance "provider" => "Amazon Web Services", "version" => "2026-07-31",
37
+ "license" => "Proprietary — AWS usage terms", "sha256" => SHA256,
38
+ "homepage" => "https://aws.amazon.com/architecture/icons/",
39
+ "terms" => "https://aws.amazon.com/terms/"
40
+
41
+ private
42
+
43
+ def download_file(url, destination)
44
+ super
45
+ unless Digest::SHA256.file(destination).hexdigest == SHA256
46
+ raise DownloadError, "AWS Architecture Icons archive checksum mismatch"
47
+ end
48
+ end
49
+
50
+ def write_manifest(tmpdir, target_dir)
51
+ super
52
+ File.write(Pathname(target_dir).join("ATTRIBUTION.txt"), ATTRIBUTION)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unmagic
4
+ class Icon
5
+ class Library
6
+ class Source
7
+ class CarbonPictograms < Source
8
+ key :"carbon-pictograms"
9
+ title "IBM Carbon Pictograms"
10
+ description "IBM Carbon pictograms, including the IBM Cloud mark"
11
+ url "https://registry.npmjs.org/@carbon/pictograms/-/pictograms-12.85.0.tgz"
12
+ archive :tgz
13
+ # Use the published SVGs, not src/svg duplicates or JS components.
14
+ extract "package/svg/*.svg"
15
+ notices "package/LICENSE", "package/README.md"
16
+ provenance "provider" => "@carbon/pictograms", "version" => "12.85.0", "license" => "Apache-2.0",
17
+ "homepage" => "https://github.com/carbon-design-system/carbon"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -8,9 +8,9 @@ module Unmagic
8
8
  key :feather
9
9
  title "Feather Icons"
10
10
  description "Simply beautiful open source icons"
11
- url "https://github.com/feathericons/feather/archive/refs/tags/v4.29.1.zip"
11
+ url "https://github.com/feathericons/feather/archive/refs/tags/v4.29.2.zip"
12
12
  archive :zip
13
- extract "feather-4.29.1/icons/*.svg"
13
+ extract "feather-4.29.2/icons/*.svg"
14
14
  end
15
15
  end
16
16
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unmagic
4
+ class Icon
5
+ class Library
6
+ class Source
7
+ class GilbarbaraLogos < Source
8
+ REVISION = "37a6b807fd71c622efea27a9309b5d4edc792969"
9
+ ROOT = "logos-#{REVISION}"
10
+
11
+ key :"gilbarbara-logos"
12
+ title "Gil Barbara SVG Logos"
13
+ description "Full-colour technology logos curated by Gil Barbara"
14
+ url "https://codeload.github.com/gilbarbara/logos/tar.gz/#{REVISION}"
15
+ archive :tgz
16
+ extract "#{ROOT}/logos/*.svg"
17
+ notices "#{ROOT}/LICENSE.txt", "#{ROOT}/README.md", "#{ROOT}/logos.json"
18
+ provenance "provider" => "gilbarbara/logos", "revision" => REVISION, "license" => "CC0-1.0",
19
+ "homepage" => "https://github.com/gilbarbara/logos"
20
+ # Keep upstream names, including slim (the PHP framework). No language
21
+ # aliases or parent-company fallbacks are inferred from the catalogue.
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unmagic
4
+ class Icon
5
+ class Library
6
+ class Source
7
+ class HomarrIcons < Source
8
+ REVISION = "c716eb6798576923fa08e9b3e4125173148994ed"
9
+ ROOT = "dashboard-icons-#{REVISION}"
10
+
11
+ key :"homarr-icons"
12
+ title "Homarr Dashboard Icons"
13
+ description "Dashboard service logos from Homarr Labs, including light/dark variants"
14
+ url "https://codeload.github.com/homarr-labs/dashboard-icons/tar.gz/#{REVISION}"
15
+ archive :tgz
16
+ # Suffixes such as dagster-light and dagster-dark are part of the name.
17
+ extract "#{ROOT}/svg/*.svg"
18
+ notices "#{ROOT}/LICENSE", "#{ROOT}/README.md"
19
+ provenance "provider" => "homarr-labs/dashboard-icons", "revision" => REVISION, "license" => "Apache-2.0",
20
+ "homepage" => "https://github.com/homarr-labs/dashboard-icons"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -9,12 +9,12 @@ module Unmagic
9
9
  key :iconoir
10
10
  title "Iconoir"
11
11
  description "Free open source icons designed on a 24x24 grid"
12
- url "https://github.com/iconoir-icons/iconoir/archive/refs/tags/v7.11.1.zip"
12
+ url "https://github.com/iconoir-icons/iconoir/archive/refs/tags/v7.12.1.zip"
13
13
  archive :zip
14
14
  dir "iconoir"
15
15
  extract_into(
16
- "iconoir-7.11.1/icons/regular" => "regular",
17
- "iconoir-7.11.1/icons/solid" => "solid"
16
+ "iconoir-7.12.1/icons/regular" => "regular",
17
+ "iconoir-7.12.1/icons/solid" => "solid"
18
18
  )
19
19
  end
20
20
  end
@@ -13,7 +13,7 @@ module Unmagic
13
13
  key :"lobe-icons"
14
14
  title "Lobe Icons"
15
15
  description "Popular AI / LLM model brand logos and icons"
16
- url "https://registry.npmjs.org/@lobehub/icons-static-svg/-/icons-static-svg-1.94.0.tgz"
16
+ url "https://registry.npmjs.org/@lobehub/icons-static-svg/-/icons-static-svg-1.95.1.tgz"
17
17
  archive :tgz
18
18
  dir "lobe-icons"
19
19
  extract "package/icons/*.svg"
@@ -8,7 +8,7 @@ module Unmagic
8
8
  key :lucide
9
9
  title "Lucide Icons"
10
10
  description "Beautiful & consistent icons"
11
- url "https://github.com/lucide-icons/lucide/releases/download/1.21.0/lucide-icons-1.21.0.zip"
11
+ url "https://github.com/lucide-icons/lucide/releases/download/1.49.0/lucide-icons-1.49.0.zip"
12
12
  archive :zip
13
13
  extract "icons/*.svg"
14
14
  end
@@ -11,7 +11,7 @@ module Unmagic
11
11
  key :"material-file-icons"
12
12
  title "Material File Icons"
13
13
  description "Material Design file icons with filename/extension aliases (PKief material-icon-theme)"
14
- url "https://registry.npmjs.org/material-icon-theme/-/material-icon-theme-5.35.0.tgz"
14
+ url "https://registry.npmjs.org/material-icon-theme/-/material-icon-theme-5.38.1.tgz"
15
15
  archive :tgz
16
16
  dir "material"
17
17
  extract "package/icons/*.svg"
@@ -7,10 +7,10 @@ module Unmagic
7
7
  key :octicons
8
8
  title "Octicons"
9
9
  description "Icons and icon font from GitHub"
10
- url "https://github.com/primer/octicons/archive/refs/tags/v19.28.1.zip"
11
- archive :zip
10
+ url "https://registry.npmjs.org/@primer/octicons/-/octicons-19.38.0.tgz"
11
+ archive :tgz
12
12
  dir "octicons"
13
- extract "octicons-19.28.1/icons/*.svg"
13
+ extract "package/build/svg/*.svg"
14
14
  end
15
15
  end
16
16
  end
@@ -12,7 +12,7 @@ module Unmagic
12
12
  description "The classic silk icon set recreated as SVG"
13
13
 
14
14
  REPO = "frhun/silk-icon-scalable"
15
- BRANCH = "main"
15
+ BRANCH = "master"
16
16
  PATHS = [ "baseicons", "extra" ].freeze
17
17
 
18
18
  private
@@ -8,7 +8,7 @@ module Unmagic
8
8
  key :"simple-icons"
9
9
  title "Simple Icons"
10
10
  description "SVG icons for popular brands"
11
- url "https://registry.npmjs.org/simple-icons/-/simple-icons-14.2.0.tgz"
11
+ url "https://registry.npmjs.org/simple-icons/-/simple-icons-16.33.0.tgz"
12
12
  archive :tgz
13
13
  extract "package/icons/*.svg"
14
14
  end
@@ -7,10 +7,15 @@ module Unmagic
7
7
  class Tabler < Source
8
8
  key :tabler
9
9
  title "Tabler Icons"
10
- description "Over 5400 free SVG icons"
11
- url "https://github.com/tabler/tabler-icons/releases/download/v3.24.0/tabler-icons-3.24.0.zip"
12
- archive :zip
13
- extract "svg/*.svg"
10
+ description "Free SVG icons in outline and filled styles"
11
+ url "https://registry.npmjs.org/@tabler/icons/-/icons-3.48.0.tgz"
12
+ archive :tgz
13
+ # Keep outline names at tabler/<name>; filled icons live separately
14
+ # because both styles share filenames.
15
+ extract_into(
16
+ "package/icons/outline" => ".",
17
+ "package/icons/filled" => "filled"
18
+ )
14
19
  end
15
20
  end
16
21
  end
@@ -85,6 +85,15 @@ module Unmagic
85
85
  def extract_into(mapping = nil)
86
86
  mapping ? @extract_into = mapping : @extract_into
87
87
  end
88
+
89
+ # Required upstream legal files, copied alongside the icons unchanged.
90
+ def notices(*patterns)
91
+ patterns.empty? ? (@notices || []) : @notices = patterns
92
+ end
93
+
94
+ def provenance(value = nil)
95
+ value ? @provenance = value : @provenance
96
+ end
88
97
  end
89
98
 
90
99
  def download(target_dir: default_target_dir, force: false)
@@ -120,15 +129,26 @@ module Unmagic
120
129
  download_file(self.class.url, archive_path)
121
130
  extract_archive(archive_path, tmpdir, self.class.archive)
122
131
 
132
+ notice_files = self.class.notices.map do |pattern|
133
+ matches = Dir.glob(File.join(tmpdir, pattern)).select { |file| File.file?(file) }
134
+ raise ExtractionError, "Missing required attribution: #{pattern}" if matches.empty?
135
+
136
+ matches
137
+ end.flatten
123
138
  FileUtils.mkdir_p(target_dir)
139
+ notice_files.each { |file| FileUtils.cp(file, target_dir) }
124
140
  copy_assets(tmpdir, target_dir)
125
141
  write_manifest(tmpdir, target_dir)
126
142
  end
127
143
  end
128
144
 
129
- # Libraries that ship a file→icon mapping override this to write a
130
- # manifest.json into target_dir. Default: nothing.
131
- def write_manifest(_tmpdir, _target_dir)
145
+ # Record opt-in provenance; libraries with file→icon mappings can
146
+ # override this to write their own manifest.json.
147
+ def write_manifest(_tmpdir, target_dir)
148
+ return unless self.class.provenance
149
+
150
+ manifest = self.class.provenance.merge("name" => self.class.dir, "archive" => self.class.url)
151
+ File.write(Pathname(target_dir).join("manifest.json"), JSON.pretty_generate(manifest))
132
152
  end
133
153
 
134
154
  def copy_assets(tmpdir, target_dir)
@@ -305,3 +325,7 @@ require_relative "source/iconoir"
305
325
  require_relative "source/material_design_icons"
306
326
  require_relative "source/phosphor"
307
327
  require_relative "source/lobe_icons"
328
+ require_relative "source/gilbarbara_logos"
329
+ require_relative "source/homarr_icons"
330
+ require_relative "source/carbon_pictograms"
331
+ require_relative "source/aws_architecture_icons"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Unmagic
4
4
  class Icon
5
- VERSION = "0.3.0"
5
+ VERSION = "0.4.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unmagic-icon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Pitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-07-31 00:00:00.000000000 Z
11
+ date: 2026-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -115,11 +115,15 @@ files:
115
115
  - lib/unmagic/icon/library.rb
116
116
  - lib/unmagic/icon/library/registry.rb
117
117
  - lib/unmagic/icon/library/source.rb
118
+ - lib/unmagic/icon/library/source/aws_architecture_icons.rb
118
119
  - lib/unmagic/icon/library/source/bootstrap_icons.rb
120
+ - lib/unmagic/icon/library/source/carbon_pictograms.rb
119
121
  - lib/unmagic/icon/library/source/coloured_icons.rb
120
122
  - lib/unmagic/icon/library/source/devicons.rb
121
123
  - lib/unmagic/icon/library/source/feather.rb
124
+ - lib/unmagic/icon/library/source/gilbarbara_logos.rb
122
125
  - lib/unmagic/icon/library/source/heroicons.rb
126
+ - lib/unmagic/icon/library/source/homarr_icons.rb
123
127
  - lib/unmagic/icon/library/source/iconoir.rb
124
128
  - lib/unmagic/icon/library/source/lobe_icons.rb
125
129
  - lib/unmagic/icon/library/source/lucide.rb