diff --git a/lib/berrypod_web/components/core_components.ex b/lib/berrypod_web/components/core_components.ex index 9125aeb..27d2539 100644 --- a/lib/berrypod_web/components/core_components.ex +++ b/lib/berrypod_web/components/core_components.ex @@ -426,9 +426,12 @@ defmodule BerrypodWeb.CoreComponents do @doc """ Renders a link to an external site with proper security attributes, an external-link icon, and screen reader context. + + Set `icon={false}` when the link already contains its own visual indicator. """ attr :href, :string, required: true attr :class, :string, default: nil + attr :icon, :boolean, default: true attr :rest, :global slot :inner_block, required: true @@ -436,7 +439,7 @@ defmodule BerrypodWeb.CoreComponents do ~H""" {render_slot(@inner_block)} - <.icon name="hero-arrow-top-right-on-square" class="external-link-icon" /> + <.icon :if={@icon} name="hero-arrow-top-right-on-square" class="external-link-icon" /> (opens in new tab) """ @@ -623,17 +626,16 @@ defmodule BerrypodWeb.CoreComponents do {@option.description} {@option.badge} - " (opens in new tab)"} + aria-label={@option.name} > {@option.name} ↗ - + """ end diff --git a/lib/berrypod_web/components/shop_components/content.ex b/lib/berrypod_web/components/shop_components/content.ex index b696e2c..0b163fd 100644 --- a/lib/berrypod_web/components/shop_components/content.ex +++ b/lib/berrypod_web/components/shop_components/content.ex @@ -3,6 +3,7 @@ defmodule BerrypodWeb.ShopComponents.Content do use Phoenix.Component + import BerrypodWeb.CoreComponents, only: [external_link: 1] import BerrypodWeb.ShopComponents.Base @default_social_links [ @@ -421,18 +422,16 @@ defmodule BerrypodWeb.ShopComponents.Content do

{@title}

@@ -458,15 +457,14 @@ defmodule BerrypodWeb.ShopComponents.Content do ~H""" """ diff --git a/lib/berrypod_web/live/admin/email_settings.ex b/lib/berrypod_web/live/admin/email_settings.ex index ffd27ce..20faa1f 100644 --- a/lib/berrypod_web/live/admin/email_settings.ex +++ b/lib/berrypod_web/live/admin/email_settings.ex @@ -268,16 +268,15 @@ defmodule BerrypodWeb.Admin.EmailSettings do

{adapter.name} - " website (opens in new tab)"} + aria-label={adapter.name <> " website"} > ↗ - +

{adapter.description}

diff --git a/lib/berrypod_web/live/admin/product_show.ex b/lib/berrypod_web/live/admin/product_show.ex index 1d82f76..b1bd22b 100644 --- a/lib/berrypod_web/live/admin/product_show.ex +++ b/lib/berrypod_web/live/admin/product_show.ex @@ -98,17 +98,15 @@ defmodule BerrypodWeb.Admin.ProductShow do <.status_badge status={@product.status} /> <:actions> - <.link + <.external_link :if={provider_edit_url(@product)} href={provider_edit_url(@product)} - target="_blank" - rel="noopener noreferrer" + icon={false} class="admin-btn admin-btn-ghost admin-btn-sm" > Edit on {provider_label(@product)} <.icon name="hero-arrow-top-right-on-square-mini" class="size-4" /> - (opens in new tab) - + <.link navigate={~p"/products/#{@product.slug}"} class="admin-btn admin-btn-ghost admin-btn-sm" diff --git a/lib/berrypod_web/page_renderer.ex b/lib/berrypod_web/page_renderer.ex index 07a70dd..9608776 100644 --- a/lib/berrypod_web/page_renderer.ex +++ b/lib/berrypod_web/page_renderer.ex @@ -16,7 +16,7 @@ defmodule BerrypodWeb.PageRenderer do statics: BerrypodWeb.static_paths() import BerrypodWeb.BlockEditorComponents - import BerrypodWeb.CoreComponents, only: [icon: 1] + import BerrypodWeb.CoreComponents, only: [icon: 1, external_link: 1] alias Berrypod.Cart @@ -883,15 +883,12 @@ defmodule BerrypodWeb.PageRenderer do <% end %> <%= if assigns[:order].tracking_url do %> - Track parcel - + <% end %> @@ -1078,9 +1075,9 @@ defmodule BerrypodWeb.PageRenderer do

- + <.external_link href={@raw_url}> {if @caption != "", do: @caption, else: "Watch video"} - +

{@caption}