hey-pharmacist-ecommerce 1.1.1 → 1.1.3
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.d.mts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +611 -589
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +417 -396
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/ProductCard.tsx +3 -1
- package/src/index.ts +1 -0
- package/src/providers/BasePathProvider.tsx +36 -0
- package/src/providers/EcommerceProvider.tsx +13 -9
- package/src/providers/ThemeProvider.tsx +1 -1
- package/src/screens/HomeScreen.tsx +4 -2
- package/src/screens/SearchResultsScreen.tsx +4 -2
- package/src/screens/ShopScreen.tsx +5 -3
- package/src/screens/WishlistScreen.tsx +3 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import
|
|
2
|
+
import React20, { 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';
|
|
@@ -93,8 +93,8 @@ function ThemeProvider({ config, children }) {
|
|
|
93
93
|
root.style.setProperty(`--header-via`, primaryShades[600]);
|
|
94
94
|
root.style.setProperty(`--header-to`, secondaryShades[600]);
|
|
95
95
|
}
|
|
96
|
-
}, [config
|
|
97
|
-
return /* @__PURE__ */
|
|
96
|
+
}, [config]);
|
|
97
|
+
return /* @__PURE__ */ React20.createElement(ThemeContext.Provider, { value: { config } }, children);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
// src/lib/Apis/configuration.ts
|
|
@@ -1992,7 +1992,7 @@ function AuthProvider({ children }) {
|
|
|
1992
1992
|
updateUser,
|
|
1993
1993
|
refreshUser
|
|
1994
1994
|
};
|
|
1995
|
-
return /* @__PURE__ */
|
|
1995
|
+
return /* @__PURE__ */ React20.createElement(AuthContext.Provider, { value }, children);
|
|
1996
1996
|
}
|
|
1997
1997
|
var AddressesApiAxiosParamCreator = function(configuration) {
|
|
1998
1998
|
return {
|
|
@@ -6782,7 +6782,7 @@ function CartProvider({ children }) {
|
|
|
6782
6782
|
clearCart,
|
|
6783
6783
|
refreshCart
|
|
6784
6784
|
};
|
|
6785
|
-
return /* @__PURE__ */
|
|
6785
|
+
return /* @__PURE__ */ React20.createElement(CartContext.Provider, { value }, children);
|
|
6786
6786
|
}
|
|
6787
6787
|
var BaseUrl = "https://api.heypharmacist.com";
|
|
6788
6788
|
globalAxios4.interceptors.request.use(async (config) => {
|
|
@@ -6917,7 +6917,7 @@ function WishlistProvider({ children }) {
|
|
|
6917
6917
|
const refreshWishlist = async () => {
|
|
6918
6918
|
await fetchWishlist();
|
|
6919
6919
|
};
|
|
6920
|
-
return /* @__PURE__ */
|
|
6920
|
+
return /* @__PURE__ */ React20.createElement(
|
|
6921
6921
|
WishlistContext.Provider,
|
|
6922
6922
|
{
|
|
6923
6923
|
value: {
|
|
@@ -6940,14 +6940,31 @@ var useWishlist = () => {
|
|
|
6940
6940
|
}
|
|
6941
6941
|
return context;
|
|
6942
6942
|
};
|
|
6943
|
-
|
|
6943
|
+
var BasePathContext = createContext(void 0);
|
|
6944
|
+
function BasePathProvider({ basePath = "", children }) {
|
|
6945
|
+
const normalized = basePath ? basePath.startsWith("/") ? basePath : `/${basePath}` : "";
|
|
6946
|
+
const buildPath = (path) => {
|
|
6947
|
+
if (!normalized) return path;
|
|
6948
|
+
if (!path) return normalized;
|
|
6949
|
+
if (path.startsWith(normalized + "/")) return path;
|
|
6950
|
+
if (path.startsWith("/")) return `${normalized}${path}`;
|
|
6951
|
+
return `${normalized}/${path}`;
|
|
6952
|
+
};
|
|
6953
|
+
return /* @__PURE__ */ React20.createElement(BasePathContext.Provider, { value: { basePath: normalized, buildPath } }, children);
|
|
6954
|
+
}
|
|
6955
|
+
function useBasePath() {
|
|
6956
|
+
const ctx = useContext(BasePathContext);
|
|
6957
|
+
if (!ctx) throw new Error("useBasePath must be used within BasePathProvider");
|
|
6958
|
+
return ctx;
|
|
6959
|
+
}
|
|
6960
|
+
function EcommerceProvider({ config, children, withToaster = true, basePath = "" }) {
|
|
6944
6961
|
useEffect(() => {
|
|
6945
6962
|
initializeApiAdapter(config);
|
|
6946
6963
|
}, [config]);
|
|
6947
|
-
const [client] =
|
|
6964
|
+
const [client] = React20.useState(
|
|
6948
6965
|
new QueryClient({ defaultOptions: { queries: { staleTime: 5e3 } } })
|
|
6949
6966
|
);
|
|
6950
|
-
return /* @__PURE__ */
|
|
6967
|
+
return /* @__PURE__ */ React20.createElement(QueryClientProvider, { client }, /* @__PURE__ */ React20.createElement(ThemeProvider, { config }, /* @__PURE__ */ React20.createElement(BasePathProvider, { basePath }, /* @__PURE__ */ React20.createElement(AuthProvider, null, /* @__PURE__ */ React20.createElement(CartProvider, null, /* @__PURE__ */ React20.createElement(WishlistProvider, null, children, withToaster && /* @__PURE__ */ React20.createElement(Toaster, { position: "top-right", richColors: true })))))));
|
|
6951
6968
|
}
|
|
6952
6969
|
|
|
6953
6970
|
// src/lib/utils/format.ts
|
|
@@ -6990,6 +7007,7 @@ function ProductCard({
|
|
|
6990
7007
|
className
|
|
6991
7008
|
}) {
|
|
6992
7009
|
const router = useRouter();
|
|
7010
|
+
const { buildPath } = useBasePath();
|
|
6993
7011
|
const [isFavorite, setIsFavorite] = useState(isFavorited);
|
|
6994
7012
|
const { addToWishlist, removeFromWishlist, isInWishlist } = useWishlist();
|
|
6995
7013
|
const [isHovered, setIsHovered] = useState(false);
|
|
@@ -7036,7 +7054,7 @@ function ProductCard({
|
|
|
7036
7054
|
alt: product.name || "Product image"
|
|
7037
7055
|
};
|
|
7038
7056
|
}, [product.productMedia, product.name]);
|
|
7039
|
-
return /* @__PURE__ */
|
|
7057
|
+
return /* @__PURE__ */ React20.createElement(
|
|
7040
7058
|
motion.article,
|
|
7041
7059
|
{
|
|
7042
7060
|
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",
|
|
@@ -7049,7 +7067,7 @@ function ProductCard({
|
|
|
7049
7067
|
onClick: handleCardClick,
|
|
7050
7068
|
onKeyDown: handleKeyDown
|
|
7051
7069
|
},
|
|
7052
|
-
/* @__PURE__ */
|
|
7070
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative h-48 w-full overflow-hidden bg-gray-50" }, /* @__PURE__ */ React20.createElement(AnimatePresence, null, !isImageLoaded && /* @__PURE__ */ React20.createElement(
|
|
7053
7071
|
motion.div,
|
|
7054
7072
|
{
|
|
7055
7073
|
className: "absolute inset-0 bg-gray-200 animate-pulse",
|
|
@@ -7057,7 +7075,7 @@ function ProductCard({
|
|
|
7057
7075
|
exit: { opacity: 0 },
|
|
7058
7076
|
transition: { duration: 0.2 }
|
|
7059
7077
|
}
|
|
7060
|
-
)), product.productMedia?.[0]?.file && /* @__PURE__ */
|
|
7078
|
+
)), product.productMedia?.[0]?.file && /* @__PURE__ */ React20.createElement(
|
|
7061
7079
|
Image3,
|
|
7062
7080
|
{
|
|
7063
7081
|
src: product.productMedia?.[0]?.file || "/placeholder-product.jpg",
|
|
@@ -7068,7 +7086,7 @@ function ProductCard({
|
|
|
7068
7086
|
priority: false,
|
|
7069
7087
|
onLoad: handleImageLoad
|
|
7070
7088
|
}
|
|
7071
|
-
), /* @__PURE__ */
|
|
7089
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "absolute top-3 left-3 flex flex-col gap-2 z-10" }, product.isDiscounted && /* @__PURE__ */ React20.createElement(
|
|
7072
7090
|
motion.span,
|
|
7073
7091
|
{
|
|
7074
7092
|
initial: { scale: 0.9, opacity: 0 },
|
|
@@ -7078,7 +7096,7 @@ function ProductCard({
|
|
|
7078
7096
|
"-",
|
|
7079
7097
|
product.discountAmount,
|
|
7080
7098
|
"%"
|
|
7081
|
-
), product.inventoryCount === 0 && /* @__PURE__ */
|
|
7099
|
+
), product.inventoryCount === 0 && /* @__PURE__ */ React20.createElement(
|
|
7082
7100
|
motion.span,
|
|
7083
7101
|
{
|
|
7084
7102
|
initial: { scale: 0.9, opacity: 0 },
|
|
@@ -7086,7 +7104,7 @@ function ProductCard({
|
|
|
7086
7104
|
className: "inline-flex items-center justify-center px-2.5 py-1 rounded-full text-xs font-bold text-white bg-red-600"
|
|
7087
7105
|
},
|
|
7088
7106
|
"Out of Stock"
|
|
7089
|
-
)), showFavoriteButton && /* @__PURE__ */
|
|
7107
|
+
)), showFavoriteButton && /* @__PURE__ */ React20.createElement(
|
|
7090
7108
|
motion.button,
|
|
7091
7109
|
{
|
|
7092
7110
|
type: "button",
|
|
@@ -7096,10 +7114,10 @@ function ProductCard({
|
|
|
7096
7114
|
whileTap: { scale: 0.95 },
|
|
7097
7115
|
"aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
|
|
7098
7116
|
},
|
|
7099
|
-
/* @__PURE__ */
|
|
7117
|
+
/* @__PURE__ */ React20.createElement(Heart, { className: `w-5 h-5 ${isFavorite ? "fill-current" : ""}` })
|
|
7100
7118
|
)),
|
|
7101
|
-
/* @__PURE__ */
|
|
7102
|
-
showFavoriteButton && /* @__PURE__ */
|
|
7119
|
+
/* @__PURE__ */ React20.createElement("div", { className: "absolute top-4 left-4 flex flex-col gap-2" }, product.inventoryCount === 0 && /* @__PURE__ */ React20.createElement("span", { className: "px-3 py-1 rounded-full text-sm font-bold bg-red-100 text-red-800" }, "Out of Stock")),
|
|
7120
|
+
showFavoriteButton && /* @__PURE__ */ React20.createElement(
|
|
7103
7121
|
"button",
|
|
7104
7122
|
{
|
|
7105
7123
|
type: "button",
|
|
@@ -7107,21 +7125,21 @@ function ProductCard({
|
|
|
7107
7125
|
className: `absolute top-2 right-2 p-2 rounded-full transition-colors ${isFavorite ? "text-red-500" : "text-gray-400 hover:text-red-500"}`,
|
|
7108
7126
|
"aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
|
|
7109
7127
|
},
|
|
7110
|
-
/* @__PURE__ */
|
|
7128
|
+
/* @__PURE__ */ React20.createElement(Heart, { className: `w-5 h-5 ${isFavorite ? "fill-current" : ""}` })
|
|
7111
7129
|
),
|
|
7112
|
-
/* @__PURE__ */
|
|
7113
|
-
/* @__PURE__ */
|
|
7130
|
+
/* @__PURE__ */ React20.createElement("div", { className: "p-4" }, product.parentCategories && product.parentCategories?.length > 0 && /* @__PURE__ */ React20.createElement("p", { className: "text-xs text-gray-500 uppercase tracking-wider mb-2" }, product.parentCategories?.map((category) => category?.name).join(", ") || "No categories"), /* @__PURE__ */ React20.createElement("div", { className: "mb-2" }, /* @__PURE__ */ React20.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__ */ React20.createElement("p", { className: "text-xs text-gray-400 mt-1" }, "SKU: ", product.sku)), /* @__PURE__ */ React20.createElement("div", { className: "flex items-baseline gap-2" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React20.createElement("span", { className: "text-2xl font-bold text-gray-900" }, formatPrice(product.finalPrice)), product.inventoryCount > 0 && /* @__PURE__ */ React20.createElement("span", { className: "text-xs text-gray-500" }, product.inventoryCount > 0 ? "In Stock" : "Out of Stock")), product.priceBeforeDiscount && product.priceBeforeDiscount > product.finalPrice && /* @__PURE__ */ React20.createElement("span", { className: "text-sm text-gray-500 line-through" }, formatPrice(product.priceBeforeDiscount)))),
|
|
7131
|
+
/* @__PURE__ */ React20.createElement("div", { className: "mt-auto p-4 pt-0" }, /* @__PURE__ */ React20.createElement(
|
|
7114
7132
|
"button",
|
|
7115
7133
|
{
|
|
7116
7134
|
type: "button",
|
|
7117
7135
|
onClick: (e) => {
|
|
7118
7136
|
e.stopPropagation();
|
|
7119
|
-
router.push(`/products/${product._id}`);
|
|
7137
|
+
router.push(buildPath(`/products/${product._id}`));
|
|
7120
7138
|
},
|
|
7121
7139
|
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`
|
|
7122
7140
|
},
|
|
7123
7141
|
"View Product"
|
|
7124
|
-
), showFavoriteButton && /* @__PURE__ */
|
|
7142
|
+
), showFavoriteButton && /* @__PURE__ */ React20.createElement(
|
|
7125
7143
|
"button",
|
|
7126
7144
|
{
|
|
7127
7145
|
type: "button",
|
|
@@ -7129,7 +7147,7 @@ function ProductCard({
|
|
|
7129
7147
|
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",
|
|
7130
7148
|
"aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
|
|
7131
7149
|
},
|
|
7132
|
-
/* @__PURE__ */
|
|
7150
|
+
/* @__PURE__ */ React20.createElement(
|
|
7133
7151
|
Heart,
|
|
7134
7152
|
{
|
|
7135
7153
|
className: `mr-2 h-4 w-4 ${isFavorite ? "fill-red-500 text-red-500" : "text-primary-600"}`
|
|
@@ -7140,13 +7158,13 @@ function ProductCard({
|
|
|
7140
7158
|
);
|
|
7141
7159
|
}
|
|
7142
7160
|
function Skeleton({ className = "" }) {
|
|
7143
|
-
return /* @__PURE__ */
|
|
7161
|
+
return /* @__PURE__ */ React20.createElement("div", { className: `animate-pulse bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 bg-[length:200%_100%] rounded ${className}` });
|
|
7144
7162
|
}
|
|
7145
7163
|
function ProductCardSkeleton() {
|
|
7146
|
-
return /* @__PURE__ */
|
|
7164
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "bg-white rounded-2xl overflow-hidden shadow-sm" }, /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-64 w-full" }), /* @__PURE__ */ React20.createElement("div", { className: "p-4 space-y-3" }, /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-6 w-3/4" }), /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-4 w-1/2" }), /* @__PURE__ */ React20.createElement("div", { className: "flex justify-between items-center pt-2" }, /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-8 w-24" }), /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-10 w-10 rounded-full" }))));
|
|
7147
7165
|
}
|
|
7148
7166
|
function OrderCardSkeleton() {
|
|
7149
|
-
return /* @__PURE__ */
|
|
7167
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "bg-white rounded-2xl p-6 shadow-sm" }, /* @__PURE__ */ React20.createElement("div", { className: "flex justify-between items-start mb-4" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-2 flex-1" }, /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-6 w-32" }), /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-4 w-48" })), /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-6 w-20 rounded-full" })), /* @__PURE__ */ React20.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-4 w-full" }), /* @__PURE__ */ React20.createElement(Skeleton, { className: "h-4 w-2/3" })));
|
|
7150
7168
|
}
|
|
7151
7169
|
var MotionDiv = dynamic(() => import('framer-motion').then((mod) => mod.motion.div), {
|
|
7152
7170
|
ssr: false
|
|
@@ -7172,14 +7190,14 @@ function Button({
|
|
|
7172
7190
|
md: "px-6 py-3 text-base",
|
|
7173
7191
|
lg: "px-8 py-4 text-lg"
|
|
7174
7192
|
};
|
|
7175
|
-
return /* @__PURE__ */
|
|
7193
|
+
return /* @__PURE__ */ React20.createElement(
|
|
7176
7194
|
MotionDiv,
|
|
7177
7195
|
{
|
|
7178
7196
|
whileHover: { scale: 1.02 },
|
|
7179
7197
|
whileTap: { scale: 0.98 },
|
|
7180
7198
|
className: "inline-block"
|
|
7181
7199
|
},
|
|
7182
|
-
/* @__PURE__ */
|
|
7200
|
+
/* @__PURE__ */ React20.createElement(
|
|
7183
7201
|
"button",
|
|
7184
7202
|
{
|
|
7185
7203
|
className: `${baseStyles} ${variants[variant]} ${sizes[size]} ${className}`,
|
|
@@ -7188,18 +7206,18 @@ function Button({
|
|
|
7188
7206
|
"aria-busy": isLoading,
|
|
7189
7207
|
...props
|
|
7190
7208
|
},
|
|
7191
|
-
isLoading ? /* @__PURE__ */
|
|
7209
|
+
isLoading ? /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.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__ */ React20.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ React20.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
|
|
7192
7210
|
)
|
|
7193
7211
|
);
|
|
7194
7212
|
}
|
|
7195
7213
|
|
|
7196
7214
|
// src/components/EmptyState.tsx
|
|
7197
7215
|
function EmptyState({ icon: Icon, title, description, actionLabel, onAction }) {
|
|
7198
|
-
return /* @__PURE__ */
|
|
7216
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col items-center justify-center py-16 px-4" }, /* @__PURE__ */ React20.createElement("div", { className: "w-24 h-24 bg-gray-100 rounded-full flex items-center justify-center mb-6" }, /* @__PURE__ */ React20.createElement(Icon, { className: "w-12 h-12 text-gray-400" })), /* @__PURE__ */ React20.createElement("h3", { className: "text-2xl font-bold text-gray-900 mb-2" }, title), /* @__PURE__ */ React20.createElement("p", { className: "text-gray-600 text-center max-w-md mb-8" }, description), actionLabel && onAction && /* @__PURE__ */ React20.createElement(Button, { onClick: onAction }, actionLabel));
|
|
7199
7217
|
}
|
|
7200
7218
|
var Input = forwardRef(
|
|
7201
7219
|
({ label, error, helperText, className = "", ...props }, ref) => {
|
|
7202
|
-
return /* @__PURE__ */
|
|
7220
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "w-full" }, label && /* @__PURE__ */ React20.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, label), /* @__PURE__ */ React20.createElement(
|
|
7203
7221
|
"input",
|
|
7204
7222
|
{
|
|
7205
7223
|
ref,
|
|
@@ -7213,7 +7231,7 @@ var Input = forwardRef(
|
|
|
7213
7231
|
`,
|
|
7214
7232
|
...props
|
|
7215
7233
|
}
|
|
7216
|
-
), error && /* @__PURE__ */
|
|
7234
|
+
), error && /* @__PURE__ */ React20.createElement("p", { className: "mt-2 text-sm text-red-600" }, error), helperText && !error && /* @__PURE__ */ React20.createElement("p", { className: "mt-2 text-sm text-gray-500" }, helperText));
|
|
7217
7235
|
}
|
|
7218
7236
|
);
|
|
7219
7237
|
Input.displayName = "Input";
|
|
@@ -7333,6 +7351,7 @@ function useCategories() {
|
|
|
7333
7351
|
// src/screens/ShopScreen.tsx
|
|
7334
7352
|
function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
7335
7353
|
const router = useRouter();
|
|
7354
|
+
const { buildPath } = useBasePath();
|
|
7336
7355
|
const [filters, setFilters] = useState(initialFilters);
|
|
7337
7356
|
const [page, setPage] = useState(1);
|
|
7338
7357
|
const [showFilters, setShowFilters] = useState(false);
|
|
@@ -7774,7 +7793,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7774
7793
|
]);
|
|
7775
7794
|
const hasActiveFilters = activeFilterChips.length > 0;
|
|
7776
7795
|
const isCustomPriceDirty = customPrice.min.trim() !== "" || customPrice.max.trim() !== "";
|
|
7777
|
-
const renderFiltersPanel = () => /* @__PURE__ */
|
|
7796
|
+
const renderFiltersPanel = () => /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "space-y-8" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-8" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-start justify-between gap-3" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Refine results"), /* @__PURE__ */ React20.createElement("p", { className: "mt-1 text-sm text-gray-500" }, "Filter by category, price, and availability to find the perfect fit faster.")), hasActiveFilters && /* @__PURE__ */ React20.createElement(
|
|
7778
7797
|
"button",
|
|
7779
7798
|
{
|
|
7780
7799
|
type: "button",
|
|
@@ -7782,10 +7801,10 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7782
7801
|
className: "text-sm font-semibold text-primary-600 hover:text-primary-700"
|
|
7783
7802
|
},
|
|
7784
7803
|
"Clear all"
|
|
7785
|
-
)), /* @__PURE__ */
|
|
7804
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React20.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Categories"), /* @__PURE__ */ React20.createElement("div", { className: "space-y-2" }, sortedCategories.length === 0 && /* @__PURE__ */ React20.createElement("span", { className: "text-sm text-gray-500" }, "No categories available yet."), sortedCategories.map((category) => {
|
|
7786
7805
|
const isCategoryActive = categoryFilter === category.id;
|
|
7787
7806
|
const isExpanded = !!expandedCategories[category.id];
|
|
7788
|
-
return /* @__PURE__ */
|
|
7807
|
+
return /* @__PURE__ */ React20.createElement("div", { key: category.id, className: "rounded-xl border-gray-100 bg-white/50" }, /* @__PURE__ */ React20.createElement(
|
|
7789
7808
|
"div",
|
|
7790
7809
|
{
|
|
7791
7810
|
role: "button",
|
|
@@ -7796,8 +7815,8 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7796
7815
|
},
|
|
7797
7816
|
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"}`
|
|
7798
7817
|
},
|
|
7799
|
-
/* @__PURE__ */
|
|
7800
|
-
/* @__PURE__ */
|
|
7818
|
+
/* @__PURE__ */ React20.createElement("span", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement("span", { className: "font-medium" }, category.name), category.productCount > 0 && /* @__PURE__ */ React20.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)),
|
|
7819
|
+
/* @__PURE__ */ React20.createElement(
|
|
7801
7820
|
"button",
|
|
7802
7821
|
{
|
|
7803
7822
|
type: "button",
|
|
@@ -7809,11 +7828,11 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7809
7828
|
className: "rounded-md p-1 hover:bg-gray-100",
|
|
7810
7829
|
"aria-label": isExpanded ? "Collapse" : "Expand"
|
|
7811
7830
|
},
|
|
7812
|
-
/* @__PURE__ */
|
|
7831
|
+
/* @__PURE__ */ React20.createElement(ChevronDown, { className: `h-4 w-4 transition-transform ${isExpanded ? "rotate-180 text-primary-600" : "rotate-0 text-gray-400"}` })
|
|
7813
7832
|
)
|
|
7814
|
-
), isExpanded && Array.isArray(category.categorySubCategories) && category.categorySubCategories.length > 0 && /* @__PURE__ */
|
|
7833
|
+
), isExpanded && Array.isArray(category.categorySubCategories) && category.categorySubCategories.length > 0 && /* @__PURE__ */ React20.createElement("div", { className: "mt-1 border-gray-100 px-2 pb-2 pl-4" }, /* @__PURE__ */ React20.createElement("div", { className: "divide-y divide-gray-100" }, category.categorySubCategories.map((sub) => {
|
|
7815
7834
|
const isSubActive = subCategoryFilter === sub.id;
|
|
7816
|
-
return /* @__PURE__ */
|
|
7835
|
+
return /* @__PURE__ */ React20.createElement(
|
|
7817
7836
|
"button",
|
|
7818
7837
|
{
|
|
7819
7838
|
key: sub.id,
|
|
@@ -7824,9 +7843,9 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7824
7843
|
sub.name
|
|
7825
7844
|
);
|
|
7826
7845
|
}))));
|
|
7827
|
-
}))))), /* @__PURE__ */
|
|
7846
|
+
}))))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React20.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Price"), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap gap-2" }, priceRanges.map((range) => {
|
|
7828
7847
|
const isActive = selectedPriceRange === range.value;
|
|
7829
|
-
return /* @__PURE__ */
|
|
7848
|
+
return /* @__PURE__ */ React20.createElement(
|
|
7830
7849
|
"button",
|
|
7831
7850
|
{
|
|
7832
7851
|
type: "button",
|
|
@@ -7836,7 +7855,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7836
7855
|
},
|
|
7837
7856
|
range.label
|
|
7838
7857
|
);
|
|
7839
|
-
})), /* @__PURE__ */
|
|
7858
|
+
})), /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-2 gap-3" }, /* @__PURE__ */ React20.createElement(
|
|
7840
7859
|
Input,
|
|
7841
7860
|
{
|
|
7842
7861
|
type: "number",
|
|
@@ -7845,7 +7864,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7845
7864
|
value: customPrice.min,
|
|
7846
7865
|
onChange: (event) => setCustomPrice((current) => ({ ...current, min: event.target.value }))
|
|
7847
7866
|
}
|
|
7848
|
-
), /* @__PURE__ */
|
|
7867
|
+
), /* @__PURE__ */ React20.createElement(
|
|
7849
7868
|
Input,
|
|
7850
7869
|
{
|
|
7851
7870
|
type: "number",
|
|
@@ -7854,7 +7873,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7854
7873
|
value: customPrice.max,
|
|
7855
7874
|
onChange: (event) => setCustomPrice((current) => ({ ...current, max: event.target.value }))
|
|
7856
7875
|
}
|
|
7857
|
-
)), /* @__PURE__ */
|
|
7876
|
+
)), /* @__PURE__ */ React20.createElement(
|
|
7858
7877
|
"button",
|
|
7859
7878
|
{
|
|
7860
7879
|
type: "button",
|
|
@@ -7863,48 +7882,48 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7863
7882
|
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"
|
|
7864
7883
|
},
|
|
7865
7884
|
"Apply price range"
|
|
7866
|
-
)), /* @__PURE__ */
|
|
7885
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React20.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Availability"), /* @__PURE__ */ React20.createElement(
|
|
7867
7886
|
"button",
|
|
7868
7887
|
{
|
|
7869
7888
|
type: "button",
|
|
7870
7889
|
onClick: handleToggleStock,
|
|
7871
7890
|
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"}`
|
|
7872
7891
|
},
|
|
7873
|
-
/* @__PURE__ */
|
|
7874
|
-
/* @__PURE__ */
|
|
7875
|
-
), /* @__PURE__ */
|
|
7892
|
+
/* @__PURE__ */ React20.createElement("span", null, "In stock only"),
|
|
7893
|
+
/* @__PURE__ */ React20.createElement(Sparkles, { className: "h-4 w-4 text-primary-500" })
|
|
7894
|
+
), /* @__PURE__ */ React20.createElement(
|
|
7876
7895
|
"button",
|
|
7877
7896
|
{
|
|
7878
7897
|
type: "button",
|
|
7879
7898
|
onClick: handleToggleNewArrivals,
|
|
7880
7899
|
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"}`
|
|
7881
7900
|
},
|
|
7882
|
-
/* @__PURE__ */
|
|
7883
|
-
/* @__PURE__ */
|
|
7901
|
+
/* @__PURE__ */ React20.createElement("span", null, "New arrivals (last 30 days)"),
|
|
7902
|
+
/* @__PURE__ */ React20.createElement(Sparkles, { className: "h-4 w-4 text-secondary-500" })
|
|
7884
7903
|
))));
|
|
7885
|
-
return /* @__PURE__ */
|
|
7904
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.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__ */ React20.createElement(
|
|
7886
7905
|
"div",
|
|
7887
7906
|
{
|
|
7888
7907
|
className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]",
|
|
7889
7908
|
"aria-hidden": "true"
|
|
7890
7909
|
}
|
|
7891
|
-
), /* @__PURE__ */
|
|
7910
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_bottom_right,_rgba(94,234,212,0.35),_transparent_55%)] opacity-60" }), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4 py-24" }, /* @__PURE__ */ React20.createElement(
|
|
7892
7911
|
motion.div,
|
|
7893
7912
|
{
|
|
7894
7913
|
initial: { opacity: 0, y: 24 },
|
|
7895
7914
|
animate: { opacity: 1, y: 0 },
|
|
7896
7915
|
className: "max-w-3xl space-y-8 text-center md:mx-auto md:text-left"
|
|
7897
7916
|
},
|
|
7898
|
-
/* @__PURE__ */
|
|
7899
|
-
/* @__PURE__ */
|
|
7900
|
-
/* @__PURE__ */
|
|
7901
|
-
/* @__PURE__ */
|
|
7917
|
+
/* @__PURE__ */ React20.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__ */ React20.createElement(Sparkles, { className: "h-4 w-4" }), "Wellness products, curated for you"),
|
|
7918
|
+
/* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-6xl" }, "Find pharmacy favorites crafted to keep your family thriving"),
|
|
7919
|
+
/* @__PURE__ */ React20.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."),
|
|
7920
|
+
/* @__PURE__ */ React20.createElement(
|
|
7902
7921
|
"form",
|
|
7903
7922
|
{
|
|
7904
7923
|
onSubmit: handleSearch,
|
|
7905
7924
|
className: "mx-auto max-w-2xl md:mx-0"
|
|
7906
7925
|
},
|
|
7907
|
-
/* @__PURE__ */
|
|
7926
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React20.createElement(
|
|
7908
7927
|
"input",
|
|
7909
7928
|
{
|
|
7910
7929
|
type: "search",
|
|
@@ -7915,17 +7934,17 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7915
7934
|
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",
|
|
7916
7935
|
disabled: isSearching
|
|
7917
7936
|
}
|
|
7918
|
-
), /* @__PURE__ */
|
|
7937
|
+
), /* @__PURE__ */ React20.createElement(
|
|
7919
7938
|
"button",
|
|
7920
7939
|
{
|
|
7921
7940
|
type: "submit",
|
|
7922
7941
|
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",
|
|
7923
7942
|
disabled: !searchQuery.trim() || isSearching
|
|
7924
7943
|
},
|
|
7925
|
-
isSearching ? /* @__PURE__ */
|
|
7944
|
+
isSearching ? /* @__PURE__ */ React20.createElement("div", { className: "h-5 w-5 animate-spin rounded-full border-2 border-white border-t-transparent" }) : /* @__PURE__ */ React20.createElement(Search, { className: "h-5 w-5" })
|
|
7926
7945
|
))
|
|
7927
7946
|
)
|
|
7928
|
-
), /* @__PURE__ */
|
|
7947
|
+
), /* @__PURE__ */ React20.createElement(
|
|
7929
7948
|
motion.div,
|
|
7930
7949
|
{
|
|
7931
7950
|
initial: { opacity: 0, y: 24 },
|
|
@@ -7933,7 +7952,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7933
7952
|
transition: { delay: 0.15 },
|
|
7934
7953
|
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"
|
|
7935
7954
|
},
|
|
7936
|
-
/* @__PURE__ */
|
|
7955
|
+
/* @__PURE__ */ React20.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React20.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, "Explore popular searches"), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap gap-2" }, quickSearches.map((term) => /* @__PURE__ */ React20.createElement(
|
|
7937
7956
|
"button",
|
|
7938
7957
|
{
|
|
7939
7958
|
key: term,
|
|
@@ -7943,7 +7962,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7943
7962
|
},
|
|
7944
7963
|
term
|
|
7945
7964
|
)))),
|
|
7946
|
-
topCategories.length > 0 && /* @__PURE__ */
|
|
7965
|
+
topCategories.length > 0 && /* @__PURE__ */ React20.createElement("div", { className: "space-y-3 md:text-right" }, /* @__PURE__ */ React20.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, "Trending categories"), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap justify-start gap-2 md:justify-end" }, topCategories.map((category) => /* @__PURE__ */ React20.createElement(
|
|
7947
7966
|
"button",
|
|
7948
7967
|
{
|
|
7949
7968
|
key: category.id,
|
|
@@ -7953,9 +7972,9 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7953
7972
|
},
|
|
7954
7973
|
category.name
|
|
7955
7974
|
))))
|
|
7956
|
-
), /* @__PURE__ */
|
|
7975
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "mt-10 grid gap-4 md:grid-cols-3" }, insightCards.map((card, index) => {
|
|
7957
7976
|
const Icon = card.icon;
|
|
7958
|
-
return /* @__PURE__ */
|
|
7977
|
+
return /* @__PURE__ */ React20.createElement(
|
|
7959
7978
|
motion.div,
|
|
7960
7979
|
{
|
|
7961
7980
|
key: card.id,
|
|
@@ -7968,10 +7987,10 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7968
7987
|
"aria-pressed": card.id === "new" ? newArrivals ? "true" : "false" : void 0,
|
|
7969
7988
|
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
|
|
7970
7989
|
},
|
|
7971
|
-
/* @__PURE__ */
|
|
7972
|
-
/* @__PURE__ */
|
|
7990
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, card.label), /* @__PURE__ */ React20.createElement("p", { className: "mt-2 text-3xl font-semibold text-white" }, card.value)), /* @__PURE__ */ React20.createElement("span", { className: "rounded-full bg-white/20 p-3 text-white" }, /* @__PURE__ */ React20.createElement(Icon, { className: "h-5 w-5" }))),
|
|
7991
|
+
/* @__PURE__ */ React20.createElement("p", { className: "mt-3 text-sm text-white/70" }, card.helper)
|
|
7973
7992
|
);
|
|
7974
|
-
})))), /* @__PURE__ */
|
|
7993
|
+
})))), /* @__PURE__ */ React20.createElement("div", { className: "relative z-10 -mt-12 pb-16" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-8 lg:flex-row" }, /* @__PURE__ */ React20.createElement("aside", { className: "hidden w-72 flex-shrink-0 lg:block" }, /* @__PURE__ */ React20.createElement("div", { className: "sticky top-24 rounded-3xl border border-gray-100 bg-white p-6 shadow-xl shadow-gray-200/40" }, renderFiltersPanel())), /* @__PURE__ */ React20.createElement("main", { className: "flex-1 space-y-6" }, /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-gray-100 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("h2", { className: "text-2xl font-bold text-gray-900" }, "All products"), /* @__PURE__ */ React20.createElement("p", { className: "mt-1 text-sm text-gray-500" }, "Browse a pharmacy-grade catalogue with smart merchandising and modern UI.")), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-3 md:flex-row md:items-center" }, /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(ArrowUpDown, { className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" }), /* @__PURE__ */ React20.createElement(
|
|
7975
7994
|
"select",
|
|
7976
7995
|
{
|
|
7977
7996
|
value: sortOption,
|
|
@@ -7980,11 +7999,11 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7980
7999
|
},
|
|
7981
8000
|
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"
|
|
7982
8001
|
},
|
|
7983
|
-
/* @__PURE__ */
|
|
7984
|
-
/* @__PURE__ */
|
|
7985
|
-
/* @__PURE__ */
|
|
7986
|
-
/* @__PURE__ */
|
|
7987
|
-
), /* @__PURE__ */
|
|
8002
|
+
/* @__PURE__ */ React20.createElement("option", { value: "featured" }, "Featured products"),
|
|
8003
|
+
/* @__PURE__ */ React20.createElement("option", { value: "price-low-high" }, "Price: low to high"),
|
|
8004
|
+
/* @__PURE__ */ React20.createElement("option", { value: "price-high-low" }, "Price: high to low"),
|
|
8005
|
+
/* @__PURE__ */ React20.createElement("option", { value: "newest" }, "Newest arrivals")
|
|
8006
|
+
), /* @__PURE__ */ React20.createElement(ChevronDown, { className: "pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" })), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center rounded-xl border border-gray-200 bg-white shadow-sm" }, /* @__PURE__ */ React20.createElement(
|
|
7988
8007
|
"button",
|
|
7989
8008
|
{
|
|
7990
8009
|
type: "button",
|
|
@@ -7992,9 +8011,9 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7992
8011
|
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"}`,
|
|
7993
8012
|
"aria-pressed": viewMode === "grid"
|
|
7994
8013
|
},
|
|
7995
|
-
/* @__PURE__ */
|
|
8014
|
+
/* @__PURE__ */ React20.createElement(LayoutGrid, { className: "h-4 w-4" }),
|
|
7996
8015
|
"Grid"
|
|
7997
|
-
), /* @__PURE__ */
|
|
8016
|
+
), /* @__PURE__ */ React20.createElement(
|
|
7998
8017
|
"button",
|
|
7999
8018
|
{
|
|
8000
8019
|
type: "button",
|
|
@@ -8002,19 +8021,19 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8002
8021
|
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"}`,
|
|
8003
8022
|
"aria-pressed": viewMode === "list"
|
|
8004
8023
|
},
|
|
8005
|
-
/* @__PURE__ */
|
|
8024
|
+
/* @__PURE__ */ React20.createElement(LayoutList, { className: "h-4 w-4" }),
|
|
8006
8025
|
"List"
|
|
8007
|
-
)))), /* @__PURE__ */
|
|
8026
|
+
)))), /* @__PURE__ */ React20.createElement("div", { className: "mt-4 md:hidden" }, /* @__PURE__ */ React20.createElement(
|
|
8008
8027
|
Button,
|
|
8009
8028
|
{
|
|
8010
8029
|
variant: "outline",
|
|
8011
8030
|
className: "w-full",
|
|
8012
8031
|
onClick: () => setShowFilters(true)
|
|
8013
8032
|
},
|
|
8014
|
-
/* @__PURE__ */
|
|
8033
|
+
/* @__PURE__ */ React20.createElement(SlidersHorizontal, { className: "h-5 w-5" }),
|
|
8015
8034
|
"Filters",
|
|
8016
|
-
hasActiveFilters && /* @__PURE__ */
|
|
8017
|
-
)), hasActiveFilters && /* @__PURE__ */
|
|
8035
|
+
hasActiveFilters && /* @__PURE__ */ React20.createElement("span", { className: "ml-2 rounded-full bg-primary-600 px-2 py-0.5 text-xs font-semibold text-white" }, activeFilterChips.length)
|
|
8036
|
+
)), hasActiveFilters && /* @__PURE__ */ React20.createElement("div", { className: "mt-6 flex flex-wrap items-center gap-2 border-t border-gray-100 pt-4" }, activeFilterChips.map((chip) => /* @__PURE__ */ React20.createElement(
|
|
8018
8037
|
"button",
|
|
8019
8038
|
{
|
|
8020
8039
|
key: chip.key,
|
|
@@ -8023,8 +8042,8 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8023
8042
|
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"
|
|
8024
8043
|
},
|
|
8025
8044
|
chip.label,
|
|
8026
|
-
/* @__PURE__ */
|
|
8027
|
-
)), /* @__PURE__ */
|
|
8045
|
+
/* @__PURE__ */ React20.createElement(X, { className: "h-4 w-4 text-primary-500 group-hover:text-primary-700" })
|
|
8046
|
+
)), /* @__PURE__ */ React20.createElement(
|
|
8028
8047
|
"button",
|
|
8029
8048
|
{
|
|
8030
8049
|
type: "button",
|
|
@@ -8032,28 +8051,28 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8032
8051
|
className: "text-sm font-semibold text-gray-500 hover:text-gray-700"
|
|
8033
8052
|
},
|
|
8034
8053
|
"Reset all"
|
|
8035
|
-
))), /* @__PURE__ */
|
|
8054
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-gray-100 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-3 text-sm text-gray-600 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React20.createElement("span", null, isLoading ? "Loading products..." : `Showing ${displayedProducts.length} of ${pagination.total || displayedProducts.length} products`), /* @__PURE__ */ React20.createElement("span", { className: "inline-flex items-center gap-2 text-gray-400" }, /* @__PURE__ */ React20.createElement(Clock, { className: "h-4 w-4" }), "Updated a moment ago")), /* @__PURE__ */ React20.createElement("div", { className: "mt-6" }, isLoading ? /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-1 gap-6 sm:grid-cols-2 xl:grid-cols-3" }, Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ React20.createElement(ProductCardSkeleton, { key: index }))) : displayedProducts.length > 0 ? viewMode === "grid" ? /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-1 gap-6 sm:grid-cols-2 xl:grid-cols-3" }, displayedProducts.map((product) => /* @__PURE__ */ React20.createElement("div", { key: product.id, className: "h-full" }, /* @__PURE__ */ React20.createElement(
|
|
8036
8055
|
ProductCard,
|
|
8037
8056
|
{
|
|
8038
8057
|
product,
|
|
8039
8058
|
onClickProduct: (item) => {
|
|
8040
8059
|
const productData = encodeURIComponent(JSON.stringify(item));
|
|
8041
|
-
router.push(`/products/${item.id}?product=${productData}`);
|
|
8060
|
+
router.push(buildPath(`/products/${item.id}?product=${productData}`));
|
|
8042
8061
|
}
|
|
8043
8062
|
}
|
|
8044
|
-
)))) : /* @__PURE__ */
|
|
8063
|
+
)))) : /* @__PURE__ */ React20.createElement("div", { className: "space-y-4" }, displayedProducts.map((product) => {
|
|
8045
8064
|
product.priceBeforeDiscount && product.priceBeforeDiscount > product.finalPrice ? Math.round(
|
|
8046
8065
|
(product.priceBeforeDiscount - product.finalPrice) / product.priceBeforeDiscount * 100
|
|
8047
8066
|
) : 0;
|
|
8048
|
-
return /* @__PURE__ */
|
|
8067
|
+
return /* @__PURE__ */ React20.createElement(
|
|
8049
8068
|
motion.div,
|
|
8050
8069
|
{
|
|
8051
8070
|
key: product.id,
|
|
8052
8071
|
whileHover: { y: -4 },
|
|
8053
8072
|
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",
|
|
8054
|
-
onClick: () => router.push(`/products/${product.id}`)
|
|
8073
|
+
onClick: () => router.push(buildPath(`/products/${product.id}`))
|
|
8055
8074
|
},
|
|
8056
|
-
/* @__PURE__ */
|
|
8075
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative h-48 w-full overflow-hidden rounded-2xl bg-gray-100 md:h-40 md:w-40" }, /* @__PURE__ */ React20.createElement(
|
|
8057
8076
|
Image3,
|
|
8058
8077
|
{
|
|
8059
8078
|
src: product.productMedia[0]?.file || "/placeholder-product.jpg",
|
|
@@ -8062,27 +8081,27 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8062
8081
|
className: "object-cover transition duration-500 group-hover:scale-105"
|
|
8063
8082
|
}
|
|
8064
8083
|
)),
|
|
8065
|
-
/* @__PURE__ */
|
|
8084
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex-1 space-y-3" }, /* @__PURE__ */ React20.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__ */ React20.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__ */ React20.createElement(
|
|
8066
8085
|
"span",
|
|
8067
8086
|
{
|
|
8068
8087
|
key: tag,
|
|
8069
8088
|
className: "rounded-full bg-slate-100 px-3 py-1 text-gray-600"
|
|
8070
8089
|
},
|
|
8071
8090
|
tag
|
|
8072
|
-
))), /* @__PURE__ */
|
|
8073
|
-
/* @__PURE__ */
|
|
8091
|
+
))), /* @__PURE__ */ React20.createElement("h3", { className: "text-xl font-semibold text-gray-900" }, product.name), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap items-center gap-4 text-sm text-gray-500" }, /* @__PURE__ */ React20.createElement("span", { className: "inline-flex items-center gap-2 font-medium text-primary-600" }, /* @__PURE__ */ React20.createElement(ShieldCheck, { className: "h-4 w-4" }), product.inventoryCount > 0 ? "In stock & ready to ship" : "Restocking soon"), /* @__PURE__ */ React20.createElement("span", { className: "inline-flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(Clock, { className: "h-4 w-4 text-primary-500" }), "Added ", new Date(product.createdAt).toLocaleDateString()))),
|
|
8092
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex w-full flex-col items-end gap-3 md:w-auto" }, /* @__PURE__ */ React20.createElement("div", { className: "text-right" }, /* @__PURE__ */ React20.createElement("p", { className: "text-3xl font-semibold text-gray-900" }, formatPrice(product.finalPrice)), product.priceBeforeDiscount && /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-gray-400 line-through" }, formatPrice(product.priceBeforeDiscount))), /* @__PURE__ */ React20.createElement(
|
|
8074
8093
|
Button,
|
|
8075
8094
|
{
|
|
8076
8095
|
size: "sm",
|
|
8077
8096
|
onClick: (event) => {
|
|
8078
8097
|
event.stopPropagation();
|
|
8079
|
-
router.push(`/products/${product._id}`);
|
|
8098
|
+
router.push(buildPath(`/products/${product._id}`));
|
|
8080
8099
|
}
|
|
8081
8100
|
},
|
|
8082
8101
|
"View product"
|
|
8083
8102
|
))
|
|
8084
8103
|
);
|
|
8085
|
-
})) : /* @__PURE__ */
|
|
8104
|
+
})) : /* @__PURE__ */ React20.createElement(
|
|
8086
8105
|
EmptyState,
|
|
8087
8106
|
{
|
|
8088
8107
|
icon: Package,
|
|
@@ -8091,7 +8110,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8091
8110
|
actionLabel: hasActiveFilters ? "Clear filters" : void 0,
|
|
8092
8111
|
onAction: hasActiveFilters ? handleClearFilters : void 0
|
|
8093
8112
|
}
|
|
8094
|
-
)), pagination.totalPages > 1 && /* @__PURE__ */
|
|
8113
|
+
)), pagination.totalPages > 1 && /* @__PURE__ */ React20.createElement("div", { className: "mt-10 flex flex-wrap items-center justify-center gap-3" }, /* @__PURE__ */ React20.createElement(
|
|
8095
8114
|
Button,
|
|
8096
8115
|
{
|
|
8097
8116
|
variant: "outline",
|
|
@@ -8099,7 +8118,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8099
8118
|
disabled: page === 1
|
|
8100
8119
|
},
|
|
8101
8120
|
"Previous"
|
|
8102
|
-
), /* @__PURE__ */
|
|
8121
|
+
), /* @__PURE__ */ React20.createElement("span", { className: "text-sm font-semibold text-gray-600" }, "Page ", page, " of ", pagination.totalPages), /* @__PURE__ */ React20.createElement(
|
|
8103
8122
|
Button,
|
|
8104
8123
|
{
|
|
8105
8124
|
variant: "outline",
|
|
@@ -8107,7 +8126,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8107
8126
|
disabled: page === pagination.totalPages
|
|
8108
8127
|
},
|
|
8109
8128
|
"Next"
|
|
8110
|
-
))))))), /* @__PURE__ */
|
|
8129
|
+
))))))), /* @__PURE__ */ React20.createElement(AnimatePresence, null, showFilters && /* @__PURE__ */ React20.createElement(
|
|
8111
8130
|
motion.div,
|
|
8112
8131
|
{
|
|
8113
8132
|
initial: { opacity: 0 },
|
|
@@ -8115,7 +8134,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8115
8134
|
exit: { opacity: 0 },
|
|
8116
8135
|
className: "fixed inset-0 z-50 bg-black/40 backdrop-blur-sm lg:hidden"
|
|
8117
8136
|
},
|
|
8118
|
-
/* @__PURE__ */
|
|
8137
|
+
/* @__PURE__ */ React20.createElement(
|
|
8119
8138
|
motion.div,
|
|
8120
8139
|
{
|
|
8121
8140
|
initial: { y: "100%" },
|
|
@@ -8124,14 +8143,14 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8124
8143
|
transition: { type: "spring", stiffness: 260, damping: 26 },
|
|
8125
8144
|
className: "absolute inset-x-0 bottom-0 max-h-[85vh] overflow-y-auto rounded-t-3xl bg-white p-6 shadow-2xl"
|
|
8126
8145
|
},
|
|
8127
|
-
/* @__PURE__ */
|
|
8146
|
+
/* @__PURE__ */ React20.createElement("div", { className: "mb-6 flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Filters"), /* @__PURE__ */ React20.createElement(
|
|
8128
8147
|
"button",
|
|
8129
8148
|
{
|
|
8130
8149
|
type: "button",
|
|
8131
8150
|
onClick: () => setShowFilters(false),
|
|
8132
8151
|
className: "rounded-full border border-gray-200 p-2 text-gray-500 hover:text-gray-700"
|
|
8133
8152
|
},
|
|
8134
|
-
/* @__PURE__ */
|
|
8153
|
+
/* @__PURE__ */ React20.createElement(X, { className: "h-4 w-4" })
|
|
8135
8154
|
)),
|
|
8136
8155
|
renderFiltersPanel()
|
|
8137
8156
|
)
|
|
@@ -8150,7 +8169,7 @@ function Badge({ children, variant = "primary", size = "md", className = "" }) {
|
|
|
8150
8169
|
sm: "px-2 py-1 text-xs",
|
|
8151
8170
|
md: "px-3 py-1 text-sm"
|
|
8152
8171
|
};
|
|
8153
|
-
return /* @__PURE__ */
|
|
8172
|
+
return /* @__PURE__ */ React20.createElement("span", { className: `inline-flex items-center font-medium rounded-full border ${variants[variant]} ${sizes[size]} ${className}` }, children);
|
|
8154
8173
|
}
|
|
8155
8174
|
var safeFormatDate = (date, format = "long") => {
|
|
8156
8175
|
if (!date) return "N/A";
|
|
@@ -8309,10 +8328,10 @@ function ProductDetailScreen({ productId }) {
|
|
|
8309
8328
|
}
|
|
8310
8329
|
};
|
|
8311
8330
|
if (isLoading) {
|
|
8312
|
-
return /* @__PURE__ */
|
|
8331
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React20.createElement("div", { className: "h-[520px] animate-pulse rounded-3xl bg-slate-200" }), /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-3 gap-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React20.createElement("div", { key: index, className: "h-32 animate-pulse rounded-2xl bg-slate-200" })))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-4 rounded-3xl bg-white p-6 shadow-sm" }, /* @__PURE__ */ React20.createElement("div", { className: "h-8 w-32 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React20.createElement("div", { className: "h-10 w-48 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React20.createElement("div", { className: "h-6 w-full animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React20.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" }), /* @__PURE__ */ React20.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" })))));
|
|
8313
8332
|
}
|
|
8314
8333
|
if (!product) {
|
|
8315
|
-
return /* @__PURE__ */
|
|
8334
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl bg-white p-10 text-center shadow-sm" }, /* @__PURE__ */ React20.createElement(Sparkles, { className: "mx-auto h-10 w-10 text-primary-500" }), /* @__PURE__ */ React20.createElement("h1", { className: "mt-6 text-2xl font-semibold text-gray-900" }, "Product not found"), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React20.createElement(Link8, { href: "/shop", className: "inline-block" }, /* @__PURE__ */ React20.createElement(Button, null, "Browse products"))))));
|
|
8316
8335
|
}
|
|
8317
8336
|
product.tags && product.tags.length > 0 ? product.tags.slice(0, 6) : ["Pharmacist approved", "Gentle on daily routines", "Backed by real customers"];
|
|
8318
8337
|
const highlightCards = [
|
|
@@ -8332,29 +8351,29 @@ function ProductDetailScreen({ productId }) {
|
|
|
8332
8351
|
description: "Average rating 4.8/5 with over 120 verified customer experiences."
|
|
8333
8352
|
}
|
|
8334
8353
|
];
|
|
8335
|
-
return /* @__PURE__ */
|
|
8354
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.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__ */ React20.createElement(
|
|
8336
8355
|
"div",
|
|
8337
8356
|
{
|
|
8338
8357
|
className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]",
|
|
8339
8358
|
"aria-hidden": "true"
|
|
8340
8359
|
}
|
|
8341
|
-
), /* @__PURE__ */
|
|
8360
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_bottom_right,_rgba(255,255,255,0.25),_transparent_55%)] opacity-70" }), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement(
|
|
8342
8361
|
Button,
|
|
8343
8362
|
{
|
|
8344
8363
|
variant: "ghost",
|
|
8345
8364
|
className: "text-white hover:bg-white/10",
|
|
8346
8365
|
onClick: () => router.push("/shop")
|
|
8347
8366
|
},
|
|
8348
|
-
/* @__PURE__ */
|
|
8367
|
+
/* @__PURE__ */ React20.createElement(ArrowLeft, { className: "h-5 w-5" }),
|
|
8349
8368
|
"Continue shopping"
|
|
8350
|
-
), /* @__PURE__ */
|
|
8369
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "hidden items-center gap-3 text-sm text-white/80 md:flex" }, /* @__PURE__ */ React20.createElement(Link8, { href: "/", className: "transition hover:text-white" }, "Home"), /* @__PURE__ */ React20.createElement(ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React20.createElement(Link8, { href: "/shop", className: "transition hover:text-white" }, "Shop"), /* @__PURE__ */ React20.createElement(ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React20.createElement("span", { className: "truncate font-medium text-white" }, product.name))), /* @__PURE__ */ React20.createElement(
|
|
8351
8370
|
motion.div,
|
|
8352
8371
|
{
|
|
8353
8372
|
initial: { opacity: 0, y: 24 },
|
|
8354
8373
|
animate: { opacity: 1, y: 0 },
|
|
8355
8374
|
className: "max-w-3xl space-y-4"
|
|
8356
8375
|
},
|
|
8357
|
-
product.category && /* @__PURE__ */
|
|
8376
|
+
product.category && /* @__PURE__ */ React20.createElement(
|
|
8358
8377
|
Badge,
|
|
8359
8378
|
{
|
|
8360
8379
|
variant: "secondary",
|
|
@@ -8362,9 +8381,9 @@ function ProductDetailScreen({ productId }) {
|
|
|
8362
8381
|
},
|
|
8363
8382
|
product.category
|
|
8364
8383
|
),
|
|
8365
|
-
/* @__PURE__ */
|
|
8366
|
-
/* @__PURE__ */
|
|
8367
|
-
)))), /* @__PURE__ */
|
|
8384
|
+
/* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-5xl" }, product.name),
|
|
8385
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap items-center gap-3 text-sm text-white/80" }, /* @__PURE__ */ React20.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 font-medium text-white" }, /* @__PURE__ */ React20.createElement(Sparkles, { className: "h-4 w-4" }), "Ready to ship today"), /* @__PURE__ */ React20.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 font-medium text-white" }, /* @__PURE__ */ React20.createElement(Shield, { className: "h-4 w-4" }), "30-day happiness guarantee"))
|
|
8386
|
+
)))), /* @__PURE__ */ React20.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React20.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-10" }, /* @__PURE__ */ React20.createElement("section", { className: "rounded-3xl border border-white bg-white/70 p-6 shadow-xl shadow-primary-100/40 backdrop-blur" }, /* @__PURE__ */ React20.createElement("div", { className: "grid gap-6 lg:grid-cols-[minmax(0,1fr)_220px]" }, /* @__PURE__ */ React20.createElement(
|
|
8368
8387
|
motion.div,
|
|
8369
8388
|
{
|
|
8370
8389
|
key: variantImages[activeImageIndex],
|
|
@@ -8373,7 +8392,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8373
8392
|
transition: { duration: 0.35 },
|
|
8374
8393
|
className: "relative overflow-hidden rounded-3xl bg-slate-100 h-[420px] md:h-[560px]"
|
|
8375
8394
|
},
|
|
8376
|
-
/* @__PURE__ */
|
|
8395
|
+
/* @__PURE__ */ React20.createElement(
|
|
8377
8396
|
Image3,
|
|
8378
8397
|
{
|
|
8379
8398
|
src: variantImages[activeImageIndex],
|
|
@@ -8384,7 +8403,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8384
8403
|
className: "object-contain"
|
|
8385
8404
|
}
|
|
8386
8405
|
),
|
|
8387
|
-
discount > 0 && /* @__PURE__ */
|
|
8406
|
+
discount > 0 && /* @__PURE__ */ React20.createElement(
|
|
8388
8407
|
Badge,
|
|
8389
8408
|
{
|
|
8390
8409
|
variant: "danger",
|
|
@@ -8394,7 +8413,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8394
8413
|
discount,
|
|
8395
8414
|
"%"
|
|
8396
8415
|
),
|
|
8397
|
-
!variantInStock && /* @__PURE__ */
|
|
8416
|
+
!variantInStock && /* @__PURE__ */ React20.createElement(
|
|
8398
8417
|
Badge,
|
|
8399
8418
|
{
|
|
8400
8419
|
variant: "secondary",
|
|
@@ -8402,7 +8421,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8402
8421
|
},
|
|
8403
8422
|
"Out of Stock"
|
|
8404
8423
|
)
|
|
8405
|
-
), /* @__PURE__ */
|
|
8424
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-4" }, product?.productVariants?.length > 0 && /* @__PURE__ */ React20.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-4 shadow-sm" }, /* @__PURE__ */ React20.createElement("p", { className: "mb-2 text-sm font-semibold uppercase tracking-[0.25em] text-slate-400" }, "Variant"), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap gap-2" }, product?.productVariants?.map((variant, index) => /* @__PURE__ */ React20.createElement(
|
|
8406
8425
|
"button",
|
|
8407
8426
|
{
|
|
8408
8427
|
key: variant.id,
|
|
@@ -8411,7 +8430,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8411
8430
|
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"}`
|
|
8412
8431
|
},
|
|
8413
8432
|
variant.name
|
|
8414
|
-
)))), /* @__PURE__ */
|
|
8433
|
+
)))), /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-3 gap-3" }, variantImages.map((image, index) => /* @__PURE__ */ React20.createElement(
|
|
8415
8434
|
"button",
|
|
8416
8435
|
{
|
|
8417
8436
|
key: image.src + index,
|
|
@@ -8419,7 +8438,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8419
8438
|
onClick: () => setActiveImageIndex(index),
|
|
8420
8439
|
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"}`
|
|
8421
8440
|
},
|
|
8422
|
-
/* @__PURE__ */
|
|
8441
|
+
/* @__PURE__ */ React20.createElement(
|
|
8423
8442
|
Image3,
|
|
8424
8443
|
{
|
|
8425
8444
|
src: image.src,
|
|
@@ -8430,18 +8449,18 @@ function ProductDetailScreen({ productId }) {
|
|
|
8430
8449
|
unoptimized: true
|
|
8431
8450
|
}
|
|
8432
8451
|
)
|
|
8433
|
-
)))))), /* @__PURE__ */
|
|
8452
|
+
)))))), /* @__PURE__ */ React20.createElement("section", { className: "grid gap-6 lg:grid-cols-3" }, highlightCards.map((card) => {
|
|
8434
8453
|
const Icon = card.icon;
|
|
8435
|
-
return /* @__PURE__ */
|
|
8454
|
+
return /* @__PURE__ */ React20.createElement(
|
|
8436
8455
|
"div",
|
|
8437
8456
|
{
|
|
8438
8457
|
key: card.title,
|
|
8439
8458
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-lg"
|
|
8440
8459
|
},
|
|
8441
|
-
/* @__PURE__ */
|
|
8442
|
-
/* @__PURE__ */
|
|
8460
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement("span", { className: "rounded-2xl bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React20.createElement(Icon, { className: "h-5 w-5" })), /* @__PURE__ */ React20.createElement("h3", { className: "text-base font-semibold text-slate-900" }, card.title)),
|
|
8461
|
+
/* @__PURE__ */ React20.createElement("p", { className: "mt-3 text-sm leading-relaxed text-slate-600" }, card.description)
|
|
8443
8462
|
);
|
|
8444
|
-
})), /* @__PURE__ */
|
|
8463
|
+
})), /* @__PURE__ */ React20.createElement("section", { className: "grid gap-6 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-sm" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap items-center gap-4 pb-6" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-1 text-amber-500" }, Array.from({ length: 5 }).map((_, index) => /* @__PURE__ */ React20.createElement(Star, { key: index, className: "h-4 w-4 fill-current" }))), /* @__PURE__ */ React20.createElement("span", { className: "text-sm font-medium text-slate-500" }, "Rated 4.8 \u2022 Patients love the results")), /* @__PURE__ */ React20.createElement("div", { className: "space-y-8" }, product.description && /* @__PURE__ */ React20.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, "Description"), /* @__PURE__ */ React20.createElement("p", { className: "text-base leading-relaxed text-slate-600", dangerouslySetInnerHTML: { __html: product.description } })))), /* @__PURE__ */ React20.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__ */ React20.createElement("h3", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-primary-500" }, "Care tips"), /* @__PURE__ */ React20.createElement("div", { className: "mt-4 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement("p", { className: "leading-relaxed" }, "Store in a cool, dry place away from direct sunlight. Check packaging for allergen statements."), /* @__PURE__ */ React20.createElement("p", { className: "leading-relaxed" }, "Consult with your local pharmacist if you are combining with other treatments or have chronic conditions."), /* @__PURE__ */ React20.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__ */ React20.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-sm" }, /* @__PURE__ */ React20.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Product insights"), /* @__PURE__ */ React20.createElement("div", { className: "mt-6 grid gap-6 md:grid-cols-2" }, /* @__PURE__ */ React20.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/60 p-5" }, /* @__PURE__ */ React20.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-500" }, "Availability"), /* @__PURE__ */ React20.createElement("div", { className: "mt-3 flex items-center gap-2 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement(Check, { className: "h-4 w-4 text-primary-500" }), product.inStock ? "Available for dispatch today" : "Currently restocking"), product.stock !== void 0 && /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/60 p-5" }, /* @__PURE__ */ React20.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-500" }, "Product details"), /* @__PURE__ */ React20.createElement("div", { className: "mt-3 space-y-2 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement("p", null, /* @__PURE__ */ React20.createElement("span", { className: "font-medium text-slate-700" }, "Variant:"), " ", currentVariant.name), /* @__PURE__ */ React20.createElement("p", null, /* @__PURE__ */ React20.createElement("span", { className: "font-medium text-slate-700" }, "SKU:"), " ", variantSku), /* @__PURE__ */ React20.createElement("p", null, /* @__PURE__ */ React20.createElement("span", { className: "font-medium text-slate-700" }, "Status:"), " ", /* @__PURE__ */ React20.createElement("span", { className: variantInStock ? "text-green-600" : "text-amber-600" }, variantInStock ? "In Stock" : "Out of Stock")), /* @__PURE__ */ React20.createElement("p", null, /* @__PURE__ */ React20.createElement("span", { className: "font-medium text-slate-700" }, "Last updated:"), " ", lastUpdatedLabel), /* @__PURE__ */ React20.createElement("p", null, /* @__PURE__ */ React20.createElement("span", { className: "font-medium text-slate-700" }, "Ships from:"), " Local pharmacy distribution center")))))), /* @__PURE__ */ React20.createElement("aside", { className: "space-y-6 lg:sticky lg:top-24" }, /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-100/40" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-baseline gap-3" }, /* @__PURE__ */ React20.createElement("p", { className: "text-3xl font-bold text-slate-900" }, selectedVariant ? formatPrice(selectedVariant.finalPrice) : formatPrice(product.price)), variantComparePrice && variantComparePrice > variantPrice && /* @__PURE__ */ React20.createElement("p", { className: "text-base text-slate-400 line-through" }, formatPrice(variantComparePrice)), discount > 0 && /* @__PURE__ */ React20.createElement(Badge, { variant: "danger", size: "sm" }, "-", discount, "%")), /* @__PURE__ */ React20.createElement("div", { className: "mt-6 space-y-4" }, /* @__PURE__ */ React20.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__ */ React20.createElement(ShieldCheck, { className: "h-4 w-4" }), "Pharmacist verified product"), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between rounded-2xl border border-slate-200 px-4 py-3" }, /* @__PURE__ */ React20.createElement("span", { className: "text-sm font-medium text-slate-600" }, "Qty"), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center rounded-full border border-slate-200 bg-slate-50" }, /* @__PURE__ */ React20.createElement(
|
|
8445
8464
|
"button",
|
|
8446
8465
|
{
|
|
8447
8466
|
type: "button",
|
|
@@ -8449,8 +8468,8 @@ function ProductDetailScreen({ productId }) {
|
|
|
8449
8468
|
className: "rounded-l-full p-2 hover:bg-primary-100/60",
|
|
8450
8469
|
"aria-label": "Decrease quantity"
|
|
8451
8470
|
},
|
|
8452
|
-
/* @__PURE__ */
|
|
8453
|
-
), /* @__PURE__ */
|
|
8471
|
+
/* @__PURE__ */ React20.createElement(Minus, { className: "h-4 w-4" })
|
|
8472
|
+
), /* @__PURE__ */ React20.createElement("span", { className: "w-12 text-center text-sm font-semibold text-slate-700" }, quantity), /* @__PURE__ */ React20.createElement(
|
|
8454
8473
|
"button",
|
|
8455
8474
|
{
|
|
8456
8475
|
type: "button",
|
|
@@ -8458,8 +8477,8 @@ function ProductDetailScreen({ productId }) {
|
|
|
8458
8477
|
className: "rounded-r-full p-2 hover:bg-primary-100/60",
|
|
8459
8478
|
"aria-label": "Increase quantity"
|
|
8460
8479
|
},
|
|
8461
|
-
/* @__PURE__ */
|
|
8462
|
-
)))), selectedVariant && /* @__PURE__ */
|
|
8480
|
+
/* @__PURE__ */ React20.createElement(Plus, { className: "h-4 w-4" })
|
|
8481
|
+
)))), selectedVariant && /* @__PURE__ */ React20.createElement("div", { className: "mt-4 text-sm" }, selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ || selectedVariant.inventoryStatus === "LOW_STOCK" /* LOWSTOCK */ ? /* @__PURE__ */ React20.createElement("div", { className: "text-red-600 font-medium" }, "Out of Stock") : /* @__PURE__ */ React20.createElement("div", { className: "text-green-600 font-medium" }, "In Stock")), /* @__PURE__ */ React20.createElement("div", { className: "mt-6 space-x-3" }, /* @__PURE__ */ React20.createElement(
|
|
8463
8482
|
Button,
|
|
8464
8483
|
{
|
|
8465
8484
|
size: "lg",
|
|
@@ -8468,9 +8487,9 @@ function ProductDetailScreen({ productId }) {
|
|
|
8468
8487
|
isLoading: isAddingToCart,
|
|
8469
8488
|
disabled: !selectedVariant || selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */
|
|
8470
8489
|
},
|
|
8471
|
-
/* @__PURE__ */
|
|
8490
|
+
/* @__PURE__ */ React20.createElement(ShoppingCart, { className: "h-5 w-5" }),
|
|
8472
8491
|
!selectedVariant ? "Select a variant" : selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ ? "Out of Stock" : `Add to Cart`
|
|
8473
|
-
), /* @__PURE__ */
|
|
8492
|
+
), /* @__PURE__ */ React20.createElement(
|
|
8474
8493
|
Button,
|
|
8475
8494
|
{
|
|
8476
8495
|
size: "lg",
|
|
@@ -8478,14 +8497,14 @@ function ProductDetailScreen({ productId }) {
|
|
|
8478
8497
|
className: "w-full",
|
|
8479
8498
|
onClick: handleToggleFavorite
|
|
8480
8499
|
},
|
|
8481
|
-
/* @__PURE__ */
|
|
8500
|
+
/* @__PURE__ */ React20.createElement(
|
|
8482
8501
|
Heart,
|
|
8483
8502
|
{
|
|
8484
8503
|
className: `h-5 w-5 ${isFavorited ? "fill-red-500 text-red-500" : "text-slate-500"}`
|
|
8485
8504
|
}
|
|
8486
8505
|
),
|
|
8487
8506
|
isFavorited ? "Saved" : "Save for later"
|
|
8488
|
-
))), /* @__PURE__ */
|
|
8507
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold uppercase tracking-[0.25em]" }, "Need advice?"), /* @__PURE__ */ React20.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__ */ React20.createElement("section", { className: "mt-20" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "You may also like"), /* @__PURE__ */ React20.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Hand-picked recommendations that pair nicely with this product.")), /* @__PURE__ */ React20.createElement(Link8, { href: "/shop", className: "hidden md:inline-flex" }, /* @__PURE__ */ React20.createElement(Button, { variant: "ghost", className: "text-primary-600" }, "View all products"))), /* @__PURE__ */ React20.createElement("div", { className: "mt-6 grid gap-6 sm:grid-cols-2 lg:grid-cols-4" }, relatedProducts?.map((relatedProduct) => /* @__PURE__ */ React20.createElement(ProductCard, { key: relatedProduct.id, product: relatedProduct })))))));
|
|
8489
8508
|
}
|
|
8490
8509
|
function CartItem({ item }) {
|
|
8491
8510
|
const { updateQuantity, removeFromCart } = useCart();
|
|
@@ -8503,7 +8522,7 @@ function CartItem({ item }) {
|
|
|
8503
8522
|
await removeFromCart(item.productVariantId);
|
|
8504
8523
|
};
|
|
8505
8524
|
const itemTotal = item.productVariantData.finalPrice * item.quantity;
|
|
8506
|
-
return /* @__PURE__ */
|
|
8525
|
+
return /* @__PURE__ */ React20.createElement(
|
|
8507
8526
|
motion.div,
|
|
8508
8527
|
{
|
|
8509
8528
|
layout: true,
|
|
@@ -8512,7 +8531,7 @@ function CartItem({ item }) {
|
|
|
8512
8531
|
exit: { opacity: 0, x: -100 },
|
|
8513
8532
|
className: "flex gap-4 bg-white p-4 rounded-xl border border-gray-200 hover:border-primary-300 transition-colors"
|
|
8514
8533
|
},
|
|
8515
|
-
/* @__PURE__ */
|
|
8534
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative w-24 h-24 rounded-lg overflow-hidden flex-shrink-0 bg-gray-100" }, /* @__PURE__ */ React20.createElement(
|
|
8516
8535
|
Image3,
|
|
8517
8536
|
{
|
|
8518
8537
|
src: item.productVariantData.productMedia[0]?.file || "/placeholder-product.jpg",
|
|
@@ -8521,39 +8540,39 @@ function CartItem({ item }) {
|
|
|
8521
8540
|
className: "object-cover"
|
|
8522
8541
|
}
|
|
8523
8542
|
)),
|
|
8524
|
-
/* @__PURE__ */
|
|
8543
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-lg font-semibold text-gray-900 truncate" }, item.productVariantData.name), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-gray-500 mt-1" }, formatPrice(item.productVariantData.finalPrice), " each"), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3 mt-3" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center border-2 border-gray-200 rounded-lg" }, /* @__PURE__ */ React20.createElement(
|
|
8525
8544
|
"button",
|
|
8526
8545
|
{
|
|
8527
8546
|
onClick: () => handleUpdateQuantity(item.quantity - 1),
|
|
8528
8547
|
disabled: isUpdating || item.quantity <= 0,
|
|
8529
8548
|
className: "p-2 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
|
|
8530
8549
|
},
|
|
8531
|
-
/* @__PURE__ */
|
|
8532
|
-
), /* @__PURE__ */
|
|
8550
|
+
/* @__PURE__ */ React20.createElement(Minus, { className: "w-4 h-4" })
|
|
8551
|
+
), /* @__PURE__ */ React20.createElement("span", { className: "px-4 font-medium min-w-[3rem] text-center" }, isUpdating ? /* @__PURE__ */ React20.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__ */ React20.createElement(
|
|
8533
8552
|
"button",
|
|
8534
8553
|
{
|
|
8535
8554
|
onClick: () => handleUpdateQuantity(item.quantity + 1),
|
|
8536
8555
|
disabled: isUpdating || item.quantity >= item.productVariantData.inventoryCount,
|
|
8537
8556
|
className: "p-2 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
|
|
8538
8557
|
},
|
|
8539
|
-
/* @__PURE__ */
|
|
8540
|
-
)), /* @__PURE__ */
|
|
8558
|
+
/* @__PURE__ */ React20.createElement(Plus, { className: "w-4 h-4" })
|
|
8559
|
+
)), /* @__PURE__ */ React20.createElement(
|
|
8541
8560
|
"button",
|
|
8542
8561
|
{
|
|
8543
8562
|
onClick: handleRemove,
|
|
8544
8563
|
className: "p-2 text-red-600 hover:bg-red-50 rounded-lg transition-colors",
|
|
8545
8564
|
"aria-label": "Remove item"
|
|
8546
8565
|
},
|
|
8547
|
-
/* @__PURE__ */
|
|
8566
|
+
/* @__PURE__ */ React20.createElement(Trash2, { className: "w-5 h-5" })
|
|
8548
8567
|
))),
|
|
8549
|
-
/* @__PURE__ */
|
|
8568
|
+
/* @__PURE__ */ React20.createElement("div", { className: "text-right" }, /* @__PURE__ */ React20.createElement("p", { className: "text-xl font-bold text-gray-900" }, formatPrice(itemTotal)))
|
|
8550
8569
|
);
|
|
8551
8570
|
}
|
|
8552
8571
|
function CartScreen() {
|
|
8553
8572
|
const router = useRouter();
|
|
8554
8573
|
const { cart, isLoading } = useCart();
|
|
8555
8574
|
if (!cart || cart.cartBody.items.length === 0) {
|
|
8556
|
-
return /* @__PURE__ */
|
|
8575
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-gradient-to-br from-primary-700 via-primary-600 to-secondary-600 flex items-center justify-center" }, /* @__PURE__ */ React20.createElement("div", { className: "mx-auto px-20 py-5 bg-white rounded-3xl" }, /* @__PURE__ */ React20.createElement(
|
|
8557
8576
|
EmptyState,
|
|
8558
8577
|
{
|
|
8559
8578
|
icon: ShoppingBag,
|
|
@@ -8568,16 +8587,16 @@ function CartScreen() {
|
|
|
8568
8587
|
const shipping = 0;
|
|
8569
8588
|
const tax = 0;
|
|
8570
8589
|
const total = subtotal + shipping + tax;
|
|
8571
|
-
return /* @__PURE__ */
|
|
8590
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4 py-16 mb-8" }, /* @__PURE__ */ React20.createElement(
|
|
8572
8591
|
motion.div,
|
|
8573
8592
|
{
|
|
8574
8593
|
initial: { opacity: 0, y: 24 },
|
|
8575
8594
|
animate: { opacity: 1, y: 0 },
|
|
8576
8595
|
className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between"
|
|
8577
8596
|
},
|
|
8578
|
-
/* @__PURE__ */
|
|
8579
|
-
/* @__PURE__ */
|
|
8580
|
-
))), /* @__PURE__ */
|
|
8597
|
+
/* @__PURE__ */ React20.createElement("div", { className: "max-w-2xl space-y-4" }, /* @__PURE__ */ React20.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__ */ React20.createElement(HeartPulse, { className: "h-4 w-4" }), "Wellness essentials, ready when you are"), /* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Your curated cart"), /* @__PURE__ */ React20.createElement("p", { className: "text-white/75 md:text-lg" }, "Review your selections, unlock exclusive perks, and check out with pharmacist-backed confidence.")),
|
|
8598
|
+
/* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur-md" }, /* @__PURE__ */ React20.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Cart summary"), /* @__PURE__ */ React20.createElement("p", { className: "mt-4 text-4xl font-semibold" }, formatPrice(total)), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-white/70" }, "Taxes and shipping calculated below"))
|
|
8599
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React20.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React20.createElement(
|
|
8581
8600
|
motion.section,
|
|
8582
8601
|
{
|
|
8583
8602
|
initial: { opacity: 0, y: 24 },
|
|
@@ -8585,10 +8604,10 @@ function CartScreen() {
|
|
|
8585
8604
|
transition: { delay: 0.05 },
|
|
8586
8605
|
className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
|
|
8587
8606
|
},
|
|
8588
|
-
/* @__PURE__ */
|
|
8589
|
-
isLoading && /* @__PURE__ */
|
|
8590
|
-
/* @__PURE__ */
|
|
8591
|
-
), /* @__PURE__ */
|
|
8607
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4" }, /* @__PURE__ */ React20.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Items (", cart.cartBody.items.length, ")"), /* @__PURE__ */ React20.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__ */ React20.createElement(ShieldCheck, { className: "h-4 w-4" }), "Guaranteed cold-chain handling")),
|
|
8608
|
+
isLoading && /* @__PURE__ */ React20.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__ */ React20.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"),
|
|
8609
|
+
/* @__PURE__ */ React20.createElement("div", { className: "space-y-5" }, cart.cartBody.items.map((item) => /* @__PURE__ */ React20.createElement(CartItem, { key: item.productVariantId, item })))
|
|
8610
|
+
), /* @__PURE__ */ React20.createElement(
|
|
8592
8611
|
motion.aside,
|
|
8593
8612
|
{
|
|
8594
8613
|
initial: { opacity: 0, y: 24 },
|
|
@@ -8596,7 +8615,7 @@ function CartScreen() {
|
|
|
8596
8615
|
transition: { delay: 0.1 },
|
|
8597
8616
|
className: "space-y-6 lg:sticky lg:top-28"
|
|
8598
8617
|
},
|
|
8599
|
-
/* @__PURE__ */
|
|
8618
|
+
/* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Checkout summary"), /* @__PURE__ */ React20.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__ */ React20.createElement(BadgePercent, { className: "h-4 w-4" }), "Savings applied")), /* @__PURE__ */ React20.createElement("div", { className: "mt-6 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("span", null, "Subtotal"), /* @__PURE__ */ React20.createElement("span", { className: "font-semibold text-slate-900" }, formatPrice(subtotal))), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("span", null, "Shipping"), /* @__PURE__ */ React20.createElement("span", { className: "font-semibold" }, "Will be calculated at checkout")), /* @__PURE__ */ React20.createElement("div", { className: "rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between text-base font-semibold text-slate-900" }, /* @__PURE__ */ React20.createElement("span", null, "Order total"), /* @__PURE__ */ React20.createElement("span", null, formatPrice(total))), /* @__PURE__ */ React20.createElement("p", { className: "mt-2 text-xs text-slate-500" }, "Prices include pharmacy-grade quality control and packaging."))), /* @__PURE__ */ React20.createElement(
|
|
8600
8619
|
Button,
|
|
8601
8620
|
{
|
|
8602
8621
|
size: "lg",
|
|
@@ -8604,8 +8623,8 @@ function CartScreen() {
|
|
|
8604
8623
|
onClick: () => router.push("/checkout")
|
|
8605
8624
|
},
|
|
8606
8625
|
"Secure checkout",
|
|
8607
|
-
/* @__PURE__ */
|
|
8608
|
-
), /* @__PURE__ */
|
|
8626
|
+
/* @__PURE__ */ React20.createElement(ArrowRight, { className: "h-5 w-5" })
|
|
8627
|
+
), /* @__PURE__ */ React20.createElement(
|
|
8609
8628
|
"button",
|
|
8610
8629
|
{
|
|
8611
8630
|
type: "button",
|
|
@@ -8614,7 +8633,7 @@ function CartScreen() {
|
|
|
8614
8633
|
},
|
|
8615
8634
|
"Continue shopping"
|
|
8616
8635
|
)),
|
|
8617
|
-
/* @__PURE__ */
|
|
8636
|
+
/* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Need help?"), /* @__PURE__ */ React20.createElement("p", { className: "mt-2 leading-relaxed" }, "Chat with a pharmacist to optimize your regimen or discuss substitutions before you check out."))
|
|
8618
8637
|
)))));
|
|
8619
8638
|
}
|
|
8620
8639
|
function useAddresses() {
|
|
@@ -8676,7 +8695,7 @@ function useAddresses() {
|
|
|
8676
8695
|
};
|
|
8677
8696
|
}
|
|
8678
8697
|
function Card({ className = "", ...props }) {
|
|
8679
|
-
return /* @__PURE__ */
|
|
8698
|
+
return /* @__PURE__ */ React20.createElement(
|
|
8680
8699
|
"div",
|
|
8681
8700
|
{
|
|
8682
8701
|
className: `rounded-lg border bg-white shadow-sm ${className}`,
|
|
@@ -8701,7 +8720,7 @@ function Modal({ isOpen, onClose, title, children, size = "md" }) {
|
|
|
8701
8720
|
lg: "max-w-2xl",
|
|
8702
8721
|
xl: "max-w-4xl"
|
|
8703
8722
|
};
|
|
8704
|
-
return /* @__PURE__ */
|
|
8723
|
+
return /* @__PURE__ */ React20.createElement(AnimatePresence, null, isOpen && /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement(
|
|
8705
8724
|
motion.div,
|
|
8706
8725
|
{
|
|
8707
8726
|
initial: { opacity: 0 },
|
|
@@ -8710,7 +8729,7 @@ function Modal({ isOpen, onClose, title, children, size = "md" }) {
|
|
|
8710
8729
|
onClick: onClose,
|
|
8711
8730
|
className: "fixed inset-0 bg-black/50 backdrop-blur-sm z-50"
|
|
8712
8731
|
}
|
|
8713
|
-
), /* @__PURE__ */
|
|
8732
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4" }, /* @__PURE__ */ React20.createElement(
|
|
8714
8733
|
motion.div,
|
|
8715
8734
|
{
|
|
8716
8735
|
initial: { opacity: 0, scale: 0.95, y: 20 },
|
|
@@ -8718,15 +8737,15 @@ function Modal({ isOpen, onClose, title, children, size = "md" }) {
|
|
|
8718
8737
|
exit: { opacity: 0, scale: 0.95, y: 20 },
|
|
8719
8738
|
className: `bg-white rounded-2xl shadow-2xl w-full ${sizes[size]} max-h-[90vh] overflow-hidden flex flex-col`
|
|
8720
8739
|
},
|
|
8721
|
-
title && /* @__PURE__ */
|
|
8740
|
+
title && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between p-6 border-b border-gray-200" }, /* @__PURE__ */ React20.createElement("h2", { className: "text-2xl font-bold text-gray-900" }, title), /* @__PURE__ */ React20.createElement(
|
|
8722
8741
|
"button",
|
|
8723
8742
|
{
|
|
8724
8743
|
onClick: onClose,
|
|
8725
8744
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors"
|
|
8726
8745
|
},
|
|
8727
|
-
/* @__PURE__ */
|
|
8746
|
+
/* @__PURE__ */ React20.createElement(X, { className: "w-5 h-5" })
|
|
8728
8747
|
)),
|
|
8729
|
-
/* @__PURE__ */
|
|
8748
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex-1 overflow-y-auto p-6" }, children)
|
|
8730
8749
|
))));
|
|
8731
8750
|
}
|
|
8732
8751
|
var addressSchema = z.object({
|
|
@@ -8897,7 +8916,7 @@ var PAYMENT_METHODS = [
|
|
|
8897
8916
|
{
|
|
8898
8917
|
label: "Card",
|
|
8899
8918
|
value: "Card",
|
|
8900
|
-
icon: /* @__PURE__ */
|
|
8919
|
+
icon: /* @__PURE__ */ React20.createElement(CreditCard, { className: "w-5 h-5" }),
|
|
8901
8920
|
description: "Pay securely with your credit or debit card",
|
|
8902
8921
|
className: "border-blue-500 hover:bg-blue-50",
|
|
8903
8922
|
activeClass: "bg-blue-50 border-blue-500 text-blue-700"
|
|
@@ -8905,7 +8924,7 @@ var PAYMENT_METHODS = [
|
|
|
8905
8924
|
{
|
|
8906
8925
|
label: "Cash",
|
|
8907
8926
|
value: "Cash",
|
|
8908
|
-
icon: /* @__PURE__ */
|
|
8927
|
+
icon: /* @__PURE__ */ React20.createElement(PackageCheck, { className: "w-5 h-5" }),
|
|
8909
8928
|
description: "Pay with cash on delivery or at pickup",
|
|
8910
8929
|
className: "border-amber-500 hover:bg-amber-50",
|
|
8911
8930
|
activeClass: "bg-amber-50 border-amber-500 text-amber-700"
|
|
@@ -8913,7 +8932,7 @@ var PAYMENT_METHODS = [
|
|
|
8913
8932
|
{
|
|
8914
8933
|
label: "Credit",
|
|
8915
8934
|
value: "Credit",
|
|
8916
|
-
icon: /* @__PURE__ */
|
|
8935
|
+
icon: /* @__PURE__ */ React20.createElement(ShieldCheck, { className: "w-5 h-5" }),
|
|
8917
8936
|
description: "Use your account credit",
|
|
8918
8937
|
className: "border-emerald-500 hover:bg-emerald-50",
|
|
8919
8938
|
activeClass: "bg-emerald-50 border-emerald-500 text-emerald-700"
|
|
@@ -9116,7 +9135,7 @@ function CheckoutScreen() {
|
|
|
9116
9135
|
}
|
|
9117
9136
|
}
|
|
9118
9137
|
setIsSubmitting(true);
|
|
9119
|
-
toast("Submitting order...", { icon: /* @__PURE__ */
|
|
9138
|
+
toast("Submitting order...", { icon: /* @__PURE__ */ React20.createElement(CreditCard, { className: "h-4 w-4" }) });
|
|
9120
9139
|
try {
|
|
9121
9140
|
const items = (cart?.cartBody?.items || []).map((item) => ({
|
|
9122
9141
|
productVariantId: String(item.productVariantId),
|
|
@@ -9181,33 +9200,33 @@ function CheckoutScreen() {
|
|
|
9181
9200
|
const subtotal = cart.total;
|
|
9182
9201
|
const tax = 0;
|
|
9183
9202
|
const total = subtotal + shippingPrice + tax;
|
|
9184
|
-
return /* @__PURE__ */
|
|
9203
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React20.createElement(
|
|
9185
9204
|
motion.div,
|
|
9186
9205
|
{
|
|
9187
9206
|
initial: { opacity: 0, y: 24 },
|
|
9188
9207
|
animate: { opacity: 1, y: 0 },
|
|
9189
9208
|
className: "space-y-6"
|
|
9190
9209
|
},
|
|
9191
|
-
/* @__PURE__ */
|
|
9192
|
-
/* @__PURE__ */
|
|
9193
|
-
/* @__PURE__ */
|
|
9194
|
-
/* @__PURE__ */
|
|
9210
|
+
/* @__PURE__ */ React20.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__ */ React20.createElement(ShieldCheck, { className: "h-4 w-4" }), "Secure checkout"),
|
|
9211
|
+
/* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Provide delivery details"),
|
|
9212
|
+
/* @__PURE__ */ React20.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."),
|
|
9213
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap gap-3" }, checkoutSteps.map((step) => /* @__PURE__ */ React20.createElement(
|
|
9195
9214
|
"div",
|
|
9196
9215
|
{
|
|
9197
9216
|
key: step.id,
|
|
9198
9217
|
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"}`
|
|
9199
9218
|
},
|
|
9200
|
-
/* @__PURE__ */
|
|
9219
|
+
/* @__PURE__ */ React20.createElement("span", { className: "flex h-7 w-7 items-center justify-center rounded-full bg-white/20 text-xs font-bold" }, step.id),
|
|
9201
9220
|
step.label
|
|
9202
9221
|
)))
|
|
9203
|
-
)))), /* @__PURE__ */
|
|
9222
|
+
)))), /* @__PURE__ */ React20.createElement("form", { onSubmit: handleSubmit(onSubmit) }, error && /* @__PURE__ */ React20.createElement("div", { className: "mb-4 text-red-600 font-semibold" }, error), /* @__PURE__ */ React20.createElement("div", { className: "pt-12 container mx-auto grid gap-10 px-4 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React20.createElement(
|
|
9204
9223
|
motion.div,
|
|
9205
9224
|
{
|
|
9206
9225
|
initial: { opacity: 0, y: 24 },
|
|
9207
9226
|
animate: { opacity: 1, y: 0 },
|
|
9208
9227
|
className: "space-y-8"
|
|
9209
9228
|
},
|
|
9210
|
-
/* @__PURE__ */
|
|
9229
|
+
/* @__PURE__ */ React20.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Shipping information"), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-500" }, "We use temperature-aware packaging and real-time tracking on every shipment.")), /* @__PURE__ */ React20.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__ */ React20.createElement(Truck, { className: "h-4 w-4" }), "Dispatch in 12h")), /* @__PURE__ */ React20.createElement("div", { className: "mt-6 grid grid-cols-1 gap-4 md:grid-cols-2" }, isDelivery && /* @__PURE__ */ React20.createElement("div", { className: "md:col-span-2 space-y-4" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("label", { className: "block font-semibold" }, "Select Address"), /* @__PURE__ */ React20.createElement(
|
|
9211
9230
|
Button,
|
|
9212
9231
|
{
|
|
9213
9232
|
type: "button",
|
|
@@ -9218,15 +9237,15 @@ function CheckoutScreen() {
|
|
|
9218
9237
|
setIsAddressModalOpen(true);
|
|
9219
9238
|
}
|
|
9220
9239
|
},
|
|
9221
|
-
/* @__PURE__ */
|
|
9240
|
+
/* @__PURE__ */ React20.createElement(Plus, { className: "h-4 w-4 mr-2" }),
|
|
9222
9241
|
"Add New Address"
|
|
9223
|
-
)), userAddresses.length > 0 ? /* @__PURE__ */
|
|
9242
|
+
)), userAddresses.length > 0 ? /* @__PURE__ */ React20.createElement("div", { className: "grid gap-4" }, userAddresses.map((addr) => /* @__PURE__ */ React20.createElement(
|
|
9224
9243
|
"label",
|
|
9225
9244
|
{
|
|
9226
9245
|
key: addr.id,
|
|
9227
9246
|
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`
|
|
9228
9247
|
},
|
|
9229
|
-
/* @__PURE__ */
|
|
9248
|
+
/* @__PURE__ */ React20.createElement(
|
|
9230
9249
|
"input",
|
|
9231
9250
|
{
|
|
9232
9251
|
type: "radio",
|
|
@@ -9247,7 +9266,7 @@ function CheckoutScreen() {
|
|
|
9247
9266
|
className: "mt-1"
|
|
9248
9267
|
}
|
|
9249
9268
|
),
|
|
9250
|
-
/* @__PURE__ */
|
|
9269
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold text-slate-900" }, addr.name), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-600" }, addr.street1), addr.street2 && /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-600" }, addr.street2), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-600" }, addr.city, ", ", addr.state, " ", addr.zip), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-600" }, addr.country), addr.phone && /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-600 mt-1" }, addr.phone), /* @__PURE__ */ React20.createElement("div", { className: "mt-3 flex items-center gap-2" }, addr.isDefault && /* @__PURE__ */ React20.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__ */ React20.createElement(
|
|
9251
9270
|
"button",
|
|
9252
9271
|
{
|
|
9253
9272
|
type: "button",
|
|
@@ -9258,9 +9277,9 @@ function CheckoutScreen() {
|
|
|
9258
9277
|
},
|
|
9259
9278
|
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"
|
|
9260
9279
|
},
|
|
9261
|
-
/* @__PURE__ */
|
|
9280
|
+
/* @__PURE__ */ React20.createElement(Edit3, { className: "h-3.5 w-3.5" }),
|
|
9262
9281
|
" Edit"
|
|
9263
|
-
), /* @__PURE__ */
|
|
9282
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9264
9283
|
"button",
|
|
9265
9284
|
{
|
|
9266
9285
|
type: "button",
|
|
@@ -9278,23 +9297,23 @@ function CheckoutScreen() {
|
|
|
9278
9297
|
},
|
|
9279
9298
|
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"
|
|
9280
9299
|
},
|
|
9281
|
-
/* @__PURE__ */
|
|
9300
|
+
/* @__PURE__ */ React20.createElement(Trash2, { className: "h-3.5 w-3.5" }),
|
|
9282
9301
|
" Delete"
|
|
9283
9302
|
)))
|
|
9284
|
-
))) : /* @__PURE__ */
|
|
9303
|
+
))) : /* @__PURE__ */ React20.createElement("div", { className: "text-center py-8 bg-slate-50 rounded-lg" }, /* @__PURE__ */ React20.createElement(MapPin, { className: "h-12 w-12 mx-auto text-slate-400" }), /* @__PURE__ */ React20.createElement("p", { className: "mt-2 text-slate-600" }, "No addresses found"), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-500" }, "Add a new address to continue"))), !isDelivery && storeAddresses.length > 0 && /* @__PURE__ */ React20.createElement("div", { className: "md:col-span-2" }, /* @__PURE__ */ React20.createElement("label", { className: "block mb-2 font-semibold" }, "Select Pickup Location"), /* @__PURE__ */ React20.createElement(
|
|
9285
9304
|
"select",
|
|
9286
9305
|
{
|
|
9287
9306
|
className: "w-full border rounded p-2",
|
|
9288
9307
|
value: selectedStoreAddressId || "",
|
|
9289
9308
|
onChange: (e) => setSelectedStoreAddressId(e.target.value)
|
|
9290
9309
|
},
|
|
9291
|
-
storeAddresses.map((addr) => /* @__PURE__ */
|
|
9310
|
+
storeAddresses.map((addr) => /* @__PURE__ */ React20.createElement("option", { key: addr.id, value: addr.id }, addr.name, " - ", addr.street1, ", ", addr.city))
|
|
9292
9311
|
)))),
|
|
9293
|
-
isDelivery && selectedAddressId && /* @__PURE__ */
|
|
9312
|
+
isDelivery && selectedAddressId && /* @__PURE__ */ React20.createElement(Card, { className: "p-6 border border-gray-200 rounded-xl shadow-sm" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3 text-xl font-semibold text-gray-900 pb-4 mb-6 border-b" }, /* @__PURE__ */ React20.createElement(Truck, { className: "text-accent w-6 h-6" }), /* @__PURE__ */ React20.createElement("span", null, "Shipping Options")), shippingRatesLoading ? /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-center py-12" }, /* @__PURE__ */ React20.createElement("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-accent" }), /* @__PURE__ */ React20.createElement("span", { className: "ml-3 text-gray-600" }, "Loading shipping options...")) : shippingRatesError ? /* @__PURE__ */ React20.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React20.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-red-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React20.createElement("svg", { className: "w-8 h-8 text-red-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React20.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__ */ React20.createElement("p", { className: "text-red-500 text-lg font-medium" }, "Error loading shipping options"), /* @__PURE__ */ React20.createElement("p", { className: "text-red-400 text-sm mt-1" }, shippingRatesError)) : shippingRates && shippingRates.length > 0 ? /* @__PURE__ */ React20.createElement("div", { className: "space-y-4" }, shippingRates.map((rate) => {
|
|
9294
9313
|
const isSelected = !!selectedShippingRateId && selectedShippingRateId === rate.objectId;
|
|
9295
9314
|
const isTest = rate.test;
|
|
9296
9315
|
const hasAttributes = rate.attributes && rate.attributes.length > 0;
|
|
9297
|
-
return /* @__PURE__ */
|
|
9316
|
+
return /* @__PURE__ */ React20.createElement(
|
|
9298
9317
|
"div",
|
|
9299
9318
|
{
|
|
9300
9319
|
key: rate.objectId,
|
|
@@ -9303,7 +9322,7 @@ function CheckoutScreen() {
|
|
|
9303
9322
|
onMouseLeave: () => setShippingPrice(parseFloat(rate.amountLocal)),
|
|
9304
9323
|
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"}`
|
|
9305
9324
|
},
|
|
9306
|
-
/* @__PURE__ */
|
|
9325
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-start justify-between" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-start gap-4 flex-1" }, /* @__PURE__ */ React20.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React20.createElement(
|
|
9307
9326
|
Image3,
|
|
9308
9327
|
{
|
|
9309
9328
|
src: rate.providerImage75 || "/placeholder-product.jpg",
|
|
@@ -9316,18 +9335,18 @@ function CheckoutScreen() {
|
|
|
9316
9335
|
width: 48,
|
|
9317
9336
|
height: 48
|
|
9318
9337
|
}
|
|
9319
|
-
)), /* @__PURE__ */
|
|
9338
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2 mb-2" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, rate.provider, " ", rate.servicelevel?.name), isTest && /* @__PURE__ */ React20.createElement("span", { className: "px-2 py-1 text-xs font-medium bg-orange-100 text-orange-800 rounded-full" }, "TEST")), hasAttributes && /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap gap-2 mb-3" }, rate.attributes.map((attr) => /* @__PURE__ */ React20.createElement(
|
|
9320
9339
|
"span",
|
|
9321
9340
|
{
|
|
9322
9341
|
key: attr,
|
|
9323
9342
|
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"}`
|
|
9324
9343
|
},
|
|
9325
9344
|
attr
|
|
9326
|
-
))), /* @__PURE__ */
|
|
9327
|
-
isSelected && /* @__PURE__ */
|
|
9345
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1 text-sm text-gray-600" }, rate.durationTerms && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React20.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" })), /* @__PURE__ */ React20.createElement("span", null, rate.durationTerms)), rate.estimatedDays && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React20.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__ */ React20.createElement("span", null, "Estimated ", rate.estimatedDays, " day", rate.estimatedDays !== 1 ? "s" : "")), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React20.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__ */ React20.createElement("span", null, "Carrier: ", rate.provider)), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React20.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__ */ React20.createElement("span", null, "Currency: ", rate.currency))))), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col items-end" }, /* @__PURE__ */ React20.createElement("div", { className: "text-2xl font-bold text-gray-900" }, formatPrice(parseFloat(rate.amount))), rate.amount !== rate.amountLocal && /* @__PURE__ */ React20.createElement("div", { className: "text-sm text-gray-500" }, rate.amountLocal, " ", rate.currencyLocal))),
|
|
9346
|
+
isSelected && /* @__PURE__ */ React20.createElement("div", { className: "absolute top-3 right-3" }, /* @__PURE__ */ React20.createElement("div", { className: "w-6 h-6 bg-primary-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React20.createElement(Check, { className: "w-4 h-4 text-white" })))
|
|
9328
9347
|
);
|
|
9329
|
-
})) : /* @__PURE__ */
|
|
9330
|
-
), /* @__PURE__ */
|
|
9348
|
+
})) : /* @__PURE__ */ React20.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React20.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-gray-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React20.createElement(Truck, { className: "w-8 h-8 text-gray-400" })), /* @__PURE__ */ React20.createElement("p", { className: "text-gray-500 text-lg font-medium" }, "No shipping options available"), /* @__PURE__ */ React20.createElement("p", { className: "text-gray-400 text-sm mt-1" }, "Please check the shipping address or try a different location.")))
|
|
9349
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9331
9350
|
motion.aside,
|
|
9332
9351
|
{
|
|
9333
9352
|
initial: { opacity: 0, y: 32 },
|
|
@@ -9335,22 +9354,22 @@ function CheckoutScreen() {
|
|
|
9335
9354
|
transition: { duration: 0.5, ease: "easeOut", delay: 0.1 },
|
|
9336
9355
|
className: "space-y-10 lg:sticky lg:top-24"
|
|
9337
9356
|
},
|
|
9338
|
-
/* @__PURE__ */
|
|
9357
|
+
/* @__PURE__ */ React20.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__ */ React20.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "Order Summary"), /* @__PURE__ */ React20.createElement("section", { className: "mt-6 space-y-4" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-xs font-semibold text-slate-700 uppercase tracking-wider" }, "Delivery Method"), /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-1 gap-3" }, [
|
|
9339
9358
|
{
|
|
9340
9359
|
label: "Delivery",
|
|
9341
|
-
icon: /* @__PURE__ */
|
|
9360
|
+
icon: /* @__PURE__ */ React20.createElement(Truck, { className: "w-5 h-5" }),
|
|
9342
9361
|
value: true,
|
|
9343
9362
|
desc: "Shipped to your address"
|
|
9344
9363
|
},
|
|
9345
9364
|
{
|
|
9346
9365
|
label: "Pickup",
|
|
9347
|
-
icon: /* @__PURE__ */
|
|
9366
|
+
icon: /* @__PURE__ */ React20.createElement(MapPin, { className: "w-5 h-5" }),
|
|
9348
9367
|
value: false,
|
|
9349
9368
|
desc: "Collect from pharmacy"
|
|
9350
9369
|
}
|
|
9351
9370
|
].map((option) => {
|
|
9352
9371
|
const active = isDelivery === option.value;
|
|
9353
|
-
return /* @__PURE__ */
|
|
9372
|
+
return /* @__PURE__ */ React20.createElement(
|
|
9354
9373
|
"button",
|
|
9355
9374
|
{
|
|
9356
9375
|
key: option.label,
|
|
@@ -9359,18 +9378,18 @@ function CheckoutScreen() {
|
|
|
9359
9378
|
"aria-pressed": active,
|
|
9360
9379
|
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"}`
|
|
9361
9380
|
},
|
|
9362
|
-
/* @__PURE__ */
|
|
9381
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement(
|
|
9363
9382
|
"div",
|
|
9364
9383
|
{
|
|
9365
9384
|
className: `p-2 rounded-lg ${active ? "bg-primary-100 text-primary-600" : "bg-slate-100 text-slate-600 group-hover:bg-slate-50"}`
|
|
9366
9385
|
},
|
|
9367
9386
|
option.icon
|
|
9368
|
-
), /* @__PURE__ */
|
|
9369
|
-
active && /* @__PURE__ */
|
|
9387
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "text-left" }, /* @__PURE__ */ React20.createElement("div", { className: "font-medium text-slate-900" }, option.label), /* @__PURE__ */ React20.createElement("p", { className: "text-xs text-slate-500" }, option.desc))),
|
|
9388
|
+
active && /* @__PURE__ */ React20.createElement("div", { className: "w-5 h-5 rounded-full bg-primary-500 flex items-center justify-center text-white shadow-sm" }, /* @__PURE__ */ React20.createElement(Check, { className: "w-3 h-3" }))
|
|
9370
9389
|
);
|
|
9371
|
-
}))), /* @__PURE__ */
|
|
9390
|
+
}))), /* @__PURE__ */ React20.createElement("section", { className: "mt-8 space-y-4" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-xs font-semibold text-slate-700 uppercase tracking-wider" }, "Payment Method"), /* @__PURE__ */ React20.createElement("div", { className: "space-y-3" }, PAYMENT_METHODS.map((pm) => {
|
|
9372
9391
|
const active = paymentMethod === pm.value;
|
|
9373
|
-
return /* @__PURE__ */
|
|
9392
|
+
return /* @__PURE__ */ React20.createElement(
|
|
9374
9393
|
"button",
|
|
9375
9394
|
{
|
|
9376
9395
|
key: pm.value,
|
|
@@ -9378,22 +9397,22 @@ function CheckoutScreen() {
|
|
|
9378
9397
|
onClick: () => setPaymentMethod(pm.value),
|
|
9379
9398
|
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`}`
|
|
9380
9399
|
},
|
|
9381
|
-
/* @__PURE__ */
|
|
9400
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement(
|
|
9382
9401
|
"div",
|
|
9383
9402
|
{
|
|
9384
9403
|
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"}`
|
|
9385
9404
|
},
|
|
9386
9405
|
pm.icon
|
|
9387
|
-
), /* @__PURE__ */
|
|
9388
|
-
active && /* @__PURE__ */
|
|
9406
|
+
), /* @__PURE__ */ React20.createElement("span", { className: "text-sm font-medium text-slate-900" }, pm.label)),
|
|
9407
|
+
active && /* @__PURE__ */ React20.createElement("div", { className: "w-4 h-4 rounded-full bg-primary-500 flex items-center justify-center text-white shadow-sm" }, /* @__PURE__ */ React20.createElement(Check, { className: "w-2.5 h-2.5" }))
|
|
9389
9408
|
);
|
|
9390
|
-
})), /* @__PURE__ */
|
|
9409
|
+
})), /* @__PURE__ */ React20.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__ */ React20.createElement("section", { className: "mt-8 pt-6 border-t border-slate-100" }, /* @__PURE__ */ React20.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__ */ React20.createElement(
|
|
9391
9410
|
"div",
|
|
9392
9411
|
{
|
|
9393
9412
|
key: item.productId,
|
|
9394
9413
|
className: "flex gap-4 rounded-2xl border border-slate-100 p-4 hover:bg-slate-50/50 transition"
|
|
9395
9414
|
},
|
|
9396
|
-
/* @__PURE__ */
|
|
9415
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-xl bg-slate-100 text-slate-400" }, /* @__PURE__ */ React20.createElement(
|
|
9397
9416
|
Image3,
|
|
9398
9417
|
{
|
|
9399
9418
|
src: item.productVariantData.productMedia?.[0]?.file || "/placeholder-product.jpg",
|
|
@@ -9403,9 +9422,9 @@ function CheckoutScreen() {
|
|
|
9403
9422
|
className: "object-contain"
|
|
9404
9423
|
}
|
|
9405
9424
|
)),
|
|
9406
|
-
/* @__PURE__ */
|
|
9407
|
-
/* @__PURE__ */
|
|
9408
|
-
))), /* @__PURE__ */
|
|
9425
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React20.createElement("p", { className: "text-sm font-semibold text-slate-900" }, item?.productVariantData?.name), /* @__PURE__ */ React20.createElement("p", { className: "text-xs text-slate-500" }, "Qty ", item.quantity)),
|
|
9426
|
+
/* @__PURE__ */ React20.createElement("p", { className: "text-sm font-semibold text-slate-900" }, formatPrice(item.productVariantData.finalPrice * item.quantity))
|
|
9427
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "mt-6 space-y-3 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("span", null, "Subtotal"), /* @__PURE__ */ React20.createElement("span", { className: "font-semibold text-slate-900" }, formatPrice(subtotal))), isDelivery && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("span", null, "Shipping"), /* @__PURE__ */ React20.createElement("span", { className: "font-semibold" }, formatPrice(shippingPrice))), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("span", null, "Estimated tax"), /* @__PURE__ */ React20.createElement("span", { className: "font-semibold" }, formatPrice(tax))), /* @__PURE__ */ React20.createElement("div", { className: "rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between text-base font-semibold text-slate-900" }, /* @__PURE__ */ React20.createElement("span", null, "Total Due"), /* @__PURE__ */ React20.createElement("span", null, formatPrice(total))), /* @__PURE__ */ React20.createElement("p", { className: "mt-1 text-xs text-slate-500" }, "Tax is estimated. Final amount confirmed after payment.")))), /* @__PURE__ */ React20.createElement(
|
|
9409
9428
|
Button,
|
|
9410
9429
|
{
|
|
9411
9430
|
type: "submit",
|
|
@@ -9413,11 +9432,11 @@ function CheckoutScreen() {
|
|
|
9413
9432
|
isLoading: isSubmitting,
|
|
9414
9433
|
className: "mt-6 w-full transition-transform hover:scale-[1.02] active:scale-[0.99]"
|
|
9415
9434
|
},
|
|
9416
|
-
/* @__PURE__ */
|
|
9435
|
+
/* @__PURE__ */ React20.createElement(CreditCard, { className: "h-5 w-5" }),
|
|
9417
9436
|
isSubmitting ? "Placing order..." : "Place Secure Order"
|
|
9418
|
-
), /* @__PURE__ */
|
|
9419
|
-
/* @__PURE__ */
|
|
9420
|
-
))), /* @__PURE__ */
|
|
9437
|
+
), /* @__PURE__ */ React20.createElement("p", { className: "mt-4 flex items-center justify-center gap-2 text-xs text-slate-500" }, /* @__PURE__ */ React20.createElement(Lock, { className: "h-4 w-4" }), "Fully encrypted checkout \u2014 cancel anytime before shipment.")),
|
|
9438
|
+
/* @__PURE__ */ React20.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__ */ React20.createElement("p", { className: "font-semibold uppercase tracking-[0.3em] text-primary-800" }, "Why Patients Choose Us"), /* @__PURE__ */ React20.createElement("ul", { className: "mt-4 space-y-3 text-primary-700 leading-relaxed" }, /* @__PURE__ */ React20.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React20.createElement(PackageCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React20.createElement("span", null, "Pharmacy-grade verification on every order.")), /* @__PURE__ */ React20.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React20.createElement(ShieldCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React20.createElement("span", null, "Cold-chain logistics for sensitive medications.")), /* @__PURE__ */ React20.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React20.createElement(Truck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React20.createElement("span", null, "Real-time tracking and SMS updates from prep to delivery."))))
|
|
9439
|
+
))), /* @__PURE__ */ React20.createElement(
|
|
9421
9440
|
AddressFormModal,
|
|
9422
9441
|
{
|
|
9423
9442
|
isOpen: isAddressModalOpen,
|
|
@@ -9472,7 +9491,7 @@ function LoginScreen() {
|
|
|
9472
9491
|
setIsSubmitting(false);
|
|
9473
9492
|
}
|
|
9474
9493
|
};
|
|
9475
|
-
return /* @__PURE__ */
|
|
9494
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.createElement("div", { className: "grid min-h-screen overflow-hidden bg-white lg:grid-cols-[1.1fr_0.9fr]" }, /* @__PURE__ */ React20.createElement(
|
|
9476
9495
|
motion.section,
|
|
9477
9496
|
{
|
|
9478
9497
|
initial: { opacity: 0, x: -24 },
|
|
@@ -9480,18 +9499,18 @@ function LoginScreen() {
|
|
|
9480
9499
|
transition: { duration: 0.4 },
|
|
9481
9500
|
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"
|
|
9482
9501
|
},
|
|
9483
|
-
/* @__PURE__ */
|
|
9484
|
-
/* @__PURE__ */
|
|
9485
|
-
/* @__PURE__ */
|
|
9502
|
+
/* @__PURE__ */ React20.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React20.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__ */ React20.createElement(HeartPulse, { className: "h-4 w-4" }), "Hey Pharmacist"), /* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Pharmacy-grade care for your household"), /* @__PURE__ */ React20.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.")),
|
|
9503
|
+
/* @__PURE__ */ React20.createElement("div", { className: "grid gap-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement(ShieldCheck, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-white/80" }, "HIPAA-compliant security keeps your health information protected.")), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement(Sparkles, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-white/80" }, "Pharmacists ready to chat in under 10 minutes for medication support."))),
|
|
9504
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React20.createElement("span", null, "Need an account?"), /* @__PURE__ */ React20.createElement(
|
|
9486
9505
|
Link8,
|
|
9487
9506
|
{
|
|
9488
9507
|
href: "/register",
|
|
9489
9508
|
className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2 font-semibold transition hover:bg-white/25"
|
|
9490
9509
|
},
|
|
9491
9510
|
"Create one now",
|
|
9492
|
-
/* @__PURE__ */
|
|
9511
|
+
/* @__PURE__ */ React20.createElement(ArrowRight, { className: "h-4 w-4" })
|
|
9493
9512
|
))
|
|
9494
|
-
), /* @__PURE__ */
|
|
9513
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9495
9514
|
motion.section,
|
|
9496
9515
|
{
|
|
9497
9516
|
initial: { opacity: 0, x: 24 },
|
|
@@ -9499,7 +9518,7 @@ function LoginScreen() {
|
|
|
9499
9518
|
transition: { duration: 0.4 },
|
|
9500
9519
|
className: "flex items-center justify-center px-6 py-12 lg:px-16"
|
|
9501
9520
|
},
|
|
9502
|
-
/* @__PURE__ */
|
|
9521
|
+
/* @__PURE__ */ React20.createElement("div", { className: "w-full max-w-md space-y-10" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React20.createElement("h2", { className: "text-3xl font-bold text-slate-900" }, "Sign in"), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-500" }, "Welcome back! Enter your details to continue your personalized care plan.")), /* @__PURE__ */ React20.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__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement(
|
|
9503
9522
|
Input,
|
|
9504
9523
|
{
|
|
9505
9524
|
type: "email",
|
|
@@ -9508,7 +9527,7 @@ function LoginScreen() {
|
|
|
9508
9527
|
...register("email"),
|
|
9509
9528
|
error: errors.email?.message
|
|
9510
9529
|
}
|
|
9511
|
-
)), /* @__PURE__ */
|
|
9530
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
9512
9531
|
Input,
|
|
9513
9532
|
{
|
|
9514
9533
|
type: showPassword ? "text" : "password",
|
|
@@ -9517,28 +9536,28 @@ function LoginScreen() {
|
|
|
9517
9536
|
...register("password"),
|
|
9518
9537
|
error: errors.password?.message
|
|
9519
9538
|
}
|
|
9520
|
-
), /* @__PURE__ */
|
|
9539
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9521
9540
|
"button",
|
|
9522
9541
|
{
|
|
9523
9542
|
type: "button",
|
|
9524
9543
|
onClick: () => setShowPassword((prev) => !prev),
|
|
9525
9544
|
className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
|
|
9526
9545
|
},
|
|
9527
|
-
showPassword ? /* @__PURE__ */
|
|
9528
|
-
)), /* @__PURE__ */
|
|
9546
|
+
showPassword ? /* @__PURE__ */ React20.createElement(EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React20.createElement(Eye, { className: "h-5 w-5" })
|
|
9547
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between text-sm" }, /* @__PURE__ */ React20.createElement("label", { className: "flex items-center gap-2 text-slate-600" }, /* @__PURE__ */ React20.createElement(
|
|
9529
9548
|
"input",
|
|
9530
9549
|
{
|
|
9531
9550
|
type: "checkbox",
|
|
9532
9551
|
className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
|
|
9533
9552
|
}
|
|
9534
|
-
), "Remember me"), /* @__PURE__ */
|
|
9553
|
+
), "Remember me"), /* @__PURE__ */ React20.createElement(
|
|
9535
9554
|
Link8,
|
|
9536
9555
|
{
|
|
9537
9556
|
href: "/forgot-password",
|
|
9538
9557
|
className: "font-medium text-primary-600 transition hover:text-primary-700"
|
|
9539
9558
|
},
|
|
9540
9559
|
"Forgot password?"
|
|
9541
|
-
)), /* @__PURE__ */
|
|
9560
|
+
)), /* @__PURE__ */ React20.createElement(
|
|
9542
9561
|
Button,
|
|
9543
9562
|
{
|
|
9544
9563
|
type: "submit",
|
|
@@ -9547,7 +9566,7 @@ function LoginScreen() {
|
|
|
9547
9566
|
className: "w-full"
|
|
9548
9567
|
},
|
|
9549
9568
|
"Sign in securely"
|
|
9550
|
-
)), /* @__PURE__ */
|
|
9569
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-slate-100 bg-slate-50 p-6 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React20.createElement(Lock, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold text-slate-800" }, "Secure by design"), /* @__PURE__ */ React20.createElement("p", null, "Encrypted sessions, multi-factor ready, and privacy-first policies keep your personal data safe.")))))
|
|
9551
9570
|
)));
|
|
9552
9571
|
}
|
|
9553
9572
|
var registerSchema = z.object({
|
|
@@ -9597,7 +9616,7 @@ function RegisterScreen() {
|
|
|
9597
9616
|
setIsSubmitting(false);
|
|
9598
9617
|
}
|
|
9599
9618
|
};
|
|
9600
|
-
return /* @__PURE__ */
|
|
9619
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.createElement("div", { className: "grid min-h-screen overflow-hidden bg-white lg:grid-cols-[0.95fr_1.05fr]" }, /* @__PURE__ */ React20.createElement(
|
|
9601
9620
|
motion.section,
|
|
9602
9621
|
{
|
|
9603
9622
|
initial: { opacity: 0, x: -24 },
|
|
@@ -9605,9 +9624,9 @@ function RegisterScreen() {
|
|
|
9605
9624
|
transition: { duration: 0.4 },
|
|
9606
9625
|
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"
|
|
9607
9626
|
},
|
|
9608
|
-
/* @__PURE__ */
|
|
9609
|
-
/* @__PURE__ */
|
|
9610
|
-
/* @__PURE__ */
|
|
9627
|
+
/* @__PURE__ */ React20.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React20.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__ */ React20.createElement(HeartPulse, { className: "h-4 w-4" }), "Join Hey Pharmacist"), /* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Create your wellness account"), /* @__PURE__ */ React20.createElement("p", { className: "max-w-xl text-white/80" }, "Unlock concierge-level pharmacy support, curated product recommendations, and smarter refills designed for busy families.")),
|
|
9628
|
+
/* @__PURE__ */ React20.createElement("div", { className: "space-y-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, BENEFITS.map((benefit) => /* @__PURE__ */ React20.createElement("div", { key: benefit, className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement(CheckCircle2, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-white/85" }, benefit)))),
|
|
9629
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React20.createElement("span", null, "Already part of the community?"), /* @__PURE__ */ React20.createElement(
|
|
9611
9630
|
Link8,
|
|
9612
9631
|
{
|
|
9613
9632
|
href: "/login",
|
|
@@ -9615,7 +9634,7 @@ function RegisterScreen() {
|
|
|
9615
9634
|
},
|
|
9616
9635
|
"Sign in"
|
|
9617
9636
|
))
|
|
9618
|
-
), /* @__PURE__ */
|
|
9637
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9619
9638
|
motion.section,
|
|
9620
9639
|
{
|
|
9621
9640
|
initial: { opacity: 0, x: 24 },
|
|
@@ -9623,13 +9642,13 @@ function RegisterScreen() {
|
|
|
9623
9642
|
transition: { duration: 0.4 },
|
|
9624
9643
|
className: "flex items-center justify-center px-6 py-12 lg:px-16"
|
|
9625
9644
|
},
|
|
9626
|
-
/* @__PURE__ */
|
|
9645
|
+
/* @__PURE__ */ React20.createElement("div", { className: "w-full max-w-lg space-y-10" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React20.createElement("h2", { className: "text-3xl font-bold text-slate-900" }, "Create an account"), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-500" }, "Start your personalized care journey with pharmacist-backed guidance.")), /* @__PURE__ */ React20.createElement(
|
|
9627
9646
|
"form",
|
|
9628
9647
|
{
|
|
9629
9648
|
onSubmit: handleSubmit(onSubmit),
|
|
9630
9649
|
className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50"
|
|
9631
9650
|
},
|
|
9632
|
-
/* @__PURE__ */
|
|
9651
|
+
/* @__PURE__ */ React20.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React20.createElement(
|
|
9633
9652
|
Input,
|
|
9634
9653
|
{
|
|
9635
9654
|
label: "First name",
|
|
@@ -9637,7 +9656,7 @@ function RegisterScreen() {
|
|
|
9637
9656
|
...register("firstName"),
|
|
9638
9657
|
error: errors.firstName?.message
|
|
9639
9658
|
}
|
|
9640
|
-
), /* @__PURE__ */
|
|
9659
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9641
9660
|
Input,
|
|
9642
9661
|
{
|
|
9643
9662
|
label: "Last name",
|
|
@@ -9646,7 +9665,7 @@ function RegisterScreen() {
|
|
|
9646
9665
|
error: errors.lastName?.message
|
|
9647
9666
|
}
|
|
9648
9667
|
)),
|
|
9649
|
-
/* @__PURE__ */
|
|
9668
|
+
/* @__PURE__ */ React20.createElement(
|
|
9650
9669
|
Input,
|
|
9651
9670
|
{
|
|
9652
9671
|
type: "email",
|
|
@@ -9656,7 +9675,7 @@ function RegisterScreen() {
|
|
|
9656
9675
|
error: errors.email?.message
|
|
9657
9676
|
}
|
|
9658
9677
|
),
|
|
9659
|
-
/* @__PURE__ */
|
|
9678
|
+
/* @__PURE__ */ React20.createElement(
|
|
9660
9679
|
Input,
|
|
9661
9680
|
{
|
|
9662
9681
|
type: "tel",
|
|
@@ -9666,7 +9685,7 @@ function RegisterScreen() {
|
|
|
9666
9685
|
error: errors.phone?.message
|
|
9667
9686
|
}
|
|
9668
9687
|
),
|
|
9669
|
-
/* @__PURE__ */
|
|
9688
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
9670
9689
|
Input,
|
|
9671
9690
|
{
|
|
9672
9691
|
type: showPassword ? "text" : "password",
|
|
@@ -9675,16 +9694,16 @@ function RegisterScreen() {
|
|
|
9675
9694
|
...register("password"),
|
|
9676
9695
|
error: errors.password?.message
|
|
9677
9696
|
}
|
|
9678
|
-
), /* @__PURE__ */
|
|
9697
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9679
9698
|
"button",
|
|
9680
9699
|
{
|
|
9681
9700
|
type: "button",
|
|
9682
9701
|
onClick: () => setShowPassword((prev) => !prev),
|
|
9683
9702
|
className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
|
|
9684
9703
|
},
|
|
9685
|
-
showPassword ? /* @__PURE__ */
|
|
9704
|
+
showPassword ? /* @__PURE__ */ React20.createElement(EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React20.createElement(Eye, { className: "h-5 w-5" })
|
|
9686
9705
|
)),
|
|
9687
|
-
/* @__PURE__ */
|
|
9706
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
9688
9707
|
Input,
|
|
9689
9708
|
{
|
|
9690
9709
|
type: showConfirmPassword ? "text" : "password",
|
|
@@ -9693,16 +9712,16 @@ function RegisterScreen() {
|
|
|
9693
9712
|
...register("confirmPassword"),
|
|
9694
9713
|
error: errors.confirmPassword?.message
|
|
9695
9714
|
}
|
|
9696
|
-
), /* @__PURE__ */
|
|
9715
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9697
9716
|
"button",
|
|
9698
9717
|
{
|
|
9699
9718
|
type: "button",
|
|
9700
9719
|
onClick: () => setShowConfirmPassword((prev) => !prev),
|
|
9701
9720
|
className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
|
|
9702
9721
|
},
|
|
9703
|
-
showConfirmPassword ? /* @__PURE__ */
|
|
9722
|
+
showConfirmPassword ? /* @__PURE__ */ React20.createElement(EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React20.createElement(Eye, { className: "h-5 w-5" })
|
|
9704
9723
|
)),
|
|
9705
|
-
/* @__PURE__ */
|
|
9724
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement(Shield, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React20.createElement("span", null, "By creating an account, you agree to our", " ", /* @__PURE__ */ React20.createElement(Link8, { href: "/terms", className: "font-semibold text-primary-600 hover:text-primary-700" }, "Terms of Service"), " ", "and", " ", /* @__PURE__ */ React20.createElement(
|
|
9706
9725
|
Link8,
|
|
9707
9726
|
{
|
|
9708
9727
|
href: "/privacy",
|
|
@@ -9710,7 +9729,7 @@ function RegisterScreen() {
|
|
|
9710
9729
|
},
|
|
9711
9730
|
"Privacy Policy"
|
|
9712
9731
|
), ". We protect your information with bank-level encryption.")),
|
|
9713
|
-
/* @__PURE__ */
|
|
9732
|
+
/* @__PURE__ */ React20.createElement(
|
|
9714
9733
|
Button,
|
|
9715
9734
|
{
|
|
9716
9735
|
type: "submit",
|
|
@@ -9718,10 +9737,10 @@ function RegisterScreen() {
|
|
|
9718
9737
|
isLoading: isSubmitting,
|
|
9719
9738
|
className: "w-full"
|
|
9720
9739
|
},
|
|
9721
|
-
/* @__PURE__ */
|
|
9740
|
+
/* @__PURE__ */ React20.createElement(UserPlus, { className: "h-5 w-5" }),
|
|
9722
9741
|
"Create my account"
|
|
9723
9742
|
)
|
|
9724
|
-
), /* @__PURE__ */
|
|
9743
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-slate-100 bg-slate-50 p-6 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React20.createElement(Heart, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold text-slate-800" }, "Members love us"), /* @__PURE__ */ React20.createElement("p", null, "92% of patients report improved adherence after receiving pharmacist touchpoints through their Hey Pharmacist account.")))))
|
|
9725
9744
|
)));
|
|
9726
9745
|
}
|
|
9727
9746
|
var profileSchema = z.object({
|
|
@@ -9787,15 +9806,15 @@ function ProfileScreen() {
|
|
|
9787
9806
|
href: "/account/addresses"
|
|
9788
9807
|
}
|
|
9789
9808
|
];
|
|
9790
|
-
return /* @__PURE__ */
|
|
9809
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement(
|
|
9791
9810
|
motion.div,
|
|
9792
9811
|
{
|
|
9793
9812
|
initial: { opacity: 0, y: 24 },
|
|
9794
9813
|
animate: { opacity: 1, y: 0 },
|
|
9795
9814
|
className: "flex flex-col gap-8 md:flex-row md:items-center md:justify-between"
|
|
9796
9815
|
},
|
|
9797
|
-
/* @__PURE__ */
|
|
9798
|
-
/* @__PURE__ */
|
|
9816
|
+
/* @__PURE__ */ React20.createElement("div", { className: "space-y-5" }, /* @__PURE__ */ React20.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__ */ React20.createElement(HeartPulse, { className: "h-4 w-4" }), "My account"), /* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Hello, ", user.firstname, " ", user.lastname), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "flex flex-wrap items-center gap-4 text-sm text-white/80" }, /* @__PURE__ */ React20.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2" }, /* @__PURE__ */ React20.createElement(ShieldCheck, { className: "h-4 w-4" }), "Account secured with multi-factor ready login"))),
|
|
9817
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-col items-center gap-4 rounded-3xl bg-white/15 p-6 text-center backdrop-blur" }, /* @__PURE__ */ React20.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__ */ React20.createElement("p", { className: "text-sm text-white/80" }, user.email), /* @__PURE__ */ React20.createElement(
|
|
9799
9818
|
Button,
|
|
9800
9819
|
{
|
|
9801
9820
|
variant: "ghost",
|
|
@@ -9804,14 +9823,14 @@ function ProfileScreen() {
|
|
|
9804
9823
|
},
|
|
9805
9824
|
"Change password"
|
|
9806
9825
|
))
|
|
9807
|
-
))), /* @__PURE__ */
|
|
9826
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React20.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]" }, /* @__PURE__ */ React20.createElement(
|
|
9808
9827
|
motion.div,
|
|
9809
9828
|
{
|
|
9810
9829
|
initial: { opacity: 0, y: 24 },
|
|
9811
9830
|
animate: { opacity: 1, y: 0 },
|
|
9812
9831
|
className: "space-y-6"
|
|
9813
9832
|
},
|
|
9814
|
-
/* @__PURE__ */
|
|
9833
|
+
/* @__PURE__ */ React20.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Personal information"), /* @__PURE__ */ React20.createElement(Sparkles, { className: "h-5 w-5 text-primary-500" })), /* @__PURE__ */ React20.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "mt-6 space-y-6" }, /* @__PURE__ */ React20.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React20.createElement(
|
|
9815
9834
|
Input,
|
|
9816
9835
|
{
|
|
9817
9836
|
label: "First name",
|
|
@@ -9819,7 +9838,7 @@ function ProfileScreen() {
|
|
|
9819
9838
|
...register("firstName"),
|
|
9820
9839
|
error: errors.firstName?.message
|
|
9821
9840
|
}
|
|
9822
|
-
), /* @__PURE__ */
|
|
9841
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9823
9842
|
Input,
|
|
9824
9843
|
{
|
|
9825
9844
|
label: "Last name",
|
|
@@ -9827,7 +9846,7 @@ function ProfileScreen() {
|
|
|
9827
9846
|
...register("lastName"),
|
|
9828
9847
|
error: errors.lastName?.message
|
|
9829
9848
|
}
|
|
9830
|
-
)), /* @__PURE__ */
|
|
9849
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
9831
9850
|
Input,
|
|
9832
9851
|
{
|
|
9833
9852
|
type: "email",
|
|
@@ -9837,7 +9856,7 @@ function ProfileScreen() {
|
|
|
9837
9856
|
...register("email"),
|
|
9838
9857
|
error: errors.email?.message
|
|
9839
9858
|
}
|
|
9840
|
-
), /* @__PURE__ */
|
|
9859
|
+
), /* @__PURE__ */ React20.createElement(Mail, { className: "absolute left-3 top-[38px] h-4 w-4 text-slate-400" })), /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
9841
9860
|
Input,
|
|
9842
9861
|
{
|
|
9843
9862
|
type: "tel",
|
|
@@ -9847,7 +9866,7 @@ function ProfileScreen() {
|
|
|
9847
9866
|
...register("phone"),
|
|
9848
9867
|
error: errors.phone?.message
|
|
9849
9868
|
}
|
|
9850
|
-
), /* @__PURE__ */
|
|
9869
|
+
), /* @__PURE__ */ React20.createElement(Phone, { className: "absolute left-3 top-[38px] h-4 w-4 text-slate-400" })), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap gap-4" }, /* @__PURE__ */ React20.createElement(
|
|
9851
9870
|
Button,
|
|
9852
9871
|
{
|
|
9853
9872
|
type: "submit",
|
|
@@ -9855,7 +9874,7 @@ function ProfileScreen() {
|
|
|
9855
9874
|
isLoading: isSubmitting
|
|
9856
9875
|
},
|
|
9857
9876
|
"Save changes"
|
|
9858
|
-
), /* @__PURE__ */
|
|
9877
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9859
9878
|
Button,
|
|
9860
9879
|
{
|
|
9861
9880
|
type: "button",
|
|
@@ -9865,16 +9884,16 @@ function ProfileScreen() {
|
|
|
9865
9884
|
},
|
|
9866
9885
|
"View recent orders"
|
|
9867
9886
|
)))),
|
|
9868
|
-
/* @__PURE__ */
|
|
9887
|
+
/* @__PURE__ */ React20.createElement("section", { className: "grid gap-4 md:grid-cols-2" }, quickLinks.map((item) => /* @__PURE__ */ React20.createElement(
|
|
9869
9888
|
Link8,
|
|
9870
9889
|
{
|
|
9871
9890
|
key: item.href,
|
|
9872
9891
|
href: item.href,
|
|
9873
9892
|
className: "group rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-lg"
|
|
9874
9893
|
},
|
|
9875
|
-
/* @__PURE__ */
|
|
9894
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement("span", { className: "rounded-2xl bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React20.createElement(item.icon, { className: "h-5 w-5" })), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "text-base font-semibold text-slate-900 group-hover:text-primary-600" }, item.label), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-500" }, item.description)))
|
|
9876
9895
|
)))
|
|
9877
|
-
), /* @__PURE__ */
|
|
9896
|
+
), /* @__PURE__ */ React20.createElement(
|
|
9878
9897
|
motion.aside,
|
|
9879
9898
|
{
|
|
9880
9899
|
initial: { opacity: 0, y: 24 },
|
|
@@ -9882,7 +9901,7 @@ function ProfileScreen() {
|
|
|
9882
9901
|
transition: { delay: 0.1 },
|
|
9883
9902
|
className: "space-y-6"
|
|
9884
9903
|
},
|
|
9885
|
-
/* @__PURE__ */
|
|
9904
|
+
/* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, "Care preferences"), /* @__PURE__ */ React20.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__ */ React20.createElement(
|
|
9886
9905
|
Button,
|
|
9887
9906
|
{
|
|
9888
9907
|
variant: "outline",
|
|
@@ -9891,21 +9910,21 @@ function ProfileScreen() {
|
|
|
9891
9910
|
},
|
|
9892
9911
|
"Manage preferences"
|
|
9893
9912
|
)),
|
|
9894
|
-
/* @__PURE__ */
|
|
9895
|
-
/* @__PURE__ */
|
|
9913
|
+
/* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Pharmacist tip"), /* @__PURE__ */ React20.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.")),
|
|
9914
|
+
/* @__PURE__ */ React20.createElement(
|
|
9896
9915
|
"button",
|
|
9897
9916
|
{
|
|
9898
9917
|
onClick: handleLogout,
|
|
9899
9918
|
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"
|
|
9900
9919
|
},
|
|
9901
|
-
/* @__PURE__ */
|
|
9920
|
+
/* @__PURE__ */ React20.createElement(LogOut, { className: "h-4 w-4" }),
|
|
9902
9921
|
"Log out"
|
|
9903
9922
|
)
|
|
9904
9923
|
)))));
|
|
9905
9924
|
}
|
|
9906
9925
|
function OrderCard({ order }) {
|
|
9907
9926
|
const config = order.orderStatus;
|
|
9908
|
-
return /* @__PURE__ */
|
|
9927
|
+
return /* @__PURE__ */ React20.createElement(
|
|
9909
9928
|
motion.div,
|
|
9910
9929
|
{
|
|
9911
9930
|
initial: { opacity: 0, y: 20 },
|
|
@@ -9913,9 +9932,9 @@ function OrderCard({ order }) {
|
|
|
9913
9932
|
whileHover: { y: -4 },
|
|
9914
9933
|
className: "bg-white rounded-2xl p-6 shadow-sm hover:shadow-xl transition-all duration-300 border border-gray-100"
|
|
9915
9934
|
},
|
|
9916
|
-
/* @__PURE__ */
|
|
9917
|
-
/* @__PURE__ */
|
|
9918
|
-
/* @__PURE__ */
|
|
9935
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex justify-between items-start mb-4" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("h3", { className: "text-lg font-bold text-gray-900 flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(Package, { className: "w-5 h-5 text-primary-600" }), "Order #", order?._id?.slice(0, 6) || ""), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-gray-500 mt-1 flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(Calendar, { className: "w-4 h-4" }), formatDate(order.createdAt || /* @__PURE__ */ new Date(), "long"))), /* @__PURE__ */ React20.createElement(Badge, { variant: config }, config)),
|
|
9936
|
+
/* @__PURE__ */ React20.createElement("div", { className: "space-y-2 mb-4" }, order.items?.slice(0, 2).map((item) => /* @__PURE__ */ React20.createElement("div", { key: item.productVariantId, className: "flex items-center gap-3 text-sm" }, /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React20.createElement("p", { className: "font-medium text-gray-900 truncate" }, item.productVariantData.name), /* @__PURE__ */ React20.createElement("p", { className: "text-gray-500" }, "Qty: ", item.quantity)), /* @__PURE__ */ React20.createElement("p", { className: "font-semibold text-gray-900" }, formatPrice(item.productVariantData.finalPrice)))), order.items?.length && order.items?.length > 2 && /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-gray-500 pl-15" }, "+", order.items.length - 2, " more item", order.items.length - 2 > 1 ? "s" : "")),
|
|
9937
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex justify-between items-center pt-4 border-t border-gray-200" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-gray-500" }, "Total Amount"), /* @__PURE__ */ React20.createElement("p", { className: "text-2xl font-bold text-gray-900" }, formatPrice(order.grandTotal || 0))), /* @__PURE__ */ React20.createElement("div", { className: "flex gap-2" }, order.payment.paymentStatus !== "Paid" /* Paid */ && order.payment.paymentMethod === "Card" /* Card */ && /* @__PURE__ */ React20.createElement(
|
|
9919
9938
|
"a",
|
|
9920
9939
|
{
|
|
9921
9940
|
href: order?.payment?.paymentIntent?.hostedInvoiceUrl || "",
|
|
@@ -9923,7 +9942,7 @@ function OrderCard({ order }) {
|
|
|
9923
9942
|
rel: "noopener noreferrer",
|
|
9924
9943
|
className: "inline-flex items-center gap-2 px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors"
|
|
9925
9944
|
},
|
|
9926
|
-
/* @__PURE__ */
|
|
9945
|
+
/* @__PURE__ */ React20.createElement(CreditCard, { className: "w-4 h-4" }),
|
|
9927
9946
|
"Pay Now"
|
|
9928
9947
|
)))
|
|
9929
9948
|
);
|
|
@@ -10079,7 +10098,7 @@ function FilterChips({
|
|
|
10079
10098
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
10080
10099
|
};
|
|
10081
10100
|
}, [isOverflowOpen]);
|
|
10082
|
-
return /* @__PURE__ */
|
|
10101
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-3 md:flex-row md:items-center md:gap-4" }, /* @__PURE__ */ React20.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__ */ React20.createElement(Icon, { className: "h-4 w-4" }), label), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-2 md:flex-row md:items-center md:gap-3" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap gap-2" }, visibleFilters.map((filter) => /* @__PURE__ */ React20.createElement(
|
|
10083
10102
|
"button",
|
|
10084
10103
|
{
|
|
10085
10104
|
key: filter,
|
|
@@ -10088,16 +10107,16 @@ function FilterChips({
|
|
|
10088
10107
|
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`}`
|
|
10089
10108
|
},
|
|
10090
10109
|
filter
|
|
10091
|
-
))), overflowFilters.length > 0 && /* @__PURE__ */
|
|
10110
|
+
))), overflowFilters.length > 0 && /* @__PURE__ */ React20.createElement("div", { className: "relative", ref: overflowMenuRef }, /* @__PURE__ */ React20.createElement(
|
|
10092
10111
|
"button",
|
|
10093
10112
|
{
|
|
10094
10113
|
type: "button",
|
|
10095
10114
|
onClick: () => setIsOverflowOpen((prev) => !prev),
|
|
10096
10115
|
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"}`
|
|
10097
10116
|
},
|
|
10098
|
-
/* @__PURE__ */
|
|
10099
|
-
/* @__PURE__ */
|
|
10100
|
-
), /* @__PURE__ */
|
|
10117
|
+
/* @__PURE__ */ React20.createElement("span", null, overflowFilters.includes(selected) ? selected : "More"),
|
|
10118
|
+
/* @__PURE__ */ React20.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)
|
|
10119
|
+
), /* @__PURE__ */ React20.createElement(AnimatePresence, null, isOverflowOpen && /* @__PURE__ */ React20.createElement(
|
|
10101
10120
|
motion.div,
|
|
10102
10121
|
{
|
|
10103
10122
|
initial: { opacity: 0, y: 8 },
|
|
@@ -10106,7 +10125,7 @@ function FilterChips({
|
|
|
10106
10125
|
transition: { duration: 0.15 },
|
|
10107
10126
|
className: "absolute right-0 z-50 mt-2 w-64 rounded-2xl border border-slate-100 bg-white shadow-xl shadow-primary-50"
|
|
10108
10127
|
},
|
|
10109
|
-
/* @__PURE__ */
|
|
10128
|
+
/* @__PURE__ */ React20.createElement("div", { className: "border-b border-slate-100 px-4 py-3" }, /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(Search, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" }), /* @__PURE__ */ React20.createElement(
|
|
10110
10129
|
"input",
|
|
10111
10130
|
{
|
|
10112
10131
|
type: "text",
|
|
@@ -10116,7 +10135,7 @@ function FilterChips({
|
|
|
10116
10135
|
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"
|
|
10117
10136
|
}
|
|
10118
10137
|
))),
|
|
10119
|
-
/* @__PURE__ */
|
|
10138
|
+
/* @__PURE__ */ React20.createElement("div", { className: "max-h-60 overflow-y-auto px-2 py-2" }, filteredOverflowFilters.length > 0 ? filteredOverflowFilters.map((filter) => /* @__PURE__ */ React20.createElement(
|
|
10120
10139
|
"button",
|
|
10121
10140
|
{
|
|
10122
10141
|
key: filter,
|
|
@@ -10127,10 +10146,10 @@ function FilterChips({
|
|
|
10127
10146
|
},
|
|
10128
10147
|
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"}`
|
|
10129
10148
|
},
|
|
10130
|
-
/* @__PURE__ */
|
|
10131
|
-
selected === filter && /* @__PURE__ */
|
|
10132
|
-
)) : /* @__PURE__ */
|
|
10133
|
-
/* @__PURE__ */
|
|
10149
|
+
/* @__PURE__ */ React20.createElement("span", null, filter),
|
|
10150
|
+
selected === filter && /* @__PURE__ */ React20.createElement(Check, { className: "h-4 w-4" })
|
|
10151
|
+
)) : /* @__PURE__ */ React20.createElement("p", { className: "px-3 py-4 text-sm text-slate-500" }, "No items found.")),
|
|
10152
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between gap-2 border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React20.createElement("span", { className: "text-xs font-semibold uppercase tracking-wide text-slate-400" }, "Quick actions"), /* @__PURE__ */ React20.createElement(
|
|
10134
10153
|
"button",
|
|
10135
10154
|
{
|
|
10136
10155
|
type: "button",
|
|
@@ -10187,23 +10206,23 @@ function OrdersScreen() {
|
|
|
10187
10206
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
10188
10207
|
};
|
|
10189
10208
|
}, [isOverflowOpen]);
|
|
10190
|
-
return /* @__PURE__ */
|
|
10209
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement(
|
|
10191
10210
|
motion.div,
|
|
10192
10211
|
{
|
|
10193
10212
|
initial: { opacity: 0, y: 24 },
|
|
10194
10213
|
animate: { opacity: 1, y: 0 },
|
|
10195
10214
|
className: "space-y-6"
|
|
10196
10215
|
},
|
|
10197
|
-
/* @__PURE__ */
|
|
10198
|
-
/* @__PURE__ */
|
|
10199
|
-
))), /* @__PURE__ */
|
|
10216
|
+
/* @__PURE__ */ React20.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__ */ React20.createElement(CalendarDays, { className: "h-4 w-4" }), "Order history"),
|
|
10217
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "All of your pharmacy orders"), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur" }, /* @__PURE__ */ React20.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick tip"), /* @__PURE__ */ React20.createElement("p", { className: "mt-3 text-sm text-white/80" }, "Use filters to review previous prescriptions, reorder favorites, or download invoices for insurance claims.")))
|
|
10218
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "relative -mt-16 pb-16 container mx-auto px-4" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React20.createElement(
|
|
10200
10219
|
motion.div,
|
|
10201
10220
|
{
|
|
10202
10221
|
initial: { opacity: 0, y: 24 },
|
|
10203
10222
|
animate: { opacity: 1, y: 0 },
|
|
10204
10223
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
|
|
10205
10224
|
},
|
|
10206
|
-
/* @__PURE__ */
|
|
10225
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3 text-sm text-slate-500" }, /* @__PURE__ */ React20.createElement(Sparkles, { className: "h-4 w-4 text-primary-500" }), /* @__PURE__ */ React20.createElement("span", null, "Explore your complete order archive with pharmacist notes.")), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-4 md:items-end" }, /* @__PURE__ */ React20.createElement(
|
|
10207
10226
|
FilterChips,
|
|
10208
10227
|
{
|
|
10209
10228
|
label: "Status filters",
|
|
@@ -10217,7 +10236,7 @@ function OrdersScreen() {
|
|
|
10217
10236
|
maxVisible: MAX_VISIBLE_FILTERS,
|
|
10218
10237
|
variant: "primary"
|
|
10219
10238
|
}
|
|
10220
|
-
), /* @__PURE__ */
|
|
10239
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10221
10240
|
FilterChips,
|
|
10222
10241
|
{
|
|
10223
10242
|
label: "Payment status",
|
|
@@ -10232,7 +10251,7 @@ function OrdersScreen() {
|
|
|
10232
10251
|
variant: "primary"
|
|
10233
10252
|
}
|
|
10234
10253
|
))),
|
|
10235
|
-
/* @__PURE__ */
|
|
10254
|
+
/* @__PURE__ */ React20.createElement("div", { className: "mt-6 space-y-4" }, isLoading ? Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React20.createElement(OrderCardSkeleton, { key: index })) : hasOrders ? filteredOrders.map((order) => /* @__PURE__ */ React20.createElement(OrderCard, { key: order.id, order })) : /* @__PURE__ */ React20.createElement(
|
|
10236
10255
|
EmptyState,
|
|
10237
10256
|
{
|
|
10238
10257
|
icon: Package,
|
|
@@ -10242,16 +10261,16 @@ function OrdersScreen() {
|
|
|
10242
10261
|
onAction: () => router.push("/shop")
|
|
10243
10262
|
}
|
|
10244
10263
|
)),
|
|
10245
|
-
!isLoading && pagination.totalPages > 1 && hasOrders && /* @__PURE__ */
|
|
10264
|
+
!isLoading && pagination.totalPages > 1 && hasOrders && /* @__PURE__ */ React20.createElement("div", { className: "mt-10 flex flex-wrap items-center justify-center gap-4" }, /* @__PURE__ */ React20.createElement(
|
|
10246
10265
|
Button,
|
|
10247
10266
|
{
|
|
10248
10267
|
variant: "outline",
|
|
10249
10268
|
onClick: () => setPage((current) => Math.max(1, current - 1)),
|
|
10250
10269
|
disabled: page === 1
|
|
10251
10270
|
},
|
|
10252
|
-
/* @__PURE__ */
|
|
10271
|
+
/* @__PURE__ */ React20.createElement(ChevronLeft, { className: "h-5 w-5" }),
|
|
10253
10272
|
"Previous"
|
|
10254
|
-
), /* @__PURE__ */
|
|
10273
|
+
), /* @__PURE__ */ React20.createElement("span", { className: "text-sm font-semibold text-slate-600" }, "Page ", page, " of ", pagination.totalPages), /* @__PURE__ */ React20.createElement(
|
|
10255
10274
|
Button,
|
|
10256
10275
|
{
|
|
10257
10276
|
variant: "outline",
|
|
@@ -10259,7 +10278,7 @@ function OrdersScreen() {
|
|
|
10259
10278
|
disabled: page === pagination.totalPages
|
|
10260
10279
|
},
|
|
10261
10280
|
"Next",
|
|
10262
|
-
/* @__PURE__ */
|
|
10281
|
+
/* @__PURE__ */ React20.createElement(ChevronRight, { className: "h-5 w-5" })
|
|
10263
10282
|
))
|
|
10264
10283
|
))));
|
|
10265
10284
|
}
|
|
@@ -10267,17 +10286,17 @@ function CurrentOrdersScreen() {
|
|
|
10267
10286
|
const router = useRouter();
|
|
10268
10287
|
const { orders, isLoading } = useCurrentOrders();
|
|
10269
10288
|
const hasOrders = orders.length > 0;
|
|
10270
|
-
return /* @__PURE__ */
|
|
10289
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React20.createElement(
|
|
10271
10290
|
motion.div,
|
|
10272
10291
|
{
|
|
10273
10292
|
initial: { opacity: 0, y: 24 },
|
|
10274
10293
|
animate: { opacity: 1, y: 0 },
|
|
10275
10294
|
className: "space-y-4"
|
|
10276
10295
|
},
|
|
10277
|
-
/* @__PURE__ */
|
|
10278
|
-
/* @__PURE__ */
|
|
10279
|
-
/* @__PURE__ */
|
|
10280
|
-
), /* @__PURE__ */
|
|
10296
|
+
/* @__PURE__ */ React20.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__ */ React20.createElement(Truck, { className: "h-4 w-4" }), "Live order tracking"),
|
|
10297
|
+
/* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Current orders"),
|
|
10298
|
+
/* @__PURE__ */ React20.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.")
|
|
10299
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10281
10300
|
motion.div,
|
|
10282
10301
|
{
|
|
10283
10302
|
initial: { opacity: 0, y: 24 },
|
|
@@ -10285,24 +10304,24 @@ function CurrentOrdersScreen() {
|
|
|
10285
10304
|
transition: { delay: 0.1 },
|
|
10286
10305
|
className: "rounded-3xl bg-white/15 p-6 backdrop-blur"
|
|
10287
10306
|
},
|
|
10288
|
-
/* @__PURE__ */
|
|
10289
|
-
/* @__PURE__ */
|
|
10307
|
+
/* @__PURE__ */ React20.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick actions"),
|
|
10308
|
+
/* @__PURE__ */ React20.createElement("div", { className: "mt-4 space-y-3 text-sm text-white/80" }, /* @__PURE__ */ React20.createElement(
|
|
10290
10309
|
Link8,
|
|
10291
10310
|
{
|
|
10292
10311
|
href: "/orders",
|
|
10293
10312
|
className: "flex items-center justify-between rounded-2xl bg-white/10 px-4 py-3 transition hover:bg-white/20"
|
|
10294
10313
|
},
|
|
10295
|
-
/* @__PURE__ */
|
|
10296
|
-
/* @__PURE__ */
|
|
10297
|
-
), /* @__PURE__ */
|
|
10298
|
-
)))), /* @__PURE__ */
|
|
10314
|
+
/* @__PURE__ */ React20.createElement("span", { className: "font-semibold text-white" }, "View order history"),
|
|
10315
|
+
/* @__PURE__ */ React20.createElement(ArrowUpRight, { className: "h-4 w-4" })
|
|
10316
|
+
), /* @__PURE__ */ React20.createElement("p", null, "Need help fast? Chat with a pharmacist and we will triage your request in under 10 minutes."))
|
|
10317
|
+
)))), /* @__PURE__ */ React20.createElement("div", { className: "relative -mt-16 pb-16" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React20.createElement(
|
|
10299
10318
|
motion.section,
|
|
10300
10319
|
{
|
|
10301
10320
|
initial: { opacity: 0, y: 24 },
|
|
10302
10321
|
animate: { opacity: 1, y: 0 },
|
|
10303
10322
|
className: "grid gap-6 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]"
|
|
10304
10323
|
},
|
|
10305
|
-
/* @__PURE__ */
|
|
10324
|
+
/* @__PURE__ */ React20.createElement("div", { className: "space-y-6" }, isLoading ? /* @__PURE__ */ React20.createElement("div", { className: "space-y-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React20.createElement(OrderCardSkeleton, { key: index }))) : hasOrders ? /* @__PURE__ */ React20.createElement("div", { className: "space-y-4" }, orders.map((order) => /* @__PURE__ */ React20.createElement(OrderCard, { key: order.id, order }))) : /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-10 shadow-sm" }, /* @__PURE__ */ React20.createElement(
|
|
10306
10325
|
EmptyState,
|
|
10307
10326
|
{
|
|
10308
10327
|
icon: PackageCheck,
|
|
@@ -10312,7 +10331,7 @@ function CurrentOrdersScreen() {
|
|
|
10312
10331
|
onAction: () => router.push("/shop")
|
|
10313
10332
|
}
|
|
10314
10333
|
))),
|
|
10315
|
-
/* @__PURE__ */
|
|
10334
|
+
/* @__PURE__ */ React20.createElement("aside", { className: "space-y-6" }, /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React20.createElement("h2", { className: "text-lg font-semibold text-slate-900" }, "Real-time milestones"), /* @__PURE__ */ React20.createElement("div", { className: "mt-4 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React20.createElement(Warehouse, { className: "h-5 w-5 text-primary-500" }), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold text-slate-800" }, "Preparation"), /* @__PURE__ */ React20.createElement("p", null, "Our pharmacists verify ingredients and pack thermo-sensitive items."))), /* @__PURE__ */ React20.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React20.createElement(Truck, { className: "h-5 w-5 text-primary-500" }), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold text-slate-800" }, "In transit"), /* @__PURE__ */ React20.createElement("p", null, "Track live courier location with ETA updates tailored to your delivery window."))), /* @__PURE__ */ React20.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React20.createElement(BellRing, { className: "h-5 w-5 text-primary-500" }), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold text-slate-800" }, "Arrival alerts"), /* @__PURE__ */ React20.createElement("p", null, "Receive SMS and email notifications when parcels are out for delivery."))))), /* @__PURE__ */ React20.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React20.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Need support?"), /* @__PURE__ */ React20.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.")))
|
|
10316
10335
|
))));
|
|
10317
10336
|
}
|
|
10318
10337
|
var addressFormSchema = z.object({
|
|
@@ -10345,12 +10364,12 @@ function formatAddressSnippet(address) {
|
|
|
10345
10364
|
function getAddressTypeCopy(type) {
|
|
10346
10365
|
switch (type) {
|
|
10347
10366
|
case "Billing":
|
|
10348
|
-
return { label: "Billing", icon: /* @__PURE__ */
|
|
10367
|
+
return { label: "Billing", icon: /* @__PURE__ */ React20.createElement(Home, { className: "h-4 w-4" }) };
|
|
10349
10368
|
case "Both":
|
|
10350
|
-
return { label: "Billing & Shipping", icon: /* @__PURE__ */
|
|
10369
|
+
return { label: "Billing & Shipping", icon: /* @__PURE__ */ React20.createElement(Globe, { className: "h-4 w-4" }) };
|
|
10351
10370
|
case "Shipping":
|
|
10352
10371
|
default:
|
|
10353
|
-
return { label: "Shipping", icon: /* @__PURE__ */
|
|
10372
|
+
return { label: "Shipping", icon: /* @__PURE__ */ React20.createElement(MapPin, { className: "h-4 w-4" }) };
|
|
10354
10373
|
}
|
|
10355
10374
|
}
|
|
10356
10375
|
function AddressesScreen() {
|
|
@@ -10494,18 +10513,18 @@ You can add it back at any time.`
|
|
|
10494
10513
|
}
|
|
10495
10514
|
];
|
|
10496
10515
|
}, [addresses]);
|
|
10497
|
-
return /* @__PURE__ */
|
|
10516
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.3),_transparent_60%)]" }), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React20.createElement(
|
|
10498
10517
|
motion.div,
|
|
10499
10518
|
{
|
|
10500
10519
|
initial: { opacity: 0, y: 24 },
|
|
10501
10520
|
animate: { opacity: 1, y: 0 },
|
|
10502
10521
|
className: "space-y-5"
|
|
10503
10522
|
},
|
|
10504
|
-
/* @__PURE__ */
|
|
10505
|
-
/* @__PURE__ */
|
|
10506
|
-
/* @__PURE__ */
|
|
10507
|
-
/* @__PURE__ */
|
|
10508
|
-
), /* @__PURE__ */
|
|
10523
|
+
/* @__PURE__ */ React20.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__ */ React20.createElement(MapPin, { className: "h-4 w-4" }), "Address book"),
|
|
10524
|
+
/* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Manage where your care arrives"),
|
|
10525
|
+
/* @__PURE__ */ React20.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."),
|
|
10526
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap items-center gap-3 text-sm text-white/75" }, /* @__PURE__ */ React20.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1" }, /* @__PURE__ */ React20.createElement(Sparkles, { className: "h-4 w-4 text-white" }), "Default address: ", defaultAddress ? defaultAddress.name : "Not set"), /* @__PURE__ */ React20.createElement(Button, { variant: "ghost", className: "text-white hover:bg-white/10", onClick: openCreateModal }, /* @__PURE__ */ React20.createElement(Plus, { className: "h-5 w-5" }), "Add address"))
|
|
10527
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10509
10528
|
motion.div,
|
|
10510
10529
|
{
|
|
10511
10530
|
initial: { opacity: 0, y: 24 },
|
|
@@ -10513,14 +10532,14 @@ You can add it back at any time.`
|
|
|
10513
10532
|
transition: { delay: 0.1 },
|
|
10514
10533
|
className: "grid gap-4 rounded-3xl bg-white/15 p-6 text-sm text-white/80 backdrop-blur"
|
|
10515
10534
|
},
|
|
10516
|
-
stats.map((stat) => /* @__PURE__ */
|
|
10517
|
-
)))), /* @__PURE__ */
|
|
10535
|
+
stats.map((stat) => /* @__PURE__ */ React20.createElement("div", { key: stat.id, className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-white/70" }, stat.label), /* @__PURE__ */ React20.createElement("p", { className: "text-white" }, stat.helper)), /* @__PURE__ */ React20.createElement("span", { className: "text-3xl font-semibold text-white" }, stat.value)))
|
|
10536
|
+
)))), /* @__PURE__ */ React20.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, isLoading ? /* @__PURE__ */ React20.createElement("div", { className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-3" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React20.createElement(
|
|
10518
10537
|
"div",
|
|
10519
10538
|
{
|
|
10520
10539
|
key: index,
|
|
10521
10540
|
className: "h-56 animate-pulse rounded-3xl border border-slate-100 bg-white"
|
|
10522
10541
|
}
|
|
10523
|
-
))) : error ? /* @__PURE__ */
|
|
10542
|
+
))) : error ? /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-12 shadow-sm" }, /* @__PURE__ */ React20.createElement(
|
|
10524
10543
|
EmptyState,
|
|
10525
10544
|
{
|
|
10526
10545
|
icon: MapPin,
|
|
@@ -10529,9 +10548,9 @@ You can add it back at any time.`
|
|
|
10529
10548
|
actionLabel: "Add your first address",
|
|
10530
10549
|
onAction: openCreateModal
|
|
10531
10550
|
}
|
|
10532
|
-
)) : /* @__PURE__ */
|
|
10551
|
+
)) : /* @__PURE__ */ React20.createElement("div", { className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-3" }, addresses.map((address) => {
|
|
10533
10552
|
const typeCopy = getAddressTypeCopy(address.addressType);
|
|
10534
|
-
return /* @__PURE__ */
|
|
10553
|
+
return /* @__PURE__ */ React20.createElement(
|
|
10535
10554
|
motion.div,
|
|
10536
10555
|
{
|
|
10537
10556
|
key: address.id,
|
|
@@ -10539,39 +10558,39 @@ You can add it back at any time.`
|
|
|
10539
10558
|
animate: { opacity: 1, y: 0 },
|
|
10540
10559
|
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"
|
|
10541
10560
|
},
|
|
10542
|
-
address.isDefault && /* @__PURE__ */
|
|
10543
|
-
/* @__PURE__ */
|
|
10544
|
-
/* @__PURE__ */
|
|
10545
|
-
/* @__PURE__ */
|
|
10561
|
+
address.isDefault && /* @__PURE__ */ React20.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__ */ React20.createElement(Crown, { className: "h-4 w-4" }), "Default"),
|
|
10562
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement("span", { className: "rounded-full bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React20.createElement(User, { className: "h-5 w-5" })), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("p", { className: "text-base font-semibold text-slate-900" }, address.name), /* @__PURE__ */ React20.createElement("p", { className: "text-xs uppercase tracking-[0.3em] text-slate-400" }, typeCopy.label))),
|
|
10563
|
+
/* @__PURE__ */ React20.createElement("div", { className: "mt-6 flex flex-1 flex-col gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React20.createElement("p", null, formatAddressSnippet(address)), /* @__PURE__ */ React20.createElement("p", { className: "inline-flex items-center gap-2 text-slate-500" }, /* @__PURE__ */ React20.createElement(Phone, { className: "h-4 w-4 text-slate-400" }), address.phone || "Not provided")),
|
|
10564
|
+
/* @__PURE__ */ React20.createElement("div", { className: "mt-6 flex items-center justify-between gap-3" }, /* @__PURE__ */ React20.createElement(
|
|
10546
10565
|
"button",
|
|
10547
10566
|
{
|
|
10548
10567
|
type: "button",
|
|
10549
10568
|
onClick: () => openEditModal(address),
|
|
10550
10569
|
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"
|
|
10551
10570
|
},
|
|
10552
|
-
/* @__PURE__ */
|
|
10571
|
+
/* @__PURE__ */ React20.createElement(Edit3, { className: "h-4 w-4" }),
|
|
10553
10572
|
"Edit"
|
|
10554
|
-
), /* @__PURE__ */
|
|
10573
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, !address.isDefault && /* @__PURE__ */ React20.createElement(
|
|
10555
10574
|
"button",
|
|
10556
10575
|
{
|
|
10557
10576
|
type: "button",
|
|
10558
10577
|
onClick: () => handleSetDefault(address),
|
|
10559
10578
|
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"
|
|
10560
10579
|
},
|
|
10561
|
-
/* @__PURE__ */
|
|
10580
|
+
/* @__PURE__ */ React20.createElement(Star, { className: "h-4 w-4" }),
|
|
10562
10581
|
"Make default"
|
|
10563
|
-
), /* @__PURE__ */
|
|
10582
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10564
10583
|
"button",
|
|
10565
10584
|
{
|
|
10566
10585
|
type: "button",
|
|
10567
10586
|
onClick: () => handleDelete(address),
|
|
10568
10587
|
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"
|
|
10569
10588
|
},
|
|
10570
|
-
/* @__PURE__ */
|
|
10589
|
+
/* @__PURE__ */ React20.createElement(Trash2, { className: "h-4 w-4" }),
|
|
10571
10590
|
"Delete"
|
|
10572
10591
|
)))
|
|
10573
10592
|
);
|
|
10574
|
-
})))), /* @__PURE__ */
|
|
10593
|
+
})))), /* @__PURE__ */ React20.createElement(
|
|
10575
10594
|
Modal,
|
|
10576
10595
|
{
|
|
10577
10596
|
isOpen: isModalOpen,
|
|
@@ -10579,7 +10598,7 @@ You can add it back at any time.`
|
|
|
10579
10598
|
title: editingAddress ? "Edit address" : "Add new address",
|
|
10580
10599
|
size: "lg"
|
|
10581
10600
|
},
|
|
10582
|
-
/* @__PURE__ */
|
|
10601
|
+
/* @__PURE__ */ React20.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-6" }, /* @__PURE__ */ React20.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React20.createElement(
|
|
10583
10602
|
Input,
|
|
10584
10603
|
{
|
|
10585
10604
|
label: "Full name",
|
|
@@ -10587,7 +10606,7 @@ You can add it back at any time.`
|
|
|
10587
10606
|
...register("fullName"),
|
|
10588
10607
|
error: errors.fullName?.message
|
|
10589
10608
|
}
|
|
10590
|
-
), /* @__PURE__ */
|
|
10609
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10591
10610
|
Input,
|
|
10592
10611
|
{
|
|
10593
10612
|
label: "Phone number",
|
|
@@ -10595,7 +10614,7 @@ You can add it back at any time.`
|
|
|
10595
10614
|
...register("phone"),
|
|
10596
10615
|
error: errors.phone?.message
|
|
10597
10616
|
}
|
|
10598
|
-
)), /* @__PURE__ */
|
|
10617
|
+
)), /* @__PURE__ */ React20.createElement(
|
|
10599
10618
|
Input,
|
|
10600
10619
|
{
|
|
10601
10620
|
label: "Address line 1",
|
|
@@ -10603,7 +10622,7 @@ You can add it back at any time.`
|
|
|
10603
10622
|
...register("addressLine1"),
|
|
10604
10623
|
error: errors.addressLine1?.message
|
|
10605
10624
|
}
|
|
10606
|
-
), /* @__PURE__ */
|
|
10625
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10607
10626
|
Input,
|
|
10608
10627
|
{
|
|
10609
10628
|
label: "Address line 2 (optional)",
|
|
@@ -10611,7 +10630,7 @@ You can add it back at any time.`
|
|
|
10611
10630
|
...register("addressLine2"),
|
|
10612
10631
|
error: errors.addressLine2?.message
|
|
10613
10632
|
}
|
|
10614
|
-
), /* @__PURE__ */
|
|
10633
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React20.createElement(
|
|
10615
10634
|
Input,
|
|
10616
10635
|
{
|
|
10617
10636
|
label: "City",
|
|
@@ -10619,7 +10638,7 @@ You can add it back at any time.`
|
|
|
10619
10638
|
...register("city"),
|
|
10620
10639
|
error: errors.city?.message
|
|
10621
10640
|
}
|
|
10622
|
-
), /* @__PURE__ */
|
|
10641
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10623
10642
|
Input,
|
|
10624
10643
|
{
|
|
10625
10644
|
label: "State / Region",
|
|
@@ -10627,7 +10646,7 @@ You can add it back at any time.`
|
|
|
10627
10646
|
...register("state"),
|
|
10628
10647
|
error: errors.state?.message
|
|
10629
10648
|
}
|
|
10630
|
-
)), /* @__PURE__ */
|
|
10649
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React20.createElement(
|
|
10631
10650
|
Input,
|
|
10632
10651
|
{
|
|
10633
10652
|
label: "Postal code",
|
|
@@ -10635,7 +10654,7 @@ You can add it back at any time.`
|
|
|
10635
10654
|
...register("zipCode"),
|
|
10636
10655
|
error: errors.zipCode?.message
|
|
10637
10656
|
}
|
|
10638
|
-
), /* @__PURE__ */
|
|
10657
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10639
10658
|
Input,
|
|
10640
10659
|
{
|
|
10641
10660
|
label: "Country",
|
|
@@ -10643,23 +10662,23 @@ You can add it back at any time.`
|
|
|
10643
10662
|
...register("country"),
|
|
10644
10663
|
error: errors.country?.message
|
|
10645
10664
|
}
|
|
10646
|
-
)), /* @__PURE__ */
|
|
10665
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React20.createElement("label", { className: "flex flex-col gap-2 rounded-2xl border border-slate-200 p-4" }, /* @__PURE__ */ React20.createElement("span", { className: "text-sm font-semibold text-slate-700" }, "Address type"), /* @__PURE__ */ React20.createElement(
|
|
10647
10666
|
"select",
|
|
10648
10667
|
{
|
|
10649
10668
|
...register("addressType"),
|
|
10650
10669
|
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"
|
|
10651
10670
|
},
|
|
10652
|
-
/* @__PURE__ */
|
|
10653
|
-
/* @__PURE__ */
|
|
10654
|
-
/* @__PURE__ */
|
|
10655
|
-
)), /* @__PURE__ */
|
|
10671
|
+
/* @__PURE__ */ React20.createElement("option", { value: "Shipping" }, "Shipping"),
|
|
10672
|
+
/* @__PURE__ */ React20.createElement("option", { value: "Billing" }, "Billing"),
|
|
10673
|
+
/* @__PURE__ */ React20.createElement("option", { value: "Both" }, "Billing & Shipping")
|
|
10674
|
+
)), /* @__PURE__ */ React20.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__ */ React20.createElement("span", null, "Set as default address"), /* @__PURE__ */ React20.createElement(
|
|
10656
10675
|
"input",
|
|
10657
10676
|
{
|
|
10658
10677
|
type: "checkbox",
|
|
10659
10678
|
...register("isDefault"),
|
|
10660
10679
|
className: "h-4 w-4 rounded border-primary-300 text-primary-600 focus:ring-primary-500"
|
|
10661
10680
|
}
|
|
10662
|
-
))), /* @__PURE__ */
|
|
10681
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-end gap-3" }, /* @__PURE__ */ React20.createElement(Button, { type: "button", variant: "outline", onClick: closeModal }, "Cancel"), /* @__PURE__ */ React20.createElement(Button, { type: "submit", isLoading: isSubmitting }, editingAddress ? "Save changes" : "Save address")))
|
|
10663
10682
|
));
|
|
10664
10683
|
}
|
|
10665
10684
|
function useWishlistProducts(productIds = []) {
|
|
@@ -10718,6 +10737,7 @@ var SORT_OPTIONS = [
|
|
|
10718
10737
|
];
|
|
10719
10738
|
function WishlistScreen() {
|
|
10720
10739
|
const router = useRouter();
|
|
10740
|
+
const { buildPath } = useBasePath();
|
|
10721
10741
|
const { isAuthenticated } = useAuth() || {};
|
|
10722
10742
|
const {
|
|
10723
10743
|
products: wishlistItems,
|
|
@@ -10798,14 +10818,14 @@ function WishlistScreen() {
|
|
|
10798
10818
|
return list;
|
|
10799
10819
|
}, [wishlistProducts, onlyInStock, sortOption]);
|
|
10800
10820
|
const emptyAfterFiltering = !isLoading && wishlistProducts.length > 0 && processedProducts.length === 0;
|
|
10801
|
-
return /* @__PURE__ */
|
|
10821
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50 pb-16" }, /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "absolute inset-0 opacity-40 mix-blend-soft-light", "aria-hidden": "true" }, /* @__PURE__ */ React20.createElement("div", { className: "absolute -top-1/2 right-1/2 h-[40rem] w-[40rem] rounded-full bg-white/10 blur-3xl" }), /* @__PURE__ */ React20.createElement("div", { className: "absolute left-1/4 top-1/4 h-48 w-48 rounded-full bg-white/20 blur-2xl" })), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4" }, /* @__PURE__ */ React20.createElement("div", { className: "max-w-3xl space-y-6" }, /* @__PURE__ */ React20.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__ */ React20.createElement(Heart, { className: "h-4 w-4" }), "Wishlist"), /* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-5xl" }, "Curate your pharmacy must-haves in one calming space"), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "relative -mt-20" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React20.createElement(
|
|
10802
10822
|
motion.div,
|
|
10803
10823
|
{
|
|
10804
10824
|
initial: { opacity: 0, y: 24 },
|
|
10805
10825
|
animate: { opacity: 1, y: 0 },
|
|
10806
10826
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-xl shadow-primary-50"
|
|
10807
10827
|
},
|
|
10808
|
-
/* @__PURE__ */
|
|
10828
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-6" }, !isAuthenticated && /* @__PURE__ */ React20.createElement("div", { className: "flex min-h-[40vh] items-center justify-center" }, /* @__PURE__ */ React20.createElement("div", { className: "max-w-lg rounded-3xl border border-slate-100 bg-white p-10 text-center shadow-lg shadow-primary-50" }, /* @__PURE__ */ React20.createElement("div", { className: "mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-primary-50 text-primary-600" }, /* @__PURE__ */ React20.createElement(Heart, { className: "h-8 w-8" })), /* @__PURE__ */ React20.createElement("h2", { className: "mt-6 text-3xl font-bold text-slate-900" }, "Sign in to see your favourites"), /* @__PURE__ */ React20.createElement("p", { className: "mt-3 text-slate-500" }, "Create your curated shelf of products and we'll keep them ready whenever you return."), /* @__PURE__ */ React20.createElement(Button, { className: "mt-6", onClick: () => router.push("/login") }, "Sign In"))), isAuthenticated && /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React20.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "Your saved collection"), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-500" }, "Total value: ", /* @__PURE__ */ React20.createElement("span", { className: "font-semibold text-primary-600" }, formatPrice(totalValue)), onlyInStock && " \u2022 Showing items ready to ship")), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap items-center gap-3" }, /* @__PURE__ */ React20.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__ */ React20.createElement(
|
|
10809
10829
|
"input",
|
|
10810
10830
|
{
|
|
10811
10831
|
type: "checkbox",
|
|
@@ -10813,54 +10833,54 @@ function WishlistScreen() {
|
|
|
10813
10833
|
onChange: (event) => setOnlyInStock(event.target.checked),
|
|
10814
10834
|
className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
|
|
10815
10835
|
}
|
|
10816
|
-
), "Only show in-stock"), /* @__PURE__ */
|
|
10836
|
+
), "Only show in-stock"), /* @__PURE__ */ React20.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__ */ React20.createElement("span", null, "Sort"), /* @__PURE__ */ React20.createElement(
|
|
10817
10837
|
"select",
|
|
10818
10838
|
{
|
|
10819
10839
|
value: sortOption,
|
|
10820
10840
|
onChange: (event) => setSortOption(event.target.value),
|
|
10821
10841
|
className: "bg-transparent text-sm font-medium text-slate-700 outline-none"
|
|
10822
10842
|
},
|
|
10823
|
-
SORT_OPTIONS.map((option) => /* @__PURE__ */
|
|
10824
|
-
)), /* @__PURE__ */
|
|
10843
|
+
SORT_OPTIONS.map((option) => /* @__PURE__ */ React20.createElement("option", { key: option.value, value: option.value }, option.label))
|
|
10844
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "flex overflow-hidden rounded-full border border-slate-200 bg-slate-50" }, /* @__PURE__ */ React20.createElement(
|
|
10825
10845
|
"button",
|
|
10826
10846
|
{
|
|
10827
10847
|
type: "button",
|
|
10828
10848
|
onClick: () => setViewMode("grid"),
|
|
10829
10849
|
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"}`
|
|
10830
10850
|
},
|
|
10831
|
-
/* @__PURE__ */
|
|
10851
|
+
/* @__PURE__ */ React20.createElement(Grid, { className: "h-4 w-4" }),
|
|
10832
10852
|
"Grid"
|
|
10833
|
-
), /* @__PURE__ */
|
|
10853
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10834
10854
|
"button",
|
|
10835
10855
|
{
|
|
10836
10856
|
type: "button",
|
|
10837
10857
|
onClick: () => setViewMode("list"),
|
|
10838
10858
|
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"}`
|
|
10839
10859
|
},
|
|
10840
|
-
/* @__PURE__ */
|
|
10860
|
+
/* @__PURE__ */ React20.createElement(List, { className: "h-4 w-4" }),
|
|
10841
10861
|
"List"
|
|
10842
|
-
)), wishlistCount > 0 && /* @__PURE__ */
|
|
10862
|
+
)), wishlistCount > 0 && /* @__PURE__ */ React20.createElement(
|
|
10843
10863
|
Button,
|
|
10844
10864
|
{
|
|
10845
10865
|
variant: "ghost",
|
|
10846
10866
|
className: "text-sm font-semibold text-slate-500 hover:text-red-500",
|
|
10847
10867
|
onClick: handleClearWishlist
|
|
10848
10868
|
},
|
|
10849
|
-
/* @__PURE__ */
|
|
10869
|
+
/* @__PURE__ */ React20.createElement(Trash2, { className: "h-4 w-4" }),
|
|
10850
10870
|
"Clear all"
|
|
10851
|
-
))), isLoading && /* @__PURE__ */
|
|
10871
|
+
))), isLoading && /* @__PURE__ */ React20.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__ */ React20.createElement(
|
|
10852
10872
|
"div",
|
|
10853
10873
|
{
|
|
10854
10874
|
key: index,
|
|
10855
10875
|
className: "h-72 animate-pulse rounded-2xl border border-slate-200 bg-slate-100"
|
|
10856
10876
|
}
|
|
10857
|
-
))), !isLoading && wishlistCount === 0 && /* @__PURE__ */
|
|
10877
|
+
))), !isLoading && wishlistCount === 0 && /* @__PURE__ */ React20.createElement("div", { className: "flex min-h-[30vh] items-center justify-center" }, /* @__PURE__ */ React20.createElement("div", { className: "max-w-2xl rounded-3xl border border-slate-100 bg-white p-12 text-center shadow-xl shadow-primary-50" }, /* @__PURE__ */ React20.createElement("div", { className: "mx-auto flex h-20 w-20 items-center justify-center rounded-full bg-primary-100 text-primary-600" }, /* @__PURE__ */ React20.createElement(Sparkles, { className: "h-10 w-10" })), /* @__PURE__ */ React20.createElement("h2", { className: "mt-6 text-4xl font-bold text-slate-900" }, "Start your wellness wishlist"), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "mt-8 flex flex-wrap justify-center gap-3" }, /* @__PURE__ */ React20.createElement(Button, { onClick: () => router.push("/shop") }, "Discover products"), /* @__PURE__ */ React20.createElement(Button, { variant: "outline", onClick: () => router.push("/categories") }, "Browse categories")))), !isLoading && processedProducts.length > 0 && /* @__PURE__ */ React20.createElement(React20.Fragment, null, viewMode === "grid" ? /* @__PURE__ */ React20.createElement(
|
|
10858
10878
|
motion.div,
|
|
10859
10879
|
{
|
|
10860
10880
|
layout: true,
|
|
10861
10881
|
className: "grid grid-cols-1 gap-5 sm:grid-cols-2 xl:grid-cols-3"
|
|
10862
10882
|
},
|
|
10863
|
-
/* @__PURE__ */
|
|
10883
|
+
/* @__PURE__ */ React20.createElement(AnimatePresence, null, processedProducts.map((product) => /* @__PURE__ */ React20.createElement(
|
|
10864
10884
|
motion.div,
|
|
10865
10885
|
{
|
|
10866
10886
|
key: product.id,
|
|
@@ -10870,17 +10890,17 @@ function WishlistScreen() {
|
|
|
10870
10890
|
exit: { opacity: 0, y: -20 },
|
|
10871
10891
|
transition: { duration: 0.2 }
|
|
10872
10892
|
},
|
|
10873
|
-
/* @__PURE__ */
|
|
10893
|
+
/* @__PURE__ */ React20.createElement(
|
|
10874
10894
|
ProductCard,
|
|
10875
10895
|
{
|
|
10876
10896
|
product,
|
|
10877
|
-
onClickProduct: (p) => router.push(`/products/${p.id}`),
|
|
10897
|
+
onClickProduct: (p) => router.push(buildPath(`/products/${p.id}`)),
|
|
10878
10898
|
onFavorite: () => handleRemoveFromWishlist(product.id),
|
|
10879
10899
|
isFavorited: true
|
|
10880
10900
|
}
|
|
10881
10901
|
)
|
|
10882
10902
|
)))
|
|
10883
|
-
) : /* @__PURE__ */
|
|
10903
|
+
) : /* @__PURE__ */ React20.createElement(motion.div, { layout: true, className: "space-y-4" }, /* @__PURE__ */ React20.createElement(AnimatePresence, null, processedProducts.map((product) => /* @__PURE__ */ React20.createElement(
|
|
10884
10904
|
motion.div,
|
|
10885
10905
|
{
|
|
10886
10906
|
key: product.id,
|
|
@@ -10891,7 +10911,7 @@ function WishlistScreen() {
|
|
|
10891
10911
|
transition: { duration: 0.2 },
|
|
10892
10912
|
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"
|
|
10893
10913
|
},
|
|
10894
|
-
/* @__PURE__ */
|
|
10914
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative h-28 w-full overflow-hidden rounded-2xl bg-white sm:w-40" }, /* @__PURE__ */ React20.createElement(
|
|
10895
10915
|
Image3,
|
|
10896
10916
|
{
|
|
10897
10917
|
fill: true,
|
|
@@ -10900,14 +10920,14 @@ function WishlistScreen() {
|
|
|
10900
10920
|
className: "h-full w-full object-cover"
|
|
10901
10921
|
}
|
|
10902
10922
|
)),
|
|
10903
|
-
/* @__PURE__ */
|
|
10923
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-1 flex-col gap-2" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap items-center justify-between gap-3" }, /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, product.name), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-500" }, product.parentCategories?.map((category) => category?.name).join(", ") || "General wellness")), /* @__PURE__ */ React20.createElement("div", { className: "text-right" }, /* @__PURE__ */ React20.createElement("p", { className: "text-lg font-bold text-primary-600" }, formatPrice(product.finalPrice ?? 0)), product.isDiscounted && /* @__PURE__ */ React20.createElement("p", { className: "text-xs text-emerald-500" }, "You save ", formatPrice(Math.max((product.priceBeforeDiscount ?? 0) - (product.finalPrice ?? 0), 0))))), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap items-center gap-3 text-xs text-slate-500" }, /* @__PURE__ */ React20.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__ */ React20.createElement(Package, { className: "h-3.5 w-3.5" }), product.inventoryCount > 0 ? "In stock" : "Backordered"), product.totalSold > 0 && /* @__PURE__ */ React20.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__ */ React20.createElement(Sparkles, { className: "h-3.5 w-3.5" }), product.totalSold, "+ purchased")), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-wrap gap-2" }, /* @__PURE__ */ React20.createElement(
|
|
10904
10924
|
Button,
|
|
10905
10925
|
{
|
|
10906
10926
|
size: "sm",
|
|
10907
10927
|
onClick: () => router.push(`/products/${product.id}`)
|
|
10908
10928
|
},
|
|
10909
10929
|
"View details"
|
|
10910
|
-
), /* @__PURE__ */
|
|
10930
|
+
), /* @__PURE__ */ React20.createElement(
|
|
10911
10931
|
Button,
|
|
10912
10932
|
{
|
|
10913
10933
|
size: "sm",
|
|
@@ -10917,11 +10937,12 @@ function WishlistScreen() {
|
|
|
10917
10937
|
},
|
|
10918
10938
|
"Remove"
|
|
10919
10939
|
)))
|
|
10920
|
-
))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */
|
|
10940
|
+
))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-slate-200 text-slate-500" }, /* @__PURE__ */ React20.createElement(Package, { className: "h-8 w-8" })), /* @__PURE__ */ React20.createElement("h3", { className: "mt-6 text-2xl font-semibold text-slate-900" }, "Nothing matches those filters"), /* @__PURE__ */ React20.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__ */ React20.createElement(Button, { className: "mt-6", variant: "outline", onClick: () => setOnlyInStock(false) }, "Show all saved products"))))
|
|
10921
10941
|
))));
|
|
10922
10942
|
}
|
|
10923
10943
|
function SearchPage() {
|
|
10924
10944
|
const router = useRouter();
|
|
10945
|
+
const { buildPath } = useBasePath();
|
|
10925
10946
|
const searchParams = useSearchParams();
|
|
10926
10947
|
const searchQuery = searchParams.get("q") || "";
|
|
10927
10948
|
const [products, setProducts] = useState([]);
|
|
@@ -11022,38 +11043,38 @@ function SearchPage() {
|
|
|
11022
11043
|
{
|
|
11023
11044
|
product,
|
|
11024
11045
|
isFavorited: isInWishlist(product.id),
|
|
11025
|
-
onClickProduct: (p) => router.push(`/products/${p.id}`)
|
|
11046
|
+
onClickProduct: (p) => router.push(buildPath(`/products/${p.id}`))
|
|
11026
11047
|
}
|
|
11027
11048
|
))) : hasSearched ? /* @__PURE__ */ React.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React.createElement("div", { className: "text-gray-500 text-lg mb-4" }, 'No products found for "', searchQuery, '"'), /* @__PURE__ */ React.createElement("p", { className: "text-gray-500 mb-6" }, "Try different keywords or check out our", " ", /* @__PURE__ */ React.createElement(Link8, { href: "/shop", className: "text-primary-600 hover:underline ml-1 font-medium" }, "featured products"))) : /* @__PURE__ */ React.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React.createElement("p", { className: "text-gray-500" }, "Enter a search term to find products"))));
|
|
11028
11049
|
}
|
|
11029
11050
|
function CategoriesScreen() {
|
|
11030
11051
|
const { categories, isLoading } = useCategories();
|
|
11031
11052
|
const router = useRouter();
|
|
11032
|
-
return /* @__PURE__ */
|
|
11053
|
+
return /* @__PURE__ */ React20.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React20.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement(
|
|
11033
11054
|
motion.div,
|
|
11034
11055
|
{
|
|
11035
11056
|
initial: { opacity: 0, y: 24 },
|
|
11036
11057
|
animate: { opacity: 1, y: 0 },
|
|
11037
11058
|
className: "space-y-6"
|
|
11038
11059
|
},
|
|
11039
|
-
/* @__PURE__ */
|
|
11040
|
-
/* @__PURE__ */
|
|
11041
|
-
))), /* @__PURE__ */
|
|
11060
|
+
/* @__PURE__ */ React20.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__ */ React20.createElement(Package, { className: "h-4 w-4" }), "Product Categories"),
|
|
11061
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React20.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Browse Our Product Range"), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur" }, /* @__PURE__ */ React20.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick tip"), /* @__PURE__ */ React20.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.")))
|
|
11062
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "relative -mt-16 pb-16" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React20.createElement(
|
|
11042
11063
|
motion.div,
|
|
11043
11064
|
{
|
|
11044
11065
|
initial: { opacity: 0, y: 24 },
|
|
11045
11066
|
animate: { opacity: 1, y: 0 },
|
|
11046
11067
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
|
|
11047
11068
|
},
|
|
11048
|
-
/* @__PURE__ */
|
|
11049
|
-
isLoading ? /* @__PURE__ */
|
|
11069
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3 text-sm text-slate-500 mb-6" }, /* @__PURE__ */ React20.createElement(Sparkles, { className: "h-4 w-4 text-primary-500" }), /* @__PURE__ */ React20.createElement("span", null, "Browse our complete product catalog organized by categories.")),
|
|
11070
|
+
isLoading ? /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, [...Array(8)].map((_, i) => /* @__PURE__ */ React20.createElement("div", { key: i, className: "animate-pulse" }, /* @__PURE__ */ React20.createElement("div", { className: "bg-gray-200 rounded-lg aspect-square mb-2" }), /* @__PURE__ */ React20.createElement("div", { className: "h-4 bg-gray-200 rounded w-3/4 mb-1" }), /* @__PURE__ */ React20.createElement("div", { className: "h-3 bg-gray-200 rounded w-1/2" })))) : categories.length > 0 ? /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, categories.map((category) => /* @__PURE__ */ React20.createElement(
|
|
11050
11071
|
Link8,
|
|
11051
11072
|
{
|
|
11052
11073
|
key: category.id,
|
|
11053
11074
|
href: `/shop?category=${category.name}`,
|
|
11054
11075
|
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"
|
|
11055
11076
|
},
|
|
11056
|
-
/* @__PURE__ */
|
|
11077
|
+
/* @__PURE__ */ React20.createElement("div", { className: "relative aspect-square w-full overflow-hidden rounded-lg bg-gray-50 mb-3" }, category.image ? /* @__PURE__ */ React20.createElement(
|
|
11057
11078
|
Image3,
|
|
11058
11079
|
{
|
|
11059
11080
|
src: category.image,
|
|
@@ -11062,10 +11083,10 @@ function CategoriesScreen() {
|
|
|
11062
11083
|
className: "object-cover transition-transform group-hover:scale-105",
|
|
11063
11084
|
sizes: "(max-width: 768px) 50vw, (max-width: 1200px) 33vw, 25vw"
|
|
11064
11085
|
}
|
|
11065
|
-
) : /* @__PURE__ */
|
|
11066
|
-
/* @__PURE__ */
|
|
11067
|
-
category.productCount > 0 && /* @__PURE__ */
|
|
11068
|
-
))) : /* @__PURE__ */
|
|
11086
|
+
) : /* @__PURE__ */ React20.createElement("div", { className: "flex h-full w-full items-center justify-center bg-gray-100 text-gray-400" }, /* @__PURE__ */ React20.createElement(Package, { className: "h-12 w-12" }))),
|
|
11087
|
+
/* @__PURE__ */ React20.createElement("h3", { className: "text-lg font-semibold text-gray-900 group-hover:text-primary-600 transition-colors" }, category.name),
|
|
11088
|
+
category.productCount > 0 && /* @__PURE__ */ React20.createElement("p", { className: "mt-1 text-sm text-gray-500" }, category.productCount, " ", category.productCount === 1 ? "product" : "products")
|
|
11089
|
+
))) : /* @__PURE__ */ React20.createElement(
|
|
11069
11090
|
EmptyState,
|
|
11070
11091
|
{
|
|
11071
11092
|
title: "No categories found",
|
|
@@ -11231,7 +11252,7 @@ function Header() {
|
|
|
11231
11252
|
{ href: "/about", label: "About" },
|
|
11232
11253
|
{ href: "/contact", label: "Contact" }
|
|
11233
11254
|
];
|
|
11234
|
-
return /* @__PURE__ */
|
|
11255
|
+
return /* @__PURE__ */ React20.createElement("header", { className: "sticky top-0 z-40 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-sm" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between h-20" }, /* @__PURE__ */ React20.createElement(Link8, { href: "/", className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement("div", { className: "relative w-12 h-12" }, /* @__PURE__ */ React20.createElement(
|
|
11235
11256
|
Image3,
|
|
11236
11257
|
{
|
|
11237
11258
|
src: config.logo,
|
|
@@ -11239,7 +11260,7 @@ function Header() {
|
|
|
11239
11260
|
fill: true,
|
|
11240
11261
|
className: "object-contain"
|
|
11241
11262
|
}
|
|
11242
|
-
)), /* @__PURE__ */
|
|
11263
|
+
)), /* @__PURE__ */ React20.createElement("span", { className: "text-2xl font-bold text-gray-900 hidden sm:block" }, config.storeName)), /* @__PURE__ */ React20.createElement("nav", { className: "hidden lg:flex items-center gap-8" }, navLinks.map((link) => /* @__PURE__ */ React20.createElement(
|
|
11243
11264
|
Link8,
|
|
11244
11265
|
{
|
|
11245
11266
|
key: link.href,
|
|
@@ -11247,16 +11268,16 @@ function Header() {
|
|
|
11247
11268
|
className: "text-gray-700 hover:text-primary-600 font-medium transition-colors relative group"
|
|
11248
11269
|
},
|
|
11249
11270
|
link.label,
|
|
11250
|
-
/* @__PURE__ */
|
|
11251
|
-
))), /* @__PURE__ */
|
|
11271
|
+
/* @__PURE__ */ React20.createElement("span", { className: "absolute bottom-0 left-0 w-0 h-0.5 bg-primary-600 group-hover:w-full transition-all duration-300" })
|
|
11272
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
11252
11273
|
"button",
|
|
11253
11274
|
{
|
|
11254
11275
|
onClick: () => setIsSearchOpen(!isSearchOpen),
|
|
11255
11276
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors",
|
|
11256
11277
|
"aria-label": "Search"
|
|
11257
11278
|
},
|
|
11258
|
-
/* @__PURE__ */
|
|
11259
|
-
), /* @__PURE__ */
|
|
11279
|
+
/* @__PURE__ */ React20.createElement(Search, { className: "w-5 h-5 text-gray-700" })
|
|
11280
|
+
), /* @__PURE__ */ React20.createElement(AnimatePresence, null, isSearchOpen && /* @__PURE__ */ React20.createElement(
|
|
11260
11281
|
motion.div,
|
|
11261
11282
|
{
|
|
11262
11283
|
initial: { opacity: 0, width: 0 },
|
|
@@ -11264,7 +11285,7 @@ function Header() {
|
|
|
11264
11285
|
exit: { opacity: 0, width: 0 },
|
|
11265
11286
|
className: "absolute right-0 top-full mt-2 bg-white rounded-lg shadow-lg overflow-hidden"
|
|
11266
11287
|
},
|
|
11267
|
-
/* @__PURE__ */
|
|
11288
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center p-2 w-64" }, /* @__PURE__ */ React20.createElement(Search, { className: "w-5 h-5 text-gray-400 mr-2" }), /* @__PURE__ */ React20.createElement(
|
|
11268
11289
|
"input",
|
|
11269
11290
|
{
|
|
11270
11291
|
type: "text",
|
|
@@ -11279,36 +11300,36 @@ function Header() {
|
|
|
11279
11300
|
className: "w-full outline-none text-gray-700",
|
|
11280
11301
|
autoFocus: true
|
|
11281
11302
|
}
|
|
11282
|
-
), searchQuery && /* @__PURE__ */
|
|
11303
|
+
), searchQuery && /* @__PURE__ */ React20.createElement(
|
|
11283
11304
|
"button",
|
|
11284
11305
|
{
|
|
11285
11306
|
onClick: () => setSearchQuery(""),
|
|
11286
11307
|
className: "text-gray-400 hover:text-gray-600"
|
|
11287
11308
|
},
|
|
11288
|
-
/* @__PURE__ */
|
|
11309
|
+
/* @__PURE__ */ React20.createElement(X, { className: "w-4 h-4" })
|
|
11289
11310
|
))
|
|
11290
|
-
))), /* @__PURE__ */
|
|
11311
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React20.createElement(Link8, { href: "/wishlist", className: "relative p-2 text-gray-700 hover:text-red-500 transition-colors" }, /* @__PURE__ */ React20.createElement(Heart, { className: "w-6 h-6" }), wishlistCount > 0 && /* @__PURE__ */ React20.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__ */ React20.createElement(Link8, { href: "/cart", className: "relative p-2 text-gray-700 hover:text-primary-600 transition-colors" }, /* @__PURE__ */ React20.createElement(ShoppingCart, { className: "w-6 h-6" }), cart?.cartBody?.items?.length && cart.cartBody?.items?.length > 0 ? /* @__PURE__ */ React20.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__ */ React20.createElement(
|
|
11291
11312
|
Link8,
|
|
11292
11313
|
{
|
|
11293
11314
|
href: "/account",
|
|
11294
11315
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors"
|
|
11295
11316
|
},
|
|
11296
|
-
/* @__PURE__ */
|
|
11297
|
-
) : /* @__PURE__ */
|
|
11317
|
+
/* @__PURE__ */ React20.createElement(User, { className: "w-6 h-6 text-gray-700" })
|
|
11318
|
+
) : /* @__PURE__ */ React20.createElement(
|
|
11298
11319
|
Link8,
|
|
11299
11320
|
{
|
|
11300
11321
|
href: "/login",
|
|
11301
11322
|
className: "hidden sm:block px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors font-medium"
|
|
11302
11323
|
},
|
|
11303
11324
|
"Sign In"
|
|
11304
|
-
)), /* @__PURE__ */
|
|
11325
|
+
)), /* @__PURE__ */ React20.createElement(
|
|
11305
11326
|
"button",
|
|
11306
11327
|
{
|
|
11307
11328
|
className: "lg:hidden p-2 hover:bg-gray-100 rounded-lg transition-colors",
|
|
11308
11329
|
onClick: () => setIsMobileMenuOpen(!isMobileMenuOpen)
|
|
11309
11330
|
},
|
|
11310
|
-
isMobileMenuOpen ? /* @__PURE__ */
|
|
11311
|
-
)), /* @__PURE__ */
|
|
11331
|
+
isMobileMenuOpen ? /* @__PURE__ */ React20.createElement(X, { className: "w-6 h-6" }) : /* @__PURE__ */ React20.createElement(Menu, { className: "w-6 h-6" })
|
|
11332
|
+
)), /* @__PURE__ */ React20.createElement(AnimatePresence, null, isMobileMenuOpen && /* @__PURE__ */ React20.createElement(
|
|
11312
11333
|
motion.div,
|
|
11313
11334
|
{
|
|
11314
11335
|
initial: { opacity: 0, height: 0 },
|
|
@@ -11316,7 +11337,7 @@ function Header() {
|
|
|
11316
11337
|
exit: { opacity: 0, height: 0 },
|
|
11317
11338
|
className: "lg:hidden overflow-hidden border-t border-gray-200"
|
|
11318
11339
|
},
|
|
11319
|
-
/* @__PURE__ */
|
|
11340
|
+
/* @__PURE__ */ React20.createElement("nav", { className: "flex flex-col gap-1 py-2" }, navLinks.map((link) => /* @__PURE__ */ React20.createElement(
|
|
11320
11341
|
Link8,
|
|
11321
11342
|
{
|
|
11322
11343
|
key: link.href,
|
|
@@ -11325,7 +11346,7 @@ function Header() {
|
|
|
11325
11346
|
onClick: () => setIsMobileMenuOpen(false)
|
|
11326
11347
|
},
|
|
11327
11348
|
link.label
|
|
11328
|
-
)), !isAuthenticated && /* @__PURE__ */
|
|
11349
|
+
)), !isAuthenticated && /* @__PURE__ */ React20.createElement(
|
|
11329
11350
|
Link8,
|
|
11330
11351
|
{
|
|
11331
11352
|
href: "/login",
|
|
@@ -11357,51 +11378,51 @@ function Footer() {
|
|
|
11357
11378
|
{ label: "Shipping Info", href: "/shipping" },
|
|
11358
11379
|
{ label: "Returns", href: "/returns" }
|
|
11359
11380
|
]};
|
|
11360
|
-
return /* @__PURE__ */
|
|
11381
|
+
return /* @__PURE__ */ React20.createElement("footer", { className: "bg-gray-900 text-gray-300" }, /* @__PURE__ */ React20.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12" }, /* @__PURE__ */ React20.createElement("div", { className: "lg:col-span-2" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-2xl font-bold text-white mb-4" }, config.storeName), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement(Mail, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React20.createElement("span", null, "support@", config.storeName.toLowerCase().replace(/\s+/g, ""), ".com")), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement(Phone, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React20.createElement("span", null, "+1 (555) 123-4567")), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React20.createElement(MapPin, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React20.createElement("span", null, "123 Store Street, City, Country")))), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Shop"), /* @__PURE__ */ React20.createElement("ul", { className: "space-y-2" }, footerLinks.shop.map((link) => /* @__PURE__ */ React20.createElement("li", { key: link.href }, /* @__PURE__ */ React20.createElement(
|
|
11361
11382
|
Link8,
|
|
11362
11383
|
{
|
|
11363
11384
|
href: link.href,
|
|
11364
11385
|
className: "hover:text-primary-500 transition-colors"
|
|
11365
11386
|
},
|
|
11366
11387
|
link.label
|
|
11367
|
-
))))), /* @__PURE__ */
|
|
11388
|
+
))))), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Account"), /* @__PURE__ */ React20.createElement("ul", { className: "space-y-2" }, footerLinks.account.map((link) => /* @__PURE__ */ React20.createElement("li", { key: link.href }, /* @__PURE__ */ React20.createElement(
|
|
11368
11389
|
Link8,
|
|
11369
11390
|
{
|
|
11370
11391
|
href: link.href,
|
|
11371
11392
|
className: "hover:text-primary-500 transition-colors"
|
|
11372
11393
|
},
|
|
11373
11394
|
link.label
|
|
11374
|
-
))))), /* @__PURE__ */
|
|
11395
|
+
))))), /* @__PURE__ */ React20.createElement("div", null, /* @__PURE__ */ React20.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Support"), /* @__PURE__ */ React20.createElement("ul", { className: "space-y-2" }, footerLinks.support.map((link) => /* @__PURE__ */ React20.createElement("li", { key: link.href }, /* @__PURE__ */ React20.createElement(
|
|
11375
11396
|
Link8,
|
|
11376
11397
|
{
|
|
11377
11398
|
href: link.href,
|
|
11378
11399
|
className: "hover:text-primary-500 transition-colors"
|
|
11379
11400
|
},
|
|
11380
11401
|
link.label
|
|
11381
|
-
)))))), /* @__PURE__ */
|
|
11402
|
+
)))))), /* @__PURE__ */ React20.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__ */ React20.createElement("p", { className: "text-gray-400 text-sm" }, "\xA9 ", (/* @__PURE__ */ new Date()).getFullYear(), " ", config.storeName, ". All rights reserved."), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React20.createElement(
|
|
11382
11403
|
"a",
|
|
11383
11404
|
{
|
|
11384
11405
|
href: "#",
|
|
11385
11406
|
className: "w-10 h-10 bg-gray-800 hover:bg-primary-600 rounded-full flex items-center justify-center transition-colors"
|
|
11386
11407
|
},
|
|
11387
|
-
/* @__PURE__ */
|
|
11388
|
-
), /* @__PURE__ */
|
|
11408
|
+
/* @__PURE__ */ React20.createElement(Facebook, { className: "w-5 h-5" })
|
|
11409
|
+
), /* @__PURE__ */ React20.createElement(
|
|
11389
11410
|
"a",
|
|
11390
11411
|
{
|
|
11391
11412
|
href: "#",
|
|
11392
11413
|
className: "w-10 h-10 bg-gray-800 hover:bg-primary-600 rounded-full flex items-center justify-center transition-colors"
|
|
11393
11414
|
},
|
|
11394
|
-
/* @__PURE__ */
|
|
11395
|
-
), /* @__PURE__ */
|
|
11415
|
+
/* @__PURE__ */ React20.createElement(Twitter, { className: "w-5 h-5" })
|
|
11416
|
+
), /* @__PURE__ */ React20.createElement(
|
|
11396
11417
|
"a",
|
|
11397
11418
|
{
|
|
11398
11419
|
href: "#",
|
|
11399
11420
|
className: "w-10 h-10 bg-gray-800 hover:bg-primary-600 rounded-full flex items-center justify-center transition-colors"
|
|
11400
11421
|
},
|
|
11401
|
-
/* @__PURE__ */
|
|
11422
|
+
/* @__PURE__ */ React20.createElement(Instagram, { className: "w-5 h-5" })
|
|
11402
11423
|
)))));
|
|
11403
11424
|
}
|
|
11404
11425
|
|
|
11405
|
-
export { AddressesScreen, AuthProvider, Badge, Button, CartItem, CartProvider, CartScreen, CategoriesScreen, CheckoutScreen, CurrentOrdersScreen, EcommerceProvider, EmptyState, Footer, Header, Input, LoginScreen, Modal, NewAddressPage as NewAddressScreen, OrderCard, OrderCardSkeleton, OrdersScreen, ProductCard, ProductCardSkeleton, ProductDetailScreen, ProfileScreen, RegisterScreen, SearchPage as SearchResultsScreen, ShopScreen, Skeleton, ThemeProvider, WishlistProvider, WishlistScreen, formatDate, formatPrice, generateColorShades, getApiConfiguration, getInitials, hexToRgb, initializeApiAdapter, truncate, useAddresses, useAuth, useCart, useCategories, useCurrentOrders, useOrder, useOrders, useProduct, useProducts, useTheme, useWishlist };
|
|
11426
|
+
export { AddressesScreen, AuthProvider, Badge, Button, CartItem, CartProvider, CartScreen, CategoriesScreen, CheckoutScreen, CurrentOrdersScreen, EcommerceProvider, EmptyState, Footer, Header, Input, LoginScreen, Modal, NewAddressPage as NewAddressScreen, OrderCard, OrderCardSkeleton, OrdersScreen, ProductCard, ProductCardSkeleton, ProductDetailScreen, ProfileScreen, RegisterScreen, SearchPage as SearchResultsScreen, ShopScreen, Skeleton, ThemeProvider, WishlistProvider, WishlistScreen, formatDate, formatPrice, generateColorShades, getApiConfiguration, getInitials, hexToRgb, initializeApiAdapter, truncate, useAddresses, useAuth, useBasePath, useCart, useCategories, useCurrentOrders, useOrder, useOrders, useProduct, useProducts, useTheme, useWishlist };
|
|
11406
11427
|
//# sourceMappingURL=index.mjs.map
|
|
11407
11428
|
//# sourceMappingURL=index.mjs.map
|