From 6072eebe5b8c851073aa8922b5797059484b6c59 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Tue, 3 Mar 2026 13:34:23 -0600 Subject: [PATCH] vendor heroicons SVGs, remove GitHub dependency Only the 7 SVGs actually used are vendored into priv/heroicons/. Also fixes the icon component path resolution (was missing the 24/ size directory) and corrects hero-x-mark/hero-map-pin icon names that included an erroneous hero- prefix. --- assets/css/app.css | 2 +- assets/vendor/heroicons.js | 2 +- lib/aprsme_web/components/core_components.ex | 8 ++++---- lib/aprsme_web/live/map_live/components.ex | 6 +++--- mix.exs | 2 -- mix.lock | 1 - priv/heroicons/24/outline/arrow-path.svg | 3 +++ priv/heroicons/24/outline/exclamation-circle.svg | 3 +++ priv/heroicons/24/outline/information-circle.svg | 3 +++ priv/heroicons/24/outline/map-pin.svg | 4 ++++ priv/heroicons/24/outline/x-mark.svg | 3 +++ priv/heroicons/24/solid/arrow-left.svg | 3 +++ priv/heroicons/24/solid/x-mark.svg | 3 +++ 13 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 priv/heroicons/24/outline/arrow-path.svg create mode 100644 priv/heroicons/24/outline/exclamation-circle.svg create mode 100644 priv/heroicons/24/outline/information-circle.svg create mode 100644 priv/heroicons/24/outline/map-pin.svg create mode 100644 priv/heroicons/24/outline/x-mark.svg create mode 100644 priv/heroicons/24/solid/arrow-left.svg create mode 100644 priv/heroicons/24/solid/x-mark.svg diff --git a/assets/css/app.css b/assets/css/app.css index 4d7f59f..589ca63 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -18,7 +18,7 @@ /* Vendor CSS files are imported via JavaScript/ESBuild */ /* A Tailwind plugin that makes "hero-#{ICON}" classes available. - The heroicons installation itself is managed by your mix.exs */ + Icons are vendored in priv/heroicons/ */ @plugin "../vendor/heroicons"; /* Dark mode uses data-theme="dark" attribute on , set via localStorage */ diff --git a/assets/vendor/heroicons.js b/assets/vendor/heroicons.js index 296f80e..48fa96b 100644 --- a/assets/vendor/heroicons.js +++ b/assets/vendor/heroicons.js @@ -3,7 +3,7 @@ const fs = require("fs") const path = require("path") module.exports = plugin(function({matchComponents, theme}) { - let iconsDir = path.join(__dirname, "../../deps/heroicons/optimized") + let iconsDir = path.join(__dirname, "../../priv/heroicons") let values = {} let icons = [ ["", "/24/outline"], diff --git a/lib/aprsme_web/components/core_components.ex b/lib/aprsme_web/components/core_components.ex index d463746..dd8760d 100644 --- a/lib/aprsme_web/components/core_components.ex +++ b/lib/aprsme_web/components/core_components.ex @@ -6,8 +6,7 @@ defmodule AprsmeWeb.CoreComponents do See the [Tailwind CSS documentation](https://tailwindcss.com) to learn how to customize the generated components in this module. - Icons are provided by [heroicons](https://heroicons.com), using the - [heroicons_elixir](https://github.com/mveytsman/heroicons_elixir) project. + Icons are provided by [heroicons](https://heroicons.com), vendored in priv/heroicons/. """ use Phoenix.Component use Gettext, backend: AprsmeWeb.Gettext @@ -16,7 +15,7 @@ defmodule AprsmeWeb.CoreComponents do alias Phoenix.LiveView.JS @doc """ - Renders a Heroicon SVG inline from deps/heroicons/optimized. + Renders a Heroicon SVG inline from priv/heroicons/. Usage: <.icon name="arrow-left" outline={true} class="h-5 w-5" /> """ attr :name, :string, required: true @@ -28,7 +27,8 @@ defmodule AprsmeWeb.CoreComponents do path = Path.join([ - :aprsme |> :code.priv_dir() |> to_string() |> Path.dirname() |> Path.join("deps/heroicons/optimized"), + :aprsme |> :code.priv_dir() |> to_string(), + "heroicons/24", style, name <> ".svg" ]) diff --git a/lib/aprsme_web/live/map_live/components.ex b/lib/aprsme_web/live/map_live/components.ex index 3eb36ab..916b2f3 100644 --- a/lib/aprsme_web/live/map_live/components.ex +++ b/lib/aprsme_web/live/map_live/components.ex @@ -60,7 +60,7 @@ defmodule AprsmeWeb.MapLive.Components do phx-click="toggle_slideover" class="p-2 text-gray-400 hover:text-gray-600 transition-colors" > - <.icon name="hero-x-mark" class="w-5 h-5" /> + <.icon name="x-mark" class="w-5 h-5" /> """ @@ -190,7 +190,7 @@ defmodule AprsmeWeb.MapLive.Components do phx-click="clear_callsign_filter" class="absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600" > - <.icon name="hero-x-mark" class="w-4 h-4" /> + <.icon name="x-mark" class="w-4 h-4" /> <% end %> @@ -249,7 +249,7 @@ defmodule AprsmeWeb.MapLive.Components do class="ml-2 p-2 text-blue-600 hover:bg-blue-50 rounded transition-colors" title="Center map on this location" > - <.icon name="hero-map-pin" class="w-5 h-5" /> + <.icon name="map-pin" class="w-5 h-5" /> <% end %> diff --git a/mix.exs b/mix.exs index cd80286..7b1809b 100644 --- a/mix.exs +++ b/mix.exs @@ -83,8 +83,6 @@ defmodule Aprsme.MixProject do aprs_dep(), {:esbuild, "~> 0.10", runtime: Mix.env() == :dev}, {:tailwind, "~> 0.4.0", runtime: Mix.env() == :dev}, - {:heroicons, - github: "tailwindlabs/heroicons", tag: "v2.1.1", sparse: "optimized", app: false, compile: false, depth: 1}, {:bandit, "~> 1.5"}, {:req, "~> 0.5"}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, diff --git a/mix.lock b/mix.lock index 7434086..98ce229 100644 --- a/mix.lock +++ b/mix.lock @@ -36,7 +36,6 @@ "gridsquare": {:hex, :gridsquare, "0.3.1", "819cc1c1739ad60362311207adb885b9c500c548b71e7a8affb9fb78ba22460c", [:mix], [], "hexpm", "b461a5743121564394b1b837e6d1e6af24099e1b3218b30bf9fe869bd66d450c"}, "hackney": {:hex, :hackney, "1.17.1", "08463f93d2cc1a03817bf28d8dae6021543f773bd436c9377047224856c4422c", [:rebar3], [{:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "~> 3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "d2cba9e3c8103ad0320623e9f1c33e8d378a15eaabe2ee8ae441898f3d35a18c"}, "hammer": {:hex, :hammer, "7.2.0", "73113eca87f0fd20a6d3679c1182e8c4c1778266f61de4e9dc8c589dee156c30", [:mix], [], "hexpm", "c50fa865ddfe7b3d4f8a6941f56940679e02a9a1465b00668a95d140b101d828"}, - "heroicons": {:git, "https://github.com/tailwindlabs/heroicons.git", "88ab3a0d790e6a47404cba02800a6b25d2afae50", [tag: "v2.1.1", sparse: "optimized", depth: 1]}, "hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "igniter": {:hex, :igniter, "0.7.2", "81c132c0df95963c7a228f74a32d3348773743ed9651f24183bfce0fe6ff16d1", [:mix], [{:glob_ex, "~> 0.1.7", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:owl, "~> 0.11", [hex: :owl, repo: "hexpm", optional: false]}, {:phx_new, "~> 1.7", [hex: :phx_new, repo: "hexpm", optional: true]}, {:req, "~> 0.5", [hex: :req, repo: "hexpm", optional: false]}, {:rewrite, ">= 1.1.1 and < 2.0.0-0", [hex: :rewrite, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.4", [hex: :sourceror, repo: "hexpm", optional: false]}, {:spitfire, ">= 0.1.3 and < 1.0.0-0", [hex: :spitfire, repo: "hexpm", optional: false]}], "hexpm", "f4cab73ec31f4fb452de1a17037f8a08826105265aa2d76486fcb848189bef9b"}, diff --git a/priv/heroicons/24/outline/arrow-path.svg b/priv/heroicons/24/outline/arrow-path.svg new file mode 100644 index 0000000..fba7241 --- /dev/null +++ b/priv/heroicons/24/outline/arrow-path.svg @@ -0,0 +1,3 @@ + diff --git a/priv/heroicons/24/outline/exclamation-circle.svg b/priv/heroicons/24/outline/exclamation-circle.svg new file mode 100644 index 0000000..0833d8e --- /dev/null +++ b/priv/heroicons/24/outline/exclamation-circle.svg @@ -0,0 +1,3 @@ + diff --git a/priv/heroicons/24/outline/information-circle.svg b/priv/heroicons/24/outline/information-circle.svg new file mode 100644 index 0000000..d4ac360 --- /dev/null +++ b/priv/heroicons/24/outline/information-circle.svg @@ -0,0 +1,3 @@ + diff --git a/priv/heroicons/24/outline/map-pin.svg b/priv/heroicons/24/outline/map-pin.svg new file mode 100644 index 0000000..74cc786 --- /dev/null +++ b/priv/heroicons/24/outline/map-pin.svg @@ -0,0 +1,4 @@ + diff --git a/priv/heroicons/24/outline/x-mark.svg b/priv/heroicons/24/outline/x-mark.svg new file mode 100644 index 0000000..19b4ac7 --- /dev/null +++ b/priv/heroicons/24/outline/x-mark.svg @@ -0,0 +1,3 @@ + diff --git a/priv/heroicons/24/solid/arrow-left.svg b/priv/heroicons/24/solid/arrow-left.svg new file mode 100644 index 0000000..3f84fb7 --- /dev/null +++ b/priv/heroicons/24/solid/arrow-left.svg @@ -0,0 +1,3 @@ + diff --git a/priv/heroicons/24/solid/x-mark.svg b/priv/heroicons/24/solid/x-mark.svg new file mode 100644 index 0000000..5561f00 --- /dev/null +++ b/priv/heroicons/24/solid/x-mark.svg @@ -0,0 +1,3 @@ +