hey-pharmacist-ecommerce 1.1.0 → 1.1.1

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.
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ var lucideReact = require('lucide-react');
10
10
  var Image3 = require('next/image');
11
11
  var navigation = require('next/navigation');
12
12
  var dynamic = require('next/dynamic');
13
- var Link6 = require('next/link');
13
+ var Link8 = require('next/link');
14
14
  var reactHookForm = require('react-hook-form');
15
15
  var zod$1 = require('@hookform/resolvers/zod');
16
16
  var zod = require('zod');
@@ -21,7 +21,7 @@ var React19__default = /*#__PURE__*/_interopDefault(React19);
21
21
  var globalAxios4__default = /*#__PURE__*/_interopDefault(globalAxios4);
22
22
  var Image3__default = /*#__PURE__*/_interopDefault(Image3);
23
23
  var dynamic__default = /*#__PURE__*/_interopDefault(dynamic);
24
- var Link6__default = /*#__PURE__*/_interopDefault(Link6);
24
+ var Link8__default = /*#__PURE__*/_interopDefault(Link8);
25
25
 
26
26
  // src/providers/EcommerceProvider.tsx
27
27
 
@@ -8322,7 +8322,7 @@ function ProductDetailScreen({ productId }) {
8322
8322
  return /* @__PURE__ */ React19__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "h-[520px] animate-pulse rounded-3xl bg-slate-200" }), /* @__PURE__ */ React19__default.default.createElement("div", { className: "grid grid-cols-3 gap-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React19__default.default.createElement("div", { key: index, className: "h-32 animate-pulse rounded-2xl bg-slate-200" })))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "space-y-4 rounded-3xl bg-white p-6 shadow-sm" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "h-8 w-32 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React19__default.default.createElement("div", { className: "h-10 w-48 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React19__default.default.createElement("div", { className: "h-6 w-full animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React19__default.default.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" }), /* @__PURE__ */ React19__default.default.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" })))));
8323
8323
  }
8324
8324
  if (!product) {
8325
- return /* @__PURE__ */ React19__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "rounded-3xl bg-white p-10 text-center shadow-sm" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Sparkles, { className: "mx-auto h-10 w-10 text-primary-500" }), /* @__PURE__ */ React19__default.default.createElement("h1", { className: "mt-6 text-2xl font-semibold text-gray-900" }, "Product not found"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-2 text-gray-600" }, "It may have been removed or is temporarily unavailable. Discover other pharmacy essentials in our catalogue."), /* @__PURE__ */ React19__default.default.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React19__default.default.createElement(Link6__default.default, { href: "/shop", className: "inline-block" }, /* @__PURE__ */ React19__default.default.createElement(Button, null, "Browse products"))))));
8325
+ return /* @__PURE__ */ React19__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "rounded-3xl bg-white p-10 text-center shadow-sm" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Sparkles, { className: "mx-auto h-10 w-10 text-primary-500" }), /* @__PURE__ */ React19__default.default.createElement("h1", { className: "mt-6 text-2xl font-semibold text-gray-900" }, "Product not found"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-2 text-gray-600" }, "It may have been removed or is temporarily unavailable. Discover other pharmacy essentials in our catalogue."), /* @__PURE__ */ React19__default.default.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React19__default.default.createElement(Link8__default.default, { href: "/shop", className: "inline-block" }, /* @__PURE__ */ React19__default.default.createElement(Button, null, "Browse products"))))));
8326
8326
  }
8327
8327
  product.tags && product.tags.length > 0 ? product.tags.slice(0, 6) : ["Pharmacist approved", "Gentle on daily routines", "Backed by real customers"];
8328
8328
  const highlightCards = [
@@ -8357,7 +8357,7 @@ function ProductDetailScreen({ productId }) {
8357
8357
  },
8358
8358
  /* @__PURE__ */ React19__default.default.createElement(lucideReact.ArrowLeft, { className: "h-5 w-5" }),
8359
8359
  "Continue shopping"
8360
- ), /* @__PURE__ */ React19__default.default.createElement("div", { className: "hidden items-center gap-3 text-sm text-white/80 md:flex" }, /* @__PURE__ */ React19__default.default.createElement(Link6__default.default, { href: "/", className: "transition hover:text-white" }, "Home"), /* @__PURE__ */ React19__default.default.createElement(lucideReact.ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React19__default.default.createElement(Link6__default.default, { href: "/shop", className: "transition hover:text-white" }, "Shop"), /* @__PURE__ */ React19__default.default.createElement(lucideReact.ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React19__default.default.createElement("span", { className: "truncate font-medium text-white" }, product.name))), /* @__PURE__ */ React19__default.default.createElement(
8360
+ ), /* @__PURE__ */ React19__default.default.createElement("div", { className: "hidden items-center gap-3 text-sm text-white/80 md:flex" }, /* @__PURE__ */ React19__default.default.createElement(Link8__default.default, { href: "/", className: "transition hover:text-white" }, "Home"), /* @__PURE__ */ React19__default.default.createElement(lucideReact.ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React19__default.default.createElement(Link8__default.default, { href: "/shop", className: "transition hover:text-white" }, "Shop"), /* @__PURE__ */ React19__default.default.createElement(lucideReact.ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React19__default.default.createElement("span", { className: "truncate font-medium text-white" }, product.name))), /* @__PURE__ */ React19__default.default.createElement(
8361
8361
  framerMotion.motion.div,
8362
8362
  {
8363
8363
  initial: { opacity: 0, y: 24 },
@@ -8495,7 +8495,7 @@ function ProductDetailScreen({ productId }) {
8495
8495
  }
8496
8496
  ),
8497
8497
  isFavorited ? "Saved" : "Save for later"
8498
- ))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React19__default.default.createElement("p", { className: "font-semibold uppercase tracking-[0.25em]" }, "Need advice?"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-2 leading-relaxed" }, "Chat with a pharmacist in real time before completing your purchase. We will help you choose supporting supplements and answer dosing questions.")))), relatedProducts.length > 0 && /* @__PURE__ */ React19__default.default.createElement("section", { className: "mt-20" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React19__default.default.createElement("div", null, /* @__PURE__ */ React19__default.default.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "You may also like"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Hand-picked recommendations that pair nicely with this product.")), /* @__PURE__ */ React19__default.default.createElement(Link6__default.default, { href: "/shop", className: "hidden md:inline-flex" }, /* @__PURE__ */ React19__default.default.createElement(Button, { variant: "ghost", className: "text-primary-600" }, "View all products"))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "mt-6 grid gap-6 sm:grid-cols-2 lg:grid-cols-4" }, relatedProducts?.map((relatedProduct) => /* @__PURE__ */ React19__default.default.createElement(ProductCard, { key: relatedProduct.id, product: relatedProduct })))))));
8498
+ ))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React19__default.default.createElement("p", { className: "font-semibold uppercase tracking-[0.25em]" }, "Need advice?"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-2 leading-relaxed" }, "Chat with a pharmacist in real time before completing your purchase. We will help you choose supporting supplements and answer dosing questions.")))), relatedProducts.length > 0 && /* @__PURE__ */ React19__default.default.createElement("section", { className: "mt-20" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React19__default.default.createElement("div", null, /* @__PURE__ */ React19__default.default.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "You may also like"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Hand-picked recommendations that pair nicely with this product.")), /* @__PURE__ */ React19__default.default.createElement(Link8__default.default, { href: "/shop", className: "hidden md:inline-flex" }, /* @__PURE__ */ React19__default.default.createElement(Button, { variant: "ghost", className: "text-primary-600" }, "View all products"))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "mt-6 grid gap-6 sm:grid-cols-2 lg:grid-cols-4" }, relatedProducts?.map((relatedProduct) => /* @__PURE__ */ React19__default.default.createElement(ProductCard, { key: relatedProduct.id, product: relatedProduct })))))));
8499
8499
  }
8500
8500
  function CartItem({ item }) {
8501
8501
  const { updateQuantity, removeFromCart } = useCart();
@@ -9493,7 +9493,7 @@ function LoginScreen() {
9493
9493
  /* @__PURE__ */ React19__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React19__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.HeartPulse, { className: "h-4 w-4" }), "Hey Pharmacist"), /* @__PURE__ */ React19__default.default.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Pharmacy-grade care for your household"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "max-w-xl text-white/80" }, "Log in to unlock personalized regimens, pharmacist support, and fast delivery on wellness essentials curated just for you.")),
9494
9494
  /* @__PURE__ */ React19__default.default.createElement("div", { className: "grid gap-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.ShieldCheck, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-sm text-white/80" }, "HIPAA-compliant security keeps your health information protected.")), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Sparkles, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-sm text-white/80" }, "Pharmacists ready to chat in under 10 minutes for medication support."))),
9495
9495
  /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React19__default.default.createElement("span", null, "Need an account?"), /* @__PURE__ */ React19__default.default.createElement(
9496
- Link6__default.default,
9496
+ Link8__default.default,
9497
9497
  {
9498
9498
  href: "/register",
9499
9499
  className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2 font-semibold transition hover:bg-white/25"
@@ -9542,7 +9542,7 @@ function LoginScreen() {
9542
9542
  className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
9543
9543
  }
9544
9544
  ), "Remember me"), /* @__PURE__ */ React19__default.default.createElement(
9545
- Link6__default.default,
9545
+ Link8__default.default,
9546
9546
  {
9547
9547
  href: "/forgot-password",
9548
9548
  className: "font-medium text-primary-600 transition hover:text-primary-700"
@@ -9618,7 +9618,7 @@ function RegisterScreen() {
9618
9618
  /* @__PURE__ */ React19__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React19__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.HeartPulse, { className: "h-4 w-4" }), "Join Hey Pharmacist"), /* @__PURE__ */ React19__default.default.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Create your wellness account"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "max-w-xl text-white/80" }, "Unlock concierge-level pharmacy support, curated product recommendations, and smarter refills designed for busy families.")),
9619
9619
  /* @__PURE__ */ React19__default.default.createElement("div", { className: "space-y-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, BENEFITS.map((benefit) => /* @__PURE__ */ React19__default.default.createElement("div", { key: benefit, className: "flex items-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-sm text-white/85" }, benefit)))),
9620
9620
  /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React19__default.default.createElement("span", null, "Already part of the community?"), /* @__PURE__ */ React19__default.default.createElement(
9621
- Link6__default.default,
9621
+ Link8__default.default,
9622
9622
  {
9623
9623
  href: "/login",
9624
9624
  className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2 font-semibold transition hover:bg-white/25"
@@ -9712,8 +9712,8 @@ function RegisterScreen() {
9712
9712
  },
9713
9713
  showConfirmPassword ? /* @__PURE__ */ React19__default.default.createElement(lucideReact.EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React19__default.default.createElement(lucideReact.Eye, { className: "h-5 w-5" })
9714
9714
  )),
9715
- /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Shield, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React19__default.default.createElement("span", null, "By creating an account, you agree to our", " ", /* @__PURE__ */ React19__default.default.createElement(Link6__default.default, { href: "/terms", className: "font-semibold text-primary-600 hover:text-primary-700" }, "Terms of Service"), " ", "and", " ", /* @__PURE__ */ React19__default.default.createElement(
9716
- Link6__default.default,
9715
+ /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Shield, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React19__default.default.createElement("span", null, "By creating an account, you agree to our", " ", /* @__PURE__ */ React19__default.default.createElement(Link8__default.default, { href: "/terms", className: "font-semibold text-primary-600 hover:text-primary-700" }, "Terms of Service"), " ", "and", " ", /* @__PURE__ */ React19__default.default.createElement(
9716
+ Link8__default.default,
9717
9717
  {
9718
9718
  href: "/privacy",
9719
9719
  className: "font-semibold text-primary-600 hover:text-primary-700"
@@ -9876,7 +9876,7 @@ function ProfileScreen() {
9876
9876
  "View recent orders"
9877
9877
  )))),
9878
9878
  /* @__PURE__ */ React19__default.default.createElement("section", { className: "grid gap-4 md:grid-cols-2" }, quickLinks.map((item) => /* @__PURE__ */ React19__default.default.createElement(
9879
- Link6__default.default,
9879
+ Link8__default.default,
9880
9880
  {
9881
9881
  key: item.href,
9882
9882
  href: item.href,
@@ -10297,7 +10297,7 @@ function CurrentOrdersScreen() {
10297
10297
  },
10298
10298
  /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick actions"),
10299
10299
  /* @__PURE__ */ React19__default.default.createElement("div", { className: "mt-4 space-y-3 text-sm text-white/80" }, /* @__PURE__ */ React19__default.default.createElement(
10300
- Link6__default.default,
10300
+ Link8__default.default,
10301
10301
  {
10302
10302
  href: "/orders",
10303
10303
  className: "flex items-center justify-between rounded-2xl bg-white/10 px-4 py-3 transition hover:bg-white/20"
@@ -10672,6 +10672,559 @@ You can add it back at any time.`
10672
10672
  ))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center justify-end gap-3" }, /* @__PURE__ */ React19__default.default.createElement(Button, { type: "button", variant: "outline", onClick: closeModal }, "Cancel"), /* @__PURE__ */ React19__default.default.createElement(Button, { type: "submit", isLoading: isSubmitting }, editingAddress ? "Save changes" : "Save address")))
10673
10673
  ));
10674
10674
  }
10675
+ function useWishlistProducts(productIds = []) {
10676
+ const [products, setProducts] = React19.useState([]);
10677
+ const [isLoading, setIsLoading] = React19.useState(false);
10678
+ const [error, setError] = React19.useState(null);
10679
+ const [cache] = React19.useState(() => /* @__PURE__ */ new Map());
10680
+ const uniqueIds = React19.useMemo(
10681
+ () => Array.from(new Set((productIds || []).filter(Boolean))),
10682
+ [productIds]
10683
+ );
10684
+ const fetchProducts = React19.useCallback(async () => {
10685
+ if (uniqueIds.length === 0) {
10686
+ setProducts([]);
10687
+ setIsLoading(false);
10688
+ setError(null);
10689
+ return;
10690
+ }
10691
+ setIsLoading(true);
10692
+ setError(null);
10693
+ try {
10694
+ const api = new ProductsApi(AXIOS_CONFIG);
10695
+ const results = await Promise.all(
10696
+ uniqueIds.map(async (id) => {
10697
+ if (cache.has(id)) return cache.get(id);
10698
+ const response = await api.getSingleProduct(id?._id || id || "");
10699
+ const product = response.data;
10700
+ cache.set(id, product);
10701
+ return product;
10702
+ })
10703
+ );
10704
+ setProducts(results);
10705
+ } catch (err) {
10706
+ setError(err);
10707
+ console.error("Failed to load wishlist products", err);
10708
+ } finally {
10709
+ setIsLoading(false);
10710
+ }
10711
+ }, [cache, uniqueIds]);
10712
+ React19.useEffect(() => {
10713
+ fetchProducts();
10714
+ }, [fetchProducts]);
10715
+ return {
10716
+ products,
10717
+ isLoading,
10718
+ error,
10719
+ refetch: fetchProducts
10720
+ };
10721
+ }
10722
+ var SORT_OPTIONS = [
10723
+ { value: "featured", label: "Most loved" },
10724
+ { value: "price-low", label: "Price: Low to High" },
10725
+ { value: "price-high", label: "Price: High to Low" },
10726
+ { value: "name", label: "Name A-Z" },
10727
+ { value: "availability", label: "Availability" }
10728
+ ];
10729
+ function WishlistScreen() {
10730
+ const router = navigation.useRouter();
10731
+ const { isAuthenticated } = useAuth() || {};
10732
+ const {
10733
+ products: wishlistItems,
10734
+ removeFromWishlist,
10735
+ getWishlistCount,
10736
+ clearWishlist,
10737
+ refreshWishlist
10738
+ } = useWishlist();
10739
+ const wishlistCount = getWishlistCount?.() ?? 0;
10740
+ const { products: wishlistProducts, isLoading, error } = useWishlistProducts(
10741
+ wishlistItems
10742
+ );
10743
+ const [onlyInStock, setOnlyInStock] = React19.useState(false);
10744
+ const [viewMode, setViewMode] = React19.useState("list");
10745
+ const [sortOption, setSortOption] = React19.useState("featured");
10746
+ React19.useEffect(() => {
10747
+ if (error) {
10748
+ sonner.toast.error("We had trouble loading your saved products. Please try again.");
10749
+ }
10750
+ }, [error]);
10751
+ const handleRemoveFromWishlist = async (productId) => {
10752
+ try {
10753
+ await removeFromWishlist(productId);
10754
+ } catch (err) {
10755
+ console.error("Error removing from wishlist:", err);
10756
+ }
10757
+ };
10758
+ const handleClearWishlist = async () => {
10759
+ const confirmed = window.confirm("Clear all items from your wishlist?");
10760
+ if (!confirmed) return;
10761
+ try {
10762
+ await clearWishlist();
10763
+ await refreshWishlist();
10764
+ } catch (err) {
10765
+ console.error("Error clearing wishlist:", err);
10766
+ }
10767
+ };
10768
+ const totalValue = React19.useMemo(
10769
+ () => wishlistProducts.reduce((sum, product) => sum + (product.finalPrice ?? 0), 0),
10770
+ [wishlistProducts]
10771
+ );
10772
+ React19.useMemo(
10773
+ () => wishlistProducts.reduce((sum, product) => {
10774
+ const before = product.priceBeforeDiscount ?? product.finalPrice ?? 0;
10775
+ const after = product.finalPrice ?? 0;
10776
+ const savings = Math.max(before - after, 0);
10777
+ return sum + savings;
10778
+ }, 0),
10779
+ [wishlistProducts]
10780
+ );
10781
+ React19.useMemo(
10782
+ () => wishlistProducts.filter((product) => (product.inventoryCount ?? 0) > 0).length,
10783
+ [wishlistProducts]
10784
+ );
10785
+ const processedProducts = React19.useMemo(() => {
10786
+ let list = [...wishlistProducts];
10787
+ if (onlyInStock) {
10788
+ list = list.filter((product) => (product.inventoryCount ?? 0) > 0);
10789
+ }
10790
+ switch (sortOption) {
10791
+ case "price-low":
10792
+ list.sort((a, b) => (a.finalPrice ?? 0) - (b.finalPrice ?? 0));
10793
+ break;
10794
+ case "price-high":
10795
+ list.sort((a, b) => (b.finalPrice ?? 0) - (a.finalPrice ?? 0));
10796
+ break;
10797
+ case "name":
10798
+ list.sort((a, b) => (a.name || "").localeCompare(b.name || ""));
10799
+ break;
10800
+ case "availability":
10801
+ list.sort((a, b) => (b.inventoryCount ?? 0) - (a.inventoryCount ?? 0));
10802
+ break;
10803
+ case "featured":
10804
+ default:
10805
+ list.sort((a, b) => (b.totalSold ?? 0) - (a.totalSold ?? 0));
10806
+ break;
10807
+ }
10808
+ return list;
10809
+ }, [wishlistProducts, onlyInStock, sortOption]);
10810
+ const emptyAfterFiltering = !isLoading && wishlistProducts.length > 0 && processedProducts.length === 0;
10811
+ return /* @__PURE__ */ React19__default.default.createElement("div", { className: "min-h-screen bg-slate-50 pb-16" }, /* @__PURE__ */ React19__default.default.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] pb-32 pt-16 text-white" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "absolute inset-0 opacity-40 mix-blend-soft-light", "aria-hidden": "true" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "absolute -top-1/2 right-1/2 h-[40rem] w-[40rem] rounded-full bg-white/10 blur-3xl" }), /* @__PURE__ */ React19__default.default.createElement("div", { className: "absolute left-1/4 top-1/4 h-48 w-48 rounded-full bg-white/20 blur-2xl" })), /* @__PURE__ */ React19__default.default.createElement("div", { className: "relative container mx-auto px-4" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "max-w-3xl space-y-6" }, /* @__PURE__ */ React19__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Heart, { className: "h-4 w-4" }), "Wishlist"), /* @__PURE__ */ React19__default.default.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-5xl" }, "Curate your pharmacy must-haves in one calming space"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "We keep your favourite products ready for reorder, refill reminders, and quick checkout\u2014exactly when you need them.")))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "relative -mt-20" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React19__default.default.createElement(
10812
+ framerMotion.motion.div,
10813
+ {
10814
+ initial: { opacity: 0, y: 24 },
10815
+ animate: { opacity: 1, y: 0 },
10816
+ className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-xl shadow-primary-50"
10817
+ },
10818
+ /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex flex-col gap-6" }, !isAuthenticated && /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex min-h-[40vh] items-center justify-center" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "max-w-lg rounded-3xl border border-slate-100 bg-white p-10 text-center shadow-lg shadow-primary-50" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-primary-50 text-primary-600" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Heart, { className: "h-8 w-8" })), /* @__PURE__ */ React19__default.default.createElement("h2", { className: "mt-6 text-3xl font-bold text-slate-900" }, "Sign in to see your favourites"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-3 text-slate-500" }, "Create your curated shelf of products and we'll keep them ready whenever you return."), /* @__PURE__ */ React19__default.default.createElement(Button, { className: "mt-6", onClick: () => router.push("/login") }, "Sign In"))), isAuthenticated && /* @__PURE__ */ React19__default.default.createElement(React19__default.default.Fragment, null, /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React19__default.default.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "Your saved collection"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-sm text-slate-500" }, "Total value: ", /* @__PURE__ */ React19__default.default.createElement("span", { className: "font-semibold text-primary-600" }, formatPrice(totalValue)), onlyInStock && " \u2022 Showing items ready to ship")), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex flex-wrap items-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement("label", { className: "inline-flex cursor-pointer items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 text-sm font-medium text-slate-600 transition hover:border-primary-200 hover:text-primary-600" }, /* @__PURE__ */ React19__default.default.createElement(
10819
+ "input",
10820
+ {
10821
+ type: "checkbox",
10822
+ checked: onlyInStock,
10823
+ onChange: (event) => setOnlyInStock(event.target.checked),
10824
+ className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
10825
+ }
10826
+ ), "Only show in-stock"), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 text-sm text-slate-600" }, /* @__PURE__ */ React19__default.default.createElement("span", null, "Sort"), /* @__PURE__ */ React19__default.default.createElement(
10827
+ "select",
10828
+ {
10829
+ value: sortOption,
10830
+ onChange: (event) => setSortOption(event.target.value),
10831
+ className: "bg-transparent text-sm font-medium text-slate-700 outline-none"
10832
+ },
10833
+ SORT_OPTIONS.map((option) => /* @__PURE__ */ React19__default.default.createElement("option", { key: option.value, value: option.value }, option.label))
10834
+ )), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex overflow-hidden rounded-full border border-slate-200 bg-slate-50" }, /* @__PURE__ */ React19__default.default.createElement(
10835
+ "button",
10836
+ {
10837
+ type: "button",
10838
+ onClick: () => setViewMode("grid"),
10839
+ className: `flex items-center gap-1 px-3 py-1.5 text-sm font-medium transition ${viewMode === "grid" ? "bg-primary-600 text-white shadow-lg shadow-primary-500/30" : "text-slate-600 hover:bg-white"}`
10840
+ },
10841
+ /* @__PURE__ */ React19__default.default.createElement(lucideReact.Grid, { className: "h-4 w-4" }),
10842
+ "Grid"
10843
+ ), /* @__PURE__ */ React19__default.default.createElement(
10844
+ "button",
10845
+ {
10846
+ type: "button",
10847
+ onClick: () => setViewMode("list"),
10848
+ className: `flex items-center gap-1 px-3 py-1.5 text-sm font-medium transition ${viewMode === "list" ? "bg-primary-600 text-white shadow-lg shadow-primary-500/30" : "text-slate-600 hover:bg-white"}`
10849
+ },
10850
+ /* @__PURE__ */ React19__default.default.createElement(lucideReact.List, { className: "h-4 w-4" }),
10851
+ "List"
10852
+ )), wishlistCount > 0 && /* @__PURE__ */ React19__default.default.createElement(
10853
+ Button,
10854
+ {
10855
+ variant: "ghost",
10856
+ className: "text-sm font-semibold text-slate-500 hover:text-red-500",
10857
+ onClick: handleClearWishlist
10858
+ },
10859
+ /* @__PURE__ */ React19__default.default.createElement(lucideReact.Trash2, { className: "h-4 w-4" }),
10860
+ "Clear all"
10861
+ ))), isLoading && /* @__PURE__ */ React19__default.default.createElement("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3" }, Array.from({ length: Math.min(wishlistCount || 3, 6) }).map((_, index) => /* @__PURE__ */ React19__default.default.createElement(
10862
+ "div",
10863
+ {
10864
+ key: index,
10865
+ className: "h-72 animate-pulse rounded-2xl border border-slate-200 bg-slate-100"
10866
+ }
10867
+ ))), !isLoading && wishlistCount === 0 && /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex min-h-[30vh] items-center justify-center" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "max-w-2xl rounded-3xl border border-slate-100 bg-white p-12 text-center shadow-xl shadow-primary-50" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "mx-auto flex h-20 w-20 items-center justify-center rounded-full bg-primary-100 text-primary-600" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Sparkles, { className: "h-10 w-10" })), /* @__PURE__ */ React19__default.default.createElement("h2", { className: "mt-6 text-4xl font-bold text-slate-900" }, "Start your wellness wishlist"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-4 text-lg text-slate-500" }, "Bookmark pharmacy essentials, supplements, or skincare picks and we'll keep them safe until you're ready to checkout."), /* @__PURE__ */ React19__default.default.createElement("div", { className: "mt-8 flex flex-wrap justify-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement(Button, { onClick: () => router.push("/shop") }, "Discover products"), /* @__PURE__ */ React19__default.default.createElement(Button, { variant: "outline", onClick: () => router.push("/categories") }, "Browse categories")))), !isLoading && processedProducts.length > 0 && /* @__PURE__ */ React19__default.default.createElement(React19__default.default.Fragment, null, viewMode === "grid" ? /* @__PURE__ */ React19__default.default.createElement(
10868
+ framerMotion.motion.div,
10869
+ {
10870
+ layout: true,
10871
+ className: "grid grid-cols-1 gap-5 sm:grid-cols-2 xl:grid-cols-3"
10872
+ },
10873
+ /* @__PURE__ */ React19__default.default.createElement(framerMotion.AnimatePresence, null, processedProducts.map((product) => /* @__PURE__ */ React19__default.default.createElement(
10874
+ framerMotion.motion.div,
10875
+ {
10876
+ key: product.id,
10877
+ layout: true,
10878
+ initial: { opacity: 0, y: 20 },
10879
+ animate: { opacity: 1, y: 0 },
10880
+ exit: { opacity: 0, y: -20 },
10881
+ transition: { duration: 0.2 }
10882
+ },
10883
+ /* @__PURE__ */ React19__default.default.createElement(
10884
+ ProductCard,
10885
+ {
10886
+ product,
10887
+ onClickProduct: (p) => router.push(`/products/${p.id}`),
10888
+ onFavorite: () => handleRemoveFromWishlist(product.id),
10889
+ isFavorited: true
10890
+ }
10891
+ )
10892
+ )))
10893
+ ) : /* @__PURE__ */ React19__default.default.createElement(framerMotion.motion.div, { layout: true, className: "space-y-4" }, /* @__PURE__ */ React19__default.default.createElement(framerMotion.AnimatePresence, null, processedProducts.map((product) => /* @__PURE__ */ React19__default.default.createElement(
10894
+ framerMotion.motion.div,
10895
+ {
10896
+ key: product.id,
10897
+ layout: true,
10898
+ initial: { opacity: 0, y: 20 },
10899
+ animate: { opacity: 1, y: 0 },
10900
+ exit: { opacity: 0, y: -20 },
10901
+ transition: { duration: 0.2 },
10902
+ className: "flex flex-col gap-4 rounded-2xl border border-slate-100 bg-slate-50 p-4 shadow-sm shadow-primary-50 sm:flex-row sm:items-center"
10903
+ },
10904
+ /* @__PURE__ */ React19__default.default.createElement("div", { className: "relative h-28 w-full overflow-hidden rounded-2xl bg-white sm:w-40" }, /* @__PURE__ */ React19__default.default.createElement(
10905
+ Image3__default.default,
10906
+ {
10907
+ fill: true,
10908
+ src: product.productMedia?.[0]?.file || "/placeholder-product.jpg",
10909
+ alt: product.name || "Wishlist item",
10910
+ className: "h-full w-full object-cover"
10911
+ }
10912
+ )),
10913
+ /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex flex-1 flex-col gap-2" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-3" }, /* @__PURE__ */ React19__default.default.createElement("div", null, /* @__PURE__ */ React19__default.default.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, product.name), /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-sm text-slate-500" }, product.parentCategories?.map((category) => category?.name).join(", ") || "General wellness")), /* @__PURE__ */ React19__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-lg font-bold text-primary-600" }, formatPrice(product.finalPrice ?? 0)), product.isDiscounted && /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-xs text-emerald-500" }, "You save ", formatPrice(Math.max((product.priceBeforeDiscount ?? 0) - (product.finalPrice ?? 0), 0))))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex flex-wrap items-center gap-3 text-xs text-slate-500" }, /* @__PURE__ */ React19__default.default.createElement("span", { className: `inline-flex items-center gap-1 rounded-full px-2.5 py-1 font-medium ${product.inventoryCount > 0 ? "bg-emerald-100 text-emerald-700" : "bg-rose-100 text-rose-700"}` }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Package, { className: "h-3.5 w-3.5" }), product.inventoryCount > 0 ? "In stock" : "Backordered"), product.totalSold > 0 && /* @__PURE__ */ React19__default.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-slate-200 px-2.5 py-1 font-medium text-slate-700" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Sparkles, { className: "h-3.5 w-3.5" }), product.totalSold, "+ purchased")), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, /* @__PURE__ */ React19__default.default.createElement(
10914
+ Button,
10915
+ {
10916
+ size: "sm",
10917
+ onClick: () => router.push(`/products/${product.id}`)
10918
+ },
10919
+ "View details"
10920
+ ), /* @__PURE__ */ React19__default.default.createElement(
10921
+ Button,
10922
+ {
10923
+ size: "sm",
10924
+ variant: "outline",
10925
+ onClick: () => handleRemoveFromWishlist(product.id),
10926
+ className: "text-primary-600"
10927
+ },
10928
+ "Remove"
10929
+ )))
10930
+ ))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex flex-col items-center justify-center rounded-2xl border border-dashed border-slate-200 bg-slate-50 p-12 text-center" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-slate-200 text-slate-500" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Package, { className: "h-8 w-8" })), /* @__PURE__ */ React19__default.default.createElement("h3", { className: "mt-6 text-2xl font-semibold text-slate-900" }, "Nothing matches those filters"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-2 max-w-md text-sm text-slate-500" }, "Try showing out-of-stock items or adjust your sort order to revisit everything you\u2019ve saved."), /* @__PURE__ */ React19__default.default.createElement(Button, { className: "mt-6", variant: "outline", onClick: () => setOnlyInStock(false) }, "Show all saved products"))))
10931
+ ))));
10932
+ }
10933
+ function SearchPage() {
10934
+ const router = navigation.useRouter();
10935
+ const searchParams = navigation.useSearchParams();
10936
+ const searchQuery = searchParams.get("q") || "";
10937
+ const [products, setProducts] = React19.useState([]);
10938
+ const [isLoading, setIsLoading] = React19.useState(true);
10939
+ const [searchInput, setSearchInput] = React19.useState(searchQuery);
10940
+ const [hasSearched, setHasSearched] = React19.useState(false);
10941
+ const { isInWishlist } = useWishlist();
10942
+ React19.useEffect(() => {
10943
+ const fetchSearchResults = async () => {
10944
+ if (!searchQuery.trim()) {
10945
+ setProducts([]);
10946
+ setIsLoading(false);
10947
+ return;
10948
+ }
10949
+ try {
10950
+ setIsLoading(true);
10951
+ console.log(searchQuery);
10952
+ const api = new ProductsApi(AXIOS_CONFIG);
10953
+ const response = await api.getAllProductsForStore(
10954
+ searchQuery,
10955
+ void 0,
10956
+ // productType
10957
+ void 0,
10958
+ // categoryId
10959
+ void 0,
10960
+ // maxPrice
10961
+ void 0,
10962
+ // minPrice
10963
+ void 0,
10964
+ // brandFilter
10965
+ "in-stock",
10966
+ // availability
10967
+ "relevance",
10968
+ // sort
10969
+ true,
10970
+ // includeNoVariantProducts
10971
+ true,
10972
+ // isActive
10973
+ 20,
10974
+ // limit
10975
+ 1
10976
+ // page
10977
+ );
10978
+ if (response.data?.data) {
10979
+ const transformedProducts = response.data.data.map((item) => ({
10980
+ ...item,
10981
+ id: item._id || ""
10982
+ }));
10983
+ setProducts(transformedProducts);
10984
+ } else {
10985
+ setProducts([]);
10986
+ }
10987
+ setHasSearched(true);
10988
+ } catch (error) {
10989
+ console.error("Error fetching search results:", error);
10990
+ setProducts([]);
10991
+ } finally {
10992
+ setIsLoading(false);
10993
+ }
10994
+ };
10995
+ fetchSearchResults();
10996
+ }, [searchQuery]);
10997
+ const handleSearch = (e) => {
10998
+ e.preventDefault();
10999
+ if (searchInput.trim()) {
11000
+ window.location.href = `/search?q=${encodeURIComponent(searchInput.trim())}`;
11001
+ }
11002
+ };
11003
+ const clearSearch = () => {
11004
+ setSearchInput("");
11005
+ };
11006
+ return /* @__PURE__ */ React.createElement("div", { className: "container mx-auto px-4 py-8" }, /* @__PURE__ */ React.createElement("div", { className: "max-w-2xl mx-auto mb-8" }, /* @__PURE__ */ React.createElement("form", { onSubmit: handleSearch, className: "relative" }, /* @__PURE__ */ React.createElement("div", { className: "relative" }, /* @__PURE__ */ React.createElement(lucideReact.Search, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" }), /* @__PURE__ */ React.createElement(
11007
+ Input,
11008
+ {
11009
+ type: "text",
11010
+ value: searchInput,
11011
+ onChange: (e) => setSearchInput(e.target.value),
11012
+ placeholder: "Search for products...",
11013
+ className: "pl-10 pr-10 py-6 text-base rounded-lg border-gray-300 focus:ring-2 focus:ring-primary-500 focus:border-primary-500"
11014
+ }
11015
+ ), searchInput && /* @__PURE__ */ React.createElement(
11016
+ "button",
11017
+ {
11018
+ type: "button",
11019
+ onClick: clearSearch,
11020
+ className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600"
11021
+ },
11022
+ /* @__PURE__ */ React.createElement(lucideReact.X, { className: "h-5 w-5" })
11023
+ )), /* @__PURE__ */ React.createElement(
11024
+ "button",
11025
+ {
11026
+ type: "submit",
11027
+ className: "mt-4 w-full bg-primary-600 hover:bg-primary-700 text-white font-medium py-2 px-4 rounded-lg transition-colors"
11028
+ },
11029
+ "Search"
11030
+ ))), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h1", { className: "text-2xl font-bold text-gray-900 mb-6" }, searchQuery ? `Search results for "${searchQuery}"` : "Search Products"), isLoading ? /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, [...Array(8)].map((_, i) => /* @__PURE__ */ React.createElement("div", { key: i, className: "space-y-3" }, /* @__PURE__ */ React.createElement(Skeleton, { className: "h-48 w-full rounded-lg" }), /* @__PURE__ */ React.createElement(Skeleton, { className: "h-4 w-3/4" }), /* @__PURE__ */ React.createElement(Skeleton, { className: "h-4 w-1/2" })))) : products.length > 0 ? /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, products.map((product) => /* @__PURE__ */ React.createElement(
11031
+ ProductCard,
11032
+ {
11033
+ product,
11034
+ isFavorited: isInWishlist(product.id),
11035
+ onClickProduct: (p) => router.push(`/products/${p.id}`)
11036
+ }
11037
+ ))) : hasSearched ? /* @__PURE__ */ React.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React.createElement("div", { className: "text-gray-500 text-lg mb-4" }, 'No products found for "', searchQuery, '"'), /* @__PURE__ */ React.createElement("p", { className: "text-gray-500 mb-6" }, "Try different keywords or check out our", " ", /* @__PURE__ */ React.createElement(Link8__default.default, { href: "/shop", className: "text-primary-600 hover:underline ml-1 font-medium" }, "featured products"))) : /* @__PURE__ */ React.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React.createElement("p", { className: "text-gray-500" }, "Enter a search term to find products"))));
11038
+ }
11039
+ function CategoriesScreen() {
11040
+ const { categories, isLoading } = useCategories();
11041
+ const router = navigation.useRouter();
11042
+ return /* @__PURE__ */ React19__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React19__default.default.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white mb-8" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React19__default.default.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React19__default.default.createElement(
11043
+ framerMotion.motion.div,
11044
+ {
11045
+ initial: { opacity: 0, y: 24 },
11046
+ animate: { opacity: 1, y: 0 },
11047
+ className: "space-y-6"
11048
+ },
11049
+ /* @__PURE__ */ React19__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Package, { className: "h-4 w-4" }), "Product Categories"),
11050
+ /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React19__default.default.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Browse Our Product Range"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Explore our comprehensive selection of healthcare products, carefully curated by our pharmacists to meet all your wellness needs.")), /* @__PURE__ */ React19__default.default.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur" }, /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick tip"), /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-3 text-sm text-white/80" }, "Use the categories below to quickly find the products you're looking for, or use the search function for specific items.")))
11051
+ ))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "relative -mt-16 pb-16" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React19__default.default.createElement(
11052
+ framerMotion.motion.div,
11053
+ {
11054
+ initial: { opacity: 0, y: 24 },
11055
+ animate: { opacity: 1, y: 0 },
11056
+ className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
11057
+ },
11058
+ /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-3 text-sm text-slate-500 mb-6" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Sparkles, { className: "h-4 w-4 text-primary-500" }), /* @__PURE__ */ React19__default.default.createElement("span", null, "Browse our complete product catalog organized by categories.")),
11059
+ isLoading ? /* @__PURE__ */ React19__default.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, [...Array(8)].map((_, i) => /* @__PURE__ */ React19__default.default.createElement("div", { key: i, className: "animate-pulse" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "bg-gray-200 rounded-lg aspect-square mb-2" }), /* @__PURE__ */ React19__default.default.createElement("div", { className: "h-4 bg-gray-200 rounded w-3/4 mb-1" }), /* @__PURE__ */ React19__default.default.createElement("div", { className: "h-3 bg-gray-200 rounded w-1/2" })))) : categories.length > 0 ? /* @__PURE__ */ React19__default.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, categories.map((category) => /* @__PURE__ */ React19__default.default.createElement(
11060
+ Link8__default.default,
11061
+ {
11062
+ key: category.id,
11063
+ href: `/shop?category=${category.name}`,
11064
+ className: "group block overflow-hidden rounded-xl border border-gray-100 bg-white p-4 text-center transition hover:shadow-lg hover:border-primary-500"
11065
+ },
11066
+ /* @__PURE__ */ React19__default.default.createElement("div", { className: "relative aspect-square w-full overflow-hidden rounded-lg bg-gray-50 mb-3" }, category.image ? /* @__PURE__ */ React19__default.default.createElement(
11067
+ Image3__default.default,
11068
+ {
11069
+ src: category.image,
11070
+ alt: category.name || "Category Image",
11071
+ fill: true,
11072
+ className: "object-cover transition-transform group-hover:scale-105",
11073
+ sizes: "(max-width: 768px) 50vw, (max-width: 1200px) 33vw, 25vw"
11074
+ }
11075
+ ) : /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex h-full w-full items-center justify-center bg-gray-100 text-gray-400" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Package, { className: "h-12 w-12" }))),
11076
+ /* @__PURE__ */ React19__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 group-hover:text-primary-600 transition-colors" }, category.name),
11077
+ category.productCount > 0 && /* @__PURE__ */ React19__default.default.createElement("p", { className: "mt-1 text-sm text-gray-500" }, category.productCount, " ", category.productCount === 1 ? "product" : "products")
11078
+ ))) : /* @__PURE__ */ React19__default.default.createElement(
11079
+ EmptyState,
11080
+ {
11081
+ title: "No categories found",
11082
+ description: "There are currently no product categories available.",
11083
+ icon: lucideReact.Package,
11084
+ actionLabel: "Shop products",
11085
+ onAction: () => router.push("/shop")
11086
+ }
11087
+ )
11088
+ ))));
11089
+ }
11090
+ function NewAddressPage() {
11091
+ const router = navigation.useRouter();
11092
+ const [isSubmitting, setIsSubmitting] = React19.useState(false);
11093
+ const {
11094
+ register,
11095
+ handleSubmit,
11096
+ formState: { errors }
11097
+ } = reactHookForm.useForm({
11098
+ resolver: zod$1.zodResolver(addressSchema),
11099
+ defaultValues: {
11100
+ country: "United States"
11101
+ }
11102
+ });
11103
+ const onSubmit = async (data) => {
11104
+ setIsSubmitting(true);
11105
+ try {
11106
+ console.log("Submitting address data:", data);
11107
+ const api = new AddressesApi(AXIOS_CONFIG);
11108
+ const response = await api.createAddressForUser({
11109
+ name: data.name,
11110
+ street1: data.street1,
11111
+ street2: data.street2,
11112
+ city: data.city,
11113
+ state: data.state,
11114
+ zip: data.zip,
11115
+ country: data.country,
11116
+ phone: data.phone
11117
+ });
11118
+ sonner.toast.success("Address added successfully");
11119
+ router.back();
11120
+ } catch (error) {
11121
+ let errorMessage = "An unexpected error occurred";
11122
+ if (error.response?.data?.message) {
11123
+ errorMessage = error.response.data.message;
11124
+ } else if (error.message) {
11125
+ errorMessage = error.message;
11126
+ }
11127
+ if (error.response?.status === 400) {
11128
+ errorMessage = error.response.data?.message || "Please check your address details and try again";
11129
+ }
11130
+ if (error.message === "Network Error") {
11131
+ errorMessage = "Unable to connect to the server. Please check your internet connection.";
11132
+ }
11133
+ sonner.toast.error("Unable to save address", {
11134
+ description: errorMessage,
11135
+ duration: 5e3
11136
+ });
11137
+ if (error.response?.status === 422) {
11138
+ sonner.toast.info("Address validation failed", {
11139
+ description: "Make sure your address is complete and formatted correctly.",
11140
+ duration: 6e3
11141
+ });
11142
+ }
11143
+ } finally {
11144
+ setIsSubmitting(false);
11145
+ }
11146
+ };
11147
+ return /* @__PURE__ */ React.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React.createElement("div", { className: "relative bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white" }, /* @__PURE__ */ React.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React.createElement("div", { className: "relative container mx-auto px-4 py-8" }, /* @__PURE__ */ React.createElement(
11148
+ "button",
11149
+ {
11150
+ onClick: () => router.back(),
11151
+ className: "inline-flex items-center gap-2 rounded-lg bg-white/10 px-4 py-2 text-sm font-medium text-white hover:bg-white/20 transition-colors"
11152
+ },
11153
+ /* @__PURE__ */ React.createElement(lucideReact.ArrowLeft, { className: "h-4 w-4" }),
11154
+ "Back"
11155
+ ), /* @__PURE__ */ React.createElement("div", { className: "mt-6 flex items-center gap-4" }, /* @__PURE__ */ React.createElement("div", { className: "rounded-full bg-white/10 p-3" }, /* @__PURE__ */ React.createElement(lucideReact.MapPin, { className: "h-6 w-6" })), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h1", { className: "text-3xl font-bold" }, "Add New Address"), /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-white/75" }, "Enter your delivery address details below."))))), /* @__PURE__ */ React.createElement("div", { className: "container mx-auto px-4 py-8" }, /* @__PURE__ */ React.createElement("div", { className: "max-w-2xl mx-auto" }, /* @__PURE__ */ React.createElement("div", { className: "bg-white rounded-2xl shadow-xl p-6" }, /* @__PURE__ */ React.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-6" }, /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React.createElement(
11156
+ Input,
11157
+ {
11158
+ label: "Full name",
11159
+ placeholder: "John Doe",
11160
+ ...register("name"),
11161
+ error: errors.name?.message
11162
+ }
11163
+ ), /* @__PURE__ */ React.createElement(
11164
+ Input,
11165
+ {
11166
+ label: "Phone number",
11167
+ placeholder: "+1 (555) 123-4567",
11168
+ ...register("phone"),
11169
+ error: errors.phone?.message
11170
+ }
11171
+ ), /* @__PURE__ */ React.createElement("div", { className: "md:col-span-2" }, /* @__PURE__ */ React.createElement(
11172
+ Input,
11173
+ {
11174
+ label: "Address line 1",
11175
+ placeholder: "123 Main St",
11176
+ ...register("street1"),
11177
+ error: errors.street1?.message
11178
+ }
11179
+ )), /* @__PURE__ */ React.createElement("div", { className: "md:col-span-2" }, /* @__PURE__ */ React.createElement(
11180
+ Input,
11181
+ {
11182
+ label: "Address line 2 (optional)",
11183
+ placeholder: "Apt 4B",
11184
+ ...register("street2")
11185
+ }
11186
+ )), /* @__PURE__ */ React.createElement(
11187
+ Input,
11188
+ {
11189
+ label: "City",
11190
+ placeholder: "New York",
11191
+ ...register("city"),
11192
+ error: errors.city?.message
11193
+ }
11194
+ ), /* @__PURE__ */ React.createElement(
11195
+ Input,
11196
+ {
11197
+ label: "State",
11198
+ placeholder: "NY",
11199
+ ...register("state"),
11200
+ error: errors.state?.message
11201
+ }
11202
+ ), /* @__PURE__ */ React.createElement(
11203
+ Input,
11204
+ {
11205
+ label: "ZIP code",
11206
+ placeholder: "10001",
11207
+ ...register("zip"),
11208
+ error: errors.zip?.message
11209
+ }
11210
+ ), /* @__PURE__ */ React.createElement(
11211
+ Input,
11212
+ {
11213
+ label: "Country",
11214
+ placeholder: "United States",
11215
+ ...register("country"),
11216
+ error: errors.country?.message
11217
+ }
11218
+ )), /* @__PURE__ */ React.createElement("div", { className: "flex justify-end gap-4" }, /* @__PURE__ */ React.createElement(
11219
+ Button,
11220
+ {
11221
+ type: "button",
11222
+ variant: "outline",
11223
+ onClick: () => router.back()
11224
+ },
11225
+ "Cancel"
11226
+ ), /* @__PURE__ */ React.createElement(Button, { type: "submit", disabled: isSubmitting }, isSubmitting ? "Adding Address..." : "Add Address")))))));
11227
+ }
10675
11228
  function Header() {
10676
11229
  const { config } = useTheme();
10677
11230
  const { user, isAuthenticated } = useAuth();
@@ -10688,7 +11241,7 @@ function Header() {
10688
11241
  { href: "/about", label: "About" },
10689
11242
  { href: "/contact", label: "Contact" }
10690
11243
  ];
10691
- return /* @__PURE__ */ React19__default.default.createElement("header", { className: "sticky top-0 z-40 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-sm" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center justify-between h-20" }, /* @__PURE__ */ React19__default.default.createElement(Link6__default.default, { href: "/", className: "flex items-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "relative w-12 h-12" }, /* @__PURE__ */ React19__default.default.createElement(
11244
+ return /* @__PURE__ */ React19__default.default.createElement("header", { className: "sticky top-0 z-40 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-sm" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center justify-between h-20" }, /* @__PURE__ */ React19__default.default.createElement(Link8__default.default, { href: "/", className: "flex items-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "relative w-12 h-12" }, /* @__PURE__ */ React19__default.default.createElement(
10692
11245
  Image3__default.default,
10693
11246
  {
10694
11247
  src: config.logo,
@@ -10697,7 +11250,7 @@ function Header() {
10697
11250
  className: "object-contain"
10698
11251
  }
10699
11252
  )), /* @__PURE__ */ React19__default.default.createElement("span", { className: "text-2xl font-bold text-gray-900 hidden sm:block" }, config.storeName)), /* @__PURE__ */ React19__default.default.createElement("nav", { className: "hidden lg:flex items-center gap-8" }, navLinks.map((link) => /* @__PURE__ */ React19__default.default.createElement(
10700
- Link6__default.default,
11253
+ Link8__default.default,
10701
11254
  {
10702
11255
  key: link.href,
10703
11256
  href: link.href,
@@ -10744,15 +11297,15 @@ function Header() {
10744
11297
  },
10745
11298
  /* @__PURE__ */ React19__default.default.createElement(lucideReact.X, { className: "w-4 h-4" })
10746
11299
  ))
10747
- ))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React19__default.default.createElement(Link6__default.default, { href: "/wishlist", className: "relative p-2 text-gray-700 hover:text-red-500 transition-colors" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Heart, { className: "w-6 h-6" }), wishlistCount > 0 && /* @__PURE__ */ React19__default.default.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, wishlistCount)), /* @__PURE__ */ React19__default.default.createElement(Link6__default.default, { href: "/cart", className: "relative p-2 text-gray-700 hover:text-primary-600 transition-colors" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.ShoppingCart, { className: "w-6 h-6" }), cart?.cartBody?.items?.length && cart.cartBody?.items?.length > 0 ? /* @__PURE__ */ React19__default.default.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, cart.cartBody?.items?.length) : null), isAuthenticated ? /* @__PURE__ */ React19__default.default.createElement(
10748
- Link6__default.default,
11300
+ ))), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React19__default.default.createElement(Link8__default.default, { href: "/wishlist", className: "relative p-2 text-gray-700 hover:text-red-500 transition-colors" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Heart, { className: "w-6 h-6" }), wishlistCount > 0 && /* @__PURE__ */ React19__default.default.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, wishlistCount)), /* @__PURE__ */ React19__default.default.createElement(Link8__default.default, { href: "/cart", className: "relative p-2 text-gray-700 hover:text-primary-600 transition-colors" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.ShoppingCart, { className: "w-6 h-6" }), cart?.cartBody?.items?.length && cart.cartBody?.items?.length > 0 ? /* @__PURE__ */ React19__default.default.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, cart.cartBody?.items?.length) : null), isAuthenticated ? /* @__PURE__ */ React19__default.default.createElement(
11301
+ Link8__default.default,
10749
11302
  {
10750
11303
  href: "/account",
10751
11304
  className: "p-2 hover:bg-gray-100 rounded-lg transition-colors"
10752
11305
  },
10753
11306
  /* @__PURE__ */ React19__default.default.createElement(lucideReact.User, { className: "w-6 h-6 text-gray-700" })
10754
11307
  ) : /* @__PURE__ */ React19__default.default.createElement(
10755
- Link6__default.default,
11308
+ Link8__default.default,
10756
11309
  {
10757
11310
  href: "/login",
10758
11311
  className: "hidden sm:block px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors font-medium"
@@ -10774,7 +11327,7 @@ function Header() {
10774
11327
  className: "lg:hidden overflow-hidden border-t border-gray-200"
10775
11328
  },
10776
11329
  /* @__PURE__ */ React19__default.default.createElement("nav", { className: "flex flex-col gap-1 py-2" }, navLinks.map((link) => /* @__PURE__ */ React19__default.default.createElement(
10777
- Link6__default.default,
11330
+ Link8__default.default,
10778
11331
  {
10779
11332
  key: link.href,
10780
11333
  href: link.href,
@@ -10783,7 +11336,7 @@ function Header() {
10783
11336
  },
10784
11337
  link.label
10785
11338
  )), !isAuthenticated && /* @__PURE__ */ React19__default.default.createElement(
10786
- Link6__default.default,
11339
+ Link8__default.default,
10787
11340
  {
10788
11341
  href: "/login",
10789
11342
  onClick: () => setIsMobileMenuOpen(false),
@@ -10815,21 +11368,21 @@ function Footer() {
10815
11368
  { label: "Returns", href: "/returns" }
10816
11369
  ]};
10817
11370
  return /* @__PURE__ */ React19__default.default.createElement("footer", { className: "bg-gray-900 text-gray-300" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "lg:col-span-2" }, /* @__PURE__ */ React19__default.default.createElement("h3", { className: "text-2xl font-bold text-white mb-4" }, config.storeName), /* @__PURE__ */ React19__default.default.createElement("p", { className: "text-gray-400 mb-6 max-w-md" }, "Your trusted online store for quality products. We deliver excellence with every order."), /* @__PURE__ */ React19__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Mail, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React19__default.default.createElement("span", null, "support@", config.storeName.toLowerCase().replace(/\s+/g, ""), ".com")), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.Phone, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React19__default.default.createElement("span", null, "+1 (555) 123-4567")), /* @__PURE__ */ React19__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React19__default.default.createElement(lucideReact.MapPin, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React19__default.default.createElement("span", null, "123 Store Street, City, Country")))), /* @__PURE__ */ React19__default.default.createElement("div", null, /* @__PURE__ */ React19__default.default.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Shop"), /* @__PURE__ */ React19__default.default.createElement("ul", { className: "space-y-2" }, footerLinks.shop.map((link) => /* @__PURE__ */ React19__default.default.createElement("li", { key: link.href }, /* @__PURE__ */ React19__default.default.createElement(
10818
- Link6__default.default,
11371
+ Link8__default.default,
10819
11372
  {
10820
11373
  href: link.href,
10821
11374
  className: "hover:text-primary-500 transition-colors"
10822
11375
  },
10823
11376
  link.label
10824
11377
  ))))), /* @__PURE__ */ React19__default.default.createElement("div", null, /* @__PURE__ */ React19__default.default.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Account"), /* @__PURE__ */ React19__default.default.createElement("ul", { className: "space-y-2" }, footerLinks.account.map((link) => /* @__PURE__ */ React19__default.default.createElement("li", { key: link.href }, /* @__PURE__ */ React19__default.default.createElement(
10825
- Link6__default.default,
11378
+ Link8__default.default,
10826
11379
  {
10827
11380
  href: link.href,
10828
11381
  className: "hover:text-primary-500 transition-colors"
10829
11382
  },
10830
11383
  link.label
10831
11384
  ))))), /* @__PURE__ */ React19__default.default.createElement("div", null, /* @__PURE__ */ React19__default.default.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Support"), /* @__PURE__ */ React19__default.default.createElement("ul", { className: "space-y-2" }, footerLinks.support.map((link) => /* @__PURE__ */ React19__default.default.createElement("li", { key: link.href }, /* @__PURE__ */ React19__default.default.createElement(
10832
- Link6__default.default,
11385
+ Link8__default.default,
10833
11386
  {
10834
11387
  href: link.href,
10835
11388
  className: "hover:text-primary-500 transition-colors"
@@ -10866,6 +11419,7 @@ exports.Button = Button;
10866
11419
  exports.CartItem = CartItem;
10867
11420
  exports.CartProvider = CartProvider;
10868
11421
  exports.CartScreen = CartScreen;
11422
+ exports.CategoriesScreen = CategoriesScreen;
10869
11423
  exports.CheckoutScreen = CheckoutScreen;
10870
11424
  exports.CurrentOrdersScreen = CurrentOrdersScreen;
10871
11425
  exports.EcommerceProvider = EcommerceProvider;
@@ -10875,6 +11429,7 @@ exports.Header = Header;
10875
11429
  exports.Input = Input;
10876
11430
  exports.LoginScreen = LoginScreen;
10877
11431
  exports.Modal = Modal;
11432
+ exports.NewAddressScreen = NewAddressPage;
10878
11433
  exports.OrderCard = OrderCard;
10879
11434
  exports.OrderCardSkeleton = OrderCardSkeleton;
10880
11435
  exports.OrdersScreen = OrdersScreen;
@@ -10883,10 +11438,12 @@ exports.ProductCardSkeleton = ProductCardSkeleton;
10883
11438
  exports.ProductDetailScreen = ProductDetailScreen;
10884
11439
  exports.ProfileScreen = ProfileScreen;
10885
11440
  exports.RegisterScreen = RegisterScreen;
11441
+ exports.SearchResultsScreen = SearchPage;
10886
11442
  exports.ShopScreen = ShopScreen;
10887
11443
  exports.Skeleton = Skeleton;
10888
11444
  exports.ThemeProvider = ThemeProvider;
10889
11445
  exports.WishlistProvider = WishlistProvider;
11446
+ exports.WishlistScreen = WishlistScreen;
10890
11447
  exports.formatDate = formatDate;
10891
11448
  exports.formatPrice = formatPrice;
10892
11449
  exports.generateColorShades = generateColorShades;