hey-pharmacist-ecommerce 1.1.6 → 1.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +600 -597
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +404 -401
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/AddressFormModal.tsx +2 -2
- package/src/lib/Apis/wrapper.ts +6 -2
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import
|
|
2
|
+
import React21, { createContext, forwardRef, useContext, useEffect, useState, useCallback, useMemo, useRef } from 'react';
|
|
3
3
|
import globalAxios4 from 'axios';
|
|
4
4
|
import { Toaster, toast } from 'sonner';
|
|
5
5
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
@@ -198,7 +198,7 @@ function ThemeProvider({ config, children }) {
|
|
|
198
198
|
root.style.setProperty(`--header-to`, secondaryShades[600]);
|
|
199
199
|
}
|
|
200
200
|
}, [config]);
|
|
201
|
-
return /* @__PURE__ */
|
|
201
|
+
return /* @__PURE__ */ React21.createElement(ThemeContext.Provider, { value: { config } }, children);
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
// src/providers/AuthProvider.tsx
|
|
@@ -2048,7 +2048,7 @@ function AuthProvider({ children }) {
|
|
|
2048
2048
|
updateUser,
|
|
2049
2049
|
refreshUser
|
|
2050
2050
|
};
|
|
2051
|
-
return /* @__PURE__ */
|
|
2051
|
+
return /* @__PURE__ */ React21.createElement(AuthContext.Provider, { value }, children);
|
|
2052
2052
|
}
|
|
2053
2053
|
var AddressesApiAxiosParamCreator = function(configuration) {
|
|
2054
2054
|
return {
|
|
@@ -6844,7 +6844,7 @@ function CartProvider({ children }) {
|
|
|
6844
6844
|
clearCart,
|
|
6845
6845
|
refreshCart
|
|
6846
6846
|
};
|
|
6847
|
-
return /* @__PURE__ */
|
|
6847
|
+
return /* @__PURE__ */ React21.createElement(CartContext.Provider, { value }, children);
|
|
6848
6848
|
}
|
|
6849
6849
|
|
|
6850
6850
|
// src/lib/Apis/wrapper.ts
|
|
@@ -6874,11 +6874,14 @@ globalAxios4.interceptors.request.use(async (config) => {
|
|
|
6874
6874
|
}
|
|
6875
6875
|
return config;
|
|
6876
6876
|
});
|
|
6877
|
-
var
|
|
6877
|
+
var abortController;
|
|
6878
|
+
if (typeof window !== "undefined") {
|
|
6879
|
+
abortController = new AbortController();
|
|
6880
|
+
}
|
|
6878
6881
|
var AXIOS_CONFIG = new Configuration({
|
|
6879
6882
|
basePath: BaseUrl,
|
|
6880
6883
|
baseOptions: {
|
|
6881
|
-
signal:
|
|
6884
|
+
signal: abortController?.signal,
|
|
6882
6885
|
timeout: 2e4
|
|
6883
6886
|
}
|
|
6884
6887
|
});
|
|
@@ -6984,7 +6987,7 @@ function WishlistProvider({ children }) {
|
|
|
6984
6987
|
const refreshWishlist = async () => {
|
|
6985
6988
|
await fetchWishlist();
|
|
6986
6989
|
};
|
|
6987
|
-
return /* @__PURE__ */
|
|
6990
|
+
return /* @__PURE__ */ React21.createElement(
|
|
6988
6991
|
WishlistContext.Provider,
|
|
6989
6992
|
{
|
|
6990
6993
|
value: {
|
|
@@ -7017,7 +7020,7 @@ function BasePathProvider({ basePath = "", children }) {
|
|
|
7017
7020
|
if (path.startsWith("/")) return `${normalized}${path}`;
|
|
7018
7021
|
return `${normalized}/${path}`;
|
|
7019
7022
|
};
|
|
7020
|
-
return /* @__PURE__ */
|
|
7023
|
+
return /* @__PURE__ */ React21.createElement(BasePathContext.Provider, { value: { basePath: normalized, buildPath } }, children);
|
|
7021
7024
|
}
|
|
7022
7025
|
function useBasePath() {
|
|
7023
7026
|
const ctx = useContext(BasePathContext);
|
|
@@ -7028,10 +7031,10 @@ function EcommerceProvider({ config, children, withToaster = true, basePath = ""
|
|
|
7028
7031
|
useEffect(() => {
|
|
7029
7032
|
initializeApiAdapter(config);
|
|
7030
7033
|
}, [config]);
|
|
7031
|
-
const [client] =
|
|
7034
|
+
const [client] = React21.useState(
|
|
7032
7035
|
new QueryClient({ defaultOptions: { queries: { staleTime: 5e3 } } })
|
|
7033
7036
|
);
|
|
7034
|
-
return /* @__PURE__ */
|
|
7037
|
+
return /* @__PURE__ */ React21.createElement(QueryClientProvider, { client }, /* @__PURE__ */ React21.createElement(ThemeProvider, { config }, /* @__PURE__ */ React21.createElement(BasePathProvider, { basePath }, /* @__PURE__ */ React21.createElement(AuthProvider, null, /* @__PURE__ */ React21.createElement(CartProvider, null, /* @__PURE__ */ React21.createElement(WishlistProvider, null, children, withToaster && /* @__PURE__ */ React21.createElement(Toaster, { position: "top-right", richColors: true })))))));
|
|
7035
7038
|
}
|
|
7036
7039
|
|
|
7037
7040
|
// src/lib/utils/format.ts
|
|
@@ -7121,7 +7124,7 @@ function ProductCard({
|
|
|
7121
7124
|
alt: product.name || "Product image"
|
|
7122
7125
|
};
|
|
7123
7126
|
}, [product.productMedia, product.name]);
|
|
7124
|
-
return /* @__PURE__ */
|
|
7127
|
+
return /* @__PURE__ */ React21.createElement(
|
|
7125
7128
|
motion.article,
|
|
7126
7129
|
{
|
|
7127
7130
|
className: "relative group bg-white rounded-xl overflow-hidden shadow-sm hover:shadow-md transition-all duration-300 border border-gray-100 hover:border-gray-200 flex h-[420px] flex-col",
|
|
@@ -7134,7 +7137,7 @@ function ProductCard({
|
|
|
7134
7137
|
onClick: handleCardClick,
|
|
7135
7138
|
onKeyDown: handleKeyDown
|
|
7136
7139
|
},
|
|
7137
|
-
/* @__PURE__ */
|
|
7140
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative h-48 w-full overflow-hidden bg-gray-50" }, /* @__PURE__ */ React21.createElement(AnimatePresence, null, !isImageLoaded && /* @__PURE__ */ React21.createElement(
|
|
7138
7141
|
motion.div,
|
|
7139
7142
|
{
|
|
7140
7143
|
className: "absolute inset-0 bg-gray-200 animate-pulse",
|
|
@@ -7142,7 +7145,7 @@ function ProductCard({
|
|
|
7142
7145
|
exit: { opacity: 0 },
|
|
7143
7146
|
transition: { duration: 0.2 }
|
|
7144
7147
|
}
|
|
7145
|
-
)), product.productMedia?.[0]?.file && /* @__PURE__ */
|
|
7148
|
+
)), product.productMedia?.[0]?.file && /* @__PURE__ */ React21.createElement(
|
|
7146
7149
|
Image3,
|
|
7147
7150
|
{
|
|
7148
7151
|
src: product.productMedia?.[0]?.file || "/placeholder-product.jpg",
|
|
@@ -7153,7 +7156,7 @@ function ProductCard({
|
|
|
7153
7156
|
priority: false,
|
|
7154
7157
|
onLoad: handleImageLoad
|
|
7155
7158
|
}
|
|
7156
|
-
), /* @__PURE__ */
|
|
7159
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "absolute top-3 left-3 flex flex-col gap-2 z-10" }, product.isDiscounted && /* @__PURE__ */ React21.createElement(
|
|
7157
7160
|
motion.span,
|
|
7158
7161
|
{
|
|
7159
7162
|
initial: { scale: 0.9, opacity: 0 },
|
|
@@ -7163,7 +7166,7 @@ function ProductCard({
|
|
|
7163
7166
|
"-",
|
|
7164
7167
|
product.discountAmount,
|
|
7165
7168
|
"%"
|
|
7166
|
-
), product.inventoryCount === 0 && /* @__PURE__ */
|
|
7169
|
+
), product.inventoryCount === 0 && /* @__PURE__ */ React21.createElement(
|
|
7167
7170
|
motion.span,
|
|
7168
7171
|
{
|
|
7169
7172
|
initial: { scale: 0.9, opacity: 0 },
|
|
@@ -7171,7 +7174,7 @@ function ProductCard({
|
|
|
7171
7174
|
className: "inline-flex items-center justify-center px-2.5 py-1 rounded-full text-xs font-bold text-white bg-red-600"
|
|
7172
7175
|
},
|
|
7173
7176
|
"Out of Stock"
|
|
7174
|
-
)), showFavoriteButton && /* @__PURE__ */
|
|
7177
|
+
)), showFavoriteButton && /* @__PURE__ */ React21.createElement(
|
|
7175
7178
|
motion.button,
|
|
7176
7179
|
{
|
|
7177
7180
|
type: "button",
|
|
@@ -7181,10 +7184,10 @@ function ProductCard({
|
|
|
7181
7184
|
whileTap: { scale: 0.95 },
|
|
7182
7185
|
"aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
|
|
7183
7186
|
},
|
|
7184
|
-
/* @__PURE__ */
|
|
7187
|
+
/* @__PURE__ */ React21.createElement(Heart, { className: `w-5 h-5 ${isFavorite ? "fill-current" : ""}` })
|
|
7185
7188
|
)),
|
|
7186
|
-
/* @__PURE__ */
|
|
7187
|
-
showFavoriteButton && /* @__PURE__ */
|
|
7189
|
+
/* @__PURE__ */ React21.createElement("div", { className: "absolute top-4 left-4 flex flex-col gap-2" }, product.inventoryCount === 0 && /* @__PURE__ */ React21.createElement("span", { className: "px-3 py-1 rounded-full text-sm font-bold bg-red-100 text-red-800" }, "Out of Stock")),
|
|
7190
|
+
showFavoriteButton && /* @__PURE__ */ React21.createElement(
|
|
7188
7191
|
"button",
|
|
7189
7192
|
{
|
|
7190
7193
|
type: "button",
|
|
@@ -7192,10 +7195,10 @@ function ProductCard({
|
|
|
7192
7195
|
className: `absolute top-2 right-2 p-2 rounded-full transition-colors ${isFavorite ? "text-red-500" : "text-gray-400 hover:text-red-500"}`,
|
|
7193
7196
|
"aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
|
|
7194
7197
|
},
|
|
7195
|
-
/* @__PURE__ */
|
|
7198
|
+
/* @__PURE__ */ React21.createElement(Heart, { className: `w-5 h-5 ${isFavorite ? "fill-current" : ""}` })
|
|
7196
7199
|
),
|
|
7197
|
-
/* @__PURE__ */
|
|
7198
|
-
/* @__PURE__ */
|
|
7200
|
+
/* @__PURE__ */ React21.createElement("div", { className: "p-4" }, product.parentCategories && product.parentCategories?.length > 0 && /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-gray-500 uppercase tracking-wider mb-2" }, product.parentCategories?.map((category) => category?.name).join(", ") || "No categories"), /* @__PURE__ */ React21.createElement("div", { className: "mb-2" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900 line-clamp-1 group-hover:text-primary-600 transition-colors" }, product.name), product?.sku && /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-gray-400 mt-1" }, "SKU: ", product.sku)), /* @__PURE__ */ React21.createElement("div", { className: "flex items-baseline gap-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React21.createElement("span", { className: "text-2xl font-bold text-gray-900" }, formatPrice(product.finalPrice)), product.inventoryCount > 0 && /* @__PURE__ */ React21.createElement("span", { className: "text-xs text-gray-500" }, product.inventoryCount > 0 ? "In Stock" : "Out of Stock")), product.priceBeforeDiscount && product.priceBeforeDiscount > product.finalPrice && /* @__PURE__ */ React21.createElement("span", { className: "text-sm text-gray-500 line-through" }, formatPrice(product.priceBeforeDiscount)))),
|
|
7201
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-auto p-4 pt-0" }, /* @__PURE__ */ React21.createElement(
|
|
7199
7202
|
"button",
|
|
7200
7203
|
{
|
|
7201
7204
|
type: "button",
|
|
@@ -7206,7 +7209,7 @@ function ProductCard({
|
|
|
7206
7209
|
className: `w-full flex items-center justify-center rounded-md px-3 py-2 text-sm font-medium bg-primary-600 hover:bg-primary-700 text-white`
|
|
7207
7210
|
},
|
|
7208
7211
|
"View Product"
|
|
7209
|
-
), showFavoriteButton && /* @__PURE__ */
|
|
7212
|
+
), showFavoriteButton && /* @__PURE__ */ React21.createElement(
|
|
7210
7213
|
"button",
|
|
7211
7214
|
{
|
|
7212
7215
|
type: "button",
|
|
@@ -7214,7 +7217,7 @@ function ProductCard({
|
|
|
7214
7217
|
className: "mt-2 w-full flex items-center justify-center rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-primary-600 hover:bg-gray-50",
|
|
7215
7218
|
"aria-label": isFavorite ? "Remove from wishlist" : "Add to wishlist"
|
|
7216
7219
|
},
|
|
7217
|
-
/* @__PURE__ */
|
|
7220
|
+
/* @__PURE__ */ React21.createElement(
|
|
7218
7221
|
Heart,
|
|
7219
7222
|
{
|
|
7220
7223
|
className: `mr-2 h-4 w-4 ${isFavorite ? "fill-red-500 text-red-500" : "text-primary-600"}`
|
|
@@ -7225,13 +7228,13 @@ function ProductCard({
|
|
|
7225
7228
|
);
|
|
7226
7229
|
}
|
|
7227
7230
|
function Skeleton({ className = "" }) {
|
|
7228
|
-
return /* @__PURE__ */
|
|
7231
|
+
return /* @__PURE__ */ React21.createElement("div", { className: `animate-pulse bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 bg-[length:200%_100%] rounded ${className}` });
|
|
7229
7232
|
}
|
|
7230
7233
|
function ProductCardSkeleton() {
|
|
7231
|
-
return /* @__PURE__ */
|
|
7234
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "bg-white rounded-2xl overflow-hidden shadow-sm" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-64 w-full" }), /* @__PURE__ */ React21.createElement("div", { className: "p-4 space-y-3" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-6 w-3/4" }), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-4 w-1/2" }), /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-center pt-2" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-8 w-24" }), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-10 w-10 rounded-full" }))));
|
|
7232
7235
|
}
|
|
7233
7236
|
function OrderCardSkeleton() {
|
|
7234
|
-
return /* @__PURE__ */
|
|
7237
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "bg-white rounded-2xl p-6 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-start mb-4" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-2 flex-1" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-6 w-32" }), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-4 w-48" })), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-6 w-20 rounded-full" })), /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-4 w-full" }), /* @__PURE__ */ React21.createElement(Skeleton, { className: "h-4 w-2/3" })));
|
|
7235
7238
|
}
|
|
7236
7239
|
var MotionDiv = dynamic(() => import('framer-motion').then((mod) => mod.motion.div), {
|
|
7237
7240
|
ssr: false
|
|
@@ -7257,14 +7260,14 @@ function Button({
|
|
|
7257
7260
|
md: "px-6 py-3 text-base",
|
|
7258
7261
|
lg: "px-8 py-4 text-lg"
|
|
7259
7262
|
};
|
|
7260
|
-
return /* @__PURE__ */
|
|
7263
|
+
return /* @__PURE__ */ React21.createElement(
|
|
7261
7264
|
MotionDiv,
|
|
7262
7265
|
{
|
|
7263
7266
|
whileHover: { scale: 1.02 },
|
|
7264
7267
|
whileTap: { scale: 0.98 },
|
|
7265
7268
|
className: "inline-block"
|
|
7266
7269
|
},
|
|
7267
|
-
/* @__PURE__ */
|
|
7270
|
+
/* @__PURE__ */ React21.createElement(
|
|
7268
7271
|
"button",
|
|
7269
7272
|
{
|
|
7270
7273
|
className: `${baseStyles} ${variants[variant]} ${sizes[size]} ${className}`,
|
|
@@ -7273,18 +7276,18 @@ function Button({
|
|
|
7273
7276
|
"aria-busy": isLoading,
|
|
7274
7277
|
...props
|
|
7275
7278
|
},
|
|
7276
|
-
isLoading ? /* @__PURE__ */
|
|
7279
|
+
isLoading ? /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("svg", { className: "animate-spin h-5 w-5", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "aria-hidden": "true" }, /* @__PURE__ */ React21.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ React21.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })), "Loading...") : children
|
|
7277
7280
|
)
|
|
7278
7281
|
);
|
|
7279
7282
|
}
|
|
7280
7283
|
|
|
7281
7284
|
// src/components/EmptyState.tsx
|
|
7282
7285
|
function EmptyState({ icon: Icon, title, description, actionLabel, onAction }) {
|
|
7283
|
-
return /* @__PURE__ */
|
|
7286
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center justify-center py-16 px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "w-24 h-24 bg-gray-100 rounded-full flex items-center justify-center mb-6" }, /* @__PURE__ */ React21.createElement(Icon, { className: "w-12 h-12 text-gray-400" })), /* @__PURE__ */ React21.createElement("h3", { className: "text-2xl font-bold text-gray-900 mb-2" }, title), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-600 text-center max-w-md mb-8" }, description), actionLabel && onAction && /* @__PURE__ */ React21.createElement(Button, { onClick: onAction }, actionLabel));
|
|
7284
7287
|
}
|
|
7285
7288
|
var Input = forwardRef(
|
|
7286
7289
|
({ label, error, helperText, className = "", ...props }, ref) => {
|
|
7287
|
-
return /* @__PURE__ */
|
|
7290
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "w-full" }, label && /* @__PURE__ */ React21.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, label), /* @__PURE__ */ React21.createElement(
|
|
7288
7291
|
"input",
|
|
7289
7292
|
{
|
|
7290
7293
|
ref,
|
|
@@ -7298,7 +7301,7 @@ var Input = forwardRef(
|
|
|
7298
7301
|
`,
|
|
7299
7302
|
...props
|
|
7300
7303
|
}
|
|
7301
|
-
), error && /* @__PURE__ */
|
|
7304
|
+
), error && /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-sm text-red-600" }, error), helperText && !error && /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-sm text-gray-500" }, helperText));
|
|
7302
7305
|
}
|
|
7303
7306
|
);
|
|
7304
7307
|
Input.displayName = "Input";
|
|
@@ -7860,7 +7863,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7860
7863
|
]);
|
|
7861
7864
|
const hasActiveFilters = activeFilterChips.length > 0;
|
|
7862
7865
|
const isCustomPriceDirty = customPrice.min.trim() !== "" || customPrice.max.trim() !== "";
|
|
7863
|
-
const renderFiltersPanel = () => /* @__PURE__ */
|
|
7866
|
+
const renderFiltersPanel = () => /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "space-y-8" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-8" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start justify-between gap-3" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Refine results"), /* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-sm text-gray-500" }, "Filter by category, price, and availability to find the perfect fit faster.")), hasActiveFilters && /* @__PURE__ */ React21.createElement(
|
|
7864
7867
|
"button",
|
|
7865
7868
|
{
|
|
7866
7869
|
type: "button",
|
|
@@ -7868,10 +7871,10 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7868
7871
|
className: "text-sm font-semibold text-primary-600 hover:text-primary-700"
|
|
7869
7872
|
},
|
|
7870
7873
|
"Clear all"
|
|
7871
|
-
)), /* @__PURE__ */
|
|
7874
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Categories"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-2" }, sortedCategories.length === 0 && /* @__PURE__ */ React21.createElement("span", { className: "text-sm text-gray-500" }, "No categories available yet."), sortedCategories.map((category) => {
|
|
7872
7875
|
const isCategoryActive = categoryFilter === category.id;
|
|
7873
7876
|
const isExpanded = !!expandedCategories[category.id];
|
|
7874
|
-
return /* @__PURE__ */
|
|
7877
|
+
return /* @__PURE__ */ React21.createElement("div", { key: category.id, className: "rounded-xl border-gray-100 bg-white/50" }, /* @__PURE__ */ React21.createElement(
|
|
7875
7878
|
"div",
|
|
7876
7879
|
{
|
|
7877
7880
|
role: "button",
|
|
@@ -7882,8 +7885,8 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7882
7885
|
},
|
|
7883
7886
|
className: `flex w-full items-center justify-between rounded-xl px-3 py-2 text-sm font-medium transition ${isCategoryActive ? "text-primary-700 bg-primary-50" : "text-gray-700 hover:text-primary-700 hover:bg-primary-50/50"}`
|
|
7884
7887
|
},
|
|
7885
|
-
/* @__PURE__ */
|
|
7886
|
-
/* @__PURE__ */
|
|
7888
|
+
/* @__PURE__ */ React21.createElement("span", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("span", { className: "font-medium" }, category.name), category.productCount > 0 && /* @__PURE__ */ React21.createElement("span", { className: `ml-1 rounded-full bg-gray-100 px-2 py-0.5 text-xs ${isCategoryActive ? "text-primary-700" : "text-gray-500"}` }, category.productCount)),
|
|
7889
|
+
/* @__PURE__ */ React21.createElement(
|
|
7887
7890
|
"button",
|
|
7888
7891
|
{
|
|
7889
7892
|
type: "button",
|
|
@@ -7895,11 +7898,11 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7895
7898
|
className: "rounded-md p-1 hover:bg-gray-100",
|
|
7896
7899
|
"aria-label": isExpanded ? "Collapse" : "Expand"
|
|
7897
7900
|
},
|
|
7898
|
-
/* @__PURE__ */
|
|
7901
|
+
/* @__PURE__ */ React21.createElement(ChevronDown, { className: `h-4 w-4 transition-transform ${isExpanded ? "rotate-180 text-primary-600" : "rotate-0 text-gray-400"}` })
|
|
7899
7902
|
)
|
|
7900
|
-
), isExpanded && Array.isArray(category.categorySubCategories) && category.categorySubCategories.length > 0 && /* @__PURE__ */
|
|
7903
|
+
), isExpanded && Array.isArray(category.categorySubCategories) && category.categorySubCategories.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "mt-1 border-gray-100 px-2 pb-2 pl-4" }, /* @__PURE__ */ React21.createElement("div", { className: "divide-y divide-gray-100" }, category.categorySubCategories.map((sub) => {
|
|
7901
7904
|
const isSubActive = subCategoryFilter === sub.id;
|
|
7902
|
-
return /* @__PURE__ */
|
|
7905
|
+
return /* @__PURE__ */ React21.createElement(
|
|
7903
7906
|
"button",
|
|
7904
7907
|
{
|
|
7905
7908
|
key: sub.id,
|
|
@@ -7910,9 +7913,9 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7910
7913
|
sub.name
|
|
7911
7914
|
);
|
|
7912
7915
|
}))));
|
|
7913
|
-
}))))), /* @__PURE__ */
|
|
7916
|
+
}))))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Price"), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, priceRanges.map((range) => {
|
|
7914
7917
|
const isActive = selectedPriceRange === range.value;
|
|
7915
|
-
return /* @__PURE__ */
|
|
7918
|
+
return /* @__PURE__ */ React21.createElement(
|
|
7916
7919
|
"button",
|
|
7917
7920
|
{
|
|
7918
7921
|
type: "button",
|
|
@@ -7922,7 +7925,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7922
7925
|
},
|
|
7923
7926
|
range.label
|
|
7924
7927
|
);
|
|
7925
|
-
})), /* @__PURE__ */
|
|
7928
|
+
})), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-2 gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
7926
7929
|
Input,
|
|
7927
7930
|
{
|
|
7928
7931
|
type: "number",
|
|
@@ -7931,7 +7934,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7931
7934
|
value: customPrice.min,
|
|
7932
7935
|
onChange: (event) => setCustomPrice((current) => ({ ...current, min: event.target.value }))
|
|
7933
7936
|
}
|
|
7934
|
-
), /* @__PURE__ */
|
|
7937
|
+
), /* @__PURE__ */ React21.createElement(
|
|
7935
7938
|
Input,
|
|
7936
7939
|
{
|
|
7937
7940
|
type: "number",
|
|
@@ -7940,7 +7943,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7940
7943
|
value: customPrice.max,
|
|
7941
7944
|
onChange: (event) => setCustomPrice((current) => ({ ...current, max: event.target.value }))
|
|
7942
7945
|
}
|
|
7943
|
-
)), /* @__PURE__ */
|
|
7946
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
7944
7947
|
"button",
|
|
7945
7948
|
{
|
|
7946
7949
|
type: "button",
|
|
@@ -7949,48 +7952,48 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
7949
7952
|
className: "w-full rounded-xl border border-primary-500 bg-primary-500/10 px-4 py-2.5 text-sm font-semibold text-primary-700 transition hover:bg-primary-500/20 disabled:cursor-not-allowed disabled:border-gray-200 disabled:text-gray-400"
|
|
7950
7953
|
},
|
|
7951
7954
|
"Apply price range"
|
|
7952
|
-
)), /* @__PURE__ */
|
|
7955
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-gray-500" }, "Availability"), /* @__PURE__ */ React21.createElement(
|
|
7953
7956
|
"button",
|
|
7954
7957
|
{
|
|
7955
7958
|
type: "button",
|
|
7956
7959
|
onClick: handleToggleStock,
|
|
7957
7960
|
className: `flex w-full items-center justify-between rounded-xl border px-4 py-3 text-sm font-medium transition ${inStockOnly ? "border-primary-500 bg-primary-50 text-primary-700" : "border-gray-200 bg-white text-gray-600 hover:border-primary-300 hover:text-primary-600"}`
|
|
7958
7961
|
},
|
|
7959
|
-
/* @__PURE__ */
|
|
7960
|
-
/* @__PURE__ */
|
|
7961
|
-
), /* @__PURE__ */
|
|
7962
|
+
/* @__PURE__ */ React21.createElement("span", null, "In stock only"),
|
|
7963
|
+
/* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-primary-500" })
|
|
7964
|
+
), /* @__PURE__ */ React21.createElement(
|
|
7962
7965
|
"button",
|
|
7963
7966
|
{
|
|
7964
7967
|
type: "button",
|
|
7965
7968
|
onClick: handleToggleNewArrivals,
|
|
7966
7969
|
className: `mt-2 flex w-full items-center justify-between rounded-xl border px-4 py-3 text-sm font-medium transition ${newArrivals ? "border-secondary-500 bg-secondary-50 text-secondary-700" : "border-gray-200 bg-white text-gray-600 hover:border-secondary-300 hover:text-secondary-600"}`
|
|
7967
7970
|
},
|
|
7968
|
-
/* @__PURE__ */
|
|
7969
|
-
/* @__PURE__ */
|
|
7971
|
+
/* @__PURE__ */ React21.createElement("span", null, "New arrivals (last 30 days)"),
|
|
7972
|
+
/* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-secondary-500" })
|
|
7970
7973
|
))));
|
|
7971
|
-
return /* @__PURE__ */
|
|
7974
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white" }, /* @__PURE__ */ React21.createElement(
|
|
7972
7975
|
"div",
|
|
7973
7976
|
{
|
|
7974
7977
|
className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]",
|
|
7975
7978
|
"aria-hidden": "true"
|
|
7976
7979
|
}
|
|
7977
|
-
), /* @__PURE__ */
|
|
7980
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_bottom_right,_rgba(94,234,212,0.35),_transparent_55%)] opacity-60" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-24" }, /* @__PURE__ */ React21.createElement(
|
|
7978
7981
|
motion.div,
|
|
7979
7982
|
{
|
|
7980
7983
|
initial: { opacity: 0, y: 24 },
|
|
7981
7984
|
animate: { opacity: 1, y: 0 },
|
|
7982
7985
|
className: "max-w-3xl space-y-8 text-center md:mx-auto md:text-left"
|
|
7983
7986
|
},
|
|
7984
|
-
/* @__PURE__ */
|
|
7985
|
-
/* @__PURE__ */
|
|
7986
|
-
/* @__PURE__ */
|
|
7987
|
-
/* @__PURE__ */
|
|
7987
|
+
/* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-4 py-2 text-sm font-semibold tracking-wide text-white/80 backdrop-blur" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4" }), "Wellness products, curated for you"),
|
|
7988
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-6xl" }, "Find pharmacy favorites crafted to keep your family thriving"),
|
|
7989
|
+
/* @__PURE__ */ React21.createElement("p", { className: "text-lg text-white/80 md:text-xl" }, "Explore a modern storefront with real-time inventory, smart filters, and rich product details designed to make healthier choices easier."),
|
|
7990
|
+
/* @__PURE__ */ React21.createElement(
|
|
7988
7991
|
"form",
|
|
7989
7992
|
{
|
|
7990
7993
|
onSubmit: handleSearch,
|
|
7991
7994
|
className: "mx-auto max-w-2xl md:mx-0"
|
|
7992
7995
|
},
|
|
7993
|
-
/* @__PURE__ */
|
|
7996
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative w-full" }, /* @__PURE__ */ React21.createElement(
|
|
7994
7997
|
"input",
|
|
7995
7998
|
{
|
|
7996
7999
|
type: "search",
|
|
@@ -8001,17 +8004,17 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8001
8004
|
className: "flex h-12 w-full rounded-xl border border-white/20 bg-white/10 px-4 py-2 pr-14 text-lg text-white placeholder-white/60 shadow-2xl shadow-primary-900/20 backdrop-blur focus:border-white/30 focus:outline-none focus:ring-2 focus:ring-white/20 disabled:opacity-50",
|
|
8002
8005
|
disabled: isSearching
|
|
8003
8006
|
}
|
|
8004
|
-
), /* @__PURE__ */
|
|
8007
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8005
8008
|
"button",
|
|
8006
8009
|
{
|
|
8007
8010
|
type: "submit",
|
|
8008
8011
|
className: "absolute right-2 top-1/2 -translate-y-1/2 rounded-xl bg-white/20 p-3 text-white transition hover:bg-white/30 disabled:opacity-50",
|
|
8009
8012
|
disabled: !searchQuery.trim() || isSearching
|
|
8010
8013
|
},
|
|
8011
|
-
isSearching ? /* @__PURE__ */
|
|
8014
|
+
isSearching ? /* @__PURE__ */ React21.createElement("div", { className: "h-5 w-5 animate-spin rounded-full border-2 border-white border-t-transparent" }) : /* @__PURE__ */ React21.createElement(Search, { className: "h-5 w-5" })
|
|
8012
8015
|
))
|
|
8013
8016
|
)
|
|
8014
|
-
), /* @__PURE__ */
|
|
8017
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8015
8018
|
motion.div,
|
|
8016
8019
|
{
|
|
8017
8020
|
initial: { opacity: 0, y: 24 },
|
|
@@ -8019,7 +8022,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8019
8022
|
transition: { delay: 0.15 },
|
|
8020
8023
|
className: "mt-12 flex flex-col gap-6 rounded-3xl border border-white/20 bg-white/10 p-6 backdrop-blur md:flex-row md:items-center md:justify-between"
|
|
8021
8024
|
},
|
|
8022
|
-
/* @__PURE__ */
|
|
8025
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, "Explore popular searches"), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, quickSearches.map((term) => /* @__PURE__ */ React21.createElement(
|
|
8023
8026
|
"button",
|
|
8024
8027
|
{
|
|
8025
8028
|
key: term,
|
|
@@ -8029,7 +8032,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8029
8032
|
},
|
|
8030
8033
|
term
|
|
8031
8034
|
)))),
|
|
8032
|
-
topCategories.length > 0 && /* @__PURE__ */
|
|
8035
|
+
topCategories.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "space-y-3 md:text-right" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, "Trending categories"), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap justify-start gap-2 md:justify-end" }, topCategories.map((category) => /* @__PURE__ */ React21.createElement(
|
|
8033
8036
|
"button",
|
|
8034
8037
|
{
|
|
8035
8038
|
key: category.id,
|
|
@@ -8039,9 +8042,9 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8039
8042
|
},
|
|
8040
8043
|
category.name
|
|
8041
8044
|
))))
|
|
8042
|
-
), /* @__PURE__ */
|
|
8045
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "mt-10 grid gap-4 md:grid-cols-3" }, insightCards.map((card, index) => {
|
|
8043
8046
|
const Icon = card.icon;
|
|
8044
|
-
return /* @__PURE__ */
|
|
8047
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8045
8048
|
motion.div,
|
|
8046
8049
|
{
|
|
8047
8050
|
key: card.id,
|
|
@@ -8054,10 +8057,10 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8054
8057
|
"aria-pressed": card.id === "new" ? newArrivals ? "true" : "false" : void 0,
|
|
8055
8058
|
title: card.id === "new" ? newArrivals ? "Filter active: showing products from the last 30 days" : "Click to filter products from the last 30 days" : void 0
|
|
8056
8059
|
},
|
|
8057
|
-
/* @__PURE__ */
|
|
8058
|
-
/* @__PURE__ */
|
|
8060
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-white/60" }, card.label), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-3xl font-semibold text-white" }, card.value)), /* @__PURE__ */ React21.createElement("span", { className: "rounded-full bg-white/20 p-3 text-white" }, /* @__PURE__ */ React21.createElement(Icon, { className: "h-5 w-5" }))),
|
|
8061
|
+
/* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm text-white/70" }, card.helper)
|
|
8059
8062
|
);
|
|
8060
|
-
})))), /* @__PURE__ */
|
|
8063
|
+
})))), /* @__PURE__ */ React21.createElement("div", { className: "relative z-10 -mt-12 pb-16" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-8 lg:flex-row" }, /* @__PURE__ */ React21.createElement("aside", { className: "hidden w-72 flex-shrink-0 lg:block" }, /* @__PURE__ */ React21.createElement("div", { className: "sticky top-24 rounded-3xl border border-gray-100 bg-white p-6 shadow-xl shadow-gray-200/40" }, renderFiltersPanel())), /* @__PURE__ */ React21.createElement("main", { className: "flex-1 space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-gray-100 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-bold text-gray-900" }, "All products"), /* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-sm text-gray-500" }, "Browse a pharmacy-grade catalogue with smart merchandising and modern UI.")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3 md:flex-row md:items-center" }, /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(ArrowUpDown, { className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" }), /* @__PURE__ */ React21.createElement(
|
|
8061
8064
|
"select",
|
|
8062
8065
|
{
|
|
8063
8066
|
value: sortOption,
|
|
@@ -8066,11 +8069,11 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8066
8069
|
},
|
|
8067
8070
|
className: "appearance-none rounded-xl border border-gray-200 bg-white py-2.5 pl-10 pr-9 text-sm font-medium text-gray-700 shadow-sm transition focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-500/30"
|
|
8068
8071
|
},
|
|
8069
|
-
/* @__PURE__ */
|
|
8070
|
-
/* @__PURE__ */
|
|
8071
|
-
/* @__PURE__ */
|
|
8072
|
-
/* @__PURE__ */
|
|
8073
|
-
), /* @__PURE__ */
|
|
8072
|
+
/* @__PURE__ */ React21.createElement("option", { value: "featured" }, "Featured products"),
|
|
8073
|
+
/* @__PURE__ */ React21.createElement("option", { value: "price-low-high" }, "Price: low to high"),
|
|
8074
|
+
/* @__PURE__ */ React21.createElement("option", { value: "price-high-low" }, "Price: high to low"),
|
|
8075
|
+
/* @__PURE__ */ React21.createElement("option", { value: "newest" }, "Newest arrivals")
|
|
8076
|
+
), /* @__PURE__ */ React21.createElement(ChevronDown, { className: "pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" })), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center rounded-xl border border-gray-200 bg-white shadow-sm" }, /* @__PURE__ */ React21.createElement(
|
|
8074
8077
|
"button",
|
|
8075
8078
|
{
|
|
8076
8079
|
type: "button",
|
|
@@ -8078,9 +8081,9 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8078
8081
|
className: `flex items-center gap-2 rounded-l-xl px-4 py-2 text-sm font-medium transition ${viewMode === "grid" ? "bg-primary-50 text-primary-600" : "text-gray-500 hover:text-gray-700"}`,
|
|
8079
8082
|
"aria-pressed": viewMode === "grid"
|
|
8080
8083
|
},
|
|
8081
|
-
/* @__PURE__ */
|
|
8084
|
+
/* @__PURE__ */ React21.createElement(LayoutGrid, { className: "h-4 w-4" }),
|
|
8082
8085
|
"Grid"
|
|
8083
|
-
), /* @__PURE__ */
|
|
8086
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8084
8087
|
"button",
|
|
8085
8088
|
{
|
|
8086
8089
|
type: "button",
|
|
@@ -8088,19 +8091,19 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8088
8091
|
className: `flex items-center gap-2 rounded-r-xl px-4 py-2 text-sm font-medium transition ${viewMode === "list" ? "bg-primary-50 text-primary-600" : "text-gray-500 hover:text-gray-700"}`,
|
|
8089
8092
|
"aria-pressed": viewMode === "list"
|
|
8090
8093
|
},
|
|
8091
|
-
/* @__PURE__ */
|
|
8094
|
+
/* @__PURE__ */ React21.createElement(LayoutList, { className: "h-4 w-4" }),
|
|
8092
8095
|
"List"
|
|
8093
|
-
)))), /* @__PURE__ */
|
|
8096
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "mt-4 md:hidden" }, /* @__PURE__ */ React21.createElement(
|
|
8094
8097
|
Button,
|
|
8095
8098
|
{
|
|
8096
8099
|
variant: "outline",
|
|
8097
8100
|
className: "w-full",
|
|
8098
8101
|
onClick: () => setShowFilters(true)
|
|
8099
8102
|
},
|
|
8100
|
-
/* @__PURE__ */
|
|
8103
|
+
/* @__PURE__ */ React21.createElement(SlidersHorizontal, { className: "h-5 w-5" }),
|
|
8101
8104
|
"Filters",
|
|
8102
|
-
hasActiveFilters && /* @__PURE__ */
|
|
8103
|
-
)), hasActiveFilters && /* @__PURE__ */
|
|
8105
|
+
hasActiveFilters && /* @__PURE__ */ React21.createElement("span", { className: "ml-2 rounded-full bg-primary-600 px-2 py-0.5 text-xs font-semibold text-white" }, activeFilterChips.length)
|
|
8106
|
+
)), hasActiveFilters && /* @__PURE__ */ React21.createElement("div", { className: "mt-6 flex flex-wrap items-center gap-2 border-t border-gray-100 pt-4" }, activeFilterChips.map((chip) => /* @__PURE__ */ React21.createElement(
|
|
8104
8107
|
"button",
|
|
8105
8108
|
{
|
|
8106
8109
|
key: chip.key,
|
|
@@ -8109,8 +8112,8 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8109
8112
|
className: "group flex items-center gap-2 rounded-full bg-primary-50 px-3 py-1.5 text-sm font-medium text-primary-700 transition hover:bg-primary-100"
|
|
8110
8113
|
},
|
|
8111
8114
|
chip.label,
|
|
8112
|
-
/* @__PURE__ */
|
|
8113
|
-
)), /* @__PURE__ */
|
|
8115
|
+
/* @__PURE__ */ React21.createElement(X, { className: "h-4 w-4 text-primary-500 group-hover:text-primary-700" })
|
|
8116
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
8114
8117
|
"button",
|
|
8115
8118
|
{
|
|
8116
8119
|
type: "button",
|
|
@@ -8118,7 +8121,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8118
8121
|
className: "text-sm font-semibold text-gray-500 hover:text-gray-700"
|
|
8119
8122
|
},
|
|
8120
8123
|
"Reset all"
|
|
8121
|
-
))), /* @__PURE__ */
|
|
8124
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-gray-100 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3 text-sm text-gray-600 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("span", null, isLoading ? "Loading products..." : `Showing ${displayedProducts.length} of ${pagination.total || displayedProducts.length} products`), /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 text-gray-400" }, /* @__PURE__ */ React21.createElement(Clock, { className: "h-4 w-4" }), "Updated a moment ago")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6" }, isLoading ? /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 gap-6 sm:grid-cols-2 xl:grid-cols-3" }, Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ React21.createElement(ProductCardSkeleton, { key: index }))) : displayedProducts.length > 0 ? viewMode === "grid" ? /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 gap-6 sm:grid-cols-2 xl:grid-cols-3" }, displayedProducts.map((product) => /* @__PURE__ */ React21.createElement("div", { key: product.id, className: "h-full" }, /* @__PURE__ */ React21.createElement(
|
|
8122
8125
|
ProductCard,
|
|
8123
8126
|
{
|
|
8124
8127
|
product,
|
|
@@ -8127,11 +8130,11 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8127
8130
|
router.push(buildPath(`/products/${item.id}?product=${productData}`));
|
|
8128
8131
|
}
|
|
8129
8132
|
}
|
|
8130
|
-
)))) : /* @__PURE__ */
|
|
8133
|
+
)))) : /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, displayedProducts.map((product) => {
|
|
8131
8134
|
product.priceBeforeDiscount && product.priceBeforeDiscount > product.finalPrice ? Math.round(
|
|
8132
8135
|
(product.priceBeforeDiscount - product.finalPrice) / product.priceBeforeDiscount * 100
|
|
8133
8136
|
) : 0;
|
|
8134
|
-
return /* @__PURE__ */
|
|
8137
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8135
8138
|
motion.div,
|
|
8136
8139
|
{
|
|
8137
8140
|
key: product.id,
|
|
@@ -8139,7 +8142,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8139
8142
|
className: "group flex cursor-pointer flex-col gap-6 rounded-2xl border border-gray-100 bg-white p-5 shadow-sm transition hover:shadow-xl md:flex-row md:items-start",
|
|
8140
8143
|
onClick: () => router.push(buildPath(`/products/${product.id}`))
|
|
8141
8144
|
},
|
|
8142
|
-
/* @__PURE__ */
|
|
8145
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative h-48 w-full overflow-hidden rounded-2xl bg-gray-100 md:h-40 md:w-40" }, /* @__PURE__ */ React21.createElement(
|
|
8143
8146
|
Image3,
|
|
8144
8147
|
{
|
|
8145
8148
|
src: product.productMedia[0]?.file || "/placeholder-product.jpg",
|
|
@@ -8148,15 +8151,15 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8148
8151
|
className: "object-cover transition duration-500 group-hover:scale-105"
|
|
8149
8152
|
}
|
|
8150
8153
|
)),
|
|
8151
|
-
/* @__PURE__ */
|
|
8154
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1 space-y-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-2 text-xs font-semibold uppercase tracking-wide text-primary-600" }, product.parentCategories.length > 0 && /* @__PURE__ */ React21.createElement("span", { className: "rounded-full bg-primary-50 px-3 py-1 text-primary-700" }, product.parentCategories.map((category) => category?.name).join(", ")), product.tags?.slice(0, 3).map((tag) => /* @__PURE__ */ React21.createElement(
|
|
8152
8155
|
"span",
|
|
8153
8156
|
{
|
|
8154
8157
|
key: tag,
|
|
8155
8158
|
className: "rounded-full bg-slate-100 px-3 py-1 text-gray-600"
|
|
8156
8159
|
},
|
|
8157
8160
|
tag
|
|
8158
|
-
))), /* @__PURE__ */
|
|
8159
|
-
/* @__PURE__ */
|
|
8161
|
+
))), /* @__PURE__ */ React21.createElement("h3", { className: "text-xl font-semibold text-gray-900" }, product.name), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-4 text-sm text-gray-500" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 font-medium text-primary-600" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-4 w-4" }), product.inventoryCount > 0 ? "In stock & ready to ship" : "Restocking soon"), /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(Clock, { className: "h-4 w-4 text-primary-500" }), "Added ", new Date(product.createdAt).toLocaleDateString()))),
|
|
8162
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex w-full flex-col items-end gap-3 md:w-auto" }, /* @__PURE__ */ React21.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21.createElement("p", { className: "text-3xl font-semibold text-gray-900" }, formatPrice(product.finalPrice)), product.priceBeforeDiscount && /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-400 line-through" }, formatPrice(product.priceBeforeDiscount))), /* @__PURE__ */ React21.createElement(
|
|
8160
8163
|
Button,
|
|
8161
8164
|
{
|
|
8162
8165
|
size: "sm",
|
|
@@ -8168,7 +8171,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8168
8171
|
"View product"
|
|
8169
8172
|
))
|
|
8170
8173
|
);
|
|
8171
|
-
})) : /* @__PURE__ */
|
|
8174
|
+
})) : /* @__PURE__ */ React21.createElement(
|
|
8172
8175
|
EmptyState,
|
|
8173
8176
|
{
|
|
8174
8177
|
icon: Package,
|
|
@@ -8177,7 +8180,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8177
8180
|
actionLabel: hasActiveFilters ? "Clear filters" : void 0,
|
|
8178
8181
|
onAction: hasActiveFilters ? handleClearFilters : void 0
|
|
8179
8182
|
}
|
|
8180
|
-
)), pagination.totalPages > 1 && /* @__PURE__ */
|
|
8183
|
+
)), pagination.totalPages > 1 && /* @__PURE__ */ React21.createElement("div", { className: "mt-10 flex flex-wrap items-center justify-center gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
8181
8184
|
Button,
|
|
8182
8185
|
{
|
|
8183
8186
|
variant: "outline",
|
|
@@ -8185,7 +8188,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8185
8188
|
disabled: page === 1
|
|
8186
8189
|
},
|
|
8187
8190
|
"Previous"
|
|
8188
|
-
), /* @__PURE__ */
|
|
8191
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-semibold text-gray-600" }, "Page ", page, " of ", pagination.totalPages), /* @__PURE__ */ React21.createElement(
|
|
8189
8192
|
Button,
|
|
8190
8193
|
{
|
|
8191
8194
|
variant: "outline",
|
|
@@ -8193,7 +8196,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8193
8196
|
disabled: page === pagination.totalPages
|
|
8194
8197
|
},
|
|
8195
8198
|
"Next"
|
|
8196
|
-
))))))), /* @__PURE__ */
|
|
8199
|
+
))))))), /* @__PURE__ */ React21.createElement(AnimatePresence, null, showFilters && /* @__PURE__ */ React21.createElement(
|
|
8197
8200
|
motion.div,
|
|
8198
8201
|
{
|
|
8199
8202
|
initial: { opacity: 0 },
|
|
@@ -8201,7 +8204,7 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8201
8204
|
exit: { opacity: 0 },
|
|
8202
8205
|
className: "fixed inset-0 z-50 bg-black/40 backdrop-blur-sm lg:hidden"
|
|
8203
8206
|
},
|
|
8204
|
-
/* @__PURE__ */
|
|
8207
|
+
/* @__PURE__ */ React21.createElement(
|
|
8205
8208
|
motion.div,
|
|
8206
8209
|
{
|
|
8207
8210
|
initial: { y: "100%" },
|
|
@@ -8210,14 +8213,14 @@ function ShopScreen({ initialFilters = {}, categoryName }) {
|
|
|
8210
8213
|
transition: { type: "spring", stiffness: 260, damping: 26 },
|
|
8211
8214
|
className: "absolute inset-x-0 bottom-0 max-h-[85vh] overflow-y-auto rounded-t-3xl bg-white p-6 shadow-2xl"
|
|
8212
8215
|
},
|
|
8213
|
-
/* @__PURE__ */
|
|
8216
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mb-6 flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Filters"), /* @__PURE__ */ React21.createElement(
|
|
8214
8217
|
"button",
|
|
8215
8218
|
{
|
|
8216
8219
|
type: "button",
|
|
8217
8220
|
onClick: () => setShowFilters(false),
|
|
8218
8221
|
className: "rounded-full border border-gray-200 p-2 text-gray-500 hover:text-gray-700"
|
|
8219
8222
|
},
|
|
8220
|
-
/* @__PURE__ */
|
|
8223
|
+
/* @__PURE__ */ React21.createElement(X, { className: "h-4 w-4" })
|
|
8221
8224
|
)),
|
|
8222
8225
|
renderFiltersPanel()
|
|
8223
8226
|
)
|
|
@@ -8236,7 +8239,7 @@ function Badge({ children, variant = "primary", size = "md", className = "" }) {
|
|
|
8236
8239
|
sm: "px-2 py-1 text-xs",
|
|
8237
8240
|
md: "px-3 py-1 text-sm"
|
|
8238
8241
|
};
|
|
8239
|
-
return /* @__PURE__ */
|
|
8242
|
+
return /* @__PURE__ */ React21.createElement("span", { className: `inline-flex items-center font-medium rounded-full border ${variants[variant]} ${sizes[size]} ${className}` }, children);
|
|
8240
8243
|
}
|
|
8241
8244
|
var safeFormatDate = (date, format = "long") => {
|
|
8242
8245
|
if (!date) return "N/A";
|
|
@@ -8396,10 +8399,10 @@ function ProductDetailScreen({ productId }) {
|
|
|
8396
8399
|
}
|
|
8397
8400
|
};
|
|
8398
8401
|
if (isLoading) {
|
|
8399
|
-
return /* @__PURE__ */
|
|
8402
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "h-[520px] animate-pulse rounded-3xl bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-3 gap-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21.createElement("div", { key: index, className: "h-32 animate-pulse rounded-2xl bg-slate-200" })))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-4 rounded-3xl bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "h-8 w-32 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "h-10 w-48 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "h-6 w-full animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" }), /* @__PURE__ */ React21.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" })))));
|
|
8400
8403
|
}
|
|
8401
8404
|
if (!product) {
|
|
8402
|
-
return /* @__PURE__ */
|
|
8405
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl bg-white p-10 text-center shadow-sm" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "mx-auto h-10 w-10 text-primary-500" }), /* @__PURE__ */ React21.createElement("h1", { className: "mt-6 text-2xl font-semibold text-gray-900" }, "Product not found"), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-gray-600" }, "It may have been removed or is temporarily unavailable. Discover other pharmacy essentials in our catalogue."), /* @__PURE__ */ React21.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React21.createElement(Link8, { href: "/shop", className: "inline-block" }, /* @__PURE__ */ React21.createElement(Button, null, "Browse products"))))));
|
|
8403
8406
|
}
|
|
8404
8407
|
product.tags && product.tags.length > 0 ? product.tags.slice(0, 6) : ["Pharmacist approved", "Gentle on daily routines", "Backed by real customers"];
|
|
8405
8408
|
const highlightCards = [
|
|
@@ -8419,29 +8422,29 @@ function ProductDetailScreen({ productId }) {
|
|
|
8419
8422
|
description: "Average rating 4.8/5 with over 120 verified customer experiences."
|
|
8420
8423
|
}
|
|
8421
8424
|
];
|
|
8422
|
-
return /* @__PURE__ */
|
|
8425
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white mb-8" }, /* @__PURE__ */ React21.createElement(
|
|
8423
8426
|
"div",
|
|
8424
8427
|
{
|
|
8425
8428
|
className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]",
|
|
8426
8429
|
"aria-hidden": "true"
|
|
8427
8430
|
}
|
|
8428
|
-
), /* @__PURE__ */
|
|
8431
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_bottom_right,_rgba(255,255,255,0.25),_transparent_55%)] opacity-70" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement(
|
|
8429
8432
|
Button,
|
|
8430
8433
|
{
|
|
8431
8434
|
variant: "ghost",
|
|
8432
8435
|
className: "text-white hover:bg-white/10",
|
|
8433
8436
|
onClick: () => router.push(buildPath("/shop"))
|
|
8434
8437
|
},
|
|
8435
|
-
/* @__PURE__ */
|
|
8438
|
+
/* @__PURE__ */ React21.createElement(ArrowLeft, { className: "h-5 w-5" }),
|
|
8436
8439
|
"Continue shopping"
|
|
8437
|
-
), /* @__PURE__ */
|
|
8440
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "hidden items-center gap-3 text-sm text-white/80 md:flex" }, /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/"), className: "transition hover:text-white" }, "Home"), /* @__PURE__ */ React21.createElement(ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/shop"), className: "transition hover:text-white" }, "Shop"), /* @__PURE__ */ React21.createElement(ChevronRight, { className: "h-4 w-4" }), /* @__PURE__ */ React21.createElement("span", { className: "truncate font-medium text-white" }, product.name))), /* @__PURE__ */ React21.createElement(
|
|
8438
8441
|
motion.div,
|
|
8439
8442
|
{
|
|
8440
8443
|
initial: { opacity: 0, y: 24 },
|
|
8441
8444
|
animate: { opacity: 1, y: 0 },
|
|
8442
8445
|
className: "max-w-3xl space-y-4"
|
|
8443
8446
|
},
|
|
8444
|
-
product.category && /* @__PURE__ */
|
|
8447
|
+
product.category && /* @__PURE__ */ React21.createElement(
|
|
8445
8448
|
Badge,
|
|
8446
8449
|
{
|
|
8447
8450
|
variant: "secondary",
|
|
@@ -8449,9 +8452,9 @@ function ProductDetailScreen({ productId }) {
|
|
|
8449
8452
|
},
|
|
8450
8453
|
product.category
|
|
8451
8454
|
),
|
|
8452
|
-
/* @__PURE__ */
|
|
8453
|
-
/* @__PURE__ */
|
|
8454
|
-
)))), /* @__PURE__ */
|
|
8455
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-5xl" }, product.name),
|
|
8456
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-3 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 font-medium text-white" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4" }), "Ready to ship today"), /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 font-medium text-white" }, /* @__PURE__ */ React21.createElement(Shield, { className: "h-4 w-4" }), "30-day happiness guarantee"))
|
|
8457
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-10" }, /* @__PURE__ */ React21.createElement("section", { className: "rounded-3xl border border-white bg-white/70 p-6 shadow-xl shadow-primary-100/40 backdrop-blur" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-6 lg:grid-cols-[minmax(0,1fr)_220px]" }, /* @__PURE__ */ React21.createElement(
|
|
8455
8458
|
motion.div,
|
|
8456
8459
|
{
|
|
8457
8460
|
key: variantImages[activeImageIndex],
|
|
@@ -8460,7 +8463,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8460
8463
|
transition: { duration: 0.35 },
|
|
8461
8464
|
className: "relative overflow-hidden rounded-3xl bg-slate-100 h-[420px] md:h-[560px]"
|
|
8462
8465
|
},
|
|
8463
|
-
/* @__PURE__ */
|
|
8466
|
+
/* @__PURE__ */ React21.createElement(
|
|
8464
8467
|
Image3,
|
|
8465
8468
|
{
|
|
8466
8469
|
src: variantImages[activeImageIndex],
|
|
@@ -8471,7 +8474,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8471
8474
|
className: "object-contain"
|
|
8472
8475
|
}
|
|
8473
8476
|
),
|
|
8474
|
-
discount > 0 && /* @__PURE__ */
|
|
8477
|
+
discount > 0 && /* @__PURE__ */ React21.createElement(
|
|
8475
8478
|
Badge,
|
|
8476
8479
|
{
|
|
8477
8480
|
variant: "danger",
|
|
@@ -8481,7 +8484,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8481
8484
|
discount,
|
|
8482
8485
|
"%"
|
|
8483
8486
|
),
|
|
8484
|
-
!variantInStock && /* @__PURE__ */
|
|
8487
|
+
!variantInStock && /* @__PURE__ */ React21.createElement(
|
|
8485
8488
|
Badge,
|
|
8486
8489
|
{
|
|
8487
8490
|
variant: "secondary",
|
|
@@ -8489,7 +8492,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8489
8492
|
},
|
|
8490
8493
|
"Out of Stock"
|
|
8491
8494
|
)
|
|
8492
|
-
), /* @__PURE__ */
|
|
8495
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4" }, product?.productVariants?.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-4 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "mb-2 text-sm font-semibold uppercase tracking-[0.25em] text-slate-400" }, "Variant"), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, product?.productVariants?.map((variant, index) => /* @__PURE__ */ React21.createElement(
|
|
8493
8496
|
"button",
|
|
8494
8497
|
{
|
|
8495
8498
|
key: variant.id,
|
|
@@ -8498,7 +8501,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8498
8501
|
className: `rounded-full px-4 py-2 text-sm font-medium transition ${selectedVariant?.id === variant.id ? "bg-primary-600 text-white" : "bg-slate-100 text-slate-700 hover:bg-slate-200"}`
|
|
8499
8502
|
},
|
|
8500
8503
|
variant.name
|
|
8501
|
-
)))), /* @__PURE__ */
|
|
8504
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-3 gap-3" }, variantImages.map((image, index) => /* @__PURE__ */ React21.createElement(
|
|
8502
8505
|
"button",
|
|
8503
8506
|
{
|
|
8504
8507
|
key: image.src + index,
|
|
@@ -8506,7 +8509,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8506
8509
|
onClick: () => setActiveImageIndex(index),
|
|
8507
8510
|
className: `relative aspect-square overflow-hidden rounded-2xl border transition ${activeImageIndex === index ? "border-primary-500 shadow-lg shadow-primary-200/60" : "border-transparent hover:border-primary-200"}`
|
|
8508
8511
|
},
|
|
8509
|
-
/* @__PURE__ */
|
|
8512
|
+
/* @__PURE__ */ React21.createElement(
|
|
8510
8513
|
Image3,
|
|
8511
8514
|
{
|
|
8512
8515
|
src: image.src,
|
|
@@ -8517,18 +8520,18 @@ function ProductDetailScreen({ productId }) {
|
|
|
8517
8520
|
unoptimized: true
|
|
8518
8521
|
}
|
|
8519
8522
|
)
|
|
8520
|
-
)))))), /* @__PURE__ */
|
|
8523
|
+
)))))), /* @__PURE__ */ React21.createElement("section", { className: "grid gap-6 lg:grid-cols-3" }, highlightCards.map((card) => {
|
|
8521
8524
|
const Icon = card.icon;
|
|
8522
|
-
return /* @__PURE__ */
|
|
8525
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8523
8526
|
"div",
|
|
8524
8527
|
{
|
|
8525
8528
|
key: card.title,
|
|
8526
8529
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-lg"
|
|
8527
8530
|
},
|
|
8528
|
-
/* @__PURE__ */
|
|
8529
|
-
/* @__PURE__ */
|
|
8531
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement("span", { className: "rounded-2xl bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React21.createElement(Icon, { className: "h-5 w-5" })), /* @__PURE__ */ React21.createElement("h3", { className: "text-base font-semibold text-slate-900" }, card.title)),
|
|
8532
|
+
/* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm leading-relaxed text-slate-600" }, card.description)
|
|
8530
8533
|
);
|
|
8531
|
-
})), /* @__PURE__ */
|
|
8534
|
+
})), /* @__PURE__ */ React21.createElement("section", { className: "grid gap-6 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-4 pb-6" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-1 text-amber-500" }, Array.from({ length: 5 }).map((_, index) => /* @__PURE__ */ React21.createElement(Star, { key: index, className: "h-4 w-4 fill-current" }))), /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-medium text-slate-500" }, "Rated 4.8 \u2022 Patients love the results")), /* @__PURE__ */ React21.createElement("div", { className: "space-y-8" }, product.description && /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, "Description"), /* @__PURE__ */ React21.createElement("p", { className: "text-base leading-relaxed text-slate-600", dangerouslySetInnerHTML: { __html: product.description } })))), /* @__PURE__ */ React21.createElement("div", { className: "h-full rounded-3xl border border-slate-100 bg-gradient-to-br from-primary-50 via-white to-secondary-50 p-8 shadow-sm" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-sm font-semibold uppercase tracking-[0.3em] text-primary-500" }, "Care tips"), /* @__PURE__ */ React21.createElement("div", { className: "mt-4 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("p", { className: "leading-relaxed" }, "Store in a cool, dry place away from direct sunlight. Check packaging for allergen statements."), /* @__PURE__ */ React21.createElement("p", { className: "leading-relaxed" }, "Consult with your local pharmacist if you are combining with other treatments or have chronic conditions."), /* @__PURE__ */ React21.createElement("p", { className: "rounded-2xl bg-white/60 p-4 leading-relaxed text-primary-700" }, "Questions? Our care team is on standby \u2014 reach us via chat for tailored support before you checkout.")))), /* @__PURE__ */ React21.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-sm" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Product insights"), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 grid gap-6 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/60 p-5" }, /* @__PURE__ */ React21.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-500" }, "Availability"), /* @__PURE__ */ React21.createElement("div", { className: "mt-3 flex items-center gap-2 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement(Check, { className: "h-4 w-4 text-primary-500" }), product.inStock ? "Available for dispatch today" : "Currently restocking"), product.stock !== void 0 && /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-xs text-slate-500" }, product.stock > 0 ? `${product.stock} units remaining in inventory` : "Join the waitlist to be notified first")), /* @__PURE__ */ React21.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/60 p-5" }, /* @__PURE__ */ React21.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-500" }, "Product details"), /* @__PURE__ */ React21.createElement("div", { className: "mt-3 space-y-2 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "Variant:"), " ", currentVariant.name), /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "SKU:"), " ", variantSku), /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "Status:"), " ", /* @__PURE__ */ React21.createElement("span", { className: variantInStock ? "text-green-600" : "text-amber-600" }, variantInStock ? "In Stock" : "Out of Stock")), /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "Last updated:"), " ", lastUpdatedLabel), /* @__PURE__ */ React21.createElement("p", null, /* @__PURE__ */ React21.createElement("span", { className: "font-medium text-slate-700" }, "Ships from:"), " Local pharmacy distribution center")))))), /* @__PURE__ */ React21.createElement("aside", { className: "space-y-6 lg:sticky lg:top-24" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-100/40" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-baseline gap-3" }, /* @__PURE__ */ React21.createElement("p", { className: "text-3xl font-bold text-slate-900" }, selectedVariant ? formatPrice(selectedVariant.finalPrice) : formatPrice(product.price)), variantComparePrice && variantComparePrice > variantPrice && /* @__PURE__ */ React21.createElement("p", { className: "text-base text-slate-400 line-through" }, formatPrice(variantComparePrice)), discount > 0 && /* @__PURE__ */ React21.createElement(Badge, { variant: "danger", size: "sm" }, "-", discount, "%")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-y-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3 rounded-2xl bg-primary-50/80 px-4 py-3 text-sm font-medium text-primary-700" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-4 w-4" }), "Pharmacist verified product"), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between rounded-2xl border border-slate-200 px-4 py-3" }, /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-medium text-slate-600" }, "Qty"), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center rounded-full border border-slate-200 bg-slate-50" }, /* @__PURE__ */ React21.createElement(
|
|
8532
8535
|
"button",
|
|
8533
8536
|
{
|
|
8534
8537
|
type: "button",
|
|
@@ -8536,8 +8539,8 @@ function ProductDetailScreen({ productId }) {
|
|
|
8536
8539
|
className: "rounded-l-full p-2 hover:bg-primary-100/60",
|
|
8537
8540
|
"aria-label": "Decrease quantity"
|
|
8538
8541
|
},
|
|
8539
|
-
/* @__PURE__ */
|
|
8540
|
-
), /* @__PURE__ */
|
|
8542
|
+
/* @__PURE__ */ React21.createElement(Minus, { className: "h-4 w-4" })
|
|
8543
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "w-12 text-center text-sm font-semibold text-slate-700" }, quantity), /* @__PURE__ */ React21.createElement(
|
|
8541
8544
|
"button",
|
|
8542
8545
|
{
|
|
8543
8546
|
type: "button",
|
|
@@ -8545,8 +8548,8 @@ function ProductDetailScreen({ productId }) {
|
|
|
8545
8548
|
className: "rounded-r-full p-2 hover:bg-primary-100/60",
|
|
8546
8549
|
"aria-label": "Increase quantity"
|
|
8547
8550
|
},
|
|
8548
|
-
/* @__PURE__ */
|
|
8549
|
-
)))), selectedVariant && /* @__PURE__ */
|
|
8551
|
+
/* @__PURE__ */ React21.createElement(Plus, { className: "h-4 w-4" })
|
|
8552
|
+
)))), selectedVariant && /* @__PURE__ */ React21.createElement("div", { className: "mt-4 text-sm" }, selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ || selectedVariant.inventoryStatus === "LOW_STOCK" /* LOWSTOCK */ ? /* @__PURE__ */ React21.createElement("div", { className: "text-red-600 font-medium" }, "Out of Stock") : /* @__PURE__ */ React21.createElement("div", { className: "text-green-600 font-medium" }, "In Stock")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-x-3" }, /* @__PURE__ */ React21.createElement(
|
|
8550
8553
|
Button,
|
|
8551
8554
|
{
|
|
8552
8555
|
size: "lg",
|
|
@@ -8555,9 +8558,9 @@ function ProductDetailScreen({ productId }) {
|
|
|
8555
8558
|
isLoading: isAddingToCart,
|
|
8556
8559
|
disabled: !selectedVariant || selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */
|
|
8557
8560
|
},
|
|
8558
|
-
/* @__PURE__ */
|
|
8561
|
+
/* @__PURE__ */ React21.createElement(ShoppingCart, { className: "h-5 w-5" }),
|
|
8559
8562
|
!selectedVariant ? "Select a variant" : selectedVariant.inventoryStatus === "OUT_OF_STOCK" /* OUTOFSTOCK */ ? "Out of Stock" : `Add to Cart`
|
|
8560
|
-
), /* @__PURE__ */
|
|
8563
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8561
8564
|
Button,
|
|
8562
8565
|
{
|
|
8563
8566
|
size: "lg",
|
|
@@ -8565,14 +8568,14 @@ function ProductDetailScreen({ productId }) {
|
|
|
8565
8568
|
className: "w-full",
|
|
8566
8569
|
onClick: handleToggleFavorite
|
|
8567
8570
|
},
|
|
8568
|
-
/* @__PURE__ */
|
|
8571
|
+
/* @__PURE__ */ React21.createElement(
|
|
8569
8572
|
Heart,
|
|
8570
8573
|
{
|
|
8571
8574
|
className: `h-5 w-5 ${isFavorited ? "fill-red-500 text-red-500" : "text-slate-500"}`
|
|
8572
8575
|
}
|
|
8573
8576
|
),
|
|
8574
8577
|
isFavorited ? "Saved" : "Save for later"
|
|
8575
|
-
))), /* @__PURE__ */
|
|
8578
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.25em]" }, "Need advice?"), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 leading-relaxed" }, "Chat with a pharmacist in real time before completing your purchase. We will help you choose supporting supplements and answer dosing questions.")))), relatedProducts.length > 0 && /* @__PURE__ */ React21.createElement("section", { className: "mt-20" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "You may also like"), /* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Hand-picked recommendations that pair nicely with this product.")), /* @__PURE__ */ React21.createElement(Link8, { href: "/shop", className: "hidden md:inline-flex" }, /* @__PURE__ */ React21.createElement(Button, { variant: "ghost", className: "text-primary-600" }, "View all products"))), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 grid gap-6 sm:grid-cols-2 lg:grid-cols-4" }, relatedProducts?.map((relatedProduct) => /* @__PURE__ */ React21.createElement(ProductCard, { key: relatedProduct.id, product: relatedProduct })))))));
|
|
8576
8579
|
}
|
|
8577
8580
|
function CartItem({ item }) {
|
|
8578
8581
|
const { updateQuantity, removeFromCart } = useCart();
|
|
@@ -8590,7 +8593,7 @@ function CartItem({ item }) {
|
|
|
8590
8593
|
await removeFromCart(item.productVariantId);
|
|
8591
8594
|
};
|
|
8592
8595
|
const itemTotal = item.productVariantData.finalPrice * item.quantity;
|
|
8593
|
-
return /* @__PURE__ */
|
|
8596
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8594
8597
|
motion.div,
|
|
8595
8598
|
{
|
|
8596
8599
|
layout: true,
|
|
@@ -8599,7 +8602,7 @@ function CartItem({ item }) {
|
|
|
8599
8602
|
exit: { opacity: 0, x: -100 },
|
|
8600
8603
|
className: "flex gap-4 bg-white p-4 rounded-xl border border-gray-200 hover:border-primary-300 transition-colors"
|
|
8601
8604
|
},
|
|
8602
|
-
/* @__PURE__ */
|
|
8605
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative w-24 h-24 rounded-lg overflow-hidden flex-shrink-0 bg-gray-100" }, /* @__PURE__ */ React21.createElement(
|
|
8603
8606
|
Image3,
|
|
8604
8607
|
{
|
|
8605
8608
|
src: item.productVariantData.productMedia[0]?.file || "/placeholder-product.jpg",
|
|
@@ -8608,32 +8611,32 @@ function CartItem({ item }) {
|
|
|
8608
8611
|
className: "object-cover"
|
|
8609
8612
|
}
|
|
8610
8613
|
)),
|
|
8611
|
-
/* @__PURE__ */
|
|
8614
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900 truncate" }, item.productVariantData.name), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-500 mt-1" }, formatPrice(item.productVariantData.finalPrice), " each"), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3 mt-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center border-2 border-gray-200 rounded-lg" }, /* @__PURE__ */ React21.createElement(
|
|
8612
8615
|
"button",
|
|
8613
8616
|
{
|
|
8614
8617
|
onClick: () => handleUpdateQuantity(item.quantity - 1),
|
|
8615
8618
|
disabled: isUpdating || item.quantity <= 0,
|
|
8616
8619
|
className: "p-2 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
|
|
8617
8620
|
},
|
|
8618
|
-
/* @__PURE__ */
|
|
8619
|
-
), /* @__PURE__ */
|
|
8621
|
+
/* @__PURE__ */ React21.createElement(Minus, { className: "w-4 h-4" })
|
|
8622
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "px-4 font-medium min-w-[3rem] text-center" }, isUpdating ? /* @__PURE__ */ React21.createElement("span", { className: "inline-block h-4 w-4 align-middle animate-spin rounded-full border-2 border-gray-300 border-t-gray-600" }) : item.quantity), /* @__PURE__ */ React21.createElement(
|
|
8620
8623
|
"button",
|
|
8621
8624
|
{
|
|
8622
8625
|
onClick: () => handleUpdateQuantity(item.quantity + 1),
|
|
8623
8626
|
disabled: isUpdating || item.quantity >= item.productVariantData.inventoryCount,
|
|
8624
8627
|
className: "p-2 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
|
|
8625
8628
|
},
|
|
8626
|
-
/* @__PURE__ */
|
|
8627
|
-
)), /* @__PURE__ */
|
|
8629
|
+
/* @__PURE__ */ React21.createElement(Plus, { className: "w-4 h-4" })
|
|
8630
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
8628
8631
|
"button",
|
|
8629
8632
|
{
|
|
8630
8633
|
onClick: handleRemove,
|
|
8631
8634
|
className: "p-2 text-red-600 hover:bg-red-50 rounded-lg transition-colors",
|
|
8632
8635
|
"aria-label": "Remove item"
|
|
8633
8636
|
},
|
|
8634
|
-
/* @__PURE__ */
|
|
8637
|
+
/* @__PURE__ */ React21.createElement(Trash2, { className: "w-5 h-5" })
|
|
8635
8638
|
))),
|
|
8636
|
-
/* @__PURE__ */
|
|
8639
|
+
/* @__PURE__ */ React21.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21.createElement("p", { className: "text-xl font-bold text-gray-900" }, formatPrice(itemTotal)))
|
|
8637
8640
|
);
|
|
8638
8641
|
}
|
|
8639
8642
|
function CartScreen() {
|
|
@@ -8641,7 +8644,7 @@ function CartScreen() {
|
|
|
8641
8644
|
const { cart, isLoading } = useCart();
|
|
8642
8645
|
const { buildPath } = useBasePath();
|
|
8643
8646
|
if (!cart || cart.cartBody.items.length === 0) {
|
|
8644
|
-
return /* @__PURE__ */
|
|
8647
|
+
return /* @__PURE__ */ React21.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__ */ React21.createElement("div", { className: "mx-auto px-20 py-5 bg-white rounded-3xl" }, /* @__PURE__ */ React21.createElement(
|
|
8645
8648
|
EmptyState,
|
|
8646
8649
|
{
|
|
8647
8650
|
icon: ShoppingBag,
|
|
@@ -8656,16 +8659,16 @@ function CartScreen() {
|
|
|
8656
8659
|
const shipping = 0;
|
|
8657
8660
|
const tax = 0;
|
|
8658
8661
|
const total = subtotal + shipping + tax;
|
|
8659
|
-
return /* @__PURE__ */
|
|
8662
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16 mb-8" }, /* @__PURE__ */ React21.createElement(
|
|
8660
8663
|
motion.div,
|
|
8661
8664
|
{
|
|
8662
8665
|
initial: { opacity: 0, y: 24 },
|
|
8663
8666
|
animate: { opacity: 1, y: 0 },
|
|
8664
8667
|
className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between"
|
|
8665
8668
|
},
|
|
8666
|
-
/* @__PURE__ */
|
|
8667
|
-
/* @__PURE__ */
|
|
8668
|
-
))), /* @__PURE__ */
|
|
8669
|
+
/* @__PURE__ */ React21.createElement("div", { className: "max-w-2xl space-y-4" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold tracking-wide text-white/80 backdrop-blur" }, /* @__PURE__ */ React21.createElement(HeartPulse, { className: "h-4 w-4" }), "Wellness essentials, ready when you are"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Your curated cart"), /* @__PURE__ */ React21.createElement("p", { className: "text-white/75 md:text-lg" }, "Review your selections, unlock exclusive perks, and check out with pharmacist-backed confidence.")),
|
|
8670
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur-md" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Cart summary"), /* @__PURE__ */ React21.createElement("p", { className: "mt-4 text-4xl font-semibold" }, formatPrice(total)), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/70" }, "Taxes and shipping calculated below"))
|
|
8671
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement(
|
|
8669
8672
|
motion.section,
|
|
8670
8673
|
{
|
|
8671
8674
|
initial: { opacity: 0, y: 24 },
|
|
@@ -8673,10 +8676,10 @@ function CartScreen() {
|
|
|
8673
8676
|
transition: { delay: 0.05 },
|
|
8674
8677
|
className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
|
|
8675
8678
|
},
|
|
8676
|
-
/* @__PURE__ */
|
|
8677
|
-
isLoading && /* @__PURE__ */
|
|
8678
|
-
/* @__PURE__ */
|
|
8679
|
-
), /* @__PURE__ */
|
|
8679
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Items (", cart.cartBody.items.length, ")"), /* @__PURE__ */ React21.createElement("div", { className: "inline-flex items-center gap-2 rounded-full bg-primary-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-primary-700" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-4 w-4" }), "Guaranteed cold-chain handling")),
|
|
8680
|
+
isLoading && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2 rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-block h-3 w-3 animate-spin rounded-full border-2 border-slate-300 border-t-slate-600" }), "Updating cart\u2026"),
|
|
8681
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-5" }, cart.cartBody.items.map((item) => /* @__PURE__ */ React21.createElement(CartItem, { key: item.productVariantId, item })))
|
|
8682
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8680
8683
|
motion.aside,
|
|
8681
8684
|
{
|
|
8682
8685
|
initial: { opacity: 0, y: 24 },
|
|
@@ -8684,7 +8687,7 @@ function CartScreen() {
|
|
|
8684
8687
|
transition: { delay: 0.1 },
|
|
8685
8688
|
className: "space-y-6 lg:sticky lg:top-28"
|
|
8686
8689
|
},
|
|
8687
|
-
/* @__PURE__ */
|
|
8690
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Checkout summary"), /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary-50 px-3 py-1 text-xs font-semibold text-primary-700" }, /* @__PURE__ */ React21.createElement(BadgePercent, { className: "h-4 w-4" }), "Savings applied")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Subtotal"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold text-slate-900" }, formatPrice(subtotal))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Shipping"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold" }, "Will be calculated at checkout")), /* @__PURE__ */ React21.createElement("div", { className: "rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-base font-semibold text-slate-900" }, /* @__PURE__ */ React21.createElement("span", null, "Order total"), /* @__PURE__ */ React21.createElement("span", null, formatPrice(total))), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-xs text-slate-500" }, "Prices include pharmacy-grade quality control and packaging."))), /* @__PURE__ */ React21.createElement(
|
|
8688
8691
|
Button,
|
|
8689
8692
|
{
|
|
8690
8693
|
size: "lg",
|
|
@@ -8692,8 +8695,8 @@ function CartScreen() {
|
|
|
8692
8695
|
onClick: () => router.push(buildPath("/checkout"))
|
|
8693
8696
|
},
|
|
8694
8697
|
"Secure checkout",
|
|
8695
|
-
/* @__PURE__ */
|
|
8696
|
-
), /* @__PURE__ */
|
|
8698
|
+
/* @__PURE__ */ React21.createElement(ArrowRight, { className: "h-5 w-5" })
|
|
8699
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8697
8700
|
"button",
|
|
8698
8701
|
{
|
|
8699
8702
|
type: "button",
|
|
@@ -8702,7 +8705,7 @@ function CartScreen() {
|
|
|
8702
8705
|
},
|
|
8703
8706
|
"Continue shopping"
|
|
8704
8707
|
)),
|
|
8705
|
-
/* @__PURE__ */
|
|
8708
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Need help?"), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 leading-relaxed" }, "Chat with a pharmacist to optimize your regimen or discuss substitutions before you check out."))
|
|
8706
8709
|
)))));
|
|
8707
8710
|
}
|
|
8708
8711
|
function useAddresses() {
|
|
@@ -8764,7 +8767,7 @@ function useAddresses() {
|
|
|
8764
8767
|
};
|
|
8765
8768
|
}
|
|
8766
8769
|
function Card({ className = "", ...props }) {
|
|
8767
|
-
return /* @__PURE__ */
|
|
8770
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8768
8771
|
"div",
|
|
8769
8772
|
{
|
|
8770
8773
|
className: `rounded-lg border bg-white shadow-sm ${className}`,
|
|
@@ -8790,7 +8793,7 @@ function Modal({ isOpen, onClose, title, children, size = "md" }) {
|
|
|
8790
8793
|
lg: "max-w-2xl",
|
|
8791
8794
|
xl: "max-w-4xl"
|
|
8792
8795
|
};
|
|
8793
|
-
return /* @__PURE__ */
|
|
8796
|
+
return /* @__PURE__ */ React21.createElement(AnimatePresence, null, isOpen && /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement(
|
|
8794
8797
|
motion.div,
|
|
8795
8798
|
{
|
|
8796
8799
|
initial: { opacity: 0 },
|
|
@@ -8799,7 +8802,7 @@ function Modal({ isOpen, onClose, title, children, size = "md" }) {
|
|
|
8799
8802
|
onClick: onClose,
|
|
8800
8803
|
className: "fixed inset-0 bg-black/50 backdrop-blur-sm z-50"
|
|
8801
8804
|
}
|
|
8802
|
-
), /* @__PURE__ */
|
|
8805
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4" }, /* @__PURE__ */ React21.createElement(
|
|
8803
8806
|
motion.div,
|
|
8804
8807
|
{
|
|
8805
8808
|
initial: { opacity: 0, scale: 0.95, y: 20 },
|
|
@@ -8807,15 +8810,15 @@ function Modal({ isOpen, onClose, title, children, size = "md" }) {
|
|
|
8807
8810
|
exit: { opacity: 0, scale: 0.95, y: 20 },
|
|
8808
8811
|
className: `bg-white rounded-2xl shadow-2xl w-full ${sizes[size]} max-h-[90vh] overflow-hidden flex flex-col`
|
|
8809
8812
|
},
|
|
8810
|
-
title && /* @__PURE__ */
|
|
8813
|
+
title && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between p-6 border-b border-gray-200" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-bold text-gray-900" }, title), /* @__PURE__ */ React21.createElement(
|
|
8811
8814
|
"button",
|
|
8812
8815
|
{
|
|
8813
8816
|
onClick: onClose,
|
|
8814
8817
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors"
|
|
8815
8818
|
},
|
|
8816
|
-
/* @__PURE__ */
|
|
8819
|
+
/* @__PURE__ */ React21.createElement(X, { className: "w-5 h-5" })
|
|
8817
8820
|
)),
|
|
8818
|
-
/* @__PURE__ */
|
|
8821
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1 overflow-y-auto p-6" }, children)
|
|
8819
8822
|
))));
|
|
8820
8823
|
}
|
|
8821
8824
|
var addressSchema = z.object({
|
|
@@ -8905,7 +8908,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8905
8908
|
setIsSubmitting(false);
|
|
8906
8909
|
}
|
|
8907
8910
|
};
|
|
8908
|
-
return /* @__PURE__ */
|
|
8911
|
+
return /* @__PURE__ */ React21.createElement(
|
|
8909
8912
|
Modal,
|
|
8910
8913
|
{
|
|
8911
8914
|
isOpen,
|
|
@@ -8913,7 +8916,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8913
8916
|
title: initialAddress ? "Edit Address" : "Add New Address",
|
|
8914
8917
|
size: "lg"
|
|
8915
8918
|
},
|
|
8916
|
-
/* @__PURE__ */
|
|
8919
|
+
/* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
8917
8920
|
Input,
|
|
8918
8921
|
{
|
|
8919
8922
|
label: "Full name",
|
|
@@ -8921,7 +8924,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8921
8924
|
...register("name"),
|
|
8922
8925
|
error: errors.name?.message
|
|
8923
8926
|
}
|
|
8924
|
-
), /* @__PURE__ */
|
|
8927
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8925
8928
|
Input,
|
|
8926
8929
|
{
|
|
8927
8930
|
label: "Phone number",
|
|
@@ -8929,7 +8932,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8929
8932
|
...register("phone"),
|
|
8930
8933
|
error: errors.phone?.message
|
|
8931
8934
|
}
|
|
8932
|
-
), /* @__PURE__ */
|
|
8935
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "md:col-span-2" }, /* @__PURE__ */ React21.createElement(
|
|
8933
8936
|
Input,
|
|
8934
8937
|
{
|
|
8935
8938
|
label: "Address line 1",
|
|
@@ -8937,14 +8940,14 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8937
8940
|
...register("street1"),
|
|
8938
8941
|
error: errors.street1?.message
|
|
8939
8942
|
}
|
|
8940
|
-
)), /* @__PURE__ */
|
|
8943
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "md:col-span-2" }, /* @__PURE__ */ React21.createElement(
|
|
8941
8944
|
Input,
|
|
8942
8945
|
{
|
|
8943
8946
|
label: "Address line 2 (optional)",
|
|
8944
8947
|
placeholder: "Apt 4B",
|
|
8945
8948
|
...register("street2")
|
|
8946
8949
|
}
|
|
8947
|
-
)), /* @__PURE__ */
|
|
8950
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
8948
8951
|
Input,
|
|
8949
8952
|
{
|
|
8950
8953
|
label: "City",
|
|
@@ -8952,7 +8955,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8952
8955
|
...register("city"),
|
|
8953
8956
|
error: errors.city?.message
|
|
8954
8957
|
}
|
|
8955
|
-
), /* @__PURE__ */
|
|
8958
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8956
8959
|
Input,
|
|
8957
8960
|
{
|
|
8958
8961
|
label: "State",
|
|
@@ -8960,7 +8963,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8960
8963
|
...register("state"),
|
|
8961
8964
|
error: errors.state?.message
|
|
8962
8965
|
}
|
|
8963
|
-
), /* @__PURE__ */
|
|
8966
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8964
8967
|
Input,
|
|
8965
8968
|
{
|
|
8966
8969
|
label: "ZIP code",
|
|
@@ -8968,7 +8971,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8968
8971
|
...register("zip"),
|
|
8969
8972
|
error: errors.zip?.message
|
|
8970
8973
|
}
|
|
8971
|
-
), /* @__PURE__ */
|
|
8974
|
+
), /* @__PURE__ */ React21.createElement(
|
|
8972
8975
|
Input,
|
|
8973
8976
|
{
|
|
8974
8977
|
label: "Country",
|
|
@@ -8976,7 +8979,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8976
8979
|
...register("country"),
|
|
8977
8980
|
error: errors.country?.message
|
|
8978
8981
|
}
|
|
8979
|
-
)), /* @__PURE__ */
|
|
8982
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "flex justify-end gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
8980
8983
|
Button,
|
|
8981
8984
|
{
|
|
8982
8985
|
type: "button",
|
|
@@ -8984,7 +8987,7 @@ function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, i
|
|
|
8984
8987
|
onClick: onClose
|
|
8985
8988
|
},
|
|
8986
8989
|
"Cancel"
|
|
8987
|
-
), /* @__PURE__ */
|
|
8990
|
+
), /* @__PURE__ */ React21.createElement(Button, { type: "submit", disabled: isSubmitting }, isSubmitting ? "Adding Address..." : "Add Address")))
|
|
8988
8991
|
);
|
|
8989
8992
|
}
|
|
8990
8993
|
var checkoutSchema = z.object({
|
|
@@ -8996,7 +8999,7 @@ var PAYMENT_METHODS = [
|
|
|
8996
8999
|
{
|
|
8997
9000
|
label: "Card",
|
|
8998
9001
|
value: "Card",
|
|
8999
|
-
icon: /* @__PURE__ */
|
|
9002
|
+
icon: /* @__PURE__ */ React21.createElement(CreditCard, { className: "w-5 h-5" }),
|
|
9000
9003
|
description: "Pay securely with your credit or debit card",
|
|
9001
9004
|
className: "border-blue-500 hover:bg-blue-50",
|
|
9002
9005
|
activeClass: "bg-blue-50 border-blue-500 text-blue-700"
|
|
@@ -9004,7 +9007,7 @@ var PAYMENT_METHODS = [
|
|
|
9004
9007
|
{
|
|
9005
9008
|
label: "Cash",
|
|
9006
9009
|
value: "Cash",
|
|
9007
|
-
icon: /* @__PURE__ */
|
|
9010
|
+
icon: /* @__PURE__ */ React21.createElement(PackageCheck, { className: "w-5 h-5" }),
|
|
9008
9011
|
description: "Pay with cash on delivery or at pickup",
|
|
9009
9012
|
className: "border-amber-500 hover:bg-amber-50",
|
|
9010
9013
|
activeClass: "bg-amber-50 border-amber-500 text-amber-700"
|
|
@@ -9012,7 +9015,7 @@ var PAYMENT_METHODS = [
|
|
|
9012
9015
|
{
|
|
9013
9016
|
label: "Credit",
|
|
9014
9017
|
value: "Credit",
|
|
9015
|
-
icon: /* @__PURE__ */
|
|
9018
|
+
icon: /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "w-5 h-5" }),
|
|
9016
9019
|
description: "Use your account credit",
|
|
9017
9020
|
className: "border-emerald-500 hover:bg-emerald-50",
|
|
9018
9021
|
activeClass: "bg-emerald-50 border-emerald-500 text-emerald-700"
|
|
@@ -9216,7 +9219,7 @@ function CheckoutScreen() {
|
|
|
9216
9219
|
}
|
|
9217
9220
|
}
|
|
9218
9221
|
setIsSubmitting(true);
|
|
9219
|
-
toast("Submitting order...", { icon: /* @__PURE__ */
|
|
9222
|
+
toast("Submitting order...", { icon: /* @__PURE__ */ React21.createElement(CreditCard, { className: "h-4 w-4" }) });
|
|
9220
9223
|
try {
|
|
9221
9224
|
const items = (cart?.cartBody?.items || []).map((item) => ({
|
|
9222
9225
|
productVariantId: String(item.productVariantId),
|
|
@@ -9281,33 +9284,33 @@ function CheckoutScreen() {
|
|
|
9281
9284
|
const subtotal = cart.total;
|
|
9282
9285
|
const tax = 0;
|
|
9283
9286
|
const total = subtotal + shippingPrice + tax;
|
|
9284
|
-
return /* @__PURE__ */
|
|
9287
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement(
|
|
9285
9288
|
motion.div,
|
|
9286
9289
|
{
|
|
9287
9290
|
initial: { opacity: 0, y: 24 },
|
|
9288
9291
|
animate: { opacity: 1, y: 0 },
|
|
9289
9292
|
className: "space-y-6"
|
|
9290
9293
|
},
|
|
9291
|
-
/* @__PURE__ */
|
|
9292
|
-
/* @__PURE__ */
|
|
9293
|
-
/* @__PURE__ */
|
|
9294
|
-
/* @__PURE__ */
|
|
9294
|
+
/* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-4 w-4" }), "Secure checkout"),
|
|
9295
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Provide delivery details"),
|
|
9296
|
+
/* @__PURE__ */ React21.createElement("p", { className: "text-white/75 md:text-lg" }, "Our pharmacists handle every package with care. Share your shipping and billing information so we can dispatch your order within the next 12 hours."),
|
|
9297
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-3" }, checkoutSteps.map((step) => /* @__PURE__ */ React21.createElement(
|
|
9295
9298
|
"div",
|
|
9296
9299
|
{
|
|
9297
9300
|
key: step.id,
|
|
9298
9301
|
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"}`
|
|
9299
9302
|
},
|
|
9300
|
-
/* @__PURE__ */
|
|
9303
|
+
/* @__PURE__ */ React21.createElement("span", { className: "flex h-7 w-7 items-center justify-center rounded-full bg-white/20 text-xs font-bold" }, step.id),
|
|
9301
9304
|
step.label
|
|
9302
9305
|
)))
|
|
9303
|
-
)))), /* @__PURE__ */
|
|
9306
|
+
)))), /* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit) }, error && /* @__PURE__ */ React21.createElement("div", { className: "mb-4 text-red-600 font-semibold" }, error), /* @__PURE__ */ React21.createElement("div", { className: "pt-12 container mx-auto grid gap-10 px-4 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21.createElement(
|
|
9304
9307
|
motion.div,
|
|
9305
9308
|
{
|
|
9306
9309
|
initial: { opacity: 0, y: 24 },
|
|
9307
9310
|
animate: { opacity: 1, y: 0 },
|
|
9308
9311
|
className: "space-y-8"
|
|
9309
9312
|
},
|
|
9310
|
-
/* @__PURE__ */
|
|
9313
|
+
/* @__PURE__ */ React21.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Shipping information"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "We use temperature-aware packaging and real-time tracking on every shipment.")), /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-primary-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-primary-700" }, /* @__PURE__ */ React21.createElement(Truck, { className: "h-4 w-4" }), "Dispatch in 12h")), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 grid grid-cols-1 gap-4 md:grid-cols-2" }, isDelivery && /* @__PURE__ */ React21.createElement("div", { className: "md:col-span-2 space-y-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("label", { className: "block font-semibold" }, "Select Address"), /* @__PURE__ */ React21.createElement(
|
|
9311
9314
|
Button,
|
|
9312
9315
|
{
|
|
9313
9316
|
type: "button",
|
|
@@ -9318,15 +9321,15 @@ function CheckoutScreen() {
|
|
|
9318
9321
|
setIsAddressModalOpen(true);
|
|
9319
9322
|
}
|
|
9320
9323
|
},
|
|
9321
|
-
/* @__PURE__ */
|
|
9324
|
+
/* @__PURE__ */ React21.createElement(Plus, { className: "h-4 w-4 mr-2" }),
|
|
9322
9325
|
"Add New Address"
|
|
9323
|
-
)), userAddresses.length > 0 ? /* @__PURE__ */
|
|
9326
|
+
)), userAddresses.length > 0 ? /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4" }, userAddresses.map((addr) => /* @__PURE__ */ React21.createElement(
|
|
9324
9327
|
"label",
|
|
9325
9328
|
{
|
|
9326
9329
|
key: addr.id,
|
|
9327
9330
|
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`
|
|
9328
9331
|
},
|
|
9329
|
-
/* @__PURE__ */
|
|
9332
|
+
/* @__PURE__ */ React21.createElement(
|
|
9330
9333
|
"input",
|
|
9331
9334
|
{
|
|
9332
9335
|
type: "radio",
|
|
@@ -9347,7 +9350,7 @@ function CheckoutScreen() {
|
|
|
9347
9350
|
className: "mt-1"
|
|
9348
9351
|
}
|
|
9349
9352
|
),
|
|
9350
|
-
/* @__PURE__ */
|
|
9353
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-900" }, addr.name), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600" }, addr.street1), addr.street2 && /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600" }, addr.street2), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600" }, addr.city, ", ", addr.state, " ", addr.zip), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600" }, addr.country), addr.phone && /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-600 mt-1" }, addr.phone), /* @__PURE__ */ React21.createElement("div", { className: "mt-3 flex items-center gap-2" }, addr.isDefault && /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary-100 px-2.5 py-0.5 text-xs font-semibold text-primary-700" }, "Default"), /* @__PURE__ */ React21.createElement(
|
|
9351
9354
|
"button",
|
|
9352
9355
|
{
|
|
9353
9356
|
type: "button",
|
|
@@ -9358,9 +9361,9 @@ function CheckoutScreen() {
|
|
|
9358
9361
|
},
|
|
9359
9362
|
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"
|
|
9360
9363
|
},
|
|
9361
|
-
/* @__PURE__ */
|
|
9364
|
+
/* @__PURE__ */ React21.createElement(Edit3, { className: "h-3.5 w-3.5" }),
|
|
9362
9365
|
" Edit"
|
|
9363
|
-
), /* @__PURE__ */
|
|
9366
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9364
9367
|
"button",
|
|
9365
9368
|
{
|
|
9366
9369
|
type: "button",
|
|
@@ -9378,23 +9381,23 @@ function CheckoutScreen() {
|
|
|
9378
9381
|
},
|
|
9379
9382
|
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"
|
|
9380
9383
|
},
|
|
9381
|
-
/* @__PURE__ */
|
|
9384
|
+
/* @__PURE__ */ React21.createElement(Trash2, { className: "h-3.5 w-3.5" }),
|
|
9382
9385
|
" Delete"
|
|
9383
9386
|
)))
|
|
9384
|
-
))) : /* @__PURE__ */
|
|
9387
|
+
))) : /* @__PURE__ */ React21.createElement("div", { className: "text-center py-8 bg-slate-50 rounded-lg" }, /* @__PURE__ */ React21.createElement(MapPin, { className: "h-12 w-12 mx-auto text-slate-400" }), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 text-slate-600" }, "No addresses found"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "Add a new address to continue"))), !isDelivery && storeAddresses.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "md:col-span-2" }, /* @__PURE__ */ React21.createElement("label", { className: "block mb-2 font-semibold" }, "Select Pickup Location"), /* @__PURE__ */ React21.createElement(
|
|
9385
9388
|
"select",
|
|
9386
9389
|
{
|
|
9387
9390
|
className: "w-full border rounded p-2",
|
|
9388
9391
|
value: selectedStoreAddressId || "",
|
|
9389
9392
|
onChange: (e) => setSelectedStoreAddressId(e.target.value)
|
|
9390
9393
|
},
|
|
9391
|
-
storeAddresses.map((addr) => /* @__PURE__ */
|
|
9394
|
+
storeAddresses.map((addr) => /* @__PURE__ */ React21.createElement("option", { key: addr.id, value: addr.id }, addr.name, " - ", addr.street1, ", ", addr.city))
|
|
9392
9395
|
)))),
|
|
9393
|
-
isDelivery && selectedAddressId && /* @__PURE__ */
|
|
9396
|
+
isDelivery && selectedAddressId && /* @__PURE__ */ React21.createElement(Card, { className: "p-6 border border-gray-200 rounded-xl shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3 text-xl font-semibold text-gray-900 pb-4 mb-6 border-b" }, /* @__PURE__ */ React21.createElement(Truck, { className: "text-accent w-6 h-6" }), /* @__PURE__ */ React21.createElement("span", null, "Shipping Options")), shippingRatesLoading ? /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-center py-12" }, /* @__PURE__ */ React21.createElement("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-accent" }), /* @__PURE__ */ React21.createElement("span", { className: "ml-3 text-gray-600" }, "Loading shipping options...")) : shippingRatesError ? /* @__PURE__ */ React21.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React21.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-red-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-8 h-8 text-red-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }))), /* @__PURE__ */ React21.createElement("p", { className: "text-red-500 text-lg font-medium" }, "Error loading shipping options"), /* @__PURE__ */ React21.createElement("p", { className: "text-red-400 text-sm mt-1" }, shippingRatesError)) : shippingRates && shippingRates.length > 0 ? /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, shippingRates.map((rate) => {
|
|
9394
9397
|
const isSelected = !!selectedShippingRateId && selectedShippingRateId === rate.objectId;
|
|
9395
9398
|
const isTest = rate.test;
|
|
9396
9399
|
const hasAttributes = rate.attributes && rate.attributes.length > 0;
|
|
9397
|
-
return /* @__PURE__ */
|
|
9400
|
+
return /* @__PURE__ */ React21.createElement(
|
|
9398
9401
|
"div",
|
|
9399
9402
|
{
|
|
9400
9403
|
key: rate.objectId,
|
|
@@ -9403,7 +9406,7 @@ function CheckoutScreen() {
|
|
|
9403
9406
|
onMouseLeave: () => setShippingPrice(parseFloat(rate.amountLocal)),
|
|
9404
9407
|
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"}`
|
|
9405
9408
|
},
|
|
9406
|
-
/* @__PURE__ */
|
|
9409
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-start justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-4 flex-1" }, /* @__PURE__ */ React21.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React21.createElement(
|
|
9407
9410
|
Image3,
|
|
9408
9411
|
{
|
|
9409
9412
|
src: rate.providerImage75 || "/placeholder-product.jpg",
|
|
@@ -9416,18 +9419,18 @@ function CheckoutScreen() {
|
|
|
9416
9419
|
width: 48,
|
|
9417
9420
|
height: 48
|
|
9418
9421
|
}
|
|
9419
|
-
)), /* @__PURE__ */
|
|
9422
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2 mb-2" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, rate.provider, " ", rate.servicelevel?.name), isTest && /* @__PURE__ */ React21.createElement("span", { className: "px-2 py-1 text-xs font-medium bg-orange-100 text-orange-800 rounded-full" }, "TEST")), hasAttributes && /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2 mb-3" }, rate.attributes.map((attr) => /* @__PURE__ */ React21.createElement(
|
|
9420
9423
|
"span",
|
|
9421
9424
|
{
|
|
9422
9425
|
key: attr,
|
|
9423
9426
|
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"}`
|
|
9424
9427
|
},
|
|
9425
9428
|
attr
|
|
9426
|
-
))), /* @__PURE__ */
|
|
9427
|
-
isSelected && /* @__PURE__ */
|
|
9429
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 text-sm text-gray-600" }, rate.durationTerms && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" })), /* @__PURE__ */ React21.createElement("span", null, rate.durationTerms)), rate.estimatedDays && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" })), /* @__PURE__ */ React21.createElement("span", null, "Estimated ", rate.estimatedDays, " day", rate.estimatedDays !== 1 ? "s" : "")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M9 5H7a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" })), /* @__PURE__ */ React21.createElement("span", null, "Carrier: ", rate.provider)), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1" })), /* @__PURE__ */ React21.createElement("span", null, "Currency: ", rate.currency))))), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-end" }, /* @__PURE__ */ React21.createElement("div", { className: "text-2xl font-bold text-gray-900" }, formatPrice(parseFloat(rate.amount))), rate.amount !== rate.amountLocal && /* @__PURE__ */ React21.createElement("div", { className: "text-sm text-gray-500" }, rate.amountLocal, " ", rate.currencyLocal))),
|
|
9430
|
+
isSelected && /* @__PURE__ */ React21.createElement("div", { className: "absolute top-3 right-3" }, /* @__PURE__ */ React21.createElement("div", { className: "w-6 h-6 bg-primary-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21.createElement(Check, { className: "w-4 h-4 text-white" })))
|
|
9428
9431
|
);
|
|
9429
|
-
})) : /* @__PURE__ */
|
|
9430
|
-
), /* @__PURE__ */
|
|
9432
|
+
})) : /* @__PURE__ */ React21.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React21.createElement("div", { className: "w-16 h-16 mx-auto mb-4 bg-gray-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React21.createElement(Truck, { className: "w-8 h-8 text-gray-400" })), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-500 text-lg font-medium" }, "No shipping options available"), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-400 text-sm mt-1" }, "Please check the shipping address or try a different location.")))
|
|
9433
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9431
9434
|
motion.aside,
|
|
9432
9435
|
{
|
|
9433
9436
|
initial: { opacity: 0, y: 32 },
|
|
@@ -9435,22 +9438,22 @@ function CheckoutScreen() {
|
|
|
9435
9438
|
transition: { duration: 0.5, ease: "easeOut", delay: 0.1 },
|
|
9436
9439
|
className: "space-y-10 lg:sticky lg:top-24"
|
|
9437
9440
|
},
|
|
9438
|
-
/* @__PURE__ */
|
|
9441
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-xl shadow-primary-50/50 transition hover:shadow-primary-100/60" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "Order Summary"), /* @__PURE__ */ React21.createElement("section", { className: "mt-6 space-y-4" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-xs font-semibold text-slate-700 uppercase tracking-wider" }, "Delivery Method"), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 gap-3" }, [
|
|
9439
9442
|
{
|
|
9440
9443
|
label: "Delivery",
|
|
9441
|
-
icon: /* @__PURE__ */
|
|
9444
|
+
icon: /* @__PURE__ */ React21.createElement(Truck, { className: "w-5 h-5" }),
|
|
9442
9445
|
value: true,
|
|
9443
9446
|
desc: "Shipped to your address"
|
|
9444
9447
|
},
|
|
9445
9448
|
{
|
|
9446
9449
|
label: "Pickup",
|
|
9447
|
-
icon: /* @__PURE__ */
|
|
9450
|
+
icon: /* @__PURE__ */ React21.createElement(MapPin, { className: "w-5 h-5" }),
|
|
9448
9451
|
value: false,
|
|
9449
9452
|
desc: "Collect from pharmacy"
|
|
9450
9453
|
}
|
|
9451
9454
|
].map((option) => {
|
|
9452
9455
|
const active = isDelivery === option.value;
|
|
9453
|
-
return /* @__PURE__ */
|
|
9456
|
+
return /* @__PURE__ */ React21.createElement(
|
|
9454
9457
|
"button",
|
|
9455
9458
|
{
|
|
9456
9459
|
key: option.label,
|
|
@@ -9459,18 +9462,18 @@ function CheckoutScreen() {
|
|
|
9459
9462
|
"aria-pressed": active,
|
|
9460
9463
|
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"}`
|
|
9461
9464
|
},
|
|
9462
|
-
/* @__PURE__ */
|
|
9465
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
9463
9466
|
"div",
|
|
9464
9467
|
{
|
|
9465
9468
|
className: `p-2 rounded-lg ${active ? "bg-primary-100 text-primary-600" : "bg-slate-100 text-slate-600 group-hover:bg-slate-50"}`
|
|
9466
9469
|
},
|
|
9467
9470
|
option.icon
|
|
9468
|
-
), /* @__PURE__ */
|
|
9469
|
-
active && /* @__PURE__ */
|
|
9471
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "text-left" }, /* @__PURE__ */ React21.createElement("div", { className: "font-medium text-slate-900" }, option.label), /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-slate-500" }, option.desc))),
|
|
9472
|
+
active && /* @__PURE__ */ React21.createElement("div", { className: "w-5 h-5 rounded-full bg-primary-500 flex items-center justify-center text-white shadow-sm" }, /* @__PURE__ */ React21.createElement(Check, { className: "w-3 h-3" }))
|
|
9470
9473
|
);
|
|
9471
|
-
}))), /* @__PURE__ */
|
|
9474
|
+
}))), /* @__PURE__ */ React21.createElement("section", { className: "mt-8 space-y-4" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-xs font-semibold text-slate-700 uppercase tracking-wider" }, "Payment Method"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, PAYMENT_METHODS.map((pm) => {
|
|
9472
9475
|
const active = paymentMethod === pm.value;
|
|
9473
|
-
return /* @__PURE__ */
|
|
9476
|
+
return /* @__PURE__ */ React21.createElement(
|
|
9474
9477
|
"button",
|
|
9475
9478
|
{
|
|
9476
9479
|
key: pm.value,
|
|
@@ -9478,22 +9481,22 @@ function CheckoutScreen() {
|
|
|
9478
9481
|
onClick: () => setPaymentMethod(pm.value),
|
|
9479
9482
|
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`}`
|
|
9480
9483
|
},
|
|
9481
|
-
/* @__PURE__ */
|
|
9484
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
9482
9485
|
"div",
|
|
9483
9486
|
{
|
|
9484
9487
|
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"}`
|
|
9485
9488
|
},
|
|
9486
9489
|
pm.icon
|
|
9487
|
-
), /* @__PURE__ */
|
|
9488
|
-
active && /* @__PURE__ */
|
|
9490
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-medium text-slate-900" }, pm.label)),
|
|
9491
|
+
active && /* @__PURE__ */ React21.createElement("div", { className: "w-4 h-4 rounded-full bg-primary-500 flex items-center justify-center text-white shadow-sm" }, /* @__PURE__ */ React21.createElement(Check, { className: "w-2.5 h-2.5" }))
|
|
9489
9492
|
);
|
|
9490
|
-
})), /* @__PURE__ */
|
|
9493
|
+
})), /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-slate-500 mt-2 pl-1 leading-relaxed" }, paymentMethod === "Card" && "You will be redirected to a secure payment page.", paymentMethod === "Cash" && "Pay with cash at the time of delivery or pickup.", paymentMethod === "Credit" && "Use your available account credit for this order.")), /* @__PURE__ */ React21.createElement("section", { className: "mt-8 pt-6 border-t border-slate-100" }, /* @__PURE__ */ React21.createElement("div", { className: "max-h-60 space-y-4 overflow-y-auto pr-2 scrollbar-thin scrollbar-thumb-slate-200 hover:scrollbar-thumb-slate-300" }, cart?.cartBody?.items?.map((item) => /* @__PURE__ */ React21.createElement(
|
|
9491
9494
|
"div",
|
|
9492
9495
|
{
|
|
9493
9496
|
key: item.productId,
|
|
9494
9497
|
className: "flex gap-4 rounded-2xl border border-slate-100 p-4 hover:bg-slate-50/50 transition"
|
|
9495
9498
|
},
|
|
9496
|
-
/* @__PURE__ */
|
|
9499
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-xl bg-slate-100 text-slate-400" }, /* @__PURE__ */ React21.createElement(
|
|
9497
9500
|
Image3,
|
|
9498
9501
|
{
|
|
9499
9502
|
src: item.productVariantData.productMedia?.[0]?.file || "/placeholder-product.jpg",
|
|
@@ -9503,9 +9506,9 @@ function CheckoutScreen() {
|
|
|
9503
9506
|
className: "object-contain"
|
|
9504
9507
|
}
|
|
9505
9508
|
)),
|
|
9506
|
-
/* @__PURE__ */
|
|
9507
|
-
/* @__PURE__ */
|
|
9508
|
-
))), /* @__PURE__ */
|
|
9509
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold text-slate-900" }, item?.productVariantData?.name), /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-slate-500" }, "Qty ", item.quantity)),
|
|
9510
|
+
/* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold text-slate-900" }, formatPrice(item.productVariantData.finalPrice * item.quantity))
|
|
9511
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-y-3 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Subtotal"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold text-slate-900" }, formatPrice(subtotal))), isDelivery && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Shipping"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold" }, formatPrice(shippingPrice))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", null, "Estimated tax"), /* @__PURE__ */ React21.createElement("span", { className: "font-semibold" }, formatPrice(tax))), /* @__PURE__ */ React21.createElement("div", { className: "rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-base font-semibold text-slate-900" }, /* @__PURE__ */ React21.createElement("span", null, "Total Due"), /* @__PURE__ */ React21.createElement("span", null, formatPrice(total))), /* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-xs text-slate-500" }, "Tax is estimated. Final amount confirmed after payment.")))), /* @__PURE__ */ React21.createElement(
|
|
9509
9512
|
Button,
|
|
9510
9513
|
{
|
|
9511
9514
|
type: "submit",
|
|
@@ -9513,11 +9516,11 @@ function CheckoutScreen() {
|
|
|
9513
9516
|
isLoading: isSubmitting,
|
|
9514
9517
|
className: "mt-6 w-full transition-transform hover:scale-[1.02] active:scale-[0.99]"
|
|
9515
9518
|
},
|
|
9516
|
-
/* @__PURE__ */
|
|
9519
|
+
/* @__PURE__ */ React21.createElement(CreditCard, { className: "h-5 w-5" }),
|
|
9517
9520
|
isSubmitting ? "Placing order..." : "Place Secure Order"
|
|
9518
|
-
), /* @__PURE__ */
|
|
9519
|
-
/* @__PURE__ */
|
|
9520
|
-
))), /* @__PURE__ */
|
|
9521
|
+
), /* @__PURE__ */ React21.createElement("p", { className: "mt-4 flex items-center justify-center gap-2 text-xs text-slate-500" }, /* @__PURE__ */ React21.createElement(Lock, { className: "h-4 w-4" }), "Fully encrypted checkout \u2014 cancel anytime before shipment.")),
|
|
9522
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/80 p-6 text-sm text-primary-700 shadow-sm hover:shadow-md transition-shadow" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.3em] text-primary-800" }, "Why Patients Choose Us"), /* @__PURE__ */ React21.createElement("ul", { className: "mt-4 space-y-3 text-primary-700 leading-relaxed" }, /* @__PURE__ */ React21.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(PackageCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React21.createElement("span", null, "Pharmacy-grade verification on every order.")), /* @__PURE__ */ React21.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React21.createElement("span", null, "Cold-chain logistics for sensitive medications.")), /* @__PURE__ */ React21.createElement("li", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(Truck, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ React21.createElement("span", null, "Real-time tracking and SMS updates from prep to delivery."))))
|
|
9523
|
+
))), /* @__PURE__ */ React21.createElement(
|
|
9521
9524
|
AddressFormModal,
|
|
9522
9525
|
{
|
|
9523
9526
|
isOpen: isAddressModalOpen,
|
|
@@ -9573,7 +9576,7 @@ function LoginScreen() {
|
|
|
9573
9576
|
setIsSubmitting(false);
|
|
9574
9577
|
}
|
|
9575
9578
|
};
|
|
9576
|
-
return /* @__PURE__ */
|
|
9579
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("div", { className: "grid min-h-screen overflow-hidden bg-white lg:grid-cols-[1.1fr_0.9fr]" }, /* @__PURE__ */ React21.createElement(
|
|
9577
9580
|
motion.section,
|
|
9578
9581
|
{
|
|
9579
9582
|
initial: { opacity: 0, x: -24 },
|
|
@@ -9581,18 +9584,18 @@ function LoginScreen() {
|
|
|
9581
9584
|
transition: { duration: 0.4 },
|
|
9582
9585
|
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"
|
|
9583
9586
|
},
|
|
9584
|
-
/* @__PURE__ */
|
|
9585
|
-
/* @__PURE__ */
|
|
9586
|
-
/* @__PURE__ */
|
|
9587
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21.createElement(HeartPulse, { className: "h-4 w-4" }), "Hey Pharmacist"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Pharmacy-grade care for your household"), /* @__PURE__ */ React21.createElement("p", { className: "max-w-xl text-white/80" }, "Log in to unlock personalized regimens, pharmacist support, and fast delivery on wellness essentials curated just for you.")),
|
|
9588
|
+
/* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/80" }, "HIPAA-compliant security keeps your health information protected.")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/80" }, "Pharmacists ready to chat in under 10 minutes for medication support."))),
|
|
9589
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement("span", null, "Need an account?"), /* @__PURE__ */ React21.createElement(
|
|
9587
9590
|
Link8,
|
|
9588
9591
|
{
|
|
9589
9592
|
href: "/register",
|
|
9590
9593
|
className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2 font-semibold transition hover:bg-white/25"
|
|
9591
9594
|
},
|
|
9592
9595
|
"Create one now",
|
|
9593
|
-
/* @__PURE__ */
|
|
9596
|
+
/* @__PURE__ */ React21.createElement(ArrowRight, { className: "h-4 w-4" })
|
|
9594
9597
|
))
|
|
9595
|
-
), /* @__PURE__ */
|
|
9598
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9596
9599
|
motion.section,
|
|
9597
9600
|
{
|
|
9598
9601
|
initial: { opacity: 0, x: 24 },
|
|
@@ -9600,7 +9603,7 @@ function LoginScreen() {
|
|
|
9600
9603
|
transition: { duration: 0.4 },
|
|
9601
9604
|
className: "flex items-center justify-center px-6 py-12 lg:px-16"
|
|
9602
9605
|
},
|
|
9603
|
-
/* @__PURE__ */
|
|
9606
|
+
/* @__PURE__ */ React21.createElement("div", { className: "w-full max-w-md space-y-10" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-3xl font-bold text-slate-900" }, "Sign in"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "Welcome back! Enter your details to continue your personalized care plan.")), /* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement(
|
|
9604
9607
|
Input,
|
|
9605
9608
|
{
|
|
9606
9609
|
type: "email",
|
|
@@ -9609,7 +9612,7 @@ function LoginScreen() {
|
|
|
9609
9612
|
...register("email"),
|
|
9610
9613
|
error: errors.email?.message
|
|
9611
9614
|
}
|
|
9612
|
-
)), /* @__PURE__ */
|
|
9615
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9613
9616
|
Input,
|
|
9614
9617
|
{
|
|
9615
9618
|
type: showPassword ? "text" : "password",
|
|
@@ -9618,28 +9621,28 @@ function LoginScreen() {
|
|
|
9618
9621
|
...register("password"),
|
|
9619
9622
|
error: errors.password?.message
|
|
9620
9623
|
}
|
|
9621
|
-
), /* @__PURE__ */
|
|
9624
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9622
9625
|
"button",
|
|
9623
9626
|
{
|
|
9624
9627
|
type: "button",
|
|
9625
9628
|
onClick: () => setShowPassword((prev) => !prev),
|
|
9626
9629
|
className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
|
|
9627
9630
|
},
|
|
9628
|
-
showPassword ? /* @__PURE__ */
|
|
9629
|
-
)), /* @__PURE__ */
|
|
9631
|
+
showPassword ? /* @__PURE__ */ React21.createElement(EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21.createElement(Eye, { className: "h-5 w-5" })
|
|
9632
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-sm" }, /* @__PURE__ */ React21.createElement("label", { className: "flex items-center gap-2 text-slate-600" }, /* @__PURE__ */ React21.createElement(
|
|
9630
9633
|
"input",
|
|
9631
9634
|
{
|
|
9632
9635
|
type: "checkbox",
|
|
9633
9636
|
className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
|
|
9634
9637
|
}
|
|
9635
|
-
), "Remember me"), /* @__PURE__ */
|
|
9638
|
+
), "Remember me"), /* @__PURE__ */ React21.createElement(
|
|
9636
9639
|
Link8,
|
|
9637
9640
|
{
|
|
9638
9641
|
href: "/forgot-password",
|
|
9639
9642
|
className: "font-medium text-primary-600 transition hover:text-primary-700"
|
|
9640
9643
|
},
|
|
9641
9644
|
"Forgot password?"
|
|
9642
|
-
)), /* @__PURE__ */
|
|
9645
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
9643
9646
|
Button,
|
|
9644
9647
|
{
|
|
9645
9648
|
type: "submit",
|
|
@@ -9648,7 +9651,7 @@ function LoginScreen() {
|
|
|
9648
9651
|
className: "w-full"
|
|
9649
9652
|
},
|
|
9650
9653
|
"Sign in securely"
|
|
9651
|
-
)), /* @__PURE__ */
|
|
9654
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-slate-50 p-6 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(Lock, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "Secure by design"), /* @__PURE__ */ React21.createElement("p", null, "Encrypted sessions, multi-factor ready, and privacy-first policies keep your personal data safe.")))))
|
|
9652
9655
|
)));
|
|
9653
9656
|
}
|
|
9654
9657
|
var registerSchema = z.object({
|
|
@@ -9699,7 +9702,7 @@ function RegisterScreen() {
|
|
|
9699
9702
|
setIsSubmitting(false);
|
|
9700
9703
|
}
|
|
9701
9704
|
};
|
|
9702
|
-
return /* @__PURE__ */
|
|
9705
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("div", { className: "grid min-h-screen overflow-hidden bg-white lg:grid-cols-[0.95fr_1.05fr]" }, /* @__PURE__ */ React21.createElement(
|
|
9703
9706
|
motion.section,
|
|
9704
9707
|
{
|
|
9705
9708
|
initial: { opacity: 0, x: -24 },
|
|
@@ -9707,9 +9710,9 @@ function RegisterScreen() {
|
|
|
9707
9710
|
transition: { duration: 0.4 },
|
|
9708
9711
|
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"
|
|
9709
9712
|
},
|
|
9710
|
-
/* @__PURE__ */
|
|
9711
|
-
/* @__PURE__ */
|
|
9712
|
-
/* @__PURE__ */
|
|
9713
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21.createElement(HeartPulse, { className: "h-4 w-4" }), "Join Hey Pharmacist"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight lg:text-5xl" }, "Create your wellness account"), /* @__PURE__ */ React21.createElement("p", { className: "max-w-xl text-white/80" }, "Unlock concierge-level pharmacy support, curated product recommendations, and smarter refills designed for busy families.")),
|
|
9714
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-4 rounded-3xl bg-white/10 p-6 backdrop-blur" }, BENEFITS.map((benefit) => /* @__PURE__ */ React21.createElement("div", { key: benefit, className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(CheckCircle2, { className: "h-5 w-5 text-white" }), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/85" }, benefit)))),
|
|
9715
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-6 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement("span", null, "Already part of the community?"), /* @__PURE__ */ React21.createElement(
|
|
9713
9716
|
Link8,
|
|
9714
9717
|
{
|
|
9715
9718
|
href: "/login",
|
|
@@ -9717,7 +9720,7 @@ function RegisterScreen() {
|
|
|
9717
9720
|
},
|
|
9718
9721
|
"Sign in"
|
|
9719
9722
|
))
|
|
9720
|
-
), /* @__PURE__ */
|
|
9723
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9721
9724
|
motion.section,
|
|
9722
9725
|
{
|
|
9723
9726
|
initial: { opacity: 0, x: 24 },
|
|
@@ -9725,13 +9728,13 @@ function RegisterScreen() {
|
|
|
9725
9728
|
transition: { duration: 0.4 },
|
|
9726
9729
|
className: "flex items-center justify-center px-6 py-12 lg:px-16"
|
|
9727
9730
|
},
|
|
9728
|
-
/* @__PURE__ */
|
|
9731
|
+
/* @__PURE__ */ React21.createElement("div", { className: "w-full max-w-lg space-y-10" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-3xl font-bold text-slate-900" }, "Create an account"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "Start your personalized care journey with pharmacist-backed guidance.")), /* @__PURE__ */ React21.createElement(
|
|
9729
9732
|
"form",
|
|
9730
9733
|
{
|
|
9731
9734
|
onSubmit: handleSubmit(onSubmit),
|
|
9732
9735
|
className: "space-y-6 rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50"
|
|
9733
9736
|
},
|
|
9734
|
-
/* @__PURE__ */
|
|
9737
|
+
/* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
9735
9738
|
Input,
|
|
9736
9739
|
{
|
|
9737
9740
|
label: "First name",
|
|
@@ -9739,7 +9742,7 @@ function RegisterScreen() {
|
|
|
9739
9742
|
...register("firstName"),
|
|
9740
9743
|
error: errors.firstName?.message
|
|
9741
9744
|
}
|
|
9742
|
-
), /* @__PURE__ */
|
|
9745
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9743
9746
|
Input,
|
|
9744
9747
|
{
|
|
9745
9748
|
label: "Last name",
|
|
@@ -9748,7 +9751,7 @@ function RegisterScreen() {
|
|
|
9748
9751
|
error: errors.lastName?.message
|
|
9749
9752
|
}
|
|
9750
9753
|
)),
|
|
9751
|
-
/* @__PURE__ */
|
|
9754
|
+
/* @__PURE__ */ React21.createElement(
|
|
9752
9755
|
Input,
|
|
9753
9756
|
{
|
|
9754
9757
|
type: "email",
|
|
@@ -9758,7 +9761,7 @@ function RegisterScreen() {
|
|
|
9758
9761
|
error: errors.email?.message
|
|
9759
9762
|
}
|
|
9760
9763
|
),
|
|
9761
|
-
/* @__PURE__ */
|
|
9764
|
+
/* @__PURE__ */ React21.createElement(
|
|
9762
9765
|
Input,
|
|
9763
9766
|
{
|
|
9764
9767
|
type: "tel",
|
|
@@ -9768,7 +9771,7 @@ function RegisterScreen() {
|
|
|
9768
9771
|
error: errors.phone?.message
|
|
9769
9772
|
}
|
|
9770
9773
|
),
|
|
9771
|
-
/* @__PURE__ */
|
|
9774
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9772
9775
|
Input,
|
|
9773
9776
|
{
|
|
9774
9777
|
type: showPassword ? "text" : "password",
|
|
@@ -9777,16 +9780,16 @@ function RegisterScreen() {
|
|
|
9777
9780
|
...register("password"),
|
|
9778
9781
|
error: errors.password?.message
|
|
9779
9782
|
}
|
|
9780
|
-
), /* @__PURE__ */
|
|
9783
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9781
9784
|
"button",
|
|
9782
9785
|
{
|
|
9783
9786
|
type: "button",
|
|
9784
9787
|
onClick: () => setShowPassword((prev) => !prev),
|
|
9785
9788
|
className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
|
|
9786
9789
|
},
|
|
9787
|
-
showPassword ? /* @__PURE__ */
|
|
9790
|
+
showPassword ? /* @__PURE__ */ React21.createElement(EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21.createElement(Eye, { className: "h-5 w-5" })
|
|
9788
9791
|
)),
|
|
9789
|
-
/* @__PURE__ */
|
|
9792
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9790
9793
|
Input,
|
|
9791
9794
|
{
|
|
9792
9795
|
type: showConfirmPassword ? "text" : "password",
|
|
@@ -9795,16 +9798,16 @@ function RegisterScreen() {
|
|
|
9795
9798
|
...register("confirmPassword"),
|
|
9796
9799
|
error: errors.confirmPassword?.message
|
|
9797
9800
|
}
|
|
9798
|
-
), /* @__PURE__ */
|
|
9801
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9799
9802
|
"button",
|
|
9800
9803
|
{
|
|
9801
9804
|
type: "button",
|
|
9802
9805
|
onClick: () => setShowConfirmPassword((prev) => !prev),
|
|
9803
9806
|
className: "absolute right-3 top-[42px] text-slate-400 transition hover:text-slate-600"
|
|
9804
9807
|
},
|
|
9805
|
-
showConfirmPassword ? /* @__PURE__ */
|
|
9808
|
+
showConfirmPassword ? /* @__PURE__ */ React21.createElement(EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21.createElement(Eye, { className: "h-5 w-5" })
|
|
9806
9809
|
)),
|
|
9807
|
-
/* @__PURE__ */
|
|
9810
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement(Shield, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "By creating an account, you agree to our", " ", /* @__PURE__ */ React21.createElement(Link8, { href: "/terms", className: "font-semibold text-primary-600 hover:text-primary-700" }, "Terms of Service"), " ", "and", " ", /* @__PURE__ */ React21.createElement(
|
|
9808
9811
|
Link8,
|
|
9809
9812
|
{
|
|
9810
9813
|
href: "/privacy",
|
|
@@ -9812,7 +9815,7 @@ function RegisterScreen() {
|
|
|
9812
9815
|
},
|
|
9813
9816
|
"Privacy Policy"
|
|
9814
9817
|
), ". We protect your information with bank-level encryption.")),
|
|
9815
|
-
/* @__PURE__ */
|
|
9818
|
+
/* @__PURE__ */ React21.createElement(
|
|
9816
9819
|
Button,
|
|
9817
9820
|
{
|
|
9818
9821
|
type: "submit",
|
|
@@ -9820,10 +9823,10 @@ function RegisterScreen() {
|
|
|
9820
9823
|
isLoading: isSubmitting,
|
|
9821
9824
|
className: "w-full"
|
|
9822
9825
|
},
|
|
9823
|
-
/* @__PURE__ */
|
|
9826
|
+
/* @__PURE__ */ React21.createElement(UserPlus, { className: "h-5 w-5" }),
|
|
9824
9827
|
"Create my account"
|
|
9825
9828
|
)
|
|
9826
|
-
), /* @__PURE__ */
|
|
9829
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-slate-50 p-6 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21.createElement(Heart, { className: "mt-0.5 h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "Members love us"), /* @__PURE__ */ React21.createElement("p", null, "92% of patients report improved adherence after receiving pharmacist touchpoints through their Hey Pharmacist account.")))))
|
|
9827
9830
|
)));
|
|
9828
9831
|
}
|
|
9829
9832
|
var profileSchema = z.object({
|
|
@@ -9890,15 +9893,15 @@ function ProfileScreen() {
|
|
|
9890
9893
|
href: buildPath("/account/addresses")
|
|
9891
9894
|
}
|
|
9892
9895
|
];
|
|
9893
|
-
return /* @__PURE__ */
|
|
9896
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white mb-8" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement(
|
|
9894
9897
|
motion.div,
|
|
9895
9898
|
{
|
|
9896
9899
|
initial: { opacity: 0, y: 24 },
|
|
9897
9900
|
animate: { opacity: 1, y: 0 },
|
|
9898
9901
|
className: "flex flex-col gap-8 md:flex-row md:items-center md:justify-between"
|
|
9899
9902
|
},
|
|
9900
|
-
/* @__PURE__ */
|
|
9901
|
-
/* @__PURE__ */
|
|
9903
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-5" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21.createElement(HeartPulse, { className: "h-4 w-4" }), "My account"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Hello, ", user.firstname, " ", user.lastname), /* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Manage profile details, shipping preferences, and personalized recommendations. Our pharmacists keep your care plan up to date."), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-4 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-2" }, /* @__PURE__ */ React21.createElement(ShieldCheck, { className: "h-4 w-4" }), "Account secured with multi-factor ready login"))),
|
|
9904
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center gap-4 rounded-3xl bg-white/15 p-6 text-center backdrop-blur" }, /* @__PURE__ */ React21.createElement("div", { className: "flex h-24 w-24 items-center justify-center rounded-full bg-white/20 text-3xl font-bold text-white" }, getInitials(user?.firstname || "", user?.lastname || "") || ""), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-white/80" }, user.email), /* @__PURE__ */ React21.createElement(
|
|
9902
9905
|
Button,
|
|
9903
9906
|
{
|
|
9904
9907
|
variant: "ghost",
|
|
@@ -9907,14 +9910,14 @@ function ProfileScreen() {
|
|
|
9907
9910
|
},
|
|
9908
9911
|
"Change password"
|
|
9909
9912
|
))
|
|
9910
|
-
))), /* @__PURE__ */
|
|
9913
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]" }, /* @__PURE__ */ React21.createElement(
|
|
9911
9914
|
motion.div,
|
|
9912
9915
|
{
|
|
9913
9916
|
initial: { opacity: 0, y: 24 },
|
|
9914
9917
|
animate: { opacity: 1, y: 0 },
|
|
9915
9918
|
className: "space-y-6"
|
|
9916
9919
|
},
|
|
9917
|
-
/* @__PURE__ */
|
|
9920
|
+
/* @__PURE__ */ React21.createElement("section", { className: "rounded-3xl border border-slate-100 bg-white p-8 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-xl font-semibold text-slate-900" }, "Personal information"), /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-5 w-5 text-primary-500" })), /* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "mt-6 space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
9918
9921
|
Input,
|
|
9919
9922
|
{
|
|
9920
9923
|
label: "First name",
|
|
@@ -9922,7 +9925,7 @@ function ProfileScreen() {
|
|
|
9922
9925
|
...register("firstName"),
|
|
9923
9926
|
error: errors.firstName?.message
|
|
9924
9927
|
}
|
|
9925
|
-
), /* @__PURE__ */
|
|
9928
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9926
9929
|
Input,
|
|
9927
9930
|
{
|
|
9928
9931
|
label: "Last name",
|
|
@@ -9930,7 +9933,7 @@ function ProfileScreen() {
|
|
|
9930
9933
|
...register("lastName"),
|
|
9931
9934
|
error: errors.lastName?.message
|
|
9932
9935
|
}
|
|
9933
|
-
)), /* @__PURE__ */
|
|
9936
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9934
9937
|
Input,
|
|
9935
9938
|
{
|
|
9936
9939
|
type: "email",
|
|
@@ -9940,7 +9943,7 @@ function ProfileScreen() {
|
|
|
9940
9943
|
...register("email"),
|
|
9941
9944
|
error: errors.email?.message
|
|
9942
9945
|
}
|
|
9943
|
-
), /* @__PURE__ */
|
|
9946
|
+
), /* @__PURE__ */ React21.createElement(Mail, { className: "absolute left-3 top-[38px] h-4 w-4 text-slate-400" })), /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
9944
9947
|
Input,
|
|
9945
9948
|
{
|
|
9946
9949
|
type: "tel",
|
|
@@ -9950,7 +9953,7 @@ function ProfileScreen() {
|
|
|
9950
9953
|
...register("phone"),
|
|
9951
9954
|
error: errors.phone?.message
|
|
9952
9955
|
}
|
|
9953
|
-
), /* @__PURE__ */
|
|
9956
|
+
), /* @__PURE__ */ React21.createElement(Phone, { className: "absolute left-3 top-[38px] h-4 w-4 text-slate-400" })), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
9954
9957
|
Button,
|
|
9955
9958
|
{
|
|
9956
9959
|
type: "submit",
|
|
@@ -9958,7 +9961,7 @@ function ProfileScreen() {
|
|
|
9958
9961
|
isLoading: isSubmitting
|
|
9959
9962
|
},
|
|
9960
9963
|
"Save changes"
|
|
9961
|
-
), /* @__PURE__ */
|
|
9964
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9962
9965
|
Button,
|
|
9963
9966
|
{
|
|
9964
9967
|
type: "button",
|
|
@@ -9968,16 +9971,16 @@ function ProfileScreen() {
|
|
|
9968
9971
|
},
|
|
9969
9972
|
"View recent orders"
|
|
9970
9973
|
)))),
|
|
9971
|
-
/* @__PURE__ */
|
|
9974
|
+
/* @__PURE__ */ React21.createElement("section", { className: "grid gap-4 md:grid-cols-2" }, quickLinks.map((item) => /* @__PURE__ */ React21.createElement(
|
|
9972
9975
|
Link8,
|
|
9973
9976
|
{
|
|
9974
9977
|
key: item.href,
|
|
9975
9978
|
href: item.href,
|
|
9976
9979
|
className: "group rounded-3xl border border-slate-100 bg-white p-6 shadow-sm transition hover:-translate-y-1 hover:shadow-lg"
|
|
9977
9980
|
},
|
|
9978
|
-
/* @__PURE__ */
|
|
9981
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement("span", { className: "rounded-2xl bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React21.createElement(item.icon, { className: "h-5 w-5" })), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-base font-semibold text-slate-900 group-hover:text-primary-600" }, item.label), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, item.description)))
|
|
9979
9982
|
)))
|
|
9980
|
-
), /* @__PURE__ */
|
|
9983
|
+
), /* @__PURE__ */ React21.createElement(
|
|
9981
9984
|
motion.aside,
|
|
9982
9985
|
{
|
|
9983
9986
|
initial: { opacity: 0, y: 24 },
|
|
@@ -9985,7 +9988,7 @@ function ProfileScreen() {
|
|
|
9985
9988
|
transition: { delay: 0.1 },
|
|
9986
9989
|
className: "space-y-6"
|
|
9987
9990
|
},
|
|
9988
|
-
/* @__PURE__ */
|
|
9991
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, "Care preferences"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm text-slate-600" }, "Customize how we support you. Set refill reminders or manage communication preferences to stay aligned with your wellness goals."), /* @__PURE__ */ React21.createElement(
|
|
9989
9992
|
Button,
|
|
9990
9993
|
{
|
|
9991
9994
|
variant: "outline",
|
|
@@ -9994,14 +9997,14 @@ function ProfileScreen() {
|
|
|
9994
9997
|
},
|
|
9995
9998
|
"Manage preferences"
|
|
9996
9999
|
)),
|
|
9997
|
-
/* @__PURE__ */
|
|
9998
|
-
/* @__PURE__ */
|
|
10000
|
+
/* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Pharmacist tip"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 leading-relaxed" }, "Keep your phone number current so pharmacists can reach you quickly with dosage advice or time-sensitive updates about your order.")),
|
|
10001
|
+
/* @__PURE__ */ React21.createElement(
|
|
9999
10002
|
"button",
|
|
10000
10003
|
{
|
|
10001
10004
|
onClick: handleLogout,
|
|
10002
10005
|
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"
|
|
10003
10006
|
},
|
|
10004
|
-
/* @__PURE__ */
|
|
10007
|
+
/* @__PURE__ */ React21.createElement(LogOut, { className: "h-4 w-4" }),
|
|
10005
10008
|
"Log out"
|
|
10006
10009
|
)
|
|
10007
10010
|
)))));
|
|
@@ -10009,7 +10012,7 @@ function ProfileScreen() {
|
|
|
10009
10012
|
function OrderCard({ order }) {
|
|
10010
10013
|
const { buildPath } = useBasePath();
|
|
10011
10014
|
const config = order.orderStatus;
|
|
10012
|
-
return /* @__PURE__ */
|
|
10015
|
+
return /* @__PURE__ */ React21.createElement(
|
|
10013
10016
|
motion.div,
|
|
10014
10017
|
{
|
|
10015
10018
|
initial: { opacity: 0, y: 20 },
|
|
@@ -10017,9 +10020,9 @@ function OrderCard({ order }) {
|
|
|
10017
10020
|
whileHover: { y: -4 },
|
|
10018
10021
|
className: "bg-white rounded-2xl p-6 shadow-sm hover:shadow-xl transition-all duration-300 border border-gray-100"
|
|
10019
10022
|
},
|
|
10020
|
-
/* @__PURE__ */
|
|
10021
|
-
/* @__PURE__ */
|
|
10022
|
-
/* @__PURE__ */
|
|
10023
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-start mb-4" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-bold text-gray-900 flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(Package, { className: "w-5 h-5 text-primary-600" }), "Order #", order?._id?.slice(0, 6) || ""), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-500 mt-1 flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(Calendar, { className: "w-4 h-4" }), formatDate(order.createdAt || /* @__PURE__ */ new Date(), "long"))), /* @__PURE__ */ React21.createElement(Badge, { variant: config }, config)),
|
|
10024
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-2 mb-4" }, order.items?.slice(0, 2).map((item) => /* @__PURE__ */ React21.createElement("div", { key: item.productVariantId, className: "flex items-center gap-3 text-sm" }, /* @__PURE__ */ React21.createElement(Image3, { src: item?.productVariantData?.productMedia?.[0]?.file || "/placeholder-product.jpg", alt: item?.productVariantData?.name || "Product image", width: 48, height: 48, className: "w-12 h-12 rounded-lg bg-gray-100 flex-shrink-0" }), /* @__PURE__ */ React21.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21.createElement("p", { className: "font-medium text-gray-900 truncate" }, item.productVariantData.name), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-500" }, "Qty: ", item.quantity)), /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-gray-900" }, formatPrice(item.productVariantData.finalPrice)))), order.items?.length && order.items?.length > 2 && /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-500 pl-15" }, "+", order.items.length - 2, " more item", order.items.length - 2 > 1 ? "s" : "")),
|
|
10025
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-center pt-4 border-t border-gray-200" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-gray-500" }, "Total Amount"), /* @__PURE__ */ React21.createElement("p", { className: "text-2xl font-bold text-gray-900" }, formatPrice(order.grandTotal || 0))), /* @__PURE__ */ React21.createElement("div", { className: "flex gap-2" }, order.payment.paymentStatus !== "Paid" /* Paid */ && order.payment.paymentMethod === "Card" /* Card */ && /* @__PURE__ */ React21.createElement(
|
|
10023
10026
|
"a",
|
|
10024
10027
|
{
|
|
10025
10028
|
href: order?.payment?.paymentIntent?.hostedInvoiceUrl || "",
|
|
@@ -10027,7 +10030,7 @@ function OrderCard({ order }) {
|
|
|
10027
10030
|
rel: "noopener noreferrer",
|
|
10028
10031
|
className: "inline-flex items-center gap-2 px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors"
|
|
10029
10032
|
},
|
|
10030
|
-
/* @__PURE__ */
|
|
10033
|
+
/* @__PURE__ */ React21.createElement(CreditCard, { className: "w-4 h-4" }),
|
|
10031
10034
|
"Pay Now"
|
|
10032
10035
|
)))
|
|
10033
10036
|
);
|
|
@@ -10183,7 +10186,7 @@ function FilterChips({
|
|
|
10183
10186
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
10184
10187
|
};
|
|
10185
10188
|
}, [isOverflowOpen]);
|
|
10186
|
-
return /* @__PURE__ */
|
|
10189
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3 md:flex-row md:items-center md:gap-4" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-slate-600" }, /* @__PURE__ */ React21.createElement(Icon, { className: "h-4 w-4" }), label), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-2 md:flex-row md:items-center md:gap-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, visibleFilters.map((filter) => /* @__PURE__ */ React21.createElement(
|
|
10187
10190
|
"button",
|
|
10188
10191
|
{
|
|
10189
10192
|
key: filter,
|
|
@@ -10192,16 +10195,16 @@ function FilterChips({
|
|
|
10192
10195
|
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`}`
|
|
10193
10196
|
},
|
|
10194
10197
|
filter
|
|
10195
|
-
))), overflowFilters.length > 0 && /* @__PURE__ */
|
|
10198
|
+
))), overflowFilters.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "relative", ref: overflowMenuRef }, /* @__PURE__ */ React21.createElement(
|
|
10196
10199
|
"button",
|
|
10197
10200
|
{
|
|
10198
10201
|
type: "button",
|
|
10199
10202
|
onClick: () => setIsOverflowOpen((prev) => !prev),
|
|
10200
10203
|
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"}`
|
|
10201
10204
|
},
|
|
10202
|
-
/* @__PURE__ */
|
|
10203
|
-
/* @__PURE__ */
|
|
10204
|
-
), /* @__PURE__ */
|
|
10205
|
+
/* @__PURE__ */ React21.createElement("span", null, overflowFilters.includes(selected) ? selected : "More"),
|
|
10206
|
+
/* @__PURE__ */ React21.createElement("span", { className: `inline-flex h-5 min-w-[1.5rem] items-center justify-center rounded-full bg-${color}-100 px-1 text-xs font-semibold text-${color}-600` }, overflowFilters.length)
|
|
10207
|
+
), /* @__PURE__ */ React21.createElement(AnimatePresence, null, isOverflowOpen && /* @__PURE__ */ React21.createElement(
|
|
10205
10208
|
motion.div,
|
|
10206
10209
|
{
|
|
10207
10210
|
initial: { opacity: 0, y: 8 },
|
|
@@ -10210,7 +10213,7 @@ function FilterChips({
|
|
|
10210
10213
|
transition: { duration: 0.15 },
|
|
10211
10214
|
className: "absolute right-0 z-50 mt-2 w-64 rounded-2xl border border-slate-100 bg-white shadow-xl shadow-primary-50"
|
|
10212
10215
|
},
|
|
10213
|
-
/* @__PURE__ */
|
|
10216
|
+
/* @__PURE__ */ React21.createElement("div", { className: "border-b border-slate-100 px-4 py-3" }, /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(Search, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" }), /* @__PURE__ */ React21.createElement(
|
|
10214
10217
|
"input",
|
|
10215
10218
|
{
|
|
10216
10219
|
type: "text",
|
|
@@ -10220,7 +10223,7 @@ function FilterChips({
|
|
|
10220
10223
|
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"
|
|
10221
10224
|
}
|
|
10222
10225
|
))),
|
|
10223
|
-
/* @__PURE__ */
|
|
10226
|
+
/* @__PURE__ */ React21.createElement("div", { className: "max-h-60 overflow-y-auto px-2 py-2" }, filteredOverflowFilters.length > 0 ? filteredOverflowFilters.map((filter) => /* @__PURE__ */ React21.createElement(
|
|
10224
10227
|
"button",
|
|
10225
10228
|
{
|
|
10226
10229
|
key: filter,
|
|
@@ -10231,10 +10234,10 @@ function FilterChips({
|
|
|
10231
10234
|
},
|
|
10232
10235
|
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"}`
|
|
10233
10236
|
},
|
|
10234
|
-
/* @__PURE__ */
|
|
10235
|
-
selected === filter && /* @__PURE__ */
|
|
10236
|
-
)) : /* @__PURE__ */
|
|
10237
|
-
/* @__PURE__ */
|
|
10237
|
+
/* @__PURE__ */ React21.createElement("span", null, filter),
|
|
10238
|
+
selected === filter && /* @__PURE__ */ React21.createElement(Check, { className: "h-4 w-4" })
|
|
10239
|
+
)) : /* @__PURE__ */ React21.createElement("p", { className: "px-3 py-4 text-sm text-slate-500" }, "No items found.")),
|
|
10240
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between gap-2 border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React21.createElement("span", { className: "text-xs font-semibold uppercase tracking-wide text-slate-400" }, "Quick actions"), /* @__PURE__ */ React21.createElement(
|
|
10238
10241
|
"button",
|
|
10239
10242
|
{
|
|
10240
10243
|
type: "button",
|
|
@@ -10292,23 +10295,23 @@ function OrdersScreen() {
|
|
|
10292
10295
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
10293
10296
|
};
|
|
10294
10297
|
}, [isOverflowOpen]);
|
|
10295
|
-
return /* @__PURE__ */
|
|
10298
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white mb-8" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement(
|
|
10296
10299
|
motion.div,
|
|
10297
10300
|
{
|
|
10298
10301
|
initial: { opacity: 0, y: 24 },
|
|
10299
10302
|
animate: { opacity: 1, y: 0 },
|
|
10300
10303
|
className: "space-y-6"
|
|
10301
10304
|
},
|
|
10302
|
-
/* @__PURE__ */
|
|
10303
|
-
/* @__PURE__ */
|
|
10304
|
-
))), /* @__PURE__ */
|
|
10305
|
+
/* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21.createElement(CalendarDays, { className: "h-4 w-4" }), "Order history"),
|
|
10306
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "All of your pharmacy orders"), /* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Access receipts, shipping statuses, and reorder suggestions in one organized timeline curated by our pharmacists.")), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick tip"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm text-white/80" }, "Use filters to review previous prescriptions, reorder favorites, or download invoices for insurance claims.")))
|
|
10307
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-16 container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement(
|
|
10305
10308
|
motion.div,
|
|
10306
10309
|
{
|
|
10307
10310
|
initial: { opacity: 0, y: 24 },
|
|
10308
10311
|
animate: { opacity: 1, y: 0 },
|
|
10309
10312
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
|
|
10310
10313
|
},
|
|
10311
|
-
/* @__PURE__ */
|
|
10314
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3 text-sm text-slate-500" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "Explore your complete order archive with pharmacist notes.")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 md:items-end" }, /* @__PURE__ */ React21.createElement(
|
|
10312
10315
|
FilterChips,
|
|
10313
10316
|
{
|
|
10314
10317
|
label: "Status filters",
|
|
@@ -10322,7 +10325,7 @@ function OrdersScreen() {
|
|
|
10322
10325
|
maxVisible: MAX_VISIBLE_FILTERS,
|
|
10323
10326
|
variant: "primary"
|
|
10324
10327
|
}
|
|
10325
|
-
), /* @__PURE__ */
|
|
10328
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10326
10329
|
FilterChips,
|
|
10327
10330
|
{
|
|
10328
10331
|
label: "Payment status",
|
|
@@ -10337,7 +10340,7 @@ function OrdersScreen() {
|
|
|
10337
10340
|
variant: "primary"
|
|
10338
10341
|
}
|
|
10339
10342
|
))),
|
|
10340
|
-
/* @__PURE__ */
|
|
10343
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-6 space-y-4" }, isLoading ? Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21.createElement(OrderCardSkeleton, { key: index })) : hasOrders ? filteredOrders.map((order) => /* @__PURE__ */ React21.createElement(OrderCard, { key: order.id, order })) : /* @__PURE__ */ React21.createElement(
|
|
10341
10344
|
EmptyState,
|
|
10342
10345
|
{
|
|
10343
10346
|
icon: Package,
|
|
@@ -10347,16 +10350,16 @@ function OrdersScreen() {
|
|
|
10347
10350
|
onAction: () => router.push(buildPath("/shop"))
|
|
10348
10351
|
}
|
|
10349
10352
|
)),
|
|
10350
|
-
!isLoading && pagination.totalPages > 1 && hasOrders && /* @__PURE__ */
|
|
10353
|
+
!isLoading && pagination.totalPages > 1 && hasOrders && /* @__PURE__ */ React21.createElement("div", { className: "mt-10 flex flex-wrap items-center justify-center gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
10351
10354
|
Button,
|
|
10352
10355
|
{
|
|
10353
10356
|
variant: "outline",
|
|
10354
10357
|
onClick: () => setPage((current) => Math.max(1, current - 1)),
|
|
10355
10358
|
disabled: page === 1
|
|
10356
10359
|
},
|
|
10357
|
-
/* @__PURE__ */
|
|
10360
|
+
/* @__PURE__ */ React21.createElement(ChevronLeft, { className: "h-5 w-5" }),
|
|
10358
10361
|
"Previous"
|
|
10359
|
-
), /* @__PURE__ */
|
|
10362
|
+
), /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-semibold text-slate-600" }, "Page ", page, " of ", pagination.totalPages), /* @__PURE__ */ React21.createElement(
|
|
10360
10363
|
Button,
|
|
10361
10364
|
{
|
|
10362
10365
|
variant: "outline",
|
|
@@ -10364,7 +10367,7 @@ function OrdersScreen() {
|
|
|
10364
10367
|
disabled: page === pagination.totalPages
|
|
10365
10368
|
},
|
|
10366
10369
|
"Next",
|
|
10367
|
-
/* @__PURE__ */
|
|
10370
|
+
/* @__PURE__ */ React21.createElement(ChevronRight, { className: "h-5 w-5" })
|
|
10368
10371
|
))
|
|
10369
10372
|
))));
|
|
10370
10373
|
}
|
|
@@ -10373,17 +10376,17 @@ function CurrentOrdersScreen() {
|
|
|
10373
10376
|
const { orders, isLoading } = useCurrentOrders();
|
|
10374
10377
|
const { buildPath } = useBasePath();
|
|
10375
10378
|
const hasOrders = orders.length > 0;
|
|
10376
|
-
return /* @__PURE__ */
|
|
10379
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement(
|
|
10377
10380
|
motion.div,
|
|
10378
10381
|
{
|
|
10379
10382
|
initial: { opacity: 0, y: 24 },
|
|
10380
10383
|
animate: { opacity: 1, y: 0 },
|
|
10381
10384
|
className: "space-y-4"
|
|
10382
10385
|
},
|
|
10383
|
-
/* @__PURE__ */
|
|
10384
|
-
/* @__PURE__ */
|
|
10385
|
-
/* @__PURE__ */
|
|
10386
|
-
), /* @__PURE__ */
|
|
10386
|
+
/* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21.createElement(Truck, { className: "h-4 w-4" }), "Live order tracking"),
|
|
10387
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Current orders"),
|
|
10388
|
+
/* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Follow your pharmacy orders from preparation to delivery. Real-time updates, SMS alerts, and pharmacist oversight come standard.")
|
|
10389
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10387
10390
|
motion.div,
|
|
10388
10391
|
{
|
|
10389
10392
|
initial: { opacity: 0, y: 24 },
|
|
@@ -10391,24 +10394,24 @@ function CurrentOrdersScreen() {
|
|
|
10391
10394
|
transition: { delay: 0.1 },
|
|
10392
10395
|
className: "rounded-3xl bg-white/15 p-6 backdrop-blur"
|
|
10393
10396
|
},
|
|
10394
|
-
/* @__PURE__ */
|
|
10395
|
-
/* @__PURE__ */
|
|
10397
|
+
/* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick actions"),
|
|
10398
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-4 space-y-3 text-sm text-white/80" }, /* @__PURE__ */ React21.createElement(
|
|
10396
10399
|
Link8,
|
|
10397
10400
|
{
|
|
10398
10401
|
href: buildPath("/orders"),
|
|
10399
10402
|
className: "flex items-center justify-between rounded-2xl bg-white/10 px-4 py-3 transition hover:bg-white/20"
|
|
10400
10403
|
},
|
|
10401
|
-
/* @__PURE__ */
|
|
10402
|
-
/* @__PURE__ */
|
|
10403
|
-
), /* @__PURE__ */
|
|
10404
|
-
)))), /* @__PURE__ */
|
|
10404
|
+
/* @__PURE__ */ React21.createElement("span", { className: "font-semibold text-white" }, "View order history"),
|
|
10405
|
+
/* @__PURE__ */ React21.createElement(ArrowUpRight, { className: "h-4 w-4" })
|
|
10406
|
+
), /* @__PURE__ */ React21.createElement("p", null, "Need help fast? Chat with a pharmacist and we will triage your request in under 10 minutes."))
|
|
10407
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-16" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement(
|
|
10405
10408
|
motion.section,
|
|
10406
10409
|
{
|
|
10407
10410
|
initial: { opacity: 0, y: 24 },
|
|
10408
10411
|
animate: { opacity: 1, y: 0 },
|
|
10409
10412
|
className: "grid gap-6 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]"
|
|
10410
10413
|
},
|
|
10411
|
-
/* @__PURE__ */
|
|
10414
|
+
/* @__PURE__ */ React21.createElement("div", { className: "space-y-6" }, isLoading ? /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21.createElement(OrderCardSkeleton, { key: index }))) : hasOrders ? /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, orders.map((order) => /* @__PURE__ */ React21.createElement(OrderCard, { key: order.id, order }))) : /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-10 shadow-sm" }, /* @__PURE__ */ React21.createElement(
|
|
10412
10415
|
EmptyState,
|
|
10413
10416
|
{
|
|
10414
10417
|
icon: PackageCheck,
|
|
@@ -10418,7 +10421,7 @@ function CurrentOrdersScreen() {
|
|
|
10418
10421
|
onAction: () => router.push(buildPath("/shop"))
|
|
10419
10422
|
}
|
|
10420
10423
|
))),
|
|
10421
|
-
/* @__PURE__ */
|
|
10424
|
+
/* @__PURE__ */ React21.createElement("aside", { className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-lg font-semibold text-slate-900" }, "Real-time milestones"), /* @__PURE__ */ React21.createElement("div", { className: "mt-4 space-y-4 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement(Warehouse, { className: "h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "Preparation"), /* @__PURE__ */ React21.createElement("p", null, "Our pharmacists verify ingredients and pack thermo-sensitive items."))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement(Truck, { className: "h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "In transit"), /* @__PURE__ */ React21.createElement("p", null, "Track live courier location with ETA updates tailored to your delivery window."))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4" }, /* @__PURE__ */ React21.createElement(BellRing, { className: "h-5 w-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold text-slate-800" }, "Arrival alerts"), /* @__PURE__ */ React21.createElement("p", null, "Receive SMS and email notifications when parcels are out for delivery."))))), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-primary-100 bg-primary-50/70 p-6 text-sm text-primary-700 shadow-sm" }, /* @__PURE__ */ React21.createElement("p", { className: "font-semibold uppercase tracking-[0.3em]" }, "Need support?"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 leading-relaxed" }, "Our fulfillment team is online 7 days a week. Message us if you need to adjust delivery instructions or review dosage guidance.")))
|
|
10422
10425
|
))));
|
|
10423
10426
|
}
|
|
10424
10427
|
var addressFormSchema = z.object({
|
|
@@ -10451,12 +10454,12 @@ function formatAddressSnippet(address) {
|
|
|
10451
10454
|
function getAddressTypeCopy(type) {
|
|
10452
10455
|
switch (type) {
|
|
10453
10456
|
case "Billing":
|
|
10454
|
-
return { label: "Billing", icon: /* @__PURE__ */
|
|
10457
|
+
return { label: "Billing", icon: /* @__PURE__ */ React21.createElement(Home, { className: "h-4 w-4" }) };
|
|
10455
10458
|
case "Both":
|
|
10456
|
-
return { label: "Billing & Shipping", icon: /* @__PURE__ */
|
|
10459
|
+
return { label: "Billing & Shipping", icon: /* @__PURE__ */ React21.createElement(Globe, { className: "h-4 w-4" }) };
|
|
10457
10460
|
case "Shipping":
|
|
10458
10461
|
default:
|
|
10459
|
-
return { label: "Shipping", icon: /* @__PURE__ */
|
|
10462
|
+
return { label: "Shipping", icon: /* @__PURE__ */ React21.createElement(MapPin, { className: "h-4 w-4" }) };
|
|
10460
10463
|
}
|
|
10461
10464
|
}
|
|
10462
10465
|
function AddressesScreen() {
|
|
@@ -10600,18 +10603,18 @@ You can add it back at any time.`
|
|
|
10600
10603
|
}
|
|
10601
10604
|
];
|
|
10602
10605
|
}, [addresses]);
|
|
10603
|
-
return /* @__PURE__ */
|
|
10606
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white mb-8" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.3),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement(
|
|
10604
10607
|
motion.div,
|
|
10605
10608
|
{
|
|
10606
10609
|
initial: { opacity: 0, y: 24 },
|
|
10607
10610
|
animate: { opacity: 1, y: 0 },
|
|
10608
10611
|
className: "space-y-5"
|
|
10609
10612
|
},
|
|
10610
|
-
/* @__PURE__ */
|
|
10611
|
-
/* @__PURE__ */
|
|
10612
|
-
/* @__PURE__ */
|
|
10613
|
-
/* @__PURE__ */
|
|
10614
|
-
), /* @__PURE__ */
|
|
10613
|
+
/* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21.createElement(MapPin, { className: "h-4 w-4" }), "Address book"),
|
|
10614
|
+
/* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Manage where your care arrives"),
|
|
10615
|
+
/* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Add home, office, or loved ones' addresses and toggle a default for lightning-fast checkout and delivery."),
|
|
10616
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-3 text-sm text-white/75" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-white" }), "Default address: ", defaultAddress ? defaultAddress.name : "Not set"), /* @__PURE__ */ React21.createElement(Button, { variant: "ghost", className: "text-white hover:bg-white/10", onClick: openCreateModal }, /* @__PURE__ */ React21.createElement(Plus, { className: "h-5 w-5" }), "Add address"))
|
|
10617
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10615
10618
|
motion.div,
|
|
10616
10619
|
{
|
|
10617
10620
|
initial: { opacity: 0, y: 24 },
|
|
@@ -10619,14 +10622,14 @@ You can add it back at any time.`
|
|
|
10619
10622
|
transition: { delay: 0.1 },
|
|
10620
10623
|
className: "grid gap-4 rounded-3xl bg-white/15 p-6 text-sm text-white/80 backdrop-blur"
|
|
10621
10624
|
},
|
|
10622
|
-
stats.map((stat) => /* @__PURE__ */
|
|
10623
|
-
)))), /* @__PURE__ */
|
|
10625
|
+
stats.map((stat) => /* @__PURE__ */ React21.createElement("div", { key: stat.id, className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-white/70" }, stat.label), /* @__PURE__ */ React21.createElement("p", { className: "text-white" }, stat.helper)), /* @__PURE__ */ React21.createElement("span", { className: "text-3xl font-semibold text-white" }, stat.value)))
|
|
10626
|
+
)))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, isLoading ? /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-3" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21.createElement(
|
|
10624
10627
|
"div",
|
|
10625
10628
|
{
|
|
10626
10629
|
key: index,
|
|
10627
10630
|
className: "h-56 animate-pulse rounded-3xl border border-slate-100 bg-white"
|
|
10628
10631
|
}
|
|
10629
|
-
))) : error ? /* @__PURE__ */
|
|
10632
|
+
))) : error ? /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-red-100 bg-red-50 p-6 text-sm text-red-700" }, error.message) : addresses.length === 0 ? /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl border border-slate-100 bg-white p-12 shadow-sm" }, /* @__PURE__ */ React21.createElement(
|
|
10630
10633
|
EmptyState,
|
|
10631
10634
|
{
|
|
10632
10635
|
icon: MapPin,
|
|
@@ -10635,9 +10638,9 @@ You can add it back at any time.`
|
|
|
10635
10638
|
actionLabel: "Add your first address",
|
|
10636
10639
|
onAction: openCreateModal
|
|
10637
10640
|
}
|
|
10638
|
-
)) : /* @__PURE__ */
|
|
10641
|
+
)) : /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-3" }, addresses.map((address) => {
|
|
10639
10642
|
const typeCopy = getAddressTypeCopy(address.addressType);
|
|
10640
|
-
return /* @__PURE__ */
|
|
10643
|
+
return /* @__PURE__ */ React21.createElement(
|
|
10641
10644
|
motion.div,
|
|
10642
10645
|
{
|
|
10643
10646
|
key: address.id,
|
|
@@ -10645,39 +10648,39 @@ You can add it back at any time.`
|
|
|
10645
10648
|
animate: { opacity: 1, y: 0 },
|
|
10646
10649
|
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"
|
|
10647
10650
|
},
|
|
10648
|
-
address.isDefault && /* @__PURE__ */
|
|
10649
|
-
/* @__PURE__ */
|
|
10650
|
-
/* @__PURE__ */
|
|
10651
|
-
/* @__PURE__ */
|
|
10651
|
+
address.isDefault && /* @__PURE__ */ React21.createElement("span", { className: "absolute right-6 top-6 inline-flex items-center gap-2 rounded-full bg-amber-100 px-3 py-1 text-xs font-semibold text-amber-700" }, /* @__PURE__ */ React21.createElement(Crown, { className: "h-4 w-4" }), "Default"),
|
|
10652
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement("span", { className: "rounded-full bg-primary-50 p-3 text-primary-600" }, /* @__PURE__ */ React21.createElement(User, { className: "h-5 w-5" })), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("p", { className: "text-base font-semibold text-slate-900" }, address.name), /* @__PURE__ */ React21.createElement("p", { className: "text-xs uppercase tracking-[0.3em] text-slate-400" }, typeCopy.label))),
|
|
10653
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-6 flex flex-1 flex-col gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("p", null, formatAddressSnippet(address)), /* @__PURE__ */ React21.createElement("p", { className: "inline-flex items-center gap-2 text-slate-500" }, /* @__PURE__ */ React21.createElement(Phone, { className: "h-4 w-4 text-slate-400" }), address.phone || "Not provided")),
|
|
10654
|
+
/* @__PURE__ */ React21.createElement("div", { className: "mt-6 flex items-center justify-between gap-3" }, /* @__PURE__ */ React21.createElement(
|
|
10652
10655
|
"button",
|
|
10653
10656
|
{
|
|
10654
10657
|
type: "button",
|
|
10655
10658
|
onClick: () => openEditModal(address),
|
|
10656
10659
|
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"
|
|
10657
10660
|
},
|
|
10658
|
-
/* @__PURE__ */
|
|
10661
|
+
/* @__PURE__ */ React21.createElement(Edit3, { className: "h-4 w-4" }),
|
|
10659
10662
|
"Edit"
|
|
10660
|
-
), /* @__PURE__ */
|
|
10663
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, !address.isDefault && /* @__PURE__ */ React21.createElement(
|
|
10661
10664
|
"button",
|
|
10662
10665
|
{
|
|
10663
10666
|
type: "button",
|
|
10664
10667
|
onClick: () => handleSetDefault(address),
|
|
10665
10668
|
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"
|
|
10666
10669
|
},
|
|
10667
|
-
/* @__PURE__ */
|
|
10670
|
+
/* @__PURE__ */ React21.createElement(Star, { className: "h-4 w-4" }),
|
|
10668
10671
|
"Make default"
|
|
10669
|
-
), /* @__PURE__ */
|
|
10672
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10670
10673
|
"button",
|
|
10671
10674
|
{
|
|
10672
10675
|
type: "button",
|
|
10673
10676
|
onClick: () => handleDelete(address),
|
|
10674
10677
|
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"
|
|
10675
10678
|
},
|
|
10676
|
-
/* @__PURE__ */
|
|
10679
|
+
/* @__PURE__ */ React21.createElement(Trash2, { className: "h-4 w-4" }),
|
|
10677
10680
|
"Delete"
|
|
10678
10681
|
)))
|
|
10679
10682
|
);
|
|
10680
|
-
})))), /* @__PURE__ */
|
|
10683
|
+
})))), /* @__PURE__ */ React21.createElement(
|
|
10681
10684
|
Modal,
|
|
10682
10685
|
{
|
|
10683
10686
|
isOpen: isModalOpen,
|
|
@@ -10685,7 +10688,7 @@ You can add it back at any time.`
|
|
|
10685
10688
|
title: editingAddress ? "Edit address" : "Add new address",
|
|
10686
10689
|
size: "lg"
|
|
10687
10690
|
},
|
|
10688
|
-
/* @__PURE__ */
|
|
10691
|
+
/* @__PURE__ */ React21.createElement("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-6" }, /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
10689
10692
|
Input,
|
|
10690
10693
|
{
|
|
10691
10694
|
label: "Full name",
|
|
@@ -10693,7 +10696,7 @@ You can add it back at any time.`
|
|
|
10693
10696
|
...register("fullName"),
|
|
10694
10697
|
error: errors.fullName?.message
|
|
10695
10698
|
}
|
|
10696
|
-
), /* @__PURE__ */
|
|
10699
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10697
10700
|
Input,
|
|
10698
10701
|
{
|
|
10699
10702
|
label: "Phone number",
|
|
@@ -10701,7 +10704,7 @@ You can add it back at any time.`
|
|
|
10701
10704
|
...register("phone"),
|
|
10702
10705
|
error: errors.phone?.message
|
|
10703
10706
|
}
|
|
10704
|
-
)), /* @__PURE__ */
|
|
10707
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
10705
10708
|
Input,
|
|
10706
10709
|
{
|
|
10707
10710
|
label: "Address line 1",
|
|
@@ -10709,7 +10712,7 @@ You can add it back at any time.`
|
|
|
10709
10712
|
...register("addressLine1"),
|
|
10710
10713
|
error: errors.addressLine1?.message
|
|
10711
10714
|
}
|
|
10712
|
-
), /* @__PURE__ */
|
|
10715
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10713
10716
|
Input,
|
|
10714
10717
|
{
|
|
10715
10718
|
label: "Address line 2 (optional)",
|
|
@@ -10717,7 +10720,7 @@ You can add it back at any time.`
|
|
|
10717
10720
|
...register("addressLine2"),
|
|
10718
10721
|
error: errors.addressLine2?.message
|
|
10719
10722
|
}
|
|
10720
|
-
), /* @__PURE__ */
|
|
10723
|
+
), /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
10721
10724
|
Input,
|
|
10722
10725
|
{
|
|
10723
10726
|
label: "City",
|
|
@@ -10725,7 +10728,7 @@ You can add it back at any time.`
|
|
|
10725
10728
|
...register("city"),
|
|
10726
10729
|
error: errors.city?.message
|
|
10727
10730
|
}
|
|
10728
|
-
), /* @__PURE__ */
|
|
10731
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10729
10732
|
Input,
|
|
10730
10733
|
{
|
|
10731
10734
|
label: "State / Region",
|
|
@@ -10733,7 +10736,7 @@ You can add it back at any time.`
|
|
|
10733
10736
|
...register("state"),
|
|
10734
10737
|
error: errors.state?.message
|
|
10735
10738
|
}
|
|
10736
|
-
)), /* @__PURE__ */
|
|
10739
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement(
|
|
10737
10740
|
Input,
|
|
10738
10741
|
{
|
|
10739
10742
|
label: "Postal code",
|
|
@@ -10741,7 +10744,7 @@ You can add it back at any time.`
|
|
|
10741
10744
|
...register("zipCode"),
|
|
10742
10745
|
error: errors.zipCode?.message
|
|
10743
10746
|
}
|
|
10744
|
-
), /* @__PURE__ */
|
|
10747
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10745
10748
|
Input,
|
|
10746
10749
|
{
|
|
10747
10750
|
label: "Country",
|
|
@@ -10749,23 +10752,23 @@ You can add it back at any time.`
|
|
|
10749
10752
|
...register("country"),
|
|
10750
10753
|
error: errors.country?.message
|
|
10751
10754
|
}
|
|
10752
|
-
)), /* @__PURE__ */
|
|
10755
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21.createElement("label", { className: "flex flex-col gap-2 rounded-2xl border border-slate-200 p-4" }, /* @__PURE__ */ React21.createElement("span", { className: "text-sm font-semibold text-slate-700" }, "Address type"), /* @__PURE__ */ React21.createElement(
|
|
10753
10756
|
"select",
|
|
10754
10757
|
{
|
|
10755
10758
|
...register("addressType"),
|
|
10756
10759
|
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"
|
|
10757
10760
|
},
|
|
10758
|
-
/* @__PURE__ */
|
|
10759
|
-
/* @__PURE__ */
|
|
10760
|
-
/* @__PURE__ */
|
|
10761
|
-
)), /* @__PURE__ */
|
|
10761
|
+
/* @__PURE__ */ React21.createElement("option", { value: "Shipping" }, "Shipping"),
|
|
10762
|
+
/* @__PURE__ */ React21.createElement("option", { value: "Billing" }, "Billing"),
|
|
10763
|
+
/* @__PURE__ */ React21.createElement("option", { value: "Both" }, "Billing & Shipping")
|
|
10764
|
+
)), /* @__PURE__ */ React21.createElement("label", { className: "flex items-center justify-between gap-4 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm font-medium text-slate-700" }, /* @__PURE__ */ React21.createElement("span", null, "Set as default address"), /* @__PURE__ */ React21.createElement(
|
|
10762
10765
|
"input",
|
|
10763
10766
|
{
|
|
10764
10767
|
type: "checkbox",
|
|
10765
10768
|
...register("isDefault"),
|
|
10766
10769
|
className: "h-4 w-4 rounded border-primary-300 text-primary-600 focus:ring-primary-500"
|
|
10767
10770
|
}
|
|
10768
|
-
))), /* @__PURE__ */
|
|
10771
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-end gap-3" }, /* @__PURE__ */ React21.createElement(Button, { type: "button", variant: "outline", onClick: closeModal }, "Cancel"), /* @__PURE__ */ React21.createElement(Button, { type: "submit", isLoading: isSubmitting }, editingAddress ? "Save changes" : "Save address")))
|
|
10769
10772
|
));
|
|
10770
10773
|
}
|
|
10771
10774
|
function useWishlistProducts(productIds = []) {
|
|
@@ -10905,14 +10908,14 @@ function WishlistScreen() {
|
|
|
10905
10908
|
return list;
|
|
10906
10909
|
}, [wishlistProducts, onlyInStock, sortOption]);
|
|
10907
10910
|
const emptyAfterFiltering = !isLoading && wishlistProducts.length > 0 && processedProducts.length === 0;
|
|
10908
|
-
return /* @__PURE__ */
|
|
10911
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50 pb-16" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] pb-32 pt-16 text-white" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 opacity-40 mix-blend-soft-light", "aria-hidden": "true" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute -top-1/2 right-1/2 h-[40rem] w-[40rem] rounded-full bg-white/10 blur-3xl" }), /* @__PURE__ */ React21.createElement("div", { className: "absolute left-1/4 top-1/4 h-48 w-48 rounded-full bg-white/20 blur-2xl" })), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "max-w-3xl space-y-6" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-4 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21.createElement(Heart, { className: "h-4 w-4" }), "Wishlist"), /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold leading-tight md:text-5xl" }, "Curate your pharmacy must-haves in one calming space"), /* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "We keep your favourite products ready for reorder, refill reminders, and quick checkout\u2014exactly when you need them.")))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-20" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement(
|
|
10909
10912
|
motion.div,
|
|
10910
10913
|
{
|
|
10911
10914
|
initial: { opacity: 0, y: 24 },
|
|
10912
10915
|
animate: { opacity: 1, y: 0 },
|
|
10913
10916
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-xl shadow-primary-50"
|
|
10914
10917
|
},
|
|
10915
|
-
/* @__PURE__ */
|
|
10918
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-6" }, !isAuthenticated && /* @__PURE__ */ React21.createElement("div", { className: "flex min-h-[40vh] items-center justify-center" }, /* @__PURE__ */ React21.createElement("div", { className: "max-w-lg rounded-3xl border border-slate-100 bg-white p-10 text-center shadow-lg shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", { className: "mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-primary-50 text-primary-600" }, /* @__PURE__ */ React21.createElement(Heart, { className: "h-8 w-8" })), /* @__PURE__ */ React21.createElement("h2", { className: "mt-6 text-3xl font-bold text-slate-900" }, "Sign in to see your favourites"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-slate-500" }, "Create your curated shelf of products and we'll keep them ready whenever you return."), /* @__PURE__ */ React21.createElement(Button, { className: "mt-6", onClick: () => router.push(buildPath("/login")) }, "Sign In"))), isAuthenticated && /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-semibold text-slate-900" }, "Your saved collection"), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, "Total value: ", /* @__PURE__ */ React21.createElement("span", { className: "font-semibold text-primary-600" }, formatPrice(totalValue)), onlyInStock && " \u2022 Showing items ready to ship")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-3" }, /* @__PURE__ */ React21.createElement("label", { className: "inline-flex cursor-pointer items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 text-sm font-medium text-slate-600 transition hover:border-primary-200 hover:text-primary-600" }, /* @__PURE__ */ React21.createElement(
|
|
10916
10919
|
"input",
|
|
10917
10920
|
{
|
|
10918
10921
|
type: "checkbox",
|
|
@@ -10920,54 +10923,54 @@ function WishlistScreen() {
|
|
|
10920
10923
|
onChange: (event) => setOnlyInStock(event.target.checked),
|
|
10921
10924
|
className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
|
|
10922
10925
|
}
|
|
10923
|
-
), "Only show in-stock"), /* @__PURE__ */
|
|
10926
|
+
), "Only show in-stock"), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 text-sm text-slate-600" }, /* @__PURE__ */ React21.createElement("span", null, "Sort"), /* @__PURE__ */ React21.createElement(
|
|
10924
10927
|
"select",
|
|
10925
10928
|
{
|
|
10926
10929
|
value: sortOption,
|
|
10927
10930
|
onChange: (event) => setSortOption(event.target.value),
|
|
10928
10931
|
className: "bg-transparent text-sm font-medium text-slate-700 outline-none"
|
|
10929
10932
|
},
|
|
10930
|
-
SORT_OPTIONS.map((option) => /* @__PURE__ */
|
|
10931
|
-
)), /* @__PURE__ */
|
|
10933
|
+
SORT_OPTIONS.map((option) => /* @__PURE__ */ React21.createElement("option", { key: option.value, value: option.value }, option.label))
|
|
10934
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "flex overflow-hidden rounded-full border border-slate-200 bg-slate-50" }, /* @__PURE__ */ React21.createElement(
|
|
10932
10935
|
"button",
|
|
10933
10936
|
{
|
|
10934
10937
|
type: "button",
|
|
10935
10938
|
onClick: () => setViewMode("grid"),
|
|
10936
10939
|
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"}`
|
|
10937
10940
|
},
|
|
10938
|
-
/* @__PURE__ */
|
|
10941
|
+
/* @__PURE__ */ React21.createElement(Grid, { className: "h-4 w-4" }),
|
|
10939
10942
|
"Grid"
|
|
10940
|
-
), /* @__PURE__ */
|
|
10943
|
+
), /* @__PURE__ */ React21.createElement(
|
|
10941
10944
|
"button",
|
|
10942
10945
|
{
|
|
10943
10946
|
type: "button",
|
|
10944
10947
|
onClick: () => setViewMode("list"),
|
|
10945
10948
|
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"}`
|
|
10946
10949
|
},
|
|
10947
|
-
/* @__PURE__ */
|
|
10950
|
+
/* @__PURE__ */ React21.createElement(List, { className: "h-4 w-4" }),
|
|
10948
10951
|
"List"
|
|
10949
|
-
)), wishlistCount > 0 && /* @__PURE__ */
|
|
10952
|
+
)), wishlistCount > 0 && /* @__PURE__ */ React21.createElement(
|
|
10950
10953
|
Button,
|
|
10951
10954
|
{
|
|
10952
10955
|
variant: "ghost",
|
|
10953
10956
|
className: "text-sm font-semibold text-slate-500 hover:text-red-500",
|
|
10954
10957
|
onClick: handleClearWishlist
|
|
10955
10958
|
},
|
|
10956
|
-
/* @__PURE__ */
|
|
10959
|
+
/* @__PURE__ */ React21.createElement(Trash2, { className: "h-4 w-4" }),
|
|
10957
10960
|
"Clear all"
|
|
10958
|
-
))), isLoading && /* @__PURE__ */
|
|
10961
|
+
))), isLoading && /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3" }, Array.from({ length: Math.min(wishlistCount || 3, 6) }).map((_, index) => /* @__PURE__ */ React21.createElement(
|
|
10959
10962
|
"div",
|
|
10960
10963
|
{
|
|
10961
10964
|
key: index,
|
|
10962
10965
|
className: "h-72 animate-pulse rounded-2xl border border-slate-200 bg-slate-100"
|
|
10963
10966
|
}
|
|
10964
|
-
))), !isLoading && wishlistCount === 0 && /* @__PURE__ */
|
|
10967
|
+
))), !isLoading && wishlistCount === 0 && /* @__PURE__ */ React21.createElement("div", { className: "flex min-h-[30vh] items-center justify-center" }, /* @__PURE__ */ React21.createElement("div", { className: "max-w-2xl rounded-3xl border border-slate-100 bg-white p-12 text-center shadow-xl shadow-primary-50" }, /* @__PURE__ */ React21.createElement("div", { className: "mx-auto flex h-20 w-20 items-center justify-center rounded-full bg-primary-100 text-primary-600" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-10 w-10" })), /* @__PURE__ */ React21.createElement("h2", { className: "mt-6 text-4xl font-bold text-slate-900" }, "Start your wellness wishlist"), /* @__PURE__ */ React21.createElement("p", { className: "mt-4 text-lg text-slate-500" }, "Bookmark pharmacy essentials, supplements, or skincare picks and we'll keep them safe until you're ready to checkout."), /* @__PURE__ */ React21.createElement("div", { className: "mt-8 flex flex-wrap justify-center gap-3" }, /* @__PURE__ */ React21.createElement(Button, { onClick: () => router.push(buildPath("/shop")) }, "Discover products"), /* @__PURE__ */ React21.createElement(Button, { variant: "outline", onClick: () => router.push(buildPath("/categories")) }, "Browse categories")))), !isLoading && processedProducts.length > 0 && /* @__PURE__ */ React21.createElement(React21.Fragment, null, viewMode === "grid" ? /* @__PURE__ */ React21.createElement(
|
|
10965
10968
|
motion.div,
|
|
10966
10969
|
{
|
|
10967
10970
|
layout: true,
|
|
10968
10971
|
className: "grid grid-cols-1 gap-5 sm:grid-cols-2 xl:grid-cols-3"
|
|
10969
10972
|
},
|
|
10970
|
-
/* @__PURE__ */
|
|
10973
|
+
/* @__PURE__ */ React21.createElement(AnimatePresence, null, processedProducts.map((product) => /* @__PURE__ */ React21.createElement(
|
|
10971
10974
|
motion.div,
|
|
10972
10975
|
{
|
|
10973
10976
|
key: product.id,
|
|
@@ -10977,7 +10980,7 @@ function WishlistScreen() {
|
|
|
10977
10980
|
exit: { opacity: 0, y: -20 },
|
|
10978
10981
|
transition: { duration: 0.2 }
|
|
10979
10982
|
},
|
|
10980
|
-
/* @__PURE__ */
|
|
10983
|
+
/* @__PURE__ */ React21.createElement(
|
|
10981
10984
|
ProductCard,
|
|
10982
10985
|
{
|
|
10983
10986
|
product,
|
|
@@ -10987,7 +10990,7 @@ function WishlistScreen() {
|
|
|
10987
10990
|
}
|
|
10988
10991
|
)
|
|
10989
10992
|
)))
|
|
10990
|
-
) : /* @__PURE__ */
|
|
10993
|
+
) : /* @__PURE__ */ React21.createElement(motion.div, { layout: true, className: "space-y-4" }, /* @__PURE__ */ React21.createElement(AnimatePresence, null, processedProducts.map((product) => /* @__PURE__ */ React21.createElement(
|
|
10991
10994
|
motion.div,
|
|
10992
10995
|
{
|
|
10993
10996
|
key: product.id,
|
|
@@ -10998,7 +11001,7 @@ function WishlistScreen() {
|
|
|
10998
11001
|
transition: { duration: 0.2 },
|
|
10999
11002
|
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"
|
|
11000
11003
|
},
|
|
11001
|
-
/* @__PURE__ */
|
|
11004
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative h-28 w-full overflow-hidden rounded-2xl bg-white sm:w-40" }, /* @__PURE__ */ React21.createElement(
|
|
11002
11005
|
Image3,
|
|
11003
11006
|
{
|
|
11004
11007
|
fill: true,
|
|
@@ -11007,14 +11010,14 @@ function WishlistScreen() {
|
|
|
11007
11010
|
className: "h-full w-full object-cover"
|
|
11008
11011
|
}
|
|
11009
11012
|
)),
|
|
11010
|
-
/* @__PURE__ */
|
|
11013
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-1 flex-col gap-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center justify-between gap-3" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-slate-900" }, product.name), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-500" }, product.parentCategories?.map((category) => category?.name).join(", ") || "General wellness")), /* @__PURE__ */ React21.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21.createElement("p", { className: "text-lg font-bold text-primary-600" }, formatPrice(product.finalPrice ?? 0)), product.isDiscounted && /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-emerald-500" }, "You save ", formatPrice(Math.max((product.priceBeforeDiscount ?? 0) - (product.finalPrice ?? 0), 0))))), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap items-center gap-3 text-xs text-slate-500" }, /* @__PURE__ */ React21.createElement("span", { className: `inline-flex items-center gap-1 rounded-full px-2.5 py-1 font-medium ${product.inventoryCount > 0 ? "bg-emerald-100 text-emerald-700" : "bg-rose-100 text-rose-700"}` }, /* @__PURE__ */ React21.createElement(Package, { className: "h-3.5 w-3.5" }), product.inventoryCount > 0 ? "In stock" : "Backordered"), product.totalSold > 0 && /* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-slate-200 px-2.5 py-1 font-medium text-slate-700" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-3.5 w-3.5" }), product.totalSold, "+ purchased")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-2" }, /* @__PURE__ */ React21.createElement(
|
|
11011
11014
|
Button,
|
|
11012
11015
|
{
|
|
11013
11016
|
size: "sm",
|
|
11014
11017
|
onClick: () => router.push(buildPath(`/products/${product.id}`))
|
|
11015
11018
|
},
|
|
11016
11019
|
"View details"
|
|
11017
|
-
), /* @__PURE__ */
|
|
11020
|
+
), /* @__PURE__ */ React21.createElement(
|
|
11018
11021
|
Button,
|
|
11019
11022
|
{
|
|
11020
11023
|
size: "sm",
|
|
@@ -11024,7 +11027,7 @@ function WishlistScreen() {
|
|
|
11024
11027
|
},
|
|
11025
11028
|
"Remove"
|
|
11026
11029
|
)))
|
|
11027
|
-
))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */
|
|
11030
|
+
))))), isAuthenticated && emptyAfterFiltering && /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center justify-center rounded-2xl border border-dashed border-slate-200 bg-slate-50 p-12 text-center" }, /* @__PURE__ */ React21.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-slate-200 text-slate-500" }, /* @__PURE__ */ React21.createElement(Package, { className: "h-8 w-8" })), /* @__PURE__ */ React21.createElement("h3", { className: "mt-6 text-2xl font-semibold text-slate-900" }, "Nothing matches those filters"), /* @__PURE__ */ React21.createElement("p", { className: "mt-2 max-w-md text-sm text-slate-500" }, "Try showing out-of-stock items or adjust your sort order to revisit everything you\u2019ve saved."), /* @__PURE__ */ React21.createElement(Button, { className: "mt-6", variant: "outline", onClick: () => setOnlyInStock(false) }, "Show all saved products"))))
|
|
11028
11031
|
))));
|
|
11029
11032
|
}
|
|
11030
11033
|
function SearchPage() {
|
|
@@ -11138,31 +11141,31 @@ function CategoriesScreen() {
|
|
|
11138
11141
|
const { categories, isLoading } = useCategories();
|
|
11139
11142
|
const router = useRouter();
|
|
11140
11143
|
const { buildPath } = useBasePath();
|
|
11141
|
-
return /* @__PURE__ */
|
|
11144
|
+
return /* @__PURE__ */ React21.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21.createElement("section", { className: "relative overflow-hidden bg-gradient-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white mb-8" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.35),_transparent_60%)]" }), /* @__PURE__ */ React21.createElement("div", { className: "relative container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement(
|
|
11142
11145
|
motion.div,
|
|
11143
11146
|
{
|
|
11144
11147
|
initial: { opacity: 0, y: 24 },
|
|
11145
11148
|
animate: { opacity: 1, y: 0 },
|
|
11146
11149
|
className: "space-y-6"
|
|
11147
11150
|
},
|
|
11148
|
-
/* @__PURE__ */
|
|
11149
|
-
/* @__PURE__ */
|
|
11150
|
-
))), /* @__PURE__ */
|
|
11151
|
+
/* @__PURE__ */ React21.createElement("span", { className: "inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-semibold uppercase tracking-[0.35em] text-white/70 backdrop-blur" }, /* @__PURE__ */ React21.createElement(Package, { className: "h-4 w-4" }), "Product Categories"),
|
|
11152
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 md:flex-row md:items-center md:justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("h1", { className: "text-4xl font-bold md:text-5xl" }, "Browse Our Product Range"), /* @__PURE__ */ React21.createElement("p", { className: "max-w-2xl text-white/80 md:text-lg" }, "Explore our comprehensive selection of healthcare products, carefully curated by our pharmacists to meet all your wellness needs.")), /* @__PURE__ */ React21.createElement("div", { className: "rounded-3xl bg-white/15 p-6 backdrop-blur" }, /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick tip"), /* @__PURE__ */ React21.createElement("p", { className: "mt-3 text-sm text-white/80" }, "Use the categories below to quickly find the products you're looking for, or use the search function for specific items.")))
|
|
11153
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "relative -mt-16 pb-16" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement(
|
|
11151
11154
|
motion.div,
|
|
11152
11155
|
{
|
|
11153
11156
|
initial: { opacity: 0, y: 24 },
|
|
11154
11157
|
animate: { opacity: 1, y: 0 },
|
|
11155
11158
|
className: "rounded-3xl border border-slate-100 bg-white p-6 shadow-lg shadow-primary-50"
|
|
11156
11159
|
},
|
|
11157
|
-
/* @__PURE__ */
|
|
11158
|
-
isLoading ? /* @__PURE__ */
|
|
11160
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3 text-sm text-slate-500 mb-6" }, /* @__PURE__ */ React21.createElement(Sparkles, { className: "h-4 w-4 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "Browse our complete product catalog organized by categories.")),
|
|
11161
|
+
isLoading ? /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, [...Array(8)].map((_, i) => /* @__PURE__ */ React21.createElement("div", { key: i, className: "animate-pulse" }, /* @__PURE__ */ React21.createElement("div", { className: "bg-gray-200 rounded-lg aspect-square mb-2" }), /* @__PURE__ */ React21.createElement("div", { className: "h-4 bg-gray-200 rounded w-3/4 mb-1" }), /* @__PURE__ */ React21.createElement("div", { className: "h-3 bg-gray-200 rounded w-1/2" })))) : categories.length > 0 ? /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" }, categories.map((category) => /* @__PURE__ */ React21.createElement(
|
|
11159
11162
|
Link8,
|
|
11160
11163
|
{
|
|
11161
11164
|
key: category.id,
|
|
11162
11165
|
href: buildPath(`/shop?category=${category.name}`),
|
|
11163
11166
|
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"
|
|
11164
11167
|
},
|
|
11165
|
-
/* @__PURE__ */
|
|
11168
|
+
/* @__PURE__ */ React21.createElement("div", { className: "relative aspect-square w-full overflow-hidden rounded-lg bg-gray-50 mb-3" }, category.image ? /* @__PURE__ */ React21.createElement(
|
|
11166
11169
|
Image3,
|
|
11167
11170
|
{
|
|
11168
11171
|
src: category.image,
|
|
@@ -11171,10 +11174,10 @@ function CategoriesScreen() {
|
|
|
11171
11174
|
className: "object-cover transition-transform group-hover:scale-105",
|
|
11172
11175
|
sizes: "(max-width: 768px) 50vw, (max-width: 1200px) 33vw, 25vw"
|
|
11173
11176
|
}
|
|
11174
|
-
) : /* @__PURE__ */
|
|
11175
|
-
/* @__PURE__ */
|
|
11176
|
-
category.productCount > 0 && /* @__PURE__ */
|
|
11177
|
-
))) : /* @__PURE__ */
|
|
11177
|
+
) : /* @__PURE__ */ React21.createElement("div", { className: "flex h-full w-full items-center justify-center bg-gray-100 text-gray-400" }, /* @__PURE__ */ React21.createElement(Package, { className: "h-12 w-12" }))),
|
|
11178
|
+
/* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-semibold text-gray-900 group-hover:text-primary-600 transition-colors" }, category.name),
|
|
11179
|
+
category.productCount > 0 && /* @__PURE__ */ React21.createElement("p", { className: "mt-1 text-sm text-gray-500" }, category.productCount, " ", category.productCount === 1 ? "product" : "products")
|
|
11180
|
+
))) : /* @__PURE__ */ React21.createElement(
|
|
11178
11181
|
EmptyState,
|
|
11179
11182
|
{
|
|
11180
11183
|
title: "No categories found",
|
|
@@ -11341,7 +11344,7 @@ function Header() {
|
|
|
11341
11344
|
{ href: buildPath("/about"), label: "About" },
|
|
11342
11345
|
{ href: buildPath("/contact"), label: "Contact" }
|
|
11343
11346
|
];
|
|
11344
|
-
return /* @__PURE__ */
|
|
11347
|
+
return /* @__PURE__ */ React21.createElement("header", { className: "sticky top-0 z-40 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between h-20" }, /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/"), className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement("div", { className: "relative w-12 h-12" }, /* @__PURE__ */ React21.createElement(
|
|
11345
11348
|
Image3,
|
|
11346
11349
|
{
|
|
11347
11350
|
src: config.logo,
|
|
@@ -11349,7 +11352,7 @@ function Header() {
|
|
|
11349
11352
|
fill: true,
|
|
11350
11353
|
className: "object-contain"
|
|
11351
11354
|
}
|
|
11352
|
-
)), /* @__PURE__ */
|
|
11355
|
+
)), /* @__PURE__ */ React21.createElement("span", { className: "text-2xl font-bold text-gray-900 hidden sm:block" }, config.storeName)), /* @__PURE__ */ React21.createElement("nav", { className: "hidden lg:flex items-center gap-8" }, navLinks.map((link) => /* @__PURE__ */ React21.createElement(
|
|
11353
11356
|
Link8,
|
|
11354
11357
|
{
|
|
11355
11358
|
key: link.href,
|
|
@@ -11357,16 +11360,16 @@ function Header() {
|
|
|
11357
11360
|
className: "text-gray-700 hover:text-primary-600 font-medium transition-colors relative group"
|
|
11358
11361
|
},
|
|
11359
11362
|
link.label,
|
|
11360
|
-
/* @__PURE__ */
|
|
11361
|
-
))), /* @__PURE__ */
|
|
11363
|
+
/* @__PURE__ */ React21.createElement("span", { className: "absolute bottom-0 left-0 w-0 h-0.5 bg-primary-600 group-hover:w-full transition-all duration-300" })
|
|
11364
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21.createElement("div", { className: "relative" }, /* @__PURE__ */ React21.createElement(
|
|
11362
11365
|
"button",
|
|
11363
11366
|
{
|
|
11364
11367
|
onClick: () => setIsSearchOpen(!isSearchOpen),
|
|
11365
11368
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors",
|
|
11366
11369
|
"aria-label": "Search"
|
|
11367
11370
|
},
|
|
11368
|
-
/* @__PURE__ */
|
|
11369
|
-
), /* @__PURE__ */
|
|
11371
|
+
/* @__PURE__ */ React21.createElement(Search, { className: "w-5 h-5 text-gray-700" })
|
|
11372
|
+
), /* @__PURE__ */ React21.createElement(AnimatePresence, null, isSearchOpen && /* @__PURE__ */ React21.createElement(
|
|
11370
11373
|
motion.div,
|
|
11371
11374
|
{
|
|
11372
11375
|
initial: { opacity: 0, width: 0 },
|
|
@@ -11374,7 +11377,7 @@ function Header() {
|
|
|
11374
11377
|
exit: { opacity: 0, width: 0 },
|
|
11375
11378
|
className: "absolute right-0 top-full mt-2 bg-white rounded-lg shadow-lg overflow-hidden"
|
|
11376
11379
|
},
|
|
11377
|
-
/* @__PURE__ */
|
|
11380
|
+
/* @__PURE__ */ React21.createElement("div", { className: "flex items-center p-2 w-64" }, /* @__PURE__ */ React21.createElement(Search, { className: "w-5 h-5 text-gray-400 mr-2" }), /* @__PURE__ */ React21.createElement(
|
|
11378
11381
|
"input",
|
|
11379
11382
|
{
|
|
11380
11383
|
type: "text",
|
|
@@ -11389,36 +11392,36 @@ function Header() {
|
|
|
11389
11392
|
className: "w-full outline-none text-gray-700",
|
|
11390
11393
|
autoFocus: true
|
|
11391
11394
|
}
|
|
11392
|
-
), searchQuery && /* @__PURE__ */
|
|
11395
|
+
), searchQuery && /* @__PURE__ */ React21.createElement(
|
|
11393
11396
|
"button",
|
|
11394
11397
|
{
|
|
11395
11398
|
onClick: () => setSearchQuery(""),
|
|
11396
11399
|
className: "text-gray-400 hover:text-gray-600"
|
|
11397
11400
|
},
|
|
11398
|
-
/* @__PURE__ */
|
|
11401
|
+
/* @__PURE__ */ React21.createElement(X, { className: "w-4 h-4" })
|
|
11399
11402
|
))
|
|
11400
|
-
))), /* @__PURE__ */
|
|
11403
|
+
))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/wishlist"), className: "relative p-2 text-gray-700 hover:text-red-500 transition-colors" }, /* @__PURE__ */ React21.createElement(Heart, { className: "w-6 h-6" }), wishlistCount > 0 && /* @__PURE__ */ React21.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, wishlistCount)), /* @__PURE__ */ React21.createElement(Link8, { href: buildPath("/cart"), className: "relative p-2 text-gray-700 hover:text-primary-600 transition-colors" }, /* @__PURE__ */ React21.createElement(ShoppingCart, { className: "w-6 h-6" }), cart?.cartBody?.items?.length && cart.cartBody?.items?.length > 0 ? /* @__PURE__ */ React21.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, cart.cartBody?.items?.length) : null), isAuthenticated ? /* @__PURE__ */ React21.createElement(
|
|
11401
11404
|
Link8,
|
|
11402
11405
|
{
|
|
11403
11406
|
href: buildPath("/account"),
|
|
11404
11407
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors"
|
|
11405
11408
|
},
|
|
11406
|
-
/* @__PURE__ */
|
|
11407
|
-
) : /* @__PURE__ */
|
|
11409
|
+
/* @__PURE__ */ React21.createElement(User, { className: "w-6 h-6 text-gray-700" })
|
|
11410
|
+
) : /* @__PURE__ */ React21.createElement(
|
|
11408
11411
|
Link8,
|
|
11409
11412
|
{
|
|
11410
11413
|
href: buildPath("/login"),
|
|
11411
11414
|
className: "hidden sm:block px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors font-medium"
|
|
11412
11415
|
},
|
|
11413
11416
|
"Sign In"
|
|
11414
|
-
)), /* @__PURE__ */
|
|
11417
|
+
)), /* @__PURE__ */ React21.createElement(
|
|
11415
11418
|
"button",
|
|
11416
11419
|
{
|
|
11417
11420
|
className: "lg:hidden p-2 hover:bg-gray-100 rounded-lg transition-colors",
|
|
11418
11421
|
onClick: () => setIsMobileMenuOpen(!isMobileMenuOpen)
|
|
11419
11422
|
},
|
|
11420
|
-
isMobileMenuOpen ? /* @__PURE__ */
|
|
11421
|
-
)), /* @__PURE__ */
|
|
11423
|
+
isMobileMenuOpen ? /* @__PURE__ */ React21.createElement(X, { className: "w-6 h-6" }) : /* @__PURE__ */ React21.createElement(Menu, { className: "w-6 h-6" })
|
|
11424
|
+
)), /* @__PURE__ */ React21.createElement(AnimatePresence, null, isMobileMenuOpen && /* @__PURE__ */ React21.createElement(
|
|
11422
11425
|
motion.div,
|
|
11423
11426
|
{
|
|
11424
11427
|
initial: { opacity: 0, height: 0 },
|
|
@@ -11426,7 +11429,7 @@ function Header() {
|
|
|
11426
11429
|
exit: { opacity: 0, height: 0 },
|
|
11427
11430
|
className: "lg:hidden overflow-hidden border-t border-gray-200"
|
|
11428
11431
|
},
|
|
11429
|
-
/* @__PURE__ */
|
|
11432
|
+
/* @__PURE__ */ React21.createElement("nav", { className: "flex flex-col gap-1 py-2" }, navLinks.map((link) => /* @__PURE__ */ React21.createElement(
|
|
11430
11433
|
Link8,
|
|
11431
11434
|
{
|
|
11432
11435
|
key: link.href,
|
|
@@ -11435,7 +11438,7 @@ function Header() {
|
|
|
11435
11438
|
onClick: () => setIsMobileMenuOpen(false)
|
|
11436
11439
|
},
|
|
11437
11440
|
link.label
|
|
11438
|
-
)), !isAuthenticated && /* @__PURE__ */
|
|
11441
|
+
)), !isAuthenticated && /* @__PURE__ */ React21.createElement(
|
|
11439
11442
|
Link8,
|
|
11440
11443
|
{
|
|
11441
11444
|
href: buildPath("/login"),
|
|
@@ -11474,48 +11477,48 @@ function Footer() {
|
|
|
11474
11477
|
{ label: "Cookie Policy", href: buildPath("/cookies") }
|
|
11475
11478
|
]
|
|
11476
11479
|
};
|
|
11477
|
-
return /* @__PURE__ */
|
|
11480
|
+
return /* @__PURE__ */ React21.createElement("footer", { className: "bg-gray-900 text-gray-300" }, /* @__PURE__ */ React21.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12" }, /* @__PURE__ */ React21.createElement("div", { className: "lg:col-span-2" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-2xl font-bold text-white mb-4" }, config.storeName), /* @__PURE__ */ React21.createElement("p", { className: "text-gray-400 mb-6 max-w-md" }, "Your trusted online store for quality products. We deliver excellence with every order."), /* @__PURE__ */ React21.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(Mail, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "support@", config.storeName.toLowerCase().replace(/\s+/g, ""), ".com")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(Phone, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "+1 (555) 123-4567")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(MapPin, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21.createElement("span", null, "123 Store Street, City, Country")))), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Shop"), /* @__PURE__ */ React21.createElement("ul", { className: "space-y-2" }, footerLinks.shop.map((link) => /* @__PURE__ */ React21.createElement("li", { key: link.href }, /* @__PURE__ */ React21.createElement(
|
|
11478
11481
|
Link8,
|
|
11479
11482
|
{
|
|
11480
11483
|
href: link.href,
|
|
11481
11484
|
className: "hover:text-primary-500 transition-colors"
|
|
11482
11485
|
},
|
|
11483
11486
|
link.label
|
|
11484
|
-
))))), /* @__PURE__ */
|
|
11487
|
+
))))), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Account"), /* @__PURE__ */ React21.createElement("ul", { className: "space-y-2" }, footerLinks.account.map((link) => /* @__PURE__ */ React21.createElement("li", { key: link.href }, /* @__PURE__ */ React21.createElement(
|
|
11485
11488
|
Link8,
|
|
11486
11489
|
{
|
|
11487
11490
|
href: link.href,
|
|
11488
11491
|
className: "hover:text-primary-500 transition-colors"
|
|
11489
11492
|
},
|
|
11490
11493
|
link.label
|
|
11491
|
-
))))), /* @__PURE__ */
|
|
11494
|
+
))))), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Support"), /* @__PURE__ */ React21.createElement("ul", { className: "space-y-2" }, footerLinks.support.map((link) => /* @__PURE__ */ React21.createElement("li", { key: link.href }, /* @__PURE__ */ React21.createElement(
|
|
11492
11495
|
Link8,
|
|
11493
11496
|
{
|
|
11494
11497
|
href: link.href,
|
|
11495
11498
|
className: "hover:text-primary-500 transition-colors"
|
|
11496
11499
|
},
|
|
11497
11500
|
link.label
|
|
11498
|
-
)))))), /* @__PURE__ */
|
|
11501
|
+
)))))), /* @__PURE__ */ React21.createElement("div", { className: "border-t border-gray-800 mt-12 pt-8 flex flex-col md:flex-row justify-between items-center gap-4" }, /* @__PURE__ */ React21.createElement("p", { className: "text-gray-400 text-sm" }, "\xA9 ", (/* @__PURE__ */ new Date()).getFullYear(), " ", config.storeName, ". All rights reserved."), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21.createElement(
|
|
11499
11502
|
"a",
|
|
11500
11503
|
{
|
|
11501
11504
|
href: "#",
|
|
11502
11505
|
className: "w-10 h-10 bg-gray-800 hover:bg-primary-600 rounded-full flex items-center justify-center transition-colors"
|
|
11503
11506
|
},
|
|
11504
|
-
/* @__PURE__ */
|
|
11505
|
-
), /* @__PURE__ */
|
|
11507
|
+
/* @__PURE__ */ React21.createElement(Facebook, { className: "w-5 h-5" })
|
|
11508
|
+
), /* @__PURE__ */ React21.createElement(
|
|
11506
11509
|
"a",
|
|
11507
11510
|
{
|
|
11508
11511
|
href: "#",
|
|
11509
11512
|
className: "w-10 h-10 bg-gray-800 hover:bg-primary-600 rounded-full flex items-center justify-center transition-colors"
|
|
11510
11513
|
},
|
|
11511
|
-
/* @__PURE__ */
|
|
11512
|
-
), /* @__PURE__ */
|
|
11514
|
+
/* @__PURE__ */ React21.createElement(Twitter, { className: "w-5 h-5" })
|
|
11515
|
+
), /* @__PURE__ */ React21.createElement(
|
|
11513
11516
|
"a",
|
|
11514
11517
|
{
|
|
11515
11518
|
href: "#",
|
|
11516
11519
|
className: "w-10 h-10 bg-gray-800 hover:bg-primary-600 rounded-full flex items-center justify-center transition-colors"
|
|
11517
11520
|
},
|
|
11518
|
-
/* @__PURE__ */
|
|
11521
|
+
/* @__PURE__ */ React21.createElement(Instagram, { className: "w-5 h-5" })
|
|
11519
11522
|
)))));
|
|
11520
11523
|
}
|
|
11521
11524
|
|