hey-pharmacist-ecommerce 1.1.13 → 1.1.14

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.
Files changed (45) hide show
  1. package/dist/index.d.mts +2 -4
  2. package/dist/index.d.ts +2 -4
  3. package/dist/index.js +1039 -857
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +1039 -856
  6. package/dist/index.mjs.map +1 -1
  7. package/package.json +3 -3
  8. package/src/components/AccountAddressesTab.tsx +209 -0
  9. package/src/components/AccountOrdersTab.tsx +151 -0
  10. package/src/components/AccountOverviewTab.tsx +209 -0
  11. package/src/components/AccountPaymentTab.tsx +116 -0
  12. package/src/components/AccountSavedItemsTab.tsx +76 -0
  13. package/src/components/AccountSettingsTab.tsx +116 -0
  14. package/src/components/AddressFormModal.tsx +23 -10
  15. package/src/components/CartItem.tsx +60 -56
  16. package/src/components/Header.tsx +69 -16
  17. package/src/components/Notification.tsx +148 -0
  18. package/src/components/ProductCard.tsx +215 -178
  19. package/src/components/QuickViewModal.tsx +314 -0
  20. package/src/components/TabNavigation.tsx +48 -0
  21. package/src/components/ui/Button.tsx +1 -1
  22. package/src/components/ui/ConfirmModal.tsx +84 -0
  23. package/src/hooks/usePaymentMethods.ts +58 -0
  24. package/src/index.ts +0 -1
  25. package/src/providers/CartProvider.tsx +22 -6
  26. package/src/providers/EcommerceProvider.tsx +8 -7
  27. package/src/providers/FavoritesProvider.tsx +10 -3
  28. package/src/providers/NotificationProvider.tsx +79 -0
  29. package/src/providers/WishlistProvider.tsx +34 -9
  30. package/src/screens/AddressesScreen.tsx +72 -61
  31. package/src/screens/CartScreen.tsx +48 -32
  32. package/src/screens/ChangePasswordScreen.tsx +155 -0
  33. package/src/screens/CheckoutScreen.tsx +162 -125
  34. package/src/screens/EditProfileScreen.tsx +165 -0
  35. package/src/screens/LoginScreen.tsx +59 -72
  36. package/src/screens/NewAddressScreen.tsx +16 -10
  37. package/src/screens/ProductDetailScreen.tsx +334 -234
  38. package/src/screens/ProfileScreen.tsx +190 -200
  39. package/src/screens/RegisterScreen.tsx +51 -70
  40. package/src/screens/SearchResultsScreen.tsx +2 -1
  41. package/src/screens/ShopScreen.tsx +260 -384
  42. package/src/screens/WishlistScreen.tsx +226 -224
  43. package/src/styles/globals.css +9 -0
  44. package/src/screens/CategoriesScreen.tsx +0 -122
  45. package/src/screens/HomeScreen.tsx +0 -211
package/dist/index.js CHANGED
@@ -3,14 +3,13 @@
3
3
 
4
4
  var React21 = require('react');
5
5
  var globalAxios4 = require('axios');
6
- var sonner = require('sonner');
7
- var reactQuery = require('@tanstack/react-query');
8
6
  var framerMotion = require('framer-motion');
9
7
  var lucideReact = require('lucide-react');
10
- var Image3 = require('next/image');
8
+ var reactQuery = require('@tanstack/react-query');
11
9
  var navigation = require('next/navigation');
10
+ var Image4 = require('next/image');
12
11
  var dynamic = require('next/dynamic');
13
- var Link8 = require('next/link');
12
+ var Link7 = require('next/link');
14
13
  var reactHookForm = require('react-hook-form');
15
14
  var zod$1 = require('@hookform/resolvers/zod');
16
15
  var zod = require('zod');
@@ -19,9 +18,9 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
19
18
 
20
19
  var React21__default = /*#__PURE__*/_interopDefault(React21);
21
20
  var globalAxios4__default = /*#__PURE__*/_interopDefault(globalAxios4);
22
- var Image3__default = /*#__PURE__*/_interopDefault(Image3);
21
+ var Image4__default = /*#__PURE__*/_interopDefault(Image4);
23
22
  var dynamic__default = /*#__PURE__*/_interopDefault(dynamic);
24
- var Link8__default = /*#__PURE__*/_interopDefault(Link8);
23
+ var Link7__default = /*#__PURE__*/_interopDefault(Link7);
25
24
 
26
25
  var __defProp = Object.defineProperty;
27
26
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -6767,6 +6766,144 @@ var PaymentPaymentStatusEnum = /* @__PURE__ */ ((PaymentPaymentStatusEnum2) => {
6767
6766
 
6768
6767
  // src/lib/api-adapter/index.ts
6769
6768
  init_config();
6769
+ var notificationConfig = {
6770
+ success: {
6771
+ icon: lucideReact.CheckCircle2,
6772
+ gradient: "from-emerald-500 to-green-600",
6773
+ iconColor: "text-emerald-600",
6774
+ bgColor: "bg-emerald-50",
6775
+ borderColor: "border-emerald-200"
6776
+ },
6777
+ error: {
6778
+ icon: lucideReact.XCircle,
6779
+ gradient: "from-red-500 to-rose-600",
6780
+ iconColor: "text-red-600",
6781
+ bgColor: "bg-red-50",
6782
+ borderColor: "border-red-200"
6783
+ },
6784
+ warning: {
6785
+ icon: lucideReact.AlertCircle,
6786
+ gradient: "from-orange-500 to-amber-600",
6787
+ iconColor: "text-orange-600",
6788
+ bgColor: "bg-orange-50",
6789
+ borderColor: "border-orange-200"
6790
+ },
6791
+ info: {
6792
+ icon: lucideReact.Info,
6793
+ gradient: "from-blue-500 to-indigo-600",
6794
+ iconColor: "text-blue-600",
6795
+ bgColor: "bg-blue-50",
6796
+ borderColor: "border-blue-200"
6797
+ }
6798
+ };
6799
+ function Notification({ notification, onDismiss }) {
6800
+ const [progress, setProgress] = React21.useState(100);
6801
+ const config = notificationConfig[notification.type];
6802
+ const Icon = config.icon;
6803
+ const duration = notification.duration || 4e3;
6804
+ React21.useEffect(() => {
6805
+ const startTime = Date.now();
6806
+ const timer = setInterval(() => {
6807
+ const elapsed = Date.now() - startTime;
6808
+ const remaining = Math.max(0, 100 - elapsed / duration * 100);
6809
+ setProgress(remaining);
6810
+ if (remaining === 0) {
6811
+ clearInterval(timer);
6812
+ onDismiss(notification.id);
6813
+ }
6814
+ }, 16);
6815
+ return () => clearInterval(timer);
6816
+ }, [notification.id, duration, onDismiss]);
6817
+ return /* @__PURE__ */ React21__default.default.createElement(
6818
+ framerMotion.motion.div,
6819
+ {
6820
+ initial: { opacity: 0, y: -20, scale: 0.95 },
6821
+ animate: { opacity: 1, y: 0, scale: 1 },
6822
+ exit: { opacity: 0, x: 100, scale: 0.95 },
6823
+ transition: { type: "spring", stiffness: 500, damping: 30 },
6824
+ className: `relative bg-white rounded-2xl border-2 ${config.borderColor} shadow-xl overflow-hidden min-w-[320px] max-w-[420px]`
6825
+ },
6826
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: `h-1 bg-gradient-to-r ${config.gradient}` }),
6827
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-4 flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement(
6828
+ framerMotion.motion.div,
6829
+ {
6830
+ initial: { scale: 0, rotate: -180 },
6831
+ animate: { scale: 1, rotate: 0 },
6832
+ transition: { delay: 0.1, type: "spring", stiffness: 500 },
6833
+ className: `size-10 rounded-full ${config.bgColor} flex items-center justify-center shrink-0`
6834
+ },
6835
+ /* @__PURE__ */ React21__default.default.createElement(Icon, { className: `size-5 ${config.iconColor}` })
6836
+ ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] font-semibold text-[14px] text-[#2B4B7C] mb-1" }, notification.message), notification.description && /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[12px] text-[#676c80] leading-relaxed" }, notification.description)), /* @__PURE__ */ React21__default.default.createElement(
6837
+ "button",
6838
+ {
6839
+ onClick: () => onDismiss(notification.id),
6840
+ className: "p-1.5 hover:bg-gray-100 rounded-full transition-colors shrink-0",
6841
+ "aria-label": "Dismiss notification"
6842
+ },
6843
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.X, { className: "size-4 text-[#676c80]" })
6844
+ )),
6845
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-1 bg-gray-100" }, /* @__PURE__ */ React21__default.default.createElement(
6846
+ framerMotion.motion.div,
6847
+ {
6848
+ className: `h-full bg-gradient-to-r ${config.gradient}`,
6849
+ style: { width: `${progress}%` },
6850
+ transition: { duration: 0.016, ease: "linear" }
6851
+ }
6852
+ ))
6853
+ );
6854
+ }
6855
+ function NotificationContainer({ notifications, onDismiss }) {
6856
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "fixed top-4 right-4 z-[9999] flex flex-col gap-3 pointer-events-none" }, /* @__PURE__ */ React21__default.default.createElement(framerMotion.AnimatePresence, { mode: "popLayout" }, notifications.map((notification) => /* @__PURE__ */ React21__default.default.createElement("div", { key: notification.id, className: "pointer-events-auto" }, /* @__PURE__ */ React21__default.default.createElement(Notification, { notification, onDismiss })))));
6857
+ }
6858
+
6859
+ // src/providers/NotificationProvider.tsx
6860
+ var NotificationContext = React21.createContext(void 0);
6861
+ function useNotification() {
6862
+ const context = React21.useContext(NotificationContext);
6863
+ if (!context) {
6864
+ throw new Error("useNotification must be used within NotificationProvider");
6865
+ }
6866
+ return context;
6867
+ }
6868
+ function NotificationProvider({ children }) {
6869
+ const [notifications, setNotifications] = React21.useState([]);
6870
+ const addNotification = React21.useCallback(
6871
+ (type, message, description, duration) => {
6872
+ const id = Math.random().toString(36).substring(2, 9);
6873
+ const notification = {
6874
+ id,
6875
+ type,
6876
+ message,
6877
+ description,
6878
+ duration: duration || 4e3
6879
+ };
6880
+ setNotifications((prev) => [...prev, notification]);
6881
+ },
6882
+ []
6883
+ );
6884
+ const dismissNotification = React21.useCallback((id) => {
6885
+ setNotifications((prev) => prev.filter((n) => n.id !== id));
6886
+ }, []);
6887
+ const value = {
6888
+ success: React21.useCallback(
6889
+ (message, description, duration) => addNotification("success", message, description, duration),
6890
+ [addNotification]
6891
+ ),
6892
+ error: React21.useCallback(
6893
+ (message, description, duration) => addNotification("error", message, description, duration),
6894
+ [addNotification]
6895
+ ),
6896
+ warning: React21.useCallback(
6897
+ (message, description, duration) => addNotification("warning", message, description, duration),
6898
+ [addNotification]
6899
+ ),
6900
+ info: React21.useCallback(
6901
+ (message, description, duration) => addNotification("info", message, description, duration),
6902
+ [addNotification]
6903
+ )
6904
+ };
6905
+ return /* @__PURE__ */ React21__default.default.createElement(NotificationContext.Provider, { value }, children, /* @__PURE__ */ React21__default.default.createElement(NotificationContainer, { notifications, onDismiss: dismissNotification }));
6906
+ }
6770
6907
 
6771
6908
  // src/providers/CartProvider.tsx
6772
6909
  var CartContext = React21.createContext(void 0);
@@ -6781,6 +6918,7 @@ function CartProvider({ children }) {
6781
6918
  const [cart, setCart] = React21.useState(null);
6782
6919
  const [isLoading, setIsLoading] = React21.useState(false);
6783
6920
  const { isAuthenticated } = useAuth();
6921
+ const notification = useNotification();
6784
6922
  const refreshCart = React21.useCallback(async () => {
6785
6923
  if (!isAuthenticated) {
6786
6924
  setCart(null);
@@ -6818,9 +6956,15 @@ function CartProvider({ children }) {
6818
6956
  }
6819
6957
  const response = await new CartApi(getApiConfiguration()).handleUserCart({ items });
6820
6958
  setCart(response.data);
6821
- sonner.toast.success("Added to cart!");
6959
+ notification.success(
6960
+ "Added to cart",
6961
+ "The item was added to your cart."
6962
+ );
6822
6963
  } catch (error) {
6823
- sonner.toast.error(error.response?.data?.message || "Failed to add to cart");
6964
+ notification.error(
6965
+ "Could not add to cart",
6966
+ error.response?.data?.message || "Something went wrong while adding this item to your cart."
6967
+ );
6824
6968
  throw error;
6825
6969
  } finally {
6826
6970
  setIsLoading(false);
@@ -6842,7 +6986,10 @@ function CartProvider({ children }) {
6842
6986
  const response = await new CartApi(getApiConfiguration()).handleUserCart({ items });
6843
6987
  setCart(response.data);
6844
6988
  } catch (error) {
6845
- sonner.toast.error(error.response?.data?.message || "Failed to update cart");
6989
+ notification.error(
6990
+ "Could not update cart",
6991
+ error.response?.data?.message || "There was a problem updating the item quantity. Please try again."
6992
+ );
6846
6993
  throw error;
6847
6994
  } finally {
6848
6995
  setIsLoading(false);
@@ -6856,7 +7003,10 @@ function CartProvider({ children }) {
6856
7003
  const response = await new CartApi(getApiConfiguration()).handleUserCart({ items });
6857
7004
  setCart(response.data);
6858
7005
  } catch (error) {
6859
- sonner.toast.error(error.response?.data?.message || "Failed to remove from cart");
7006
+ notification.error(
7007
+ "Could not remove item",
7008
+ error.response?.data?.message || "There was a problem removing this item from your cart."
7009
+ );
6860
7010
  throw error;
6861
7011
  } finally {
6862
7012
  setIsLoading(false);
@@ -6868,7 +7018,10 @@ function CartProvider({ children }) {
6868
7018
  const response = await new CartApi(getApiConfiguration()).clearCart();
6869
7019
  setCart(null);
6870
7020
  } catch (error) {
6871
- sonner.toast.error(error.response?.data?.message || "Failed to clear cart");
7021
+ notification.error(
7022
+ "Could not clear cart",
7023
+ error.response?.data?.message || "We could not clear your cart. Please try again."
7024
+ );
6872
7025
  throw error;
6873
7026
  } finally {
6874
7027
  setIsLoading(false);
@@ -6934,6 +7087,7 @@ function WishlistProvider({ children }) {
6934
7087
  products: []
6935
7088
  });
6936
7089
  const { isAuthenticated } = useAuth() || {};
7090
+ const notification = useNotification();
6937
7091
  const wishlistApi = React21.useMemo(() => new WishlistApi(AXIOS_CONFIG), []);
6938
7092
  const fetchWishlist = React21.useCallback(async () => {
6939
7093
  if (!isAuthenticated) {
@@ -6969,20 +7123,32 @@ function WishlistProvider({ children }) {
6969
7123
  }, [fetchWishlist]);
6970
7124
  const addToWishlist = async (product) => {
6971
7125
  if (!isAuthenticated) {
6972
- sonner.toast.error("Please sign in to add items to your wishlist");
7126
+ notification.error(
7127
+ "Sign-in required",
7128
+ "Please sign in to add items to your wishlist."
7129
+ );
6973
7130
  return;
6974
7131
  }
6975
7132
  try {
6976
7133
  if (isInWishlist(product?._id || "")) {
6977
- sonner.toast.info("This item is already in your wishlist");
7134
+ notification.info(
7135
+ "Already saved",
7136
+ "This item is already in your wishlist."
7137
+ );
6978
7138
  return;
6979
7139
  }
6980
7140
  await wishlistApi.addToWishlist(product?._id || "");
6981
7141
  await fetchWishlist();
6982
- sonner.toast.success("Added to wishlist");
7142
+ notification.success(
7143
+ "Added to wishlist",
7144
+ `${product?.name || "Item"} was added to your wishlist.`
7145
+ );
6983
7146
  } catch (error) {
6984
7147
  console.error("Error adding to wishlist:", error);
6985
- sonner.toast.error("Failed to add to wishlist");
7148
+ notification.error(
7149
+ "Could not add to wishlist",
7150
+ "Something went wrong while adding this item. Please try again."
7151
+ );
6986
7152
  throw error;
6987
7153
  }
6988
7154
  };
@@ -6996,10 +7162,16 @@ function WishlistProvider({ children }) {
6996
7162
  products: newProducts
6997
7163
  };
6998
7164
  });
6999
- sonner.toast.success("Removed from wishlist");
7165
+ notification.success(
7166
+ "Removed from wishlist",
7167
+ "The item has been removed from your wishlist."
7168
+ );
7000
7169
  } catch (error) {
7001
7170
  console.error("Error removing from wishlist:", error);
7002
- sonner.toast.error("Failed to remove from wishlist");
7171
+ notification.error(
7172
+ "Could not remove item",
7173
+ "Something went wrong while removing this item. Please try again."
7174
+ );
7003
7175
  throw error;
7004
7176
  }
7005
7177
  };
@@ -7010,10 +7182,16 @@ function WishlistProvider({ children }) {
7010
7182
  ...prev,
7011
7183
  products: []
7012
7184
  }));
7013
- sonner.toast.success("Wishlist cleared");
7185
+ notification.success(
7186
+ "Wishlist cleared",
7187
+ "All items have been removed from your wishlist."
7188
+ );
7014
7189
  } catch (error) {
7015
7190
  console.error("Error clearing wishlist:", error);
7016
- sonner.toast.error("Failed to clear wishlist");
7191
+ notification.error(
7192
+ "Could not clear wishlist",
7193
+ "We could not clear your wishlist. Please try again."
7194
+ );
7017
7195
  throw error;
7018
7196
  }
7019
7197
  };
@@ -7073,7 +7251,7 @@ function EcommerceProvider({ config, children, withToaster = true, basePath = ""
7073
7251
  const [client] = React21__default.default.useState(
7074
7252
  new reactQuery.QueryClient({ defaultOptions: { queries: { staleTime: 5e3 } } })
7075
7253
  );
7076
- return /* @__PURE__ */ React21__default.default.createElement(reactQuery.QueryClientProvider, { client }, /* @__PURE__ */ React21__default.default.createElement(ThemeProvider, { config }, /* @__PURE__ */ React21__default.default.createElement(BasePathProvider, { basePath }, /* @__PURE__ */ React21__default.default.createElement(AuthProvider, null, /* @__PURE__ */ React21__default.default.createElement(CartProvider, null, /* @__PURE__ */ React21__default.default.createElement(WishlistProvider, null, children, withToaster && /* @__PURE__ */ React21__default.default.createElement(sonner.Toaster, { position: "top-right", richColors: true })))))));
7254
+ return /* @__PURE__ */ React21__default.default.createElement(reactQuery.QueryClientProvider, { client }, /* @__PURE__ */ React21__default.default.createElement(ThemeProvider, { config }, /* @__PURE__ */ React21__default.default.createElement(BasePathProvider, { basePath }, /* @__PURE__ */ React21__default.default.createElement(AuthProvider, null, /* @__PURE__ */ React21__default.default.createElement(NotificationProvider, null, /* @__PURE__ */ React21__default.default.createElement(CartProvider, null, /* @__PURE__ */ React21__default.default.createElement(WishlistProvider, null, children)))))));
7077
7255
  }
7078
7256
 
7079
7257
  // src/lib/utils/format.ts
@@ -7107,6 +7285,158 @@ function truncate(text, maxLength) {
7107
7285
  function getInitials(firstName, lastName) {
7108
7286
  return `${firstName?.charAt(0)}${lastName?.charAt(0)}`.toUpperCase();
7109
7287
  }
7288
+ function QuickViewModal({ product, onClose, onNavigateToProduct }) {
7289
+ const [selectedVariantIndex, setSelectedVariantIndex] = React21.useState(0);
7290
+ const [selectedSizeIndex, setSelectedSizeIndex] = React21.useState(0);
7291
+ const [selectedImageIndex, setSelectedImageIndex] = React21.useState(0);
7292
+ const [addedToCart, setAddedToCart] = React21.useState(false);
7293
+ const [quantity, setQuantity] = React21.useState(1);
7294
+ const { addToCart } = useCart();
7295
+ const [isAddingToCart, setIsAddingToCart] = React21.useState(false);
7296
+ const notification = useNotification();
7297
+ const handleQuantityChange = (newQuantity) => {
7298
+ if (newQuantity >= 1 && newQuantity <= (selectedVariant.inventoryCount || 10)) {
7299
+ setQuantity(newQuantity);
7300
+ }
7301
+ };
7302
+ const selectedVariant = product.productVariants[selectedVariantIndex];
7303
+ selectedVariant.productMedia[selectedSizeIndex];
7304
+ const displayPrice = product.finalPrice;
7305
+ const handleAddToCart = async () => {
7306
+ if (!product || !selectedVariant) return;
7307
+ setIsAddingToCart(true);
7308
+ try {
7309
+ console.log(selectedVariant);
7310
+ await addToCart(
7311
+ product.id,
7312
+ quantity,
7313
+ selectedVariant._id
7314
+ );
7315
+ notification.success(
7316
+ "Added to cart",
7317
+ `${quantity} \xD7 ${product.name}${selectedVariant.name ? ` (${selectedVariant.name})` : ""} added to your cart.`
7318
+ );
7319
+ } catch (error) {
7320
+ console.error("Failed to add to cart", error);
7321
+ notification.error(
7322
+ "Could not add to cart",
7323
+ "Something went wrong while adding this item. Please try again."
7324
+ );
7325
+ } finally {
7326
+ setIsAddingToCart(false);
7327
+ }
7328
+ };
7329
+ return /* @__PURE__ */ React.createElement(
7330
+ "div",
7331
+ {
7332
+ className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",
7333
+ onClick: onClose
7334
+ },
7335
+ /* @__PURE__ */ React.createElement(
7336
+ "div",
7337
+ {
7338
+ className: "bg-white rounded-[32px] max-w-5xl w-full max-h-[90vh] overflow-y-auto",
7339
+ onClick: (e) => e.stopPropagation()
7340
+ },
7341
+ /* @__PURE__ */ React.createElement("div", { className: "p-8" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-start justify-between mb-6" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("p", { className: "font-['Poppins',sans-serif] text-[11px] text-primary uppercase tracking-wide font-medium mb-2" }, product.brand, " \u2022 ", product.parentCategories[0].name), /* @__PURE__ */ React.createElement("h2", { className: "font-['Poppins',sans-serif] font-semibold text-secondary tracking-[-1px]" }, product.name), /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-0.5" }, [...Array(5)].map((_, i) => /* @__PURE__ */ React.createElement(
7342
+ lucideReact.Star,
7343
+ {
7344
+ key: i,
7345
+ className: `size-4 ${i < Math.floor(product.rating ? product.rating : 0) ? "text-accent fill-accent" : "text-gray-300"}`
7346
+ }
7347
+ ))), /* @__PURE__ */ React.createElement("span", { className: "font-['Poppins',sans-serif] text-[13px] text-muted" }, product.rating, " (", product.reviews ? product.reviews.length : 0, " reviews)"))), /* @__PURE__ */ React.createElement(
7348
+ "button",
7349
+ {
7350
+ onClick: onClose,
7351
+ className: "p-2 hover:bg-gray-100 rounded-full transition-colors"
7352
+ },
7353
+ /* @__PURE__ */ React.createElement(lucideReact.X, { className: "size-6 text-muted" })
7354
+ )), /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-8" }, /* @__PURE__ */ React.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React.createElement("div", { className: "relative aspect-[3/4] rounded-[24px] overflow-hidden bg-gray-50" }, /* @__PURE__ */ React.createElement(
7355
+ "img",
7356
+ {
7357
+ src: selectedVariant.productMedia[selectedImageIndex]?.file || selectedVariant.productMedia[0]?.file,
7358
+ alt: product.name,
7359
+ className: "w-full h-full object-cover"
7360
+ }
7361
+ ), /* @__PURE__ */ React.createElement("div", { className: "absolute top-4 left-4 flex flex-col gap-2" }, product.finalPrice && /* @__PURE__ */ React.createElement("div", { className: "bg-accent text-white rounded-full px-3 py-1.5" }, /* @__PURE__ */ React.createElement("span", { className: "font-['Poppins',sans-serif] font-bold text-[11px] uppercase" }, "-", product.discountAmount, "%")))), selectedVariant.productMedia.length > 1 && /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-4 gap-3" }, selectedVariant.productMedia.map((image, index) => /* @__PURE__ */ React.createElement(
7362
+ "div",
7363
+ {
7364
+ key: index,
7365
+ className: `aspect-square rounded-xl overflow-hidden cursor-pointer transition-opacity ${selectedImageIndex === index ? "ring-2 ring-primary" : "bg-gray-50 hover:opacity-75"}`,
7366
+ onClick: () => setSelectedImageIndex(index)
7367
+ },
7368
+ /* @__PURE__ */ React.createElement(
7369
+ "img",
7370
+ {
7371
+ src: image.file,
7372
+ alt: `${product.name} ${index + 1}`,
7373
+ className: "w-full h-full object-cover"
7374
+ }
7375
+ )
7376
+ )))), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-3 mb-4" }, /* @__PURE__ */ React.createElement("span", { className: "font-['Poppins',sans-serif] font-bold text-[32px] text-accent" }, "$", displayPrice.toFixed(2)), product.isDiscounted && /* @__PURE__ */ React.createElement("span", { className: "font-['Poppins',sans-serif] text-[20px] text-muted line-through" }, "$", product.finalPrice.toFixed(2))), /* @__PURE__ */ React.createElement("div", { className: "mb-6" }, selectedVariant.inventoryCount === 0 ? /* @__PURE__ */ React.createElement("span", { className: "font-['Poppins',sans-serif] text-[12px] text-red-500 font-medium" }, "Out of Stock") : selectedVariant.inventoryCount <= 10 ? /* @__PURE__ */ React.createElement("span", { className: "font-['Poppins',sans-serif] text-[12px] text-orange-500 font-medium flex items-center gap-1" }, /* @__PURE__ */ React.createElement(lucideReact.Package, { className: "size-3" }), "Only ", selectedVariant.inventoryCount, " left in stock") : /* @__PURE__ */ React.createElement("span", { className: "font-['Poppins',sans-serif] text-[12px] text-green-600 font-medium flex items-center gap-1" }, /* @__PURE__ */ React.createElement(lucideReact.Package, { className: "size-3" }), "In Stock")), /* @__PURE__ */ React.createElement("p", { className: "font-['Poppins',sans-serif] text-[14px] text-muted leading-[1.7] mb-6" }, /* @__PURE__ */ React.createElement("div", { dangerouslySetInnerHTML: { __html: product.description } })), /* @__PURE__ */ React.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React.createElement("h3", { className: "font-['Poppins',sans-serif] font-semibold text-[13px] text-secondary mb-3" }, "Selected Variant: ", /* @__PURE__ */ React.createElement("span", { className: "font-normal text-muted" }, product.productVariants[selectedVariantIndex].name)), /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap gap-3" }, product.productVariants.map((variant, index) => /* @__PURE__ */ React.createElement(
7377
+ "button",
7378
+ {
7379
+ key: variant.id,
7380
+ onClick: () => {
7381
+ setSelectedVariantIndex(index);
7382
+ setSelectedSizeIndex(0);
7383
+ setSelectedImageIndex(0);
7384
+ },
7385
+ className: `size-10 rounded-full border-2 transition-all ${selectedVariantIndex === index ? "border-primary scale-110" : "border-gray-200 hover:border-primary/50"}`,
7386
+ style: { backgroundColor: variant.colorHex },
7387
+ title: variant.color
7388
+ },
7389
+ /* @__PURE__ */ React.createElement(
7390
+ Image4__default.default,
7391
+ {
7392
+ src: variant.productMedia?.[0]?.file || "",
7393
+ alt: variant.color || `Variant ${index + 1}`,
7394
+ className: "object-cover",
7395
+ height: 32,
7396
+ width: 32
7397
+ }
7398
+ )
7399
+ )))), /* @__PURE__ */ React.createElement("div", { className: "mb-6 p-4 bg-gray-50 rounded-xl" }, /* @__PURE__ */ React.createElement("ul", { className: "space-y-2" }, product.tags.slice(0, 3).map((feature, index) => /* @__PURE__ */ React.createElement("li", { key: index, className: "flex items-start gap-2" }, /* @__PURE__ */ React.createElement(lucideReact.Check, { className: "size-4 text-primary shrink-0 mt-0.5" }), /* @__PURE__ */ React.createElement("span", { className: "font-['Poppins',sans-serif] text-[12px] text-muted" }, feature))))), /* @__PURE__ */ React.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React.createElement("h3", { className: "font-['Poppins',sans-serif] font-semibold text-[13px] text-secondary mb-3" }, "Quantity"), /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React.createElement(
7400
+ "button",
7401
+ {
7402
+ onClick: () => handleQuantityChange(quantity - 1),
7403
+ disabled: quantity <= 1,
7404
+ className: "p-2 rounded-full border border-gray-200 hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed"
7405
+ },
7406
+ /* @__PURE__ */ React.createElement(lucideReact.Minus, { className: "size-4 text-secondary" })
7407
+ ), /* @__PURE__ */ React.createElement("span", { className: "w-8 text-center font-medium" }, quantity), /* @__PURE__ */ React.createElement(
7408
+ "button",
7409
+ {
7410
+ onClick: () => handleQuantityChange(quantity + 1),
7411
+ disabled: quantity >= (selectedVariant.inventoryCount || 10),
7412
+ className: "p-2 rounded-full border border-gray-200 hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed"
7413
+ },
7414
+ /* @__PURE__ */ React.createElement(lucideReact.Plus, { className: "size-4 text-secondary" })
7415
+ ))), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3 mt-auto" }, /* @__PURE__ */ React.createElement(
7416
+ "button",
7417
+ {
7418
+ onClick: handleAddToCart,
7419
+ disabled: addedToCart || selectedVariant.inventoryCount === 0,
7420
+ className: `w-full font-['Poppins',sans-serif] font-medium text-[14px] px-6 py-4 rounded-full transition-all duration-300 flex items-center justify-center gap-3 ${addedToCart ? "bg-green-500 text-white" : "bg-accent text-white hover:bg-[#d66f45] hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed"}`
7421
+ },
7422
+ isAddingToCart ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("svg", { className: "animate-spin h-5 w-5", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "aria-hidden": "true" }, /* @__PURE__ */ React.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ React.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })), "Loading...") : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(lucideReact.ShoppingCart, { className: "h-4 w-4" }), !selectedVariant ? "Select a variant" : selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ ? "Out of Stock" : "Add to Cart")
7423
+ ), /* @__PURE__ */ React.createElement(
7424
+ "button",
7425
+ {
7426
+ onClick: () => {
7427
+ onClose();
7428
+ onNavigateToProduct?.(product.id);
7429
+ },
7430
+ className: "w-full font-['Poppins',sans-serif] font-medium text-[13px] px-6 py-3 rounded-full bg-white text-secondary border-2 border-primary hover:bg-gray-50 transition-all flex items-center justify-center gap-2"
7431
+ },
7432
+ "View Full Details",
7433
+ /* @__PURE__ */ React.createElement(lucideReact.ExternalLink, { className: "size-4" })
7434
+ )))))
7435
+ )
7436
+ );
7437
+ }
7438
+
7439
+ // src/components/ProductCard.tsx
7110
7440
  function ProductCard({
7111
7441
  product,
7112
7442
  onClickProduct,
@@ -7115,7 +7445,7 @@ function ProductCard({
7115
7445
  showFavoriteButton = true,
7116
7446
  className
7117
7447
  }) {
7118
- const router = navigation.useRouter();
7448
+ navigation.useRouter();
7119
7449
  const { buildPath } = useBasePath();
7120
7450
  const [isFavorite, setIsFavorite] = React21.useState(isFavorited);
7121
7451
  const { addToWishlist, removeFromWishlist, isInWishlist } = useWishlist();
@@ -7124,6 +7454,8 @@ function ProductCard({
7124
7454
  const [isImageLoaded, setIsImageLoaded] = React21.useState(false);
7125
7455
  const [selectedVariantImage, setSelectedVariantImage] = React21.useState(null);
7126
7456
  const [selectedVariantId, setSelectedVariantId] = React21.useState(null);
7457
+ const [showQuickView, setShowQuickView] = React21.useState(false);
7458
+ const notification = useNotification();
7127
7459
  const handleImageLoad = React21.useCallback(() => {
7128
7460
  setIsImageLoaded(true);
7129
7461
  }, []);
@@ -7133,24 +7465,6 @@ function ProductCard({
7133
7465
  onClickProduct(product);
7134
7466
  }
7135
7467
  }, [onClickProduct, product]);
7136
- const handleFavorite = async (e) => {
7137
- e.stopPropagation();
7138
- try {
7139
- if (isInWishlist(product?._id || "")) {
7140
- await removeFromWishlist(product?._id || "");
7141
- setIsFavorite(false);
7142
- sonner.toast.success("Removed from wishlist");
7143
- } else {
7144
- await addToWishlist(product);
7145
- setIsFavorite(true);
7146
- sonner.toast.success("Added to wishlist");
7147
- }
7148
- onFavorite?.(product);
7149
- } catch (error) {
7150
- console.error("Error updating wishlist:", error);
7151
- sonner.toast.error("Failed to update wishlist");
7152
- }
7153
- };
7154
7468
  React21.useEffect(() => {
7155
7469
  setIsFavorite(isInWishlist(product?._id || "") || isFavorited);
7156
7470
  }, [isFavorited, isInWishlist, product?._id]);
@@ -7158,7 +7472,14 @@ function ProductCard({
7158
7472
  setSelectedVariantImage(null);
7159
7473
  setSelectedVariantId(null);
7160
7474
  setIsImageLoaded(false);
7161
- }, [product._id]);
7475
+ if (product.productVariants && product.productVariants.length > 0) {
7476
+ const firstVariant = product.productVariants[0];
7477
+ if (firstVariant.productMedia && firstVariant.productMedia.length > 0) {
7478
+ setSelectedVariantImage(firstVariant.productMedia[0].file);
7479
+ setSelectedVariantId(firstVariant.id || firstVariant._id || null);
7480
+ }
7481
+ }
7482
+ }, [product._id, product.productVariants]);
7162
7483
  const handleKeyDown = (e) => {
7163
7484
  if (e.key === "Enter" || e.key === " ") {
7164
7485
  e.preventDefault();
@@ -7195,10 +7516,10 @@ function ProductCard({
7195
7516
  React21.useEffect(() => {
7196
7517
  setIsImageLoaded(false);
7197
7518
  }, [imageSource.src]);
7198
- return /* @__PURE__ */ React21__default.default.createElement(
7199
- framerMotion.motion.article,
7519
+ return /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement(
7520
+ framerMotion.motion.div,
7200
7521
  {
7201
- className: "relative group bg-white rounded-xl overflow-hidden shadow-sm hover:shadow-md transition-all duration-300 border border-gray-100 hover:border-gray-200 flex flex-col",
7522
+ className: "bg-white rounded-[16px] overflow-hidden border-2 border-gray-100 hover:border-[#5B9BD5] hover:shadow-lg transition-all duration-300 group h-full flex flex-col",
7202
7523
  whileHover: { y: -4 },
7203
7524
  onMouseEnter: () => setIsHovered(true),
7204
7525
  onMouseLeave: () => setIsHovered(false),
@@ -7208,59 +7529,46 @@ function ProductCard({
7208
7529
  onClick: handleCardClick,
7209
7530
  onKeyDown: handleKeyDown
7210
7531
  },
7211
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative aspect-square w-full overflow-hidden bg-gray-50" }, /* @__PURE__ */ React21__default.default.createElement(framerMotion.AnimatePresence, null, !isImageLoaded && /* @__PURE__ */ React21__default.default.createElement(
7212
- framerMotion.motion.div,
7213
- {
7214
- className: "absolute inset-0 bg-gray-200 animate-pulse",
7215
- initial: { opacity: 1 },
7216
- exit: { opacity: 0 },
7217
- transition: { duration: 0.2 }
7218
- }
7219
- )), /* @__PURE__ */ React21__default.default.createElement(
7220
- Image3__default.default,
7221
- {
7222
- src: imageSource.src,
7223
- alt: imageSource.alt,
7224
- fill: true,
7225
- className: `h-full w-full object-cover object-center transition-opacity duration-300 ${product.inventoryCount === 0 ? "opacity-60" : ""} ${isImageLoaded ? "opacity-100" : "opacity-0"}`,
7226
- sizes: "(max-width: 640px) 100vw, (max-width: 768px) 50vw, 33vw",
7227
- priority: false,
7228
- onLoad: handleImageLoad,
7229
- onError: () => setIsImageLoaded(true),
7230
- key: imageSource.src
7231
- }
7232
- ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute top-3 left-3 flex flex-col gap-2 z-10" }, product.isDiscounted && /* @__PURE__ */ React21__default.default.createElement(
7233
- framerMotion.motion.span,
7234
- {
7235
- initial: { scale: 0.9, opacity: 0 },
7236
- animate: { scale: 1, opacity: 1 },
7237
- className: "inline-flex items-center justify-center px-2.5 py-1 rounded-full text-xs font-bold text-white bg-green-600 shadow-md"
7238
- },
7239
- "-",
7240
- product.discountAmount,
7241
- "%"
7242
- ), product.inventoryCount === 0 && /* @__PURE__ */ React21__default.default.createElement(
7243
- framerMotion.motion.span,
7532
+ /* @__PURE__ */ React21__default.default.createElement(
7533
+ "div",
7244
7534
  {
7245
- initial: { scale: 0.9, opacity: 0 },
7246
- animate: { scale: 1, opacity: 1 },
7247
- className: "inline-flex items-center justify-center px-2.5 py-1 rounded-full text-xs font-bold text-white bg-red-600"
7535
+ onClick: handleCardClick,
7536
+ className: "relative aspect-square overflow-hidden bg-gray-50 cursor-pointer flex-shrink-0"
7248
7537
  },
7249
- "Out of Stock"
7250
- )), showFavoriteButton && /* @__PURE__ */ React21__default.default.createElement(
7251
- framerMotion.motion.button,
7538
+ /* @__PURE__ */ React21__default.default.createElement(
7539
+ Image4__default.default,
7540
+ {
7541
+ src: imageSource.src,
7542
+ alt: imageSource.alt,
7543
+ className: "w-full h-full object-cover group-hover:scale-105 transition-transform duration-300",
7544
+ height: 300,
7545
+ width: 300,
7546
+ priority: false,
7547
+ onLoad: handleImageLoad,
7548
+ onError: () => setIsImageLoaded(true),
7549
+ key: imageSource.src
7550
+ }
7551
+ ),
7552
+ /* @__PURE__ */ React21__default.default.createElement(
7553
+ "button",
7554
+ {
7555
+ onClick: (e) => {
7556
+ e.stopPropagation();
7557
+ setShowQuickView(true);
7558
+ },
7559
+ className: "absolute top-2 left-2 p-2 rounded-full bg-white/90 backdrop-blur-sm hover:bg-white shadow-md opacity-0 group-hover:opacity-100 transition-all"
7560
+ },
7561
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.Eye, { className: "size-4 text-[#2B4B7C]" })
7562
+ ),
7563
+ product.inventoryCount === 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white rounded-full px-4 py-2" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-bold text-[11px] text-[#2B4B7C] uppercase" }, "Out of Stock")))
7564
+ ),
7565
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-4 flex-1 flex flex-col" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-0 flex-1 flex flex-col" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-1 mb-2 flex-wrap" }, product.isDiscounted && /* @__PURE__ */ React21__default.default.createElement("span", { className: "bg-[#E67E50] text-white rounded-full px-2 py-0.5 flex items-center gap-1" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-bold text-[8px] uppercase" }, "-", product.discountAmount, "%"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-xs text-[#5B9BD5] uppercase tracking-wide font-medium" }, product.brand)), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-sm font-['Poppins',sans-serif] font-semibold text-[#2B4B7C] mb-3" }, displayName), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-1.5 mb-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-0.5" }, [...Array(5)].map((_, i) => /* @__PURE__ */ React21__default.default.createElement(
7566
+ lucideReact.Star,
7252
7567
  {
7253
- type: "button",
7254
- onClick: handleFavorite,
7255
- className: "absolute top-2 right-2 p-2 rounded-full z-10 transition-colors bg-white shadow-md hover:shadow-lg text-primary-600 hover:text-red-500",
7256
- whileHover: { scale: 1.1 },
7257
- whileTap: { scale: 0.95 },
7258
- "aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
7259
- },
7260
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: `w-5 h-5 ${isFavorite ? "fill-red-500 text-red-500" : ""}` })
7261
- )),
7262
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute top-4 left-4 flex flex-col gap-2" }, product.inventoryCount === 0 && /* @__PURE__ */ React21__default.default.createElement("span", { className: "px-3 py-1 rounded-full text-sm font-bold bg-red-100 text-red-800" }, "Out of Stock")),
7263
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-4" }, product.parentCategories && product.parentCategories?.length > 0 && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-gray-500 uppercase tracking-wider mb-1" }, product.parentCategories?.map((category) => category?.name).join(", ") || "No categories"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-2" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 line-clamp-1 group-hover:text-primary-600 transition-colors" }, displayName)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-baseline gap-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-2xl font-bold text-gray-900" }, formatPrice(product.finalPrice)), product.inventoryCount > 0 && /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-xs text-gray-500" }, product.inventoryCount > 0 ? "In Stock" : "Out of Stock")), product.priceBeforeDiscount && product.priceBeforeDiscount > product.finalPrice && /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm text-gray-500 line-through" }, formatPrice(product.priceBeforeDiscount))), variantImages.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2 mt-3" }, variantImages.map((variant, index) => /* @__PURE__ */ React21__default.default.createElement(
7568
+ key: i,
7569
+ className: `size-4 ${i < Math.floor(product.rating ? product.rating : 0) ? "text-[#E67E50] fill-[#E67E50]" : "text-gray-300"}`
7570
+ }
7571
+ ))), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] text-[10px] text-[#676c80]" }, "(", product.reviews?.length || 0, ")")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-1.5 mb-3" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-bold text-md text-primary-600" }, "$", product.finalPrice.toFixed(2)), product.isDiscounted && /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] text-sm text-[#676c80] line-through" }, "$", formatPrice(product.priceBeforeDiscount))), variantImages.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-1.5 mb-3" }, variantImages.map((variant, index) => /* @__PURE__ */ React21__default.default.createElement(
7264
7572
  "button",
7265
7573
  {
7266
7574
  key: variant.variantId || index,
@@ -7280,7 +7588,7 @@ function ProductCard({
7280
7588
  "aria-label": `Select ${variant.color || "variant"} color`
7281
7589
  },
7282
7590
  /* @__PURE__ */ React21__default.default.createElement(
7283
- Image3__default.default,
7591
+ Image4__default.default,
7284
7592
  {
7285
7593
  src: variant.image,
7286
7594
  alt: variant.color || `Variant ${index + 1}`,
@@ -7289,15 +7597,17 @@ function ProductCard({
7289
7597
  sizes: "32px"
7290
7598
  }
7291
7599
  )
7292
- )))),
7293
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-auto p-4 pt-0" }, /* @__PURE__ */ React21__default.default.createElement(
7600
+ )))), /* @__PURE__ */ React21__default.default.createElement(
7294
7601
  "button",
7295
7602
  {
7296
7603
  type: "button",
7297
7604
  onClick: async (e) => {
7298
7605
  e.stopPropagation();
7299
7606
  if (!selectedVariantId && variantImages.length > 0) {
7300
- sonner.toast.error("Please select a variant");
7607
+ notification.error(
7608
+ "Select a variant",
7609
+ "Please choose a variant before adding this item to your cart."
7610
+ );
7301
7611
  return;
7302
7612
  }
7303
7613
  try {
@@ -7311,23 +7621,19 @@ function ProductCard({
7311
7621
  }
7312
7622
  },
7313
7623
  disabled: isAddingToCart || variantImages.length > 0 && !selectedVariantId,
7314
- className: "w-full flex items-center justify-center gap-2 rounded-full px-3 py-2.5 text-sm font-medium bg-primary-400 hover:bg-primary-500 text-white transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
7624
+ className: "w-full font-['Poppins',sans-serif] font-medium text-[11px] px-3 py-2 rounded-full bg-[#5B9BD5] text-white hover:bg-[#4a8ac4] hover:shadow-lg transition-all duration-300 flex items-center justify-center gap-1.5 disabled:opacity-50 disabled:cursor-not-allowed"
7315
7625
  },
7316
7626
  /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingCart, { className: "h-4 w-4" }),
7317
- "Add to Cart"
7318
- ), /* @__PURE__ */ React21__default.default.createElement(
7319
- "button",
7320
- {
7321
- type: "button",
7322
- onClick: (e) => {
7323
- e.stopPropagation();
7324
- router.push(buildPath(`/products/${product._id}`));
7325
- },
7326
- className: "mt-2 w-full flex items-center justify-center rounded-full border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors"
7327
- },
7328
- "View More"
7627
+ selectedVariant?.inventoryCount === 0 ? "Out of Stock" : "Add to Cart"
7329
7628
  ))
7330
- );
7629
+ ), showQuickView && /* @__PURE__ */ React21__default.default.createElement(
7630
+ QuickViewModal,
7631
+ {
7632
+ product,
7633
+ onClose: () => setShowQuickView(false),
7634
+ onNavigateToProduct: () => handleCardClick
7635
+ }
7636
+ ));
7331
7637
  }
7332
7638
  function Skeleton({ className = "" }) {
7333
7639
  return /* @__PURE__ */ React21__default.default.createElement("div", { className: `animate-pulse bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 bg-[length:200%_100%] rounded ${className}` });
@@ -7350,7 +7656,7 @@ function Button({
7350
7656
  children,
7351
7657
  ...props
7352
7658
  }) {
7353
- const baseStyles = "font-medium rounded-lg transition-all duration-200 inline-flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-primary-500";
7659
+ const baseStyles = "font-medium rounded-full transition-all duration-200 inline-flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-primary-500";
7354
7660
  const variants = {
7355
7661
  primary: "bg-primary-600 text-white hover:bg-primary-700 shadow-lg shadow-primary-500/30 hover:shadow-xl hover:shadow-primary-500/40",
7356
7662
  secondary: "bg-secondary-600 text-white hover:bg-secondary-700 shadow-lg shadow-secondary-500/30 hover:shadow-xl hover:shadow-secondary-500/40",
@@ -7519,8 +7825,6 @@ function useCategories() {
7519
7825
  }, []);
7520
7826
  return { categories, isLoading, error };
7521
7827
  }
7522
-
7523
- // src/screens/ShopScreen.tsx
7524
7828
  function ShopScreen({ initialFilters = {}, categoryName }) {
7525
7829
  const router = navigation.useRouter();
7526
7830
  const { buildPath } = useBasePath();
@@ -7721,7 +8025,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7721
8025
  },
7722
8026
  []
7723
8027
  );
7724
- const handleSubCategoryChange = React21.useCallback((parentCategoryId, subCategoryId) => {
8028
+ React21.useCallback((parentCategoryId, subCategoryId) => {
7725
8029
  setFilters((current) => {
7726
8030
  if (current.subCategory === subCategoryId) {
7727
8031
  const { subCategory, ...rest } = current;
@@ -8029,124 +8333,83 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8029
8333
  if (name.includes("care") || name.includes("personal")) return lucideReact.Heart;
8030
8334
  return lucideReact.Package;
8031
8335
  };
8032
- const renderFiltersPanel = () => /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-bold text-slate-900" }, "Filters"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("label", { className: "text-sm font-medium text-slate-600" }, "Search Products"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-400" }), /* @__PURE__ */ React21__default.default.createElement(
8336
+ const renderFiltersPanel = () => /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: `lg:w-72 ${showFilters ? "block rounded-full" : "hidden lg:block"}` }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white rounded-[24px] p-6 border-2 border-gray-100 sticky top-24" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "font-['Poppins',sans-serif] font-semibold text-secondary" }, "Filters"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement("label", { className: "font-['Poppins',sans-serif] text-[12px] text-muted mb-2 block font-medium" }, "Search Products"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted" }), /* @__PURE__ */ React21__default.default.createElement(
8033
8337
  "input",
8034
8338
  {
8035
8339
  type: "text",
8036
8340
  placeholder: "Search...",
8037
8341
  value: searchQuery,
8038
8342
  onChange: handleInputChange,
8039
- className: "w-full rounded-lg border border-slate-200 bg-white pl-10 pr-4 py-2 text-sm text-slate-900 placeholder-slate-400 focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-500/20"
8343
+ className: "w-full pl-10 pr-4 py-2.5 rounded-xl border-2 border-gray-200 focus:border-primary focus:outline-none font-['Poppins',sans-serif] text-[13px] text-secondary"
8040
8344
  }
8041
- ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement(
8345
+ ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement(
8042
8346
  "button",
8043
8347
  {
8044
- type: "button",
8045
8348
  onClick: () => toggleFilterSection("category"),
8046
- className: "flex w-full items-center justify-between text-sm font-medium text-slate-600"
8047
- },
8048
- /* @__PURE__ */ React21__default.default.createElement("span", null, "Category"),
8049
- expandedFilterSections.category ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronUp, { className: "h-4 w-4" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: "h-4 w-4" })
8050
- ), expandedFilterSections.category && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement(
8051
- "button",
8052
- {
8053
- type: "button",
8054
- onClick: handleClearCategory,
8055
- className: `flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-medium transition ${!categoryFilter ? "bg-primary-600 text-white" : "bg-white text-slate-700 border border-slate-200 hover:border-primary-300"}`
8349
+ className: "w-full flex items-center justify-between mb-3"
8056
8350
  },
8057
- /* @__PURE__ */ React21__default.default.createElement("div", { className: `flex h-6 w-6 items-center justify-center rounded ${!categoryFilter ? "bg-white/20" : "bg-slate-100"}` }, !categoryFilter ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "h-4 w-4 text-white" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingBag, { className: "h-4 w-4 text-slate-600" })),
8058
- /* @__PURE__ */ React21__default.default.createElement("span", null, "All Products")
8059
- ), sortedCategories.map((category) => {
8351
+ /* @__PURE__ */ React21__default.default.createElement("label", { className: "font-['Poppins',sans-serif] text-[12px] text-muted font-medium cursor-pointer" }, "Category"),
8352
+ expandedFilterSections.category ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: `size-4 text-muted transition-transform ${expandedFilterSections.category ? "rotate-180" : ""}` }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: `size-4 text-muted transition-transform ${expandedFilterSections.category ? "rotate-180" : ""}` })
8353
+ ), expandedFilterSections.category && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, sortedCategories.map((category) => {
8060
8354
  const isCategoryActive = categoryFilter === category.id;
8061
8355
  const isExpanded = !!expandedCategories[category.id];
8062
8356
  const Icon = getCategoryIconForFilter(category.name ?? "");
8063
- return /* @__PURE__ */ React21__default.default.createElement("div", { key: category.id, className: "space-y-1" }, /* @__PURE__ */ React21__default.default.createElement(
8357
+ return /* @__PURE__ */ React21__default.default.createElement(
8064
8358
  "button",
8065
8359
  {
8066
- type: "button",
8360
+ key: category.id,
8067
8361
  onClick: () => {
8068
8362
  if (!isExpanded) toggleCategoryExpand(category.id ?? "");
8069
8363
  handleCategoryChange(category.id ?? "");
8070
8364
  },
8071
- className: `flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-medium transition ${isCategoryActive ? "bg-primary-600 text-white" : "bg-white text-slate-700 border border-slate-200 hover:border-primary-300"}`
8365
+ className: `w-full text-left px-4 py-3 rounded-xl font-['Poppins',sans-serif] text-[13px] transition-all flex items-center gap-3 ${isCategoryActive ? "bg-primary text-white shadow-lg" : "text-secondary hover:bg-gray-50 border-2 border-gray-100"}`
8072
8366
  },
8073
- /* @__PURE__ */ React21__default.default.createElement("div", { className: `flex h-6 w-6 items-center justify-center rounded ${isCategoryActive ? "bg-white/20" : "bg-slate-100"}` }, /* @__PURE__ */ React21__default.default.createElement(Icon, { className: `h-4 w-4 ${isCategoryActive ? "text-white" : "text-slate-600"}` })),
8074
- /* @__PURE__ */ React21__default.default.createElement("span", { className: "flex-1 text-left" }, category.name),
8075
- Array.isArray(category.categorySubCategories) && category.categorySubCategories.length > 0 && /* @__PURE__ */ React21__default.default.createElement(
8076
- "button",
8077
- {
8078
- type: "button",
8079
- onClick: (e) => {
8080
- e.stopPropagation();
8081
- toggleCategoryExpand(category.id ?? "");
8082
- },
8083
- className: "p-1"
8084
- },
8085
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: `h-4 w-4 transition-transform ${isExpanded ? "rotate-180" : ""} ${isCategoryActive ? "text-white" : "text-slate-400"}` })
8086
- )
8087
- ), isExpanded && Array.isArray(category.categorySubCategories) && category.categorySubCategories.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "ml-9 space-y-1" }, category.categorySubCategories.map((sub) => {
8088
- const isSubActive = subCategoryFilter === sub.id;
8089
- return /* @__PURE__ */ React21__default.default.createElement(
8090
- "button",
8091
- {
8092
- key: sub.id,
8093
- type: "button",
8094
- onClick: () => handleSubCategoryChange(category.id ?? "", sub.id),
8095
- className: `block w-full rounded-lg px-3 py-2 text-sm text-left transition ${isSubActive ? "bg-primary-50 text-primary-700 font-medium" : "text-slate-600 hover:bg-slate-50"}`
8096
- },
8097
- sub.name
8098
- );
8099
- })));
8100
- }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement(
8367
+ /* @__PURE__ */ React21__default.default.createElement(Icon, { className: "size-4" }),
8368
+ category.name
8369
+ );
8370
+ }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement(
8101
8371
  "button",
8102
8372
  {
8103
- type: "button",
8104
8373
  onClick: () => toggleFilterSection("brand"),
8105
- className: "flex w-full items-center justify-between text-sm font-medium text-slate-600"
8374
+ className: "w-full flex items-center justify-between mb-3"
8106
8375
  },
8107
- /* @__PURE__ */ React21__default.default.createElement("span", null, "Brand"),
8108
- expandedFilterSections.brand ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronUp, { className: "h-4 w-4" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: "h-4 w-4" })
8109
- ), expandedFilterSections.brand && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-1.5 max-h-64 overflow-y-auto" }, availableBrands.length === 0 ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-xs text-slate-500" }, "No brands available") : availableBrands.map((brand) => {
8376
+ /* @__PURE__ */ React21__default.default.createElement("label", { className: "font-['Poppins',sans-serif] text-[12px] text-muted font-medium cursor-pointer" }, "Brand"),
8377
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: `size-4 text-muted transition-transform ${expandedFilterSections.brand ? "rotate-180" : ""}` })
8378
+ ), expandedFilterSections.brand && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, availableBrands.length === 0 ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-xs text-slate-500" }, "No brands available") : availableBrands.map((brand) => {
8110
8379
  const isSelected = brandFilter === brand;
8111
8380
  return /* @__PURE__ */ React21__default.default.createElement(
8112
8381
  "button",
8113
8382
  {
8114
8383
  key: brand,
8115
- type: "button",
8116
8384
  onClick: () => handleBrandChange(brand),
8117
- className: `flex w-full items-center justify-between rounded-md border px-2.5 py-1.5 text-xs font-medium transition ${isSelected ? "border-primary-500 bg-primary-50 text-primary-700" : "border-slate-200 bg-white text-slate-600 hover:border-primary-300"}`
8385
+ className: `w-full text-left px-4 py-3 rounded-xl font-['Poppins',sans-serif] text-[13px] transition-all ${isSelected ? "bg-primary text-white shadow-lg" : "text-secondary hover:bg-gray-50 border-2 border-gray-100"}`
8118
8386
  },
8119
- /* @__PURE__ */ React21__default.default.createElement("span", { className: "truncate" }, brand),
8120
- isSelected && /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "h-3 w-3 text-primary-600 flex-shrink-0 ml-2" })
8387
+ brand
8121
8388
  );
8122
- }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement(
8389
+ }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement(
8123
8390
  "button",
8124
8391
  {
8125
- type: "button",
8126
8392
  onClick: () => toggleFilterSection("availability"),
8127
- className: "flex w-full items-center justify-between text-sm font-medium text-slate-600"
8393
+ className: "w-full flex items-center justify-between mb-3"
8128
8394
  },
8129
- /* @__PURE__ */ React21__default.default.createElement("span", null, "Availability"),
8130
- expandedFilterSections.availability ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronUp, { className: "h-4 w-4" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: "h-4 w-4" })
8395
+ /* @__PURE__ */ React21__default.default.createElement("label", { className: "font-['Poppins',sans-serif] text-[12px] text-muted font-medium cursor-pointer" }, "Availability"),
8396
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: `size-4 text-muted transition-transform ${expandedFilterSections.availability ? "rotate-180" : ""}` })
8131
8397
  ), expandedFilterSections.availability && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement(
8132
8398
  "button",
8133
8399
  {
8134
- type: "button",
8135
8400
  onClick: handleToggleStock,
8136
- className: `flex w-full items-center justify-between rounded-lg border px-3 py-2.5 text-sm font-medium transition ${inStockOnly ? "border-primary-500 bg-primary-50 text-primary-700" : "border-slate-200 bg-white text-slate-600 hover:border-primary-300"}`
8401
+ className: `w-full flex items-center justify-between px-4 py-3 rounded-xl font-['Poppins',sans-serif] text-[13px] transition-all border-2 ${inStockOnly ? "bg-primary text-white shadow-lg" : "text-secondary hover:bg-gray-50 border-2 border-gray-100"}`
8137
8402
  },
8138
- /* @__PURE__ */ React21__default.default.createElement("span", null, "In stock only"),
8139
- inStockOnly && /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "h-4 w-4 text-primary-600" })
8140
- ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement(
8403
+ "In Stock Only"
8404
+ ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement(
8141
8405
  "button",
8142
8406
  {
8143
- type: "button",
8144
8407
  onClick: () => toggleFilterSection("price"),
8145
- className: "flex w-full items-center justify-between text-sm font-medium text-slate-600"
8408
+ className: "w-full flex items-center justify-between mb-3"
8146
8409
  },
8147
- /* @__PURE__ */ React21__default.default.createElement("span", null, "Price Range"),
8148
- expandedFilterSections.price ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronUp, { className: "h-4 w-4" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: "h-4 w-4" })
8149
- ), expandedFilterSections.price && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, priceRanges.map((range) => {
8410
+ /* @__PURE__ */ React21__default.default.createElement("label", { className: "font-['Poppins',sans-serif] text-[12px] text-muted font-medium cursor-pointer" }, "Price Range"),
8411
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: `size-4 text-muted transition-transform ${expandedFilterSections.price ? "rotate-180" : ""}` })
8412
+ ), expandedFilterSections.price && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, priceRanges.map((range) => {
8150
8413
  const isActive = selectedPriceRange === range.value;
8151
8414
  return /* @__PURE__ */ React21__default.default.createElement(
8152
8415
  "button",
@@ -8154,7 +8417,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8154
8417
  type: "button",
8155
8418
  key: range.value,
8156
8419
  onClick: () => handlePriceRangeSelect(range.value),
8157
- className: `rounded-lg border px-3 py-1.5 text-sm font-medium transition ${isActive ? "border-primary-600 bg-primary-600 text-white" : "border-slate-200 bg-white text-slate-600 hover:border-primary-300"}`
8420
+ className: `w-full flex items-center justify-between px-4 py-3 rounded-xl font-['Poppins',sans-serif] text-[13px] transition-all border-2 ${isActive ? "bg-primary text-white shadow-lg" : "text-secondary hover:bg-gray-50 border-2 border-gray-100"}`
8158
8421
  },
8159
8422
  range.label
8160
8423
  );
@@ -8166,7 +8429,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8166
8429
  placeholder: "Min",
8167
8430
  value: customPrice.min,
8168
8431
  onChange: (event) => setCustomPrice((current) => ({ ...current, min: event.target.value })),
8169
- className: "text-sm"
8432
+ className: "w-1/2 px-4 py-2.5 rounded-xl border-2 border-gray-200 focus:border-primary focus:outline-none font-['Poppins',sans-serif] text-[13px] text-secondary"
8170
8433
  }
8171
8434
  ), /* @__PURE__ */ React21__default.default.createElement(
8172
8435
  Input,
@@ -8176,7 +8439,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8176
8439
  placeholder: "Max",
8177
8440
  value: customPrice.max,
8178
8441
  onChange: (event) => setCustomPrice((current) => ({ ...current, max: event.target.value })),
8179
- className: "text-sm"
8442
+ className: "w-1/2 px-4 py-2.5 rounded-xl border-2 border-gray-200 focus:border-primary focus:outline-none font-['Poppins',sans-serif] text-[13px] text-secondary"
8180
8443
  }
8181
8444
  )), /* @__PURE__ */ React21__default.default.createElement(
8182
8445
  "button",
@@ -8184,10 +8447,10 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8184
8447
  type: "button",
8185
8448
  onClick: applyCustomPrice,
8186
8449
  disabled: !isCustomPriceDirty,
8187
- className: "w-full rounded-lg border border-primary-500 bg-primary-500/10 px-4 py-2 text-sm font-medium text-primary-700 transition hover:bg-primary-500/20 disabled:cursor-not-allowed disabled:border-slate-200 disabled:text-slate-400"
8450
+ className: "w-full rounded-lg border border-primary bg-primary/10 px-4 py-2 text-sm font-medium text-primary transition hover:bg-primary/20 disabled:cursor-not-allowed disabled:border-slate-200 disabled:text-slate-400"
8188
8451
  },
8189
8452
  "Apply"
8190
- )))));
8453
+ )))))));
8191
8454
  const displayCategories = React21.useMemo(() => {
8192
8455
  return topCategories.slice(0, 5);
8193
8456
  }, [topCategories]);
@@ -8199,7 +8462,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8199
8462
  if (name.includes("care") || name.includes("personal")) return lucideReact.Heart;
8200
8463
  return lucideReact.Package;
8201
8464
  };
8202
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-[#F9FAFB]" }, /* @__PURE__ */ React21__default.default.createElement("section", { className: "relative overflow-hidden bg-[#E6EBF0] py-16 md:py-24" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement(
8465
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-[#F9FAFB]" }, /* @__PURE__ */ React21__default.default.createElement("section", { className: "relative overflow-hidden bg-primary-bg py-16 md:py-24" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement(
8203
8466
  framerMotion.motion.div,
8204
8467
  {
8205
8468
  initial: { opacity: 0, y: 24 },
@@ -8228,33 +8491,20 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8228
8491
  }
8229
8492
  ))
8230
8493
  )
8231
- ))), /* @__PURE__ */ React21__default.default.createElement("section", { className: "bg-white py-8 " }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl md:text-3xl font-bold text-slate-900 mb-8" }, "Shop by Category"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 gap-6" }, isLoadingCategories ? (
8232
- // Skeleton loaders
8233
- /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(
8234
- "div",
8235
- {
8236
- key: index,
8237
- className: "rounded-xl border border-slate-200 bg-white p-8"
8238
- },
8239
- /* @__PURE__ */ React21__default.default.createElement(Skeleton, { className: "h-10 w-10 mb-4 rounded-lg" }),
8240
- /* @__PURE__ */ React21__default.default.createElement(Skeleton, { className: "h-6 w-3/4 mb-2 rounded" }),
8241
- /* @__PURE__ */ React21__default.default.createElement(Skeleton, { className: "h-4 w-1/2 rounded" })
8242
- )))
8243
- ) : /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement(
8244
- framerMotion.motion.button,
8245
- {
8246
- initial: { opacity: 0, y: 20 },
8247
- animate: { opacity: 1, y: 0 },
8248
- onClick: handleClearCategory,
8249
- className: `group relative overflow-hidden rounded-xl p-8 text-left transition ${!categoryFilter ? "bg-gradient-to-b from-primary-500 to-primary-300 text-white shadow-lg scale-105" : "border border-slate-200 bg-white hover:border-primary-300 hover:shadow-md"}`
8250
- },
8251
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingBag, { className: `h-10 w-10 mb-4 ${!categoryFilter ? "text-white" : "text-primary-500"}` }),
8252
- /* @__PURE__ */ React21__default.default.createElement("h3", { className: `text-xl font-bold mb-2 ${!categoryFilter ? "text-white" : "text-slate-900 group-hover:text-primary-600"}` }, "All Products"),
8253
- /* @__PURE__ */ React21__default.default.createElement("p", { className: `text-sm ${!categoryFilter ? "text-white/90" : "text-slate-500"}` }, "Browse everything")
8254
- ), displayCategories.map((category, index) => {
8494
+ ))), /* @__PURE__ */ React21__default.default.createElement("section", { className: "py-8 bg-white" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "max-w-[1400px] mx-auto px-8 md:px-12" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl md:text-3xl font-['Poppins',sans-serif] font-semibold text-secondary mb-6" }, "Shop by Category"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-4" }, displayCategories.map((category, index) => {
8255
8495
  const Icon = getCategoryIcon(category.name ?? "");
8256
8496
  const isSelected = categoryFilter === category.id;
8257
- return /* @__PURE__ */ React21__default.default.createElement(
8497
+ return /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement(
8498
+ framerMotion.motion.button,
8499
+ {
8500
+ onClick: handleClearCategory,
8501
+ initial: { opacity: 0, y: 20 },
8502
+ animate: { opacity: 1, y: 0 },
8503
+ transition: { delay: index * 0.1 },
8504
+ className: `group relative overflow-hidden rounded-[24px] p-6 transition-all duration-300 ${!categoryFilter ? "bg-gradient-to-br from-primary to-secondary text-white shadow-xl scale-105" : "bg-gradient-to-br from-gray-50 to-white hover:shadow-lg border-2 border-gray-100 hover:border-primary"}`
8505
+ },
8506
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: `size-12 rounded-full mb-3 mx-auto flex items-center justify-center transition-all ${!categoryFilter ? "bg-white/20" : "bg-gradient-to-br from-primary/10 to-secondary/10 group-hover:scale-110"}` }, /* @__PURE__ */ React21__default.default.createElement(Icon, { className: `size-6 ${!categoryFilter ? "text-white" : "text-primary"}` })), /* @__PURE__ */ React21__default.default.createElement("h3", { className: `font-['Poppins',sans-serif] font-semibold text-[14px] mb-1.5 ${!categoryFilter ? "text-white" : "text-secondary"}` }, "All Products"), /* @__PURE__ */ React21__default.default.createElement("p", { className: `font-['Poppins',sans-serif] text-[11px] ${!categoryFilter ? "text-white/80" : "text-muted"}` }, "Browse Everything"))
8507
+ ), /* @__PURE__ */ React21__default.default.createElement(
8258
8508
  framerMotion.motion.button,
8259
8509
  {
8260
8510
  key: category.id,
@@ -8262,56 +8512,42 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8262
8512
  animate: { opacity: 1, y: 0 },
8263
8513
  transition: { delay: index * 0.1 },
8264
8514
  onClick: () => handleCategoryChange(category.id ?? ""),
8265
- className: `group rounded-xl p-8 text-left transition ${isSelected ? "bg-gradient-to-b from-primary-500 to-primary-300 text-white shadow-lg" : "border border-slate-200 bg-white hover:border-primary-300 hover:shadow-md"}`
8515
+ className: `group relative overflow-hidden rounded-[24px] p-6 transition-all duration-300 ${isSelected ? "bg-gradient-to-br from-primary to-secondary text-white shadow-xl scale-105" : "bg-gradient-to-br from-gray-50 to-white hover:shadow-lg border-2 border-gray-100 hover:border-primary"}`
8266
8516
  },
8267
- /* @__PURE__ */ React21__default.default.createElement(Icon, { className: `h-10 w-10 mb-4 ${isSelected ? "text-white" : "text-primary-500"}` }),
8268
- /* @__PURE__ */ React21__default.default.createElement("h3", { className: `text-xl font-bold mb-2 transition-colors ${isSelected ? "text-white" : "text-slate-900 group-hover:text-primary-600"}` }, category.name),
8269
- /* @__PURE__ */ React21__default.default.createElement("p", { className: `text-sm ${isSelected ? "text-white/90" : "text-slate-500"}` }, category.name?.toLowerCase().includes("scrub") ? "Professional uniforms" : category.name?.toLowerCase().includes("vitamin") ? "Health supplements" : category.name?.toLowerCase().includes("medicine") ? "OTC medications" : category.name?.toLowerCase().includes("care") ? "Daily essentials" : "Shop now")
8270
- );
8271
- }))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative z-10 pb-16 mt-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-8 lg:flex-row" }, /* @__PURE__ */ React21__default.default.createElement("aside", { className: "hidden w-72 flex-shrink-0 lg:block" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "sticky top-24 rounded-lg bg-white p-6" }, renderFiltersPanel())), /* @__PURE__ */ React21__default.default.createElement("main", { className: "flex-1 space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-gray-100 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-base font-medium text-gray-700" }, isLoading ? "Loading products..." : `Showing ${displayedProducts.length} of ${pagination.total || displayedProducts.length} products`)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-3 md:flex-row md:items-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowUpDown, { className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" }), /* @__PURE__ */ React21__default.default.createElement(
8517
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: `size-12 rounded-full mb-3 mx-auto flex items-center justify-center transition-all ${isSelected ? "bg-white/20" : "bg-gradient-to-br from-primary/10 to-secondary/10 group-hover:scale-110"}` }, /* @__PURE__ */ React21__default.default.createElement(Icon, { className: `size-6 ${isSelected ? "text-white" : "text-primary"}` })), /* @__PURE__ */ React21__default.default.createElement("h3", { className: `font-['Poppins',sans-serif] font-semibold text-[14px] mb-1.5 ${isSelected ? "text-white" : "text-secondary"}` }, category.name), /* @__PURE__ */ React21__default.default.createElement("p", { className: `font-['Poppins',sans-serif] text-[11px] ${isSelected ? "text-white/80" : "text-muted"}` }, category.description))
8518
+ ));
8519
+ })))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative pb-16 mt-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-8 lg:flex-row" }, /* @__PURE__ */ React21__default.default.createElement("aside", { className: "hidden w-72 flex-shrink-0 lg:block" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "sticky top-24 rounded-lg bg-white" }, renderFiltersPanel())), /* @__PURE__ */ React21__default.default.createElement("main", { className: "flex-1 space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-gray-100 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-base font-medium text-gray-700" }, isLoading ? "Loading products..." : `${displayedProducts.length} products found`)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-3 md:flex-row md:items-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowUpDown, { className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" }), /* @__PURE__ */ React21__default.default.createElement(
8272
8520
  "select",
8273
8521
  {
8274
8522
  value: sortOption,
8275
8523
  onChange: (event) => {
8276
8524
  setSortOption(event.target.value);
8277
8525
  },
8278
- className: "appearance-none rounded-xl border border-gray-200 bg-white py-2.5 pl-10 pr-9 text-sm font-medium text-gray-700 shadow-sm transition focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-500/30"
8526
+ className: "appearance-none rounded-full border border-gray-200 bg-white py-2.5 pl-10 pr-9 text-sm font-medium text-gray-700 shadow-sm transition focus:outline-none focus:ring-1 focus:ring-secondary focus:border-primary"
8279
8527
  },
8280
8528
  /* @__PURE__ */ React21__default.default.createElement("option", { value: "featured" }, "Featured products"),
8281
8529
  /* @__PURE__ */ React21__default.default.createElement("option", { value: "price-low-high" }, "Price: low to high"),
8282
8530
  /* @__PURE__ */ React21__default.default.createElement("option", { value: "price-high-low" }, "Price: high to low"),
8283
8531
  /* @__PURE__ */ React21__default.default.createElement("option", { value: "newest" }, "Newest arrivals")
8284
- ), /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: "pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center rounded-xl border border-gray-200 bg-white shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement(
8532
+ ), /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: "pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center rounded-full border border-gray-200 bg-gray-100 shadow-sm p-1" }, /* @__PURE__ */ React21__default.default.createElement(
8285
8533
  "button",
8286
8534
  {
8287
8535
  type: "button",
8288
8536
  onClick: () => setViewMode("grid"),
8289
- className: `flex items-center gap-2 rounded-l-xl px-4 py-2 text-sm font-medium transition ${viewMode === "grid" ? "bg-primary-50 text-primary-600" : "text-gray-500 hover:text-gray-700"}`,
8537
+ className: `flex items-center gap-2 rounded-full px-4 py-2 text-sm font-medium transition ${viewMode === "grid" ? "bg-white text-primary shadow-md" : "text-gray-500 hover:text-gray-700"}`,
8290
8538
  "aria-pressed": viewMode === "grid"
8291
8539
  },
8292
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.LayoutGrid, { className: "h-4 w-4" }),
8293
- "Grid"
8540
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.LayoutGrid, { className: "h-4 w-4" })
8294
8541
  ), /* @__PURE__ */ React21__default.default.createElement(
8295
8542
  "button",
8296
8543
  {
8297
8544
  type: "button",
8298
8545
  onClick: () => setViewMode("list"),
8299
- className: `flex items-center gap-2 rounded-r-xl px-4 py-2 text-sm font-medium transition ${viewMode === "list" ? "bg-primary-50 text-primary-600" : "text-gray-500 hover:text-gray-700"}`,
8546
+ className: `flex items-center gap-2 rounded-full px-4 py-2 text-sm font-medium transition ${viewMode === "list" ? "bg-white text-primary shadow-md" : "text-gray-500 hover:text-gray-700"}`,
8300
8547
  "aria-pressed": viewMode === "list"
8301
8548
  },
8302
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.LayoutList, { className: "h-4 w-4" }),
8303
- "List"
8304
- )))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4 md:hidden" }, /* @__PURE__ */ React21__default.default.createElement(
8305
- Button,
8306
- {
8307
- variant: "outline",
8308
- className: "w-full",
8309
- onClick: () => setShowFilters(true)
8310
- },
8311
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.SlidersHorizontal, { className: "h-5 w-5" }),
8312
- "Filters",
8313
- hasActiveFilters && /* @__PURE__ */ React21__default.default.createElement("span", { className: "ml-2 rounded-full bg-primary-600 px-2 py-0.5 text-xs font-semibold text-white" }, activeFilterChips.length)
8314
- )), hasActiveFilters && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 flex flex-wrap items-center gap-2 border-t border-gray-100 pt-4" }, activeFilterChips.map((chip) => /* @__PURE__ */ React21__default.default.createElement(
8549
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.LayoutList, { className: "h-4 w-4" })
8550
+ )))), hasActiveFilters && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 flex flex-wrap items-center gap-2 border-t border-gray-100 pt-4" }, activeFilterChips.map((chip) => /* @__PURE__ */ React21__default.default.createElement(
8315
8551
  "button",
8316
8552
  {
8317
8553
  key: chip.key,
@@ -8350,7 +8586,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8350
8586
  onClick: () => router.push(buildPath(`/products/${product._id}`))
8351
8587
  },
8352
8588
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative h-48 w-full overflow-hidden rounded-2xl bg-gray-100 md:h-40 md:w-40" }, /* @__PURE__ */ React21__default.default.createElement(
8353
- Image3__default.default,
8589
+ Image4__default.default,
8354
8590
  {
8355
8591
  src: product.productMedia[0]?.file || "/placeholder-product.jpg",
8356
8592
  alt: product.name,
@@ -8366,14 +8602,14 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8366
8602
  },
8367
8603
  tag
8368
8604
  ))), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-xl font-semibold text-gray-900" }, product.name), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-4 text-sm text-gray-500" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 font-medium text-primary-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "h-4 w-4" }), product.inventoryCount > 0 ? "In stock & ready to ship" : "Restocking soon"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Clock, { className: "h-4 w-4 text-primary-500" }), "Added ", new Date(product.createdAt).toLocaleDateString()))),
8369
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex w-full flex-col items-end gap-3 md:w-auto" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-3xl font-semibold text-gray-900" }, formatPrice(product.finalPrice)), product.priceBeforeDiscount && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-400 line-through" }, formatPrice(product.priceBeforeDiscount))), /* @__PURE__ */ React21__default.default.createElement(
8370
- Button,
8605
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex w-full flex-col items-end gap-3 md:w-auto" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-3xl font-semibold text-gray-900" }, formatPrice(product.finalPrice)), product.isDiscounted && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-400 line-through" }, formatPrice(product.priceBeforeDiscount))), /* @__PURE__ */ React21__default.default.createElement(
8606
+ "button",
8371
8607
  {
8372
- size: "sm",
8373
8608
  onClick: (event) => {
8374
8609
  event.stopPropagation();
8375
8610
  router.push(buildPath(`/products/${product._id}`));
8376
- }
8611
+ },
8612
+ className: "w-full font-['Poppins',sans-serif] font-medium text-sm px-3 py-2 rounded-xl bg-secondary text-white hover:opacity-80 hover:shadow-lg transition-all duration-300 flex items-center justify-center gap-1.5 disabled:opacity-50 disabled:cursor-not-allowed"
8377
8613
  },
8378
8614
  "View product"
8379
8615
  ))
@@ -8403,50 +8639,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8403
8639
  disabled: page === pagination.totalPages
8404
8640
  },
8405
8641
  "Next"
8406
- ))))))), /* @__PURE__ */ React21__default.default.createElement(framerMotion.AnimatePresence, null, showFilters && /* @__PURE__ */ React21__default.default.createElement(
8407
- framerMotion.motion.div,
8408
- {
8409
- initial: { opacity: 0 },
8410
- animate: { opacity: 1 },
8411
- exit: { opacity: 0 },
8412
- className: "fixed inset-0 z-50 bg-black/40 backdrop-blur-sm lg:hidden"
8413
- },
8414
- /* @__PURE__ */ React21__default.default.createElement(
8415
- framerMotion.motion.div,
8416
- {
8417
- initial: { y: "100%" },
8418
- animate: { y: 0 },
8419
- exit: { y: "100%" },
8420
- transition: { type: "spring", stiffness: 260, damping: 26 },
8421
- className: "absolute inset-x-0 bottom-0 max-h-[85vh] overflow-y-auto rounded-t-3xl bg-white p-6 shadow-2xl"
8422
- },
8423
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6 flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Filters"), /* @__PURE__ */ React21__default.default.createElement(
8424
- "button",
8425
- {
8426
- type: "button",
8427
- onClick: () => setShowFilters(false),
8428
- className: "rounded-full border border-gray-200 p-2 text-gray-500 hover:text-gray-700"
8429
- },
8430
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.X, { className: "h-4 w-4" })
8431
- )),
8432
- renderFiltersPanel()
8433
- )
8434
- )));
8435
- }
8436
- function Badge({ children, variant = "primary", size = "md", className = "" }) {
8437
- const variants = {
8438
- primary: "bg-primary-100 text-primary-700 border-primary-200",
8439
- secondary: "bg-secondary-100 text-secondary-700 border-secondary-200",
8440
- success: "bg-green-100 text-green-700 border-green-200",
8441
- warning: "bg-yellow-100 text-yellow-700 border-yellow-200",
8442
- danger: "bg-red-100 text-red-700 border-red-200",
8443
- gray: "bg-gray-100 text-gray-700 border-gray-200"
8444
- };
8445
- const sizes = {
8446
- sm: "px-2 py-1 text-xs",
8447
- md: "px-3 py-1 text-sm"
8448
- };
8449
- return /* @__PURE__ */ React21__default.default.createElement("span", { className: `inline-flex items-center font-medium rounded-full border ${variants[variant]} ${sizes[size]} ${className}` }, children);
8642
+ ))))))));
8450
8643
  }
8451
8644
  var safeFormatDate = (date, format = "long") => {
8452
8645
  if (!date) return "N/A";
@@ -8463,6 +8656,7 @@ function ProductDetailScreen({ productId }) {
8463
8656
  const { buildPath } = useBasePath();
8464
8657
  const { product: productData, isLoading } = useProduct(productId);
8465
8658
  const { addToCart } = useCart();
8659
+ const notification = useNotification();
8466
8660
  const [selectedVariant, setSelectedVariant] = React21.useState(null);
8467
8661
  const [quantity, setQuantity] = React21.useState(1);
8468
8662
  const [isAddingToCart, setIsAddingToCart] = React21.useState(false);
@@ -8470,10 +8664,14 @@ function ProductDetailScreen({ productId }) {
8470
8664
  const [relatedProducts, setRelatedProducts] = React21.useState([]);
8471
8665
  const [initialProductData, setInitialProductData] = React21.useState(null);
8472
8666
  const [activeImageIndex, setActiveImageIndex] = React21.useState(0);
8667
+ const [activeTab, setActiveTab] = React21.useState("description");
8473
8668
  React21.useEffect(() => {
8474
8669
  setActiveImageIndex(0);
8475
8670
  }, [selectedVariant]);
8476
8671
  const product = React21.useMemo(() => {
8672
+ console.log("productData", productData);
8673
+ console.log("selectedVariant", selectedVariant);
8674
+ console.log("initialProductData", initialProductData);
8477
8675
  if (initialProductData && !productData) {
8478
8676
  return initialProductData;
8479
8677
  }
@@ -8528,12 +8726,11 @@ function ProductDetailScreen({ productId }) {
8528
8726
  const variantImages = getVariantImages();
8529
8727
  const variantPrice = selectedVariant?.finalPrice || currentVariant?.finalPrice || product?.price || 0;
8530
8728
  const variantComparePrice = selectedVariant?.retailPrice || (currentVariant && "retailPrice" in currentVariant ? currentVariant.retailPrice : null) || product?.compareAtPrice;
8531
- const discount = variantComparePrice && variantPrice && variantComparePrice > variantPrice ? Math.round((variantComparePrice - variantPrice) / variantComparePrice * 100) : 0;
8532
8729
  const lastUpdatedLabel = safeFormatDate(
8533
8730
  currentVariant && "updatedAt" in currentVariant && currentVariant.updatedAt ? currentVariant.updatedAt : product?.updatedAt
8534
8731
  );
8535
- const variantSku = currentVariant?.sku || product?.sku || "N/A";
8536
- const variantInStock = currentVariant?.inventoryCount > 0;
8732
+ currentVariant?.sku || product?.sku || "N/A";
8733
+ currentVariant?.inventoryCount > 0;
8537
8734
  React21.useEffect(() => {
8538
8735
  if (typeof window === "undefined") return;
8539
8736
  const searchParams = new URLSearchParams(window.location.search);
@@ -8584,12 +8781,16 @@ function ProductDetailScreen({ productId }) {
8584
8781
  quantity,
8585
8782
  selectedVariant.id
8586
8783
  );
8587
- sonner.toast.success("Added to cart", {
8588
- description: `${quantity} \xD7 ${product.name}${selectedVariant.name ? ` (${selectedVariant.name})` : ""}`
8589
- });
8784
+ notification.success(
8785
+ "Added to cart",
8786
+ `${quantity} \xD7 ${product.name}${selectedVariant.name ? ` (${selectedVariant.name})` : ""} added to your cart.`
8787
+ );
8590
8788
  } catch (error) {
8591
8789
  console.error("Failed to add to cart", error);
8592
- sonner.toast.error("Could not add to cart. Please try again.");
8790
+ notification.error(
8791
+ "Could not add to cart",
8792
+ "Something went wrong while adding this item. Please try again."
8793
+ );
8593
8794
  } finally {
8594
8795
  setIsAddingToCart(false);
8595
8796
  }
@@ -8605,33 +8806,41 @@ function ProductDetailScreen({ productId }) {
8605
8806
  try {
8606
8807
  if (isFavorited) {
8607
8808
  await removeFromWishlist(product.id);
8608
- sonner.toast.info("Removed from saved items");
8809
+ notification.info(
8810
+ "Removed from saved items",
8811
+ `${product.name} was removed from your saved items.`
8812
+ );
8609
8813
  } else {
8610
8814
  await addToWishlist(product);
8611
- sonner.toast.success("Saved to your favorites");
8815
+ notification.success(
8816
+ "Saved to favorites",
8817
+ `${product.name} was added to your favorites.`
8818
+ );
8612
8819
  }
8613
8820
  setIsFavorited(!isFavorited);
8614
8821
  } catch (error) {
8615
8822
  console.error("Error updating wishlist:", error);
8616
- sonner.toast.error("Failed to update wishlist");
8823
+ notification.error(
8824
+ "Could not update favorites",
8825
+ "We could not update your favorites. Please try again."
8826
+ );
8617
8827
  }
8618
8828
  };
8619
8829
  if (isLoading) {
8620
8830
  return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-[520px] animate-pulse rounded-3xl bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-3 gap-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement("div", { key: index, className: "h-32 animate-pulse rounded-2xl bg-slate-200" })))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4 rounded-3xl bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-8 w-32 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-10 w-48 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-6 w-full animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" })))));
8621
8831
  }
8622
8832
  if (!product) {
8623
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl bg-white p-10 text-center shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "mx-auto h-10 w-10 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "mt-6 text-2xl font-semibold text-gray-900" }, "Product not found"), /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React21__default.default.createElement(Link8__default.default, { href: "/shop", className: "inline-block" }, /* @__PURE__ */ React21__default.default.createElement(Button, null, "Browse products"))))));
8833
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl bg-white p-10 text-center shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "mx-auto h-10 w-10 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "mt-6 text-2xl font-semibold text-gray-900" }, "Product not found"), /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React21__default.default.createElement(Link7__default.default, { href: "/shop", className: "inline-block" }, /* @__PURE__ */ React21__default.default.createElement(Button, null, "Browse products"))))));
8624
8834
  }
8625
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-white max-w-7xl mx-auto" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative pb-20 pt-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement(
8626
- Button,
8835
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-white" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-gray-50 border-b border-gray-200 py-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "max-w-[1400px] mx-auto px-8 md:px-12" }, /* @__PURE__ */ React21__default.default.createElement(
8836
+ "button",
8627
8837
  {
8628
- variant: "ghost",
8629
- className: "text-slate-600 hover:text-slate-900 hover:bg-slate-100",
8630
- onClick: () => router.push(buildPath("/shop"))
8838
+ onClick: () => router.push(buildPath("/shop")),
8839
+ className: "flex items-center gap-2 font-['Poppins',sans-serif] text-[13px] text-muted hover:text-primary transition-colors"
8631
8840
  },
8632
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowLeft, { className: "h-4 w-4 mr-2" }),
8841
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronLeft, { className: "size-4" }),
8633
8842
  "Back to Shop"
8634
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,50fr)_minmax(0,50fr)]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-10" }, /* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl " }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__default.default.createElement(
8843
+ ))), /* @__PURE__ */ React21__default.default.createElement("section", { className: "py-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative pb-20 pt-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,50fr)_minmax(0,50fr)]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-10" }, /* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl " }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__default.default.createElement(
8635
8844
  framerMotion.motion.div,
8636
8845
  {
8637
8846
  key: selectedVariant?.id || "default",
@@ -8641,7 +8850,7 @@ function ProductDetailScreen({ productId }) {
8641
8850
  className: "relative overflow-hidden rounded-3xl bg-slate-100 h-[420px] md:h-[560px]"
8642
8851
  },
8643
8852
  variantImages.length > 0 && variantImages[activeImageIndex] ? /* @__PURE__ */ React21__default.default.createElement(
8644
- Image3__default.default,
8853
+ Image4__default.default,
8645
8854
  {
8646
8855
  src: variantImages[activeImageIndex].src || variantImages[activeImageIndex].url || variantImages[activeImageIndex].file,
8647
8856
  alt: currentVariant.name || product.name,
@@ -8651,7 +8860,7 @@ function ProductDetailScreen({ productId }) {
8651
8860
  className: "object-contain"
8652
8861
  }
8653
8862
  ) : product?.productMedia?.[0]?.file ? /* @__PURE__ */ React21__default.default.createElement(
8654
- Image3__default.default,
8863
+ Image4__default.default,
8655
8864
  {
8656
8865
  src: product.productMedia[0].file,
8657
8866
  alt: product.name,
@@ -8661,34 +8870,17 @@ function ProductDetailScreen({ productId }) {
8661
8870
  className: "object-contain"
8662
8871
  }
8663
8872
  ) : null,
8664
- discount > 0 && /* @__PURE__ */ React21__default.default.createElement(
8665
- Badge,
8666
- {
8667
- variant: "danger",
8668
- className: "absolute left-6 top-6 shadow-lg shadow-red-500/20"
8669
- },
8670
- "Save ",
8671
- discount,
8672
- "%"
8673
- ),
8674
- !variantInStock && /* @__PURE__ */ React21__default.default.createElement(
8675
- Badge,
8676
- {
8677
- variant: "secondary",
8678
- className: "absolute right-6 top-6 bg-white/90 text-slate-700 shadow-lg border-slate-200"
8679
- },
8680
- "Out of Stock"
8681
- )
8873
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute top-6 left-6 flex flex-col gap-3" }, product.salePrice && /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-[#E67E50] text-white rounded-full px-4 py-2" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-bold text-[12px] uppercase tracking-wide" }, "Save ", product.discount, "%")))
8682
8874
  ), variantImages.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-8 gap-2" }, variantImages.map((image, index) => /* @__PURE__ */ React21__default.default.createElement(
8683
8875
  "button",
8684
8876
  {
8685
8877
  key: image.src + index,
8686
8878
  type: "button",
8687
8879
  onClick: () => setActiveImageIndex(index),
8688
- className: `relative aspect-square overflow-hidden rounded-lg border-2 transition-all ${activeImageIndex === index ? "border-primary-500 ring-2 ring-primary-200 ring-offset-2 shadow-md" : "border-slate-200 hover:border-primary-300"}`
8880
+ className: `relative aspect-square overflow-hidden rounded-lg border-2 transition-all ${activeImageIndex === index ? "border-primary/50 ring-2 ring-primary/80 ring-offset-2 shadow-md" : "border-slate-200 hover:border-primary/50"}`
8689
8881
  },
8690
8882
  /* @__PURE__ */ React21__default.default.createElement(
8691
- Image3__default.default,
8883
+ Image4__default.default,
8692
8884
  {
8693
8885
  src: image?.src,
8694
8886
  alt: image.alt || `Product image ${index + 1}`,
@@ -8698,7 +8890,13 @@ function ProductDetailScreen({ productId }) {
8698
8890
  unoptimized: true
8699
8891
  }
8700
8892
  )
8701
- )))))), /* @__PURE__ */ React21__default.default.createElement("aside", { className: "space-y-6 lg:sticky lg:top-24" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "" }, product.parentCategories && product.parentCategories.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-4 text-sm text-slate-600" }, product.parentCategories.map((cat, index) => /* @__PURE__ */ React21__default.default.createElement("span", { key: cat.id || index }, cat.name, index < product.parentCategories.length - 1 && " \u2022 ")), product.parentSubCategories && product.parentSubCategories.length > 0 && /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, " \u2022 ", product.parentSubCategories.map((subCat, index) => /* @__PURE__ */ React21__default.default.createElement("span", { key: subCat.id || index }, subCat.name, index < product.parentSubCategories.length - 1 && " \u2022 ")))), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-2xl font-bold text-slate-900 mb-6" }, product.name), product?.productVariants && product.productVariants.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement("label", { className: "block text-sm font-medium text-slate-700 mb-3" }, "Select Variant"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, product.productVariants.map((variant) => {
8893
+ )))))), /* @__PURE__ */ React21__default.default.createElement("aside", { className: "space-y-6 lg:sticky lg:top-24" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[12px] text-primary uppercase tracking-wide font-medium mb-2" }, product.brand, " \u2022 ", product.parentCategories?.[0].name), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-3xl font-['Poppins',sans-serif] font-semibold text-secondary tracking-[-1.5px] mb-3" }, product.name), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-1" }, [...Array(5)].map((_, i) => /* @__PURE__ */ React21__default.default.createElement(
8894
+ lucideReact.Star,
8895
+ {
8896
+ key: i,
8897
+ className: `size-4 ${i < Math.floor(product.rating) ? "text-[#E67E50] fill-[#E67E50]" : "text-gray-300"}`
8898
+ }
8899
+ ))), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] text-[14px] text-muted" }, product.rating, " (", product.reviewCount ? product.reviewCount : 0, " reviews)")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3 mb-6 pb-6 border-b-2 border-gray-100" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-bold text-[40px] text-[#E67E50]" }, selectedVariant ? formatPrice(selectedVariant.finalPrice) : formatPrice(product.finalPrice || product.price || 0)), variantComparePrice && variantComparePrice > variantPrice && /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] text-[24px] text-muted line-through" }, "$", product.price.toFixed(2)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "px-3 py-1 rounded-full bg-[#E67E50]/10" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-semibold text-[13px] text-[#E67E50]" }, "Save $", formatPrice(variantComparePrice))))), selectedVariant && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2 mb-2" }, selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ || selectedVariant.inventoryStatus === "LOW_STOCK" /* LOWSTOCK */ ? /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "size-3 rounded-full bg-red-500" }), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] text-[13px] text-red-600 font-medium" }, "Out of Stock")) : selectedVariant.inventoryCount <= 10 ? /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "size-3 rounded-full bg-orange-500 animate-pulse" }), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] text-[13px] text-orange-600 font-medium" }, "Only ", selectedVariant.inventoryCount, " left in stock - Order soon!")) : /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "size-3 rounded-full bg-green-500" }), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] text-[13px] text-green-600 font-medium" }, "In Stock"))), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[12px] text-muted" }, "SKU: ", selectedVariant?.sku)), product.description && /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[14px] text-muted leading-[1.7] mb-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { dangerouslySetInnerHTML: { __html: product.description } })), product?.productVariants && product.productVariants.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "font-['Poppins',sans-serif] font-semibold text-[14px] text-secondary mb-3" }, "Select Variant"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-3" }, product.productVariants.map((variant) => {
8702
8900
  const isSelected = selectedVariant?.id === variant.id;
8703
8901
  const variantImage = variant.productMedia?.[0]?.file || product.productMedia?.[0]?.file || product.images?.[0] || "/placeholder-product.jpg";
8704
8902
  return /* @__PURE__ */ React21__default.default.createElement(
@@ -8707,10 +8905,10 @@ function ProductDetailScreen({ productId }) {
8707
8905
  key: variant.id,
8708
8906
  type: "button",
8709
8907
  onClick: () => handleVariantSelect(variant),
8710
- className: `flex w-full items-center gap-3 rounded-lg border-2 px-4 py-3 text-left transition ${isSelected ? "border-primary-500 bg-primary-50" : "border-slate-200 bg-white hover:border-primary-300"}`
8908
+ className: `flex items-start gap-3 px-4 py-2.5 rounded-xl border-2 transition-all ${isSelected ? "border-primary bg-primary/5" : "border-gray-200 hover:border-primary/50"}`
8711
8909
  },
8712
- /* @__PURE__ */ React21__default.default.createElement("div", { className: `relative h-12 w-12 flex-shrink-0 overflow-hidden rounded-full border-2 ${isSelected ? "border-primary-500" : "border-slate-200"}` }, /* @__PURE__ */ React21__default.default.createElement(
8713
- Image3__default.default,
8910
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: `relative h-12 w-12 flex-shrink-0 overflow-hidden rounded-full border-2 ${isSelected ? "border-primary" : "border-slate-200"}` }, /* @__PURE__ */ React21__default.default.createElement(
8911
+ Image4__default.default,
8714
8912
  {
8715
8913
  src: variantImage,
8716
8914
  alt: variant.name || "Variant image",
@@ -8719,60 +8917,53 @@ function ProductDetailScreen({ productId }) {
8719
8917
  sizes: "48px"
8720
8918
  }
8721
8919
  )),
8722
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: `text-sm font-medium ${isSelected ? "text-primary-700" : "text-slate-900"}` }, variant.name), variant.sku && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-slate-500 mt-0.5" }, "SKU: ", variant.sku)),
8723
- isSelected && /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "h-5 w-5 text-primary-600 flex-shrink-0" })
8920
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: `text-start text-sm font-medium ${isSelected ? "text-secondary" : "text-slate-900"}` }, variant.name), variant.sku && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-start text-xs text-slate-500 mt-0.5" }, "SKU: ", variant.sku)),
8921
+ isSelected && /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "h-5 w-5 text-secondary flex-shrink-0" })
8724
8922
  );
8725
- }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-baseline gap-3 mb-6" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-3xl font-bold text-orange-600" }, selectedVariant ? formatPrice(selectedVariant.finalPrice) : formatPrice(product.finalPrice || product.price || 0)), variantComparePrice && variantComparePrice > variantPrice && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-base text-slate-400 line-through" }, formatPrice(variantComparePrice)), discount > 0 && /* @__PURE__ */ React21__default.default.createElement(Badge, { variant: "danger", size: "sm" }, "-", discount, "%")), selectedVariant && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-4 text-sm" }, selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ || selectedVariant.inventoryStatus === "LOW_STOCK" /* LOWSTOCK */ ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-red-600 font-medium" }, "Out of Stock") : /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-orange-600 font-medium" }, "Only ", selectedVariant.inventoryCount || product.inventoryCount || 0, " left in stock - Order soon!")), variantSku !== "N/A" && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-4 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-medium" }, "SKU:"), " ", variantSku), product.description && /* @__PURE__ */ React21__default.default.createElement("p", { className: "mb-6 text-sm text-slate-600" }, product.description.replace(/<[^>]*>/g, "").substring(0, 150), product.description.length > 150 && "..."), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement("label", { className: "block text-sm font-medium text-slate-700 mb-2" }, "Quantity"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center rounded-lg border border-slate-200 bg-white" }, /* @__PURE__ */ React21__default.default.createElement(
8923
+ }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-8" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "font-['Poppins',sans-serif] font-semibold text-[14px] text-secondary mb-3" }, "Quantity"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-4 bg-gray-100 rounded-full px-6 py-3" }, /* @__PURE__ */ React21__default.default.createElement(
8726
8924
  "button",
8727
8925
  {
8728
8926
  type: "button",
8729
8927
  onClick: () => setQuantity((current) => Math.max(1, current - 1)),
8730
- className: "px-3 py-2 hover:bg-slate-50",
8731
- "aria-label": "Decrease quantity"
8928
+ className: "font-['Poppins',sans-serif] font-bold text-[18px] text-secondary hover:text-primary transition-colors",
8929
+ "aria-label": "Increase quantity"
8732
8930
  },
8733
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Minus, { className: "h-4 w-4 text-slate-600" })
8734
- ), /* @__PURE__ */ React21__default.default.createElement("span", { className: "w-12 text-center text-sm font-semibold text-slate-900" }, quantity), /* @__PURE__ */ React21__default.default.createElement(
8931
+ "-"
8932
+ ), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-semibold text-[16px] text-secondary min-w-[30px] text-center" }, quantity), /* @__PURE__ */ React21__default.default.createElement(
8735
8933
  "button",
8736
8934
  {
8737
- type: "button",
8738
- onClick: () => setQuantity((current) => {
8739
- const maxQty = selectedVariant?.inventoryCount || product.inventoryCount || 999;
8740
- return Math.min(maxQty, current + 1);
8741
- }),
8742
- className: "px-3 py-2 hover:bg-slate-50",
8743
- "aria-label": "Increase quantity"
8935
+ onClick: () => setQuantity(Math.min(selectedVariant?.inventoryCount || product.inventoryCount || 999, quantity + 1)),
8936
+ disabled: quantity >= (selectedVariant?.inventoryCount || product.inventoryCount || 0),
8937
+ className: "font-['Poppins',sans-serif] font-bold text-[18px] text-secondary hover:text-primary transition-colors disabled:opacity-50"
8744
8938
  },
8745
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Plus, { className: "h-4 w-4 text-slate-600" })
8746
- )), selectedVariant && /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm text-slate-500" }, selectedVariant.inventoryCount || product.inventoryCount || 0, " available"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React21__default.default.createElement(
8747
- Button,
8939
+ "+"
8940
+ )), selectedVariant && /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm text-slate-500" }, selectedVariant.inventoryCount || product.inventoryCount || 0, " available"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col sm:flex-row gap-3 mb-8" }, /* @__PURE__ */ React21__default.default.createElement(
8941
+ "button",
8748
8942
  {
8749
- size: "md",
8750
- className: "w-full bg-orange-500 hover:bg-orange-600 text-white py-2.5",
8943
+ className: "flex-1 font-['Poppins',sans-serif] font-medium text-[14px] px-8 py-4 rounded-full transition-all duration-300 flex items-center justify-center gap-3 bg-[#E67E50] text-white hover:bg-[#d66f45] hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed",
8751
8944
  onClick: handleAddToCart,
8752
- isLoading: isAddingToCart,
8753
8945
  disabled: !selectedVariant || selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */
8754
8946
  },
8755
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingCart, { className: "h-4 w-4" }),
8756
- !selectedVariant ? "Select a variant" : selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ ? "Out of Stock" : "Add to Cart"
8947
+ isAddingToCart ? /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("svg", { className: "animate-spin h-5 w-5", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "aria-hidden": "true" }, /* @__PURE__ */ React21__default.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ React21__default.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })), "Loading...") : /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingCart, { className: "h-4 w-4" }), !selectedVariant ? "Select a variant" : selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ ? "Out of Stock" : "Add to Cart")
8757
8948
  ), /* @__PURE__ */ React21__default.default.createElement(
8758
- Button,
8949
+ "button",
8759
8950
  {
8760
- size: "md",
8761
- variant: "outline",
8762
- className: "w-full py-2.5",
8951
+ className: "sm:w-auto px-6 py-4 rounded-full border-2 border-primary hover:bg-primary/5 transition-all flex items-center justify-center",
8763
8952
  onClick: handleToggleFavorite
8764
8953
  },
8765
- /* @__PURE__ */ React21__default.default.createElement(
8766
- lucideReact.Heart,
8767
- {
8768
- className: `h-4 w-4 mr-2 ${isFavorited ? "fill-red-500 text-red-500" : "text-slate-500"}`
8769
- }
8770
- ),
8771
- isFavorited ? "Saved" : "Save for later"
8772
- ))), /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("p", { className: "font-semibold uppercase tracking-[0.25em]" }, "Need advice?"), /* @__PURE__ */ React21__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.")))), /* @__PURE__ */ React21__default.default.createElement("section", { className: "mt-10" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-4 pb-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-1 text-amber-500" }, Array.from({ length: 5 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(lucideReact.Star, { key: index, className: "h-4 w-4 fill-current" }))), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm font-medium text-slate-500" }, "Rated 4.8 \u2022 Patients love the results")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-8" }, product.description && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, "Description"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-base leading-relaxed text-slate-600", dangerouslySetInnerHTML: { __html: product.description } }))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/60 p-5 mt-10" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text- font-semibold uppercase tracking-[0.3em] text-slate-500" }, "Product details"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-3 space-y-2 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("p", null, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-medium text-slate-700" }, "Variant:"), " ", currentVariant.name), /* @__PURE__ */ React21__default.default.createElement("p", null, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-medium text-slate-700" }, "SKU:"), " ", variantSku), /* @__PURE__ */ React21__default.default.createElement("p", null, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-medium text-slate-700" }, "Status:"), " ", /* @__PURE__ */ React21__default.default.createElement("span", { className: variantInStock ? "text-green-600" : "text-amber-600" }, variantInStock ? "In Stock" : "Out of Stock")), /* @__PURE__ */ React21__default.default.createElement("p", null, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-medium text-slate-700" }, "Last updated:"), " ", lastUpdatedLabel), /* @__PURE__ */ React21__default.default.createElement("p", null, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-medium text-slate-700" }, "Ships from:"), " Local pharmacy distribution center"))), relatedProducts.length > 0 && /* @__PURE__ */ React21__default.default.createElement("section", { className: "mt-20" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "You may also like"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Hand-picked recommendations that pair nicely with this product.")), /* @__PURE__ */ React21__default.default.createElement(Link8__default.default, { href: buildPath("/shop"), className: "hidden md:inline-flex" }, /* @__PURE__ */ React21__default.default.createElement(Button, { variant: "ghost", className: "text-primary-600" }, "View all products"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5" }, relatedProducts?.map((relatedProduct) => /* @__PURE__ */ React21__default.default.createElement(
8954
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: `h-4 w-4 ${isFavorited ? "fill-red-500 text-red-500" : "text-primary"}` })
8955
+ ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4 p-6 bg-gradient-to-br from-[#5B9BD5]/5 to-[#2B4B7C]/5 rounded-[24px]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "size-10 rounded-full bg-white flex items-center justify-center shrink-0" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "size-5 text-primary" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] font-semibold text-[12px] text-secondary mb-1" }, "Free Shipping"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[11px] text-muted" }, "On all orders"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "size-10 rounded-full bg-white flex items-center justify-center shrink-0" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.RotateCcw, { className: "size-5 text-primary" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] font-semibold text-[12px] text-secondary mb-1" }, "Easy Returns"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[11px] text-muted" }, "30-day return policy"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "size-10 rounded-full bg-white flex items-center justify-center shrink-0" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Shield, { className: "size-5 text-primary" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] font-semibold text-[12px] text-secondary mb-1" }, "Secure Checkout"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[11px] text-muted" }, "Safe & protected"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "size-10 rounded-full bg-white flex items-center justify-center shrink-0" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Package, { className: "size-5 text-primary" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] font-semibold text-[12px] text-secondary mb-1" }, "Quality Guaranteed"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[11px] text-muted" }, "Premium materials")))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2 mb-8 border-b-2 border-gray-100" }, ["description", "reviews"].map((tab) => /* @__PURE__ */ React21__default.default.createElement(
8956
+ "button",
8957
+ {
8958
+ key: tab,
8959
+ onClick: () => setActiveTab(tab),
8960
+ className: `font-['Poppins',sans-serif] font-medium text-[14px] px-6 py-4 transition-all ${activeTab === tab ? "text-primary border-b-2 border-primary -mb-0.5" : "text-muted hover:text-primary"}`
8961
+ },
8962
+ tab.charAt(0).toUpperCase() + tab.slice(1)
8963
+ ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white rounded-[24px] p-8 border-2 border-gray-100" }, activeTab === "description" && /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "font-['Poppins',sans-serif] font-semibold text-secondary mb-4" }, "Product Description"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[14px] text-muted leading-[1.8] mb-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { dangerouslySetInnerHTML: { __html: product.description } })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "font-['Poppins',sans-serif] font-semibold text-[13px] text-secondary mb-3" }, "Last updated:"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[14px] text-muted" }, lastUpdatedLabel)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "font-['Poppins',sans-serif] font-semibold text-[13px] text-secondary mb-3" }, "Shipped from:"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[14px] text-muted" }, "Local pharmacy distribution center"))), activeTab === "reviews" && /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-center py-8" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Star, { className: "size-12 text-[#E67E50] mx-auto mb-4" }), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "font-['Poppins',sans-serif] font-semibold text-secondary mb-2" }, product.rating, " out of 5 stars"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[14px] text-muted" }, "Based on ", product.reviewCount, " customer reviews")))), relatedProducts.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "font-['Poppins',sans-serif] font-semibold text-secondary mb-8 text-2xl" }, "You May Also Like"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6" }, relatedProducts.map((relatedProduct) => /* @__PURE__ */ React21__default.default.createElement(
8773
8964
  ProductCard,
8774
8965
  {
8775
- key: relatedProduct.id || relatedProduct._id,
8966
+ key: relatedProduct.id,
8776
8967
  product: relatedProduct,
8777
8968
  onClickProduct: (item) => {
8778
8969
  router.push(buildPath(`/products/${item._id || item.id}`));
@@ -8813,70 +9004,71 @@ function CartItem({ item }) {
8813
9004
  initial: { opacity: 0, y: 20 },
8814
9005
  animate: { opacity: 1, y: 0 },
8815
9006
  exit: { opacity: 0, x: -100 },
8816
- className: "relative bg-white rounded-lg shadow-sm border border-gray-200 p-4"
9007
+ className: "bg-white border-2 border-gray-100 rounded-[24px] p-6 hover:border-[#5B9BD5]/30 transition-all duration-300"
8817
9008
  },
8818
- /* @__PURE__ */ React21__default.default.createElement(
9009
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex gap-4 pr-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-28 h-28 rounded-[16px] overflow-hidden bg-gray-50 shrink-0" }, /* @__PURE__ */ React21__default.default.createElement(
9010
+ Image4__default.default,
9011
+ {
9012
+ src: item.productVariantData.productMedia[0]?.file || "/placeholder-product.jpg",
9013
+ alt: item.productVariantData.name,
9014
+ className: "w-full h-full object-cover",
9015
+ height: 112,
9016
+ width: 112
9017
+ }
9018
+ )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start justify-between gap-4 mb-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "font-['Poppins',sans-serif] font-semibold text-[#2B4B7C] mb-2" }, item.productVariantData.name), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] text-[12px] text-[#676c80]" }, "Variant: ", /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-medium text-[#2B4B7C]" }, item.productVariantData.name)))), /* @__PURE__ */ React21__default.default.createElement(
8819
9019
  "button",
8820
9020
  {
8821
9021
  onClick: handleRemove,
8822
- className: "absolute top-4 right-4 p-1 text-gray-400 hover:text-red-600 transition-colors",
9022
+ className: "p-2 hover:bg-red-50 rounded-full transition-colors group",
8823
9023
  "aria-label": "Remove item"
8824
9024
  },
8825
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Trash2, { className: "w-5 h-5" })
8826
- ),
8827
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex gap-4 pr-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-20 h-24 rounded-md overflow-hidden flex-shrink-0 bg-gray-100" }, /* @__PURE__ */ React21__default.default.createElement(
8828
- Image3__default.default,
8829
- {
8830
- src: item.productVariantData.productMedia[0]?.file || "/placeholder-product.jpg",
8831
- alt: item.productVariantData.name,
8832
- fill: true,
8833
- className: "object-cover",
8834
- sizes: "80px"
8835
- }
8836
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-base font-bold text-gray-900" }, item.productVariantData.name), attributes.length > 0 && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500 mt-1" }, attributes.join(" ")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2 mt-3" }, /* @__PURE__ */ React21__default.default.createElement(
9025
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.Trash2, { className: "size-5 text-[#676c80] group-hover:text-red-500 transition-colors" })
9026
+ )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3 bg-gray-50 rounded-full px-4 py-2" }, /* @__PURE__ */ React21__default.default.createElement(
8837
9027
  "button",
8838
9028
  {
8839
9029
  onClick: () => handleUpdateQuantity(item.quantity - 1),
8840
9030
  disabled: isUpdating || item.quantity <= 1,
8841
- className: "p-1 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors rounded"
9031
+ className: "p-1 hover:bg-white rounded-full transition-colors"
8842
9032
  },
8843
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Minus, { className: "w-4 h-4 text-gray-600" })
8844
- ), /* @__PURE__ */ React21__default.default.createElement("span", { className: "px-3 font-medium min-w-[2rem] text-center text-gray-900" }, isUpdating ? /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-block h-4 w-4 align-middle animate-spin rounded-full border-2 border-gray-300 border-t-gray-600" }) : item.quantity), /* @__PURE__ */ React21__default.default.createElement(
9033
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.Minus, { className: "size-4 text-[#2B4B7C]" })
9034
+ ), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-semibold text-[14px] text-[#2B4B7C] min-w-[20px] text-center" }, item.quantity), /* @__PURE__ */ React21__default.default.createElement(
8845
9035
  "button",
8846
9036
  {
8847
9037
  onClick: () => handleUpdateQuantity(item.quantity + 1),
8848
9038
  disabled: isUpdating || item.quantity >= (item.productVariantData.inventoryCount || 999),
8849
- className: "p-1 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors rounded"
9039
+ className: "p-1 hover:bg-white rounded-full transition-colors"
8850
9040
  },
8851
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Plus, { className: "w-4 h-4 text-gray-600" })
8852
- ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right flex-shrink-0" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-lg font-bold text-orange-600" }, formatPrice(itemTotal)), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500 mt-1" }, formatPrice(unitPrice), " each")))
9041
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.Plus, { className: "size-4 text-[#2B4B7C]" })
9042
+ )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] font-bold text-[18px] text-[#E67E50]" }, formatPrice(itemTotal)), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[11px] text-[#676c80]" }, formatPrice(unitPrice), " each")))))
8853
9043
  );
8854
9044
  }
8855
9045
  function CartScreen() {
8856
9046
  const router = navigation.useRouter();
8857
9047
  const { cart, isLoading } = useCart();
8858
9048
  const { buildPath } = useBasePath();
9049
+ const { isAuthenticated, user } = useAuth();
9050
+ const notification = useNotification();
8859
9051
  if (!cart || cart.cartBody.items.length === 0) {
8860
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-white max-w-6xl mx-auto" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-2xl font-bold text-slate-900" }, "Shopping Cart"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500 mt-1" }, "0 items in your cart")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col items-center justify-center py-20" }, /* @__PURE__ */ React21__default.default.createElement(
9052
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-white max-w-6xl mx-auto" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col items-center justify-center py-20" }, /* @__PURE__ */ React21__default.default.createElement(
8861
9053
  framerMotion.motion.div,
8862
9054
  {
8863
9055
  initial: { opacity: 0, y: 24 },
8864
9056
  animate: { opacity: 1, y: 0 },
8865
9057
  className: "text-center space-y-6 max-w-md"
8866
9058
  },
8867
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-full bg-gray-100 p-6" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingBag, { className: "h-12 w-12 text-gray-400" }))),
8868
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-bold text-slate-900" }, "Your cart is empty"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-gray-500" }, "Start adding products to your cart to see them here.")),
9059
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-full bg-gray-100 p-6" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingBag, { className: "h-12 w-12 text-secondary" }))),
9060
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-bold text-secondary" }, "Your cart is empty"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted" }, "Start adding products to your cart to see them here.")),
8869
9061
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-3 justify-center" }, /* @__PURE__ */ React21__default.default.createElement(
8870
9062
  "button",
8871
9063
  {
8872
9064
  type: "button",
8873
9065
  onClick: () => router.push(buildPath("/shop")),
8874
- className: "rounded-full border-2 border-primary-500 bg-primary-500 hover:bg-primary-600 text-white px-6 py-3 text-sm font-medium transition-colors flex items-center justify-center gap-2"
9066
+ className: "rounded-xl border-2 border-primary bg-primary text-white px-6 py-3 text-sm font-medium transition-colors flex items-center justify-center gap-2 hover:opacity-80"
8875
9067
  },
8876
9068
  "Discover products",
8877
9069
  /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowRight, { className: "h-5 w-5" })
8878
9070
  )),
8879
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-8 space-y-3 pt-6 border-t border-gray-200" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-primary-600 flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Free shipping on all orders")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-primary-600 flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Easy returns within 30 days")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-primary-600 flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Secure checkout process")))
9071
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-8 space-y-3 pt-6 border-t border-gray-200" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-secondary flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Free shipping on all orders")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-secondary flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Easy returns within 30 days")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-secondary flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Secure checkout process")))
8880
9072
  )))));
8881
9073
  }
8882
9074
  const subtotal = cart.total;
@@ -8884,12 +9076,23 @@ function CartScreen() {
8884
9076
  const tax = 0;
8885
9077
  const total = subtotal + shipping + tax;
8886
9078
  const itemCount = cart.cartBody.items.length;
8887
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-white max-w-6xl mx-auto" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-2xl font-bold text-slate-900" }, "Shopping Cart"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500 mt-1" }, itemCount, " ", itemCount === 1 ? "item" : "items", " in your cart")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-8 lg:grid-cols-[1.5fr_1fr]" }, /* @__PURE__ */ React21__default.default.createElement(
9079
+ const handleSubmit = async (e) => {
9080
+ if (!isAuthenticated) {
9081
+ notification.error(
9082
+ "Sign-in required",
9083
+ "Please log in to complete your checkout."
9084
+ );
9085
+ setTimeout(() => router.push(buildPath("/login?redirect=/checkout")), 50);
9086
+ return;
9087
+ }
9088
+ router.push(buildPath("/checkout"));
9089
+ };
9090
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-white" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "max-w-[1400px] mx-auto px-8 md:px-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-12" }, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "font-['Poppins',sans-serif] font-semibold text-secondary tracking-[-2px] mb-2 text-4xl" }, "Shopping Cart"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[16px] text-muted" }, itemCount, " ", itemCount === 1 ? "item" : "items", " in your cart")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-8" }, /* @__PURE__ */ React21__default.default.createElement(
8888
9091
  framerMotion.motion.section,
8889
9092
  {
8890
9093
  initial: { opacity: 0, y: 24 },
8891
9094
  animate: { opacity: 1, y: 0 },
8892
- className: "space-y-6"
9095
+ className: "space-y-6 lg:col-span-2"
8893
9096
  },
8894
9097
  isLoading && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2 rounded-xl border border-slate-200 bg-white px-4 py-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-slate-300 border-t-slate-600" }), "Updating cart\u2026"),
8895
9098
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, cart.cartBody.items.map((item) => /* @__PURE__ */ React21__default.default.createElement(CartItem, { key: item.productVariantId, item })))
@@ -8899,13 +9102,13 @@ function CartScreen() {
8899
9102
  initial: { opacity: 0, y: 24 },
8900
9103
  animate: { opacity: 1, y: 0 },
8901
9104
  transition: { delay: 0.1 },
8902
- className: "space-y-6 lg:sticky lg:top-8 h-fit"
9105
+ className: "space-y-6 lg:sticky lg:top-24 h-fit lg:col-span-1"
8903
9106
  },
8904
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-xl border-2 border-primary-200 bg-white p-6 shadow-md" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-xl font-bold text-slate-900 mb-6" }, "Order Summary"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4 mb-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between text-sm" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-gray-600" }, "Subtotal (", itemCount, " ", itemCount === 1 ? "item" : "items", ")"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold text-slate-900" }, formatPrice(subtotal))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between text-sm" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-gray-600" }, "Shipping"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold text-green-600" }, "Will be calculated at checkout")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "border-t border-gray-200 pt-4 mt-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-lg font-bold text-slate-900" }, "Total"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-2xl font-bold text-orange-600" }, formatPrice(total))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement(
9107
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-gradient-to-br from-[#5B9BD5]/10 to-[#2B4B7C]/10 rounded-[24px] p-8 border-2 border-[#5B9BD5]/20 sticky top-24" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "font-['Poppins',sans-serif] font-semibold text-secondary mb-6" }, "Order Summary"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4 mb-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] text-[14px] text-muted" }, "Subtotal (", itemCount, " ", itemCount === 1 ? "item" : "items", ")"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-semibold text-[14px] text-secondary" }, formatPrice(subtotal))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between text-sm" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-gray-600" }, "Shipping"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold text-green-600" }, "Will be calculated at checkout")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "border-t border-gray-200 pt-4 mt-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-lg font-bold text-secondary" }, "Total"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-2xl font-bold text-orange-600" }, formatPrice(total))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement(
8905
9108
  "button",
8906
9109
  {
8907
- type: "button",
8908
- onClick: () => router.push(buildPath("/checkout")),
9110
+ type: "submit",
9111
+ onClick: handleSubmit,
8909
9112
  className: "w-full rounded-full border-2 border-primary-500 bg-primary-500 hover:bg-primary-600 text-white px-4 py-3 text-sm font-medium transition-colors flex items-center justify-center gap-2"
8910
9113
  },
8911
9114
  "Proceed to Checkout",
@@ -8915,11 +9118,10 @@ function CartScreen() {
8915
9118
  {
8916
9119
  type: "button",
8917
9120
  onClick: () => router.push(buildPath("/shop")),
8918
- className: "w-full rounded-full border-2 border-primary-300 bg-white px-4 py-3 text-sm font-medium text-slate-700 hover:bg-gray-50 transition-colors"
9121
+ className: "w-full rounded-full border-2 border-muted bg-white px-4 py-3 text-sm font-medium text-slate-700 hover:bg-gray-50 transition-colors"
8919
9122
  },
8920
9123
  "Continue Shopping"
8921
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 space-y-3 pt-6 border-t border-gray-200" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-primary-600 flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Easy returns within 30 days")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-primary-600 flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Secure checkout process")))),
8922
- /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Need help?"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-2 leading-relaxed" }, "Chat with a pharmacist to optimize your regimen or discuss substitutions before you check out."))
9124
+ )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 space-y-3 pt-6 border-t border-gray-200" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-muted flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Easy returns within 30 days")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-muted flex-shrink-0 mt-0.5" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Secure checkout process"))))
8923
9125
  )))));
8924
9126
  }
8925
9127
  function useAddresses() {
@@ -8980,15 +9182,6 @@ function useAddresses() {
8980
9182
  markAsDefault
8981
9183
  };
8982
9184
  }
8983
- function Card({ className = "", ...props }) {
8984
- return /* @__PURE__ */ React21__default.default.createElement(
8985
- "div",
8986
- {
8987
- className: `rounded-lg border bg-white shadow-sm ${className}`,
8988
- ...props
8989
- }
8990
- );
8991
- }
8992
9185
  function Modal({ isOpen, onClose, title, children, size = "md" }) {
8993
9186
  React21.useEffect(() => {
8994
9187
  if (typeof window === "undefined") return;
@@ -9045,8 +9238,11 @@ var addressSchema = zod.z.object({
9045
9238
  country: zod.z.string().min(2, "Country is required"),
9046
9239
  phone: zod.z.string().min(10, "Phone number is required")
9047
9240
  });
9241
+
9242
+ // src/components/AddressFormModal.tsx
9048
9243
  function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, initialAddress }) {
9049
9244
  const [isSubmitting, setIsSubmitting] = React21.useState(false);
9245
+ const notification = useNotification();
9050
9246
  const {
9051
9247
  register,
9052
9248
  handleSubmit,
@@ -9092,7 +9288,10 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
9092
9288
  country: data.country,
9093
9289
  phone: data.phone
9094
9290
  }, initialAddress.id);
9095
- sonner.toast.success("Address updated successfully");
9291
+ notification.success(
9292
+ "Address updated",
9293
+ "Your address has been updated successfully."
9294
+ );
9096
9295
  reset();
9097
9296
  onClose();
9098
9297
  if (onAddressUpdated) onAddressUpdated(response.data);
@@ -9108,16 +9307,25 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
9108
9307
  phone: data.phone
9109
9308
  });
9110
9309
  if (response.status === 201) {
9111
- sonner.toast.success("Address added successfully");
9310
+ notification.success(
9311
+ "Address added",
9312
+ "Your new address has been saved to your account."
9313
+ );
9112
9314
  reset();
9113
9315
  onClose();
9114
9316
  if (onAddressAdded) onAddressAdded(response.data);
9115
9317
  } else {
9116
- sonner.toast.error("Failed to add address");
9318
+ notification.error(
9319
+ "Could not add address",
9320
+ "We could not save this address. Please try again."
9321
+ );
9117
9322
  }
9118
9323
  }
9119
9324
  } catch (error) {
9120
- sonner.toast.error("Failed to add address");
9325
+ notification.error(
9326
+ "Could not save address",
9327
+ "Something went wrong while saving your address. Please try again."
9328
+ );
9121
9329
  } finally {
9122
9330
  setIsSubmitting(false);
9123
9331
  }
@@ -9194,14 +9402,14 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
9194
9402
  error: errors.country?.message
9195
9403
  }
9196
9404
  )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-end gap-4" }, /* @__PURE__ */ React21__default.default.createElement(
9197
- Button,
9405
+ "button",
9198
9406
  {
9199
9407
  type: "button",
9200
- variant: "outline",
9201
- onClick: onClose
9408
+ onClick: onClose,
9409
+ className: "flex flex-row items-center gap-2 px-6 py-2 border border-slate-200 rounded-xl text-slate-700 hover:opacity-80 transition-colors text-secondary text-sm"
9202
9410
  },
9203
9411
  "Cancel"
9204
- ), /* @__PURE__ */ React21__default.default.createElement(Button, { type: "submit", disabled: isSubmitting }, isSubmitting ? "Adding Address..." : "Add Address")))
9412
+ ), /* @__PURE__ */ React21__default.default.createElement("button", { type: "submit", disabled: isSubmitting, className: "flex flex-row items-center gap-2 px-6 py-2 border border-slate-200 rounded-xl text-slate-700 hover:opacity-80 transition-colors bg-secondary text-white text-sm" }, isSubmitting ? "Adding Address..." : "Add Address")))
9205
9413
  );
9206
9414
  }
9207
9415
  var checkoutSchema = zod.z.object({
@@ -9250,6 +9458,7 @@ function CheckoutScreen() {
9250
9458
  const [isAddressModalOpen, setIsAddressModalOpen] = React21.useState(false);
9251
9459
  const [editingAddress, setEditingAddress] = React21.useState(null);
9252
9460
  const [shippingPrice, setShippingPrice] = React21.useState(0);
9461
+ const notification = useNotification();
9253
9462
  const {
9254
9463
  addresses: userAddresses,
9255
9464
  defaultAddress
@@ -9379,7 +9588,10 @@ function CheckoutScreen() {
9379
9588
  const onSubmit = async (data) => {
9380
9589
  setError(null);
9381
9590
  if (!isAuthenticated) {
9382
- sonner.toast.error("Please login to continue");
9591
+ notification.error(
9592
+ "Sign-in required",
9593
+ "Please log in to complete your checkout."
9594
+ );
9383
9595
  setTimeout(() => router.push(buildPath("/login?redirect=/checkout")), 50);
9384
9596
  return;
9385
9597
  }
@@ -9431,7 +9643,10 @@ function CheckoutScreen() {
9431
9643
  }
9432
9644
  }
9433
9645
  setIsSubmitting(true);
9434
- sonner.toast("Submitting order...", { icon: /* @__PURE__ */ React21__default.default.createElement(lucideReact.CreditCard, { className: "h-4 w-4" }) });
9646
+ notification.info(
9647
+ "Submitting order",
9648
+ "We are processing your order and preparing your payment options."
9649
+ );
9435
9650
  try {
9436
9651
  const items = (cart?.cartBody?.items || []).map((item) => ({
9437
9652
  productVariantId: String(item.productVariantId),
@@ -9463,7 +9678,10 @@ function CheckoutScreen() {
9463
9678
  );
9464
9679
  if (response?.data?.payment && response.data.payment.hostedInvoiceUrl === "INSUFFICIENT_CREDIT") {
9465
9680
  setError("You have insufficient credit to complete this order.");
9466
- sonner.toast.error("You have insufficient credit to complete this order.");
9681
+ notification.error(
9682
+ "Insufficient credit",
9683
+ "You do not have enough credit to complete this order."
9684
+ );
9467
9685
  return;
9468
9686
  }
9469
9687
  if (paymentMethod === "Card") {
@@ -9482,21 +9700,33 @@ function CheckoutScreen() {
9482
9700
  } else if (!paymentUrl) {
9483
9701
  console.error("No payment URL received in response:", response.data);
9484
9702
  setError("Failed to initiate payment. Please try again or contact support.");
9485
- sonner.toast.error("Failed to initiate payment");
9703
+ notification.error(
9704
+ "Payment setup failed",
9705
+ "We could not start the payment flow. Please try again or contact support."
9706
+ );
9486
9707
  return;
9487
9708
  }
9488
- sonner.toast.success("Order placed successfully!");
9709
+ notification.success(
9710
+ "Order placed",
9711
+ "Your order has been placed successfully. You will be redirected to payment."
9712
+ );
9489
9713
  await clearCart();
9490
9714
  router.push(buildPath(`/orders/${response.data?.id}`));
9491
9715
  } else {
9492
- sonner.toast.success("Order placed successfully!");
9716
+ notification.success(
9717
+ "Order placed",
9718
+ "Your order has been placed successfully."
9719
+ );
9493
9720
  await clearCart();
9494
9721
  router.push(buildPath(`/orders/${response.data?.id}`));
9495
9722
  }
9496
9723
  } catch (err) {
9497
9724
  const msg = err?.message || err?.response?.data?.message || "Failed to place order";
9498
9725
  setError(msg);
9499
- sonner.toast.error(msg);
9726
+ notification.error(
9727
+ "Could not place order",
9728
+ msg
9729
+ );
9500
9730
  } finally {
9501
9731
  setIsSubmitting(false);
9502
9732
  }
@@ -9508,14 +9738,15 @@ function CheckoutScreen() {
9508
9738
  const subtotal = cart.total;
9509
9739
  const tax = 0;
9510
9740
  const total = subtotal + shippingPrice + tax;
9511
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50 mb-16" }, /* @__PURE__ */ React21__default.default.createElement("form", { onSubmit: handleSubmit(onSubmit) }, error && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-4 text-red-600 font-semibold" }, error), /* @__PURE__ */ React21__default.default.createElement("div", { className: "pt-12 container mx-auto grid gap-10 px-4 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21__default.default.createElement(
9741
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-white pb-16" }, /* @__PURE__ */ React21__default.default.createElement("form", { onSubmit: handleSubmit(onSubmit) }, error && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-4 text-red-600 font-semibold" }, error), /* @__PURE__ */ React21__default.default.createElement("div", { className: "pt-12 container mx-auto grid gap-10 px-4 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21__default.default.createElement(
9512
9742
  framerMotion.motion.div,
9513
9743
  {
9514
9744
  initial: { opacity: 0, y: 24 },
9515
9745
  animate: { opacity: 1, y: 0 },
9516
9746
  className: "space-y-8"
9517
9747
  },
9518
- /* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Shipping information"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, "We use temperature-aware packaging and real-time tracking on every shipment.")), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-primary-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-primary-700" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "h-4 w-4" }), "Dispatch in 12h")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 grid grid-cols-1 gap-4 md:grid-cols-2" }, isDelivery && /* @__PURE__ */ React21__default.default.createElement("div", { className: "md:col-span-2 space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("label", { className: "block font-semibold" }, "Select Address"), /* @__PURE__ */ React21__default.default.createElement(
9748
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-12" }, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "font-['Poppins',sans-serif] font-semibold text-[#2B4B7C] mb-2 text-3xl" }, "Checkout"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[14px] text-[#676c80] text-md leading-relaxed" }, "Complete your order information below")),
9749
+ /* @__PURE__ */ React21__default.default.createElement("section", { className: "bg-white border-2 border-gray-100 rounded-[24px] p-8 text-[#2B4B7C]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "font-['Poppins',sans-serif] font-semibold text-[#2B4B7C] mb-2 text-2xl" }, "Contact Information"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, "We use temperature-aware packaging and real-time tracking on every shipment.")), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-primary-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-primary-700" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "h-4 w-4" }), "Dispatch in 12h")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 grid grid-cols-1 gap-4 md:grid-cols-2" }, isDelivery && /* @__PURE__ */ React21__default.default.createElement("div", { className: "md:col-span-2 space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("label", { className: "block font-semibold" }, "Select Address"), /* @__PURE__ */ React21__default.default.createElement(
9519
9750
  Button,
9520
9751
  {
9521
9752
  type: "button",
@@ -9579,9 +9810,9 @@ function CheckoutScreen() {
9579
9810
  try {
9580
9811
  await removeAddress(addr.id);
9581
9812
  if (selectedAddressId === addr.id) setSelectedAddressId(null);
9582
- sonner.toast.success("Address deleted");
9813
+ notification.success("Address deleted");
9583
9814
  } catch (e2) {
9584
- sonner.toast.error("Failed to delete address");
9815
+ notification.error("Failed to delete address");
9585
9816
  }
9586
9817
  },
9587
9818
  className: "inline-flex items-center gap-1 rounded-full border border-red-200 px-2.5 py-0.5 text-xs font-semibold text-red-600 hover:border-red-300 hover:text-red-700"
@@ -9598,7 +9829,7 @@ function CheckoutScreen() {
9598
9829
  },
9599
9830
  storeAddresses.map((addr) => /* @__PURE__ */ React21__default.default.createElement("option", { key: addr.id, value: addr.id }, addr.name, " - ", addr.street1, ", ", addr.city))
9600
9831
  )))),
9601
- isDelivery && selectedAddressId && /* @__PURE__ */ React21__default.default.createElement(Card, { className: "p-6 border border-gray-200 rounded-xl shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3 text-xl font-semibold text-gray-900 pb-4 mb-6 border-b" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "text-accent w-6 h-6" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Shipping Options")), shippingRatesLoading ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-center py-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-accent" }), /* @__PURE__ */ React21__default.default.createElement("span", { className: "ml-3 text-gray-600" }, "Loading shipping options...")) : shippingRatesError ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-red-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement("svg", { className: "w-8 h-8 text-red-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }))), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-red-500 text-lg font-medium" }, "Error loading shipping options"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-red-400 text-sm mt-1" }, shippingRatesError)) : shippingRates && shippingRates.length > 0 ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, shippingRates.map((rate) => {
9832
+ isDelivery && selectedAddressId && /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white border-2 border-gray-100 rounded-[24px] p-8 text-[#2B4B7C]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3 text-xl font-semibold text-gray-900 pb-4 mb-8 border-b" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "text-accent w-8 h-8 flex items-center justify-center text-[#2B4B7C]" }), /* @__PURE__ */ React21__default.default.createElement("h2", { className: "font-['Poppins',sans-serif] font-semibold text-[#2B4B7C] text-2xl" }, "Shipping Options")), shippingRatesLoading ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-center py-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-accent" }), /* @__PURE__ */ React21__default.default.createElement("span", { className: "ml-3 text-gray-600" }, "Loading shipping options...")) : shippingRatesError ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-red-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement("svg", { className: "w-8 h-8 text-red-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }))), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-red-500 text-lg font-medium" }, "Error loading shipping options"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-red-400 text-sm mt-1" }, shippingRatesError)) : shippingRates && shippingRates.length > 0 ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, shippingRates.map((rate) => {
9602
9833
  const isSelected = !!selectedShippingRateId && selectedShippingRateId === rate.objectId;
9603
9834
  const isTest = rate.test;
9604
9835
  const hasAttributes = rate.attributes && rate.attributes.length > 0;
@@ -9613,7 +9844,7 @@ function CheckoutScreen() {
9613
9844
  className: `relative p-5 border-2 rounded-xl cursor-pointer transition-all duration-200 hover:shadow-md ${isSelected ? "border-primary-500 bg-primary-50 ring-2 ring-primary-200" : "border-gray-200 hover:border-gray-300"}`
9614
9845
  },
9615
9846
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-4 flex-1" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React21__default.default.createElement(
9616
- Image3__default.default,
9847
+ Image4__default.default,
9617
9848
  {
9618
9849
  src: rate.providerImage75 || "/placeholder-product.jpg",
9619
9850
  alt: rate.provider,
@@ -9635,16 +9866,8 @@ function CheckoutScreen() {
9635
9866
  ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-1 text-sm text-gray-600" }, rate.durationTerms && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" })), /* @__PURE__ */ React21__default.default.createElement("span", null, rate.durationTerms)), rate.estimatedDays && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" })), /* @__PURE__ */ React21__default.default.createElement("span", null, "Estimated ", rate.estimatedDays, " day", rate.estimatedDays !== 1 ? "s" : "")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M9 5H7a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" })), /* @__PURE__ */ React21__default.default.createElement("span", null, "Carrier: ", rate.provider)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1" })), /* @__PURE__ */ React21__default.default.createElement("span", null, "Currency: ", rate.currency))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col items-end" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-2xl font-bold text-gray-900" }, formatPrice(parseFloat(rate.amount))), rate.amount !== rate.amountLocal && /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-sm text-gray-500" }, rate.amountLocal, " ", rate.currencyLocal))),
9636
9867
  isSelected && /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute top-3 right-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-6 h-6 bg-primary-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "w-4 h-4 text-white" })))
9637
9868
  );
9638
- })) : /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-gray-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "w-8 h-8 text-gray-400" })), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-gray-500 text-lg font-medium" }, "No shipping options available"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-gray-400 text-sm mt-1" }, "Please check the shipping address or try a different location.")))
9639
- ), /* @__PURE__ */ React21__default.default.createElement(
9640
- framerMotion.motion.aside,
9641
- {
9642
- initial: { opacity: 0, y: 32 },
9643
- animate: { opacity: 1, y: 0 },
9644
- transition: { duration: 0.5, ease: "easeOut", delay: 0.1 },
9645
- className: "space-y-10 lg:sticky lg:top-24"
9646
- },
9647
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-xl shadow-primary-50/50 transition hover:shadow-primary-100/60" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "Order Summary"), /* @__PURE__ */ React21__default.default.createElement("section", { className: "mt-6 space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-xs font-semibold text-slate-700 uppercase tracking-wider" }, "Delivery Method"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 gap-3" }, [
9869
+ })) : /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-gray-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "w-8 h-8 text-gray-400" })), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-gray-500 text-lg font-medium" }, "No shipping options available"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-gray-400 text-sm mt-1" }, "Please check the shipping address or try a different location."))),
9870
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white border-2 border-gray-100 rounded-[24px] p-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3 mb-6" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "w-8 h-8 text-[#2B4B7C]" }), /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-semibold text-[#2B4B7C]" }, "Delivery Method")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 gap-3" }, [
9648
9871
  {
9649
9872
  label: "Delivery",
9650
9873
  icon: /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "w-5 h-5" }),
@@ -9664,20 +9887,25 @@ function CheckoutScreen() {
9664
9887
  {
9665
9888
  key: option.label,
9666
9889
  type: "button",
9667
- onClick: () => setIsDelivery(option.value),
9668
- "aria-pressed": active,
9669
- className: `relative flex w-full items-center justify-between rounded-xl border-2 p-3 transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-400 focus-visible:ring-offset-2 ${active ? "border-primary-500 bg-primary-50 shadow-sm" : "border-slate-200 bg-white hover:border-primary-200 hover:bg-primary-50/40"}`
9890
+ onClick: () => {
9891
+ setIsDelivery(option.value);
9892
+ if (option.value) {
9893
+ setSelectedShippingRateId(null);
9894
+ setShippingPrice(0);
9895
+ }
9896
+ },
9897
+ className: `relative flex w-full items-center justify-between rounded-xl border-2 p-4 transition-all duration-200 ${active ? "border-primary-500 bg-primary-50" : "border-gray-200 hover:border-primary-300"}`
9670
9898
  },
9671
9899
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(
9672
9900
  "div",
9673
9901
  {
9674
- className: `p-2 rounded-lg ${active ? "bg-primary-100 text-primary-600" : "bg-slate-100 text-slate-600 group-hover:bg-slate-50"}`
9902
+ className: `p-2 rounded-lg ${active ? "bg-primary-100 text-primary-600" : "bg-gray-100 text-gray-600"}`
9675
9903
  },
9676
9904
  option.icon
9677
- ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-left" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "font-medium text-slate-900" }, option.label), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-slate-500" }, option.desc))),
9678
- active && /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-5 h-5 rounded-full bg-primary-500 flex items-center justify-center text-white shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "w-3 h-3" }))
9905
+ ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-left" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "font-medium text-gray-900" }, option.label), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500" }, option.desc))),
9906
+ active && /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-5 h-5 rounded-full bg-primary-500 flex items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "w-3 h-3 text-white" }))
9679
9907
  );
9680
- }))), /* @__PURE__ */ React21__default.default.createElement("section", { className: "mt-8 space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-xs font-semibold text-slate-700 uppercase tracking-wider" }, "Payment Method"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, PAYMENT_METHODS.map((pm) => {
9908
+ }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white border-2 border-gray-100 rounded-[24px] p-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3 mb-6" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CreditCard, { className: "w-8 h-8 text-[#2B4B7C]" }), /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-semibold text-[#2B4B7C]" }, "Payment Method")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 md:grid-cols-3" }, PAYMENT_METHODS.map((pm) => {
9681
9909
  const active = paymentMethod === pm.value;
9682
9910
  return /* @__PURE__ */ React21__default.default.createElement(
9683
9911
  "button",
@@ -9685,47 +9913,46 @@ function CheckoutScreen() {
9685
9913
  key: pm.value,
9686
9914
  type: "button",
9687
9915
  onClick: () => setPaymentMethod(pm.value),
9688
- className: `w-full flex items-center justify-between rounded-xl border-2 p-3 transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ${active ? `${pm.activeClass} border-current shadow-sm` : `${pm.className} border-slate-200 hover:border-primary-200 hover:shadow-sm`}`
9916
+ className: `
9917
+ group relative flex w-full items-center justify-between rounded-xl border-2 p-3
9918
+ transition-all duration-200 ease-out
9919
+ focus:outline-none f
9920
+ ${active ? `${pm.activeClass} shadow-md scale-[1.02]` : `${pm.className} border-gray-200 bg-white hover:shadow-sm hover:-translate-y-0.5`}
9921
+ `
9689
9922
  },
9690
9923
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(
9691
9924
  "div",
9692
9925
  {
9693
- className: `p-1.5 rounded-md ${pm.value === "Card" ? "bg-blue-100 text-blue-600" : pm.value === "Cash" ? "bg-amber-100 text-amber-600" : "bg-emerald-100 text-emerald-600"} ${active ? "bg-opacity-30" : "bg-opacity-100"}`
9926
+ className: `
9927
+ flex items-center justify-center rounded-lg p-2
9928
+ transition-colors duration-200
9929
+ ${pm.value === "Card" ? " text-blue-600" : pm.value === "Cash" ? " text-amber-600" : " text-emerald-600"}
9930
+ ${active ? "opacity-80" : "group-hover:opacity-90"}
9931
+ `
9694
9932
  },
9695
9933
  pm.icon
9696
- ), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm font-medium text-slate-900" }, pm.label)),
9697
- active && /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-4 h-4 rounded-full bg-primary-500 flex items-center justify-center text-white shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "w-2.5 h-2.5" }))
9934
+ ), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm font-semibold text-gray-900" }, pm.label)),
9935
+ active && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-6 w-6 items-center justify-center rounded-full shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "h-3.5 w-3.5 text-white" }))
9698
9936
  );
9699
- })), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-slate-500 mt-2 pl-1 leading-relaxed" }, paymentMethod === "Card" && "You will be redirected to a secure payment page.", paymentMethod === "Cash" && "Pay with cash at the time of delivery or pickup.", paymentMethod === "Credit" && "Use your available account credit for this order.")), /* @__PURE__ */ React21__default.default.createElement("section", { className: "mt-8 pt-6 border-t border-slate-100" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-xs font-semibold text-slate-700 uppercase tracking-wider" }, "Cart Summary"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "max-h-60 space-y-4 overflow-y-auto pr-2 scrollbar-thin scrollbar-thumb-slate-200 hover:scrollbar-thumb-slate-300" }, cart?.cartBody?.items?.map((item) => /* @__PURE__ */ React21__default.default.createElement(
9700
- "div",
9701
- {
9702
- key: item.productId,
9703
- className: "flex gap-4 rounded-2xl border border-slate-100 p-4 hover:bg-slate-50/50 transition"
9704
- },
9705
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-xl bg-slate-100 text-slate-400" }, /* @__PURE__ */ React21__default.default.createElement(
9706
- Image3__default.default,
9707
- {
9708
- src: item.productVariantData.productMedia?.[0]?.file || "/placeholder-product.jpg",
9709
- alt: item.productVariantData.name,
9710
- width: 64,
9711
- height: 64,
9712
- className: "object-contain"
9713
- }
9714
- )),
9715
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-semibold text-slate-900" }, item?.productVariantData?.name), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-slate-500" }, "Qty ", item.quantity)),
9716
- /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-semibold text-slate-900" }, formatPrice(item.productVariantData.finalPrice * item.quantity))
9717
- ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 space-y-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Subtotal"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold text-slate-900" }, formatPrice(subtotal))), isDelivery && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Shipping"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold" }, formatPrice(shippingPrice))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Estimated tax"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold" }, formatPrice(tax))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between text-base font-semibold text-slate-900" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Total Due"), /* @__PURE__ */ React21__default.default.createElement("span", null, formatPrice(total))), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-1 text-xs text-slate-500" }, "Tax is estimated. Final amount confirmed after payment.")))), /* @__PURE__ */ React21__default.default.createElement(
9937
+ })), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500 mt-4" }, paymentMethod === "Card" && "You will be redirected to a secure payment page.", paymentMethod === "Cash" && "Pay with cash at the time of delivery or pickup.", paymentMethod === "Credit" && "Use your available account credit for this order.")))
9938
+ ), /* @__PURE__ */ React21__default.default.createElement(
9939
+ framerMotion.motion.aside,
9940
+ {
9941
+ initial: { opacity: 0, y: 32 },
9942
+ animate: { opacity: 1, y: 0 },
9943
+ transition: { duration: 0.5, ease: "easeOut", delay: 0.1 },
9944
+ className: "space-y-10 lg:sticky lg:top-24 lg:col-span-1"
9945
+ },
9946
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-gradient-to-br from-[#5B9BD5]/10 to-[#2B4B7C]/10 rounded-[24px] p-8 border-2 border-[#5B9BD5]/20 sticky top-24" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "font-['Poppins',sans-serif] font-semibold text-[#2B4B7C] mb-6 text-2xl" }, "Order Summary"), /* @__PURE__ */ React21__default.default.createElement("section", { className: "mt-8 pt-6 border-t border-slate-100" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4 mb-6" }, cart?.cartBody?.items?.map((item) => /* @__PURE__ */ React21__default.default.createElement("div", { key: `${item.productId}-${item.color}-${item.size}`, className: "flex gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-16 h-16 rounded-xl overflow-hidden bg-white shrink-0" }, /* @__PURE__ */ React21__default.default.createElement(Image4__default.default, { src: item.productVariantData.productMedia?.[0]?.file || "/placeholder-product.jpg", alt: item.productVariantData.name, className: "w-full h-full object-cover", height: 200, width: 200 })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] font-medium text-[12px] text-[#2B4B7C] mb-1" }, item?.productVariantData?.name), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[11px] text-[#676c80]" }, item?.productVariantData?.brand, " \u2022 Qty: ", item.quantity), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] font-semibold text-[12px] text-[#E67E50] mt-1" }, formatPrice(item.productVariantData.finalPrice * item.quantity)))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-px bg-[#5B9BD5]/20 my-4" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-sm text-slate-600 space-y-3 py-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Subtotal"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold text-slate-900" }, formatPrice(subtotal))), isDelivery && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Shipping"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold" }, formatPrice(shippingPrice))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Estimated tax"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold" }, formatPrice(tax))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-px bg-[#5B9BD5]/20 mt-6" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between mb-6" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-semibold text-[16px] text-[#2B4B7C]" }, "Total"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-['Poppins',sans-serif] font-bold text-[24px] text-[#E67E50]" }, formatPrice(total)))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-white/80 rounded-xl p-4" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-['Poppins',sans-serif] text-[11px] text-[#676c80] leading-[1.6]" }, /* @__PURE__ */ React21__default.default.createElement("strong", { className: "text-[#2B4B7C]" }, "Payment:"), " We'll contact you to arrange payment upon pickup or delivery. We accept cash, credit cards, and all major payment methods."))), /* @__PURE__ */ React21__default.default.createElement(
9718
9947
  Button,
9719
9948
  {
9720
9949
  type: "submit",
9721
- size: "lg",
9722
9950
  isLoading: isSubmitting,
9723
- className: "mt-6 w-full transition-transform hover:scale-[1.02] active:scale-[0.99]"
9951
+ className: "font-['Poppins',sans-serif] font-medium text-[14px] px-6 py-2 rounded-full bg-[#E67E50] text-white hover:bg-[#d66f45] hover:shadow-lg transition-all duration-300 mt-4 w-full"
9724
9952
  },
9725
9953
  /* @__PURE__ */ React21__default.default.createElement(lucideReact.CreditCard, { className: "h-5 w-5" }),
9726
9954
  isSubmitting ? "Placing order..." : "Place Secure Order"
9727
- ), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-4 flex items-center justify-center gap-2 text-xs text-slate-500" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Lock, { className: "h-4 w-4" }), "Fully encrypted checkout \u2014 cancel anytime before shipment.")),
9728
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/80 p-6 text-sm text-primary-700 shadow-sm hover:shadow-md transition-shadow" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-semibold uppercase tracking-[0.3em] text-primary-800" }, "Why Patients Choose Us"), /* @__PURE__ */ React21__default.default.createElement("ul", { className: "mt-4 space-y-3 text-primary-700 leading-relaxed" }, /* @__PURE__ */ React21__default.default.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.PackageCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Pharmacy-grade verification on every order.")), /* @__PURE__ */ React21__default.default.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Cold-chain logistics for sensitive medications.")), /* @__PURE__ */ React21__default.default.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Truck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Real-time tracking and SMS updates from prep to delivery."))))
9955
+ ), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-4 flex items-center justify-center gap-2 text-xs text-slate-500" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Lock, { className: "h-4 w-4" }), "Fully encrypted checkout \u2014 cancel anytime before shipment."))
9729
9956
  ))), /* @__PURE__ */ React21__default.default.createElement(
9730
9957
  AddressFormModal,
9731
9958
  {
@@ -9760,9 +9987,12 @@ function LoginScreen() {
9760
9987
  const { buildPath } = useBasePath();
9761
9988
  const searchParams = navigation.useSearchParams();
9762
9989
  const redirectUrl = searchParams?.get("redirect") || buildPath("/");
9763
- const { login } = useAuth();
9990
+ const { login, user, isLoading } = useAuth();
9764
9991
  const [showPassword, setShowPassword] = React21.useState(false);
9765
9992
  const [isSubmitting, setIsSubmitting] = React21.useState(false);
9993
+ const [status, setStatus] = React21.useState(
9994
+ null
9995
+ );
9766
9996
  const {
9767
9997
  register,
9768
9998
  handleSubmit,
@@ -9772,36 +10002,25 @@ function LoginScreen() {
9772
10002
  });
9773
10003
  const onSubmit = async (data) => {
9774
10004
  setIsSubmitting(true);
10005
+ setStatus(null);
9775
10006
  try {
9776
10007
  await login(data);
9777
- sonner.toast.success("Welcome back!");
10008
+ setStatus({ type: "success", message: "Welcome back!" });
9778
10009
  router.push(redirectUrl);
9779
10010
  } catch (error) {
9780
- sonner.toast.error(error.response?.data?.message || "Invalid credentials");
10011
+ setStatus({
10012
+ type: "error",
10013
+ message: error?.response?.data?.message || "Invalid credentials"
10014
+ });
9781
10015
  } finally {
9782
10016
  setIsSubmitting(false);
9783
10017
  }
9784
10018
  };
9785
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid min-h-screen overflow-hidden bg-white lg:grid-cols-[1.1fr_0.9fr]" }, /* @__PURE__ */ React21__default.default.createElement(
9786
- framerMotion.motion.section,
9787
- {
9788
- initial: { opacity: 0, x: -24 },
9789
- animate: { opacity: 1, x: 0 },
9790
- transition: { duration: 0.4 },
9791
- className: "relative flex flex-col justify-between bg-gradient-to-br from-slate-700 via-slate-600 to-slate-700 px-10 py-14 text-white"
9792
- },
9793
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(lucideReact.HeartPulse, { className: "h-4 w-4" }), "Hey Pharmacist"), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Pharmacy-grade care for your household"), /* @__PURE__ */ React21__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.")),
9794
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-white/80" }, "HIPAA-compliant security keeps your health information protected.")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-white/80" }, "Pharmacists ready to chat in under 10 minutes for medication support."))),
9795
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Need an account?"), /* @__PURE__ */ React21__default.default.createElement(
9796
- Link8__default.default,
9797
- {
9798
- href: buildPath("/register"),
9799
- className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2 font-semibold transition hover:bg-white/25"
9800
- },
9801
- "Create one now",
9802
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowRight, { className: "h-4 w-4" })
9803
- ))
9804
- ), /* @__PURE__ */ React21__default.default.createElement(
10019
+ if (!isLoading && user) {
10020
+ router.push(buildPath("/account"));
10021
+ return null;
10022
+ }
10023
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-gradient-to-b from-[#F8FAFC] to-[#EBF4FB]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid min-h-screen overflow-hidden pb-12" }, /* @__PURE__ */ React21__default.default.createElement(
9805
10024
  framerMotion.motion.section,
9806
10025
  {
9807
10026
  initial: { opacity: 0, x: 24 },
@@ -9809,55 +10028,74 @@ function LoginScreen() {
9809
10028
  transition: { duration: 0.4 },
9810
10029
  className: "flex items-center justify-center px-6 py-12 lg:px-16"
9811
10030
  },
9812
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-full max-w-md space-y-10" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-3xl font-bold text-slate-900" }, "Sign in"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, "Welcome back! Enter your details to continue your personalized care plan.")), /* @__PURE__ */ React21__default.default.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement(
9813
- Input,
9814
- {
9815
- type: "email",
9816
- label: "Email address",
9817
- placeholder: "you@example.com",
9818
- ...register("email"),
9819
- error: errors.email?.message
9820
- }
9821
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(
9822
- Input,
9823
- {
9824
- type: showPassword ? "text" : "password",
9825
- label: "Password",
9826
- placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
9827
- ...register("password"),
9828
- error: errors.password?.message
9829
- }
9830
- ), /* @__PURE__ */ React21__default.default.createElement(
9831
- "button",
9832
- {
9833
- type: "button",
9834
- onClick: () => setShowPassword((prev) => !prev),
9835
- className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
9836
- },
9837
- showPassword ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.Eye, { className: "h-5 w-5" })
9838
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between text-sm" }, /* @__PURE__ */ React21__default.default.createElement("label", { className: "flex items-center gap-2 text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(
9839
- "input",
9840
- {
9841
- type: "checkbox",
9842
- className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
9843
- }
9844
- ), "Remember me"), /* @__PURE__ */ React21__default.default.createElement(
9845
- Link8__default.default,
9846
- {
9847
- href: buildPath("/forgot-password"),
9848
- className: "font-medium text-primary-600 transition hover:text-primary-700"
9849
- },
9850
- "Forgot password?"
9851
- )), /* @__PURE__ */ React21__default.default.createElement(
9852
- Button,
10031
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-full max-w-lg space-y-10 text-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Lock, { strokeWidth: 2, className: "h-16 w-16 mx-auto text-white rounded-full bg-secondary m-2 mb-4 px-4" }), /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-4xl text-secondary" }, "Welcome Back"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted" }, "Sign in to access your patient portal")), /* @__PURE__ */ React21__default.default.createElement(
10032
+ "form",
9853
10033
  {
9854
- type: "submit",
9855
- size: "lg",
9856
- isLoading: isSubmitting,
9857
- className: "w-full"
10034
+ onSubmit: handleSubmit(onSubmit),
10035
+ className: "space-y-6 rounded-3xl border bg-white p-8",
10036
+ style: {
10037
+ boxShadow: "0px 4px 6px -4px #0000001A, 0px 10px 15px -3px #0000001A"
10038
+ }
9858
10039
  },
9859
- "Sign in securely"
9860
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-slate-100 bg-slate-50 p-6 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Lock, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-semibold text-slate-800" }, "Secure by design"), /* @__PURE__ */ React21__default.default.createElement("p", null, "Encrypted sessions, multi-factor ready, and privacy-first policies keep your personal data safe.")))))
10040
+ status && /* @__PURE__ */ React21__default.default.createElement(
10041
+ "div",
10042
+ {
10043
+ className: `flex items-start gap-2 rounded-2xl border px-4 py-3 text-sm ${status.type === "success" ? "border-green-200 bg-green-50 text-green-800" : "border-red-200 bg-red-50 text-red-700"}`
10044
+ },
10045
+ /* @__PURE__ */ React21__default.default.createElement("span", { className: "mt-[2px] text-base" }, status.type === "success" ? "\u2714" : "!"),
10046
+ /* @__PURE__ */ React21__default.default.createElement("span", null, status.message)
10047
+ ),
10048
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-start text-secondary" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-sm text-secondary mb-3" }, "Email Address ", /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-primary-500" }, "*")), /* @__PURE__ */ React21__default.default.createElement(
10049
+ Input,
10050
+ {
10051
+ type: "email",
10052
+ placeholder: "you@example.com",
10053
+ ...register("email"),
10054
+ error: errors.email?.message,
10055
+ className: "text-secondary"
10056
+ }
10057
+ )),
10058
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative text-start text-secondary" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-sm text-secondary mb-3" }, "Password ", /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-primary-500" }, "*")), /* @__PURE__ */ React21__default.default.createElement(
10059
+ Input,
10060
+ {
10061
+ type: showPassword ? "text" : "password",
10062
+ placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
10063
+ ...register("password"),
10064
+ error: errors.password?.message
10065
+ }
10066
+ ), /* @__PURE__ */ React21__default.default.createElement(
10067
+ "button",
10068
+ {
10069
+ type: "button",
10070
+ onClick: () => setShowPassword((prev) => !prev),
10071
+ className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
10072
+ },
10073
+ showPassword ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.Eye, { className: "h-5 w-5" })
10074
+ )),
10075
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between text-sm" }, /* @__PURE__ */ React21__default.default.createElement("label", { className: "flex items-center gap-2 text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(
10076
+ "input",
10077
+ {
10078
+ type: "checkbox",
10079
+ className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
10080
+ }
10081
+ ), "Remember me"), /* @__PURE__ */ React21__default.default.createElement(
10082
+ Link7__default.default,
10083
+ {
10084
+ href: buildPath("/forgot-password"),
10085
+ className: "font-medium text-primary transition hover:opacity-80"
10086
+ },
10087
+ "Forgot password?"
10088
+ )),
10089
+ /* @__PURE__ */ React21__default.default.createElement(
10090
+ "button",
10091
+ {
10092
+ type: "submit",
10093
+ disabled: isSubmitting,
10094
+ className: "w-full bg-secondary hover:opacity-80 text-white font-medium py-3 px-4 rounded-lg transition-colors disabled:opacity-70 disabled:cursor-not-allowed"
10095
+ },
10096
+ isSubmitting ? "Signing in..." : "Sign in"
10097
+ )
10098
+ ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted" }, "Don't have an account? ", /* @__PURE__ */ React21__default.default.createElement(Link7__default.default, { href: buildPath("/register"), className: "font-medium text-primary transition hover:opacity-90" }, "Sign up"))))
9861
10099
  )));
9862
10100
  }
9863
10101
  var registerSchema = zod.z.object({
@@ -9871,11 +10109,6 @@ var registerSchema = zod.z.object({
9871
10109
  message: "Passwords don't match",
9872
10110
  path: ["confirmPassword"]
9873
10111
  });
9874
- var BENEFITS = [
9875
- "Personalized care plans from licensed pharmacists",
9876
- "Express delivery with cold-chain handling",
9877
- "Automatic refills and refill reminders"
9878
- ];
9879
10112
  function RegisterScreen() {
9880
10113
  const router = navigation.useRouter();
9881
10114
  const { register: registerUser } = useAuth();
@@ -9883,6 +10116,7 @@ function RegisterScreen() {
9883
10116
  const [showPassword, setShowPassword] = React21.useState(false);
9884
10117
  const [showConfirmPassword, setShowConfirmPassword] = React21.useState(false);
9885
10118
  const [isSubmitting, setIsSubmitting] = React21.useState(false);
10119
+ const notification = useNotification();
9886
10120
  const {
9887
10121
  register,
9888
10122
  handleSubmit,
@@ -9900,33 +10134,21 @@ function RegisterScreen() {
9900
10134
  customerType: "Regular" /* Regular */,
9901
10135
  role: "User" /* User */
9902
10136
  });
9903
- sonner.toast.success("Account created successfully!");
10137
+ notification.success(
10138
+ "Account created",
10139
+ "Your Hey Pharmacist account is ready to use."
10140
+ );
9904
10141
  router.push(buildPath("/"));
9905
10142
  } catch (error) {
9906
- sonner.toast.error(error.response?.data?.message || "Failed to create account");
10143
+ notification.error(
10144
+ "Could not create account",
10145
+ error.response?.data?.message || "Something went wrong while creating your account. Please try again."
10146
+ );
9907
10147
  } finally {
9908
10148
  setIsSubmitting(false);
9909
10149
  }
9910
10150
  };
9911
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid min-h-screen overflow-hidden bg-white lg:grid-cols-[0.95fr_1.05fr]" }, /* @__PURE__ */ React21__default.default.createElement(
9912
- framerMotion.motion.section,
9913
- {
9914
- initial: { opacity: 0, x: -24 },
9915
- animate: { opacity: 1, x: 0 },
9916
- transition: { duration: 0.4 },
9917
- className: "flex flex-col justify-between bg-gradient-to-br from-slate-700 via-slate-600 to-slate-700 px-10 py-14 text-white"
9918
- },
9919
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(lucideReact.HeartPulse, { className: "h-4 w-4" }), "Join Hey Pharmacist"), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Create your wellness account"), /* @__PURE__ */ React21__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.")),
9920
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, BENEFITS.map((benefit) => /* @__PURE__ */ React21__default.default.createElement("div", { key: benefit, className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.CheckCircle2, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-white/85" }, benefit)))),
9921
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Already part of the community?"), /* @__PURE__ */ React21__default.default.createElement(
9922
- Link8__default.default,
9923
- {
9924
- href: buildPath("/login"),
9925
- className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2 font-semibold transition hover:bg-white/25"
9926
- },
9927
- "Sign in"
9928
- ))
9929
- ), /* @__PURE__ */ React21__default.default.createElement(
10151
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-gradient-to-b from-[#F8FAFC] to-[#EBF4FB]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid min-h-screen overflow-hidden pb-12" }, /* @__PURE__ */ React21__default.default.createElement(
9930
10152
  framerMotion.motion.section,
9931
10153
  {
9932
10154
  initial: { opacity: 0, x: 24 },
@@ -9934,54 +10156,52 @@ function RegisterScreen() {
9934
10156
  transition: { duration: 0.4 },
9935
10157
  className: "flex items-center justify-center px-6 py-12 lg:px-16"
9936
10158
  },
9937
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-full max-w-lg space-y-10" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-3xl font-bold text-slate-900" }, "Create an account"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, "Start your personalized care journey with pharmacist-backed guidance.")), /* @__PURE__ */ React21__default.default.createElement(
10159
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "w-full max-w-xl space-y-10 text-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.UserPlus, { strokeWidth: 2, className: "h-16 w-16 mx-auto text-white rounded-full bg-primary m-2 mb-4 px-4" }), /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-4xl text-secondary" }, "Create Your Account"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted" }, "Join Holmdel Pharmacy Care for convenient healthcare access")), /* @__PURE__ */ React21__default.default.createElement(
9938
10160
  "form",
9939
10161
  {
9940
10162
  onSubmit: handleSubmit(onSubmit),
9941
- className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50"
10163
+ className: "text-start space-y-6 rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50",
10164
+ style: {
10165
+ boxShadow: "0px 4px 6px -4px #0000001A, 0px 10px 15px -3px #0000001A"
10166
+ }
9942
10167
  },
9943
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21__default.default.createElement(
10168
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 md:grid-cols-2 text-start" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-sm text-secondary mb-3" }, "First name ", /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-primary-500" }, "*")), /* @__PURE__ */ React21__default.default.createElement(
9944
10169
  Input,
9945
10170
  {
9946
- label: "First name",
9947
10171
  placeholder: "Alex",
9948
10172
  ...register("firstName"),
9949
10173
  error: errors.firstName?.message
9950
10174
  }
9951
- ), /* @__PURE__ */ React21__default.default.createElement(
10175
+ )), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-sm text-secondary mb-3" }, "Last name ", /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-primary-500" }, "*")), /* @__PURE__ */ React21__default.default.createElement(
9952
10176
  Input,
9953
10177
  {
9954
- label: "Last name",
9955
10178
  placeholder: "Morgan",
9956
10179
  ...register("lastName"),
9957
10180
  error: errors.lastName?.message
9958
10181
  }
9959
- )),
9960
- /* @__PURE__ */ React21__default.default.createElement(
10182
+ ))),
10183
+ /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-sm text-secondary mb-3" }, "Email Address ", /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-primary-500" }, "*")), /* @__PURE__ */ React21__default.default.createElement(
9961
10184
  Input,
9962
10185
  {
9963
10186
  type: "email",
9964
- label: "Email address",
9965
10187
  placeholder: "you@example.com",
9966
10188
  ...register("email"),
9967
10189
  error: errors.email?.message
9968
10190
  }
9969
- ),
9970
- /* @__PURE__ */ React21__default.default.createElement(
10191
+ )),
10192
+ /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-sm text-secondary mb-3" }, "Phone Number"), /* @__PURE__ */ React21__default.default.createElement(
9971
10193
  Input,
9972
10194
  {
9973
10195
  type: "tel",
9974
- label: "Phone number (optional)",
9975
10196
  placeholder: "+1 (555) 123-4567",
9976
10197
  ...register("phone"),
9977
10198
  error: errors.phone?.message
9978
10199
  }
9979
- ),
9980
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(
10200
+ )),
10201
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-sm text-secondary mb-3" }, "Password ", /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-primary-500" }, "*")), /* @__PURE__ */ React21__default.default.createElement(
9981
10202
  Input,
9982
10203
  {
9983
10204
  type: showPassword ? "text" : "password",
9984
- label: "Password",
9985
10205
  placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
9986
10206
  ...register("password"),
9987
10207
  error: errors.password?.message
@@ -9995,11 +10215,10 @@ function RegisterScreen() {
9995
10215
  },
9996
10216
  showPassword ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.Eye, { className: "h-5 w-5" })
9997
10217
  )),
9998
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(
10218
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-sm text-secondary mb-3" }, "Confirm Password ", /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-primary-500" }, "*")), /* @__PURE__ */ React21__default.default.createElement(
9999
10219
  Input,
10000
10220
  {
10001
10221
  type: showConfirmPassword ? "text" : "password",
10002
- label: "Confirm password",
10003
10222
  placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
10004
10223
  ...register("confirmPassword"),
10005
10224
  error: errors.confirmPassword?.message
@@ -10013,77 +10232,54 @@ function RegisterScreen() {
10013
10232
  },
10014
10233
  showConfirmPassword ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.Eye, { className: "h-5 w-5" })
10015
10234
  )),
10016
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Shield, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "By creating an account, you agree to our", " ", /* @__PURE__ */ React21__default.default.createElement(Link8__default.default, { href: buildPath("/terms"), className: "font-semibold text-primary-600 hover:text-primary-700" }, "Terms of Service"), " ", "and", " ", /* @__PURE__ */ React21__default.default.createElement(
10017
- Link8__default.default,
10235
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Shield, { strokeWidth: 2, className: "mt-0.5 h-8 w-8 text-primary" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "By creating an account, you agree to our", " ", /* @__PURE__ */ React21__default.default.createElement(Link7__default.default, { href: buildPath("/terms"), className: "font-semibold text-primary hover:opacity-70" }, "Terms of Service"), " ", "and", " ", /* @__PURE__ */ React21__default.default.createElement(
10236
+ Link7__default.default,
10018
10237
  {
10019
10238
  href: buildPath("/privacy"),
10020
- className: "font-semibold text-primary-600 hover:text-primary-700"
10239
+ className: "font-semibold text-primary hover:opacity-70"
10021
10240
  },
10022
10241
  "Privacy Policy"
10023
10242
  ), ". We protect your information with bank-level encryption.")),
10024
10243
  /* @__PURE__ */ React21__default.default.createElement(
10025
- Button,
10244
+ "button",
10026
10245
  {
10027
10246
  type: "submit",
10028
- size: "lg",
10029
- isLoading: isSubmitting,
10030
- className: "w-full"
10247
+ disabled: isSubmitting,
10248
+ className: "w-full bg-secondary hover:opacity-80 text-white font-medium py-3 px-4 rounded-lg transition-colors disabled:opacity-70 disabled:cursor-not-allowed"
10031
10249
  },
10032
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.UserPlus, { className: "h-5 w-5" }),
10033
- "Create my account"
10250
+ isSubmitting ? "Creating account..." : "Create my account"
10034
10251
  )
10035
- ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-slate-100 bg-slate-50 p-6 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-semibold text-slate-800" }, "Members love us"), /* @__PURE__ */ React21__default.default.createElement("p", null, "92% of patients report improved adherence after receiving pharmacist touchpoints through their Hey Pharmacist account.")))))
10252
+ ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted" }, "Already have an account? ", /* @__PURE__ */ React21__default.default.createElement(Link7__default.default, { href: buildPath("/login"), className: "font-medium text-primary transition hover:opacity-90" }, "Sign in"))))
10036
10253
  )));
10037
10254
  }
10038
- var profileSchema = zod.z.object({
10039
- firstName: zod.z.string().min(2, "First name is required"),
10040
- lastName: zod.z.string().min(2, "Last name is required"),
10041
- email: zod.z.string().email("Enter a valid email address"),
10042
- phone: zod.z.string().optional()
10043
- });
10044
10255
  function ProfileScreen() {
10045
10256
  const router = navigation.useRouter();
10046
- const { user, updateUser, logout } = useAuth();
10257
+ const { user, logout, isLoading } = useAuth();
10047
10258
  const { buildPath } = useBasePath();
10048
- const [isSubmitting, setIsSubmitting] = React21.useState(false);
10049
- const {
10050
- register,
10051
- handleSubmit,
10052
- formState: { errors }
10053
- } = reactHookForm.useForm({
10054
- resolver: zod$1.zodResolver(profileSchema),
10055
- defaultValues: {
10056
- firstName: user?.firstname || "",
10057
- lastName: user?.lastname || "",
10058
- email: user?.email || "",
10059
- phone: user?.phoneNumber || ""
10060
- }
10061
- });
10062
- const onSubmit = async (data) => {
10063
- setIsSubmitting(true);
10259
+ const [isLoggingOut, setIsLoggingOut] = React21.useState(false);
10260
+ const [logoutError, setLogoutError] = React21.useState(null);
10261
+ const handleLogout = async () => {
10262
+ setIsLoggingOut(true);
10263
+ setLogoutError(null);
10064
10264
  try {
10065
- await updateUser(data);
10066
- sonner.toast.success("Profile updated successfully!");
10265
+ await logout();
10266
+ router.push(buildPath("/"));
10067
10267
  } catch (error) {
10068
- sonner.toast.error(error.response?.data?.message || "Failed to update profile");
10268
+ setLogoutError(error?.response?.data?.message || "Failed to logout. Please try again.");
10069
10269
  } finally {
10070
- setIsSubmitting(false);
10270
+ setIsLoggingOut(false);
10071
10271
  }
10072
10272
  };
10073
- const handleLogout = async () => {
10074
- await logout();
10075
- sonner.toast.success("Logged out successfully");
10076
- router.push(buildPath("/"));
10077
- };
10078
10273
  if (!user) {
10274
+ if (isLoading) return null;
10079
10275
  router.push(buildPath("/login"));
10080
10276
  return null;
10081
10277
  }
10082
10278
  const quickLinks = [
10083
10279
  {
10084
10280
  icon: lucideReact.Package,
10085
- label: "Order history",
10086
- description: "Track shipments and download invoices",
10281
+ label: "Orders & invoices",
10282
+ description: "Track shipments, invoices, and receipts",
10087
10283
  href: buildPath("/orders")
10088
10284
  },
10089
10285
  {
@@ -10099,121 +10295,105 @@ function ProfileScreen() {
10099
10295
  href: buildPath("/account/addresses")
10100
10296
  }
10101
10297
  ];
10102
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement(
10298
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50 text-slate-900" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative container mx-auto px-4 pb-16 pt-10" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-slate-200 bg-white/95 p-8 shadow-xl shadow-primary-50 backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6 flex flex-wrap items-center justify-between gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-sm text-slate-500" }, "Stay signed in to keep prescriptions and deliveries synced."), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, logoutError && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-2 rounded-xl border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "mt-[1px] h-4 w-4 text-red-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, logoutError)), /* @__PURE__ */ React21__default.default.createElement(
10299
+ Button,
10300
+ {
10301
+ type: "button",
10302
+ variant: "outline",
10303
+ size: "sm",
10304
+ className: "border-red-200 text-red-600 hover:bg-red-50",
10305
+ onClick: handleLogout,
10306
+ disabled: isLoggingOut
10307
+ },
10308
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.LogOut, { className: "h-4 w-4" }),
10309
+ isLoggingOut ? "Logging out..." : "Log out"
10310
+ ))), /* @__PURE__ */ React21__default.default.createElement(
10103
10311
  framerMotion.motion.div,
10104
10312
  {
10105
- initial: { opacity: 0, y: 24 },
10313
+ initial: { opacity: 0, y: 18 },
10106
10314
  animate: { opacity: 1, y: 0 },
10107
- className: "flex flex-col gap-8 md:flex-row md:items-center md:justify-between"
10315
+ className: "grid gap-8 md:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)] md:items-center"
10108
10316
  },
10109
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-5" }, /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(lucideReact.HeartPulse, { className: "h-4 w-4" }), "My account"), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Hello, ", user.firstname, " ", user.lastname), /* @__PURE__ */ React21__default.default.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Manage profile details, shipping preferences, and personalized recommendations. Our pharmacists keep your care plan up to date."), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-4 text-sm text-white/80" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "h-4 w-4" }), "Account secured with multi-factor ready login"))),
10110
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col items-center gap-4 rounded-3xl bg-white/15 p-6 text-center backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-24 w-24 items-center justify-center rounded-full bg-white/20 text-3xl font-bold text-white" }, getInitials(user?.firstname || "", user?.lastname || "") || ""), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-white/80" }, user.email), /* @__PURE__ */ React21__default.default.createElement(
10317
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "inline-flex items-center gap-2 rounded-full bg-slate-900 text-white px-4 py-1 text-xs font-semibold uppercase tracking-[0.32em]" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.HeartPulse, { className: "h-4 w-4" }), "Account"), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-semibold md:text-5xl" }, "Welcome back, ", user.firstname, " ", user.lastname), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-3 max-w-2xl text-base text-slate-600" }, "Keep your identity and delivery details accurate for smoother refills, faster shipping, and timely pharmacist guidance.")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "h-4 w-4 text-primary-600" }), "Secure login enabled"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Mail, { className: "h-4 w-4 text-primary-600" }), user.email), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Phone, { className: "h-4 w-4 text-primary-600" }), user.phoneNumber || "Add phone for urgent updates"))),
10318
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-4 rounded-2xl border border-slate-200 bg-slate-50/70 p-6 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl bg-white text-2xl font-semibold text-slate-900 shadow-sm" }, getInitials(user?.firstname || "", user?.lastname || "") || ""), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, "Signed in as"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-lg font-semibold text-slate-900" }, user.firstname), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, user.email))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-3 sm:grid-cols-2" }, /* @__PURE__ */ React21__default.default.createElement(
10319
+ Button,
10320
+ {
10321
+ variant: "outline",
10322
+ size: "md",
10323
+ className: "border-slate-300 text-slate-800 hover:bg-white",
10324
+ onClick: () => router.push(buildPath("/account/edit"))
10325
+ },
10326
+ "Edit profile"
10327
+ ), /* @__PURE__ */ React21__default.default.createElement(
10111
10328
  Button,
10112
10329
  {
10113
10330
  variant: "ghost",
10114
- className: "text-white hover:bg-white/20",
10331
+ size: "md",
10332
+ className: "text-slate-700 hover:bg-white",
10115
10333
  onClick: () => router.push(buildPath("/account/change-password"))
10116
10334
  },
10117
10335
  "Change password"
10118
- ))
10119
- ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]" }, /* @__PURE__ */ React21__default.default.createElement(
10336
+ )))
10337
+ )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-10 grid gap-8 lg:grid-cols-[minmax(0,1.08fr)_minmax(0,0.92fr)] items-stretch" }, /* @__PURE__ */ React21__default.default.createElement(
10120
10338
  framerMotion.motion.div,
10121
10339
  {
10122
- initial: { opacity: 0, y: 24 },
10340
+ initial: { opacity: 0, y: 18 },
10123
10341
  animate: { opacity: 1, y: 0 },
10124
10342
  className: "space-y-6"
10125
10343
  },
10126
- /* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Personal information"), /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-5 w-5 text-primary-500" })), /* @__PURE__ */ React21__default.default.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "mt-6 space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21__default.default.createElement(
10127
- Input,
10128
- {
10129
- label: "First name",
10130
- placeholder: "Taylor",
10131
- ...register("firstName"),
10132
- error: errors.firstName?.message
10133
- }
10134
- ), /* @__PURE__ */ React21__default.default.createElement(
10135
- Input,
10136
- {
10137
- label: "Last name",
10138
- placeholder: "Reed",
10139
- ...register("lastName"),
10140
- error: errors.lastName?.message
10141
- }
10142
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(
10143
- Input,
10144
- {
10145
- type: "email",
10146
- label: "Email address",
10147
- placeholder: "you@example.com",
10148
- className: "pl-10",
10149
- ...register("email"),
10150
- error: errors.email?.message
10151
- }
10152
- ), /* @__PURE__ */ React21__default.default.createElement(lucideReact.Mail, { className: "absolute left-3 top-[38px] h-4 w-4 text-slate-400" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(
10153
- Input,
10154
- {
10155
- type: "tel",
10156
- label: "Phone number",
10157
- placeholder: "+1 (555) 123-4567",
10158
- className: "pl-10",
10159
- ...register("phone"),
10160
- error: errors.phone?.message
10161
- }
10162
- ), /* @__PURE__ */ React21__default.default.createElement(lucideReact.Phone, { className: "absolute left-3 top-[38px] h-4 w-4 text-slate-400" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-4" }, /* @__PURE__ */ React21__default.default.createElement(
10163
- Button,
10164
- {
10165
- type: "submit",
10166
- size: "lg",
10167
- isLoading: isSubmitting
10168
- },
10169
- "Save changes"
10170
- ), /* @__PURE__ */ React21__default.default.createElement(
10344
+ /* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl border border-slate-200 bg-white p-7 shadow-lg shadow-primary-50/40 min-h-[420px] h-full flex flex-col" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-400" }, "Essentials"), /* @__PURE__ */ React21__default.default.createElement("h2", { className: "mt-1 text-xl font-semibold text-slate-900" }, "Profile snapshot")), /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-5 w-5 text-primary-500" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/70 p-5" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.28em] text-slate-500" }, "Contact"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-3 space-y-2 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2 font-semibold text-slate-900" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.User, { className: "h-4 w-4 text-primary-500" }), user.firstname, " ", user.lastname), /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Mail, { className: "h-4 w-4 text-primary-500" }), user.email), /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Phone, { className: "h-4 w-4 text-primary-500" }), user.phoneNumber || "Not provided")), /* @__PURE__ */ React21__default.default.createElement(
10171
10345
  Button,
10172
10346
  {
10173
- type: "button",
10174
10347
  variant: "outline",
10175
- size: "lg",
10176
- onClick: () => router.push(buildPath("/orders"))
10348
+ size: "md",
10349
+ className: "mt-4 w-full border-slate-300 text-slate-800 hover:bg-white",
10350
+ onClick: () => router.push(buildPath("/account/edit"))
10177
10351
  },
10178
- "View recent orders"
10179
- )))),
10180
- /* @__PURE__ */ React21__default.default.createElement("section", { className: "grid gap-4 md:grid-cols-2" }, quickLinks.map((item) => /* @__PURE__ */ React21__default.default.createElement(
10181
- Link8__default.default,
10352
+ "Update information"
10353
+ )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/70 p-5" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.28em] text-slate-500" }, "Security"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-3 space-y-2 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2 font-semibold text-slate-900" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "h-4 w-4 text-primary-500" }), "Multi-factor ready"), /* @__PURE__ */ React21__default.default.createElement("p", null, "Protect your account with a fresh password and keep notifications on.")), /* @__PURE__ */ React21__default.default.createElement(
10354
+ Button,
10182
10355
  {
10183
- key: item.href,
10184
- href: item.href,
10185
- className: "group rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-lg"
10356
+ variant: "primary",
10357
+ size: "md",
10358
+ className: "mt-4 w-full",
10359
+ onClick: () => router.push(buildPath("/account/change-password"))
10186
10360
  },
10187
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "rounded-2xl bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React21__default.default.createElement(item.icon, { className: "h-5 w-5" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-base font-semibold text-slate-900 group-hover:text-primary-600" }, item.label), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, item.description)))
10188
- )))
10361
+ "Change password"
10362
+ ))))
10189
10363
  ), /* @__PURE__ */ React21__default.default.createElement(
10190
10364
  framerMotion.motion.aside,
10191
10365
  {
10192
- initial: { opacity: 0, y: 24 },
10366
+ initial: { opacity: 0, y: 18 },
10193
10367
  animate: { opacity: 1, y: 0 },
10194
- transition: { delay: 0.1 },
10195
- className: "space-y-6"
10368
+ transition: { delay: 0.05 },
10369
+ className: "space-y-4 h-full"
10196
10370
  },
10197
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, "Care preferences"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-3 text-sm text-slate-600" }, "Customize how we support you. Set refill reminders or manage communication preferences to stay aligned with your wellness goals."), /* @__PURE__ */ React21__default.default.createElement(
10198
- Button,
10371
+ /* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl border border-slate-200 bg-white p-6 shadow-sm min-h-[420px] h-full flex flex-col" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-400" }, "Quick links"), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "mt-1 text-lg font-semibold text-slate-900" }, "Next steps")), /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "h-5 w-5 text-primary-500" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-5 grid gap-3" }, quickLinks.map((item) => /* @__PURE__ */ React21__default.default.createElement(
10372
+ Link7__default.default,
10199
10373
  {
10200
- variant: "outline",
10201
- className: "mt-4 w-full",
10202
- onClick: () => router.push(buildPath("/account/preferences"))
10203
- },
10204
- "Manage preferences"
10205
- )),
10206
- /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Pharmacist tip"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-3 leading-relaxed" }, "Keep your phone number current so pharmacists can reach you quickly with dosage advice or time-sensitive updates about your order.")),
10207
- /* @__PURE__ */ React21__default.default.createElement(
10208
- "button",
10209
- {
10210
- onClick: handleLogout,
10211
- className: "flex w-full items-center justify-center gap-2 rounded-3xl border border-red-200 bg-red-50 px-4 py-3 text-sm font-semibold text-red-600 transition hover:bg-red-100"
10374
+ key: item.href,
10375
+ href: item.href,
10376
+ className: "group relative flex items-start gap-3 rounded-2xl border border-slate-200 bg-slate-50/70 p-4 transition duration-200 hover:-translate-y-0.5 hover:border-primary-200 hover:bg-white hover:shadow-md"
10212
10377
  },
10213
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.LogOut, { className: "h-4 w-4" }),
10214
- "Log out"
10215
- )
10216
- )))));
10378
+ /* @__PURE__ */ React21__default.default.createElement("span", { className: "flex h-11 w-11 items-center justify-center rounded-xl bg-white text-primary-600 shadow-sm group-hover:bg-primary-600 group-hover:text-white" }, /* @__PURE__ */ React21__default.default.createElement(item.icon, { className: "h-5 w-5" })),
10379
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2 text-base font-semibold text-slate-900 group-hover:text-primary-700" }, item.label, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowRight, { className: "h-4 w-4 opacity-0 transition group-hover:opacity-100" })), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, item.description))
10380
+ ))))
10381
+ ))));
10382
+ }
10383
+ function Badge({ children, variant = "primary", size = "md", className = "" }) {
10384
+ const variants = {
10385
+ primary: "bg-primary-100 text-primary-700 border-primary-200",
10386
+ secondary: "bg-secondary-100 text-secondary-700 border-secondary-200",
10387
+ success: "bg-green-100 text-green-700 border-green-200",
10388
+ warning: "bg-yellow-100 text-yellow-700 border-yellow-200",
10389
+ danger: "bg-red-100 text-red-700 border-red-200",
10390
+ gray: "bg-gray-100 text-gray-700 border-gray-200"
10391
+ };
10392
+ const sizes = {
10393
+ sm: "px-2 py-1 text-xs",
10394
+ md: "px-3 py-1 text-sm"
10395
+ };
10396
+ return /* @__PURE__ */ React21__default.default.createElement("span", { className: `inline-flex items-center font-medium rounded-full border ${variants[variant]} ${sizes[size]} ${className}` }, children);
10217
10397
  }
10218
10398
  function OrderCard({ order }) {
10219
10399
  const config = order.orderStatus;
@@ -10231,7 +10411,7 @@ function OrderCard({ order }) {
10231
10411
  const itemPrice = item.productVariantData?.finalPrice || 0;
10232
10412
  const itemTotal = itemPrice * item.quantity;
10233
10413
  return /* @__PURE__ */ React21__default.default.createElement("div", { key: item.productVariantId || item._id, className: "flex items-center gap-2 text-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-12 h-12 rounded bg-gray-100 flex-shrink-0 overflow-hidden" }, /* @__PURE__ */ React21__default.default.createElement(
10234
- Image3__default.default,
10414
+ Image4__default.default,
10235
10415
  {
10236
10416
  src: item?.productVariantData?.productMedia?.[0]?.file || "/placeholder-product.jpg",
10237
10417
  alt: item?.productVariantData?.name || "Product image",
@@ -10571,7 +10751,7 @@ function CurrentOrdersScreen() {
10571
10751
  },
10572
10752
  /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick actions"),
10573
10753
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4 space-y-3 text-sm text-white/80" }, /* @__PURE__ */ React21__default.default.createElement(
10574
- Link8__default.default,
10754
+ Link7__default.default,
10575
10755
  {
10576
10756
  href: buildPath("/orders"),
10577
10757
  className: "flex items-center justify-between rounded-2xl bg-white/10 px-4 py-3 transition hover:bg-white/20"
@@ -10650,6 +10830,9 @@ function AddressesScreen() {
10650
10830
  } = useAddresses();
10651
10831
  const [isModalOpen, setIsModalOpen] = React21.useState(false);
10652
10832
  const [editingAddress, setEditingAddress] = React21.useState(null);
10833
+ const [banner, setBanner] = React21.useState(
10834
+ null
10835
+ );
10653
10836
  const {
10654
10837
  register,
10655
10838
  handleSubmit,
@@ -10704,10 +10887,10 @@ function AddressesScreen() {
10704
10887
  if (editingAddress) {
10705
10888
  const response = await updateAddress(editingAddress.id, payload);
10706
10889
  if (response) {
10707
- sonner.toast.success("Address updated");
10890
+ setBanner({ type: "success", message: "Address updated successfully" });
10708
10891
  closeModal();
10709
10892
  } else {
10710
- sonner.toast.error("Unable to update address");
10893
+ setBanner({ type: "error", message: "Unable to update address" });
10711
10894
  }
10712
10895
  } else {
10713
10896
  const response = await addAddress({
@@ -10722,10 +10905,10 @@ function AddressesScreen() {
10722
10905
  addressType: values.addressType
10723
10906
  });
10724
10907
  if (response) {
10725
- sonner.toast.success("Address added successfu lly");
10908
+ setBanner({ type: "success", message: "Address added successfully" });
10726
10909
  closeModal();
10727
10910
  } else {
10728
- sonner.toast.error("Failed to add address");
10911
+ setBanner({ type: "error", message: "Failed to add address" });
10729
10912
  }
10730
10913
  }
10731
10914
  };
@@ -10737,20 +10920,22 @@ You can add it back at any time.`
10737
10920
  if (!confirmDelete) return;
10738
10921
  try {
10739
10922
  await removeAddress(address.id);
10740
- sonner.toast.success("Address removed successfully");
10923
+ setBanner({ type: "success", message: "Address removed successfully" });
10741
10924
  } catch (error2) {
10742
- sonner.toast.error("Failed to remove address", {
10743
- description: error2 instanceof Error ? error2.message : "An unexpected error occurred"
10925
+ setBanner({
10926
+ type: "error",
10927
+ message: error2 instanceof Error ? error2.message : "Failed to remove address. Please try again."
10744
10928
  });
10745
10929
  }
10746
10930
  };
10747
10931
  const handleSetDefault = async (address) => {
10748
10932
  try {
10749
10933
  await markAsDefault(address.id);
10750
- sonner.toast.success(`${address.name} is now your default address`);
10934
+ setBanner({ type: "success", message: `${address.name} is now your default address` });
10751
10935
  } catch (error2) {
10752
- sonner.toast.error("Failed to set default address", {
10753
- description: error2 instanceof Error ? error2.message : "An unexpected error occurred"
10936
+ setBanner({
10937
+ type: "error",
10938
+ message: error2 instanceof Error ? error2.message : "Failed to set default address. Try again."
10754
10939
  });
10755
10940
  }
10756
10941
  };
@@ -10778,27 +10963,32 @@ You can add it back at any time.`
10778
10963
  }
10779
10964
  ];
10780
10965
  }, [addresses]);
10781
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.3),_transparent_60%)]" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21__default.default.createElement(
10782
- framerMotion.motion.div,
10966
+ return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50 text-slate-900" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 pb-16 pt-10" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-slate-200 bg-white/95 p-6 shadow-xl shadow-primary-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "inline-flex items-center gap-2 rounded-full bg-slate-900 text-white px-4 py-1 text-xs font-semibold uppercase tracking-[0.32em]" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.MapPin, { className: "h-4 w-4" }), "Address book"), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-3xl font-semibold md:text-4xl" }, "Manage where your care arrives"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "max-w-2xl text-sm text-slate-600" }, "Save home, office, or loved ones' addresses and choose a default for faster checkout and delivery."), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-3 text-xs text-slate-500" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-4 w-4 text-primary-600" }), "Default: ", defaultAddress ? defaultAddress.name : "Not set"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, banner && /* @__PURE__ */ React21__default.default.createElement(
10967
+ "div",
10783
10968
  {
10784
- initial: { opacity: 0, y: 24 },
10785
- animate: { opacity: 1, y: 0 },
10786
- className: "space-y-5"
10969
+ className: `flex items-start gap-2 rounded-2xl border px-3 py-2 text-xs ${banner.type === "success" ? "border-green-200 bg-green-50 text-green-700" : "border-red-200 bg-red-50 text-red-700"}`
10787
10970
  },
10788
- /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(lucideReact.MapPin, { className: "h-4 w-4" }), "Address book"),
10789
- /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Manage where your care arrives"),
10790
- /* @__PURE__ */ React21__default.default.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Add home, office, or loved ones' addresses and toggle a default for lightning-fast checkout and delivery."),
10791
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-3 text-sm text-white/75" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-4 w-4 text-white" }), "Default address: ", defaultAddress ? defaultAddress.name : "Not set"), /* @__PURE__ */ React21__default.default.createElement(Button, { variant: "ghost", className: "text-white hover:bg-white/10", onClick: openCreateModal }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Plus, { className: "h-5 w-5" }), "Add address"))
10971
+ /* @__PURE__ */ React21__default.default.createElement("span", { className: "mt-[1px] text-base" }, banner.type === "success" ? "\u2714" : "!"),
10972
+ /* @__PURE__ */ React21__default.default.createElement("span", null, banner.message)
10792
10973
  ), /* @__PURE__ */ React21__default.default.createElement(
10793
- framerMotion.motion.div,
10974
+ Button,
10794
10975
  {
10795
- initial: { opacity: 0, y: 24 },
10796
- animate: { opacity: 1, y: 0 },
10797
- transition: { delay: 0.1 },
10798
- className: "grid gap-4 rounded-3xl bg-white/15 p-6 text-sm text-white/80 backdrop-blur"
10976
+ variant: "outline",
10977
+ size: "md",
10978
+ className: "border-slate-300 text-slate-800 hover:bg-white",
10979
+ onClick: openCreateModal
10799
10980
  },
10800
- stats.map((stat) => /* @__PURE__ */ React21__default.default.createElement("div", { key: stat.id, className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-white/70" }, stat.label), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-white" }, stat.helper)), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-3xl font-semibold text-white" }, stat.value)))
10801
- )))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, isLoading ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-3" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(
10981
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.Plus, { className: "h-5 w-5" }),
10982
+ "Add address"
10983
+ ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 grid gap-4 sm:grid-cols-3" }, stats.map((stat) => /* @__PURE__ */ React21__default.default.createElement(
10984
+ "div",
10985
+ {
10986
+ key: stat.id,
10987
+ className: "rounded-2xl border border-slate-200 bg-slate-50/70 px-4 py-3 text-sm text-slate-600"
10988
+ },
10989
+ /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.28em] text-slate-500" }, stat.label),
10990
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-1 flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-slate-800" }, stat.helper), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-xl font-semibold text-slate-900" }, stat.value))
10991
+ )))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-10" }, isLoading ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-3" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(
10802
10992
  "div",
10803
10993
  {
10804
10994
  key: index,
@@ -10821,7 +11011,7 @@ You can add it back at any time.`
10821
11011
  key: address.id,
10822
11012
  initial: { opacity: 0, y: 24 },
10823
11013
  animate: { opacity: 1, y: 0 },
10824
- className: "group relative flex h-full flex-col rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-xl"
11014
+ className: "group relative flex h-full flex-col rounded-3xl border border-slate-200 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:border-primary-200 hover:shadow-lg"
10825
11015
  },
10826
11016
  address.isDefault && /* @__PURE__ */ React21__default.default.createElement("span", { className: "absolute right-6 top-6 inline-flex items-center gap-2 rounded-full bg-amber-100 px-3 py-1 text-xs font-semibold text-amber-700" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Crown, { className: "h-4 w-4" }), "Default"),
10827
11017
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "rounded-full bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.User, { className: "h-5 w-5" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-base font-semibold text-slate-900" }, address.name), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs uppercase tracking-[0.3em] text-slate-400" }, typeCopy.label))),
@@ -11011,6 +11201,7 @@ function WishlistScreen() {
11011
11201
  clearWishlist,
11012
11202
  refreshWishlist
11013
11203
  } = useWishlist();
11204
+ const notification = useNotification();
11014
11205
  const wishlistCount = getWishlistCount?.() ?? 0;
11015
11206
  const { products: wishlistProducts, isLoading, error } = useWishlistProducts(
11016
11207
  wishlistItems
@@ -11020,9 +11211,12 @@ function WishlistScreen() {
11020
11211
  const [sortOption, setSortOption] = React21.useState("featured");
11021
11212
  React21.useEffect(() => {
11022
11213
  if (error) {
11023
- sonner.toast.error("We had trouble loading your saved products. Please try again.");
11214
+ notification.error(
11215
+ "Could not load wishlist",
11216
+ "We had trouble loading your saved products. Please refresh the page or try again shortly."
11217
+ );
11024
11218
  }
11025
- }, [error]);
11219
+ }, [error, notification]);
11026
11220
  const handleRemoveFromWishlist = async (productId) => {
11027
11221
  try {
11028
11222
  await removeFromWishlist(productId);
@@ -11090,22 +11284,22 @@ function WishlistScreen() {
11090
11284
  animate: { opacity: 1, y: 0 },
11091
11285
  className: "space-y-6"
11092
11286
  },
11093
- !isAuthenticated && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex min-h-[40vh] items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "max-w-lg text-center space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-full bg-gray-100 p-6" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "h-12 w-12 text-gray-400" }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-bold text-slate-900" }, "Sign in to see your favourites"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-gray-500" }, "Create your curated shelf of products and we'll keep them ready whenever you return.")), /* @__PURE__ */ React21__default.default.createElement(
11287
+ !isAuthenticated && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex min-h-[40vh] items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "max-w-lg text-center space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-full bg-gray-100 p-6" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "h-12 w-12 text-secondary" }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-bold text-secondary" }, "Sign in to see your favourites"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted" }, "Create your curated shelf of products and we'll keep them ready whenever you return.")), /* @__PURE__ */ React21__default.default.createElement(
11094
11288
  "button",
11095
11289
  {
11096
11290
  type: "button",
11097
11291
  onClick: () => router.push(buildPath("/login")),
11098
- className: "rounded-full border-2 border-primary-500 bg-primary-500 hover:bg-primary-600 text-white px-6 py-3 text-sm font-medium transition-colors"
11292
+ className: "rounded-xl border-2 border-primary bg-primary text-white px-6 py-3 text-sm font-medium transition-colors hover:opacity-80"
11099
11293
  },
11100
11294
  "Sign In"
11101
11295
  ))),
11102
- isAuthenticated && /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-2xl font-bold text-slate-900" }, "Wishlist"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500 mt-1" }, wishlistCount, " ", wishlistCount === 1 ? "item" : "items", " saved", wishlistCount > 0 && ` \u2022 Total value: ${formatPrice(totalValue)}`)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between mb-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-1" }, onlyInStock && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500" }, "Showing items ready to ship")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-3" }, /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(
11296
+ isAuthenticated && /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-2xl font-bold text-secondary" }, "Wishlist"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted mt-1" }, wishlistCount, " ", wishlistCount === 1 ? "item" : "items", " saved", wishlistCount > 0 && ` \u2022 Total value: ${formatPrice(totalValue)}`)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between mb-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-1" }, onlyInStock && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted" }, "Showing items ready to ship")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-3" }, /* @__PURE__ */ React21__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 hover:text-secondary" }, /* @__PURE__ */ React21__default.default.createElement(
11103
11297
  "input",
11104
11298
  {
11105
11299
  type: "checkbox",
11106
11300
  checked: onlyInStock,
11107
11301
  onChange: (event) => setOnlyInStock(event.target.checked),
11108
- className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
11302
+ className: "h-4 w-4 rounded border-slate-300 text-secondary focus:ring-secondary"
11109
11303
  }
11110
11304
  ), "Only show in-stock"), /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("span", null, "Sort"), /* @__PURE__ */ React21__default.default.createElement(
11111
11305
  "select",
@@ -11115,24 +11309,22 @@ function WishlistScreen() {
11115
11309
  className: "bg-transparent text-sm font-medium text-slate-700 outline-none"
11116
11310
  },
11117
11311
  SORT_OPTIONS.map((option) => /* @__PURE__ */ React21__default.default.createElement("option", { key: option.value, value: option.value }, option.label))
11118
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex overflow-hidden rounded-full border border-slate-200 bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement(
11312
+ )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex overflow-hidden rounded-full border border-slate-200 bg-gray-100 p-1" }, /* @__PURE__ */ React21__default.default.createElement(
11119
11313
  "button",
11120
11314
  {
11121
11315
  type: "button",
11122
11316
  onClick: () => setViewMode("grid"),
11123
- 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"}`
11317
+ className: `flex items-center gap-1 px-3 py-1.5 text-sm font-medium transition rounded-full ${viewMode === "grid" ? "bg-white text-primary shadow-md" : "text-slate-600 hover:bg-white"}`
11124
11318
  },
11125
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Grid, { className: "h-4 w-4" }),
11126
- "Grid"
11319
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.Grid, { className: "h-4 w-4" })
11127
11320
  ), /* @__PURE__ */ React21__default.default.createElement(
11128
11321
  "button",
11129
11322
  {
11130
11323
  type: "button",
11131
11324
  onClick: () => setViewMode("list"),
11132
- 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"}`
11325
+ className: `flex items-center gap-1 px-3 py-1.5 text-sm font-medium transition rounded-full ${viewMode === "list" ? "bg-white text-primary shadow-md" : "text-slate-600 hover:bg-white"}`
11133
11326
  },
11134
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.List, { className: "h-4 w-4" }),
11135
- "List"
11327
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.List, { className: "h-4 w-4" })
11136
11328
  )), wishlistCount > 0 && /* @__PURE__ */ React21__default.default.createElement(
11137
11329
  Button,
11138
11330
  {
@@ -11148,12 +11340,12 @@ function WishlistScreen() {
11148
11340
  key: index,
11149
11341
  className: "h-72 animate-pulse rounded-2xl border border-slate-200 bg-slate-100"
11150
11342
  }
11151
- ))), !isLoading && wishlistCount === 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex min-h-[30vh] items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-center space-y-6 max-w-md" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-full bg-gray-100 p-6" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "h-12 w-12 text-gray-400" }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-bold text-slate-900" }, "Your wishlist is empty"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-gray-500" }, "Start adding products to your wishlist to see them here.")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap justify-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(
11343
+ ))), !isLoading && wishlistCount === 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex min-h-[30vh] items-center justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-center space-y-6 max-w-md" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-full bg-gray-100 p-6" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "h-12 w-12 text-secondary" }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-bold text-secondary" }, "Your wishlist is empty"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted" }, "Start adding products to your wishlist to see them here.")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap justify-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(
11152
11344
  "button",
11153
11345
  {
11154
11346
  type: "button",
11155
11347
  onClick: () => router.push(buildPath("/shop")),
11156
- className: "rounded-full border-2 border-primary-500 bg-primary-500 hover:bg-primary-600 text-white px-6 py-3 text-sm font-medium transition-colors flex items-center justify-center gap-2"
11348
+ className: "rounded-xl border-2 border-primary bg-primary text-white px-6 py-3 text-sm font-medium transition-colors flex items-center justify-center gap-2 hover:opacity-80"
11157
11349
  },
11158
11350
  "Discover products"
11159
11351
  )))), !isLoading && processedProducts.length > 0 && /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, viewMode === "grid" ? /* @__PURE__ */ React21__default.default.createElement(
@@ -11194,7 +11386,7 @@ function WishlistScreen() {
11194
11386
  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"
11195
11387
  },
11196
11388
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative h-28 w-full overflow-hidden rounded-2xl bg-white sm:w-40" }, /* @__PURE__ */ React21__default.default.createElement(
11197
- Image3__default.default,
11389
+ Image4__default.default,
11198
11390
  {
11199
11391
  fill: true,
11200
11392
  src: product.productMedia?.[0]?.file || "/placeholder-product.jpg",
@@ -11202,7 +11394,7 @@ function WishlistScreen() {
11202
11394
  className: "h-full w-full object-cover"
11203
11395
  }
11204
11396
  )),
11205
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-1 flex-col gap-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, product.name), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, product.parentCategories?.map((category) => category?.name).join(", ") || "General wellness")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-lg font-bold text-primary-600" }, formatPrice(product.finalPrice ?? 0)), product.isDiscounted && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-emerald-500" }, "You save ", formatPrice(Math.max((product.priceBeforeDiscount ?? 0) - (product.finalPrice ?? 0), 0))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-3 text-xs text-slate-500" }, /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(lucideReact.Package, { className: "h-3.5 w-3.5" }), product.inventoryCount > 0 ? "In stock" : "Backordered"), product.totalSold > 0 && /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-3.5 w-3.5" }), product.totalSold, "+ purchased")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, /* @__PURE__ */ React21__default.default.createElement(
11397
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-1 flex-col gap-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-secondary" }, product.name), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted" }, product.parentCategories?.map((category) => category?.name).join(", ") || "General wellness")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-lg font-bold text-primary" }, formatPrice(product.finalPrice ?? 0)), product.isDiscounted && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-emerald-500" }, "You save ", formatPrice(Math.max((product.priceBeforeDiscount ?? 0) - (product.finalPrice ?? 0), 0))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-3 text-xs text-slate-500" }, /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(lucideReact.Package, { className: "h-3.5 w-3.5" }), product.inventoryCount > 0 ? "In stock" : "Backordered"), product.totalSold > 0 && /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-3.5 w-3.5" }), product.totalSold, "+ purchased")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, /* @__PURE__ */ React21__default.default.createElement(
11206
11398
  Button,
11207
11399
  {
11208
11400
  size: "sm",
@@ -11215,15 +11407,15 @@ function WishlistScreen() {
11215
11407
  size: "sm",
11216
11408
  variant: "outline",
11217
11409
  onClick: () => handleRemoveFromWishlist(product.id),
11218
- className: "text-primary-600"
11410
+ className: "text-secondary"
11219
11411
  },
11220
11412
  "Remove"
11221
11413
  )))
11222
- ))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col items-center justify-center rounded-lg border border-dashed border-gray-200 bg-gray-50 p-12 text-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-gray-200 text-gray-500" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Package, { className: "h-8 w-8" })), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "mt-6 text-xl font-semibold text-slate-900" }, "Nothing matches those filters"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-2 max-w-md text-sm text-gray-500" }, "Try showing out-of-stock items or adjust your sort order to revisit everything you've saved."), /* @__PURE__ */ React21__default.default.createElement(
11414
+ ))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col items-center justify-center rounded-lg border border-dashed border-gray-200 bg-gray-50 p-12 text-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-gray-200 text-gray-500" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Package, { className: "h-8 w-8" })), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "mt-6 text-xl font-semibold text-secondary" }, "Nothing matches those filters"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-2 max-w-md text-sm text-muted" }, "Try showing out-of-stock items or adjust your sort order to revisit everything you've saved."), /* @__PURE__ */ React21__default.default.createElement(
11223
11415
  "button",
11224
11416
  {
11225
11417
  type: "button",
11226
- className: "mt-6 rounded-full border-2 border-primary-300 bg-white px-6 py-3 text-sm font-medium text-slate-700 hover:bg-gray-50 transition-colors",
11418
+ className: "mt-6 rounded-xl border-2 border-primary bg-white px-6 py-3 text-sm font-medium text-secondary hover:opacity-80 transition-colors",
11227
11419
  onClick: () => setOnlyInStock(false)
11228
11420
  },
11229
11421
  "Show all saved products"
@@ -11331,67 +11523,17 @@ function SearchPage() {
11331
11523
  ))), /* @__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(
11332
11524
  ProductCard,
11333
11525
  {
11526
+ key: product.id,
11334
11527
  product,
11335
11528
  isFavorited: isInWishlist(product.id),
11336
11529
  onClickProduct: (p) => router.push(buildPath(`/products/${p.id}`))
11337
11530
  }
11338
- ))) : 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"))));
11339
- }
11340
- function CategoriesScreen() {
11341
- const { categories, isLoading } = useCategories();
11342
- const router = navigation.useRouter();
11343
- const { buildPath } = useBasePath();
11344
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement(
11345
- framerMotion.motion.div,
11346
- {
11347
- initial: { opacity: 0, y: 24 },
11348
- animate: { opacity: 1, y: 0 },
11349
- className: "space-y-6"
11350
- },
11351
- /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(lucideReact.Package, { className: "h-4 w-4" }), "Product Categories"),
11352
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Browse Our Product Range"), /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick tip"), /* @__PURE__ */ React21__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.")))
11353
- ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative -mt-16 pb-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement(
11354
- framerMotion.motion.div,
11355
- {
11356
- initial: { opacity: 0, y: 24 },
11357
- animate: { opacity: 1, y: 0 },
11358
- className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
11359
- },
11360
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3 text-sm text-slate-500 mb-6" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-4 w-4 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "Browse our complete product catalog organized by categories.")),
11361
- isLoading ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, [...Array(8)].map((_, i) => /* @__PURE__ */ React21__default.default.createElement("div", { key: i, className: "animate-pulse" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-gray-200 rounded-lg aspect-square mb-2" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-4 bg-gray-200 rounded w-3/4 mb-1" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-3 bg-gray-200 rounded w-1/2" })))) : categories.length > 0 ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, categories.map((category) => /* @__PURE__ */ React21__default.default.createElement(
11362
- Link8__default.default,
11363
- {
11364
- key: category.id,
11365
- href: buildPath(`/shop?category=${category.name}`),
11366
- 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"
11367
- },
11368
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative aspect-square w-full overflow-hidden rounded-lg bg-gray-50 mb-3" }, category.image ? /* @__PURE__ */ React21__default.default.createElement(
11369
- Image3__default.default,
11370
- {
11371
- src: category.image,
11372
- alt: category.name || "Category Image",
11373
- fill: true,
11374
- className: "object-cover transition-transform group-hover:scale-105",
11375
- sizes: "(max-width: 768px) 50vw, (max-width: 1200px) 33vw, 25vw"
11376
- }
11377
- ) : /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-full w-full items-center justify-center bg-gray-100 text-gray-400" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Package, { className: "h-12 w-12" }))),
11378
- /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 group-hover:text-primary-600 transition-colors" }, category.name),
11379
- category.productCount > 0 && /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-1 text-sm text-gray-500" }, category.productCount, " ", category.productCount === 1 ? "product" : "products")
11380
- ))) : /* @__PURE__ */ React21__default.default.createElement(
11381
- EmptyState,
11382
- {
11383
- title: "No categories found",
11384
- description: "There are currently no product categories available.",
11385
- icon: lucideReact.Package,
11386
- actionLabel: "Shop products",
11387
- onAction: () => router.push(buildPath("/shop"))
11388
- }
11389
- )
11390
- ))));
11531
+ ))) : 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(Link7__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"))));
11391
11532
  }
11392
11533
  function NewAddressPage() {
11393
11534
  const router = navigation.useRouter();
11394
11535
  const [isSubmitting, setIsSubmitting] = React21.useState(false);
11536
+ const notification = useNotification();
11395
11537
  const {
11396
11538
  register,
11397
11539
  handleSubmit,
@@ -11417,7 +11559,10 @@ function NewAddressPage() {
11417
11559
  country: data.country,
11418
11560
  phone: data.phone
11419
11561
  });
11420
- sonner.toast.success("Address added successfully");
11562
+ notification.success(
11563
+ "Address added",
11564
+ "Your new address has been saved to your account."
11565
+ );
11421
11566
  router.back();
11422
11567
  } catch (error) {
11423
11568
  let errorMessage = "An unexpected error occurred";
@@ -11432,15 +11577,17 @@ function NewAddressPage() {
11432
11577
  if (error.message === "Network Error") {
11433
11578
  errorMessage = "Unable to connect to the server. Please check your internet connection.";
11434
11579
  }
11435
- sonner.toast.error("Unable to save address", {
11436
- description: errorMessage,
11437
- duration: 5e3
11438
- });
11580
+ notification.error(
11581
+ "Unable to save address",
11582
+ errorMessage,
11583
+ 5e3
11584
+ );
11439
11585
  if (error.response?.status === 422) {
11440
- sonner.toast.info("Address validation failed", {
11441
- description: "Make sure your address is complete and formatted correctly.",
11442
- duration: 6e3
11443
- });
11586
+ notification.info(
11587
+ "Address validation failed",
11588
+ "Make sure your address is complete and formatted correctly.",
11589
+ 6e3
11590
+ );
11444
11591
  }
11445
11592
  } finally {
11446
11593
  setIsSubmitting(false);
@@ -11529,31 +11676,42 @@ function NewAddressPage() {
11529
11676
  }
11530
11677
  function Header() {
11531
11678
  const { config } = useTheme();
11532
- const { user, isAuthenticated } = useAuth();
11679
+ const { user, isAuthenticated, logout } = useAuth();
11533
11680
  const { cart } = useCart() || { cart: { } };
11534
11681
  const { getWishlistCount } = useWishlist();
11535
11682
  const wishlistCount = getWishlistCount?.() || 0;
11536
11683
  const [isMobileMenuOpen, setIsMobileMenuOpen] = React21.useState(false);
11537
11684
  const [isSearchOpen, setIsSearchOpen] = React21.useState(false);
11685
+ const [isDropdownOpen, setIsDropdownOpen] = React21.useState(false);
11686
+ const [isLoggingOut, setIsLoggingOut] = React21.useState(false);
11538
11687
  const [searchQuery, setSearchQuery] = React21.useState("");
11539
11688
  const { buildPath } = useBasePath();
11689
+ const router = navigation.useRouter();
11690
+ const handleLogout = async () => {
11691
+ setIsLoggingOut(true);
11692
+ try {
11693
+ await logout();
11694
+ router.push(buildPath("/"));
11695
+ } catch (error) {
11696
+ console.error("Logout failed:", error);
11697
+ } finally {
11698
+ setIsLoggingOut(false);
11699
+ setIsDropdownOpen(false);
11700
+ }
11701
+ };
11540
11702
  const navLinks = [
11541
- { href: buildPath("/shop"), label: "Shop" },
11542
- { href: buildPath("/categories"), label: "Categories" },
11543
- { href: buildPath("/orders"), label: "Orders" },
11544
- { href: buildPath("/about"), label: "About" },
11545
- { href: buildPath("/contact"), label: "Contact" }
11703
+ { href: buildPath("/shop"), label: "Shop" }
11546
11704
  ];
11547
- return /* @__PURE__ */ React21__default.default.createElement("header", { className: "sticky top-0 z-40 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between h-20" }, /* @__PURE__ */ React21__default.default.createElement(Link8__default.default, { href: buildPath("/"), className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-12 h-12" }, /* @__PURE__ */ React21__default.default.createElement(
11548
- Image3__default.default,
11705
+ return /* @__PURE__ */ React21__default.default.createElement("header", { className: "sticky top-0 z-10 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between h-20" }, /* @__PURE__ */ React21__default.default.createElement(Link7__default.default, { href: buildPath("/"), className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-12 h-12" }, /* @__PURE__ */ React21__default.default.createElement(
11706
+ Image4__default.default,
11549
11707
  {
11550
11708
  src: config.logo,
11551
11709
  alt: config.storeName,
11552
11710
  fill: true,
11553
11711
  className: "object-contain"
11554
11712
  }
11555
- )), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-2xl font-bold text-gray-900 hidden sm:block" }, config.storeName)), /* @__PURE__ */ React21__default.default.createElement("nav", { className: "hidden lg:flex items-center gap-8" }, navLinks.map((link) => /* @__PURE__ */ React21__default.default.createElement(
11556
- Link8__default.default,
11713
+ ))), /* @__PURE__ */ React21__default.default.createElement("nav", { className: "hidden lg:flex items-center gap-8" }, navLinks.map((link) => /* @__PURE__ */ React21__default.default.createElement(
11714
+ Link7__default.default,
11557
11715
  {
11558
11716
  key: link.href,
11559
11717
  href: link.href,
@@ -11600,15 +11758,40 @@ function Header() {
11600
11758
  },
11601
11759
  /* @__PURE__ */ React21__default.default.createElement(lucideReact.X, { className: "w-4 h-4" })
11602
11760
  ))
11603
- ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21__default.default.createElement(Link8__default.default, { href: buildPath("/wishlist"), className: "relative p-2 text-gray-700 hover:text-red-500 transition-colors" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "w-6 h-6" }), wishlistCount > 0 && /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(Link8__default.default, { href: buildPath("/cart"), className: "relative p-2 text-gray-700 hover:text-primary-600 transition-colors" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingCart, { className: "w-6 h-6" }), cart?.cartBody?.items?.length && cart.cartBody?.items?.length > 0 ? /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(
11604
- Link8__default.default,
11761
+ ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21__default.default.createElement(Link7__default.default, { href: buildPath("/wishlist"), className: "relative p-2 text-gray-700 hover:text-red-500 transition-colors" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "w-6 h-6" }), wishlistCount > 0 && /* @__PURE__ */ React21__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__ */ React21__default.default.createElement(Link7__default.default, { href: buildPath("/cart"), className: "relative p-2 text-gray-700 hover:text-primary-600 transition-colors" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingCart, { className: "w-6 h-6" }), cart?.cartBody?.items?.length && cart.cartBody?.items?.length > 0 ? /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(
11762
+ "button",
11763
+ {
11764
+ onClick: () => setIsDropdownOpen(!isDropdownOpen),
11765
+ className: "flex items-center gap-2 rounded-full border border-slate-200 bg-white px-3 py-2 hover:bg-slate-50 transition-colors"
11766
+ },
11767
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-7 w-7 items-center justify-center rounded-full bg-primary-100 text-xs font-semibold text-primary-700" }, getInitials(user?.firstname || "", user?.lastname || "")),
11768
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: `h-4 w-4 text-slate-400 transition-transform ${isDropdownOpen ? "rotate-180" : ""}` })
11769
+ ), isDropdownOpen && /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement(
11770
+ "div",
11771
+ {
11772
+ className: "fixed inset-0 z-10",
11773
+ onClick: () => setIsDropdownOpen(false)
11774
+ }
11775
+ ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute right-0 top-full mt-2 w-56 rounded-lg border border-slate-200 bg-white shadow-lg z-20" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "px-3 py-2 border-b border-slate-200 mb-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary truncate" }, user?.firstname, " ", user?.lastname), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-slate-500 truncate" }, user?.email)), /* @__PURE__ */ React21__default.default.createElement(
11776
+ Link7__default.default,
11605
11777
  {
11606
11778
  href: buildPath("/account"),
11607
- className: "p-2 hover:bg-gray-100 rounded-lg transition-colors"
11779
+ onClick: () => setIsDropdownOpen(false),
11780
+ className: "flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm text-slate-700 hover:bg-slate-100 transition-colors"
11608
11781
  },
11609
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.User, { className: "w-6 h-6 text-gray-700" })
11610
- ) : /* @__PURE__ */ React21__default.default.createElement(
11611
- Link8__default.default,
11782
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.User, { className: "h-4 w-4" }),
11783
+ "My Account"
11784
+ ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "my-1 border-t border-slate-200" }), /* @__PURE__ */ React21__default.default.createElement(
11785
+ "button",
11786
+ {
11787
+ onClick: handleLogout,
11788
+ disabled: isLoggingOut,
11789
+ className: "flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm text-red-600 hover:bg-red-50 transition-colors disabled:opacity-50"
11790
+ },
11791
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.LogOut, { className: "h-4 w-4" }),
11792
+ isLoggingOut ? "Signing out..." : "Sign Out"
11793
+ ))))) : /* @__PURE__ */ React21__default.default.createElement(
11794
+ Link7__default.default,
11612
11795
  {
11613
11796
  href: buildPath("/login"),
11614
11797
  className: "hidden sm:block px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors font-medium"
@@ -11630,7 +11813,7 @@ function Header() {
11630
11813
  className: "lg:hidden overflow-hidden border-t border-gray-200"
11631
11814
  },
11632
11815
  /* @__PURE__ */ React21__default.default.createElement("nav", { className: "flex flex-col gap-1 py-2" }, navLinks.map((link) => /* @__PURE__ */ React21__default.default.createElement(
11633
- Link8__default.default,
11816
+ Link7__default.default,
11634
11817
  {
11635
11818
  key: link.href,
11636
11819
  href: link.href,
@@ -11639,7 +11822,7 @@ function Header() {
11639
11822
  },
11640
11823
  link.label
11641
11824
  )), !isAuthenticated && /* @__PURE__ */ React21__default.default.createElement(
11642
- Link8__default.default,
11825
+ Link7__default.default,
11643
11826
  {
11644
11827
  href: buildPath("/login"),
11645
11828
  onClick: () => setIsMobileMenuOpen(false),
@@ -11678,21 +11861,21 @@ function Footer() {
11678
11861
  ]
11679
11862
  };
11680
11863
  return /* @__PURE__ */ React21__default.default.createElement("footer", { className: "bg-gray-900 text-gray-300" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "lg:col-span-2" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-2xl font-bold text-white mb-4" }, config.storeName), /* @__PURE__ */ React21__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__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Mail, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "support@", config.storeName.toLowerCase().replace(/\s+/g, ""), ".com")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Phone, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "+1 (555) 123-4567")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.MapPin, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "123 Store Street, City, Country")))), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Shop"), /* @__PURE__ */ React21__default.default.createElement("ul", { className: "space-y-2" }, footerLinks.shop.map((link) => /* @__PURE__ */ React21__default.default.createElement("li", { key: link.href }, /* @__PURE__ */ React21__default.default.createElement(
11681
- Link8__default.default,
11864
+ Link7__default.default,
11682
11865
  {
11683
11866
  href: link.href,
11684
11867
  className: "hover:text-primary-500 transition-colors"
11685
11868
  },
11686
11869
  link.label
11687
11870
  ))))), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Account"), /* @__PURE__ */ React21__default.default.createElement("ul", { className: "space-y-2" }, footerLinks.account.map((link) => /* @__PURE__ */ React21__default.default.createElement("li", { key: link.href }, /* @__PURE__ */ React21__default.default.createElement(
11688
- Link8__default.default,
11871
+ Link7__default.default,
11689
11872
  {
11690
11873
  href: link.href,
11691
11874
  className: "hover:text-primary-500 transition-colors"
11692
11875
  },
11693
11876
  link.label
11694
11877
  ))))), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Support"), /* @__PURE__ */ React21__default.default.createElement("ul", { className: "space-y-2" }, footerLinks.support.map((link) => /* @__PURE__ */ React21__default.default.createElement("li", { key: link.href }, /* @__PURE__ */ React21__default.default.createElement(
11695
- Link8__default.default,
11878
+ Link7__default.default,
11696
11879
  {
11697
11880
  href: link.href,
11698
11881
  className: "hover:text-primary-500 transition-colors"
@@ -11729,7 +11912,6 @@ exports.Button = Button;
11729
11912
  exports.CartItem = CartItem;
11730
11913
  exports.CartProvider = CartProvider;
11731
11914
  exports.CartScreen = CartScreen;
11732
- exports.CategoriesScreen = CategoriesScreen;
11733
11915
  exports.CheckoutScreen = CheckoutScreen;
11734
11916
  exports.CurrentOrdersScreen = CurrentOrdersScreen;
11735
11917
  exports.EcommerceProvider = EcommerceProvider;