hey-pharmacist-ecommerce 1.1.7 → 1.1.9
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 +676 -606
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +481 -411
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/AddressFormModal.tsx +2 -2
- package/src/screens/CartScreen.tsx +120 -11
- package/src/screens/LoginScreen.tsx +2 -2
- package/src/screens/RegisterScreen.tsx +3 -3
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import
|
|
2
|
+
import React21, { createContext, forwardRef, useContext, useEffect, useState, useCallback, useMemo, useRef } from 'react';
|
|
3
3
|
import globalAxios4 from 'axios';
|
|
4
4
|
import { Toaster, toast } from 'sonner';
|
|
5
5
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
6
6
|
import { motion, AnimatePresence } from 'framer-motion';
|
|
7
|
-
import { Heart, Sparkles, ShieldCheck, TrendingUp, Search, ArrowUpDown, ChevronDown, LayoutGrid, LayoutList, SlidersHorizontal, X, Clock, Package, ArrowLeft, ChevronRight, Shield, Truck, Award, Star, Check, Minus, Plus, ShoppingCart, Trash2, ShoppingBag,
|
|
7
|
+
import { Heart, Sparkles, ShieldCheck, TrendingUp, Search, ArrowUpDown, ChevronDown, LayoutGrid, LayoutList, SlidersHorizontal, X, Clock, Package, ArrowLeft, ChevronRight, Shield, Truck, Award, Star, Check, Minus, Plus, ShoppingCart, Trash2, ShoppingBag, ArrowRight, BadgePercent, HeartPulse, Edit3, MapPin, CreditCard, Lock, PackageCheck, EyeOff, Eye, CheckCircle2, UserPlus, Mail, Phone, LogOut, Calendar, CalendarDays, Filter, ChevronLeft, ArrowUpRight, Warehouse, BellRing, Crown, User, Grid, List, Menu, Facebook, Twitter, Instagram, Globe, Home } from 'lucide-react';
|
|
8
8
|
import Image3 from 'next/image';
|
|
9
9
|
import { useRouter, useSearchParams } from 'next/navigation';
|
|
10
10
|
import dynamic from 'next/dynamic';
|
|
@@ -198,7 +198,7 @@ function ThemeProvider({ config, children }) {
|
|
|
198
198
|
root.style.setProperty(`--header-to`, secondaryShades[600]);
|
|
199
199
|
}
|
|
200
200
|
}, [config]);
|
|
201
|
-
return /* @__PURE__ */
|
|
201
|
+
return /* @__PURE__ */ React21.createElement(ThemeContext.Provider, { value: { config } }, children);
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
// src/providers/AuthProvider.tsx
|
|
@@ -2048,7 +2048,7 @@ function AuthProvider({ children }) {
|
|
|
2048
2048
|
updateUser,
|
|
2049
2049
|
refreshUser
|
|
2050
2050
|
};
|
|
2051
|
-
return /* @__PURE__ */
|
|
2051
|
+
return /* @__PURE__ */ React21.createElement(AuthContext.Provider, { value }, children);
|
|
2052
2052
|
}
|
|
2053
2053
|
var AddressesApiAxiosParamCreator = function(configuration) {
|
|
2054
2054
|
return {
|
|
@@ -6844,7 +6844,7 @@ function CartProvider({ children }) {
|
|
|
6844
6844
|
clearCart,
|
|
6845
6845
|
refreshCart
|
|
6846
6846
|
};
|
|
6847
|
-
return /* @__PURE__ */
|
|
6847
|
+
return /* @__PURE__ */ React21.createElement(CartContext.Provider, { value }, children);
|
|
6848
6848
|
}
|
|
6849
6849
|
|
|
6850
6850
|
// src/lib/Apis/wrapper.ts
|
|
@@ -6987,7 +6987,7 @@ function WishlistProvider({ children }) {
|
|
|
6987
6987
|
const refreshWishlist = async () => {
|
|
6988
6988
|
await fetchWishlist();
|
|
6989
6989
|
};
|
|
6990
|
-
return /* @__PURE__ */
|
|
6990
|
+
return /* @__PURE__ */ React21.createElement(
|
|
6991
6991
|
WishlistContext.Provider,
|
|
6992
6992
|
{
|
|
6993
6993
|
value: {
|
|
@@ -7020,7 +7020,7 @@ function BasePathProvider({ basePath = "", children }) {
|
|
|
7020
7020
|
if (path.startsWith("/")) return `${normalized}${path}`;
|
|
7021
7021
|
return `${normalized}/${path}`;
|
|
7022
7022
|
};
|
|
7023
|
-
return /* @__PURE__ */
|
|
7023
|
+
return /* @__PURE__ */ React21.createElement(BasePathContext.Provider, { value: { basePath: normalized, buildPath } }, children);
|
|
7024
7024
|
}
|
|
7025
7025
|
function useBasePath() {
|
|
7026
7026
|
const ctx = useContext(BasePathContext);
|
|
@@ -7031,10 +7031,10 @@ function EcommerceProvider({ config, children, withToaster = true, basePath = ""
|
|
|
7031
7031
|
useEffect(() => {
|
|
7032
7032
|
initializeApiAdapter(config);
|
|
7033
7033
|
}, [config]);
|
|
7034
|
-
const [client] =
|
|
7034
|
+
const [client] = React21.useState(
|
|
7035
7035
|
new QueryClient({ defaultOptions: { queries: { staleTime: 5e3 } } })
|
|
7036
7036
|
);
|
|
7037
|
-
return /* @__PURE__ */
|
|
7037
|
+
return /* @__PURE__ */ React21.createElement(QueryClientProvider, { client }, /* @__PURE__ */ React21.createElement(ThemeProvider, { config }, /* @__PURE__ */ React21.createElement(BasePathProvider, { basePath }, /* @__PURE__ */ React21.createElement(AuthProvider, null, /* @__PURE__ */ React21.createElement(CartProvider, null, /* @__PURE__ */ React21.createElement(WishlistProvider, null, children, withToaster && /* @__PURE__ */ React21.createElement(Toaster, { position: "top-right", richColors: true })))))));
|
|
7038
7038
|
}
|
|
7039
7039
|
|
|
7040
7040
|
// src/lib/utils/format.ts
|
|
@@ -7124,7 +7124,7 @@ function ProductCard({
|
|
|
7124
7124
|
alt: product.name || "Product image"
|
|
7125
7125
|
};
|
|
7126
7126
|
}, [product.productMedia, product.name]);
|
|
7127
|
-
return /* @__PURE__ */
|
|
7127
|
+
return /* @__PURE__ */ React21.createElement(
|
|
7128
7128
|
motion.article,
|
|
7129
7129
|
{
|
|
7130
7130
|
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",
|
|
@@ -7137,7 +7137,7 @@ function ProductCard({
|
|
|
7137
7137
|
onClick: handleCardClick,
|
|
7138
7138
|
onKeyDown: handleKeyDown
|
|
7139
7139
|
},
|
|
7140
|
-
/* @__PURE__ */
|
|
7140
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative h-48 w-full overflow-hidden bg-gray-50" }, /* @__PURE__ */ React21.createElement(AnimatePresence, null, !isImageLoaded && /* @__PURE__ */ React21.createElement(
|
|
7141
7141
|
motion.div,
|
|
7142
7142
|
{
|
|
7143
7143
|
className: "absolute inset-0 bg-gray-200 animate-pulse",
|
|
@@ -7145,7 +7145,7 @@ function ProductCard({
|
|
|
7145
7145
|
exit: { opacity: 0 },
|
|
7146
7146
|
transition: { duration: 0.2 }
|
|
7147
7147
|
}
|
|
7148
|
-
)), product.productMedia?.[0]?.file && /* @__PURE__ */
|
|
7148
|
+
)), product.productMedia?.[0]?.file && /* @__PURE__ */ React21.createElement(
|
|
7149
7149
|
Image3,
|
|
7150
7150
|
{
|
|
7151
7151
|
src: product.productMedia?.[0]?.file || "/placeholder-product.jpg",
|
|
@@ -7156,7 +7156,7 @@ function ProductCard({
|
|
|
7156
7156
|
priority: false,
|
|
7157
7157
|
onLoad: handleImageLoad
|
|
7158
7158
|
}
|
|
7159
|
-
), /* @__PURE__ */
|
|
7159
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "absolute top-3 left-3 flex flex-col gap-2 z-10" }, product.isDiscounted && /* @__PURE__ */ React21.createElement(
|
|
7160
7160
|
motion.span,
|
|
7161
7161
|
{
|
|
7162
7162
|
initial: { scale: 0.9, opacity: 0 },
|
|
@@ -7166,7 +7166,7 @@ function ProductCard({
|
|
|
7166
7166
|
"-",
|
|
7167
7167
|
product.discountAmount,
|
|
7168
7168
|
"%"
|
|
7169
|
-
), product.inventoryCount === 0 && /* @__PURE__ */
|
|
7169
|
+
), product.inventoryCount === 0 && /* @__PURE__ */ React21.createElement(
|
|
7170
7170
|
motion.span,
|
|
7171
7171
|
{
|
|
7172
7172
|
initial: { scale: 0.9, opacity: 0 },
|
|
@@ -7174,7 +7174,7 @@ function ProductCard({
|
|
|
7174
7174
|
className: "inline-flex items-center justify-center px-2.5 py-1 rounded-full text-xs font-bold text-white bg-red-600"
|
|
7175
7175
|
},
|
|
7176
7176
|
"Out of Stock"
|
|
7177
|
-
)), showFavoriteButton && /* @__PURE__ */
|
|
7177
|
+
)), showFavoriteButton && /* @__PURE__ */ React21.createElement(
|
|
7178
7178
|
motion.button,
|
|
7179
7179
|
{
|
|
7180
7180
|
type: "button",
|
|
@@ -7184,10 +7184,10 @@ function ProductCard({
|
|
|
7184
7184
|
whileTap: { scale: 0.95 },
|
|
7185
7185
|
"aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
|
|
7186
7186
|
},
|
|
7187
|
-
/* @__PURE__ */
|
|
7187
|
+
/* @__PURE__ */ React21.createElement(Heart, { className: `w-5 h-5 ${isFavorite ? "fill-current" : ""}` })
|
|
7188
7188
|
)),
|
|
7189
|
-
/* @__PURE__ */
|
|
7190
|
-
showFavoriteButton && /* @__PURE__ */
|
|
7189
|
+
/* @__PURE__ */ React21.createElement("div", { className: "absolute top-4 left-4 flex flex-col gap-2" }, product.inventoryCount === 0 && /* @__PURE__ */ React21.createElement("span", { className: "px-3 py-1 rounded-full text-sm font-bold bg-red-100 text-red-800" }, "Out of Stock")),
|
|
7190
|
+
showFavoriteButton && /* @__PURE__ */ React21.createElement(
|
|
7191
7191
|
"button",
|
|
7192
7192
|
{
|
|
7193
7193
|
type: "button",
|
|
@@ -7195,10 +7195,10 @@ function ProductCard({
|
|
|
7195
7195
|
className: `absolute top-2 right-2 p-2 rounded-full transition-colors ${isFavorite ? "text-red-500" : "text-gray-400 hover:text-red-500"}`,
|
|
7196
7196
|
"aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
|
|
7197
7197
|
},
|
|
7198
|
-
/* @__PURE__ */
|
|
7198
|
+
/* @__PURE__ */ React21.createElement(Heart, { className: `w-5 h-5 ${isFavorite ? "fill-current" : ""}` })
|
|
7199
7199
|
),
|
|
7200
|
-
/* @__PURE__ */
|
|
7201
|
-
/* @__PURE__ */
|
|
7200
|
+
/* @__PURE__ */ React21.createElement("div", { className: "p-4" }, product.parentCategories && product.parentCategories?.length > 0 && /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-gray-500 uppercase tracking-wider mb-2" }, product.parentCategories?.map((category) => category?.name).join(", ") || "No categories"), /* @__PURE__ */ React21.createElement("div", { className: "mb-2" }, /* @__PURE__ */ React21.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.createElement("p", { className: "text-xs text-gray-400 mt-1" }, "SKU: ", product.sku)), /* @__PURE__ */ React21.createElement("div", { className: "flex items-baseline gap-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React21.createElement("span", { className: "text-2xl font-bold text-gray-900" }, formatPrice(product.finalPrice)), product.inventoryCount > 0 && /* @__PURE__ */ React21.createElement("span", { className: "text-xs text-gray-500" }, product.inventoryCount > 0 ? "In Stock" : "Out of Stock")), product.priceBeforeDiscount && product.priceBeforeDiscount > product.finalPrice && /* @__PURE__ */ React21.createElement("span", { className: "text-sm text-gray-500 line-through" }, formatPrice(product.priceBeforeDiscount)))),
|
|
7201
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-auto p-4 pt-0" }, /* @__PURE__ */ React21.createElement(
|
|
7202
7202
|
"button",
|
|
7203
7203
|
{
|
|
7204
7204
|
type: "button",
|
|
@@ -7209,7 +7209,7 @@ function ProductCard({
|
|
|
7209
7209
|
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`
|
|
7210
7210
|
},
|
|
7211
7211
|
"View Product"
|
|
7212
|
-
), showFavoriteButton && /* @__PURE__ */
|
|
7212
|
+
), showFavoriteButton && /* @__PURE__ */ React21.createElement(
|
|
7213
7213
|
"button",
|
|
7214
7214
|
{
|
|
7215
7215
|
type: "button",
|
|
@@ -7217,7 +7217,7 @@ function ProductCard({
|
|
|
7217
7217
|
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",
|
|
7218
7218
|
"aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
|
|
7219
7219
|
},
|
|
7220
|
-
/* @__PURE__ */
|
|
7220
|
+
/* @__PURE__ */ React21.createElement(
|
|
7221
7221
|
Heart,
|
|
7222
7222
|
{
|
|
7223
7223
|
className: `mr-2 h-4 w-4 ${isFavorite ? "fill-red-500 text-red-500" : "text-primary-600"}`
|
|
@@ -7228,13 +7228,13 @@ function ProductCard({
|
|
|
7228
7228
|
);
|
|
7229
7229
|
}
|
|
7230
7230
|
function Skeleton({ className = "" }) {
|
|
7231
|
-
return /* @__PURE__ */
|
|
7231
|
+
return /* @__PURE__ */ React21.createElement("div", { className: `animate-pulse bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 bg-[length:200%_100%] rounded ${className}` });
|
|
7232
7232
|
}
|
|
7233
7233
|
function ProductCardSkeleton() {
|
|
7234
|
-
return /* @__PURE__ */
|
|
7234
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "bg-white rounded-2xl overflow-hidden shadow-sm" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-64 w-full" }), /* @__PURE__ */ React21.createElement("div", { className: "p-4 space-y-3" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-6 w-3/4" }), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-4 w-1/2" }), /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-center pt-2" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-8 w-24" }), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-10 w-10 rounded-full" }))));
|
|
7235
7235
|
}
|
|
7236
7236
|
function OrderCardSkeleton() {
|
|
7237
|
-
return /* @__PURE__ */
|
|
7237
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "bg-white rounded-2xl p-6 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-start mb-4" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-2 flex-1" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-6 w-32" }), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-4 w-48" })), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-6 w-20 rounded-full" })), /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-4 w-full" }), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-4 w-2/3" })));
|
|
7238
7238
|
}
|
|
7239
7239
|
var MotionDiv = dynamic(() => import('framer-motion').then((mod) => mod.motion.div), {
|
|
7240
7240
|
ssr: false
|
|
@@ -7260,14 +7260,14 @@ function Button({
|
|
|
7260
7260
|
md: "px-6 py-3 text-base",
|
|
7261
7261
|
lg: "px-8 py-4 text-lg"
|
|
7262
7262
|
};
|
|
7263
|
-
return /* @__PURE__ */
|
|
7263
|
+
return /* @__PURE__ */ React21.createElement(
|
|
7264
7264
|
MotionDiv,
|
|
7265
7265
|
{
|
|
7266
7266
|
whileHover: { scale: 1.02 },
|
|
7267
7267
|
whileTap: { scale: 0.98 },
|
|
7268
7268
|
className: "inline-block"
|
|
7269
7269
|
},
|
|
7270
|
-
/* @__PURE__ */
|
|
7270
|
+
/* @__PURE__ */ React21.createElement(
|
|
7271
7271
|
"button",
|
|
7272
7272
|
{
|
|
7273
7273
|
className: `${baseStyles} ${variants[variant]} ${sizes[size]} ${className}`,
|
|
@@ -7276,18 +7276,18 @@ function Button({
|
|
|
7276
7276
|
"aria-busy": isLoading,
|
|
7277
7277
|
...props
|
|
7278
7278
|
},
|
|
7279
|
-
isLoading ? /* @__PURE__ */
|
|
7279
|
+
isLoading ? /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("svg", { className: "animate-spin h-5 w-5", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "aria-hidden": "true" }, /* @__PURE__ */ React21.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ React21.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })), "Loading...") : children
|
|
7280
7280
|
)
|
|
7281
7281
|
);
|
|
7282
7282
|
}
|
|
7283
7283
|
|
|
7284
7284
|
// src/components/EmptyState.tsx
|
|
7285
7285
|
function EmptyState({ icon: Icon, title, description, actionLabel, onAction }) {
|
|
7286
|
-
return /* @__PURE__ */
|
|
7286
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center justify-center py-16 px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "w-24 h-24 bg-gray-100 rounded-full flex items-center justify-center mb-6" }, /* @__PURE__ */ React21.createElement(Icon, { className: "w-12 h-12 text-gray-400" })), /* @__PURE__ */ React21.createElement("h3", { className: "text-2xl font-bold text-gray-900 mb-2" }, title), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-600 text-center max-w-md mb-8" }, description), actionLabel && onAction && /* @__PURE__ */ React21.createElement(Button, { onClick: onAction }, actionLabel));
|
|
7287
7287
|
}
|
|
7288
7288
|
var Input = forwardRef(
|
|
7289
7289
|
({ label, error, helperText, className = "", ...props }, ref) => {
|
|
7290
|
-
return /* @__PURE__ */
|
|
7290
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "w-full" }, label && /* @__PURE__ */ React21.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, label), /* @__PURE__ */ React21.createElement(
|
|
7291
7291
|
"input",
|
|
7292
7292
|
{
|
|
7293
7293
|
ref,
|
|
@@ -7301,7 +7301,7 @@ var Input = forwardRef(
|
|
|
7301
7301
|
`,
|
|
7302
7302
|
...props
|
|
7303
7303
|
}
|
|
7304
|
-
), error && /* @__PURE__ */
|
|
7304
|
+
), error && /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-sm text-red-600" }, error), helperText && !error && /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-sm text-gray-500" }, helperText));
|
|
7305
7305
|
}
|
|
7306
7306
|
);
|
|
7307
7307
|
Input.displayName = "Input";
|
|
@@ -7863,7 +7863,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7863
7863
|
]);
|
|
7864
7864
|
const hasActiveFilters = activeFilterChips.length > 0;
|
|
7865
7865
|
const isCustomPriceDirty = customPrice.min.trim() !== "" || customPrice.max.trim() !== "";
|
|
7866
|
-
const renderFiltersPanel = () => /* @__PURE__ */
|
|
7866
|
+
const renderFiltersPanel = () => /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "space-y-8" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-8" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start justify-between gap-3" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Refine results"), /* @__PURE__ */ React21.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.createElement(
|
|
7867
7867
|
"button",
|
|
7868
7868
|
{
|
|
7869
7869
|
type: "button",
|
|
@@ -7871,10 +7871,10 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7871
7871
|
className: "text-sm font-semibold text-primary-600 hover:text-primary-700"
|
|
7872
7872
|
},
|
|
7873
7873
|
"Clear all"
|
|
7874
|
-
)), /* @__PURE__ */
|
|
7874
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Categories"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-2" }, sortedCategories.length === 0 && /* @__PURE__ */ React21.createElement("span", { className: "text-sm text-gray-500" }, "No categories available yet."), sortedCategories.map((category) => {
|
|
7875
7875
|
const isCategoryActive = categoryFilter === category.id;
|
|
7876
7876
|
const isExpanded = !!expandedCategories[category.id];
|
|
7877
|
-
return /* @__PURE__ */
|
|
7877
|
+
return /* @__PURE__ */ React21.createElement("div", { key: category.id, className: "rounded-xl border-gray-100 bg-white/50" }, /* @__PURE__ */ React21.createElement(
|
|
7878
7878
|
"div",
|
|
7879
7879
|
{
|
|
7880
7880
|
role: "button",
|
|
@@ -7885,8 +7885,8 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7885
7885
|
},
|
|
7886
7886
|
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"}`
|
|
7887
7887
|
},
|
|
7888
|
-
/* @__PURE__ */
|
|
7889
|
-
/* @__PURE__ */
|
|
7888
|
+
/* @__PURE__ */ React21.createElement("span", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("span", { className: "font-medium" }, category.name), category.productCount > 0 && /* @__PURE__ */ React21.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)),
|
|
7889
|
+
/* @__PURE__ */ React21.createElement(
|
|
7890
7890
|
"button",
|
|
7891
7891
|
{
|
|
7892
7892
|
type: "button",
|
|
@@ -7898,11 +7898,11 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7898
7898
|
className: "rounded-md p-1 hover:bg-gray-100",
|
|
7899
7899
|
"aria-label": isExpanded ? "Collapse" : "Expand"
|
|
7900
7900
|
},
|
|
7901
|
-
/* @__PURE__ */
|
|
7901
|
+
/* @__PURE__ */ React21.createElement(ChevronDown, { className: `h-4 w-4 transition-transform ${isExpanded ? "rotate-180 text-primary-600" : "rotate-0 text-gray-400"}` })
|
|
7902
7902
|
)
|
|
7903
|
-
), isExpanded && Array.isArray(category.categorySubCategories) && category.categorySubCategories.length > 0 && /* @__PURE__ */
|
|
7903
|
+
), isExpanded && Array.isArray(category.categorySubCategories) && category.categorySubCategories.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "mt-1 border-gray-100 px-2 pb-2 pl-4" }, /* @__PURE__ */ React21.createElement("div", { className: "divide-y divide-gray-100" }, category.categorySubCategories.map((sub) => {
|
|
7904
7904
|
const isSubActive = subCategoryFilter === sub.id;
|
|
7905
|
-
return /* @__PURE__ */
|
|
7905
|
+
return /* @__PURE__ */ React21.createElement(
|
|
7906
7906
|
"button",
|
|
7907
7907
|
{
|
|
7908
7908
|
key: sub.id,
|
|
@@ -7913,9 +7913,9 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7913
7913
|
sub.name
|
|
7914
7914
|
);
|
|
7915
7915
|
}))));
|
|
7916
|
-
}))))), /* @__PURE__ */
|
|
7916
|
+
}))))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Price"), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, priceRanges.map((range) => {
|
|
7917
7917
|
const isActive = selectedPriceRange === range.value;
|
|
7918
|
-
return /* @__PURE__ */
|
|
7918
|
+
return /* @__PURE__ */ React21.createElement(
|
|
7919
7919
|
"button",
|
|
7920
7920
|
{
|
|
7921
7921
|
type: "button",
|
|
@@ -7925,7 +7925,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7925
7925
|
},
|
|
7926
7926
|
range.label
|
|
7927
7927
|
);
|
|
7928
|
-
})), /* @__PURE__ */
|
|
7928
|
+
})), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-2 gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
7929
7929
|
Input,
|
|
7930
7930
|
{
|
|
7931
7931
|
type: "number",
|
|
@@ -7934,7 +7934,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7934
7934
|
value: customPrice.min,
|
|
7935
7935
|
onChange: (event) => setCustomPrice((current) => ({ ...current, min: event.target.value }))
|
|
7936
7936
|
}
|
|
7937
|
-
), /* @__PURE__ */
|
|
7937
|
+
), /* @__PURE__ */ React21.createElement(
|
|
7938
7938
|
Input,
|
|
7939
7939
|
{
|
|
7940
7940
|
type: "number",
|
|
@@ -7943,7 +7943,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7943
7943
|
value: customPrice.max,
|
|
7944
7944
|
onChange: (event) => setCustomPrice((current) => ({ ...current, max: event.target.value }))
|
|
7945
7945
|
}
|
|
7946
|
-
)), /* @__PURE__ */
|
|
7946
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
7947
7947
|
"button",
|
|
7948
7948
|
{
|
|
7949
7949
|
type: "button",
|
|
@@ -7952,48 +7952,48 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7952
7952
|
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"
|
|
7953
7953
|
},
|
|
7954
7954
|
"Apply price range"
|
|
7955
|
-
)), /* @__PURE__ */
|
|
7955
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Availability"), /* @__PURE__ */ React21.createElement(
|
|
7956
7956
|
"button",
|
|
7957
7957
|
{
|
|
7958
7958
|
type: "button",
|
|
7959
7959
|
onClick: handleToggleStock,
|
|
7960
7960
|
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"}`
|
|
7961
7961
|
},
|
|
7962
|
-
/* @__PURE__ */
|
|
7963
|
-
/* @__PURE__ */
|
|
7964
|
-
), /* @__PURE__ */
|
|
7962
|
+
/* @__PURE__ */ React21.createElement("span", null, "In stock only"),
|
|
7963
|
+
/* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-primary-500" })
|
|
7964
|
+
), /* @__PURE__ */ React21.createElement(
|
|
7965
7965
|
"button",
|
|
7966
7966
|
{
|
|
7967
7967
|
type: "button",
|
|
7968
7968
|
onClick: handleToggleNewArrivals,
|
|
7969
7969
|
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"}`
|
|
7970
7970
|
},
|
|
7971
|
-
/* @__PURE__ */
|
|
7972
|
-
/* @__PURE__ */
|
|
7971
|
+
/* @__PURE__ */ React21.createElement("span", null, "New arrivals (last 30 days)"),
|
|
7972
|
+
/* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-secondary-500" })
|
|
7973
7973
|
))));
|
|
7974
|
-
return /* @__PURE__ */
|
|
7974
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.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.createElement(
|
|
7975
7975
|
"div",
|
|
7976
7976
|
{
|
|
7977
7977
|
className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]",
|
|
7978
7978
|
"aria-hidden": "true"
|
|
7979
7979
|
}
|
|
7980
|
-
), /* @__PURE__ */
|
|
7980
|
+
), /* @__PURE__ */ React21.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.createElement("div", { className: "relative container mx-auto px-4 py-24" }, /* @__PURE__ */ React21.createElement(
|
|
7981
7981
|
motion.div,
|
|
7982
7982
|
{
|
|
7983
7983
|
initial: { opacity: 0, y: 24 },
|
|
7984
7984
|
animate: { opacity: 1, y: 0 },
|
|
7985
7985
|
className: "max-w-3xl space-y-8 text-center md:mx-auto md:text-left"
|
|
7986
7986
|
},
|
|
7987
|
-
/* @__PURE__ */
|
|
7988
|
-
/* @__PURE__ */
|
|
7989
|
-
/* @__PURE__ */
|
|
7990
|
-
/* @__PURE__ */
|
|
7987
|
+
/* @__PURE__ */ React21.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.createElement(Sparkles, { className: "h-4 w-4" }), "Wellness products, curated for you"),
|
|
7988
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-6xl" }, "Find pharmacy favorites crafted to keep your family thriving"),
|
|
7989
|
+
/* @__PURE__ */ React21.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."),
|
|
7990
|
+
/* @__PURE__ */ React21.createElement(
|
|
7991
7991
|
"form",
|
|
7992
7992
|
{
|
|
7993
7993
|
onSubmit: handleSearch,
|
|
7994
7994
|
className: "mx-auto max-w-2xl md:mx-0"
|
|
7995
7995
|
},
|
|
7996
|
-
/* @__PURE__ */
|
|
7996
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React21.createElement(
|
|
7997
7997
|
"input",
|
|
7998
7998
|
{
|
|
7999
7999
|
type: "search",
|
|
@@ -8004,17 +8004,17 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8004
8004
|
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",
|
|
8005
8005
|
disabled: isSearching
|
|
8006
8006
|
}
|
|
8007
|
-
), /* @__PURE__ */
|
|
8007
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8008
8008
|
"button",
|
|
8009
8009
|
{
|
|
8010
8010
|
type: "submit",
|
|
8011
8011
|
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",
|
|
8012
8012
|
disabled: !searchQuery.trim() || isSearching
|
|
8013
8013
|
},
|
|
8014
|
-
isSearching ? /* @__PURE__ */
|
|
8014
|
+
isSearching ? /* @__PURE__ */ React21.createElement("div", { className: "h-5 w-5 animate-spin rounded-full border-2 border-white border-t-transparent" }) : /* @__PURE__ */ React21.createElement(Search, { className: "h-5 w-5" })
|
|
8015
8015
|
))
|
|
8016
8016
|
)
|
|
8017
|
-
), /* @__PURE__ */
|
|
8017
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8018
8018
|
motion.div,
|
|
8019
8019
|
{
|
|
8020
8020
|
initial: { opacity: 0, y: 24 },
|
|
@@ -8022,7 +8022,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8022
8022
|
transition: { delay: 0.15 },
|
|
8023
8023
|
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"
|
|
8024
8024
|
},
|
|
8025
|
-
/* @__PURE__ */
|
|
8025
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, "Explore popular searches"), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, quickSearches.map((term) => /* @__PURE__ */ React21.createElement(
|
|
8026
8026
|
"button",
|
|
8027
8027
|
{
|
|
8028
8028
|
key: term,
|
|
@@ -8032,7 +8032,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8032
8032
|
},
|
|
8033
8033
|
term
|
|
8034
8034
|
)))),
|
|
8035
|
-
topCategories.length > 0 && /* @__PURE__ */
|
|
8035
|
+
topCategories.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "space-y-3 md:text-right" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, "Trending categories"), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap justify-start gap-2 md:justify-end" }, topCategories.map((category) => /* @__PURE__ */ React21.createElement(
|
|
8036
8036
|
"button",
|
|
8037
8037
|
{
|
|
8038
8038
|
key: category.id,
|
|
@@ -8042,9 +8042,9 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8042
8042
|
},
|
|
8043
8043
|
category.name
|
|
8044
8044
|
))))
|
|
8045
|
-
), /* @__PURE__ */
|
|
8045
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "mt-10 grid gap-4 md:grid-cols-3" }, insightCards.map((card, index) => {
|
|
8046
8046
|
const Icon = card.icon;
|
|
8047
|
-
return /* @__PURE__ */
|
|
8047
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8048
8048
|
motion.div,
|
|
8049
8049
|
{
|
|
8050
8050
|
key: card.id,
|
|
@@ -8057,10 +8057,10 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8057
8057
|
"aria-pressed": card.id === "new" ? newArrivals ? "true" : "false" : void 0,
|
|
8058
8058
|
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
|
|
8059
8059
|
},
|
|
8060
|
-
/* @__PURE__ */
|
|
8061
|
-
/* @__PURE__ */
|
|
8060
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, card.label), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-3xl font-semibold text-white" }, card.value)), /* @__PURE__ */ React21.createElement("span", { className: "rounded-full bg-white/20 p-3 text-white" }, /* @__PURE__ */ React21.createElement(Icon, { className: "h-5 w-5" }))),
|
|
8061
|
+
/* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm text-white/70" }, card.helper)
|
|
8062
8062
|
);
|
|
8063
|
-
})))), /* @__PURE__ */
|
|
8063
|
+
})))), /* @__PURE__ */ React21.createElement("div", { className: "relative z-10 -mt-12 pb-16" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-8 lg:flex-row" }, /* @__PURE__ */ React21.createElement("aside", { className: "hidden w-72 flex-shrink-0 lg:block" }, /* @__PURE__ */ React21.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.createElement("main", { className: "flex-1 space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-gray-100 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-bold text-gray-900" }, "All products"), /* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-sm text-gray-500" }, "Browse a pharmacy-grade catalogue with smart merchandising and modern UI.")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3 md:flex-row md:items-center" }, /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(ArrowUpDown, { className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" }), /* @__PURE__ */ React21.createElement(
|
|
8064
8064
|
"select",
|
|
8065
8065
|
{
|
|
8066
8066
|
value: sortOption,
|
|
@@ -8069,11 +8069,11 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8069
8069
|
},
|
|
8070
8070
|
className: "appearance-none rounded-xl border border-gray-200 bg-white py-2.5 pl-10 pr-9 text-sm font-medium text-gray-700 shadow-sm transition focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-500/30"
|
|
8071
8071
|
},
|
|
8072
|
-
/* @__PURE__ */
|
|
8073
|
-
/* @__PURE__ */
|
|
8074
|
-
/* @__PURE__ */
|
|
8075
|
-
/* @__PURE__ */
|
|
8076
|
-
), /* @__PURE__ */
|
|
8072
|
+
/* @__PURE__ */ React21.createElement("option", { value: "featured" }, "Featured products"),
|
|
8073
|
+
/* @__PURE__ */ React21.createElement("option", { value: "price-low-high" }, "Price: low to high"),
|
|
8074
|
+
/* @__PURE__ */ React21.createElement("option", { value: "price-high-low" }, "Price: high to low"),
|
|
8075
|
+
/* @__PURE__ */ React21.createElement("option", { value: "newest" }, "Newest arrivals")
|
|
8076
|
+
), /* @__PURE__ */ React21.createElement(ChevronDown, { className: "pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" })), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center rounded-xl border border-gray-200 bg-white shadow-sm" }, /* @__PURE__ */ React21.createElement(
|
|
8077
8077
|
"button",
|
|
8078
8078
|
{
|
|
8079
8079
|
type: "button",
|
|
@@ -8081,9 +8081,9 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8081
8081
|
className: `flex items-center gap-2 rounded-l-xl px-4 py-2 text-sm font-medium transition ${viewMode === "grid" ? "bg-primary-50 text-primary-600" : "text-gray-500 hover:text-gray-700"}`,
|
|
8082
8082
|
"aria-pressed": viewMode === "grid"
|
|
8083
8083
|
},
|
|
8084
|
-
/* @__PURE__ */
|
|
8084
|
+
/* @__PURE__ */ React21.createElement(LayoutGrid, { className: "h-4 w-4" }),
|
|
8085
8085
|
"Grid"
|
|
8086
|
-
), /* @__PURE__ */
|
|
8086
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8087
8087
|
"button",
|
|
8088
8088
|
{
|
|
8089
8089
|
type: "button",
|
|
@@ -8091,19 +8091,19 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8091
8091
|
className: `flex items-center gap-2 rounded-r-xl px-4 py-2 text-sm font-medium transition ${viewMode === "list" ? "bg-primary-50 text-primary-600" : "text-gray-500 hover:text-gray-700"}`,
|
|
8092
8092
|
"aria-pressed": viewMode === "list"
|
|
8093
8093
|
},
|
|
8094
|
-
/* @__PURE__ */
|
|
8094
|
+
/* @__PURE__ */ React21.createElement(LayoutList, { className: "h-4 w-4" }),
|
|
8095
8095
|
"List"
|
|
8096
|
-
)))), /* @__PURE__ */
|
|
8096
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "mt-4 md:hidden" }, /* @__PURE__ */ React21.createElement(
|
|
8097
8097
|
Button,
|
|
8098
8098
|
{
|
|
8099
8099
|
variant: "outline",
|
|
8100
8100
|
className: "w-full",
|
|
8101
8101
|
onClick: () => setShowFilters(true)
|
|
8102
8102
|
},
|
|
8103
|
-
/* @__PURE__ */
|
|
8103
|
+
/* @__PURE__ */ React21.createElement(SlidersHorizontal, { className: "h-5 w-5" }),
|
|
8104
8104
|
"Filters",
|
|
8105
|
-
hasActiveFilters && /* @__PURE__ */
|
|
8106
|
-
)), hasActiveFilters && /* @__PURE__ */
|
|
8105
|
+
hasActiveFilters && /* @__PURE__ */ React21.createElement("span", { className: "ml-2 rounded-full bg-primary-600 px-2 py-0.5 text-xs font-semibold text-white" }, activeFilterChips.length)
|
|
8106
|
+
)), hasActiveFilters && /* @__PURE__ */ React21.createElement("div", { className: "mt-6 flex flex-wrap items-center gap-2 border-t border-gray-100 pt-4" }, activeFilterChips.map((chip) => /* @__PURE__ */ React21.createElement(
|
|
8107
8107
|
"button",
|
|
8108
8108
|
{
|
|
8109
8109
|
key: chip.key,
|
|
@@ -8112,8 +8112,8 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8112
8112
|
className: "group flex items-center gap-2 rounded-full bg-primary-50 px-3 py-1.5 text-sm font-medium text-primary-700 transition hover:bg-primary-100"
|
|
8113
8113
|
},
|
|
8114
8114
|
chip.label,
|
|
8115
|
-
/* @__PURE__ */
|
|
8116
|
-
)), /* @__PURE__ */
|
|
8115
|
+
/* @__PURE__ */ React21.createElement(X, { className: "h-4 w-4 text-primary-500 group-hover:text-primary-700" })
|
|
8116
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
8117
8117
|
"button",
|
|
8118
8118
|
{
|
|
8119
8119
|
type: "button",
|
|
@@ -8121,7 +8121,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8121
8121
|
className: "text-sm font-semibold text-gray-500 hover:text-gray-700"
|
|
8122
8122
|
},
|
|
8123
8123
|
"Reset all"
|
|
8124
|
-
))), /* @__PURE__ */
|
|
8124
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-gray-100 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3 text-sm text-gray-600 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("span", null, isLoading ? "Loading products..." : `Showing ${displayedProducts.length} of ${pagination.total || displayedProducts.length} products`), /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 text-gray-400" }, /* @__PURE__ */ React21.createElement(Clock, { className: "h-4 w-4" }), "Updated a moment ago")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6" }, isLoading ? /* @__PURE__ */ React21.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.createElement(ProductCardSkeleton, { key: index }))) : displayedProducts.length > 0 ? viewMode === "grid" ? /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 gap-6 sm:grid-cols-2 xl:grid-cols-3" }, displayedProducts.map((product) => /* @__PURE__ */ React21.createElement("div", { key: product.id, className: "h-full" }, /* @__PURE__ */ React21.createElement(
|
|
8125
8125
|
ProductCard,
|
|
8126
8126
|
{
|
|
8127
8127
|
product,
|
|
@@ -8130,11 +8130,11 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8130
8130
|
router.push(buildPath(`/products/${item.id}?product=${productData}`));
|
|
8131
8131
|
}
|
|
8132
8132
|
}
|
|
8133
|
-
)))) : /* @__PURE__ */
|
|
8133
|
+
)))) : /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, displayedProducts.map((product) => {
|
|
8134
8134
|
product.priceBeforeDiscount && product.priceBeforeDiscount > product.finalPrice ? Math.round(
|
|
8135
8135
|
(product.priceBeforeDiscount - product.finalPrice) / product.priceBeforeDiscount * 100
|
|
8136
8136
|
) : 0;
|
|
8137
|
-
return /* @__PURE__ */
|
|
8137
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8138
8138
|
motion.div,
|
|
8139
8139
|
{
|
|
8140
8140
|
key: product.id,
|
|
@@ -8142,7 +8142,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8142
8142
|
className: "group flex cursor-pointer flex-col gap-6 rounded-2xl border border-gray-100 bg-white p-5 shadow-sm transition hover:shadow-xl md:flex-row md:items-start",
|
|
8143
8143
|
onClick: () => router.push(buildPath(`/products/${product.id}`))
|
|
8144
8144
|
},
|
|
8145
|
-
/* @__PURE__ */
|
|
8145
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative h-48 w-full overflow-hidden rounded-2xl bg-gray-100 md:h-40 md:w-40" }, /* @__PURE__ */ React21.createElement(
|
|
8146
8146
|
Image3,
|
|
8147
8147
|
{
|
|
8148
8148
|
src: product.productMedia[0]?.file || "/placeholder-product.jpg",
|
|
@@ -8151,15 +8151,15 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8151
8151
|
className: "object-cover transition duration-500 group-hover:scale-105"
|
|
8152
8152
|
}
|
|
8153
8153
|
)),
|
|
8154
|
-
/* @__PURE__ */
|
|
8154
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1 space-y-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-2 text-xs font-semibold uppercase tracking-wide text-primary-600" }, product.parentCategories.length > 0 && /* @__PURE__ */ React21.createElement("span", { className: "rounded-full bg-primary-50 px-3 py-1 text-primary-700" }, product.parentCategories.map((category) => category?.name).join(", ")), product.tags?.slice(0, 3).map((tag) => /* @__PURE__ */ React21.createElement(
|
|
8155
8155
|
"span",
|
|
8156
8156
|
{
|
|
8157
8157
|
key: tag,
|
|
8158
8158
|
className: "rounded-full bg-slate-100 px-3 py-1 text-gray-600"
|
|
8159
8159
|
},
|
|
8160
8160
|
tag
|
|
8161
|
-
))), /* @__PURE__ */
|
|
8162
|
-
/* @__PURE__ */
|
|
8161
|
+
))), /* @__PURE__ */ React21.createElement("h3", { className: "text-xl font-semibold text-gray-900" }, product.name), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-4 text-sm text-gray-500" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 font-medium text-primary-600" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-4 w-4" }), product.inventoryCount > 0 ? "In stock & ready to ship" : "Restocking soon"), /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(Clock, { className: "h-4 w-4 text-primary-500" }), "Added ", new Date(product.createdAt).toLocaleDateString()))),
|
|
8162
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex w-full flex-col items-end gap-3 md:w-auto" }, /* @__PURE__ */ React21.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21.createElement("p", { className: "text-3xl font-semibold text-gray-900" }, formatPrice(product.finalPrice)), product.priceBeforeDiscount && /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-400 line-through" }, formatPrice(product.priceBeforeDiscount))), /* @__PURE__ */ React21.createElement(
|
|
8163
8163
|
Button,
|
|
8164
8164
|
{
|
|
8165
8165
|
size: "sm",
|
|
@@ -8171,7 +8171,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8171
8171
|
"View product"
|
|
8172
8172
|
))
|
|
8173
8173
|
);
|
|
8174
|
-
})) : /* @__PURE__ */
|
|
8174
|
+
})) : /* @__PURE__ */ React21.createElement(
|
|
8175
8175
|
EmptyState,
|
|
8176
8176
|
{
|
|
8177
8177
|
icon: Package,
|
|
@@ -8180,7 +8180,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8180
8180
|
actionLabel: hasActiveFilters ? "Clear filters" : void 0,
|
|
8181
8181
|
onAction: hasActiveFilters ? handleClearFilters : void 0
|
|
8182
8182
|
}
|
|
8183
|
-
)), pagination.totalPages > 1 && /* @__PURE__ */
|
|
8183
|
+
)), pagination.totalPages > 1 && /* @__PURE__ */ React21.createElement("div", { className: "mt-10 flex flex-wrap items-center justify-center gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
8184
8184
|
Button,
|
|
8185
8185
|
{
|
|
8186
8186
|
variant: "outline",
|
|
@@ -8188,7 +8188,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8188
8188
|
disabled: page === 1
|
|
8189
8189
|
},
|
|
8190
8190
|
"Previous"
|
|
8191
|
-
), /* @__PURE__ */
|
|
8191
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-semibold text-gray-600" }, "Page ", page, " of ", pagination.totalPages), /* @__PURE__ */ React21.createElement(
|
|
8192
8192
|
Button,
|
|
8193
8193
|
{
|
|
8194
8194
|
variant: "outline",
|
|
@@ -8196,7 +8196,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8196
8196
|
disabled: page === pagination.totalPages
|
|
8197
8197
|
},
|
|
8198
8198
|
"Next"
|
|
8199
|
-
))))))), /* @__PURE__ */
|
|
8199
|
+
))))))), /* @__PURE__ */ React21.createElement(AnimatePresence, null, showFilters && /* @__PURE__ */ React21.createElement(
|
|
8200
8200
|
motion.div,
|
|
8201
8201
|
{
|
|
8202
8202
|
initial: { opacity: 0 },
|
|
@@ -8204,7 +8204,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8204
8204
|
exit: { opacity: 0 },
|
|
8205
8205
|
className: "fixed inset-0 z-50 bg-black/40 backdrop-blur-sm lg:hidden"
|
|
8206
8206
|
},
|
|
8207
|
-
/* @__PURE__ */
|
|
8207
|
+
/* @__PURE__ */ React21.createElement(
|
|
8208
8208
|
motion.div,
|
|
8209
8209
|
{
|
|
8210
8210
|
initial: { y: "100%" },
|
|
@@ -8213,14 +8213,14 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8213
8213
|
transition: { type: "spring", stiffness: 260, damping: 26 },
|
|
8214
8214
|
className: "absolute inset-x-0 bottom-0 max-h-[85vh] overflow-y-auto rounded-t-3xl bg-white p-6 shadow-2xl"
|
|
8215
8215
|
},
|
|
8216
|
-
/* @__PURE__ */
|
|
8216
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mb-6 flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Filters"), /* @__PURE__ */ React21.createElement(
|
|
8217
8217
|
"button",
|
|
8218
8218
|
{
|
|
8219
8219
|
type: "button",
|
|
8220
8220
|
onClick: () => setShowFilters(false),
|
|
8221
8221
|
className: "rounded-full border border-gray-200 p-2 text-gray-500 hover:text-gray-700"
|
|
8222
8222
|
},
|
|
8223
|
-
/* @__PURE__ */
|
|
8223
|
+
/* @__PURE__ */ React21.createElement(X, { className: "h-4 w-4" })
|
|
8224
8224
|
)),
|
|
8225
8225
|
renderFiltersPanel()
|
|
8226
8226
|
)
|
|
@@ -8239,7 +8239,7 @@ function Badge({ children, variant = "primary", size = "md", className = "" }) {
|
|
|
8239
8239
|
sm: "px-2 py-1 text-xs",
|
|
8240
8240
|
md: "px-3 py-1 text-sm"
|
|
8241
8241
|
};
|
|
8242
|
-
return /* @__PURE__ */
|
|
8242
|
+
return /* @__PURE__ */ React21.createElement("span", { className: `inline-flex items-center font-medium rounded-full border ${variants[variant]} ${sizes[size]} ${className}` }, children);
|
|
8243
8243
|
}
|
|
8244
8244
|
var safeFormatDate = (date, format = "long") => {
|
|
8245
8245
|
if (!date) return "N/A";
|
|
@@ -8399,10 +8399,10 @@ function ProductDetailScreen({ productId }) {
|
|
|
8399
8399
|
}
|
|
8400
8400
|
};
|
|
8401
8401
|
if (isLoading) {
|
|
8402
|
-
return /* @__PURE__ */
|
|
8402
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "h-[520px] animate-pulse rounded-3xl bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-3 gap-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21.createElement("div", { key: index, className: "h-32 animate-pulse rounded-2xl bg-slate-200" })))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-4 rounded-3xl bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "h-8 w-32 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "h-10 w-48 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "h-6 w-full animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" })))));
|
|
8403
8403
|
}
|
|
8404
8404
|
if (!product) {
|
|
8405
|
-
return /* @__PURE__ */
|
|
8405
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl bg-white p-10 text-center shadow-sm" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "mx-auto h-10 w-10 text-primary-500" }), /* @__PURE__ */ React21.createElement("h1", { className: "mt-6 text-2xl font-semibold text-gray-900" }, "Product not found"), /* @__PURE__ */ React21.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.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React21.createElement(Link8, { href: "/shop", className: "inline-block" }, /* @__PURE__ */ React21.createElement(Button, null, "Browse products"))))));
|
|
8406
8406
|
}
|
|
8407
8407
|
product.tags && product.tags.length > 0 ? product.tags.slice(0, 6) : ["Pharmacist approved", "Gentle on daily routines", "Backed by real customers"];
|
|
8408
8408
|
const highlightCards = [
|
|
@@ -8422,29 +8422,29 @@ function ProductDetailScreen({ productId }) {
|
|
|
8422
8422
|
description: "Average rating 4.8/5 with over 120 verified customer experiences."
|
|
8423
8423
|
}
|
|
8424
8424
|
];
|
|
8425
|
-
return /* @__PURE__ */
|
|
8425
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.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.createElement(
|
|
8426
8426
|
"div",
|
|
8427
8427
|
{
|
|
8428
8428
|
className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]",
|
|
8429
8429
|
"aria-hidden": "true"
|
|
8430
8430
|
}
|
|
8431
|
-
), /* @__PURE__ */
|
|
8431
|
+
), /* @__PURE__ */ React21.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.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement(
|
|
8432
8432
|
Button,
|
|
8433
8433
|
{
|
|
8434
8434
|
variant: "ghost",
|
|
8435
8435
|
className: "text-white hover:bg-white/10",
|
|
8436
8436
|
onClick: () => router.push(buildPath("/shop"))
|
|
8437
8437
|
},
|
|
8438
|
-
/* @__PURE__ */
|
|
8438
|
+
/* @__PURE__ */ React21.createElement(ArrowLeft, { className: "h-5 w-5" }),
|
|
8439
8439
|
"Continue shopping"
|
|
8440
|
-
), /* @__PURE__ */
|
|
8440
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "hidden items-center gap-3 text-sm text-white/80 md:flex" }, /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/"), className: "transition hover:text-white" }, "Home"), /* @__PURE__ */ React21.createElement(ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/shop"), className: "transition hover:text-white" }, "Shop"), /* @__PURE__ */ React21.createElement(ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React21.createElement("span", { className: "truncate font-medium text-white" }, product.name))), /* @__PURE__ */ React21.createElement(
|
|
8441
8441
|
motion.div,
|
|
8442
8442
|
{
|
|
8443
8443
|
initial: { opacity: 0, y: 24 },
|
|
8444
8444
|
animate: { opacity: 1, y: 0 },
|
|
8445
8445
|
className: "max-w-3xl space-y-4"
|
|
8446
8446
|
},
|
|
8447
|
-
product.category && /* @__PURE__ */
|
|
8447
|
+
product.category && /* @__PURE__ */ React21.createElement(
|
|
8448
8448
|
Badge,
|
|
8449
8449
|
{
|
|
8450
8450
|
variant: "secondary",
|
|
@@ -8452,9 +8452,9 @@ function ProductDetailScreen({ productId }) {
|
|
|
8452
8452
|
},
|
|
8453
8453
|
product.category
|
|
8454
8454
|
),
|
|
8455
|
-
/* @__PURE__ */
|
|
8456
|
-
/* @__PURE__ */
|
|
8457
|
-
)))), /* @__PURE__ */
|
|
8455
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-5xl" }, product.name),
|
|
8456
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-3 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 font-medium text-white" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4" }), "Ready to ship today"), /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 font-medium text-white" }, /* @__PURE__ */ React21.createElement(Shield, { className: "h-4 w-4" }), "30-day happiness guarantee"))
|
|
8457
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-10" }, /* @__PURE__ */ React21.createElement("section", { className: "rounded-3xl border border-white bg-white/70 p-6 shadow-xl shadow-primary-100/40 backdrop-blur" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-6 lg:grid-cols-[minmax(0,1fr)_220px]" }, /* @__PURE__ */ React21.createElement(
|
|
8458
8458
|
motion.div,
|
|
8459
8459
|
{
|
|
8460
8460
|
key: variantImages[activeImageIndex],
|
|
@@ -8463,7 +8463,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8463
8463
|
transition: { duration: 0.35 },
|
|
8464
8464
|
className: "relative overflow-hidden rounded-3xl bg-slate-100 h-[420px] md:h-[560px]"
|
|
8465
8465
|
},
|
|
8466
|
-
/* @__PURE__ */
|
|
8466
|
+
/* @__PURE__ */ React21.createElement(
|
|
8467
8467
|
Image3,
|
|
8468
8468
|
{
|
|
8469
8469
|
src: variantImages[activeImageIndex],
|
|
@@ -8474,7 +8474,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8474
8474
|
className: "object-contain"
|
|
8475
8475
|
}
|
|
8476
8476
|
),
|
|
8477
|
-
discount > 0 && /* @__PURE__ */
|
|
8477
|
+
discount > 0 && /* @__PURE__ */ React21.createElement(
|
|
8478
8478
|
Badge,
|
|
8479
8479
|
{
|
|
8480
8480
|
variant: "danger",
|
|
@@ -8484,7 +8484,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8484
8484
|
discount,
|
|
8485
8485
|
"%"
|
|
8486
8486
|
),
|
|
8487
|
-
!variantInStock && /* @__PURE__ */
|
|
8487
|
+
!variantInStock && /* @__PURE__ */ React21.createElement(
|
|
8488
8488
|
Badge,
|
|
8489
8489
|
{
|
|
8490
8490
|
variant: "secondary",
|
|
@@ -8492,7 +8492,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8492
8492
|
},
|
|
8493
8493
|
"Out of Stock"
|
|
8494
8494
|
)
|
|
8495
|
-
), /* @__PURE__ */
|
|
8495
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4" }, product?.productVariants?.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-4 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "mb-2 text-sm font-semibold uppercase tracking-[0.25em] text-slate-400" }, "Variant"), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, product?.productVariants?.map((variant, index) => /* @__PURE__ */ React21.createElement(
|
|
8496
8496
|
"button",
|
|
8497
8497
|
{
|
|
8498
8498
|
key: variant.id,
|
|
@@ -8501,7 +8501,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8501
8501
|
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"}`
|
|
8502
8502
|
},
|
|
8503
8503
|
variant.name
|
|
8504
|
-
)))), /* @__PURE__ */
|
|
8504
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-3 gap-3" }, variantImages.map((image, index) => /* @__PURE__ */ React21.createElement(
|
|
8505
8505
|
"button",
|
|
8506
8506
|
{
|
|
8507
8507
|
key: image.src + index,
|
|
@@ -8509,7 +8509,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8509
8509
|
onClick: () => setActiveImageIndex(index),
|
|
8510
8510
|
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"}`
|
|
8511
8511
|
},
|
|
8512
|
-
/* @__PURE__ */
|
|
8512
|
+
/* @__PURE__ */ React21.createElement(
|
|
8513
8513
|
Image3,
|
|
8514
8514
|
{
|
|
8515
8515
|
src: image.src,
|
|
@@ -8520,18 +8520,18 @@ function ProductDetailScreen({ productId }) {
|
|
|
8520
8520
|
unoptimized: true
|
|
8521
8521
|
}
|
|
8522
8522
|
)
|
|
8523
|
-
)))))), /* @__PURE__ */
|
|
8523
|
+
)))))), /* @__PURE__ */ React21.createElement("section", { className: "grid gap-6 lg:grid-cols-3" }, highlightCards.map((card) => {
|
|
8524
8524
|
const Icon = card.icon;
|
|
8525
|
-
return /* @__PURE__ */
|
|
8525
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8526
8526
|
"div",
|
|
8527
8527
|
{
|
|
8528
8528
|
key: card.title,
|
|
8529
8529
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-lg"
|
|
8530
8530
|
},
|
|
8531
|
-
/* @__PURE__ */
|
|
8532
|
-
/* @__PURE__ */
|
|
8531
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement("span", { className: "rounded-2xl bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React21.createElement(Icon, { className: "h-5 w-5" })), /* @__PURE__ */ React21.createElement("h3", { className: "text-base font-semibold text-slate-900" }, card.title)),
|
|
8532
|
+
/* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm leading-relaxed text-slate-600" }, card.description)
|
|
8533
8533
|
);
|
|
8534
|
-
})), /* @__PURE__ */
|
|
8534
|
+
})), /* @__PURE__ */ React21.createElement("section", { className: "grid gap-6 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-4 pb-6" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-1 text-amber-500" }, Array.from({ length: 5 }).map((_, index) => /* @__PURE__ */ React21.createElement(Star, { key: index, className: "h-4 w-4 fill-current" }))), /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-medium text-slate-500" }, "Rated 4.8 \u2022 Patients love the results")), /* @__PURE__ */ React21.createElement("div", { className: "space-y-8" }, product.description && /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, "Description"), /* @__PURE__ */ React21.createElement("p", { className: "text-base leading-relaxed text-slate-600", dangerouslySetInnerHTML: { __html: product.description } })))), /* @__PURE__ */ React21.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.createElement("h3", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-primary-500" }, "Care tips"), /* @__PURE__ */ React21.createElement("div", { className: "mt-4 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("p", { className: "leading-relaxed" }, "Store in a cool, dry place away from direct sunlight. Check packaging for allergen statements."), /* @__PURE__ */ React21.createElement("p", { className: "leading-relaxed" }, "Consult with your local pharmacist if you are combining with other treatments or have chronic conditions."), /* @__PURE__ */ React21.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.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-sm" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Product insights"), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 grid gap-6 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/60 p-5" }, /* @__PURE__ */ React21.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-500" }, "Availability"), /* @__PURE__ */ React21.createElement("div", { className: "mt-3 flex items-center gap-2 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement(Check, { className: "h-4 w-4 text-primary-500" }), product.inStock ? "Available for dispatch today" : "Currently restocking"), product.stock !== void 0 && /* @__PURE__ */ React21.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.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/60 p-5" }, /* @__PURE__ */ React21.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-500" }, "Product details"), /* @__PURE__ */ React21.createElement("div", { className: "mt-3 space-y-2 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "Variant:"), " ", currentVariant.name), /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "SKU:"), " ", variantSku), /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "Status:"), " ", /* @__PURE__ */ React21.createElement("span", { className: variantInStock ? "text-green-600" : "text-amber-600" }, variantInStock ? "In Stock" : "Out of Stock")), /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "Last updated:"), " ", lastUpdatedLabel), /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "Ships from:"), " Local pharmacy distribution center")))))), /* @__PURE__ */ React21.createElement("aside", { className: "space-y-6 lg:sticky lg:top-24" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-100/40" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-baseline gap-3" }, /* @__PURE__ */ React21.createElement("p", { className: "text-3xl font-bold text-slate-900" }, selectedVariant ? formatPrice(selectedVariant.finalPrice) : formatPrice(product.price)), variantComparePrice && variantComparePrice > variantPrice && /* @__PURE__ */ React21.createElement("p", { className: "text-base text-slate-400 line-through" }, formatPrice(variantComparePrice)), discount > 0 && /* @__PURE__ */ React21.createElement(Badge, { variant: "danger", size: "sm" }, "-", discount, "%")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-y-4" }, /* @__PURE__ */ React21.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.createElement(ShieldCheck, { className: "h-4 w-4" }), "Pharmacist verified product"), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between rounded-2xl border border-slate-200 px-4 py-3" }, /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-medium text-slate-600" }, "Qty"), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center rounded-full border border-slate-200 bg-slate-50" }, /* @__PURE__ */ React21.createElement(
|
|
8535
8535
|
"button",
|
|
8536
8536
|
{
|
|
8537
8537
|
type: "button",
|
|
@@ -8539,8 +8539,8 @@ function ProductDetailScreen({ productId }) {
|
|
|
8539
8539
|
className: "rounded-l-full p-2 hover:bg-primary-100/60",
|
|
8540
8540
|
"aria-label": "Decrease quantity"
|
|
8541
8541
|
},
|
|
8542
|
-
/* @__PURE__ */
|
|
8543
|
-
), /* @__PURE__ */
|
|
8542
|
+
/* @__PURE__ */ React21.createElement(Minus, { className: "h-4 w-4" })
|
|
8543
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "w-12 text-center text-sm font-semibold text-slate-700" }, quantity), /* @__PURE__ */ React21.createElement(
|
|
8544
8544
|
"button",
|
|
8545
8545
|
{
|
|
8546
8546
|
type: "button",
|
|
@@ -8548,8 +8548,8 @@ function ProductDetailScreen({ productId }) {
|
|
|
8548
8548
|
className: "rounded-r-full p-2 hover:bg-primary-100/60",
|
|
8549
8549
|
"aria-label": "Increase quantity"
|
|
8550
8550
|
},
|
|
8551
|
-
/* @__PURE__ */
|
|
8552
|
-
)))), selectedVariant && /* @__PURE__ */
|
|
8551
|
+
/* @__PURE__ */ React21.createElement(Plus, { className: "h-4 w-4" })
|
|
8552
|
+
)))), selectedVariant && /* @__PURE__ */ React21.createElement("div", { className: "mt-4 text-sm" }, selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ || selectedVariant.inventoryStatus === "LOW_STOCK" /* LOWSTOCK */ ? /* @__PURE__ */ React21.createElement("div", { className: "text-red-600 font-medium" }, "Out of Stock") : /* @__PURE__ */ React21.createElement("div", { className: "text-green-600 font-medium" }, "In Stock")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-x-3" }, /* @__PURE__ */ React21.createElement(
|
|
8553
8553
|
Button,
|
|
8554
8554
|
{
|
|
8555
8555
|
size: "lg",
|
|
@@ -8558,9 +8558,9 @@ function ProductDetailScreen({ productId }) {
|
|
|
8558
8558
|
isLoading: isAddingToCart,
|
|
8559
8559
|
disabled: !selectedVariant || selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */
|
|
8560
8560
|
},
|
|
8561
|
-
/* @__PURE__ */
|
|
8561
|
+
/* @__PURE__ */ React21.createElement(ShoppingCart, { className: "h-5 w-5" }),
|
|
8562
8562
|
!selectedVariant ? "Select a variant" : selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ ? "Out of Stock" : `Add to Cart`
|
|
8563
|
-
), /* @__PURE__ */
|
|
8563
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8564
8564
|
Button,
|
|
8565
8565
|
{
|
|
8566
8566
|
size: "lg",
|
|
@@ -8568,14 +8568,14 @@ function ProductDetailScreen({ productId }) {
|
|
|
8568
8568
|
className: "w-full",
|
|
8569
8569
|
onClick: handleToggleFavorite
|
|
8570
8570
|
},
|
|
8571
|
-
/* @__PURE__ */
|
|
8571
|
+
/* @__PURE__ */ React21.createElement(
|
|
8572
8572
|
Heart,
|
|
8573
8573
|
{
|
|
8574
8574
|
className: `h-5 w-5 ${isFavorited ? "fill-red-500 text-red-500" : "text-slate-500"}`
|
|
8575
8575
|
}
|
|
8576
8576
|
),
|
|
8577
8577
|
isFavorited ? "Saved" : "Save for later"
|
|
8578
|
-
))), /* @__PURE__ */
|
|
8578
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.25em]" }, "Need advice?"), /* @__PURE__ */ React21.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.createElement("section", { className: "mt-20" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "You may also like"), /* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Hand-picked recommendations that pair nicely with this product.")), /* @__PURE__ */ React21.createElement(Link8, { href: "/shop", className: "hidden md:inline-flex" }, /* @__PURE__ */ React21.createElement(Button, { variant: "ghost", className: "text-primary-600" }, "View all products"))), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 grid gap-6 sm:grid-cols-2 lg:grid-cols-4" }, relatedProducts?.map((relatedProduct) => /* @__PURE__ */ React21.createElement(ProductCard, { key: relatedProduct.id, product: relatedProduct })))))));
|
|
8579
8579
|
}
|
|
8580
8580
|
function CartItem({ item }) {
|
|
8581
8581
|
const { updateQuantity, removeFromCart } = useCart();
|
|
@@ -8593,7 +8593,7 @@ function CartItem({ item }) {
|
|
|
8593
8593
|
await removeFromCart(item.productVariantId);
|
|
8594
8594
|
};
|
|
8595
8595
|
const itemTotal = item.productVariantData.finalPrice * item.quantity;
|
|
8596
|
-
return /* @__PURE__ */
|
|
8596
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8597
8597
|
motion.div,
|
|
8598
8598
|
{
|
|
8599
8599
|
layout: true,
|
|
@@ -8602,7 +8602,7 @@ function CartItem({ item }) {
|
|
|
8602
8602
|
exit: { opacity: 0, x: -100 },
|
|
8603
8603
|
className: "flex gap-4 bg-white p-4 rounded-xl border border-gray-200 hover:border-primary-300 transition-colors"
|
|
8604
8604
|
},
|
|
8605
|
-
/* @__PURE__ */
|
|
8605
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative w-24 h-24 rounded-lg overflow-hidden flex-shrink-0 bg-gray-100" }, /* @__PURE__ */ React21.createElement(
|
|
8606
8606
|
Image3,
|
|
8607
8607
|
{
|
|
8608
8608
|
src: item.productVariantData.productMedia[0]?.file || "/placeholder-product.jpg",
|
|
@@ -8611,32 +8611,32 @@ function CartItem({ item }) {
|
|
|
8611
8611
|
className: "object-cover"
|
|
8612
8612
|
}
|
|
8613
8613
|
)),
|
|
8614
|
-
/* @__PURE__ */
|
|
8614
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900 truncate" }, item.productVariantData.name), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-500 mt-1" }, formatPrice(item.productVariantData.finalPrice), " each"), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3 mt-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center border-2 border-gray-200 rounded-lg" }, /* @__PURE__ */ React21.createElement(
|
|
8615
8615
|
"button",
|
|
8616
8616
|
{
|
|
8617
8617
|
onClick: () => handleUpdateQuantity(item.quantity - 1),
|
|
8618
8618
|
disabled: isUpdating || item.quantity <= 0,
|
|
8619
8619
|
className: "p-2 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
|
|
8620
8620
|
},
|
|
8621
|
-
/* @__PURE__ */
|
|
8622
|
-
), /* @__PURE__ */
|
|
8621
|
+
/* @__PURE__ */ React21.createElement(Minus, { className: "w-4 h-4" })
|
|
8622
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "px-4 font-medium min-w-[3rem] text-center" }, isUpdating ? /* @__PURE__ */ React21.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.createElement(
|
|
8623
8623
|
"button",
|
|
8624
8624
|
{
|
|
8625
8625
|
onClick: () => handleUpdateQuantity(item.quantity + 1),
|
|
8626
8626
|
disabled: isUpdating || item.quantity >= item.productVariantData.inventoryCount,
|
|
8627
8627
|
className: "p-2 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
|
|
8628
8628
|
},
|
|
8629
|
-
/* @__PURE__ */
|
|
8630
|
-
)), /* @__PURE__ */
|
|
8629
|
+
/* @__PURE__ */ React21.createElement(Plus, { className: "w-4 h-4" })
|
|
8630
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
8631
8631
|
"button",
|
|
8632
8632
|
{
|
|
8633
8633
|
onClick: handleRemove,
|
|
8634
8634
|
className: "p-2 text-red-600 hover:bg-red-50 rounded-lg transition-colors",
|
|
8635
8635
|
"aria-label": "Remove item"
|
|
8636
8636
|
},
|
|
8637
|
-
/* @__PURE__ */
|
|
8637
|
+
/* @__PURE__ */ React21.createElement(Trash2, { className: "w-5 h-5" })
|
|
8638
8638
|
))),
|
|
8639
|
-
/* @__PURE__ */
|
|
8639
|
+
/* @__PURE__ */ React21.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21.createElement("p", { className: "text-xl font-bold text-gray-900" }, formatPrice(itemTotal)))
|
|
8640
8640
|
);
|
|
8641
8641
|
}
|
|
8642
8642
|
function CartScreen() {
|
|
@@ -8644,31 +8644,101 @@ function CartScreen() {
|
|
|
8644
8644
|
const { cart, isLoading } = useCart();
|
|
8645
8645
|
const { buildPath } = useBasePath();
|
|
8646
8646
|
if (!cart || cart.cartBody.items.length === 0) {
|
|
8647
|
-
|
|
8648
|
-
EmptyState,
|
|
8647
|
+
const highlights = [
|
|
8649
8648
|
{
|
|
8650
|
-
icon:
|
|
8651
|
-
title: "
|
|
8652
|
-
description: "
|
|
8653
|
-
|
|
8654
|
-
|
|
8649
|
+
icon: ShieldCheck,
|
|
8650
|
+
title: "Pharmacist approved",
|
|
8651
|
+
description: "Every product passes pharmacist review and cold-chain handling standards."
|
|
8652
|
+
},
|
|
8653
|
+
{
|
|
8654
|
+
icon: BadgePercent,
|
|
8655
|
+
title: "Bundle savings",
|
|
8656
|
+
description: "Unlock tiered discounts when you combine vitamins, OTC, and wellness kits."
|
|
8657
|
+
},
|
|
8658
|
+
{
|
|
8659
|
+
icon: HeartPulse,
|
|
8660
|
+
title: "Personalized guidance",
|
|
8661
|
+
description: "Follow curated collections tailored to your health goals and routines."
|
|
8655
8662
|
}
|
|
8656
|
-
|
|
8663
|
+
];
|
|
8664
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "relative min-h-screen overflow-hidden bg-slate-950" }, /* @__PURE__ */ React21.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.createElement("div", { className: "absolute inset-0" }, /* @__PURE__ */ React21.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.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.createElement("div", { className: "relative z-10 flex min-h-screen items-center px-6 py-20" }, /* @__PURE__ */ React21.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.createElement(
|
|
8665
|
+
motion.div,
|
|
8666
|
+
{
|
|
8667
|
+
initial: { opacity: 0, y: 24 },
|
|
8668
|
+
animate: { opacity: 1, y: 0 },
|
|
8669
|
+
transition: { duration: 0.4 },
|
|
8670
|
+
className: "space-y-8 text-white"
|
|
8671
|
+
},
|
|
8672
|
+
/* @__PURE__ */ React21.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.createElement(ShoppingBag, { className: "h-4 w-4" }), "Cart status"),
|
|
8673
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Your wellness cart is waiting for a refill"), /* @__PURE__ */ React21.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.")),
|
|
8674
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
8675
|
+
Button,
|
|
8676
|
+
{
|
|
8677
|
+
size: "lg",
|
|
8678
|
+
className: "bg-white text-primary-700 shadow-xl shadow-white/30 hover:bg-white/90 hover:text-primary-700",
|
|
8679
|
+
onClick: () => router.push(buildPath("/shop"))
|
|
8680
|
+
},
|
|
8681
|
+
"Discover products",
|
|
8682
|
+
/* @__PURE__ */ React21.createElement(ArrowRight, { className: "h-5 w-5" })
|
|
8683
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8684
|
+
"button",
|
|
8685
|
+
{
|
|
8686
|
+
type: "button",
|
|
8687
|
+
onClick: () => router.push(buildPath("/categories")),
|
|
8688
|
+
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"
|
|
8689
|
+
},
|
|
8690
|
+
"Browse categories",
|
|
8691
|
+
/* @__PURE__ */ React21.createElement(ArrowRight, { className: "h-4 w-4" })
|
|
8692
|
+
)),
|
|
8693
|
+
/* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 sm:grid-cols-2" }, highlights.map(({ icon: Icon, title, description }) => /* @__PURE__ */ React21.createElement(
|
|
8694
|
+
"div",
|
|
8695
|
+
{
|
|
8696
|
+
key: title,
|
|
8697
|
+
className: "rounded-2xl border border-white/15 bg-white/10 p-5 backdrop-blur transition hover:border-white/25 hover:bg-white/15"
|
|
8698
|
+
},
|
|
8699
|
+
/* @__PURE__ */ React21.createElement(Icon, { className: "h-6 w-6 text-white/90" }),
|
|
8700
|
+
/* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm font-semibold text-white" }, title),
|
|
8701
|
+
/* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-xs text-white/70" }, description)
|
|
8702
|
+
)))
|
|
8703
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8704
|
+
motion.div,
|
|
8705
|
+
{
|
|
8706
|
+
initial: { opacity: 0, y: 24 },
|
|
8707
|
+
animate: { opacity: 1, y: 0 },
|
|
8708
|
+
transition: { delay: 0.1, duration: 0.4 },
|
|
8709
|
+
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)]"
|
|
8710
|
+
},
|
|
8711
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl bg-white/20" }, /* @__PURE__ */ React21.createElement(ShoppingBag, { className: "h-8 w-8 text-white" })),
|
|
8712
|
+
/* @__PURE__ */ React21.createElement("h2", { className: "mt-6 text-3xl font-semibold text-white" }, "Still building your bag?"),
|
|
8713
|
+
/* @__PURE__ */ React21.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."),
|
|
8714
|
+
/* @__PURE__ */ React21.createElement("ul", { className: "mt-6 space-y-3 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement("li", { className: "flex items-center gap-2 rounded-xl bg-white/10 px-4 py-3" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-5 w-5 text-white" }), "Pharmacist oversight on every order"), /* @__PURE__ */ React21.createElement("li", { className: "flex items-center gap-2 rounded-xl bg-white/10 px-4 py-3" }, /* @__PURE__ */ React21.createElement(BadgePercent, { className: "h-5 w-5 text-white" }), "Member-only savings unlock at checkout"), /* @__PURE__ */ React21.createElement("li", { className: "flex items-center gap-2 rounded-xl bg-white/10 px-4 py-3" }, /* @__PURE__ */ React21.createElement(HeartPulse, { className: "h-5 w-5 text-white" }), "Personalized care plans for each purchase")),
|
|
8715
|
+
/* @__PURE__ */ React21.createElement(
|
|
8716
|
+
Button,
|
|
8717
|
+
{
|
|
8718
|
+
size: "lg",
|
|
8719
|
+
variant: "outline",
|
|
8720
|
+
className: "mt-8 w-full border-white/40 text-white hover:border-white hover:bg-white/10",
|
|
8721
|
+
onClick: () => router.push(buildPath("/shop"))
|
|
8722
|
+
},
|
|
8723
|
+
"Start building my cart",
|
|
8724
|
+
/* @__PURE__ */ React21.createElement(ArrowRight, { className: "h-5 w-5" })
|
|
8725
|
+
)
|
|
8726
|
+
))));
|
|
8657
8727
|
}
|
|
8658
8728
|
const subtotal = cart.total;
|
|
8659
8729
|
const shipping = 0;
|
|
8660
8730
|
const tax = 0;
|
|
8661
8731
|
const total = subtotal + shipping + tax;
|
|
8662
|
-
return /* @__PURE__ */
|
|
8732
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.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.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16 mb-8" }, /* @__PURE__ */ React21.createElement(
|
|
8663
8733
|
motion.div,
|
|
8664
8734
|
{
|
|
8665
8735
|
initial: { opacity: 0, y: 24 },
|
|
8666
8736
|
animate: { opacity: 1, y: 0 },
|
|
8667
8737
|
className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between"
|
|
8668
8738
|
},
|
|
8669
|
-
/* @__PURE__ */
|
|
8670
|
-
/* @__PURE__ */
|
|
8671
|
-
))), /* @__PURE__ */
|
|
8739
|
+
/* @__PURE__ */ React21.createElement("div", { className: "max-w-2xl space-y-4" }, /* @__PURE__ */ React21.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.createElement(HeartPulse, { className: "h-4 w-4" }), "Wellness essentials, ready when you are"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Your curated cart"), /* @__PURE__ */ React21.createElement("p", { className: "text-white/75 md:text-lg" }, "Review your selections, unlock exclusive perks, and check out with pharmacist-backed confidence.")),
|
|
8740
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur-md" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Cart summary"), /* @__PURE__ */ React21.createElement("p", { className: "mt-4 text-4xl font-semibold" }, formatPrice(total)), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/70" }, "Taxes and shipping calculated below"))
|
|
8741
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement(
|
|
8672
8742
|
motion.section,
|
|
8673
8743
|
{
|
|
8674
8744
|
initial: { opacity: 0, y: 24 },
|
|
@@ -8676,10 +8746,10 @@ function CartScreen() {
|
|
|
8676
8746
|
transition: { delay: 0.05 },
|
|
8677
8747
|
className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
|
|
8678
8748
|
},
|
|
8679
|
-
/* @__PURE__ */
|
|
8680
|
-
isLoading && /* @__PURE__ */
|
|
8681
|
-
/* @__PURE__ */
|
|
8682
|
-
), /* @__PURE__ */
|
|
8749
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Items (", cart.cartBody.items.length, ")"), /* @__PURE__ */ React21.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.createElement(ShieldCheck, { className: "h-4 w-4" }), "Guaranteed cold-chain handling")),
|
|
8750
|
+
isLoading && /* @__PURE__ */ React21.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.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"),
|
|
8751
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-5" }, cart.cartBody.items.map((item) => /* @__PURE__ */ React21.createElement(CartItem, { key: item.productVariantId, item })))
|
|
8752
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8683
8753
|
motion.aside,
|
|
8684
8754
|
{
|
|
8685
8755
|
initial: { opacity: 0, y: 24 },
|
|
@@ -8687,7 +8757,7 @@ function CartScreen() {
|
|
|
8687
8757
|
transition: { delay: 0.1 },
|
|
8688
8758
|
className: "space-y-6 lg:sticky lg:top-28"
|
|
8689
8759
|
},
|
|
8690
|
-
/* @__PURE__ */
|
|
8760
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Checkout summary"), /* @__PURE__ */ React21.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.createElement(BadgePercent, { className: "h-4 w-4" }), "Savings applied")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Subtotal"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold text-slate-900" }, formatPrice(subtotal))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Shipping"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold" }, "Will be calculated at checkout")), /* @__PURE__ */ React21.createElement("div", { className: "rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-base font-semibold text-slate-900" }, /* @__PURE__ */ React21.createElement("span", null, "Order total"), /* @__PURE__ */ React21.createElement("span", null, formatPrice(total))), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-xs text-slate-500" }, "Prices include pharmacy-grade quality control and packaging."))), /* @__PURE__ */ React21.createElement(
|
|
8691
8761
|
Button,
|
|
8692
8762
|
{
|
|
8693
8763
|
size: "lg",
|
|
@@ -8695,8 +8765,8 @@ function CartScreen() {
|
|
|
8695
8765
|
onClick: () => router.push(buildPath("/checkout"))
|
|
8696
8766
|
},
|
|
8697
8767
|
"Secure checkout",
|
|
8698
|
-
/* @__PURE__ */
|
|
8699
|
-
), /* @__PURE__ */
|
|
8768
|
+
/* @__PURE__ */ React21.createElement(ArrowRight, { className: "h-5 w-5" })
|
|
8769
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8700
8770
|
"button",
|
|
8701
8771
|
{
|
|
8702
8772
|
type: "button",
|
|
@@ -8705,7 +8775,7 @@ function CartScreen() {
|
|
|
8705
8775
|
},
|
|
8706
8776
|
"Continue shopping"
|
|
8707
8777
|
)),
|
|
8708
|
-
/* @__PURE__ */
|
|
8778
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Need help?"), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 leading-relaxed" }, "Chat with a pharmacist to optimize your regimen or discuss substitutions before you check out."))
|
|
8709
8779
|
)))));
|
|
8710
8780
|
}
|
|
8711
8781
|
function useAddresses() {
|
|
@@ -8767,7 +8837,7 @@ function useAddresses() {
|
|
|
8767
8837
|
};
|
|
8768
8838
|
}
|
|
8769
8839
|
function Card({ className = "", ...props }) {
|
|
8770
|
-
return /* @__PURE__ */
|
|
8840
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8771
8841
|
"div",
|
|
8772
8842
|
{
|
|
8773
8843
|
className: `rounded-lg border bg-white shadow-sm ${className}`,
|
|
@@ -8793,7 +8863,7 @@ function Modal({ isOpen, onClose, title, children, size = "md" }) {
|
|
|
8793
8863
|
lg: "max-w-2xl",
|
|
8794
8864
|
xl: "max-w-4xl"
|
|
8795
8865
|
};
|
|
8796
|
-
return /* @__PURE__ */
|
|
8866
|
+
return /* @__PURE__ */ React21.createElement(AnimatePresence, null, isOpen && /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement(
|
|
8797
8867
|
motion.div,
|
|
8798
8868
|
{
|
|
8799
8869
|
initial: { opacity: 0 },
|
|
@@ -8802,7 +8872,7 @@ function Modal({ isOpen, onClose, title, children, size = "md" }) {
|
|
|
8802
8872
|
onClick: onClose,
|
|
8803
8873
|
className: "fixed inset-0 bg-black/50 backdrop-blur-sm z-50"
|
|
8804
8874
|
}
|
|
8805
|
-
), /* @__PURE__ */
|
|
8875
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4" }, /* @__PURE__ */ React21.createElement(
|
|
8806
8876
|
motion.div,
|
|
8807
8877
|
{
|
|
8808
8878
|
initial: { opacity: 0, scale: 0.95, y: 20 },
|
|
@@ -8810,15 +8880,15 @@ function Modal({ isOpen, onClose, title, children, size = "md" }) {
|
|
|
8810
8880
|
exit: { opacity: 0, scale: 0.95, y: 20 },
|
|
8811
8881
|
className: `bg-white rounded-2xl shadow-2xl w-full ${sizes[size]} max-h-[90vh] overflow-hidden flex flex-col`
|
|
8812
8882
|
},
|
|
8813
|
-
title && /* @__PURE__ */
|
|
8883
|
+
title && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between p-6 border-b border-gray-200" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-bold text-gray-900" }, title), /* @__PURE__ */ React21.createElement(
|
|
8814
8884
|
"button",
|
|
8815
8885
|
{
|
|
8816
8886
|
onClick: onClose,
|
|
8817
8887
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors"
|
|
8818
8888
|
},
|
|
8819
|
-
/* @__PURE__ */
|
|
8889
|
+
/* @__PURE__ */ React21.createElement(X, { className: "w-5 h-5" })
|
|
8820
8890
|
)),
|
|
8821
|
-
/* @__PURE__ */
|
|
8891
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1 overflow-y-auto p-6" }, children)
|
|
8822
8892
|
))));
|
|
8823
8893
|
}
|
|
8824
8894
|
var addressSchema = z.object({
|
|
@@ -8908,7 +8978,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8908
8978
|
setIsSubmitting(false);
|
|
8909
8979
|
}
|
|
8910
8980
|
};
|
|
8911
|
-
return /* @__PURE__ */
|
|
8981
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8912
8982
|
Modal,
|
|
8913
8983
|
{
|
|
8914
8984
|
isOpen,
|
|
@@ -8916,7 +8986,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8916
8986
|
title: initialAddress ? "Edit Address" : "Add New Address",
|
|
8917
8987
|
size: "lg"
|
|
8918
8988
|
},
|
|
8919
|
-
/* @__PURE__ */
|
|
8989
|
+
/* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
8920
8990
|
Input,
|
|
8921
8991
|
{
|
|
8922
8992
|
label: "Full name",
|
|
@@ -8924,7 +8994,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8924
8994
|
...register("name"),
|
|
8925
8995
|
error: errors.name?.message
|
|
8926
8996
|
}
|
|
8927
|
-
), /* @__PURE__ */
|
|
8997
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8928
8998
|
Input,
|
|
8929
8999
|
{
|
|
8930
9000
|
label: "Phone number",
|
|
@@ -8932,7 +9002,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8932
9002
|
...register("phone"),
|
|
8933
9003
|
error: errors.phone?.message
|
|
8934
9004
|
}
|
|
8935
|
-
), /* @__PURE__ */
|
|
9005
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "md:col-span-2" }, /* @__PURE__ */ React21.createElement(
|
|
8936
9006
|
Input,
|
|
8937
9007
|
{
|
|
8938
9008
|
label: "Address line 1",
|
|
@@ -8940,14 +9010,14 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8940
9010
|
...register("street1"),
|
|
8941
9011
|
error: errors.street1?.message
|
|
8942
9012
|
}
|
|
8943
|
-
)), /* @__PURE__ */
|
|
9013
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "md:col-span-2" }, /* @__PURE__ */ React21.createElement(
|
|
8944
9014
|
Input,
|
|
8945
9015
|
{
|
|
8946
9016
|
label: "Address line 2 (optional)",
|
|
8947
9017
|
placeholder: "Apt 4B",
|
|
8948
9018
|
...register("street2")
|
|
8949
9019
|
}
|
|
8950
|
-
)), /* @__PURE__ */
|
|
9020
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
8951
9021
|
Input,
|
|
8952
9022
|
{
|
|
8953
9023
|
label: "City",
|
|
@@ -8955,7 +9025,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8955
9025
|
...register("city"),
|
|
8956
9026
|
error: errors.city?.message
|
|
8957
9027
|
}
|
|
8958
|
-
), /* @__PURE__ */
|
|
9028
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8959
9029
|
Input,
|
|
8960
9030
|
{
|
|
8961
9031
|
label: "State",
|
|
@@ -8963,7 +9033,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8963
9033
|
...register("state"),
|
|
8964
9034
|
error: errors.state?.message
|
|
8965
9035
|
}
|
|
8966
|
-
), /* @__PURE__ */
|
|
9036
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8967
9037
|
Input,
|
|
8968
9038
|
{
|
|
8969
9039
|
label: "ZIP code",
|
|
@@ -8971,7 +9041,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8971
9041
|
...register("zip"),
|
|
8972
9042
|
error: errors.zip?.message
|
|
8973
9043
|
}
|
|
8974
|
-
), /* @__PURE__ */
|
|
9044
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8975
9045
|
Input,
|
|
8976
9046
|
{
|
|
8977
9047
|
label: "Country",
|
|
@@ -8979,7 +9049,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8979
9049
|
...register("country"),
|
|
8980
9050
|
error: errors.country?.message
|
|
8981
9051
|
}
|
|
8982
|
-
)), /* @__PURE__ */
|
|
9052
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "flex justify-end gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
8983
9053
|
Button,
|
|
8984
9054
|
{
|
|
8985
9055
|
type: "button",
|
|
@@ -8987,7 +9057,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8987
9057
|
onClick: onClose
|
|
8988
9058
|
},
|
|
8989
9059
|
"Cancel"
|
|
8990
|
-
), /* @__PURE__ */
|
|
9060
|
+
), /* @__PURE__ */ React21.createElement(Button, { type: "submit", disabled: isSubmitting }, isSubmitting ? "Adding Address..." : "Add Address")))
|
|
8991
9061
|
);
|
|
8992
9062
|
}
|
|
8993
9063
|
var checkoutSchema = z.object({
|
|
@@ -8999,7 +9069,7 @@ var PAYMENT_METHODS = [
|
|
|
8999
9069
|
{
|
|
9000
9070
|
label: "Card",
|
|
9001
9071
|
value: "Card",
|
|
9002
|
-
icon: /* @__PURE__ */
|
|
9072
|
+
icon: /* @__PURE__ */ React21.createElement(CreditCard, { className: "w-5 h-5" }),
|
|
9003
9073
|
description: "Pay securely with your credit or debit card",
|
|
9004
9074
|
className: "border-blue-500 hover:bg-blue-50",
|
|
9005
9075
|
activeClass: "bg-blue-50 border-blue-500 text-blue-700"
|
|
@@ -9007,7 +9077,7 @@ var PAYMENT_METHODS = [
|
|
|
9007
9077
|
{
|
|
9008
9078
|
label: "Cash",
|
|
9009
9079
|
value: "Cash",
|
|
9010
|
-
icon: /* @__PURE__ */
|
|
9080
|
+
icon: /* @__PURE__ */ React21.createElement(PackageCheck, { className: "w-5 h-5" }),
|
|
9011
9081
|
description: "Pay with cash on delivery or at pickup",
|
|
9012
9082
|
className: "border-amber-500 hover:bg-amber-50",
|
|
9013
9083
|
activeClass: "bg-amber-50 border-amber-500 text-amber-700"
|
|
@@ -9015,7 +9085,7 @@ var PAYMENT_METHODS = [
|
|
|
9015
9085
|
{
|
|
9016
9086
|
label: "Credit",
|
|
9017
9087
|
value: "Credit",
|
|
9018
|
-
icon: /* @__PURE__ */
|
|
9088
|
+
icon: /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "w-5 h-5" }),
|
|
9019
9089
|
description: "Use your account credit",
|
|
9020
9090
|
className: "border-emerald-500 hover:bg-emerald-50",
|
|
9021
9091
|
activeClass: "bg-emerald-50 border-emerald-500 text-emerald-700"
|
|
@@ -9219,7 +9289,7 @@ function CheckoutScreen() {
|
|
|
9219
9289
|
}
|
|
9220
9290
|
}
|
|
9221
9291
|
setIsSubmitting(true);
|
|
9222
|
-
toast("Submitting order...", { icon: /* @__PURE__ */
|
|
9292
|
+
toast("Submitting order...", { icon: /* @__PURE__ */ React21.createElement(CreditCard, { className: "h-4 w-4" }) });
|
|
9223
9293
|
try {
|
|
9224
9294
|
const items = (cart?.cartBody?.items || []).map((item) => ({
|
|
9225
9295
|
productVariantId: String(item.productVariantId),
|
|
@@ -9284,33 +9354,33 @@ function CheckoutScreen() {
|
|
|
9284
9354
|
const subtotal = cart.total;
|
|
9285
9355
|
const tax = 0;
|
|
9286
9356
|
const total = subtotal + shippingPrice + tax;
|
|
9287
|
-
return /* @__PURE__ */
|
|
9357
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.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.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement(
|
|
9288
9358
|
motion.div,
|
|
9289
9359
|
{
|
|
9290
9360
|
initial: { opacity: 0, y: 24 },
|
|
9291
9361
|
animate: { opacity: 1, y: 0 },
|
|
9292
9362
|
className: "space-y-6"
|
|
9293
9363
|
},
|
|
9294
|
-
/* @__PURE__ */
|
|
9295
|
-
/* @__PURE__ */
|
|
9296
|
-
/* @__PURE__ */
|
|
9297
|
-
/* @__PURE__ */
|
|
9364
|
+
/* @__PURE__ */ React21.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.createElement(ShieldCheck, { className: "h-4 w-4" }), "Secure checkout"),
|
|
9365
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Provide delivery details"),
|
|
9366
|
+
/* @__PURE__ */ React21.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."),
|
|
9367
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-3" }, checkoutSteps.map((step) => /* @__PURE__ */ React21.createElement(
|
|
9298
9368
|
"div",
|
|
9299
9369
|
{
|
|
9300
9370
|
key: step.id,
|
|
9301
9371
|
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"}`
|
|
9302
9372
|
},
|
|
9303
|
-
/* @__PURE__ */
|
|
9373
|
+
/* @__PURE__ */ React21.createElement("span", { className: "flex h-7 w-7 items-center justify-center rounded-full bg-white/20 text-xs font-bold" }, step.id),
|
|
9304
9374
|
step.label
|
|
9305
9375
|
)))
|
|
9306
|
-
)))), /* @__PURE__ */
|
|
9376
|
+
)))), /* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit) }, error && /* @__PURE__ */ React21.createElement("div", { className: "mb-4 text-red-600 font-semibold" }, error), /* @__PURE__ */ React21.createElement("div", { className: "pt-12 container mx-auto grid gap-10 px-4 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement(
|
|
9307
9377
|
motion.div,
|
|
9308
9378
|
{
|
|
9309
9379
|
initial: { opacity: 0, y: 24 },
|
|
9310
9380
|
animate: { opacity: 1, y: 0 },
|
|
9311
9381
|
className: "space-y-8"
|
|
9312
9382
|
},
|
|
9313
|
-
/* @__PURE__ */
|
|
9383
|
+
/* @__PURE__ */ React21.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Shipping information"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "We use temperature-aware packaging and real-time tracking on every shipment.")), /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-primary-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-primary-700" }, /* @__PURE__ */ React21.createElement(Truck, { className: "h-4 w-4" }), "Dispatch in 12h")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 grid grid-cols-1 gap-4 md:grid-cols-2" }, isDelivery && /* @__PURE__ */ React21.createElement("div", { className: "md:col-span-2 space-y-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("label", { className: "block font-semibold" }, "Select Address"), /* @__PURE__ */ React21.createElement(
|
|
9314
9384
|
Button,
|
|
9315
9385
|
{
|
|
9316
9386
|
type: "button",
|
|
@@ -9321,15 +9391,15 @@ function CheckoutScreen() {
|
|
|
9321
9391
|
setIsAddressModalOpen(true);
|
|
9322
9392
|
}
|
|
9323
9393
|
},
|
|
9324
|
-
/* @__PURE__ */
|
|
9394
|
+
/* @__PURE__ */ React21.createElement(Plus, { className: "h-4 w-4 mr-2" }),
|
|
9325
9395
|
"Add New Address"
|
|
9326
|
-
)), userAddresses.length > 0 ? /* @__PURE__ */
|
|
9396
|
+
)), userAddresses.length > 0 ? /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4" }, userAddresses.map((addr) => /* @__PURE__ */ React21.createElement(
|
|
9327
9397
|
"label",
|
|
9328
9398
|
{
|
|
9329
9399
|
key: addr.id,
|
|
9330
9400
|
className: `group relative flex items-start gap-3 p-4 rounded-2xl border ${selectedAddressId === addr.id ? "border-primary-500 bg-primary-50 shadow-sm" : "border-slate-200 bg-white"} cursor-pointer hover:border-primary-300 transition-colors`
|
|
9331
9401
|
},
|
|
9332
|
-
/* @__PURE__ */
|
|
9402
|
+
/* @__PURE__ */ React21.createElement(
|
|
9333
9403
|
"input",
|
|
9334
9404
|
{
|
|
9335
9405
|
type: "radio",
|
|
@@ -9350,7 +9420,7 @@ function CheckoutScreen() {
|
|
|
9350
9420
|
className: "mt-1"
|
|
9351
9421
|
}
|
|
9352
9422
|
),
|
|
9353
|
-
/* @__PURE__ */
|
|
9423
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-900" }, addr.name), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600" }, addr.street1), addr.street2 && /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600" }, addr.street2), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600" }, addr.city, ", ", addr.state, " ", addr.zip), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600" }, addr.country), addr.phone && /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600 mt-1" }, addr.phone), /* @__PURE__ */ React21.createElement("div", { className: "mt-3 flex items-center gap-2" }, addr.isDefault && /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary-100 px-2.5 py-0.5 text-xs font-semibold text-primary-700" }, "Default"), /* @__PURE__ */ React21.createElement(
|
|
9354
9424
|
"button",
|
|
9355
9425
|
{
|
|
9356
9426
|
type: "button",
|
|
@@ -9361,9 +9431,9 @@ function CheckoutScreen() {
|
|
|
9361
9431
|
},
|
|
9362
9432
|
className: "inline-flex items-center gap-1 rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-medium text-slate-600 hover:border-primary-300 hover:text-primary-600"
|
|
9363
9433
|
},
|
|
9364
|
-
/* @__PURE__ */
|
|
9434
|
+
/* @__PURE__ */ React21.createElement(Edit3, { className: "h-3.5 w-3.5" }),
|
|
9365
9435
|
" Edit"
|
|
9366
|
-
), /* @__PURE__ */
|
|
9436
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9367
9437
|
"button",
|
|
9368
9438
|
{
|
|
9369
9439
|
type: "button",
|
|
@@ -9381,23 +9451,23 @@ function CheckoutScreen() {
|
|
|
9381
9451
|
},
|
|
9382
9452
|
className: "inline-flex items-center gap-1 rounded-full border border-red-200 px-2.5 py-0.5 text-xs font-semibold text-red-600 hover:border-red-300 hover:text-red-700"
|
|
9383
9453
|
},
|
|
9384
|
-
/* @__PURE__ */
|
|
9454
|
+
/* @__PURE__ */ React21.createElement(Trash2, { className: "h-3.5 w-3.5" }),
|
|
9385
9455
|
" Delete"
|
|
9386
9456
|
)))
|
|
9387
|
-
))) : /* @__PURE__ */
|
|
9457
|
+
))) : /* @__PURE__ */ React21.createElement("div", { className: "text-center py-8 bg-slate-50 rounded-lg" }, /* @__PURE__ */ React21.createElement(MapPin, { className: "h-12 w-12 mx-auto text-slate-400" }), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-slate-600" }, "No addresses found"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "Add a new address to continue"))), !isDelivery && storeAddresses.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "md:col-span-2" }, /* @__PURE__ */ React21.createElement("label", { className: "block mb-2 font-semibold" }, "Select Pickup Location"), /* @__PURE__ */ React21.createElement(
|
|
9388
9458
|
"select",
|
|
9389
9459
|
{
|
|
9390
9460
|
className: "w-full border rounded p-2",
|
|
9391
9461
|
value: selectedStoreAddressId || "",
|
|
9392
9462
|
onChange: (e) => setSelectedStoreAddressId(e.target.value)
|
|
9393
9463
|
},
|
|
9394
|
-
storeAddresses.map((addr) => /* @__PURE__ */
|
|
9464
|
+
storeAddresses.map((addr) => /* @__PURE__ */ React21.createElement("option", { key: addr.id, value: addr.id }, addr.name, " - ", addr.street1, ", ", addr.city))
|
|
9395
9465
|
)))),
|
|
9396
|
-
isDelivery && selectedAddressId && /* @__PURE__ */
|
|
9466
|
+
isDelivery && selectedAddressId && /* @__PURE__ */ React21.createElement(Card, { className: "p-6 border border-gray-200 rounded-xl shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3 text-xl font-semibold text-gray-900 pb-4 mb-6 border-b" }, /* @__PURE__ */ React21.createElement(Truck, { className: "text-accent w-6 h-6" }), /* @__PURE__ */ React21.createElement("span", null, "Shipping Options")), shippingRatesLoading ? /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-center py-12" }, /* @__PURE__ */ React21.createElement("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-accent" }), /* @__PURE__ */ React21.createElement("span", { className: "ml-3 text-gray-600" }, "Loading shipping options...")) : shippingRatesError ? /* @__PURE__ */ React21.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React21.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-red-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-8 h-8 text-red-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }))), /* @__PURE__ */ React21.createElement("p", { className: "text-red-500 text-lg font-medium" }, "Error loading shipping options"), /* @__PURE__ */ React21.createElement("p", { className: "text-red-400 text-sm mt-1" }, shippingRatesError)) : shippingRates && shippingRates.length > 0 ? /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, shippingRates.map((rate) => {
|
|
9397
9467
|
const isSelected = !!selectedShippingRateId && selectedShippingRateId === rate.objectId;
|
|
9398
9468
|
const isTest = rate.test;
|
|
9399
9469
|
const hasAttributes = rate.attributes && rate.attributes.length > 0;
|
|
9400
|
-
return /* @__PURE__ */
|
|
9470
|
+
return /* @__PURE__ */ React21.createElement(
|
|
9401
9471
|
"div",
|
|
9402
9472
|
{
|
|
9403
9473
|
key: rate.objectId,
|
|
@@ -9406,7 +9476,7 @@ function CheckoutScreen() {
|
|
|
9406
9476
|
onMouseLeave: () => setShippingPrice(parseFloat(rate.amountLocal)),
|
|
9407
9477
|
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"}`
|
|
9408
9478
|
},
|
|
9409
|
-
/* @__PURE__ */
|
|
9479
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-start justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-4 flex-1" }, /* @__PURE__ */ React21.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React21.createElement(
|
|
9410
9480
|
Image3,
|
|
9411
9481
|
{
|
|
9412
9482
|
src: rate.providerImage75 || "/placeholder-product.jpg",
|
|
@@ -9419,18 +9489,18 @@ function CheckoutScreen() {
|
|
|
9419
9489
|
width: 48,
|
|
9420
9490
|
height: 48
|
|
9421
9491
|
}
|
|
9422
|
-
)), /* @__PURE__ */
|
|
9492
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2 mb-2" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, rate.provider, " ", rate.servicelevel?.name), isTest && /* @__PURE__ */ React21.createElement("span", { className: "px-2 py-1 text-xs font-medium bg-orange-100 text-orange-800 rounded-full" }, "TEST")), hasAttributes && /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2 mb-3" }, rate.attributes.map((attr) => /* @__PURE__ */ React21.createElement(
|
|
9423
9493
|
"span",
|
|
9424
9494
|
{
|
|
9425
9495
|
key: attr,
|
|
9426
9496
|
className: `px-2 py-1 text-xs font-medium rounded-full ${attr === "FASTEST" ? "bg-green-100 text-green-800" : attr === "BESTVALUE" ? "bg-blue-100 text-blue-800" : attr === "CHEAPEST" ? "bg-purple-100 text-purple-800" : "bg-gray-100 text-gray-800"}`
|
|
9427
9497
|
},
|
|
9428
9498
|
attr
|
|
9429
|
-
))), /* @__PURE__ */
|
|
9430
|
-
isSelected && /* @__PURE__ */
|
|
9499
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 text-sm text-gray-600" }, rate.durationTerms && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" })), /* @__PURE__ */ React21.createElement("span", null, rate.durationTerms)), rate.estimatedDays && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" })), /* @__PURE__ */ React21.createElement("span", null, "Estimated ", rate.estimatedDays, " day", rate.estimatedDays !== 1 ? "s" : "")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M9 5H7a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" })), /* @__PURE__ */ React21.createElement("span", null, "Carrier: ", rate.provider)), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1" })), /* @__PURE__ */ React21.createElement("span", null, "Currency: ", rate.currency))))), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-end" }, /* @__PURE__ */ React21.createElement("div", { className: "text-2xl font-bold text-gray-900" }, formatPrice(parseFloat(rate.amount))), rate.amount !== rate.amountLocal && /* @__PURE__ */ React21.createElement("div", { className: "text-sm text-gray-500" }, rate.amountLocal, " ", rate.currencyLocal))),
|
|
9500
|
+
isSelected && /* @__PURE__ */ React21.createElement("div", { className: "absolute top-3 right-3" }, /* @__PURE__ */ React21.createElement("div", { className: "w-6 h-6 bg-primary-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21.createElement(Check, { className: "w-4 h-4 text-white" })))
|
|
9431
9501
|
);
|
|
9432
|
-
})) : /* @__PURE__ */
|
|
9433
|
-
), /* @__PURE__ */
|
|
9502
|
+
})) : /* @__PURE__ */ React21.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React21.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-gray-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21.createElement(Truck, { className: "w-8 h-8 text-gray-400" })), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-500 text-lg font-medium" }, "No shipping options available"), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-400 text-sm mt-1" }, "Please check the shipping address or try a different location.")))
|
|
9503
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9434
9504
|
motion.aside,
|
|
9435
9505
|
{
|
|
9436
9506
|
initial: { opacity: 0, y: 32 },
|
|
@@ -9438,22 +9508,22 @@ function CheckoutScreen() {
|
|
|
9438
9508
|
transition: { duration: 0.5, ease: "easeOut", delay: 0.1 },
|
|
9439
9509
|
className: "space-y-10 lg:sticky lg:top-24"
|
|
9440
9510
|
},
|
|
9441
|
-
/* @__PURE__ */
|
|
9511
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-xl shadow-primary-50/50 transition hover:shadow-primary-100/60" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "Order Summary"), /* @__PURE__ */ React21.createElement("section", { className: "mt-6 space-y-4" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-xs font-semibold text-slate-700 uppercase tracking-wider" }, "Delivery Method"), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 gap-3" }, [
|
|
9442
9512
|
{
|
|
9443
9513
|
label: "Delivery",
|
|
9444
|
-
icon: /* @__PURE__ */
|
|
9514
|
+
icon: /* @__PURE__ */ React21.createElement(Truck, { className: "w-5 h-5" }),
|
|
9445
9515
|
value: true,
|
|
9446
9516
|
desc: "Shipped to your address"
|
|
9447
9517
|
},
|
|
9448
9518
|
{
|
|
9449
9519
|
label: "Pickup",
|
|
9450
|
-
icon: /* @__PURE__ */
|
|
9520
|
+
icon: /* @__PURE__ */ React21.createElement(MapPin, { className: "w-5 h-5" }),
|
|
9451
9521
|
value: false,
|
|
9452
9522
|
desc: "Collect from pharmacy"
|
|
9453
9523
|
}
|
|
9454
9524
|
].map((option) => {
|
|
9455
9525
|
const active = isDelivery === option.value;
|
|
9456
|
-
return /* @__PURE__ */
|
|
9526
|
+
return /* @__PURE__ */ React21.createElement(
|
|
9457
9527
|
"button",
|
|
9458
9528
|
{
|
|
9459
9529
|
key: option.label,
|
|
@@ -9462,18 +9532,18 @@ function CheckoutScreen() {
|
|
|
9462
9532
|
"aria-pressed": active,
|
|
9463
9533
|
className: `relative flex w-full items-center justify-between rounded-xl border-2 p-3 transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-400 focus-visible:ring-offset-2 ${active ? "border-primary-500 bg-primary-50 shadow-sm" : "border-slate-200 bg-white hover:border-primary-200 hover:bg-primary-50/40"}`
|
|
9464
9534
|
},
|
|
9465
|
-
/* @__PURE__ */
|
|
9535
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
9466
9536
|
"div",
|
|
9467
9537
|
{
|
|
9468
9538
|
className: `p-2 rounded-lg ${active ? "bg-primary-100 text-primary-600" : "bg-slate-100 text-slate-600 group-hover:bg-slate-50"}`
|
|
9469
9539
|
},
|
|
9470
9540
|
option.icon
|
|
9471
|
-
), /* @__PURE__ */
|
|
9472
|
-
active && /* @__PURE__ */
|
|
9541
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "text-left" }, /* @__PURE__ */ React21.createElement("div", { className: "font-medium text-slate-900" }, option.label), /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-slate-500" }, option.desc))),
|
|
9542
|
+
active && /* @__PURE__ */ React21.createElement("div", { className: "w-5 h-5 rounded-full bg-primary-500 flex items-center justify-center text-white shadow-sm" }, /* @__PURE__ */ React21.createElement(Check, { className: "w-3 h-3" }))
|
|
9473
9543
|
);
|
|
9474
|
-
}))), /* @__PURE__ */
|
|
9544
|
+
}))), /* @__PURE__ */ React21.createElement("section", { className: "mt-8 space-y-4" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-xs font-semibold text-slate-700 uppercase tracking-wider" }, "Payment Method"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, PAYMENT_METHODS.map((pm) => {
|
|
9475
9545
|
const active = paymentMethod === pm.value;
|
|
9476
|
-
return /* @__PURE__ */
|
|
9546
|
+
return /* @__PURE__ */ React21.createElement(
|
|
9477
9547
|
"button",
|
|
9478
9548
|
{
|
|
9479
9549
|
key: pm.value,
|
|
@@ -9481,22 +9551,22 @@ function CheckoutScreen() {
|
|
|
9481
9551
|
onClick: () => setPaymentMethod(pm.value),
|
|
9482
9552
|
className: `w-full flex items-center justify-between rounded-xl border-2 p-3 transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ${active ? `${pm.activeClass} border-current shadow-sm` : `${pm.className} border-slate-200 hover:border-primary-200 hover:shadow-sm`}`
|
|
9483
9553
|
},
|
|
9484
|
-
/* @__PURE__ */
|
|
9554
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
9485
9555
|
"div",
|
|
9486
9556
|
{
|
|
9487
9557
|
className: `p-1.5 rounded-md ${pm.value === "Card" ? "bg-blue-100 text-blue-600" : pm.value === "Cash" ? "bg-amber-100 text-amber-600" : "bg-emerald-100 text-emerald-600"} ${active ? "bg-opacity-30" : "bg-opacity-100"}`
|
|
9488
9558
|
},
|
|
9489
9559
|
pm.icon
|
|
9490
|
-
), /* @__PURE__ */
|
|
9491
|
-
active && /* @__PURE__ */
|
|
9560
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-medium text-slate-900" }, pm.label)),
|
|
9561
|
+
active && /* @__PURE__ */ React21.createElement("div", { className: "w-4 h-4 rounded-full bg-primary-500 flex items-center justify-center text-white shadow-sm" }, /* @__PURE__ */ React21.createElement(Check, { className: "w-2.5 h-2.5" }))
|
|
9492
9562
|
);
|
|
9493
|
-
})), /* @__PURE__ */
|
|
9563
|
+
})), /* @__PURE__ */ React21.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.createElement("section", { className: "mt-8 pt-6 border-t border-slate-100" }, /* @__PURE__ */ React21.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.createElement(
|
|
9494
9564
|
"div",
|
|
9495
9565
|
{
|
|
9496
9566
|
key: item.productId,
|
|
9497
9567
|
className: "flex gap-4 rounded-2xl border border-slate-100 p-4 hover:bg-slate-50/50 transition"
|
|
9498
9568
|
},
|
|
9499
|
-
/* @__PURE__ */
|
|
9569
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-xl bg-slate-100 text-slate-400" }, /* @__PURE__ */ React21.createElement(
|
|
9500
9570
|
Image3,
|
|
9501
9571
|
{
|
|
9502
9572
|
src: item.productVariantData.productMedia?.[0]?.file || "/placeholder-product.jpg",
|
|
@@ -9506,9 +9576,9 @@ function CheckoutScreen() {
|
|
|
9506
9576
|
className: "object-contain"
|
|
9507
9577
|
}
|
|
9508
9578
|
)),
|
|
9509
|
-
/* @__PURE__ */
|
|
9510
|
-
/* @__PURE__ */
|
|
9511
|
-
))), /* @__PURE__ */
|
|
9579
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold text-slate-900" }, item?.productVariantData?.name), /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-slate-500" }, "Qty ", item.quantity)),
|
|
9580
|
+
/* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold text-slate-900" }, formatPrice(item.productVariantData.finalPrice * item.quantity))
|
|
9581
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-y-3 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Subtotal"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold text-slate-900" }, formatPrice(subtotal))), isDelivery && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Shipping"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold" }, formatPrice(shippingPrice))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Estimated tax"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold" }, formatPrice(tax))), /* @__PURE__ */ React21.createElement("div", { className: "rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-base font-semibold text-slate-900" }, /* @__PURE__ */ React21.createElement("span", null, "Total Due"), /* @__PURE__ */ React21.createElement("span", null, formatPrice(total))), /* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-xs text-slate-500" }, "Tax is estimated. Final amount confirmed after payment.")))), /* @__PURE__ */ React21.createElement(
|
|
9512
9582
|
Button,
|
|
9513
9583
|
{
|
|
9514
9584
|
type: "submit",
|
|
@@ -9516,11 +9586,11 @@ function CheckoutScreen() {
|
|
|
9516
9586
|
isLoading: isSubmitting,
|
|
9517
9587
|
className: "mt-6 w-full transition-transform hover:scale-[1.02] active:scale-[0.99]"
|
|
9518
9588
|
},
|
|
9519
|
-
/* @__PURE__ */
|
|
9589
|
+
/* @__PURE__ */ React21.createElement(CreditCard, { className: "h-5 w-5" }),
|
|
9520
9590
|
isSubmitting ? "Placing order..." : "Place Secure Order"
|
|
9521
|
-
), /* @__PURE__ */
|
|
9522
|
-
/* @__PURE__ */
|
|
9523
|
-
))), /* @__PURE__ */
|
|
9591
|
+
), /* @__PURE__ */ React21.createElement("p", { className: "mt-4 flex items-center justify-center gap-2 text-xs text-slate-500" }, /* @__PURE__ */ React21.createElement(Lock, { className: "h-4 w-4" }), "Fully encrypted checkout \u2014 cancel anytime before shipment.")),
|
|
9592
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/80 p-6 text-sm text-primary-700 shadow-sm hover:shadow-md transition-shadow" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.3em] text-primary-800" }, "Why Patients Choose Us"), /* @__PURE__ */ React21.createElement("ul", { className: "mt-4 space-y-3 text-primary-700 leading-relaxed" }, /* @__PURE__ */ React21.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(PackageCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React21.createElement("span", null, "Pharmacy-grade verification on every order.")), /* @__PURE__ */ React21.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React21.createElement("span", null, "Cold-chain logistics for sensitive medications.")), /* @__PURE__ */ React21.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(Truck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React21.createElement("span", null, "Real-time tracking and SMS updates from prep to delivery."))))
|
|
9593
|
+
))), /* @__PURE__ */ React21.createElement(
|
|
9524
9594
|
AddressFormModal,
|
|
9525
9595
|
{
|
|
9526
9596
|
isOpen: isAddressModalOpen,
|
|
@@ -9576,7 +9646,7 @@ function LoginScreen() {
|
|
|
9576
9646
|
setIsSubmitting(false);
|
|
9577
9647
|
}
|
|
9578
9648
|
};
|
|
9579
|
-
return /* @__PURE__ */
|
|
9649
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("div", { className: "grid min-h-screen overflow-hidden bg-white lg:grid-cols-[1.1fr_0.9fr]" }, /* @__PURE__ */ React21.createElement(
|
|
9580
9650
|
motion.section,
|
|
9581
9651
|
{
|
|
9582
9652
|
initial: { opacity: 0, x: -24 },
|
|
@@ -9584,18 +9654,18 @@ function LoginScreen() {
|
|
|
9584
9654
|
transition: { duration: 0.4 },
|
|
9585
9655
|
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"
|
|
9586
9656
|
},
|
|
9587
|
-
/* @__PURE__ */
|
|
9588
|
-
/* @__PURE__ */
|
|
9589
|
-
/* @__PURE__ */
|
|
9657
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21.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.createElement(HeartPulse, { className: "h-4 w-4" }), "Hey Pharmacist"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Pharmacy-grade care for your household"), /* @__PURE__ */ React21.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.")),
|
|
9658
|
+
/* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/80" }, "HIPAA-compliant security keeps your health information protected.")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/80" }, "Pharmacists ready to chat in under 10 minutes for medication support."))),
|
|
9659
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement("span", null, "Need an account?"), /* @__PURE__ */ React21.createElement(
|
|
9590
9660
|
Link8,
|
|
9591
9661
|
{
|
|
9592
|
-
href: "/register",
|
|
9662
|
+
href: buildPath("/register"),
|
|
9593
9663
|
className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2 font-semibold transition hover:bg-white/25"
|
|
9594
9664
|
},
|
|
9595
9665
|
"Create one now",
|
|
9596
|
-
/* @__PURE__ */
|
|
9666
|
+
/* @__PURE__ */ React21.createElement(ArrowRight, { className: "h-4 w-4" })
|
|
9597
9667
|
))
|
|
9598
|
-
), /* @__PURE__ */
|
|
9668
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9599
9669
|
motion.section,
|
|
9600
9670
|
{
|
|
9601
9671
|
initial: { opacity: 0, x: 24 },
|
|
@@ -9603,7 +9673,7 @@ function LoginScreen() {
|
|
|
9603
9673
|
transition: { duration: 0.4 },
|
|
9604
9674
|
className: "flex items-center justify-center px-6 py-12 lg:px-16"
|
|
9605
9675
|
},
|
|
9606
|
-
/* @__PURE__ */
|
|
9676
|
+
/* @__PURE__ */ React21.createElement("div", { className: "w-full max-w-md space-y-10" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-3xl font-bold text-slate-900" }, "Sign in"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "Welcome back! Enter your details to continue your personalized care plan.")), /* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement(
|
|
9607
9677
|
Input,
|
|
9608
9678
|
{
|
|
9609
9679
|
type: "email",
|
|
@@ -9612,7 +9682,7 @@ function LoginScreen() {
|
|
|
9612
9682
|
...register("email"),
|
|
9613
9683
|
error: errors.email?.message
|
|
9614
9684
|
}
|
|
9615
|
-
)), /* @__PURE__ */
|
|
9685
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9616
9686
|
Input,
|
|
9617
9687
|
{
|
|
9618
9688
|
type: showPassword ? "text" : "password",
|
|
@@ -9621,28 +9691,28 @@ function LoginScreen() {
|
|
|
9621
9691
|
...register("password"),
|
|
9622
9692
|
error: errors.password?.message
|
|
9623
9693
|
}
|
|
9624
|
-
), /* @__PURE__ */
|
|
9694
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9625
9695
|
"button",
|
|
9626
9696
|
{
|
|
9627
9697
|
type: "button",
|
|
9628
9698
|
onClick: () => setShowPassword((prev) => !prev),
|
|
9629
9699
|
className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
|
|
9630
9700
|
},
|
|
9631
|
-
showPassword ? /* @__PURE__ */
|
|
9632
|
-
)), /* @__PURE__ */
|
|
9701
|
+
showPassword ? /* @__PURE__ */ React21.createElement(EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21.createElement(Eye, { className: "h-5 w-5" })
|
|
9702
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-sm" }, /* @__PURE__ */ React21.createElement("label", { className: "flex items-center gap-2 text-slate-600" }, /* @__PURE__ */ React21.createElement(
|
|
9633
9703
|
"input",
|
|
9634
9704
|
{
|
|
9635
9705
|
type: "checkbox",
|
|
9636
9706
|
className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
|
|
9637
9707
|
}
|
|
9638
|
-
), "Remember me"), /* @__PURE__ */
|
|
9708
|
+
), "Remember me"), /* @__PURE__ */ React21.createElement(
|
|
9639
9709
|
Link8,
|
|
9640
9710
|
{
|
|
9641
|
-
href: "/forgot-password",
|
|
9711
|
+
href: buildPath("/forgot-password"),
|
|
9642
9712
|
className: "font-medium text-primary-600 transition hover:text-primary-700"
|
|
9643
9713
|
},
|
|
9644
9714
|
"Forgot password?"
|
|
9645
|
-
)), /* @__PURE__ */
|
|
9715
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
9646
9716
|
Button,
|
|
9647
9717
|
{
|
|
9648
9718
|
type: "submit",
|
|
@@ -9651,7 +9721,7 @@ function LoginScreen() {
|
|
|
9651
9721
|
className: "w-full"
|
|
9652
9722
|
},
|
|
9653
9723
|
"Sign in securely"
|
|
9654
|
-
)), /* @__PURE__ */
|
|
9724
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-slate-50 p-6 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(Lock, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "Secure by design"), /* @__PURE__ */ React21.createElement("p", null, "Encrypted sessions, multi-factor ready, and privacy-first policies keep your personal data safe.")))))
|
|
9655
9725
|
)));
|
|
9656
9726
|
}
|
|
9657
9727
|
var registerSchema = z.object({
|
|
@@ -9702,7 +9772,7 @@ function RegisterScreen() {
|
|
|
9702
9772
|
setIsSubmitting(false);
|
|
9703
9773
|
}
|
|
9704
9774
|
};
|
|
9705
|
-
return /* @__PURE__ */
|
|
9775
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("div", { className: "grid min-h-screen overflow-hidden bg-white lg:grid-cols-[0.95fr_1.05fr]" }, /* @__PURE__ */ React21.createElement(
|
|
9706
9776
|
motion.section,
|
|
9707
9777
|
{
|
|
9708
9778
|
initial: { opacity: 0, x: -24 },
|
|
@@ -9710,17 +9780,17 @@ function RegisterScreen() {
|
|
|
9710
9780
|
transition: { duration: 0.4 },
|
|
9711
9781
|
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"
|
|
9712
9782
|
},
|
|
9713
|
-
/* @__PURE__ */
|
|
9714
|
-
/* @__PURE__ */
|
|
9715
|
-
/* @__PURE__ */
|
|
9783
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21.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.createElement(HeartPulse, { className: "h-4 w-4" }), "Join Hey Pharmacist"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Create your wellness account"), /* @__PURE__ */ React21.createElement("p", { className: "max-w-xl text-white/80" }, "Unlock concierge-level pharmacy support, curated product recommendations, and smarter refills designed for busy families.")),
|
|
9784
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, BENEFITS.map((benefit) => /* @__PURE__ */ React21.createElement("div", { key: benefit, className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(CheckCircle2, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/85" }, benefit)))),
|
|
9785
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement("span", null, "Already part of the community?"), /* @__PURE__ */ React21.createElement(
|
|
9716
9786
|
Link8,
|
|
9717
9787
|
{
|
|
9718
|
-
href: "/login",
|
|
9788
|
+
href: buildPath("/login"),
|
|
9719
9789
|
className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2 font-semibold transition hover:bg-white/25"
|
|
9720
9790
|
},
|
|
9721
9791
|
"Sign in"
|
|
9722
9792
|
))
|
|
9723
|
-
), /* @__PURE__ */
|
|
9793
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9724
9794
|
motion.section,
|
|
9725
9795
|
{
|
|
9726
9796
|
initial: { opacity: 0, x: 24 },
|
|
@@ -9728,13 +9798,13 @@ function RegisterScreen() {
|
|
|
9728
9798
|
transition: { duration: 0.4 },
|
|
9729
9799
|
className: "flex items-center justify-center px-6 py-12 lg:px-16"
|
|
9730
9800
|
},
|
|
9731
|
-
/* @__PURE__ */
|
|
9801
|
+
/* @__PURE__ */ React21.createElement("div", { className: "w-full max-w-lg space-y-10" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-3xl font-bold text-slate-900" }, "Create an account"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "Start your personalized care journey with pharmacist-backed guidance.")), /* @__PURE__ */ React21.createElement(
|
|
9732
9802
|
"form",
|
|
9733
9803
|
{
|
|
9734
9804
|
onSubmit: handleSubmit(onSubmit),
|
|
9735
9805
|
className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50"
|
|
9736
9806
|
},
|
|
9737
|
-
/* @__PURE__ */
|
|
9807
|
+
/* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
9738
9808
|
Input,
|
|
9739
9809
|
{
|
|
9740
9810
|
label: "First name",
|
|
@@ -9742,7 +9812,7 @@ function RegisterScreen() {
|
|
|
9742
9812
|
...register("firstName"),
|
|
9743
9813
|
error: errors.firstName?.message
|
|
9744
9814
|
}
|
|
9745
|
-
), /* @__PURE__ */
|
|
9815
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9746
9816
|
Input,
|
|
9747
9817
|
{
|
|
9748
9818
|
label: "Last name",
|
|
@@ -9751,7 +9821,7 @@ function RegisterScreen() {
|
|
|
9751
9821
|
error: errors.lastName?.message
|
|
9752
9822
|
}
|
|
9753
9823
|
)),
|
|
9754
|
-
/* @__PURE__ */
|
|
9824
|
+
/* @__PURE__ */ React21.createElement(
|
|
9755
9825
|
Input,
|
|
9756
9826
|
{
|
|
9757
9827
|
type: "email",
|
|
@@ -9761,7 +9831,7 @@ function RegisterScreen() {
|
|
|
9761
9831
|
error: errors.email?.message
|
|
9762
9832
|
}
|
|
9763
9833
|
),
|
|
9764
|
-
/* @__PURE__ */
|
|
9834
|
+
/* @__PURE__ */ React21.createElement(
|
|
9765
9835
|
Input,
|
|
9766
9836
|
{
|
|
9767
9837
|
type: "tel",
|
|
@@ -9771,7 +9841,7 @@ function RegisterScreen() {
|
|
|
9771
9841
|
error: errors.phone?.message
|
|
9772
9842
|
}
|
|
9773
9843
|
),
|
|
9774
|
-
/* @__PURE__ */
|
|
9844
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9775
9845
|
Input,
|
|
9776
9846
|
{
|
|
9777
9847
|
type: showPassword ? "text" : "password",
|
|
@@ -9780,16 +9850,16 @@ function RegisterScreen() {
|
|
|
9780
9850
|
...register("password"),
|
|
9781
9851
|
error: errors.password?.message
|
|
9782
9852
|
}
|
|
9783
|
-
), /* @__PURE__ */
|
|
9853
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9784
9854
|
"button",
|
|
9785
9855
|
{
|
|
9786
9856
|
type: "button",
|
|
9787
9857
|
onClick: () => setShowPassword((prev) => !prev),
|
|
9788
9858
|
className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
|
|
9789
9859
|
},
|
|
9790
|
-
showPassword ? /* @__PURE__ */
|
|
9860
|
+
showPassword ? /* @__PURE__ */ React21.createElement(EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21.createElement(Eye, { className: "h-5 w-5" })
|
|
9791
9861
|
)),
|
|
9792
|
-
/* @__PURE__ */
|
|
9862
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9793
9863
|
Input,
|
|
9794
9864
|
{
|
|
9795
9865
|
type: showConfirmPassword ? "text" : "password",
|
|
@@ -9798,24 +9868,24 @@ function RegisterScreen() {
|
|
|
9798
9868
|
...register("confirmPassword"),
|
|
9799
9869
|
error: errors.confirmPassword?.message
|
|
9800
9870
|
}
|
|
9801
|
-
), /* @__PURE__ */
|
|
9871
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9802
9872
|
"button",
|
|
9803
9873
|
{
|
|
9804
9874
|
type: "button",
|
|
9805
9875
|
onClick: () => setShowConfirmPassword((prev) => !prev),
|
|
9806
9876
|
className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
|
|
9807
9877
|
},
|
|
9808
|
-
showConfirmPassword ? /* @__PURE__ */
|
|
9878
|
+
showConfirmPassword ? /* @__PURE__ */ React21.createElement(EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21.createElement(Eye, { className: "h-5 w-5" })
|
|
9809
9879
|
)),
|
|
9810
|
-
/* @__PURE__ */
|
|
9880
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement(Shield, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "By creating an account, you agree to our", " ", /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/terms"), className: "font-semibold text-primary-600 hover:text-primary-700" }, "Terms of Service"), " ", "and", " ", /* @__PURE__ */ React21.createElement(
|
|
9811
9881
|
Link8,
|
|
9812
9882
|
{
|
|
9813
|
-
href: "/privacy",
|
|
9883
|
+
href: buildPath("/privacy"),
|
|
9814
9884
|
className: "font-semibold text-primary-600 hover:text-primary-700"
|
|
9815
9885
|
},
|
|
9816
9886
|
"Privacy Policy"
|
|
9817
9887
|
), ". We protect your information with bank-level encryption.")),
|
|
9818
|
-
/* @__PURE__ */
|
|
9888
|
+
/* @__PURE__ */ React21.createElement(
|
|
9819
9889
|
Button,
|
|
9820
9890
|
{
|
|
9821
9891
|
type: "submit",
|
|
@@ -9823,10 +9893,10 @@ function RegisterScreen() {
|
|
|
9823
9893
|
isLoading: isSubmitting,
|
|
9824
9894
|
className: "w-full"
|
|
9825
9895
|
},
|
|
9826
|
-
/* @__PURE__ */
|
|
9896
|
+
/* @__PURE__ */ React21.createElement(UserPlus, { className: "h-5 w-5" }),
|
|
9827
9897
|
"Create my account"
|
|
9828
9898
|
)
|
|
9829
|
-
), /* @__PURE__ */
|
|
9899
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-slate-50 p-6 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(Heart, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "Members love us"), /* @__PURE__ */ React21.createElement("p", null, "92% of patients report improved adherence after receiving pharmacist touchpoints through their Hey Pharmacist account.")))))
|
|
9830
9900
|
)));
|
|
9831
9901
|
}
|
|
9832
9902
|
var profileSchema = z.object({
|
|
@@ -9893,15 +9963,15 @@ function ProfileScreen() {
|
|
|
9893
9963
|
href: buildPath("/account/addresses")
|
|
9894
9964
|
}
|
|
9895
9965
|
];
|
|
9896
|
-
return /* @__PURE__ */
|
|
9966
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.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.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement(
|
|
9897
9967
|
motion.div,
|
|
9898
9968
|
{
|
|
9899
9969
|
initial: { opacity: 0, y: 24 },
|
|
9900
9970
|
animate: { opacity: 1, y: 0 },
|
|
9901
9971
|
className: "flex flex-col gap-8 md:flex-row md:items-center md:justify-between"
|
|
9902
9972
|
},
|
|
9903
|
-
/* @__PURE__ */
|
|
9904
|
-
/* @__PURE__ */
|
|
9973
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-5" }, /* @__PURE__ */ React21.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.createElement(HeartPulse, { className: "h-4 w-4" }), "My account"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Hello, ", user.firstname, " ", user.lastname), /* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Manage profile details, shipping preferences, and personalized recommendations. Our pharmacists keep your care plan up to date."), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-4 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-4 w-4" }), "Account secured with multi-factor ready login"))),
|
|
9974
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center gap-4 rounded-3xl bg-white/15 p-6 text-center backdrop-blur" }, /* @__PURE__ */ React21.createElement("div", { className: "flex h-24 w-24 items-center justify-center rounded-full bg-white/20 text-3xl font-bold text-white" }, getInitials(user?.firstname || "", user?.lastname || "") || ""), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/80" }, user.email), /* @__PURE__ */ React21.createElement(
|
|
9905
9975
|
Button,
|
|
9906
9976
|
{
|
|
9907
9977
|
variant: "ghost",
|
|
@@ -9910,14 +9980,14 @@ function ProfileScreen() {
|
|
|
9910
9980
|
},
|
|
9911
9981
|
"Change password"
|
|
9912
9982
|
))
|
|
9913
|
-
))), /* @__PURE__ */
|
|
9983
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]" }, /* @__PURE__ */ React21.createElement(
|
|
9914
9984
|
motion.div,
|
|
9915
9985
|
{
|
|
9916
9986
|
initial: { opacity: 0, y: 24 },
|
|
9917
9987
|
animate: { opacity: 1, y: 0 },
|
|
9918
9988
|
className: "space-y-6"
|
|
9919
9989
|
},
|
|
9920
|
-
/* @__PURE__ */
|
|
9990
|
+
/* @__PURE__ */ React21.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Personal information"), /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-5 w-5 text-primary-500" })), /* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "mt-6 space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
9921
9991
|
Input,
|
|
9922
9992
|
{
|
|
9923
9993
|
label: "First name",
|
|
@@ -9925,7 +9995,7 @@ function ProfileScreen() {
|
|
|
9925
9995
|
...register("firstName"),
|
|
9926
9996
|
error: errors.firstName?.message
|
|
9927
9997
|
}
|
|
9928
|
-
), /* @__PURE__ */
|
|
9998
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9929
9999
|
Input,
|
|
9930
10000
|
{
|
|
9931
10001
|
label: "Last name",
|
|
@@ -9933,7 +10003,7 @@ function ProfileScreen() {
|
|
|
9933
10003
|
...register("lastName"),
|
|
9934
10004
|
error: errors.lastName?.message
|
|
9935
10005
|
}
|
|
9936
|
-
)), /* @__PURE__ */
|
|
10006
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9937
10007
|
Input,
|
|
9938
10008
|
{
|
|
9939
10009
|
type: "email",
|
|
@@ -9943,7 +10013,7 @@ function ProfileScreen() {
|
|
|
9943
10013
|
...register("email"),
|
|
9944
10014
|
error: errors.email?.message
|
|
9945
10015
|
}
|
|
9946
|
-
), /* @__PURE__ */
|
|
10016
|
+
), /* @__PURE__ */ React21.createElement(Mail, { className: "absolute left-3 top-[38px] h-4 w-4 text-slate-400" })), /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9947
10017
|
Input,
|
|
9948
10018
|
{
|
|
9949
10019
|
type: "tel",
|
|
@@ -9953,7 +10023,7 @@ function ProfileScreen() {
|
|
|
9953
10023
|
...register("phone"),
|
|
9954
10024
|
error: errors.phone?.message
|
|
9955
10025
|
}
|
|
9956
|
-
), /* @__PURE__ */
|
|
10026
|
+
), /* @__PURE__ */ React21.createElement(Phone, { className: "absolute left-3 top-[38px] h-4 w-4 text-slate-400" })), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
9957
10027
|
Button,
|
|
9958
10028
|
{
|
|
9959
10029
|
type: "submit",
|
|
@@ -9961,7 +10031,7 @@ function ProfileScreen() {
|
|
|
9961
10031
|
isLoading: isSubmitting
|
|
9962
10032
|
},
|
|
9963
10033
|
"Save changes"
|
|
9964
|
-
), /* @__PURE__ */
|
|
10034
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9965
10035
|
Button,
|
|
9966
10036
|
{
|
|
9967
10037
|
type: "button",
|
|
@@ -9971,16 +10041,16 @@ function ProfileScreen() {
|
|
|
9971
10041
|
},
|
|
9972
10042
|
"View recent orders"
|
|
9973
10043
|
)))),
|
|
9974
|
-
/* @__PURE__ */
|
|
10044
|
+
/* @__PURE__ */ React21.createElement("section", { className: "grid gap-4 md:grid-cols-2" }, quickLinks.map((item) => /* @__PURE__ */ React21.createElement(
|
|
9975
10045
|
Link8,
|
|
9976
10046
|
{
|
|
9977
10047
|
key: item.href,
|
|
9978
10048
|
href: item.href,
|
|
9979
10049
|
className: "group rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-lg"
|
|
9980
10050
|
},
|
|
9981
|
-
/* @__PURE__ */
|
|
10051
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement("span", { className: "rounded-2xl bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React21.createElement(item.icon, { className: "h-5 w-5" })), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-base font-semibold text-slate-900 group-hover:text-primary-600" }, item.label), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, item.description)))
|
|
9982
10052
|
)))
|
|
9983
|
-
), /* @__PURE__ */
|
|
10053
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9984
10054
|
motion.aside,
|
|
9985
10055
|
{
|
|
9986
10056
|
initial: { opacity: 0, y: 24 },
|
|
@@ -9988,7 +10058,7 @@ function ProfileScreen() {
|
|
|
9988
10058
|
transition: { delay: 0.1 },
|
|
9989
10059
|
className: "space-y-6"
|
|
9990
10060
|
},
|
|
9991
|
-
/* @__PURE__ */
|
|
10061
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, "Care preferences"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm text-slate-600" }, "Customize how we support you. Set refill reminders or manage communication preferences to stay aligned with your wellness goals."), /* @__PURE__ */ React21.createElement(
|
|
9992
10062
|
Button,
|
|
9993
10063
|
{
|
|
9994
10064
|
variant: "outline",
|
|
@@ -9997,14 +10067,14 @@ function ProfileScreen() {
|
|
|
9997
10067
|
},
|
|
9998
10068
|
"Manage preferences"
|
|
9999
10069
|
)),
|
|
10000
|
-
/* @__PURE__ */
|
|
10001
|
-
/* @__PURE__ */
|
|
10070
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Pharmacist tip"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 leading-relaxed" }, "Keep your phone number current so pharmacists can reach you quickly with dosage advice or time-sensitive updates about your order.")),
|
|
10071
|
+
/* @__PURE__ */ React21.createElement(
|
|
10002
10072
|
"button",
|
|
10003
10073
|
{
|
|
10004
10074
|
onClick: handleLogout,
|
|
10005
10075
|
className: "flex w-full items-center justify-center gap-2 rounded-3xl border border-red-200 bg-red-50 px-4 py-3 text-sm font-semibold text-red-600 transition hover:bg-red-100"
|
|
10006
10076
|
},
|
|
10007
|
-
/* @__PURE__ */
|
|
10077
|
+
/* @__PURE__ */ React21.createElement(LogOut, { className: "h-4 w-4" }),
|
|
10008
10078
|
"Log out"
|
|
10009
10079
|
)
|
|
10010
10080
|
)))));
|
|
@@ -10012,7 +10082,7 @@ function ProfileScreen() {
|
|
|
10012
10082
|
function OrderCard({ order }) {
|
|
10013
10083
|
const { buildPath } = useBasePath();
|
|
10014
10084
|
const config = order.orderStatus;
|
|
10015
|
-
return /* @__PURE__ */
|
|
10085
|
+
return /* @__PURE__ */ React21.createElement(
|
|
10016
10086
|
motion.div,
|
|
10017
10087
|
{
|
|
10018
10088
|
initial: { opacity: 0, y: 20 },
|
|
@@ -10020,9 +10090,9 @@ function OrderCard({ order }) {
|
|
|
10020
10090
|
whileHover: { y: -4 },
|
|
10021
10091
|
className: "bg-white rounded-2xl p-6 shadow-sm hover:shadow-xl transition-all duration-300 border border-gray-100"
|
|
10022
10092
|
},
|
|
10023
|
-
/* @__PURE__ */
|
|
10024
|
-
/* @__PURE__ */
|
|
10025
|
-
/* @__PURE__ */
|
|
10093
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-start mb-4" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-bold text-gray-900 flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(Package, { className: "w-5 h-5 text-primary-600" }), "Order #", order?._id?.slice(0, 6) || ""), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-500 mt-1 flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(Calendar, { className: "w-4 h-4" }), formatDate(order.createdAt || /* @__PURE__ */ new Date(), "long"))), /* @__PURE__ */ React21.createElement(Badge, { variant: config }, config)),
|
|
10094
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-2 mb-4" }, order.items?.slice(0, 2).map((item) => /* @__PURE__ */ React21.createElement("div", { key: item.productVariantId, className: "flex items-center gap-3 text-sm" }, /* @__PURE__ */ React21.createElement(Image3, { src: item?.productVariantData?.productMedia?.[0]?.file || "/placeholder-product.jpg", alt: item?.productVariantData?.name || "Product image", width: 48, height: 48, className: "w-12 h-12 rounded-lg bg-gray-100 flex-shrink-0" }), /* @__PURE__ */ React21.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21.createElement("p", { className: "font-medium text-gray-900 truncate" }, item.productVariantData.name), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-500" }, "Qty: ", item.quantity)), /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-gray-900" }, formatPrice(item.productVariantData.finalPrice)))), order.items?.length && order.items?.length > 2 && /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-500 pl-15" }, "+", order.items.length - 2, " more item", order.items.length - 2 > 1 ? "s" : "")),
|
|
10095
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-center pt-4 border-t border-gray-200" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-500" }, "Total Amount"), /* @__PURE__ */ React21.createElement("p", { className: "text-2xl font-bold text-gray-900" }, formatPrice(order.grandTotal || 0))), /* @__PURE__ */ React21.createElement("div", { className: "flex gap-2" }, order.payment.paymentStatus !== "Paid" /* Paid */ && order.payment.paymentMethod === "Card" /* Card */ && /* @__PURE__ */ React21.createElement(
|
|
10026
10096
|
"a",
|
|
10027
10097
|
{
|
|
10028
10098
|
href: order?.payment?.paymentIntent?.hostedInvoiceUrl || "",
|
|
@@ -10030,7 +10100,7 @@ function OrderCard({ order }) {
|
|
|
10030
10100
|
rel: "noopener noreferrer",
|
|
10031
10101
|
className: "inline-flex items-center gap-2 px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors"
|
|
10032
10102
|
},
|
|
10033
|
-
/* @__PURE__ */
|
|
10103
|
+
/* @__PURE__ */ React21.createElement(CreditCard, { className: "w-4 h-4" }),
|
|
10034
10104
|
"Pay Now"
|
|
10035
10105
|
)))
|
|
10036
10106
|
);
|
|
@@ -10186,7 +10256,7 @@ function FilterChips({
|
|
|
10186
10256
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
10187
10257
|
};
|
|
10188
10258
|
}, [isOverflowOpen]);
|
|
10189
|
-
return /* @__PURE__ */
|
|
10259
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3 md:flex-row md:items-center md:gap-4" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-slate-600" }, /* @__PURE__ */ React21.createElement(Icon, { className: "h-4 w-4" }), label), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-2 md:flex-row md:items-center md:gap-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, visibleFilters.map((filter) => /* @__PURE__ */ React21.createElement(
|
|
10190
10260
|
"button",
|
|
10191
10261
|
{
|
|
10192
10262
|
key: filter,
|
|
@@ -10195,16 +10265,16 @@ function FilterChips({
|
|
|
10195
10265
|
className: `rounded-full border px-3 py-1 text-sm font-medium transition ${selected === filter ? `border-${color}-600 bg-${color}-600 text-white shadow-lg shadow-${color}-500/30` : `border-slate-200 bg-slate-50 text-slate-600 hover:border-${color}-300 hover:text-${color}-600`}`
|
|
10196
10266
|
},
|
|
10197
10267
|
filter
|
|
10198
|
-
))), overflowFilters.length > 0 && /* @__PURE__ */
|
|
10268
|
+
))), overflowFilters.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "relative", ref: overflowMenuRef }, /* @__PURE__ */ React21.createElement(
|
|
10199
10269
|
"button",
|
|
10200
10270
|
{
|
|
10201
10271
|
type: "button",
|
|
10202
10272
|
onClick: () => setIsOverflowOpen((prev) => !prev),
|
|
10203
10273
|
className: `flex items-center gap-2 rounded-full border px-3 py-1 text-sm font-medium transition ${overflowFilters.includes(selected) ? `border-${color}-600 bg-${color}-50 text-${color}-700 shadow-lg shadow-${color}-500/20` : "border-slate-200 bg-white text-slate-600 hover:border-slate-300"}`
|
|
10204
10274
|
},
|
|
10205
|
-
/* @__PURE__ */
|
|
10206
|
-
/* @__PURE__ */
|
|
10207
|
-
), /* @__PURE__ */
|
|
10275
|
+
/* @__PURE__ */ React21.createElement("span", null, overflowFilters.includes(selected) ? selected : "More"),
|
|
10276
|
+
/* @__PURE__ */ React21.createElement("span", { className: `inline-flex h-5 min-w-[1.5rem] items-center justify-center rounded-full bg-${color}-100 px-1 text-xs font-semibold text-${color}-600` }, overflowFilters.length)
|
|
10277
|
+
), /* @__PURE__ */ React21.createElement(AnimatePresence, null, isOverflowOpen && /* @__PURE__ */ React21.createElement(
|
|
10208
10278
|
motion.div,
|
|
10209
10279
|
{
|
|
10210
10280
|
initial: { opacity: 0, y: 8 },
|
|
@@ -10213,7 +10283,7 @@ function FilterChips({
|
|
|
10213
10283
|
transition: { duration: 0.15 },
|
|
10214
10284
|
className: "absolute right-0 z-50 mt-2 w-64 rounded-2xl border border-slate-100 bg-white shadow-xl shadow-primary-50"
|
|
10215
10285
|
},
|
|
10216
|
-
/* @__PURE__ */
|
|
10286
|
+
/* @__PURE__ */ React21.createElement("div", { className: "border-b border-slate-100 px-4 py-3" }, /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(Search, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" }), /* @__PURE__ */ React21.createElement(
|
|
10217
10287
|
"input",
|
|
10218
10288
|
{
|
|
10219
10289
|
type: "text",
|
|
@@ -10223,7 +10293,7 @@ function FilterChips({
|
|
|
10223
10293
|
className: "w-full rounded-full border border-slate-200 bg-slate-50 py-2 pl-9 pr-3 text-sm text-slate-600 outline-none transition focus:border-primary-300 focus:bg-white focus:ring-2 focus:ring-primary-200"
|
|
10224
10294
|
}
|
|
10225
10295
|
))),
|
|
10226
|
-
/* @__PURE__ */
|
|
10296
|
+
/* @__PURE__ */ React21.createElement("div", { className: "max-h-60 overflow-y-auto px-2 py-2" }, filteredOverflowFilters.length > 0 ? filteredOverflowFilters.map((filter) => /* @__PURE__ */ React21.createElement(
|
|
10227
10297
|
"button",
|
|
10228
10298
|
{
|
|
10229
10299
|
key: filter,
|
|
@@ -10234,10 +10304,10 @@ function FilterChips({
|
|
|
10234
10304
|
},
|
|
10235
10305
|
className: `flex w-full items-center justify-between rounded-xl px-3 py-2 text-sm font-medium transition ${selected === filter ? `bg-${color}-600 text-white shadow-lg shadow-${color}-500/30` : "text-slate-600 hover:bg-slate-100"}`
|
|
10236
10306
|
},
|
|
10237
|
-
/* @__PURE__ */
|
|
10238
|
-
selected === filter && /* @__PURE__ */
|
|
10239
|
-
)) : /* @__PURE__ */
|
|
10240
|
-
/* @__PURE__ */
|
|
10307
|
+
/* @__PURE__ */ React21.createElement("span", null, filter),
|
|
10308
|
+
selected === filter && /* @__PURE__ */ React21.createElement(Check, { className: "h-4 w-4" })
|
|
10309
|
+
)) : /* @__PURE__ */ React21.createElement("p", { className: "px-3 py-4 text-sm text-slate-500" }, "No items found.")),
|
|
10310
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between gap-2 border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React21.createElement("span", { className: "text-xs font-semibold uppercase tracking-wide text-slate-400" }, "Quick actions"), /* @__PURE__ */ React21.createElement(
|
|
10241
10311
|
"button",
|
|
10242
10312
|
{
|
|
10243
10313
|
type: "button",
|
|
@@ -10295,23 +10365,23 @@ function OrdersScreen() {
|
|
|
10295
10365
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
10296
10366
|
};
|
|
10297
10367
|
}, [isOverflowOpen]);
|
|
10298
|
-
return /* @__PURE__ */
|
|
10368
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.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.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement(
|
|
10299
10369
|
motion.div,
|
|
10300
10370
|
{
|
|
10301
10371
|
initial: { opacity: 0, y: 24 },
|
|
10302
10372
|
animate: { opacity: 1, y: 0 },
|
|
10303
10373
|
className: "space-y-6"
|
|
10304
10374
|
},
|
|
10305
|
-
/* @__PURE__ */
|
|
10306
|
-
/* @__PURE__ */
|
|
10307
|
-
))), /* @__PURE__ */
|
|
10375
|
+
/* @__PURE__ */ React21.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.createElement(CalendarDays, { className: "h-4 w-4" }), "Order history"),
|
|
10376
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "All of your pharmacy orders"), /* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Access receipts, shipping statuses, and reorder suggestions in one organized timeline curated by our pharmacists.")), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick tip"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm text-white/80" }, "Use filters to review previous prescriptions, reorder favorites, or download invoices for insurance claims.")))
|
|
10377
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-16 container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement(
|
|
10308
10378
|
motion.div,
|
|
10309
10379
|
{
|
|
10310
10380
|
initial: { opacity: 0, y: 24 },
|
|
10311
10381
|
animate: { opacity: 1, y: 0 },
|
|
10312
10382
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
|
|
10313
10383
|
},
|
|
10314
|
-
/* @__PURE__ */
|
|
10384
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3 text-sm text-slate-500" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "Explore your complete order archive with pharmacist notes.")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 md:items-end" }, /* @__PURE__ */ React21.createElement(
|
|
10315
10385
|
FilterChips,
|
|
10316
10386
|
{
|
|
10317
10387
|
label: "Status filters",
|
|
@@ -10325,7 +10395,7 @@ function OrdersScreen() {
|
|
|
10325
10395
|
maxVisible: MAX_VISIBLE_FILTERS,
|
|
10326
10396
|
variant: "primary"
|
|
10327
10397
|
}
|
|
10328
|
-
), /* @__PURE__ */
|
|
10398
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10329
10399
|
FilterChips,
|
|
10330
10400
|
{
|
|
10331
10401
|
label: "Payment status",
|
|
@@ -10340,7 +10410,7 @@ function OrdersScreen() {
|
|
|
10340
10410
|
variant: "primary"
|
|
10341
10411
|
}
|
|
10342
10412
|
))),
|
|
10343
|
-
/* @__PURE__ */
|
|
10413
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-y-4" }, isLoading ? Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21.createElement(OrderCardSkeleton, { key: index })) : hasOrders ? filteredOrders.map((order) => /* @__PURE__ */ React21.createElement(OrderCard, { key: order.id, order })) : /* @__PURE__ */ React21.createElement(
|
|
10344
10414
|
EmptyState,
|
|
10345
10415
|
{
|
|
10346
10416
|
icon: Package,
|
|
@@ -10350,16 +10420,16 @@ function OrdersScreen() {
|
|
|
10350
10420
|
onAction: () => router.push(buildPath("/shop"))
|
|
10351
10421
|
}
|
|
10352
10422
|
)),
|
|
10353
|
-
!isLoading && pagination.totalPages > 1 && hasOrders && /* @__PURE__ */
|
|
10423
|
+
!isLoading && pagination.totalPages > 1 && hasOrders && /* @__PURE__ */ React21.createElement("div", { className: "mt-10 flex flex-wrap items-center justify-center gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
10354
10424
|
Button,
|
|
10355
10425
|
{
|
|
10356
10426
|
variant: "outline",
|
|
10357
10427
|
onClick: () => setPage((current) => Math.max(1, current - 1)),
|
|
10358
10428
|
disabled: page === 1
|
|
10359
10429
|
},
|
|
10360
|
-
/* @__PURE__ */
|
|
10430
|
+
/* @__PURE__ */ React21.createElement(ChevronLeft, { className: "h-5 w-5" }),
|
|
10361
10431
|
"Previous"
|
|
10362
|
-
), /* @__PURE__ */
|
|
10432
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-semibold text-slate-600" }, "Page ", page, " of ", pagination.totalPages), /* @__PURE__ */ React21.createElement(
|
|
10363
10433
|
Button,
|
|
10364
10434
|
{
|
|
10365
10435
|
variant: "outline",
|
|
@@ -10367,7 +10437,7 @@ function OrdersScreen() {
|
|
|
10367
10437
|
disabled: page === pagination.totalPages
|
|
10368
10438
|
},
|
|
10369
10439
|
"Next",
|
|
10370
|
-
/* @__PURE__ */
|
|
10440
|
+
/* @__PURE__ */ React21.createElement(ChevronRight, { className: "h-5 w-5" })
|
|
10371
10441
|
))
|
|
10372
10442
|
))));
|
|
10373
10443
|
}
|
|
@@ -10376,17 +10446,17 @@ function CurrentOrdersScreen() {
|
|
|
10376
10446
|
const { orders, isLoading } = useCurrentOrders();
|
|
10377
10447
|
const { buildPath } = useBasePath();
|
|
10378
10448
|
const hasOrders = orders.length > 0;
|
|
10379
|
-
return /* @__PURE__ */
|
|
10449
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.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.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement(
|
|
10380
10450
|
motion.div,
|
|
10381
10451
|
{
|
|
10382
10452
|
initial: { opacity: 0, y: 24 },
|
|
10383
10453
|
animate: { opacity: 1, y: 0 },
|
|
10384
10454
|
className: "space-y-4"
|
|
10385
10455
|
},
|
|
10386
|
-
/* @__PURE__ */
|
|
10387
|
-
/* @__PURE__ */
|
|
10388
|
-
/* @__PURE__ */
|
|
10389
|
-
), /* @__PURE__ */
|
|
10456
|
+
/* @__PURE__ */ React21.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.createElement(Truck, { className: "h-4 w-4" }), "Live order tracking"),
|
|
10457
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Current orders"),
|
|
10458
|
+
/* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Follow your pharmacy orders from preparation to delivery. Real-time updates, SMS alerts, and pharmacist oversight come standard.")
|
|
10459
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10390
10460
|
motion.div,
|
|
10391
10461
|
{
|
|
10392
10462
|
initial: { opacity: 0, y: 24 },
|
|
@@ -10394,24 +10464,24 @@ function CurrentOrdersScreen() {
|
|
|
10394
10464
|
transition: { delay: 0.1 },
|
|
10395
10465
|
className: "rounded-3xl bg-white/15 p-6 backdrop-blur"
|
|
10396
10466
|
},
|
|
10397
|
-
/* @__PURE__ */
|
|
10398
|
-
/* @__PURE__ */
|
|
10467
|
+
/* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick actions"),
|
|
10468
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-4 space-y-3 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement(
|
|
10399
10469
|
Link8,
|
|
10400
10470
|
{
|
|
10401
10471
|
href: buildPath("/orders"),
|
|
10402
10472
|
className: "flex items-center justify-between rounded-2xl bg-white/10 px-4 py-3 transition hover:bg-white/20"
|
|
10403
10473
|
},
|
|
10404
|
-
/* @__PURE__ */
|
|
10405
|
-
/* @__PURE__ */
|
|
10406
|
-
), /* @__PURE__ */
|
|
10407
|
-
)))), /* @__PURE__ */
|
|
10474
|
+
/* @__PURE__ */ React21.createElement("span", { className: "font-semibold text-white" }, "View order history"),
|
|
10475
|
+
/* @__PURE__ */ React21.createElement(ArrowUpRight, { className: "h-4 w-4" })
|
|
10476
|
+
), /* @__PURE__ */ React21.createElement("p", null, "Need help fast? Chat with a pharmacist and we will triage your request in under 10 minutes."))
|
|
10477
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-16" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement(
|
|
10408
10478
|
motion.section,
|
|
10409
10479
|
{
|
|
10410
10480
|
initial: { opacity: 0, y: 24 },
|
|
10411
10481
|
animate: { opacity: 1, y: 0 },
|
|
10412
10482
|
className: "grid gap-6 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]"
|
|
10413
10483
|
},
|
|
10414
|
-
/* @__PURE__ */
|
|
10484
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, isLoading ? /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21.createElement(OrderCardSkeleton, { key: index }))) : hasOrders ? /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, orders.map((order) => /* @__PURE__ */ React21.createElement(OrderCard, { key: order.id, order }))) : /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-10 shadow-sm" }, /* @__PURE__ */ React21.createElement(
|
|
10415
10485
|
EmptyState,
|
|
10416
10486
|
{
|
|
10417
10487
|
icon: PackageCheck,
|
|
@@ -10421,7 +10491,7 @@ function CurrentOrdersScreen() {
|
|
|
10421
10491
|
onAction: () => router.push(buildPath("/shop"))
|
|
10422
10492
|
}
|
|
10423
10493
|
))),
|
|
10424
|
-
/* @__PURE__ */
|
|
10494
|
+
/* @__PURE__ */ React21.createElement("aside", { className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-lg font-semibold text-slate-900" }, "Real-time milestones"), /* @__PURE__ */ React21.createElement("div", { className: "mt-4 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement(Warehouse, { className: "h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "Preparation"), /* @__PURE__ */ React21.createElement("p", null, "Our pharmacists verify ingredients and pack thermo-sensitive items."))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement(Truck, { className: "h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "In transit"), /* @__PURE__ */ React21.createElement("p", null, "Track live courier location with ETA updates tailored to your delivery window."))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement(BellRing, { className: "h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "Arrival alerts"), /* @__PURE__ */ React21.createElement("p", null, "Receive SMS and email notifications when parcels are out for delivery."))))), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Need support?"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 leading-relaxed" }, "Our fulfillment team is online 7 days a week. Message us if you need to adjust delivery instructions or review dosage guidance.")))
|
|
10425
10495
|
))));
|
|
10426
10496
|
}
|
|
10427
10497
|
var addressFormSchema = z.object({
|
|
@@ -10454,12 +10524,12 @@ function formatAddressSnippet(address) {
|
|
|
10454
10524
|
function getAddressTypeCopy(type) {
|
|
10455
10525
|
switch (type) {
|
|
10456
10526
|
case "Billing":
|
|
10457
|
-
return { label: "Billing", icon: /* @__PURE__ */
|
|
10527
|
+
return { label: "Billing", icon: /* @__PURE__ */ React21.createElement(Home, { className: "h-4 w-4" }) };
|
|
10458
10528
|
case "Both":
|
|
10459
|
-
return { label: "Billing & Shipping", icon: /* @__PURE__ */
|
|
10529
|
+
return { label: "Billing & Shipping", icon: /* @__PURE__ */ React21.createElement(Globe, { className: "h-4 w-4" }) };
|
|
10460
10530
|
case "Shipping":
|
|
10461
10531
|
default:
|
|
10462
|
-
return { label: "Shipping", icon: /* @__PURE__ */
|
|
10532
|
+
return { label: "Shipping", icon: /* @__PURE__ */ React21.createElement(MapPin, { className: "h-4 w-4" }) };
|
|
10463
10533
|
}
|
|
10464
10534
|
}
|
|
10465
10535
|
function AddressesScreen() {
|
|
@@ -10603,18 +10673,18 @@ You can add it back at any time.`
|
|
|
10603
10673
|
}
|
|
10604
10674
|
];
|
|
10605
10675
|
}, [addresses]);
|
|
10606
|
-
return /* @__PURE__ */
|
|
10676
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.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.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.3),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement(
|
|
10607
10677
|
motion.div,
|
|
10608
10678
|
{
|
|
10609
10679
|
initial: { opacity: 0, y: 24 },
|
|
10610
10680
|
animate: { opacity: 1, y: 0 },
|
|
10611
10681
|
className: "space-y-5"
|
|
10612
10682
|
},
|
|
10613
|
-
/* @__PURE__ */
|
|
10614
|
-
/* @__PURE__ */
|
|
10615
|
-
/* @__PURE__ */
|
|
10616
|
-
/* @__PURE__ */
|
|
10617
|
-
), /* @__PURE__ */
|
|
10683
|
+
/* @__PURE__ */ React21.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.createElement(MapPin, { className: "h-4 w-4" }), "Address book"),
|
|
10684
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Manage where your care arrives"),
|
|
10685
|
+
/* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Add home, office, or loved ones' addresses and toggle a default for lightning-fast checkout and delivery."),
|
|
10686
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-3 text-sm text-white/75" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-white" }), "Default address: ", defaultAddress ? defaultAddress.name : "Not set"), /* @__PURE__ */ React21.createElement(Button, { variant: "ghost", className: "text-white hover:bg-white/10", onClick: openCreateModal }, /* @__PURE__ */ React21.createElement(Plus, { className: "h-5 w-5" }), "Add address"))
|
|
10687
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10618
10688
|
motion.div,
|
|
10619
10689
|
{
|
|
10620
10690
|
initial: { opacity: 0, y: 24 },
|
|
@@ -10622,14 +10692,14 @@ You can add it back at any time.`
|
|
|
10622
10692
|
transition: { delay: 0.1 },
|
|
10623
10693
|
className: "grid gap-4 rounded-3xl bg-white/15 p-6 text-sm text-white/80 backdrop-blur"
|
|
10624
10694
|
},
|
|
10625
|
-
stats.map((stat) => /* @__PURE__ */
|
|
10626
|
-
)))), /* @__PURE__ */
|
|
10695
|
+
stats.map((stat) => /* @__PURE__ */ React21.createElement("div", { key: stat.id, className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-white/70" }, stat.label), /* @__PURE__ */ React21.createElement("p", { className: "text-white" }, stat.helper)), /* @__PURE__ */ React21.createElement("span", { className: "text-3xl font-semibold text-white" }, stat.value)))
|
|
10696
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, isLoading ? /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-3" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21.createElement(
|
|
10627
10697
|
"div",
|
|
10628
10698
|
{
|
|
10629
10699
|
key: index,
|
|
10630
10700
|
className: "h-56 animate-pulse rounded-3xl border border-slate-100 bg-white"
|
|
10631
10701
|
}
|
|
10632
|
-
))) : error ? /* @__PURE__ */
|
|
10702
|
+
))) : error ? /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-red-100 bg-red-50 p-6 text-sm text-red-700" }, error.message) : addresses.length === 0 ? /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-12 shadow-sm" }, /* @__PURE__ */ React21.createElement(
|
|
10633
10703
|
EmptyState,
|
|
10634
10704
|
{
|
|
10635
10705
|
icon: MapPin,
|
|
@@ -10638,9 +10708,9 @@ You can add it back at any time.`
|
|
|
10638
10708
|
actionLabel: "Add your first address",
|
|
10639
10709
|
onAction: openCreateModal
|
|
10640
10710
|
}
|
|
10641
|
-
)) : /* @__PURE__ */
|
|
10711
|
+
)) : /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-3" }, addresses.map((address) => {
|
|
10642
10712
|
const typeCopy = getAddressTypeCopy(address.addressType);
|
|
10643
|
-
return /* @__PURE__ */
|
|
10713
|
+
return /* @__PURE__ */ React21.createElement(
|
|
10644
10714
|
motion.div,
|
|
10645
10715
|
{
|
|
10646
10716
|
key: address.id,
|
|
@@ -10648,39 +10718,39 @@ You can add it back at any time.`
|
|
|
10648
10718
|
animate: { opacity: 1, y: 0 },
|
|
10649
10719
|
className: "group relative flex h-full flex-col rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-xl"
|
|
10650
10720
|
},
|
|
10651
|
-
address.isDefault && /* @__PURE__ */
|
|
10652
|
-
/* @__PURE__ */
|
|
10653
|
-
/* @__PURE__ */
|
|
10654
|
-
/* @__PURE__ */
|
|
10721
|
+
address.isDefault && /* @__PURE__ */ React21.createElement("span", { className: "absolute right-6 top-6 inline-flex items-center gap-2 rounded-full bg-amber-100 px-3 py-1 text-xs font-semibold text-amber-700" }, /* @__PURE__ */ React21.createElement(Crown, { className: "h-4 w-4" }), "Default"),
|
|
10722
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement("span", { className: "rounded-full bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React21.createElement(User, { className: "h-5 w-5" })), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-base font-semibold text-slate-900" }, address.name), /* @__PURE__ */ React21.createElement("p", { className: "text-xs uppercase tracking-[0.3em] text-slate-400" }, typeCopy.label))),
|
|
10723
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-6 flex flex-1 flex-col gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("p", null, formatAddressSnippet(address)), /* @__PURE__ */ React21.createElement("p", { className: "inline-flex items-center gap-2 text-slate-500" }, /* @__PURE__ */ React21.createElement(Phone, { className: "h-4 w-4 text-slate-400" }), address.phone || "Not provided")),
|
|
10724
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-6 flex items-center justify-between gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
10655
10725
|
"button",
|
|
10656
10726
|
{
|
|
10657
10727
|
type: "button",
|
|
10658
10728
|
onClick: () => openEditModal(address),
|
|
10659
10729
|
className: "inline-flex items-center gap-2 rounded-full border border-slate-200 px-3 py-1 text-sm font-medium text-slate-600 transition hover:border-primary-300 hover:text-primary-600"
|
|
10660
10730
|
},
|
|
10661
|
-
/* @__PURE__ */
|
|
10731
|
+
/* @__PURE__ */ React21.createElement(Edit3, { className: "h-4 w-4" }),
|
|
10662
10732
|
"Edit"
|
|
10663
|
-
), /* @__PURE__ */
|
|
10733
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, !address.isDefault && /* @__PURE__ */ React21.createElement(
|
|
10664
10734
|
"button",
|
|
10665
10735
|
{
|
|
10666
10736
|
type: "button",
|
|
10667
10737
|
onClick: () => handleSetDefault(address),
|
|
10668
10738
|
className: "inline-flex items-center gap-2 rounded-full border border-amber-200 px-3 py-1 text-sm font-semibold text-amber-600 transition hover:border-amber-300 hover:text-amber-700"
|
|
10669
10739
|
},
|
|
10670
|
-
/* @__PURE__ */
|
|
10740
|
+
/* @__PURE__ */ React21.createElement(Star, { className: "h-4 w-4" }),
|
|
10671
10741
|
"Make default"
|
|
10672
|
-
), /* @__PURE__ */
|
|
10742
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10673
10743
|
"button",
|
|
10674
10744
|
{
|
|
10675
10745
|
type: "button",
|
|
10676
10746
|
onClick: () => handleDelete(address),
|
|
10677
10747
|
className: "inline-flex items-center gap-2 rounded-full border border-red-200 px-3 py-1 text-sm font-semibold text-red-600 transition hover:border-red-300 hover:text-red-700"
|
|
10678
10748
|
},
|
|
10679
|
-
/* @__PURE__ */
|
|
10749
|
+
/* @__PURE__ */ React21.createElement(Trash2, { className: "h-4 w-4" }),
|
|
10680
10750
|
"Delete"
|
|
10681
10751
|
)))
|
|
10682
10752
|
);
|
|
10683
|
-
})))), /* @__PURE__ */
|
|
10753
|
+
})))), /* @__PURE__ */ React21.createElement(
|
|
10684
10754
|
Modal,
|
|
10685
10755
|
{
|
|
10686
10756
|
isOpen: isModalOpen,
|
|
@@ -10688,7 +10758,7 @@ You can add it back at any time.`
|
|
|
10688
10758
|
title: editingAddress ? "Edit address" : "Add new address",
|
|
10689
10759
|
size: "lg"
|
|
10690
10760
|
},
|
|
10691
|
-
/* @__PURE__ */
|
|
10761
|
+
/* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
10692
10762
|
Input,
|
|
10693
10763
|
{
|
|
10694
10764
|
label: "Full name",
|
|
@@ -10696,7 +10766,7 @@ You can add it back at any time.`
|
|
|
10696
10766
|
...register("fullName"),
|
|
10697
10767
|
error: errors.fullName?.message
|
|
10698
10768
|
}
|
|
10699
|
-
), /* @__PURE__ */
|
|
10769
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10700
10770
|
Input,
|
|
10701
10771
|
{
|
|
10702
10772
|
label: "Phone number",
|
|
@@ -10704,7 +10774,7 @@ You can add it back at any time.`
|
|
|
10704
10774
|
...register("phone"),
|
|
10705
10775
|
error: errors.phone?.message
|
|
10706
10776
|
}
|
|
10707
|
-
)), /* @__PURE__ */
|
|
10777
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
10708
10778
|
Input,
|
|
10709
10779
|
{
|
|
10710
10780
|
label: "Address line 1",
|
|
@@ -10712,7 +10782,7 @@ You can add it back at any time.`
|
|
|
10712
10782
|
...register("addressLine1"),
|
|
10713
10783
|
error: errors.addressLine1?.message
|
|
10714
10784
|
}
|
|
10715
|
-
), /* @__PURE__ */
|
|
10785
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10716
10786
|
Input,
|
|
10717
10787
|
{
|
|
10718
10788
|
label: "Address line 2 (optional)",
|
|
@@ -10720,7 +10790,7 @@ You can add it back at any time.`
|
|
|
10720
10790
|
...register("addressLine2"),
|
|
10721
10791
|
error: errors.addressLine2?.message
|
|
10722
10792
|
}
|
|
10723
|
-
), /* @__PURE__ */
|
|
10793
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
10724
10794
|
Input,
|
|
10725
10795
|
{
|
|
10726
10796
|
label: "City",
|
|
@@ -10728,7 +10798,7 @@ You can add it back at any time.`
|
|
|
10728
10798
|
...register("city"),
|
|
10729
10799
|
error: errors.city?.message
|
|
10730
10800
|
}
|
|
10731
|
-
), /* @__PURE__ */
|
|
10801
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10732
10802
|
Input,
|
|
10733
10803
|
{
|
|
10734
10804
|
label: "State / Region",
|
|
@@ -10736,7 +10806,7 @@ You can add it back at any time.`
|
|
|
10736
10806
|
...register("state"),
|
|
10737
10807
|
error: errors.state?.message
|
|
10738
10808
|
}
|
|
10739
|
-
)), /* @__PURE__ */
|
|
10809
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
10740
10810
|
Input,
|
|
10741
10811
|
{
|
|
10742
10812
|
label: "Postal code",
|
|
@@ -10744,7 +10814,7 @@ You can add it back at any time.`
|
|
|
10744
10814
|
...register("zipCode"),
|
|
10745
10815
|
error: errors.zipCode?.message
|
|
10746
10816
|
}
|
|
10747
|
-
), /* @__PURE__ */
|
|
10817
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10748
10818
|
Input,
|
|
10749
10819
|
{
|
|
10750
10820
|
label: "Country",
|
|
@@ -10752,23 +10822,23 @@ You can add it back at any time.`
|
|
|
10752
10822
|
...register("country"),
|
|
10753
10823
|
error: errors.country?.message
|
|
10754
10824
|
}
|
|
10755
|
-
)), /* @__PURE__ */
|
|
10825
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement("label", { className: "flex flex-col gap-2 rounded-2xl border border-slate-200 p-4" }, /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-semibold text-slate-700" }, "Address type"), /* @__PURE__ */ React21.createElement(
|
|
10756
10826
|
"select",
|
|
10757
10827
|
{
|
|
10758
10828
|
...register("addressType"),
|
|
10759
10829
|
className: "rounded-xl border border-slate-200 px-3 py-2 text-sm text-slate-700 focus:border-primary-400 focus:outline-none focus:ring-2 focus:ring-primary-500/20"
|
|
10760
10830
|
},
|
|
10761
|
-
/* @__PURE__ */
|
|
10762
|
-
/* @__PURE__ */
|
|
10763
|
-
/* @__PURE__ */
|
|
10764
|
-
)), /* @__PURE__ */
|
|
10831
|
+
/* @__PURE__ */ React21.createElement("option", { value: "Shipping" }, "Shipping"),
|
|
10832
|
+
/* @__PURE__ */ React21.createElement("option", { value: "Billing" }, "Billing"),
|
|
10833
|
+
/* @__PURE__ */ React21.createElement("option", { value: "Both" }, "Billing & Shipping")
|
|
10834
|
+
)), /* @__PURE__ */ React21.createElement("label", { className: "flex items-center justify-between gap-4 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm font-medium text-slate-700" }, /* @__PURE__ */ React21.createElement("span", null, "Set as default address"), /* @__PURE__ */ React21.createElement(
|
|
10765
10835
|
"input",
|
|
10766
10836
|
{
|
|
10767
10837
|
type: "checkbox",
|
|
10768
10838
|
...register("isDefault"),
|
|
10769
10839
|
className: "h-4 w-4 rounded border-primary-300 text-primary-600 focus:ring-primary-500"
|
|
10770
10840
|
}
|
|
10771
|
-
))), /* @__PURE__ */
|
|
10841
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-end gap-3" }, /* @__PURE__ */ React21.createElement(Button, { type: "button", variant: "outline", onClick: closeModal }, "Cancel"), /* @__PURE__ */ React21.createElement(Button, { type: "submit", isLoading: isSubmitting }, editingAddress ? "Save changes" : "Save address")))
|
|
10772
10842
|
));
|
|
10773
10843
|
}
|
|
10774
10844
|
function useWishlistProducts(productIds = []) {
|
|
@@ -10908,14 +10978,14 @@ function WishlistScreen() {
|
|
|
10908
10978
|
return list;
|
|
10909
10979
|
}, [wishlistProducts, onlyInStock, sortOption]);
|
|
10910
10980
|
const emptyAfterFiltering = !isLoading && wishlistProducts.length > 0 && processedProducts.length === 0;
|
|
10911
|
-
return /* @__PURE__ */
|
|
10981
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50 pb-16" }, /* @__PURE__ */ React21.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.createElement("div", { className: "absolute inset-0 opacity-40 mix-blend-soft-light", "aria-hidden": "true" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute -top-1/2 right-1/2 h-[40rem] w-[40rem] rounded-full bg-white/10 blur-3xl" }), /* @__PURE__ */ React21.createElement("div", { className: "absolute left-1/4 top-1/4 h-48 w-48 rounded-full bg-white/20 blur-2xl" })), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "max-w-3xl space-y-6" }, /* @__PURE__ */ React21.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.createElement(Heart, { className: "h-4 w-4" }), "Wishlist"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-5xl" }, "Curate your pharmacy must-haves in one calming space"), /* @__PURE__ */ React21.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.createElement("div", { className: "relative -mt-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement(
|
|
10912
10982
|
motion.div,
|
|
10913
10983
|
{
|
|
10914
10984
|
initial: { opacity: 0, y: 24 },
|
|
10915
10985
|
animate: { opacity: 1, y: 0 },
|
|
10916
10986
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-xl shadow-primary-50"
|
|
10917
10987
|
},
|
|
10918
|
-
/* @__PURE__ */
|
|
10988
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6" }, !isAuthenticated && /* @__PURE__ */ React21.createElement("div", { className: "flex min-h-[40vh] items-center justify-center" }, /* @__PURE__ */ React21.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.createElement("div", { className: "mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-primary-50 text-primary-600" }, /* @__PURE__ */ React21.createElement(Heart, { className: "h-8 w-8" })), /* @__PURE__ */ React21.createElement("h2", { className: "mt-6 text-3xl font-bold text-slate-900" }, "Sign in to see your favourites"), /* @__PURE__ */ React21.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.createElement(Button, { className: "mt-6", onClick: () => router.push(buildPath("/login")) }, "Sign In"))), isAuthenticated && /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "Your saved collection"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "Total value: ", /* @__PURE__ */ React21.createElement("span", { className: "font-semibold text-primary-600" }, formatPrice(totalValue)), onlyInStock && " \u2022 Showing items ready to ship")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-3" }, /* @__PURE__ */ React21.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.createElement(
|
|
10919
10989
|
"input",
|
|
10920
10990
|
{
|
|
10921
10991
|
type: "checkbox",
|
|
@@ -10923,54 +10993,54 @@ function WishlistScreen() {
|
|
|
10923
10993
|
onChange: (event) => setOnlyInStock(event.target.checked),
|
|
10924
10994
|
className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
|
|
10925
10995
|
}
|
|
10926
|
-
), "Only show in-stock"), /* @__PURE__ */
|
|
10996
|
+
), "Only show in-stock"), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("span", null, "Sort"), /* @__PURE__ */ React21.createElement(
|
|
10927
10997
|
"select",
|
|
10928
10998
|
{
|
|
10929
10999
|
value: sortOption,
|
|
10930
11000
|
onChange: (event) => setSortOption(event.target.value),
|
|
10931
11001
|
className: "bg-transparent text-sm font-medium text-slate-700 outline-none"
|
|
10932
11002
|
},
|
|
10933
|
-
SORT_OPTIONS.map((option) => /* @__PURE__ */
|
|
10934
|
-
)), /* @__PURE__ */
|
|
11003
|
+
SORT_OPTIONS.map((option) => /* @__PURE__ */ React21.createElement("option", { key: option.value, value: option.value }, option.label))
|
|
11004
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "flex overflow-hidden rounded-full border border-slate-200 bg-slate-50" }, /* @__PURE__ */ React21.createElement(
|
|
10935
11005
|
"button",
|
|
10936
11006
|
{
|
|
10937
11007
|
type: "button",
|
|
10938
11008
|
onClick: () => setViewMode("grid"),
|
|
10939
11009
|
className: `flex items-center gap-1 px-3 py-1.5 text-sm font-medium transition ${viewMode === "grid" ? "bg-primary-600 text-white shadow-lg shadow-primary-500/30" : "text-slate-600 hover:bg-white"}`
|
|
10940
11010
|
},
|
|
10941
|
-
/* @__PURE__ */
|
|
11011
|
+
/* @__PURE__ */ React21.createElement(Grid, { className: "h-4 w-4" }),
|
|
10942
11012
|
"Grid"
|
|
10943
|
-
), /* @__PURE__ */
|
|
11013
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10944
11014
|
"button",
|
|
10945
11015
|
{
|
|
10946
11016
|
type: "button",
|
|
10947
11017
|
onClick: () => setViewMode("list"),
|
|
10948
11018
|
className: `flex items-center gap-1 px-3 py-1.5 text-sm font-medium transition ${viewMode === "list" ? "bg-primary-600 text-white shadow-lg shadow-primary-500/30" : "text-slate-600 hover:bg-white"}`
|
|
10949
11019
|
},
|
|
10950
|
-
/* @__PURE__ */
|
|
11020
|
+
/* @__PURE__ */ React21.createElement(List, { className: "h-4 w-4" }),
|
|
10951
11021
|
"List"
|
|
10952
|
-
)), wishlistCount > 0 && /* @__PURE__ */
|
|
11022
|
+
)), wishlistCount > 0 && /* @__PURE__ */ React21.createElement(
|
|
10953
11023
|
Button,
|
|
10954
11024
|
{
|
|
10955
11025
|
variant: "ghost",
|
|
10956
11026
|
className: "text-sm font-semibold text-slate-500 hover:text-red-500",
|
|
10957
11027
|
onClick: handleClearWishlist
|
|
10958
11028
|
},
|
|
10959
|
-
/* @__PURE__ */
|
|
11029
|
+
/* @__PURE__ */ React21.createElement(Trash2, { className: "h-4 w-4" }),
|
|
10960
11030
|
"Clear all"
|
|
10961
|
-
))), isLoading && /* @__PURE__ */
|
|
11031
|
+
))), isLoading && /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3" }, Array.from({ length: Math.min(wishlistCount || 3, 6) }).map((_, index) => /* @__PURE__ */ React21.createElement(
|
|
10962
11032
|
"div",
|
|
10963
11033
|
{
|
|
10964
11034
|
key: index,
|
|
10965
11035
|
className: "h-72 animate-pulse rounded-2xl border border-slate-200 bg-slate-100"
|
|
10966
11036
|
}
|
|
10967
|
-
))), !isLoading && wishlistCount === 0 && /* @__PURE__ */
|
|
11037
|
+
))), !isLoading && wishlistCount === 0 && /* @__PURE__ */ React21.createElement("div", { className: "flex min-h-[30vh] items-center justify-center" }, /* @__PURE__ */ React21.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.createElement("div", { className: "mx-auto flex h-20 w-20 items-center justify-center rounded-full bg-primary-100 text-primary-600" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-10 w-10" })), /* @__PURE__ */ React21.createElement("h2", { className: "mt-6 text-4xl font-bold text-slate-900" }, "Start your wellness wishlist"), /* @__PURE__ */ React21.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.createElement("div", { className: "mt-8 flex flex-wrap justify-center gap-3" }, /* @__PURE__ */ React21.createElement(Button, { onClick: () => router.push(buildPath("/shop")) }, "Discover products"), /* @__PURE__ */ React21.createElement(Button, { variant: "outline", onClick: () => router.push(buildPath("/categories")) }, "Browse categories")))), !isLoading && processedProducts.length > 0 && /* @__PURE__ */ React21.createElement(React21.Fragment, null, viewMode === "grid" ? /* @__PURE__ */ React21.createElement(
|
|
10968
11038
|
motion.div,
|
|
10969
11039
|
{
|
|
10970
11040
|
layout: true,
|
|
10971
11041
|
className: "grid grid-cols-1 gap-5 sm:grid-cols-2 xl:grid-cols-3"
|
|
10972
11042
|
},
|
|
10973
|
-
/* @__PURE__ */
|
|
11043
|
+
/* @__PURE__ */ React21.createElement(AnimatePresence, null, processedProducts.map((product) => /* @__PURE__ */ React21.createElement(
|
|
10974
11044
|
motion.div,
|
|
10975
11045
|
{
|
|
10976
11046
|
key: product.id,
|
|
@@ -10980,7 +11050,7 @@ function WishlistScreen() {
|
|
|
10980
11050
|
exit: { opacity: 0, y: -20 },
|
|
10981
11051
|
transition: { duration: 0.2 }
|
|
10982
11052
|
},
|
|
10983
|
-
/* @__PURE__ */
|
|
11053
|
+
/* @__PURE__ */ React21.createElement(
|
|
10984
11054
|
ProductCard,
|
|
10985
11055
|
{
|
|
10986
11056
|
product,
|
|
@@ -10990,7 +11060,7 @@ function WishlistScreen() {
|
|
|
10990
11060
|
}
|
|
10991
11061
|
)
|
|
10992
11062
|
)))
|
|
10993
|
-
) : /* @__PURE__ */
|
|
11063
|
+
) : /* @__PURE__ */ React21.createElement(motion.div, { layout: true, className: "space-y-4" }, /* @__PURE__ */ React21.createElement(AnimatePresence, null, processedProducts.map((product) => /* @__PURE__ */ React21.createElement(
|
|
10994
11064
|
motion.div,
|
|
10995
11065
|
{
|
|
10996
11066
|
key: product.id,
|
|
@@ -11001,7 +11071,7 @@ function WishlistScreen() {
|
|
|
11001
11071
|
transition: { duration: 0.2 },
|
|
11002
11072
|
className: "flex flex-col gap-4 rounded-2xl border border-slate-100 bg-slate-50 p-4 shadow-sm shadow-primary-50 sm:flex-row sm:items-center"
|
|
11003
11073
|
},
|
|
11004
|
-
/* @__PURE__ */
|
|
11074
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative h-28 w-full overflow-hidden rounded-2xl bg-white sm:w-40" }, /* @__PURE__ */ React21.createElement(
|
|
11005
11075
|
Image3,
|
|
11006
11076
|
{
|
|
11007
11077
|
fill: true,
|
|
@@ -11010,14 +11080,14 @@ function WishlistScreen() {
|
|
|
11010
11080
|
className: "h-full w-full object-cover"
|
|
11011
11081
|
}
|
|
11012
11082
|
)),
|
|
11013
|
-
/* @__PURE__ */
|
|
11083
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-1 flex-col gap-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center justify-between gap-3" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, product.name), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, product.parentCategories?.map((category) => category?.name).join(", ") || "General wellness")), /* @__PURE__ */ React21.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21.createElement("p", { className: "text-lg font-bold text-primary-600" }, formatPrice(product.finalPrice ?? 0)), product.isDiscounted && /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-emerald-500" }, "You save ", formatPrice(Math.max((product.priceBeforeDiscount ?? 0) - (product.finalPrice ?? 0), 0))))), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-3 text-xs text-slate-500" }, /* @__PURE__ */ React21.createElement("span", { className: `inline-flex items-center gap-1 rounded-full px-2.5 py-1 font-medium ${product.inventoryCount > 0 ? "bg-emerald-100 text-emerald-700" : "bg-rose-100 text-rose-700"}` }, /* @__PURE__ */ React21.createElement(Package, { className: "h-3.5 w-3.5" }), product.inventoryCount > 0 ? "In stock" : "Backordered"), product.totalSold > 0 && /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-slate-200 px-2.5 py-1 font-medium text-slate-700" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-3.5 w-3.5" }), product.totalSold, "+ purchased")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, /* @__PURE__ */ React21.createElement(
|
|
11014
11084
|
Button,
|
|
11015
11085
|
{
|
|
11016
11086
|
size: "sm",
|
|
11017
11087
|
onClick: () => router.push(buildPath(`/products/${product.id}`))
|
|
11018
11088
|
},
|
|
11019
11089
|
"View details"
|
|
11020
|
-
), /* @__PURE__ */
|
|
11090
|
+
), /* @__PURE__ */ React21.createElement(
|
|
11021
11091
|
Button,
|
|
11022
11092
|
{
|
|
11023
11093
|
size: "sm",
|
|
@@ -11027,7 +11097,7 @@ function WishlistScreen() {
|
|
|
11027
11097
|
},
|
|
11028
11098
|
"Remove"
|
|
11029
11099
|
)))
|
|
11030
|
-
))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */
|
|
11100
|
+
))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */ React21.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.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-slate-200 text-slate-500" }, /* @__PURE__ */ React21.createElement(Package, { className: "h-8 w-8" })), /* @__PURE__ */ React21.createElement("h3", { className: "mt-6 text-2xl font-semibold text-slate-900" }, "Nothing matches those filters"), /* @__PURE__ */ React21.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.createElement(Button, { className: "mt-6", variant: "outline", onClick: () => setOnlyInStock(false) }, "Show all saved products"))))
|
|
11031
11101
|
))));
|
|
11032
11102
|
}
|
|
11033
11103
|
function SearchPage() {
|
|
@@ -11141,31 +11211,31 @@ function CategoriesScreen() {
|
|
|
11141
11211
|
const { categories, isLoading } = useCategories();
|
|
11142
11212
|
const router = useRouter();
|
|
11143
11213
|
const { buildPath } = useBasePath();
|
|
11144
|
-
return /* @__PURE__ */
|
|
11214
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.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.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement(
|
|
11145
11215
|
motion.div,
|
|
11146
11216
|
{
|
|
11147
11217
|
initial: { opacity: 0, y: 24 },
|
|
11148
11218
|
animate: { opacity: 1, y: 0 },
|
|
11149
11219
|
className: "space-y-6"
|
|
11150
11220
|
},
|
|
11151
|
-
/* @__PURE__ */
|
|
11152
|
-
/* @__PURE__ */
|
|
11153
|
-
))), /* @__PURE__ */
|
|
11221
|
+
/* @__PURE__ */ React21.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.createElement(Package, { className: "h-4 w-4" }), "Product Categories"),
|
|
11222
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Browse Our Product Range"), /* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Explore our comprehensive selection of healthcare products, carefully curated by our pharmacists to meet all your wellness needs.")), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick tip"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm text-white/80" }, "Use the categories below to quickly find the products you're looking for, or use the search function for specific items.")))
|
|
11223
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-16" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement(
|
|
11154
11224
|
motion.div,
|
|
11155
11225
|
{
|
|
11156
11226
|
initial: { opacity: 0, y: 24 },
|
|
11157
11227
|
animate: { opacity: 1, y: 0 },
|
|
11158
11228
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
|
|
11159
11229
|
},
|
|
11160
|
-
/* @__PURE__ */
|
|
11161
|
-
isLoading ? /* @__PURE__ */
|
|
11230
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3 text-sm text-slate-500 mb-6" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "Browse our complete product catalog organized by categories.")),
|
|
11231
|
+
isLoading ? /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, [...Array(8)].map((_, i) => /* @__PURE__ */ React21.createElement("div", { key: i, className: "animate-pulse" }, /* @__PURE__ */ React21.createElement("div", { className: "bg-gray-200 rounded-lg aspect-square mb-2" }), /* @__PURE__ */ React21.createElement("div", { className: "h-4 bg-gray-200 rounded w-3/4 mb-1" }), /* @__PURE__ */ React21.createElement("div", { className: "h-3 bg-gray-200 rounded w-1/2" })))) : categories.length > 0 ? /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, categories.map((category) => /* @__PURE__ */ React21.createElement(
|
|
11162
11232
|
Link8,
|
|
11163
11233
|
{
|
|
11164
11234
|
key: category.id,
|
|
11165
11235
|
href: buildPath(`/shop?category=${category.name}`),
|
|
11166
11236
|
className: "group block overflow-hidden rounded-xl border border-gray-100 bg-white p-4 text-center transition hover:shadow-lg hover:border-primary-500"
|
|
11167
11237
|
},
|
|
11168
|
-
/* @__PURE__ */
|
|
11238
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative aspect-square w-full overflow-hidden rounded-lg bg-gray-50 mb-3" }, category.image ? /* @__PURE__ */ React21.createElement(
|
|
11169
11239
|
Image3,
|
|
11170
11240
|
{
|
|
11171
11241
|
src: category.image,
|
|
@@ -11174,10 +11244,10 @@ function CategoriesScreen() {
|
|
|
11174
11244
|
className: "object-cover transition-transform group-hover:scale-105",
|
|
11175
11245
|
sizes: "(max-width: 768px) 50vw, (max-width: 1200px) 33vw, 25vw"
|
|
11176
11246
|
}
|
|
11177
|
-
) : /* @__PURE__ */
|
|
11178
|
-
/* @__PURE__ */
|
|
11179
|
-
category.productCount > 0 && /* @__PURE__ */
|
|
11180
|
-
))) : /* @__PURE__ */
|
|
11247
|
+
) : /* @__PURE__ */ React21.createElement("div", { className: "flex h-full w-full items-center justify-center bg-gray-100 text-gray-400" }, /* @__PURE__ */ React21.createElement(Package, { className: "h-12 w-12" }))),
|
|
11248
|
+
/* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900 group-hover:text-primary-600 transition-colors" }, category.name),
|
|
11249
|
+
category.productCount > 0 && /* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-sm text-gray-500" }, category.productCount, " ", category.productCount === 1 ? "product" : "products")
|
|
11250
|
+
))) : /* @__PURE__ */ React21.createElement(
|
|
11181
11251
|
EmptyState,
|
|
11182
11252
|
{
|
|
11183
11253
|
title: "No categories found",
|
|
@@ -11344,7 +11414,7 @@ function Header() {
|
|
|
11344
11414
|
{ href: buildPath("/about"), label: "About" },
|
|
11345
11415
|
{ href: buildPath("/contact"), label: "Contact" }
|
|
11346
11416
|
];
|
|
11347
|
-
return /* @__PURE__ */
|
|
11417
|
+
return /* @__PURE__ */ React21.createElement("header", { className: "sticky top-0 z-40 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between h-20" }, /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/"), className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement("div", { className: "relative w-12 h-12" }, /* @__PURE__ */ React21.createElement(
|
|
11348
11418
|
Image3,
|
|
11349
11419
|
{
|
|
11350
11420
|
src: config.logo,
|
|
@@ -11352,7 +11422,7 @@ function Header() {
|
|
|
11352
11422
|
fill: true,
|
|
11353
11423
|
className: "object-contain"
|
|
11354
11424
|
}
|
|
11355
|
-
)), /* @__PURE__ */
|
|
11425
|
+
)), /* @__PURE__ */ React21.createElement("span", { className: "text-2xl font-bold text-gray-900 hidden sm:block" }, config.storeName)), /* @__PURE__ */ React21.createElement("nav", { className: "hidden lg:flex items-center gap-8" }, navLinks.map((link) => /* @__PURE__ */ React21.createElement(
|
|
11356
11426
|
Link8,
|
|
11357
11427
|
{
|
|
11358
11428
|
key: link.href,
|
|
@@ -11360,16 +11430,16 @@ function Header() {
|
|
|
11360
11430
|
className: "text-gray-700 hover:text-primary-600 font-medium transition-colors relative group"
|
|
11361
11431
|
},
|
|
11362
11432
|
link.label,
|
|
11363
|
-
/* @__PURE__ */
|
|
11364
|
-
))), /* @__PURE__ */
|
|
11433
|
+
/* @__PURE__ */ React21.createElement("span", { className: "absolute bottom-0 left-0 w-0 h-0.5 bg-primary-600 group-hover:w-full transition-all duration-300" })
|
|
11434
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
11365
11435
|
"button",
|
|
11366
11436
|
{
|
|
11367
11437
|
onClick: () => setIsSearchOpen(!isSearchOpen),
|
|
11368
11438
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors",
|
|
11369
11439
|
"aria-label": "Search"
|
|
11370
11440
|
},
|
|
11371
|
-
/* @__PURE__ */
|
|
11372
|
-
), /* @__PURE__ */
|
|
11441
|
+
/* @__PURE__ */ React21.createElement(Search, { className: "w-5 h-5 text-gray-700" })
|
|
11442
|
+
), /* @__PURE__ */ React21.createElement(AnimatePresence, null, isSearchOpen && /* @__PURE__ */ React21.createElement(
|
|
11373
11443
|
motion.div,
|
|
11374
11444
|
{
|
|
11375
11445
|
initial: { opacity: 0, width: 0 },
|
|
@@ -11377,7 +11447,7 @@ function Header() {
|
|
|
11377
11447
|
exit: { opacity: 0, width: 0 },
|
|
11378
11448
|
className: "absolute right-0 top-full mt-2 bg-white rounded-lg shadow-lg overflow-hidden"
|
|
11379
11449
|
},
|
|
11380
|
-
/* @__PURE__ */
|
|
11450
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center p-2 w-64" }, /* @__PURE__ */ React21.createElement(Search, { className: "w-5 h-5 text-gray-400 mr-2" }), /* @__PURE__ */ React21.createElement(
|
|
11381
11451
|
"input",
|
|
11382
11452
|
{
|
|
11383
11453
|
type: "text",
|
|
@@ -11392,36 +11462,36 @@ function Header() {
|
|
|
11392
11462
|
className: "w-full outline-none text-gray-700",
|
|
11393
11463
|
autoFocus: true
|
|
11394
11464
|
}
|
|
11395
|
-
), searchQuery && /* @__PURE__ */
|
|
11465
|
+
), searchQuery && /* @__PURE__ */ React21.createElement(
|
|
11396
11466
|
"button",
|
|
11397
11467
|
{
|
|
11398
11468
|
onClick: () => setSearchQuery(""),
|
|
11399
11469
|
className: "text-gray-400 hover:text-gray-600"
|
|
11400
11470
|
},
|
|
11401
|
-
/* @__PURE__ */
|
|
11471
|
+
/* @__PURE__ */ React21.createElement(X, { className: "w-4 h-4" })
|
|
11402
11472
|
))
|
|
11403
|
-
))), /* @__PURE__ */
|
|
11473
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/wishlist"), className: "relative p-2 text-gray-700 hover:text-red-500 transition-colors" }, /* @__PURE__ */ React21.createElement(Heart, { className: "w-6 h-6" }), wishlistCount > 0 && /* @__PURE__ */ React21.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, wishlistCount)), /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/cart"), className: "relative p-2 text-gray-700 hover:text-primary-600 transition-colors" }, /* @__PURE__ */ React21.createElement(ShoppingCart, { className: "w-6 h-6" }), cart?.cartBody?.items?.length && cart.cartBody?.items?.length > 0 ? /* @__PURE__ */ React21.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, cart.cartBody?.items?.length) : null), isAuthenticated ? /* @__PURE__ */ React21.createElement(
|
|
11404
11474
|
Link8,
|
|
11405
11475
|
{
|
|
11406
11476
|
href: buildPath("/account"),
|
|
11407
11477
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors"
|
|
11408
11478
|
},
|
|
11409
|
-
/* @__PURE__ */
|
|
11410
|
-
) : /* @__PURE__ */
|
|
11479
|
+
/* @__PURE__ */ React21.createElement(User, { className: "w-6 h-6 text-gray-700" })
|
|
11480
|
+
) : /* @__PURE__ */ React21.createElement(
|
|
11411
11481
|
Link8,
|
|
11412
11482
|
{
|
|
11413
11483
|
href: buildPath("/login"),
|
|
11414
11484
|
className: "hidden sm:block px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors font-medium"
|
|
11415
11485
|
},
|
|
11416
11486
|
"Sign In"
|
|
11417
|
-
)), /* @__PURE__ */
|
|
11487
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
11418
11488
|
"button",
|
|
11419
11489
|
{
|
|
11420
11490
|
className: "lg:hidden p-2 hover:bg-gray-100 rounded-lg transition-colors",
|
|
11421
11491
|
onClick: () => setIsMobileMenuOpen(!isMobileMenuOpen)
|
|
11422
11492
|
},
|
|
11423
|
-
isMobileMenuOpen ? /* @__PURE__ */
|
|
11424
|
-
)), /* @__PURE__ */
|
|
11493
|
+
isMobileMenuOpen ? /* @__PURE__ */ React21.createElement(X, { className: "w-6 h-6" }) : /* @__PURE__ */ React21.createElement(Menu, { className: "w-6 h-6" })
|
|
11494
|
+
)), /* @__PURE__ */ React21.createElement(AnimatePresence, null, isMobileMenuOpen && /* @__PURE__ */ React21.createElement(
|
|
11425
11495
|
motion.div,
|
|
11426
11496
|
{
|
|
11427
11497
|
initial: { opacity: 0, height: 0 },
|
|
@@ -11429,7 +11499,7 @@ function Header() {
|
|
|
11429
11499
|
exit: { opacity: 0, height: 0 },
|
|
11430
11500
|
className: "lg:hidden overflow-hidden border-t border-gray-200"
|
|
11431
11501
|
},
|
|
11432
|
-
/* @__PURE__ */
|
|
11502
|
+
/* @__PURE__ */ React21.createElement("nav", { className: "flex flex-col gap-1 py-2" }, navLinks.map((link) => /* @__PURE__ */ React21.createElement(
|
|
11433
11503
|
Link8,
|
|
11434
11504
|
{
|
|
11435
11505
|
key: link.href,
|
|
@@ -11438,7 +11508,7 @@ function Header() {
|
|
|
11438
11508
|
onClick: () => setIsMobileMenuOpen(false)
|
|
11439
11509
|
},
|
|
11440
11510
|
link.label
|
|
11441
|
-
)), !isAuthenticated && /* @__PURE__ */
|
|
11511
|
+
)), !isAuthenticated && /* @__PURE__ */ React21.createElement(
|
|
11442
11512
|
Link8,
|
|
11443
11513
|
{
|
|
11444
11514
|
href: buildPath("/login"),
|
|
@@ -11477,48 +11547,48 @@ function Footer() {
|
|
|
11477
11547
|
{ label: "Cookie Policy", href: buildPath("/cookies") }
|
|
11478
11548
|
]
|
|
11479
11549
|
};
|
|
11480
|
-
return /* @__PURE__ */
|
|
11550
|
+
return /* @__PURE__ */ React21.createElement("footer", { className: "bg-gray-900 text-gray-300" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12" }, /* @__PURE__ */ React21.createElement("div", { className: "lg:col-span-2" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-2xl font-bold text-white mb-4" }, config.storeName), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-400 mb-6 max-w-md" }, "Your trusted online store for quality products. We deliver excellence with every order."), /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(Mail, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "support@", config.storeName.toLowerCase().replace(/\s+/g, ""), ".com")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(Phone, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "+1 (555) 123-4567")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(MapPin, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "123 Store Street, City, Country")))), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Shop"), /* @__PURE__ */ React21.createElement("ul", { className: "space-y-2" }, footerLinks.shop.map((link) => /* @__PURE__ */ React21.createElement("li", { key: link.href }, /* @__PURE__ */ React21.createElement(
|
|
11481
11551
|
Link8,
|
|
11482
11552
|
{
|
|
11483
11553
|
href: link.href,
|
|
11484
11554
|
className: "hover:text-primary-500 transition-colors"
|
|
11485
11555
|
},
|
|
11486
11556
|
link.label
|
|
11487
|
-
))))), /* @__PURE__ */
|
|
11557
|
+
))))), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Account"), /* @__PURE__ */ React21.createElement("ul", { className: "space-y-2" }, footerLinks.account.map((link) => /* @__PURE__ */ React21.createElement("li", { key: link.href }, /* @__PURE__ */ React21.createElement(
|
|
11488
11558
|
Link8,
|
|
11489
11559
|
{
|
|
11490
11560
|
href: link.href,
|
|
11491
11561
|
className: "hover:text-primary-500 transition-colors"
|
|
11492
11562
|
},
|
|
11493
11563
|
link.label
|
|
11494
|
-
))))), /* @__PURE__ */
|
|
11564
|
+
))))), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Support"), /* @__PURE__ */ React21.createElement("ul", { className: "space-y-2" }, footerLinks.support.map((link) => /* @__PURE__ */ React21.createElement("li", { key: link.href }, /* @__PURE__ */ React21.createElement(
|
|
11495
11565
|
Link8,
|
|
11496
11566
|
{
|
|
11497
11567
|
href: link.href,
|
|
11498
11568
|
className: "hover:text-primary-500 transition-colors"
|
|
11499
11569
|
},
|
|
11500
11570
|
link.label
|
|
11501
|
-
)))))), /* @__PURE__ */
|
|
11571
|
+
)))))), /* @__PURE__ */ React21.createElement("div", { className: "border-t border-gray-800 mt-12 pt-8 flex flex-col md:flex-row justify-between items-center gap-4" }, /* @__PURE__ */ React21.createElement("p", { className: "text-gray-400 text-sm" }, "\xA9 ", (/* @__PURE__ */ new Date()).getFullYear(), " ", config.storeName, ". All rights reserved."), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
11502
11572
|
"a",
|
|
11503
11573
|
{
|
|
11504
11574
|
href: "#",
|
|
11505
11575
|
className: "w-10 h-10 bg-gray-800 hover:bg-primary-600 rounded-full flex items-center justify-center transition-colors"
|
|
11506
11576
|
},
|
|
11507
|
-
/* @__PURE__ */
|
|
11508
|
-
), /* @__PURE__ */
|
|
11577
|
+
/* @__PURE__ */ React21.createElement(Facebook, { className: "w-5 h-5" })
|
|
11578
|
+
), /* @__PURE__ */ React21.createElement(
|
|
11509
11579
|
"a",
|
|
11510
11580
|
{
|
|
11511
11581
|
href: "#",
|
|
11512
11582
|
className: "w-10 h-10 bg-gray-800 hover:bg-primary-600 rounded-full flex items-center justify-center transition-colors"
|
|
11513
11583
|
},
|
|
11514
|
-
/* @__PURE__ */
|
|
11515
|
-
), /* @__PURE__ */
|
|
11584
|
+
/* @__PURE__ */ React21.createElement(Twitter, { className: "w-5 h-5" })
|
|
11585
|
+
), /* @__PURE__ */ React21.createElement(
|
|
11516
11586
|
"a",
|
|
11517
11587
|
{
|
|
11518
11588
|
href: "#",
|
|
11519
11589
|
className: "w-10 h-10 bg-gray-800 hover:bg-primary-600 rounded-full flex items-center justify-center transition-colors"
|
|
11520
11590
|
},
|
|
11521
|
-
/* @__PURE__ */
|
|
11591
|
+
/* @__PURE__ */ React21.createElement(Instagram, { className: "w-5 h-5" })
|
|
11522
11592
|
)))));
|
|
11523
11593
|
}
|
|
11524
11594
|
|