hey-pharmacist-ecommerce 1.1.11 → 1.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -6799,7 +6799,24 @@ function CartProvider({ children }) {
6799
6799
  const addToCart = async (productId, quantity = 1, variantId) => {
6800
6800
  setIsLoading(true);
6801
6801
  try {
6802
- const response = await new CartApi(getApiConfiguration()).handleUserCart({ items: [{ productVariantId: variantId || productId, quantity }] });
6802
+ const currentItems = cart?.cartBody?.items || [];
6803
+ const targetVariantId = variantId || productId;
6804
+ const existingItemIndex = currentItems.findIndex(
6805
+ (item) => item.productVariantId === targetVariantId
6806
+ );
6807
+ const items = [...currentItems];
6808
+ if (existingItemIndex >= 0) {
6809
+ items[existingItemIndex] = {
6810
+ ...items[existingItemIndex],
6811
+ quantity: (items[existingItemIndex].quantity || 0) + quantity
6812
+ };
6813
+ } else {
6814
+ items.push({
6815
+ productVariantId: targetVariantId,
6816
+ quantity
6817
+ });
6818
+ }
6819
+ const response = await new CartApi(getApiConfiguration()).handleUserCart({ items });
6803
6820
  setCart(response.data);
6804
6821
  sonner.toast.success("Added to cart!");
6805
6822
  } catch (error) {
@@ -6812,7 +6829,17 @@ function CartProvider({ children }) {
6812
6829
  const updateQuantity = async (productId, quantity) => {
6813
6830
  setIsLoading(true);
6814
6831
  try {
6815
- const response = await new CartApi(getApiConfiguration()).handleUserCart({ items: [{ productVariantId: productId, quantity }] });
6832
+ const currentItems = cart?.cartBody?.items || [];
6833
+ const items = currentItems.map((item) => {
6834
+ if (item.productVariantId === productId) {
6835
+ return {
6836
+ ...item,
6837
+ quantity
6838
+ };
6839
+ }
6840
+ return item;
6841
+ });
6842
+ const response = await new CartApi(getApiConfiguration()).handleUserCart({ items });
6816
6843
  setCart(response.data);
6817
6844
  } catch (error) {
6818
6845
  sonner.toast.error(error.response?.data?.message || "Failed to update cart");
@@ -6824,7 +6851,9 @@ function CartProvider({ children }) {
6824
6851
  const removeFromCart = async (productId) => {
6825
6852
  setIsLoading(true);
6826
6853
  try {
6827
- const response = await new CartApi(getApiConfiguration()).handleUserCart({ items: [{ productVariantId: productId, quantity: 0 }] });
6854
+ const currentItems = cart?.cartBody?.items || [];
6855
+ const items = currentItems.filter((item) => item.productVariantId !== productId);
6856
+ const response = await new CartApi(getApiConfiguration()).handleUserCart({ items });
6828
6857
  setCart(response.data);
6829
6858
  } catch (error) {
6830
6859
  sonner.toast.error(error.response?.data?.message || "Failed to remove from cart");
@@ -7090,8 +7119,11 @@ function ProductCard({
7090
7119
  const { buildPath } = useBasePath();
7091
7120
  const [isFavorite, setIsFavorite] = React21.useState(isFavorited);
7092
7121
  const { addToWishlist, removeFromWishlist, isInWishlist } = useWishlist();
7122
+ const { addToCart, isLoading: isAddingToCart } = useCart();
7093
7123
  const [isHovered, setIsHovered] = React21.useState(false);
7094
7124
  const [isImageLoaded, setIsImageLoaded] = React21.useState(false);
7125
+ const [selectedVariantImage, setSelectedVariantImage] = React21.useState(null);
7126
+ const [selectedVariantId, setSelectedVariantId] = React21.useState(null);
7095
7127
  const handleImageLoad = React21.useCallback(() => {
7096
7128
  setIsImageLoaded(true);
7097
7129
  }, []);
@@ -7122,22 +7154,51 @@ function ProductCard({
7122
7154
  React21.useEffect(() => {
7123
7155
  setIsFavorite(isInWishlist(product?._id || "") || isFavorited);
7124
7156
  }, [isFavorited, isInWishlist, product?._id]);
7157
+ React21.useEffect(() => {
7158
+ setSelectedVariantImage(null);
7159
+ setSelectedVariantId(null);
7160
+ setIsImageLoaded(false);
7161
+ }, [product._id]);
7125
7162
  const handleKeyDown = (e) => {
7126
7163
  if (e.key === "Enter" || e.key === " ") {
7127
7164
  e.preventDefault();
7128
7165
  handleCardClick(e);
7129
7166
  }
7130
7167
  };
7131
- React21.useMemo(() => {
7168
+ const variantImages = React21.useMemo(() => {
7169
+ if (!product.productVariants || product.productVariants.length === 0) {
7170
+ return [];
7171
+ }
7172
+ return product.productVariants.filter((variant) => variant.productMedia && variant.productMedia.length > 0).map((variant) => ({
7173
+ variantId: variant.id || variant._id,
7174
+ variantName: variant.name,
7175
+ image: variant.productMedia[0].file,
7176
+ color: variant.attribute?.color || variant.attribute?.Color || null
7177
+ }));
7178
+ }, [product.productVariants]);
7179
+ const selectedVariant = React21.useMemo(() => {
7180
+ if (!selectedVariantId || !product.productVariants) return null;
7181
+ return product.productVariants.find(
7182
+ (variant) => (variant.id || variant._id) === selectedVariantId
7183
+ );
7184
+ }, [selectedVariantId, product.productVariants]);
7185
+ const displayName = React21.useMemo(() => {
7186
+ return selectedVariant?.name || product.name;
7187
+ }, [selectedVariant, product.name]);
7188
+ const imageSource = React21.useMemo(() => {
7189
+ const src = selectedVariantImage || product.productMedia?.[0]?.file || "/placeholder-product.jpg";
7132
7190
  return {
7133
- src: product.productMedia?.[0]?.file || "/placeholder-product.jpg",
7191
+ src,
7134
7192
  alt: product.name || "Product image"
7135
7193
  };
7136
- }, [product.productMedia, product.name]);
7194
+ }, [product.productMedia, product.name, selectedVariantImage]);
7195
+ React21.useEffect(() => {
7196
+ setIsImageLoaded(false);
7197
+ }, [imageSource.src]);
7137
7198
  return /* @__PURE__ */ React21__default.default.createElement(
7138
7199
  framerMotion.motion.article,
7139
7200
  {
7140
- 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 h-[420px] flex-col",
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",
7141
7202
  whileHover: { y: -4 },
7142
7203
  onMouseEnter: () => setIsHovered(true),
7143
7204
  onMouseLeave: () => setIsHovered(false),
@@ -7147,7 +7208,7 @@ function ProductCard({
7147
7208
  onClick: handleCardClick,
7148
7209
  onKeyDown: handleKeyDown
7149
7210
  },
7150
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative h-48 w-full overflow-hidden bg-gray-50" }, /* @__PURE__ */ React21__default.default.createElement(framerMotion.AnimatePresence, null, !isImageLoaded && /* @__PURE__ */ React21__default.default.createElement(
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(
7151
7212
  framerMotion.motion.div,
7152
7213
  {
7153
7214
  className: "absolute inset-0 bg-gray-200 animate-pulse",
@@ -7155,16 +7216,18 @@ function ProductCard({
7155
7216
  exit: { opacity: 0 },
7156
7217
  transition: { duration: 0.2 }
7157
7218
  }
7158
- )), product.productMedia?.[0]?.file && /* @__PURE__ */ React21__default.default.createElement(
7219
+ )), /* @__PURE__ */ React21__default.default.createElement(
7159
7220
  Image3__default.default,
7160
7221
  {
7161
- src: product.productMedia?.[0]?.file || "/placeholder-product.jpg",
7162
- alt: product.name || "Product image",
7222
+ src: imageSource.src,
7223
+ alt: imageSource.alt,
7163
7224
  fill: true,
7164
7225
  className: `h-full w-full object-cover object-center transition-opacity duration-300 ${product.inventoryCount === 0 ? "opacity-60" : ""} ${isImageLoaded ? "opacity-100" : "opacity-0"}`,
7165
7226
  sizes: "(max-width: 640px) 100vw, (max-width: 768px) 50vw, 33vw",
7166
7227
  priority: false,
7167
- onLoad: handleImageLoad
7228
+ onLoad: handleImageLoad,
7229
+ onError: () => setIsImageLoaded(true),
7230
+ key: imageSource.src
7168
7231
  }
7169
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(
7170
7233
  framerMotion.motion.span,
@@ -7189,51 +7252,80 @@ function ProductCard({
7189
7252
  {
7190
7253
  type: "button",
7191
7254
  onClick: handleFavorite,
7192
- className: `absolute top-2 right-2 p-2 rounded-full z-10 transition-colors bg-white/90 backdrop-blur-sm shadow-md hover:shadow-lg ${isFavorite ? "text-red-500" : "text-primary-600 hover:text-red-500"} ${isHovered || isFavorite ? "opacity-100" : "opacity-0 group-hover:opacity-100"}`,
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",
7193
7256
  whileHover: { scale: 1.1 },
7194
7257
  whileTap: { scale: 0.95 },
7195
7258
  "aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
7196
7259
  },
7197
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: `w-5 h-5 ${isFavorite ? "fill-current" : ""}` })
7260
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: `w-5 h-5 ${isFavorite ? "fill-red-500 text-red-500" : ""}` })
7198
7261
  )),
7199
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")),
7200
- showFavoriteButton && /* @__PURE__ */ React21__default.default.createElement(
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(
7201
7264
  "button",
7202
7265
  {
7266
+ key: variant.variantId || index,
7203
7267
  type: "button",
7204
- onClick: handleFavorite,
7205
- className: `absolute top-2 right-2 p-2 rounded-full transition-colors ${isFavorite ? "text-red-500" : "text-gray-400 hover:text-red-500"}`,
7206
- "aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
7268
+ onClick: (e) => {
7269
+ e.stopPropagation();
7270
+ if (selectedVariantId === variant.variantId) {
7271
+ setSelectedVariantImage(null);
7272
+ setSelectedVariantId(null);
7273
+ } else {
7274
+ setSelectedVariantImage(variant.image);
7275
+ setSelectedVariantId(variant.variantId || null);
7276
+ }
7277
+ setIsImageLoaded(false);
7278
+ },
7279
+ className: `relative w-8 h-8 rounded-full overflow-hidden border-2 transition-all ${selectedVariantId === variant.variantId ? "border-primary-500 ring-2 ring-primary-200" : "border-gray-200 hover:border-primary-300"}`,
7280
+ "aria-label": `Select ${variant.color || "variant"} color`
7207
7281
  },
7208
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: `w-5 h-5 ${isFavorite ? "fill-current" : ""}` })
7209
- ),
7210
- /* @__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-2" }, 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" }, product.name), product?.sku && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-gray-400 mt-1" }, "SKU: ", product.sku)), /* @__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)))),
7282
+ /* @__PURE__ */ React21__default.default.createElement(
7283
+ Image3__default.default,
7284
+ {
7285
+ src: variant.image,
7286
+ alt: variant.color || `Variant ${index + 1}`,
7287
+ fill: true,
7288
+ className: "object-cover",
7289
+ sizes: "32px"
7290
+ }
7291
+ )
7292
+ )))),
7211
7293
  /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-auto p-4 pt-0" }, /* @__PURE__ */ React21__default.default.createElement(
7212
7294
  "button",
7213
7295
  {
7214
7296
  type: "button",
7215
- onClick: (e) => {
7297
+ onClick: async (e) => {
7216
7298
  e.stopPropagation();
7217
- router.push(buildPath(`/products/${product._id}`));
7299
+ if (!selectedVariantId && variantImages.length > 0) {
7300
+ sonner.toast.error("Please select a variant");
7301
+ return;
7302
+ }
7303
+ try {
7304
+ await addToCart(
7305
+ product._id || product.id,
7306
+ 1,
7307
+ selectedVariantId || void 0
7308
+ );
7309
+ } catch (error) {
7310
+ console.error("Failed to add to cart", error);
7311
+ }
7218
7312
  },
7219
- className: `w-full flex items-center justify-center rounded-md px-3 py-2 text-sm font-medium bg-primary-600 hover:bg-primary-700 text-white`
7313
+ 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"
7220
7315
  },
7221
- "View Product"
7222
- ), showFavoriteButton && /* @__PURE__ */ React21__default.default.createElement(
7316
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingCart, { className: "h-4 w-4" }),
7317
+ "Add to Cart"
7318
+ ), /* @__PURE__ */ React21__default.default.createElement(
7223
7319
  "button",
7224
7320
  {
7225
7321
  type: "button",
7226
- onClick: handleFavorite,
7227
- className: "mt-2 w-full flex items-center justify-center rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-primary-600 hover:bg-gray-50",
7228
- "aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
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"
7229
7327
  },
7230
- /* @__PURE__ */ React21__default.default.createElement(
7231
- lucideReact.Heart,
7232
- {
7233
- className: `mr-2 h-4 w-4 ${isFavorite ? "fill-red-500 text-red-500" : "text-primary-600"}`
7234
- }
7235
- ),
7236
- isFavorite ? "Saved" : "Save for later"
7328
+ "View More"
7237
7329
  ))
7238
7330
  );
7239
7331
  }
@@ -7445,8 +7537,12 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7445
7537
  max: ""
7446
7538
  });
7447
7539
  const [expandedCategories, setExpandedCategories] = React21.useState({});
7540
+ const [expandedFilterSections, setExpandedFilterSections] = React21.useState({
7541
+ category: true
7542
+ // Category section starts expanded
7543
+ });
7448
7544
  const { products, isLoading, pagination } = useProducts(filters, page, 20);
7449
- const { categories } = useCategories();
7545
+ const { categories, isLoading: isLoadingCategories } = useCategories();
7450
7546
  const handleSearch = (e) => {
7451
7547
  e.preventDefault();
7452
7548
  if (searchQuery.trim()) {
@@ -7516,7 +7612,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7516
7612
  });
7517
7613
  return { newArrivals: newArrivals2, inStockCount };
7518
7614
  }, [products]);
7519
- const insightCards = React21.useMemo(
7615
+ React21.useMemo(
7520
7616
  () => [
7521
7617
  {
7522
7618
  id: "new",
@@ -7559,8 +7655,11 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7559
7655
  const thirtyDaysAgo = Date.now() - 30 * 24 * 60 * 60 * 1e3;
7560
7656
  items = items.filter((p) => new Date(p.createdAt).getTime() >= thirtyDaysAgo);
7561
7657
  }
7658
+ if (filters.brand) {
7659
+ items = items.filter((p) => p.brand && p.brand.trim().toLowerCase() === filters.brand.toLowerCase());
7660
+ }
7562
7661
  return items;
7563
- }, [isLoading, products, filters.tags, filters.newArrivals]);
7662
+ }, [isLoading, products, filters.tags, filters.newArrivals, filters.brand]);
7564
7663
  const sortedProducts = React21.useMemo(() => {
7565
7664
  if (isLoading) {
7566
7665
  return filteredProducts;
@@ -7580,14 +7679,23 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7580
7679
  }
7581
7680
  }, [isLoading, filteredProducts, sortOption]);
7582
7681
  const displayedProducts = sortedProducts;
7583
- const quickSearches = React21.useMemo(() => {
7682
+ const availableBrands = React21.useMemo(() => {
7683
+ const brandSet = /* @__PURE__ */ new Set();
7684
+ products.forEach((product) => {
7685
+ if (product.brand && product.brand.trim()) {
7686
+ brandSet.add(product.brand.trim());
7687
+ }
7688
+ });
7689
+ return Array.from(brandSet).sort();
7690
+ }, [products]);
7691
+ React21.useMemo(() => {
7584
7692
  const counts = /* @__PURE__ */ new Map();
7585
7693
  products.forEach((p) => {
7586
7694
  (p.tags || []).forEach((t) => counts.set(t, (counts.get(t) || 0) + 1));
7587
7695
  });
7588
7696
  return Array.from(counts.entries()).sort((a, b) => b[1] - a[1]).slice(0, 4).map(([tag]) => tag);
7589
7697
  }, [products]);
7590
- const handleQuickSearch = React21.useCallback((term) => {
7698
+ React21.useCallback((term) => {
7591
7699
  setSearchQuery("");
7592
7700
  setFilters((current) => ({
7593
7701
  ...current,
@@ -7643,6 +7751,13 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7643
7751
  });
7644
7752
  setPage(1);
7645
7753
  }, []);
7754
+ const handleClearCategory = React21.useCallback(() => {
7755
+ setFilters((current) => {
7756
+ const { category, subCategory, ...rest } = current;
7757
+ return rest;
7758
+ });
7759
+ setPage(1);
7760
+ }, []);
7646
7761
  const handleClearFilters = React21.useCallback(() => {
7647
7762
  setFilters({});
7648
7763
  setSearchQuery("");
@@ -7705,6 +7820,23 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7705
7820
  });
7706
7821
  setPage(1);
7707
7822
  }, []);
7823
+ const handleBrandChange = React21.useCallback((brand) => {
7824
+ setFilters((current) => {
7825
+ if (current.brand === brand) {
7826
+ const { brand: _, ...rest } = current;
7827
+ return rest;
7828
+ }
7829
+ return { ...current, brand };
7830
+ });
7831
+ setPage(1);
7832
+ }, []);
7833
+ const handleRemoveBrand = React21.useCallback(() => {
7834
+ setFilters((current) => {
7835
+ const { brand, ...rest } = current;
7836
+ return rest;
7837
+ });
7838
+ setPage(1);
7839
+ }, []);
7708
7840
  const handlePriceRangeSelect = React21.useCallback(
7709
7841
  (value) => {
7710
7842
  const range = priceRanges.find((item) => item.value === value);
@@ -7779,7 +7911,8 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7779
7911
  minPrice,
7780
7912
  maxPrice,
7781
7913
  tags,
7782
- newArrivals
7914
+ newArrivals,
7915
+ brand: brandFilter
7783
7916
  } = filters;
7784
7917
  const activeFilterChips = React21.useMemo(() => {
7785
7918
  const chips = [];
@@ -7853,6 +7986,13 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7853
7986
  onRemove: handleToggleNewArrivals
7854
7987
  });
7855
7988
  }
7989
+ if (brandFilter) {
7990
+ chips.push({
7991
+ key: "brand",
7992
+ label: `Brand: ${brandFilter}`,
7993
+ onRemove: handleRemoveBrand
7994
+ });
7995
+ }
7856
7996
  return chips;
7857
7997
  }, [
7858
7998
  categories,
@@ -7864,53 +8004,87 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7864
8004
  handleRemovePrice,
7865
8005
  handleRemoveSearch,
7866
8006
  handleRemoveTag,
8007
+ handleRemoveBrand,
7867
8008
  inStockOnly,
7868
8009
  maxPrice,
7869
8010
  minPrice,
7870
8011
  searchFilter,
7871
8012
  tags,
7872
- newArrivals
8013
+ newArrivals,
8014
+ brandFilter
7873
8015
  ]);
7874
8016
  const hasActiveFilters = activeFilterChips.length > 0;
7875
8017
  const isCustomPriceDirty = customPrice.min.trim() !== "" || customPrice.max.trim() !== "";
7876
- const renderFiltersPanel = () => /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-8" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start justify-between gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Refine results"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-1 text-sm text-gray-500" }, "Filter by category, price, and availability to find the perfect fit faster.")), hasActiveFilters && /* @__PURE__ */ React21__default.default.createElement(
8018
+ const toggleFilterSection = React21.useCallback((section) => {
8019
+ setExpandedFilterSections((prev) => ({
8020
+ ...prev,
8021
+ [section]: !prev[section]
8022
+ }));
8023
+ }, []);
8024
+ const getCategoryIconForFilter = (categoryName2) => {
8025
+ const name = categoryName2.toLowerCase();
8026
+ if (name.includes("scrub") || name.includes("uniform")) return lucideReact.Shirt;
8027
+ if (name.includes("vitamin") || name.includes("supplement")) return lucideReact.Pill;
8028
+ if (name.includes("medicine") || name.includes("medication")) return lucideReact.Box;
8029
+ if (name.includes("care") || name.includes("personal")) return lucideReact.Heart;
8030
+ return lucideReact.Package;
8031
+ };
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(
8033
+ "input",
8034
+ {
8035
+ type: "text",
8036
+ placeholder: "Search...",
8037
+ value: searchQuery,
8038
+ 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"
8040
+ }
8041
+ ))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement(
7877
8042
  "button",
7878
8043
  {
7879
8044
  type: "button",
7880
- onClick: handleClearFilters,
7881
- className: "text-sm font-semibold text-primary-600 hover:text-primary-700"
8045
+ onClick: () => toggleFilterSection("category"),
8046
+ className: "flex w-full items-center justify-between text-sm font-medium text-slate-600"
7882
8047
  },
7883
- "Clear all"
7884
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Categories"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, sortedCategories.length === 0 && /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm text-gray-500" }, "No categories available yet."), sortedCategories.map((category) => {
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"}`
8056
+ },
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) => {
7885
8060
  const isCategoryActive = categoryFilter === category.id;
7886
8061
  const isExpanded = !!expandedCategories[category.id];
7887
- return /* @__PURE__ */ React21__default.default.createElement("div", { key: category.id, className: "rounded-xl border-gray-100 bg-white/50" }, /* @__PURE__ */ React21__default.default.createElement(
7888
- "div",
8062
+ 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(
8064
+ "button",
7889
8065
  {
7890
- role: "button",
7891
- tabIndex: 0,
8066
+ type: "button",
7892
8067
  onClick: () => {
7893
8068
  if (!isExpanded) toggleCategoryExpand(category.id ?? "");
7894
8069
  handleCategoryChange(category.id ?? "");
7895
8070
  },
7896
- className: `flex w-full items-center justify-between rounded-xl px-3 py-2 text-sm font-medium transition ${isCategoryActive ? "text-primary-700 bg-primary-50" : "text-gray-700 hover:text-primary-700 hover:bg-primary-50/50"}`
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"}`
7897
8072
  },
7898
- /* @__PURE__ */ React21__default.default.createElement("span", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-medium" }, category.name), category.productCount > 0 && /* @__PURE__ */ React21__default.default.createElement("span", { className: `ml-1 rounded-full bg-gray-100 px-2 py-0.5 text-xs ${isCategoryActive ? "text-primary-700" : "text-gray-500"}` }, category.productCount)),
7899
- /* @__PURE__ */ React21__default.default.createElement(
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(
7900
8076
  "button",
7901
8077
  {
7902
8078
  type: "button",
7903
8079
  onClick: (e) => {
7904
- e.preventDefault();
7905
8080
  e.stopPropagation();
7906
8081
  toggleCategoryExpand(category.id ?? "");
7907
8082
  },
7908
- className: "rounded-md p-1 hover:bg-gray-100",
7909
- "aria-label": isExpanded ? "Collapse" : "Expand"
8083
+ className: "p-1"
7910
8084
  },
7911
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: `h-4 w-4 transition-transform ${isExpanded ? "rotate-180 text-primary-600" : "rotate-0 text-gray-400"}` })
8085
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronDown, { className: `h-4 w-4 transition-transform ${isExpanded ? "rotate-180" : ""} ${isCategoryActive ? "text-white" : "text-slate-400"}` })
7912
8086
  )
7913
- ), isExpanded && Array.isArray(category.categorySubCategories) && category.categorySubCategories.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-1 border-gray-100 px-2 pb-2 pl-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "divide-y divide-gray-100" }, category.categorySubCategories.map((sub) => {
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) => {
7914
8088
  const isSubActive = subCategoryFilter === sub.id;
7915
8089
  return /* @__PURE__ */ React21__default.default.createElement(
7916
8090
  "button",
@@ -7918,12 +8092,61 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7918
8092
  key: sub.id,
7919
8093
  type: "button",
7920
8094
  onClick: () => handleSubCategoryChange(category.id ?? "", sub.id),
7921
- className: `block w-full px-2 py-2 text-sm text-start transition ${isSubActive ? "text-primary-700" : "text-gray-600 hover:text-primary-700 "}`
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"}`
7922
8096
  },
7923
8097
  sub.name
7924
8098
  );
7925
- }))));
7926
- }))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Price"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, priceRanges.map((range) => {
8099
+ })));
8100
+ }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement(
8101
+ "button",
8102
+ {
8103
+ type: "button",
8104
+ onClick: () => toggleFilterSection("brand"),
8105
+ className: "flex w-full items-center justify-between text-sm font-medium text-slate-600"
8106
+ },
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) => {
8110
+ const isSelected = brandFilter === brand;
8111
+ return /* @__PURE__ */ React21__default.default.createElement(
8112
+ "button",
8113
+ {
8114
+ key: brand,
8115
+ type: "button",
8116
+ 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"}`
8118
+ },
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" })
8121
+ );
8122
+ }))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement(
8123
+ "button",
8124
+ {
8125
+ type: "button",
8126
+ onClick: () => toggleFilterSection("availability"),
8127
+ className: "flex w-full items-center justify-between text-sm font-medium text-slate-600"
8128
+ },
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" })
8131
+ ), expandedFilterSections.availability && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21__default.default.createElement(
8132
+ "button",
8133
+ {
8134
+ type: "button",
8135
+ 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"}`
8137
+ },
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(
8141
+ "button",
8142
+ {
8143
+ type: "button",
8144
+ onClick: () => toggleFilterSection("price"),
8145
+ className: "flex w-full items-center justify-between text-sm font-medium text-slate-600"
8146
+ },
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) => {
7927
8150
  const isActive = selectedPriceRange === range.value;
7928
8151
  return /* @__PURE__ */ React21__default.default.createElement(
7929
8152
  "button",
@@ -7931,27 +8154,29 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7931
8154
  type: "button",
7932
8155
  key: range.value,
7933
8156
  onClick: () => handlePriceRangeSelect(range.value),
7934
- className: `rounded-full border px-3 py-1.5 text-sm font-medium transition ${isActive ? "border-secondary-600 bg-secondary-600 text-white shadow-lg shadow-secondary-500/30" : "border-gray-200 bg-white text-gray-600 hover:border-secondary-300 hover:text-secondary-600"}`
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"}`
7935
8158
  },
7936
8159
  range.label
7937
8160
  );
7938
- })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-2 gap-3" }, /* @__PURE__ */ React21__default.default.createElement(
8161
+ })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ React21__default.default.createElement(
7939
8162
  Input,
7940
8163
  {
7941
8164
  type: "number",
7942
8165
  min: "0",
7943
- placeholder: "Custom min",
8166
+ placeholder: "Min",
7944
8167
  value: customPrice.min,
7945
- onChange: (event) => setCustomPrice((current) => ({ ...current, min: event.target.value }))
8168
+ onChange: (event) => setCustomPrice((current) => ({ ...current, min: event.target.value })),
8169
+ className: "text-sm"
7946
8170
  }
7947
8171
  ), /* @__PURE__ */ React21__default.default.createElement(
7948
8172
  Input,
7949
8173
  {
7950
8174
  type: "number",
7951
8175
  min: "0",
7952
- placeholder: "Custom max",
8176
+ placeholder: "Max",
7953
8177
  value: customPrice.max,
7954
- onChange: (event) => setCustomPrice((current) => ({ ...current, max: event.target.value }))
8178
+ onChange: (event) => setCustomPrice((current) => ({ ...current, max: event.target.value })),
8179
+ className: "text-sm"
7955
8180
  }
7956
8181
  )), /* @__PURE__ */ React21__default.default.createElement(
7957
8182
  "button",
@@ -7959,118 +8184,91 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
7959
8184
  type: "button",
7960
8185
  onClick: applyCustomPrice,
7961
8186
  disabled: !isCustomPriceDirty,
7962
- className: "w-full rounded-xl border border-primary-500 bg-primary-500/10 px-4 py-2.5 text-sm font-semibold text-primary-700 transition hover:bg-primary-500/20 disabled:cursor-not-allowed disabled:border-gray-200 disabled:text-gray-400"
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"
7963
8188
  },
7964
- "Apply price range"
7965
- )), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Availability"), /* @__PURE__ */ React21__default.default.createElement(
7966
- "button",
7967
- {
7968
- type: "button",
7969
- onClick: handleToggleStock,
7970
- className: `flex w-full items-center justify-between rounded-xl border px-4 py-3 text-sm font-medium transition ${inStockOnly ? "border-primary-500 bg-primary-50 text-primary-700" : "border-gray-200 bg-white text-gray-600 hover:border-primary-300 hover:text-primary-600"}`
7971
- },
7972
- /* @__PURE__ */ React21__default.default.createElement("span", null, "In stock only"),
7973
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-4 w-4 text-primary-500" })
7974
- ), /* @__PURE__ */ React21__default.default.createElement(
7975
- "button",
7976
- {
7977
- type: "button",
7978
- onClick: handleToggleNewArrivals,
7979
- className: `mt-2 flex w-full items-center justify-between rounded-xl border px-4 py-3 text-sm font-medium transition ${newArrivals ? "border-secondary-500 bg-secondary-50 text-secondary-700" : "border-gray-200 bg-white text-gray-600 hover:border-secondary-300 hover:text-secondary-600"}`
7980
- },
7981
- /* @__PURE__ */ React21__default.default.createElement("span", null, "New arrivals (last 30 days)"),
7982
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-4 w-4 text-secondary-500" })
7983
- ))));
7984
- 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" }, /* @__PURE__ */ React21__default.default.createElement(
7985
- "div",
7986
- {
7987
- className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]",
7988
- "aria-hidden": "true"
7989
- }
7990
- ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_bottom_right,_rgba(94,234,212,0.35),_transparent_55%)] opacity-60" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative container mx-auto px-4 py-24" }, /* @__PURE__ */ React21__default.default.createElement(
8189
+ "Apply"
8190
+ )))));
8191
+ const displayCategories = React21.useMemo(() => {
8192
+ return topCategories.slice(0, 5);
8193
+ }, [topCategories]);
8194
+ const getCategoryIcon = (categoryName2) => {
8195
+ const name = categoryName2.toLowerCase();
8196
+ if (name.includes("scrub") || name.includes("uniform")) return lucideReact.Shirt;
8197
+ if (name.includes("vitamin") || name.includes("supplement")) return lucideReact.Pill;
8198
+ if (name.includes("medicine") || name.includes("medication")) return lucideReact.Box;
8199
+ if (name.includes("care") || name.includes("personal")) return lucideReact.Heart;
8200
+ return lucideReact.Package;
8201
+ };
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(
7991
8203
  framerMotion.motion.div,
7992
8204
  {
7993
8205
  initial: { opacity: 0, y: 24 },
7994
8206
  animate: { opacity: 1, y: 0 },
7995
- className: "max-w-3xl space-y-8 text-center md:mx-auto md:text-left"
8207
+ className: "max-w-4xl mx-auto space-y-6 text-center"
7996
8208
  },
7997
- /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-4 py-2 text-sm font-semibold tracking-wide text-white/80 backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-4 w-4" }), "Wellness products, curated for you"),
7998
- /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-6xl" }, "Find pharmacy favorites crafted to keep your family thriving"),
7999
- /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-lg text-white/80 md:text-xl" }, "Explore a modern storefront with real-time inventory, smart filters, and rich product details designed to make healthier choices easier."),
8209
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-center gap-2 mb-4" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Star, { className: "h-5 w-5 text-orange-500 fill-orange-500" }), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm font-semibold uppercase tracking-wider text-orange-500" }, "COMPLETE PHARMACY SHOP")),
8210
+ /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-3xl md:text-4xl font-bold text-slate-900 leading-tight" }, "Medical Supplies & Wellness Products"),
8211
+ /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-base md:text-lg text-slate-600 max-w-2xl mx-auto" }, "From professional scrubs to vitamins, medicines to personal care - everything you need for health and wellness."),
8000
8212
  /* @__PURE__ */ React21__default.default.createElement(
8001
8213
  "form",
8002
8214
  {
8003
8215
  onSubmit: handleSearch,
8004
- className: "mx-auto max-w-2xl md:mx-0"
8216
+ className: "max-w-2xl mx-auto mt-8"
8005
8217
  },
8006
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React21__default.default.createElement(
8218
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Search, { className: "absolute left-5 top-1/2 -translate-y-1/2 h-5 w-5 text-slate-400 pointer-events-none" }), /* @__PURE__ */ React21__default.default.createElement(
8007
8219
  "input",
8008
8220
  {
8009
8221
  type: "search",
8010
- placeholder: "Search for products, categories, or symptoms...",
8222
+ placeholder: "Search for products, brands, or categories...",
8011
8223
  value: searchQuery,
8012
8224
  onChange: handleInputChange,
8013
8225
  onKeyDown: handleKeyDown,
8014
- className: "flex h-12 w-full rounded-xl border border-white/20 bg-white/10 px-4 py-2 pr-14 text-lg text-white placeholder-white/60 shadow-2xl shadow-primary-900/20 backdrop-blur focus:border-white/30 focus:outline-none focus:ring-2 focus:ring-white/20 disabled:opacity-50",
8226
+ className: "flex h-16 w-full rounded-full border-0 bg-white px-5 pl-14 pr-5 text-base text-slate-900 placeholder-slate-400 shadow-lg focus:outline-none focus:ring-2 focus:ring-primary-500/30 disabled:opacity-50",
8015
8227
  disabled: isSearching
8016
8228
  }
8017
- ), /* @__PURE__ */ React21__default.default.createElement(
8018
- "button",
8019
- {
8020
- type: "submit",
8021
- className: "absolute right-2 top-1/2 -translate-y-1/2 rounded-xl bg-white/20 p-3 text-white transition hover:bg-white/30 disabled:opacity-50",
8022
- disabled: !searchQuery.trim() || isSearching
8023
- },
8024
- isSearching ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-5 w-5 animate-spin rounded-full border-2 border-white border-t-transparent" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.Search, { className: "h-5 w-5" })
8025
8229
  ))
8026
8230
  )
8027
- ), /* @__PURE__ */ React21__default.default.createElement(
8028
- framerMotion.motion.div,
8029
- {
8030
- initial: { opacity: 0, y: 24 },
8031
- animate: { opacity: 1, y: 0 },
8032
- transition: { delay: 0.15 },
8033
- className: "mt-12 flex flex-col gap-6 rounded-3xl border border-white/20 bg-white/10 p-6 backdrop-blur md:flex-row md:items-center md:justify-between"
8034
- },
8035
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, "Explore popular searches"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, quickSearches.map((term) => /* @__PURE__ */ React21__default.default.createElement(
8036
- "button",
8037
- {
8038
- key: term,
8039
- type: "button",
8040
- onClick: () => handleQuickSearch(term),
8041
- className: "rounded-full border border-white/30 bg-white/10 px-4 py-2 text-sm font-medium text-white transition hover:border-white/50 hover:bg-white/20"
8042
- },
8043
- term
8044
- )))),
8045
- topCategories.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3 md:text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, "Trending categories"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap justify-start gap-2 md:justify-end" }, topCategories.map((category) => /* @__PURE__ */ React21__default.default.createElement(
8046
- "button",
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",
8047
8235
  {
8048
- key: category.id,
8049
- type: "button",
8050
- onClick: () => handleCategoryChange(category.id ?? ""),
8051
- className: "rounded-full bg-white/15 px-3 py-1.5 text-sm font-medium text-white transition hover:bg-white/25"
8236
+ key: index,
8237
+ className: "rounded-xl border border-slate-200 bg-white p-8"
8052
8238
  },
8053
- category.name
8054
- ))))
8055
- ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-10 grid gap-4 md:grid-cols-3" }, insightCards.map((card, index) => {
8056
- const Icon = card.icon;
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) => {
8255
+ const Icon = getCategoryIcon(category.name ?? "");
8256
+ const isSelected = categoryFilter === category.id;
8057
8257
  return /* @__PURE__ */ React21__default.default.createElement(
8058
- framerMotion.motion.div,
8258
+ framerMotion.motion.button,
8059
8259
  {
8060
- key: card.id,
8260
+ key: category.id,
8061
8261
  initial: { opacity: 0, y: 20 },
8062
8262
  animate: { opacity: 1, y: 0 },
8063
- transition: { delay: 0.2 + index * 0.05 },
8064
- className: `rounded-2xl border p-5 backdrop-blur ${card.id === "new" && newArrivals ? "border-white/40 bg-white/25 ring-2 ring-white/30" : "border-white/20 bg-white/15"} ${card.id === "new" ? "cursor-pointer hover:bg-white/20" : ""}`,
8065
- onClick: card.id === "new" ? handleToggleNewArrivals : void 0,
8066
- role: card.id === "new" ? "button" : void 0,
8067
- "aria-pressed": card.id === "new" ? newArrivals ? "true" : "false" : void 0,
8068
- title: card.id === "new" ? newArrivals ? "Filter active: showing products from the last 30 days" : "Click to filter products from the last 30 days" : void 0
8263
+ transition: { delay: index * 0.1 },
8264
+ 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"}`
8069
8266
  },
8070
- /* @__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-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, card.label), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-2 text-3xl font-semibold text-white" }, card.value)), /* @__PURE__ */ React21__default.default.createElement("span", { className: "rounded-full bg-white/20 p-3 text-white" }, /* @__PURE__ */ React21__default.default.createElement(Icon, { className: "h-5 w-5" }))),
8071
- /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-3 text-sm text-white/70" }, card.helper)
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")
8072
8270
  );
8073
- })))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative z-10 -mt-12 pb-16" }, /* @__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-3xl border border-gray-100 bg-white p-6 shadow-xl shadow-gray-200/40" }, 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-2xl font-bold text-gray-900" }, "All products"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-1 text-sm text-gray-500" }, "Browse a pharmacy-grade catalogue with smart merchandising and modern UI.")), /* @__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(
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(
8074
8272
  "select",
8075
8273
  {
8076
8274
  value: sortOption,
@@ -8131,7 +8329,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
8131
8329
  className: "text-sm font-semibold text-gray-500 hover:text-gray-700"
8132
8330
  },
8133
8331
  "Reset all"
8134
- ))), /* @__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-3 text-sm text-gray-600 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21__default.default.createElement("span", null, isLoading ? "Loading products..." : `Showing ${displayedProducts.length} of ${pagination.total || displayedProducts.length} products`), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 text-gray-400" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Clock, { className: "h-4 w-4" }), "Updated a moment ago")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6" }, isLoading ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 gap-6 sm:grid-cols-2 xl:grid-cols-3" }, Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(ProductCardSkeleton, { key: index }))) : displayedProducts.length > 0 ? viewMode === "grid" ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 gap-6 sm:grid-cols-2 xl:grid-cols-3" }, displayedProducts.map((product) => /* @__PURE__ */ React21__default.default.createElement("div", { key: product.id, className: "h-full" }, /* @__PURE__ */ React21__default.default.createElement(
8332
+ ))), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6" }, isLoading ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5" }, Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(ProductCardSkeleton, { key: index }))) : displayedProducts.length > 0 ? viewMode === "grid" ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5" }, displayedProducts.map((product) => /* @__PURE__ */ React21__default.default.createElement("div", { key: product.id, className: "h-full" }, /* @__PURE__ */ React21__default.default.createElement(
8135
8333
  ProductCard,
8136
8334
  {
8137
8335
  product,
@@ -8303,6 +8501,16 @@ function ProductDetailScreen({ productId }) {
8303
8501
  url: media.file
8304
8502
  }));
8305
8503
  }
8504
+ if (product?.productMedia?.length) {
8505
+ return product.productMedia.map((media) => ({
8506
+ src: media.file,
8507
+ width: 800,
8508
+ height: 1e3,
8509
+ alt: product?.name || "Product image",
8510
+ ...media,
8511
+ url: media.file
8512
+ }));
8513
+ }
8306
8514
  if (product?.images?.length) {
8307
8515
  return product.images.map((image) => ({
8308
8516
  src: image,
@@ -8365,6 +8573,7 @@ function ProductDetailScreen({ productId }) {
8365
8573
  }, [product?.id]);
8366
8574
  const handleVariantSelect = async (variant) => {
8367
8575
  setSelectedVariant(variant);
8576
+ setActiveImageIndex(0);
8368
8577
  };
8369
8578
  const handleAddToCart = async () => {
8370
8579
  if (!product || !selectedVariant) return;
@@ -8413,76 +8622,45 @@ function ProductDetailScreen({ productId }) {
8413
8622
  if (!product) {
8414
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"))))));
8415
8624
  }
8416
- product.tags && product.tags.length > 0 ? product.tags.slice(0, 6) : ["Pharmacist approved", "Gentle on daily routines", "Backed by real customers"];
8417
- const highlightCards = [
8418
- {
8419
- icon: lucideReact.ShieldCheck,
8420
- title: "Pharmacy grade assurance",
8421
- description: "Sourced from trusted suppliers and reviewed by licensed professionals."
8422
- },
8423
- {
8424
- icon: lucideReact.Truck,
8425
- title: "Fast, cold-chain ready shipping",
8426
- description: "Carefully packed and dispatched within 24 hours on business days."
8427
- },
8428
- {
8429
- icon: lucideReact.Award,
8430
- title: "Loved by patients",
8431
- description: "Average rating 4.8/5 with over 120 verified customer experiences."
8432
- }
8433
- ];
8434
- 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(
8435
- "div",
8436
- {
8437
- className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]",
8438
- "aria-hidden": "true"
8439
- }
8440
- ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_bottom_right,_rgba(255,255,255,0.25),_transparent_55%)] opacity-70" }), /* @__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" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement(
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(
8441
8626
  Button,
8442
8627
  {
8443
8628
  variant: "ghost",
8444
- className: "text-white hover:bg-white/10",
8629
+ className: "text-slate-600 hover:text-slate-900 hover:bg-slate-100",
8445
8630
  onClick: () => router.push(buildPath("/shop"))
8446
8631
  },
8447
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowLeft, { className: "h-5 w-5" }),
8448
- "Continue shopping"
8449
- ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "hidden items-center gap-3 text-sm text-white/80 md:flex" }, /* @__PURE__ */ React21__default.default.createElement(Link8__default.default, { href: buildPath("/"), className: "transition hover:text-white" }, "Home"), /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React21__default.default.createElement(Link8__default.default, { href: buildPath("/shop"), className: "transition hover:text-white" }, "Shop"), /* @__PURE__ */ React21__default.default.createElement(lucideReact.ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React21__default.default.createElement("span", { className: "truncate font-medium text-white" }, product.name))), /* @__PURE__ */ React21__default.default.createElement(
8632
+ /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowLeft, { className: "h-4 w-4 mr-2" }),
8633
+ "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(
8450
8635
  framerMotion.motion.div,
8451
8636
  {
8452
- initial: { opacity: 0, y: 24 },
8453
- animate: { opacity: 1, y: 0 },
8454
- className: "max-w-3xl space-y-4"
8455
- },
8456
- product.category && /* @__PURE__ */ React21__default.default.createElement(
8457
- Badge,
8458
- {
8459
- variant: "secondary",
8460
- className: "bg-white/15 text-white backdrop-blur-sm"
8461
- },
8462
- product.category
8463
- ),
8464
- /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-5xl" }, product.name),
8465
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center gap-3 text-sm text-white/80" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 font-medium text-white" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-4 w-4" }), "Ready to ship today"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 font-medium text-white" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Shield, { className: "h-4 w-4" }), "30-day happiness guarantee"))
8466
- )))), /* @__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,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-10" }, /* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl border border-white bg-white/70 p-6 shadow-xl shadow-primary-100/40 backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-6 lg:grid-cols-[minmax(0,1fr)_220px]" }, /* @__PURE__ */ React21__default.default.createElement(
8467
- framerMotion.motion.div,
8468
- {
8469
- key: variantImages[activeImageIndex],
8637
+ key: selectedVariant?.id || "default",
8470
8638
  initial: { opacity: 0.4, scale: 0.98 },
8471
8639
  animate: { opacity: 1, scale: 1 },
8472
8640
  transition: { duration: 0.35 },
8473
8641
  className: "relative overflow-hidden rounded-3xl bg-slate-100 h-[420px] md:h-[560px]"
8474
8642
  },
8475
- /* @__PURE__ */ React21__default.default.createElement(
8643
+ variantImages.length > 0 && variantImages[activeImageIndex] ? /* @__PURE__ */ React21__default.default.createElement(
8476
8644
  Image3__default.default,
8477
8645
  {
8478
- src: variantImages[activeImageIndex],
8646
+ src: variantImages[activeImageIndex].src || variantImages[activeImageIndex].url || variantImages[activeImageIndex].file,
8479
8647
  alt: currentVariant.name || product.name,
8480
8648
  fill: true,
8481
8649
  priority: true,
8482
8650
  sizes: "(max-width: 1024px) 100vw, 800px",
8483
8651
  className: "object-contain"
8484
8652
  }
8485
- ),
8653
+ ) : product?.productMedia?.[0]?.file ? /* @__PURE__ */ React21__default.default.createElement(
8654
+ Image3__default.default,
8655
+ {
8656
+ src: product.productMedia[0].file,
8657
+ alt: product.name,
8658
+ fill: true,
8659
+ priority: true,
8660
+ sizes: "(max-width: 1024px) 100vw, 800px",
8661
+ className: "object-contain"
8662
+ }
8663
+ ) : null,
8486
8664
  discount > 0 && /* @__PURE__ */ React21__default.default.createElement(
8487
8665
  Badge,
8488
8666
  {
@@ -8501,90 +8679,106 @@ function ProductDetailScreen({ productId }) {
8501
8679
  },
8502
8680
  "Out of Stock"
8503
8681
  )
8504
- ), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-4" }, product?.productVariants?.length > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-4 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "mb-2 text-sm font-semibold uppercase tracking-[0.25em] text-slate-400" }, "Variant"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, product?.productVariants?.map((variant, index) => /* @__PURE__ */ React21__default.default.createElement(
8505
- "button",
8506
- {
8507
- key: variant.id,
8508
- type: "button",
8509
- onClick: () => handleVariantSelect(variant),
8510
- className: `rounded-full px-4 py-2 text-sm font-medium transition ${selectedVariant?.id === variant.id ? "bg-primary-600 text-white" : "bg-slate-100 text-slate-700 hover:bg-slate-200"}`
8511
- },
8512
- variant.name
8513
- )))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-3 gap-3" }, variantImages.map((image, index) => /* @__PURE__ */ React21__default.default.createElement(
8682
+ ), 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(
8514
8683
  "button",
8515
8684
  {
8516
8685
  key: image.src + index,
8517
8686
  type: "button",
8518
8687
  onClick: () => setActiveImageIndex(index),
8519
- className: `relative aspect-square overflow-hidden rounded-2xl border transition ${activeImageIndex === index ? "border-primary-500 shadow-lg shadow-primary-200/60" : "border-transparent hover:border-primary-200"}`
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"}`
8520
8689
  },
8521
8690
  /* @__PURE__ */ React21__default.default.createElement(
8522
8691
  Image3__default.default,
8523
8692
  {
8524
- src: image.src,
8693
+ src: image?.src,
8525
8694
  alt: image.alt || `Product image ${index + 1}`,
8526
8695
  className: "h-full w-full object-cover object-center",
8527
- width: 200,
8528
- height: 200,
8696
+ width: 80,
8697
+ height: 80,
8529
8698
  unoptimized: true
8530
8699
  }
8531
8700
  )
8532
- )))))), /* @__PURE__ */ React21__default.default.createElement("section", { className: "grid gap-6 lg:grid-cols-3" }, highlightCards.map((card) => {
8533
- const Icon = card.icon;
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) => {
8702
+ const isSelected = selectedVariant?.id === variant.id;
8703
+ const variantImage = variant.productMedia?.[0]?.file || product.productMedia?.[0]?.file || product.images?.[0] || "/placeholder-product.jpg";
8534
8704
  return /* @__PURE__ */ React21__default.default.createElement(
8535
- "div",
8705
+ "button",
8536
8706
  {
8537
- key: card.title,
8538
- className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-lg"
8707
+ key: variant.id,
8708
+ type: "button",
8709
+ 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"}`
8539
8711
  },
8540
- /* @__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(Icon, { className: "h-5 w-5" })), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-base font-semibold text-slate-900" }, card.title)),
8541
- /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-3 text-sm leading-relaxed text-slate-600" }, card.description)
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,
8714
+ {
8715
+ src: variantImage,
8716
+ alt: variant.name || "Variant image",
8717
+ fill: true,
8718
+ className: "object-cover",
8719
+ sizes: "48px"
8720
+ }
8721
+ )),
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" })
8542
8724
  );
8543
- })), /* @__PURE__ */ React21__default.default.createElement("section", { className: "grid gap-6 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__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: "h-full rounded-3xl border border-slate-100 bg-gradient-to-br from-primary-50 via-white to-secondary-50 p-8 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-primary-500" }, "Care tips"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "leading-relaxed" }, "Store in a cool, dry place away from direct sunlight. Check packaging for allergen statements."), /* @__PURE__ */ React21__default.default.createElement("p", { className: "leading-relaxed" }, "Consult with your local pharmacist if you are combining with other treatments or have chronic conditions."), /* @__PURE__ */ React21__default.default.createElement("p", { className: "rounded-2xl bg-white/60 p-4 leading-relaxed text-primary-700" }, "Questions? Our care team is on standby \u2014 reach us via chat for tailored support before you checkout.")))), /* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Product insights"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 grid gap-6 md:grid-cols-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/60 p-5" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-500" }, "Availability"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-3 flex items-center gap-2 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Check, { className: "h-4 w-4 text-primary-500" }), product.inStock ? "Available for dispatch today" : "Currently restocking"), product.stock !== void 0 && /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-2 text-xs text-slate-500" }, product.stock > 0 ? `${product.stock} units remaining in inventory` : "Join the waitlist to be notified first")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/60 p-5" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs 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")))))), /* @__PURE__ */ React21__default.default.createElement("aside", { className: "space-y-6 lg:sticky lg:top-24" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-100/40" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-baseline gap-3" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-3xl font-bold text-slate-900" }, selectedVariant ? formatPrice(selectedVariant.finalPrice) : formatPrice(product.price)), 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, "%")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3 rounded-2xl bg-primary-50/80 px-4 py-3 text-sm font-medium text-primary-700" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "h-4 w-4" }), "Pharmacist verified product"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between rounded-2xl border border-slate-200 px-4 py-3" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm font-medium text-slate-600" }, "Qty"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center rounded-full border border-slate-200 bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement(
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(
8544
8726
  "button",
8545
8727
  {
8546
8728
  type: "button",
8547
8729
  onClick: () => setQuantity((current) => Math.max(1, current - 1)),
8548
- className: "rounded-l-full p-2 hover:bg-primary-100/60",
8730
+ className: "px-3 py-2 hover:bg-slate-50",
8549
8731
  "aria-label": "Decrease quantity"
8550
8732
  },
8551
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Minus, { className: "h-4 w-4" })
8552
- ), /* @__PURE__ */ React21__default.default.createElement("span", { className: "w-12 text-center text-sm font-semibold text-slate-700" }, quantity), /* @__PURE__ */ React21__default.default.createElement(
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(
8553
8735
  "button",
8554
8736
  {
8555
8737
  type: "button",
8556
- onClick: () => setQuantity((current) => current + 1),
8557
- className: "rounded-r-full p-2 hover:bg-primary-100/60",
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",
8558
8743
  "aria-label": "Increase quantity"
8559
8744
  },
8560
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Plus, { className: "h-4 w-4" })
8561
- )))), selectedVariant && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-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-green-600 font-medium" }, "In Stock")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 space-x-3" }, /* @__PURE__ */ React21__default.default.createElement(
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(
8562
8747
  Button,
8563
8748
  {
8564
- size: "lg",
8565
- className: "w-full",
8749
+ size: "md",
8750
+ className: "w-full bg-orange-500 hover:bg-orange-600 text-white py-2.5",
8566
8751
  onClick: handleAddToCart,
8567
8752
  isLoading: isAddingToCart,
8568
8753
  disabled: !selectedVariant || selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */
8569
8754
  },
8570
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingCart, { className: "h-5 w-5" }),
8571
- !selectedVariant ? "Select a variant" : selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ ? "Out of Stock" : `Add to Cart`
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"
8572
8757
  ), /* @__PURE__ */ React21__default.default.createElement(
8573
8758
  Button,
8574
8759
  {
8575
- size: "lg",
8760
+ size: "md",
8576
8761
  variant: "outline",
8577
- className: "w-full",
8762
+ className: "w-full py-2.5",
8578
8763
  onClick: handleToggleFavorite
8579
8764
  },
8580
8765
  /* @__PURE__ */ React21__default.default.createElement(
8581
8766
  lucideReact.Heart,
8582
8767
  {
8583
- className: `h-5 w-5 ${isFavorited ? "fill-red-500 text-red-500" : "text-slate-500"}`
8768
+ className: `h-4 w-4 mr-2 ${isFavorited ? "fill-red-500 text-red-500" : "text-slate-500"}`
8584
8769
  }
8585
8770
  ),
8586
8771
  isFavorited ? "Saved" : "Save for later"
8587
- ))), /* @__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.")))), 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: "/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 gap-6 sm:grid-cols-2 lg:grid-cols-4" }, relatedProducts?.map((relatedProduct) => /* @__PURE__ */ React21__default.default.createElement(ProductCard, { key: relatedProduct.id, product: relatedProduct })))))));
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(
8773
+ ProductCard,
8774
+ {
8775
+ key: relatedProduct.id || relatedProduct._id,
8776
+ product: relatedProduct,
8777
+ onClickProduct: (item) => {
8778
+ router.push(buildPath(`/products/${item._id || item.id}`));
8779
+ }
8780
+ }
8781
+ ))))))));
8588
8782
  }
8589
8783
  function CartItem({ item }) {
8590
8784
  const { updateQuantity, removeFromCart } = useCart();
@@ -8602,6 +8796,16 @@ function CartItem({ item }) {
8602
8796
  await removeFromCart(item.productVariantId);
8603
8797
  };
8604
8798
  const itemTotal = item.productVariantData.finalPrice * item.quantity;
8799
+ const unitPrice = item.productVariantData.finalPrice;
8800
+ const attributes = [];
8801
+ if (item.productVariantData.attribute) {
8802
+ if (item.productVariantData.attribute.color) {
8803
+ attributes.push(`Color: ${item.productVariantData.attribute.color}`);
8804
+ }
8805
+ if (item.productVariantData.attribute.size) {
8806
+ attributes.push(`Size: ${item.productVariantData.attribute.size}`);
8807
+ }
8808
+ }
8605
8809
  return /* @__PURE__ */ React21__default.default.createElement(
8606
8810
  framerMotion.motion.div,
8607
8811
  {
@@ -8609,43 +8813,43 @@ function CartItem({ item }) {
8609
8813
  initial: { opacity: 0, y: 20 },
8610
8814
  animate: { opacity: 1, y: 0 },
8611
8815
  exit: { opacity: 0, x: -100 },
8612
- className: "flex gap-4 bg-white p-4 rounded-xl border border-gray-200 hover:border-primary-300 transition-colors"
8816
+ className: "relative bg-white rounded-lg shadow-sm border border-gray-200 p-4"
8613
8817
  },
8614
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-24 h-24 rounded-lg overflow-hidden flex-shrink-0 bg-gray-100" }, /* @__PURE__ */ React21__default.default.createElement(
8818
+ /* @__PURE__ */ React21__default.default.createElement(
8819
+ "button",
8820
+ {
8821
+ onClick: handleRemove,
8822
+ className: "absolute top-4 right-4 p-1 text-gray-400 hover:text-red-600 transition-colors",
8823
+ "aria-label": "Remove item"
8824
+ },
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(
8615
8828
  Image3__default.default,
8616
8829
  {
8617
8830
  src: item.productVariantData.productMedia[0]?.file || "/placeholder-product.jpg",
8618
8831
  alt: item.productVariantData.name,
8619
8832
  fill: true,
8620
- className: "object-cover"
8833
+ className: "object-cover",
8834
+ sizes: "80px"
8621
8835
  }
8622
- )),
8623
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 truncate" }, item.productVariantData.name), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500 mt-1" }, formatPrice(item.productVariantData.finalPrice), " each"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3 mt-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center border-2 border-gray-200 rounded-lg" }, /* @__PURE__ */ React21__default.default.createElement(
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(
8624
8837
  "button",
8625
8838
  {
8626
8839
  onClick: () => handleUpdateQuantity(item.quantity - 1),
8627
- disabled: isUpdating || item.quantity <= 0,
8628
- className: "p-2 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
8840
+ disabled: isUpdating || item.quantity <= 1,
8841
+ className: "p-1 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors rounded"
8629
8842
  },
8630
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Minus, { className: "w-4 h-4" })
8631
- ), /* @__PURE__ */ React21__default.default.createElement("span", { className: "px-4 font-medium min-w-[3rem] text-center" }, 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(
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(
8632
8845
  "button",
8633
8846
  {
8634
8847
  onClick: () => handleUpdateQuantity(item.quantity + 1),
8635
- disabled: isUpdating || item.quantity >= item.productVariantData.inventoryCount,
8636
- className: "p-2 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
8637
- },
8638
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Plus, { className: "w-4 h-4" })
8639
- )), /* @__PURE__ */ React21__default.default.createElement(
8640
- "button",
8641
- {
8642
- onClick: handleRemove,
8643
- className: "p-2 text-red-600 hover:bg-red-50 rounded-lg transition-colors",
8644
- "aria-label": "Remove item"
8848
+ 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"
8645
8850
  },
8646
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.Trash2, { className: "w-5 h-5" })
8647
- ))),
8648
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xl font-bold text-gray-900" }, formatPrice(itemTotal)))
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")))
8649
8853
  );
8650
8854
  }
8651
8855
  function CartScreen() {
@@ -8653,137 +8857,68 @@ function CartScreen() {
8653
8857
  const { cart, isLoading } = useCart();
8654
8858
  const { buildPath } = useBasePath();
8655
8859
  if (!cart || cart.cartBody.items.length === 0) {
8656
- const highlights = [
8657
- {
8658
- icon: lucideReact.ShieldCheck,
8659
- title: "Pharmacist approved",
8660
- description: "Every product passes pharmacist review and cold-chain handling standards."
8661
- },
8662
- {
8663
- icon: lucideReact.BadgePercent,
8664
- title: "Bundle savings",
8665
- description: "Unlock tiered discounts when you combine vitamins, OTC, and wellness kits."
8666
- },
8667
- {
8668
- icon: lucideReact.HeartPulse,
8669
- title: "Personalized guidance",
8670
- description: "Follow curated collections tailored to your health goals and routines."
8671
- }
8672
- ];
8673
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative min-h-screen overflow-hidden bg-slate-950" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute inset-0 bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))]" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute inset-0" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "pointer-events-none absolute -top-24 -left-20 h-96 w-96 rounded-full bg-white/20 blur-3xl opacity-60" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "pointer-events-none absolute bottom-0 right-0 h-[28rem] w-[28rem] rounded-full bg-secondary-500/40 blur-[220px] opacity-70" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative z-10 flex min-h-screen items-center px-6 py-20" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mx-auto grid w-full max-w-6xl gap-12 lg:grid-cols-[minmax(0,1.25fr)_minmax(0,1fr)] lg:items-center" }, /* @__PURE__ */ React21__default.default.createElement(
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(
8674
8861
  framerMotion.motion.div,
8675
8862
  {
8676
8863
  initial: { opacity: 0, y: 24 },
8677
8864
  animate: { opacity: 1, y: 0 },
8678
- transition: { duration: 0.4 },
8679
- className: "space-y-8 text-white"
8865
+ className: "text-center space-y-6 max-w-md"
8680
8866
  },
8681
- /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-1 text-sm font-semibold uppercase tracking-[0.3em] text-white/80 backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingBag, { className: "h-4 w-4" }), "Cart status"),
8682
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Your wellness cart is waiting for a refill"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "max-w-xl text-lg text-white/75" }, "Build a pharmacist-curated bundle with fast shipping, personalized recommendations, and exclusive member perks designed to keep you feeling your best.")),
8683
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-4" }, /* @__PURE__ */ React21__default.default.createElement(
8684
- Button,
8685
- {
8686
- size: "lg",
8687
- className: "bg-white text-primary-700 shadow-xl shadow-white/30 hover:bg-white/90 hover:text-primary-700",
8688
- onClick: () => router.push(buildPath("/shop"))
8689
- },
8690
- "Discover products",
8691
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowRight, { className: "h-5 w-5" })
8692
- ), /* @__PURE__ */ React21__default.default.createElement(
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.")),
8869
+ /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-3 justify-center" }, /* @__PURE__ */ React21__default.default.createElement(
8693
8870
  "button",
8694
8871
  {
8695
8872
  type: "button",
8696
- onClick: () => router.push(buildPath("/categories")),
8697
- className: "inline-flex items-center gap-2 rounded-full border border-white/40 px-5 py-3 text-sm font-semibold text-white/80 transition hover:border-white hover:bg-white/10"
8698
- },
8699
- "Browse categories",
8700
- /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowRight, { className: "h-4 w-4" })
8701
- )),
8702
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 sm:grid-cols-2" }, highlights.map(({ icon: Icon, title, description }) => /* @__PURE__ */ React21__default.default.createElement(
8703
- "div",
8704
- {
8705
- key: title,
8706
- className: "rounded-2xl border border-white/15 bg-white/10 p-5 backdrop-blur transition hover:border-white/25 hover:bg-white/15"
8873
+ 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"
8707
8875
  },
8708
- /* @__PURE__ */ React21__default.default.createElement(Icon, { className: "h-6 w-6 text-white/90" }),
8709
- /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-3 text-sm font-semibold text-white" }, title),
8710
- /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-1 text-xs text-white/70" }, description)
8711
- )))
8712
- ), /* @__PURE__ */ React21__default.default.createElement(
8713
- framerMotion.motion.div,
8714
- {
8715
- initial: { opacity: 0, y: 24 },
8716
- animate: { opacity: 1, y: 0 },
8717
- transition: { delay: 0.1, duration: 0.4 },
8718
- className: "rounded-[32px] border border-white/10 bg-white/10 p-10 backdrop-blur-2xl shadow-[0_40px_120px_-45px_rgba(12,5,40,0.6)]"
8719
- },
8720
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl bg-white/20" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingBag, { className: "h-8 w-8 text-white" })),
8721
- /* @__PURE__ */ React21__default.default.createElement("h2", { className: "mt-6 text-3xl font-semibold text-white" }, "Still building your bag?"),
8722
- /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-3 text-sm text-white/80" }, "Add supplements, wellness tools, and everyday pharmacy favorites to personalize your routine. We'll keep them chilled, curated, and ready for doorstep delivery."),
8723
- /* @__PURE__ */ React21__default.default.createElement("ul", { className: "mt-6 space-y-3 text-sm text-white/80" }, /* @__PURE__ */ React21__default.default.createElement("li", { className: "flex items-center gap-2 rounded-xl bg-white/10 px-4 py-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "h-5 w-5 text-white" }), "Pharmacist oversight on every order"), /* @__PURE__ */ React21__default.default.createElement("li", { className: "flex items-center gap-2 rounded-xl bg-white/10 px-4 py-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.BadgePercent, { className: "h-5 w-5 text-white" }), "Member-only savings unlock at checkout"), /* @__PURE__ */ React21__default.default.createElement("li", { className: "flex items-center gap-2 rounded-xl bg-white/10 px-4 py-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.HeartPulse, { className: "h-5 w-5 text-white" }), "Personalized care plans for each purchase")),
8724
- /* @__PURE__ */ React21__default.default.createElement(
8725
- Button,
8726
- {
8727
- size: "lg",
8728
- variant: "outline",
8729
- className: "mt-8 w-full border-white/40 text-white hover:border-white hover:bg-white/10",
8730
- onClick: () => router.push(buildPath("/shop"))
8731
- },
8732
- "Start building my cart",
8876
+ "Discover products",
8733
8877
  /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowRight, { className: "h-5 w-5" })
8734
- )
8735
- ))));
8878
+ )),
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")))
8880
+ )))));
8736
8881
  }
8737
8882
  const subtotal = cart.total;
8738
8883
  const shipping = 0;
8739
8884
  const tax = 0;
8740
8885
  const total = subtotal + shipping + tax;
8741
- 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" }, /* @__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 mb-8" }, /* @__PURE__ */ React21__default.default.createElement(
8742
- framerMotion.motion.div,
8743
- {
8744
- initial: { opacity: 0, y: 24 },
8745
- animate: { opacity: 1, y: 0 },
8746
- className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between"
8747
- },
8748
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "max-w-2xl space-y-4" }, /* @__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 tracking-wide text-white/80 backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.HeartPulse, { className: "h-4 w-4" }), "Wellness essentials, ready when you are"), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Your curated cart"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-white/75 md:text-lg" }, "Review your selections, unlock exclusive perks, and check out with pharmacist-backed confidence.")),
8749
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur-md" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Cart summary"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-4 text-4xl font-semibold" }, formatPrice(total)), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-white/70" }, "Taxes and shipping calculated below"))
8750
- ))), /* @__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,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21__default.default.createElement(
8886
+ 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(
8751
8888
  framerMotion.motion.section,
8752
8889
  {
8753
8890
  initial: { opacity: 0, y: 24 },
8754
8891
  animate: { opacity: 1, y: 0 },
8755
- transition: { delay: 0.05 },
8756
- className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
8892
+ className: "space-y-6"
8757
8893
  },
8758
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Items (", cart.cartBody.items.length, ")"), /* @__PURE__ */ React21__default.default.createElement("div", { 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.ShieldCheck, { className: "h-4 w-4" }), "Guaranteed cold-chain handling")),
8759
- isLoading && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2 rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-block h-3 w-3 animate-spin rounded-full border-2 border-slate-300 border-t-slate-600" }), "Updating cart\u2026"),
8760
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-5" }, cart.cartBody.items.map((item) => /* @__PURE__ */ React21__default.default.createElement(CartItem, { key: item.productVariantId, item })))
8894
+ 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
+ /* @__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 })))
8761
8896
  ), /* @__PURE__ */ React21__default.default.createElement(
8762
8897
  framerMotion.motion.aside,
8763
8898
  {
8764
8899
  initial: { opacity: 0, y: 24 },
8765
8900
  animate: { opacity: 1, y: 0 },
8766
8901
  transition: { delay: 0.1 },
8767
- className: "space-y-6 lg:sticky lg:top-28"
8902
+ className: "space-y-6 lg:sticky lg:top-8 h-fit"
8768
8903
  },
8769
- /* @__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("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Checkout summary"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary-50 px-3 py-1 text-xs font-semibold text-primary-700" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.BadgePercent, { className: "h-4 w-4" }), "Savings applied")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 space-y-4 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))), /* @__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" }, "Will be calculated at checkout")), /* @__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, "Order total"), /* @__PURE__ */ React21__default.default.createElement("span", null, formatPrice(total))), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-2 text-xs text-slate-500" }, "Prices include pharmacy-grade quality control and packaging."))), /* @__PURE__ */ React21__default.default.createElement(
8770
- Button,
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(
8905
+ "button",
8771
8906
  {
8772
- size: "lg",
8773
- className: "mt-6 w-full",
8774
- onClick: () => router.push(buildPath("/checkout"))
8907
+ type: "button",
8908
+ onClick: () => router.push(buildPath("/checkout")),
8909
+ 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"
8775
8910
  },
8776
- "Secure checkout",
8911
+ "Proceed to Checkout",
8777
8912
  /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowRight, { className: "h-5 w-5" })
8778
8913
  ), /* @__PURE__ */ React21__default.default.createElement(
8779
8914
  "button",
8780
8915
  {
8781
8916
  type: "button",
8782
8917
  onClick: () => router.push(buildPath("/shop")),
8783
- className: "mt-4 w-full text-sm font-semibold text-primary-600 transition hover:text-primary-700"
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"
8784
8919
  },
8785
- "Continue shopping"
8786
- )),
8920
+ "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")))),
8787
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."))
8788
8923
  )))));
8789
8924
  }
@@ -9182,9 +9317,12 @@ function CheckoutScreen() {
9182
9317
  }
9183
9318
  const rates = response.data.rates || [];
9184
9319
  if (rates.length > 0) {
9320
+ const sortedRates = [...rates].sort((a, b) => parseFloat(a.amount) - parseFloat(b.amount));
9321
+ const cheapestRate = sortedRates[0];
9185
9322
  setShippingRates(rates);
9186
9323
  setShippingRatesError(null);
9187
- setSelectedShippingRateId(rates[0].objectId);
9324
+ setSelectedShippingRateId(cheapestRate.objectId);
9325
+ setShippingPrice(parseFloat(cheapestRate.amount));
9188
9326
  return;
9189
9327
  }
9190
9328
  const messages = response.data.messages || [];
@@ -9238,11 +9376,6 @@ function CheckoutScreen() {
9238
9376
  setSelectedStoreAddressId(null);
9239
9377
  }
9240
9378
  }, [isDelivery]);
9241
- const checkoutSteps = [
9242
- { id: 1, label: "Cart", status: "complete" },
9243
- { id: 2, label: "Details", status: "current" },
9244
- { id: 3, label: "Payment", status: "upcoming" }
9245
- ];
9246
9379
  const onSubmit = async (data) => {
9247
9380
  setError(null);
9248
9381
  if (!isAuthenticated) {
@@ -9336,8 +9469,20 @@ function CheckoutScreen() {
9336
9469
  if (paymentMethod === "Card") {
9337
9470
  const paymentUrl = response?.data?.payment?.hostedInvoiceUrl;
9338
9471
  if (paymentUrl && paymentUrl !== "INSUFFICIENT_CREDIT") {
9339
- window.open(paymentUrl, "_blank");
9340
- await clearCart();
9472
+ const newWindow = window.open("", "_blank");
9473
+ if (newWindow) {
9474
+ newWindow.location.href = paymentUrl;
9475
+ await clearCart();
9476
+ return;
9477
+ } else {
9478
+ window.location.href = paymentUrl;
9479
+ await clearCart();
9480
+ return;
9481
+ }
9482
+ } else if (!paymentUrl) {
9483
+ console.error("No payment URL received in response:", response.data);
9484
+ setError("Failed to initiate payment. Please try again or contact support.");
9485
+ sonner.toast.error("Failed to initiate payment");
9341
9486
  return;
9342
9487
  }
9343
9488
  sonner.toast.success("Order placed successfully!");
@@ -9363,26 +9508,7 @@ function CheckoutScreen() {
9363
9508
  const subtotal = cart.total;
9364
9509
  const tax = 0;
9365
9510
  const total = subtotal + shippingPrice + tax;
9366
- 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" }, /* @__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("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21__default.default.createElement(
9367
- framerMotion.motion.div,
9368
- {
9369
- initial: { opacity: 0, y: 24 },
9370
- animate: { opacity: 1, y: 0 },
9371
- className: "space-y-6"
9372
- },
9373
- /* @__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.ShieldCheck, { className: "h-4 w-4" }), "Secure checkout"),
9374
- /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Provide delivery details"),
9375
- /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-white/75 md:text-lg" }, "Our pharmacists handle every package with care. Share your shipping and billing information so we can dispatch your order within the next 12 hours."),
9376
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-3" }, checkoutSteps.map((step) => /* @__PURE__ */ React21__default.default.createElement(
9377
- "div",
9378
- {
9379
- key: step.id,
9380
- className: `flex items-center gap-3 rounded-2xl px-4 py-2 text-sm font-semibold ${step.status === "complete" ? "bg-white/20 text-white" : step.status === "current" ? "bg-white text-primary-700" : "bg-white/10 text-white/60"}`
9381
- },
9382
- /* @__PURE__ */ React21__default.default.createElement("span", { className: "flex h-7 w-7 items-center justify-center rounded-full bg-white/20 text-xs font-bold" }, step.id),
9383
- step.label
9384
- )))
9385
- )))), /* @__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(
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(
9386
9512
  framerMotion.motion.div,
9387
9513
  {
9388
9514
  initial: { opacity: 0, y: 24 },
@@ -9480,9 +9606,10 @@ function CheckoutScreen() {
9480
9606
  "div",
9481
9607
  {
9482
9608
  key: rate.objectId,
9483
- onClick: () => setSelectedShippingRateId(rate.objectId),
9484
- onMouseEnter: () => setShippingPrice(parseFloat(rate.amount)),
9485
- onMouseLeave: () => setShippingPrice(parseFloat(rate.amountLocal)),
9609
+ onClick: () => {
9610
+ setSelectedShippingRateId(rate.objectId);
9611
+ setShippingPrice(parseFloat(rate.amount));
9612
+ },
9486
9613
  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"}`
9487
9614
  },
9488
9615
  /* @__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(
@@ -9569,7 +9696,7 @@ function CheckoutScreen() {
9569
9696
  ), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-sm font-medium text-slate-900" }, pm.label)),
9570
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" }))
9571
9698
  );
9572
- })), /* @__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("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(
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(
9573
9700
  "div",
9574
9701
  {
9575
9702
  key: item.productId,
@@ -9661,7 +9788,7 @@ function LoginScreen() {
9661
9788
  initial: { opacity: 0, x: -24 },
9662
9789
  animate: { opacity: 1, x: 0 },
9663
9790
  transition: { duration: 0.4 },
9664
- className: "relative flex flex-col justify-between bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] px-10 py-14 text-white"
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"
9665
9792
  },
9666
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.")),
9667
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."))),
@@ -9787,7 +9914,7 @@ function RegisterScreen() {
9787
9914
  initial: { opacity: 0, x: -24 },
9788
9915
  animate: { opacity: 1, x: 0 },
9789
9916
  transition: { duration: 0.4 },
9790
- className: "flex flex-col justify-between bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] px-10 py-14 text-white"
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"
9791
9918
  },
9792
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.")),
9793
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)))),
@@ -10987,14 +11114,23 @@ function WishlistScreen() {
10987
11114
  return list;
10988
11115
  }, [wishlistProducts, onlyInStock, sortOption]);
10989
11116
  const emptyAfterFiltering = !isLoading && wishlistProducts.length > 0 && processedProducts.length === 0;
10990
- return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50 pb-16" }, /* @__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))] pb-32 pt-16 text-white" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute inset-0 opacity-40 mix-blend-soft-light", "aria-hidden": "true" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute -top-1/2 right-1/2 h-[40rem] w-[40rem] rounded-full bg-white/10 blur-3xl" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute left-1/4 top-1/4 h-48 w-48 rounded-full bg-white/20 blur-2xl" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "max-w-3xl space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "h-4 w-4" }), "Wishlist"), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-5xl" }, "Curate your pharmacy must-haves in one calming space"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "We keep your favourite products ready for reorder, refill reminders, and quick checkout\u2014exactly when you need them.")))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative -mt-20" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement(
11117
+ 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(
10991
11118
  framerMotion.motion.div,
10992
11119
  {
10993
11120
  initial: { opacity: 0, y: 24 },
10994
11121
  animate: { opacity: 1, y: 0 },
10995
- className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-xl shadow-primary-50"
11122
+ className: "space-y-6"
10996
11123
  },
10997
- /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-6" }, !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 rounded-3xl border border-slate-100 bg-white p-10 text-center shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-primary-50 text-primary-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "h-8 w-8" })), /* @__PURE__ */ React21__default.default.createElement("h2", { className: "mt-6 text-3xl font-bold text-slate-900" }, "Sign in to see your favourites"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-3 text-slate-500" }, "Create your curated shelf of products and we'll keep them ready whenever you return."), /* @__PURE__ */ React21__default.default.createElement(Button, { className: "mt-6", onClick: () => router.push(buildPath("/login")) }, "Sign In"))), isAuthenticated && /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React21__default.default.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "Your saved collection"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, "Total value: ", /* @__PURE__ */ React21__default.default.createElement("span", { className: "font-semibold text-primary-600" }, formatPrice(totalValue)), onlyInStock && " \u2022 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(
11124
+ !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(
11125
+ "button",
11126
+ {
11127
+ type: "button",
11128
+ onClick: () => router.push(buildPath("/login")),
11129
+ 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"
11130
+ },
11131
+ "Sign In"
11132
+ ))),
11133
+ 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(
10998
11134
  "input",
10999
11135
  {
11000
11136
  type: "checkbox",
@@ -11043,7 +11179,15 @@ function WishlistScreen() {
11043
11179
  key: index,
11044
11180
  className: "h-72 animate-pulse rounded-2xl border border-slate-200 bg-slate-100"
11045
11181
  }
11046
- ))), !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: "max-w-2xl rounded-3xl border border-slate-100 bg-white p-12 text-center shadow-xl shadow-primary-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mx-auto flex h-20 w-20 items-center justify-center rounded-full bg-primary-100 text-primary-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-10 w-10" })), /* @__PURE__ */ React21__default.default.createElement("h2", { className: "mt-6 text-4xl font-bold text-slate-900" }, "Start your wellness wishlist"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-4 text-lg text-slate-500" }, "Bookmark pharmacy essentials, supplements, or skincare picks and we'll keep them safe until you're ready to checkout."), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-8 flex flex-wrap justify-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(Button, { onClick: () => router.push(buildPath("/shop")) }, "Discover products"), /* @__PURE__ */ React21__default.default.createElement(Button, { variant: "outline", onClick: () => router.push(buildPath("/categories")) }, "Browse categories")))), !isLoading && processedProducts.length > 0 && /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, viewMode === "grid" ? /* @__PURE__ */ React21__default.default.createElement(
11182
+ ))), !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(
11183
+ "button",
11184
+ {
11185
+ type: "button",
11186
+ onClick: () => router.push(buildPath("/shop")),
11187
+ 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"
11188
+ },
11189
+ "Discover products"
11190
+ )))), !isLoading && processedProducts.length > 0 && /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, viewMode === "grid" ? /* @__PURE__ */ React21__default.default.createElement(
11047
11191
  framerMotion.motion.div,
11048
11192
  {
11049
11193
  layout: true,
@@ -11106,7 +11250,15 @@ function WishlistScreen() {
11106
11250
  },
11107
11251
  "Remove"
11108
11252
  )))
11109
- ))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col items-center justify-center rounded-2xl border border-dashed border-slate-200 bg-slate-50 p-12 text-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-slate-200 text-slate-500" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Package, { className: "h-8 w-8" })), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "mt-6 text-2xl font-semibold text-slate-900" }, "Nothing matches those filters"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-2 max-w-md text-sm text-slate-500" }, "Try showing out-of-stock items or adjust your sort order to revisit everything you\u2019ve saved."), /* @__PURE__ */ React21__default.default.createElement(Button, { className: "mt-6", variant: "outline", onClick: () => setOnlyInStock(false) }, "Show all saved products"))))
11253
+ ))))), 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(
11254
+ "button",
11255
+ {
11256
+ type: "button",
11257
+ 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",
11258
+ onClick: () => setOnlyInStock(false)
11259
+ },
11260
+ "Show all saved products"
11261
+ )))
11110
11262
  ))));
11111
11263
  }
11112
11264
  function SearchPage() {