diff --git a/lib/simpleshop_theme_web/components/shop_components.ex b/lib/simpleshop_theme_web/components/shop_components.ex
index 0266750..ce3e38c 100644
--- a/lib/simpleshop_theme_web/components/shop_components.ex
+++ b/lib/simpleshop_theme_web/components/shop_components.ex
@@ -382,4 +382,138 @@ defmodule SimpleshopThemeWeb.ShopComponents do
"background-position: #{settings.header_position_x}% #{settings.header_position_y}%; " <>
"background-repeat: no-repeat; z-index: 0;"
end
+
+ @doc """
+ Renders the cart drawer (floating sidebar).
+
+ The drawer slides in from the right when opened. It displays cart items
+ and checkout options.
+
+ ## Attributes
+
+ * `cart_items` - List of cart items to display. Each item should have
+ `image`, `name`, `variant`, and `price` keys. Default: []
+ * `subtotal` - The subtotal to display. Default: nil (shows "£0.00")
+ * `mode` - Either `:live` (default) for real stores or `:preview` for theme editor.
+ In preview mode, "View basket" navigates via LiveView JS commands.
+
+ ## Examples
+
+ <.cart_drawer cart_items={@cart.items} subtotal={@cart.subtotal} />
+ <.cart_drawer cart_items={demo_items} subtotal="£72.00" mode={:preview} />
+ """
+ attr :cart_items, :list, default: []
+ attr :subtotal, :string, default: nil
+ attr :mode, :atom, default: :live
+
+ def cart_drawer(assigns) do
+ assigns = assign_new(assigns, :display_subtotal, fn ->
+ assigns.subtotal || "£0.00"
+ end)
+
+ ~H"""
+
+
+
+
+
+ <%= for item <- @cart_items do %>
+
+
+
+
+ <%= item.name %>
+
+
+ <%= item.variant %>
+
+
+
+ <%= item.price %>
+
+
+
+
+
+ <% end %>
+
+
+
+
+
+
+ Phoenix.LiveView.JS.remove_class("open", to: "#cart-drawer-overlay")}
+ >
+
+
+
+ """
+ end
end
diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages.ex b/lib/simpleshop_theme_web/live/theme_live/preview_pages.ex
index 428d999..700624c 100644
--- a/lib/simpleshop_theme_web/live/theme_live/preview_pages.ex
+++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages.ex
@@ -3,107 +3,4 @@ defmodule SimpleshopThemeWeb.ThemeLive.PreviewPages do
import SimpleshopThemeWeb.ShopComponents
embed_templates "preview_pages/*"
-
-
-
- @doc """
- Renders the cart drawer (floating sidebar).
- """
- attr :cart_items, :list, default: []
-
- def cart_drawer(assigns) do
- ~H"""
-
-
-
-
-
- <%= for item <- @cart_items do %>
-
-
-
-
- <%= item.name %>
-
-
- <%= item.variant %>
-
-
-
- <%= item.price %>
-
-
-
-
-
- <% end %>
-
-
-
-
-
-
- Phoenix.LiveView.JS.remove_class("open", to: "#cart-drawer-overlay")}
- >
-
-
-
- """
- end
end
diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/about.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/about.html.heex
index 6370abc..15d65e4 100644
--- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/about.html.heex
+++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/about.html.heex
@@ -70,7 +70,7 @@
-
+ <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} />
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/cart.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/cart.html.heex
index 5a1d043..492d550 100644
--- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/cart.html.heex
+++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/cart.html.heex
@@ -123,7 +123,7 @@
-
+ <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} />
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/collection.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/collection.html.heex
index 1e280f0..80ea4d8 100644
--- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/collection.html.heex
+++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/collection.html.heex
@@ -134,7 +134,7 @@
-
+ <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} />
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/contact.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/contact.html.heex
index 5e48412..d9868e2 100644
--- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/contact.html.heex
+++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/contact.html.heex
@@ -190,7 +190,7 @@
-
+ <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} />
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/error.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/error.html.heex
index 14125b4..f305931 100644
--- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/error.html.heex
+++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/error.html.heex
@@ -81,7 +81,7 @@
-
+ <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} />
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/home.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/home.html.heex
index 5c78f91..e97e9ac 100644
--- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/home.html.heex
+++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/home.html.heex
@@ -154,7 +154,7 @@
<.shop_footer theme_settings={@theme_settings} mode={:preview} />
-
+ <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} />
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/pdp.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/pdp.html.heex
index 6c7672d..062b7f8 100644
--- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/pdp.html.heex
+++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/pdp.html.heex
@@ -451,7 +451,7 @@
-
+ <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} />
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />