refactor: extract skip_link to shared ShopComponents module

Move the accessibility skip link from ThemeLive.PreviewPages to the
shared ShopComponents module for reuse on public storefront pages.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Jamey Greenwood 2026-01-17 13:51:15 +00:00
parent 5f3efebdfc
commit 0e998fdac9
9 changed files with 21 additions and 17 deletions

View File

@ -38,4 +38,18 @@ defmodule SimpleshopThemeWeb.ShopComponents do
</div> </div>
""" """
end end
@doc """
Renders the skip link for keyboard navigation accessibility.
This is a standard accessibility pattern that allows keyboard users
to skip directly to the main content.
"""
def skip_link(assigns) do
~H"""
<a href="#main-content" class="skip-link">
Skip to main content
</a>
"""
end
end end

View File

@ -4,16 +4,6 @@ defmodule SimpleshopThemeWeb.ThemeLive.PreviewPages do
embed_templates "preview_pages/*" embed_templates "preview_pages/*"
@doc """
Renders the skip link for keyboard navigation accessibility.
"""
def skip_link(assigns) do
~H"""
<a href="#main-content" class="skip-link">
Skip to main content
</a>
"""
end
@doc """ @doc """
Renders the shop header with logo based on logo_mode setting. Renders the shop header with logo based on logo_mode setting.

View File

@ -1,6 +1,6 @@
<div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);"> <div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);">
<!-- Skip Link for Accessibility --> <!-- Skip Link for Accessibility -->
<SimpleshopThemeWeb.ThemeLive.PreviewPages.skip_link /> <.skip_link />
<!-- Announcement Bar --> <!-- Announcement Bar -->
<%= if @theme_settings.announcement_bar do %> <%= if @theme_settings.announcement_bar do %>

View File

@ -1,6 +1,6 @@
<div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);"> <div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);">
<!-- Skip Link for Accessibility --> <!-- Skip Link for Accessibility -->
<SimpleshopThemeWeb.ThemeLive.PreviewPages.skip_link /> <.skip_link />
<!-- Announcement Bar --> <!-- Announcement Bar -->
<%= if @theme_settings.announcement_bar do %> <%= if @theme_settings.announcement_bar do %>

View File

@ -1,6 +1,6 @@
<div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);"> <div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);">
<!-- Skip Link for Accessibility --> <!-- Skip Link for Accessibility -->
<SimpleshopThemeWeb.ThemeLive.PreviewPages.skip_link /> <.skip_link />
<!-- Announcement Bar --> <!-- Announcement Bar -->
<%= if @theme_settings.announcement_bar do %> <%= if @theme_settings.announcement_bar do %>

View File

@ -1,6 +1,6 @@
<div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);"> <div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);">
<!-- Skip Link for Accessibility --> <!-- Skip Link for Accessibility -->
<SimpleshopThemeWeb.ThemeLive.PreviewPages.skip_link /> <.skip_link />
<!-- Announcement Bar --> <!-- Announcement Bar -->
<%= if @theme_settings.announcement_bar do %> <%= if @theme_settings.announcement_bar do %>

View File

@ -1,6 +1,6 @@
<div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);"> <div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);">
<!-- Skip Link for Accessibility --> <!-- Skip Link for Accessibility -->
<SimpleshopThemeWeb.ThemeLive.PreviewPages.skip_link /> <.skip_link />
<!-- Announcement Bar --> <!-- Announcement Bar -->
<%= if @theme_settings.announcement_bar do %> <%= if @theme_settings.announcement_bar do %>

View File

@ -1,6 +1,6 @@
<div class="shop-container min-h-screen" style="background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);"> <div class="shop-container min-h-screen" style="background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);">
<!-- Skip Link for Accessibility --> <!-- Skip Link for Accessibility -->
<SimpleshopThemeWeb.ThemeLive.PreviewPages.skip_link /> <.skip_link />
<!-- Announcement Bar --> <!-- Announcement Bar -->
<%= if @theme_settings.announcement_bar do %> <%= if @theme_settings.announcement_bar do %>

View File

@ -3,7 +3,7 @@
%> %>
<div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);"> <div class="shop-container min-h-screen" style="position: relative; background-color: var(--t-surface-base); font-family: var(--t-font-body); color: var(--t-text-primary);">
<!-- Skip Link for Accessibility --> <!-- Skip Link for Accessibility -->
<SimpleshopThemeWeb.ThemeLive.PreviewPages.skip_link /> <.skip_link />
<!-- Announcement Bar --> <!-- Announcement Bar -->
<%= if @theme_settings.announcement_bar do %> <%= if @theme_settings.announcement_bar do %>