hey-pharmacist-ecommerce 1.1.15 → 1.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +584 -247
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +584 -247
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/src/screens/ProfileScreen.tsx +74 -234
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ var reactQuery = require('@tanstack/react-query');
|
|
|
9
9
|
var navigation = require('next/navigation');
|
|
10
10
|
var Image4 = require('next/image');
|
|
11
11
|
var dynamic = require('next/dynamic');
|
|
12
|
-
var
|
|
12
|
+
var Link6 = require('next/link');
|
|
13
13
|
var reactHookForm = require('react-hook-form');
|
|
14
14
|
var zod$1 = require('@hookform/resolvers/zod');
|
|
15
15
|
var zod = require('zod');
|
|
@@ -20,7 +20,7 @@ var React21__default = /*#__PURE__*/_interopDefault(React21);
|
|
|
20
20
|
var globalAxios4__default = /*#__PURE__*/_interopDefault(globalAxios4);
|
|
21
21
|
var Image4__default = /*#__PURE__*/_interopDefault(Image4);
|
|
22
22
|
var dynamic__default = /*#__PURE__*/_interopDefault(dynamic);
|
|
23
|
-
var
|
|
23
|
+
var Link6__default = /*#__PURE__*/_interopDefault(Link6);
|
|
24
24
|
|
|
25
25
|
var __defProp = Object.defineProperty;
|
|
26
26
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -8830,7 +8830,7 @@ function ProductDetailScreen({ productId }) {
|
|
|
8830
8830
|
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-[520px] animate-pulse rounded-3xl bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-3 gap-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement("div", { key: index, className: "h-32 animate-pulse rounded-2xl bg-slate-200" })))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4 rounded-3xl bg-white p-6 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-8 w-32 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-10 w-48 animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-6 w-full animate-pulse rounded-full bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "h-12 w-full animate-pulse rounded-2xl bg-slate-200" })))));
|
|
8831
8831
|
}
|
|
8832
8832
|
if (!product) {
|
|
8833
|
-
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl bg-white p-10 text-center shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "mx-auto h-10 w-10 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "mt-6 text-2xl font-semibold text-gray-900" }, "Product not found"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-2 text-gray-600" }, "It may have been removed or is temporarily unavailable. Discover other pharmacy essentials in our catalogue."), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
8833
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl bg-white p-10 text-center shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "mx-auto h-10 w-10 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("h1", { className: "mt-6 text-2xl font-semibold text-gray-900" }, "Product not found"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-2 text-gray-600" }, "It may have been removed or is temporarily unavailable. Discover other pharmacy essentials in our catalogue."), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6" }, /* @__PURE__ */ React21__default.default.createElement(Link6__default.default, { href: "/shop", className: "inline-block" }, /* @__PURE__ */ React21__default.default.createElement(Button, null, "Browse products"))))));
|
|
8834
8834
|
}
|
|
8835
8835
|
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-white" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "bg-gray-50 border-b border-gray-200 py-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "max-w-[1400px] mx-auto px-8 md:px-12" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
8836
8836
|
"button",
|
|
@@ -10079,7 +10079,7 @@ function LoginScreen() {
|
|
|
10079
10079
|
className: "h-4 w-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500"
|
|
10080
10080
|
}
|
|
10081
10081
|
), "Remember me"), /* @__PURE__ */ React21__default.default.createElement(
|
|
10082
|
-
|
|
10082
|
+
Link6__default.default,
|
|
10083
10083
|
{
|
|
10084
10084
|
href: buildPath("/forgot-password"),
|
|
10085
10085
|
className: "font-medium text-primary transition hover:opacity-80"
|
|
@@ -10095,7 +10095,7 @@ function LoginScreen() {
|
|
|
10095
10095
|
},
|
|
10096
10096
|
isSubmitting ? "Signing in..." : "Sign in"
|
|
10097
10097
|
)
|
|
10098
|
-
), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted" }, "Don't have an account? ", /* @__PURE__ */ React21__default.default.createElement(
|
|
10098
|
+
), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted" }, "Don't have an account? ", /* @__PURE__ */ React21__default.default.createElement(Link6__default.default, { href: buildPath("/register"), className: "font-medium text-primary transition hover:opacity-90" }, "Sign up"))))
|
|
10099
10099
|
)));
|
|
10100
10100
|
}
|
|
10101
10101
|
var registerSchema = zod.z.object({
|
|
@@ -10232,8 +10232,8 @@ function RegisterScreen() {
|
|
|
10232
10232
|
},
|
|
10233
10233
|
showConfirmPassword ? /* @__PURE__ */ React21__default.default.createElement(lucideReact.EyeOff, { className: "h-5 w-5" }) : /* @__PURE__ */ React21__default.default.createElement(lucideReact.Eye, { className: "h-5 w-5" })
|
|
10234
10234
|
)),
|
|
10235
|
-
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Shield, { strokeWidth: 2, className: "mt-0.5 h-8 w-8 text-primary" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "By creating an account, you agree to our", " ", /* @__PURE__ */ React21__default.default.createElement(
|
|
10236
|
-
|
|
10235
|
+
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Shield, { strokeWidth: 2, className: "mt-0.5 h-8 w-8 text-primary" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "By creating an account, you agree to our", " ", /* @__PURE__ */ React21__default.default.createElement(Link6__default.default, { href: buildPath("/terms"), className: "font-semibold text-primary hover:opacity-70" }, "Terms of Service"), " ", "and", " ", /* @__PURE__ */ React21__default.default.createElement(
|
|
10236
|
+
Link6__default.default,
|
|
10237
10237
|
{
|
|
10238
10238
|
href: buildPath("/privacy"),
|
|
10239
10239
|
className: "font-semibold text-primary hover:opacity-70"
|
|
@@ -10249,191 +10249,29 @@ function RegisterScreen() {
|
|
|
10249
10249
|
},
|
|
10250
10250
|
isSubmitting ? "Creating account..." : "Create my account"
|
|
10251
10251
|
)
|
|
10252
|
-
), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted" }, "Already have an account? ", /* @__PURE__ */ React21__default.default.createElement(
|
|
10252
|
+
), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted" }, "Already have an account? ", /* @__PURE__ */ React21__default.default.createElement(Link6__default.default, { href: buildPath("/login"), className: "font-medium text-primary transition hover:opacity-90" }, "Sign in"))))
|
|
10253
10253
|
)));
|
|
10254
10254
|
}
|
|
10255
|
-
function
|
|
10256
|
-
|
|
10257
|
-
|
|
10258
|
-
|
|
10259
|
-
|
|
10260
|
-
const [logoutError, setLogoutError] = React21.useState(null);
|
|
10261
|
-
const handleLogout = async () => {
|
|
10262
|
-
setIsLoggingOut(true);
|
|
10263
|
-
setLogoutError(null);
|
|
10264
|
-
try {
|
|
10265
|
-
await logout();
|
|
10266
|
-
router.push(buildPath("/"));
|
|
10267
|
-
} catch (error) {
|
|
10268
|
-
setLogoutError(error?.response?.data?.message || "Failed to logout. Please try again.");
|
|
10269
|
-
} finally {
|
|
10270
|
-
setIsLoggingOut(false);
|
|
10271
|
-
}
|
|
10272
|
-
};
|
|
10273
|
-
if (!user) {
|
|
10274
|
-
if (isLoading) return null;
|
|
10275
|
-
router.push(buildPath("/login"));
|
|
10276
|
-
return null;
|
|
10277
|
-
}
|
|
10278
|
-
const quickLinks = [
|
|
10279
|
-
{
|
|
10280
|
-
icon: lucideReact.Package,
|
|
10281
|
-
label: "Orders & invoices",
|
|
10282
|
-
description: "Track shipments, invoices, and receipts",
|
|
10283
|
-
href: buildPath("/orders")
|
|
10284
|
-
},
|
|
10285
|
-
{
|
|
10286
|
-
icon: lucideReact.Heart,
|
|
10287
|
-
label: "Wishlist",
|
|
10288
|
-
description: "Curate go-to remedies and favorites",
|
|
10289
|
-
href: buildPath("/wishlist")
|
|
10290
|
-
},
|
|
10291
|
-
{
|
|
10292
|
-
icon: lucideReact.MapPin,
|
|
10293
|
-
label: "Delivery addresses",
|
|
10294
|
-
description: "Manage saved delivery locations",
|
|
10295
|
-
href: buildPath("/account/addresses")
|
|
10296
|
-
}
|
|
10297
|
-
];
|
|
10298
|
-
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-slate-50 text-slate-900" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative container mx-auto px-4 pb-16 pt-10" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-3xl border border-slate-200 bg-white/95 p-8 shadow-xl shadow-primary-50 backdrop-blur" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6 flex flex-wrap items-center justify-between gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-sm text-slate-500" }, "Stay signed in to keep prescriptions and deliveries synced."), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, logoutError && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-2 rounded-xl border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "mt-[1px] h-4 w-4 text-red-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, logoutError)), /* @__PURE__ */ React21__default.default.createElement(
|
|
10299
|
-
Button,
|
|
10300
|
-
{
|
|
10301
|
-
type: "button",
|
|
10302
|
-
variant: "outline",
|
|
10303
|
-
size: "sm",
|
|
10304
|
-
className: "border-red-200 text-red-600 hover:bg-red-50",
|
|
10305
|
-
onClick: handleLogout,
|
|
10306
|
-
disabled: isLoggingOut
|
|
10307
|
-
},
|
|
10308
|
-
/* @__PURE__ */ React21__default.default.createElement(lucideReact.LogOut, { className: "h-4 w-4" }),
|
|
10309
|
-
isLoggingOut ? "Logging out..." : "Log out"
|
|
10310
|
-
))), /* @__PURE__ */ React21__default.default.createElement(
|
|
10311
|
-
framerMotion.motion.div,
|
|
10312
|
-
{
|
|
10313
|
-
initial: { opacity: 0, y: 18 },
|
|
10314
|
-
animate: { opacity: 1, y: 0 },
|
|
10315
|
-
className: "grid gap-8 md:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)] md:items-center"
|
|
10316
|
-
},
|
|
10317
|
-
/* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "inline-flex items-center gap-2 rounded-full bg-slate-900 text-white px-4 py-1 text-xs font-semibold uppercase tracking-[0.32em]" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.HeartPulse, { className: "h-4 w-4" }), "Account"), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-4xl font-semibold md:text-5xl" }, "Welcome back, ", user.firstname, " ", user.lastname), /* @__PURE__ */ React21__default.default.createElement("p", { className: "mt-3 max-w-2xl text-base text-slate-600" }, "Keep your identity and delivery details accurate for smoother refills, faster shipping, and timely pharmacist guidance.")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-wrap gap-3 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "h-4 w-4 text-primary-600" }), "Secure login enabled"), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Mail, { className: "h-4 w-4 text-primary-600" }), user.email), /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Phone, { className: "h-4 w-4 text-primary-600" }), user.phoneNumber || "Add phone for urgent updates"))),
|
|
10318
|
-
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col gap-4 rounded-2xl border border-slate-200 bg-slate-50/70 p-6 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl bg-white text-2xl font-semibold text-slate-900 shadow-sm" }, getInitials(user?.firstname || "", user?.lastname || "") || ""), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, "Signed in as"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-lg font-semibold text-slate-900" }, user.firstname), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, user.email))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-3 sm:grid-cols-2" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10319
|
-
Button,
|
|
10320
|
-
{
|
|
10321
|
-
variant: "outline",
|
|
10322
|
-
size: "md",
|
|
10323
|
-
className: "border-slate-300 text-slate-800 hover:bg-white",
|
|
10324
|
-
onClick: () => router.push(buildPath("/account/edit"))
|
|
10325
|
-
},
|
|
10326
|
-
"Edit profile"
|
|
10327
|
-
), /* @__PURE__ */ React21__default.default.createElement(
|
|
10328
|
-
Button,
|
|
10329
|
-
{
|
|
10330
|
-
variant: "ghost",
|
|
10331
|
-
size: "md",
|
|
10332
|
-
className: "text-slate-700 hover:bg-white",
|
|
10333
|
-
onClick: () => router.push(buildPath("/account/change-password"))
|
|
10334
|
-
},
|
|
10335
|
-
"Change password"
|
|
10336
|
-
)))
|
|
10337
|
-
)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-10 grid gap-8 lg:grid-cols-[minmax(0,1.08fr)_minmax(0,0.92fr)] items-stretch" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10338
|
-
framerMotion.motion.div,
|
|
10339
|
-
{
|
|
10340
|
-
initial: { opacity: 0, y: 18 },
|
|
10341
|
-
animate: { opacity: 1, y: 0 },
|
|
10342
|
-
className: "space-y-6"
|
|
10343
|
-
},
|
|
10344
|
-
/* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl border border-slate-200 bg-white p-7 shadow-lg shadow-primary-50/40 min-h-[420px] h-full flex flex-col" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-400" }, "Essentials"), /* @__PURE__ */ React21__default.default.createElement("h2", { className: "mt-1 text-xl font-semibold text-slate-900" }, "Profile snapshot")), /* @__PURE__ */ React21__default.default.createElement(lucideReact.Sparkles, { className: "h-5 w-5 text-primary-500" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-6 grid gap-4 md:grid-cols-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/70 p-5" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.28em] text-slate-500" }, "Contact"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-3 space-y-2 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2 font-semibold text-slate-900" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.User, { className: "h-4 w-4 text-primary-500" }), user.firstname, " ", user.lastname), /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Mail, { className: "h-4 w-4 text-primary-500" }), user.email), /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Phone, { className: "h-4 w-4 text-primary-500" }), user.phoneNumber || "Not provided")), /* @__PURE__ */ React21__default.default.createElement(
|
|
10345
|
-
Button,
|
|
10346
|
-
{
|
|
10347
|
-
variant: "outline",
|
|
10348
|
-
size: "md",
|
|
10349
|
-
className: "mt-4 w-full border-slate-300 text-slate-800 hover:bg-white",
|
|
10350
|
-
onClick: () => router.push(buildPath("/account/edit"))
|
|
10351
|
-
},
|
|
10352
|
-
"Update information"
|
|
10353
|
-
)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-slate-50/70 p-5" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.28em] text-slate-500" }, "Security"), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-3 space-y-2 text-sm text-slate-600" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2 font-semibold text-slate-900" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShieldCheck, { className: "h-4 w-4 text-primary-500" }), "Multi-factor ready"), /* @__PURE__ */ React21__default.default.createElement("p", null, "Protect your account with a fresh password and keep notifications on.")), /* @__PURE__ */ React21__default.default.createElement(
|
|
10354
|
-
Button,
|
|
10355
|
-
{
|
|
10356
|
-
variant: "primary",
|
|
10357
|
-
size: "md",
|
|
10358
|
-
className: "mt-4 w-full",
|
|
10359
|
-
onClick: () => router.push(buildPath("/account/change-password"))
|
|
10360
|
-
},
|
|
10361
|
-
"Change password"
|
|
10362
|
-
))))
|
|
10363
|
-
), /* @__PURE__ */ React21__default.default.createElement(
|
|
10364
|
-
framerMotion.motion.aside,
|
|
10365
|
-
{
|
|
10366
|
-
initial: { opacity: 0, y: 18 },
|
|
10367
|
-
animate: { opacity: 1, y: 0 },
|
|
10368
|
-
transition: { delay: 0.05 },
|
|
10369
|
-
className: "space-y-4 h-full"
|
|
10370
|
-
},
|
|
10371
|
-
/* @__PURE__ */ React21__default.default.createElement("section", { className: "rounded-3xl border border-slate-200 bg-white p-6 shadow-sm min-h-[420px] h-full flex flex-col" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs font-semibold uppercase tracking-[0.3em] text-slate-400" }, "Quick links"), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "mt-1 text-lg font-semibold text-slate-900" }, "Next steps")), /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "h-5 w-5 text-primary-500" })), /* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-5 grid gap-3" }, quickLinks.map((item) => /* @__PURE__ */ React21__default.default.createElement(
|
|
10372
|
-
Link7__default.default,
|
|
10373
|
-
{
|
|
10374
|
-
key: item.href,
|
|
10375
|
-
href: item.href,
|
|
10376
|
-
className: "group relative flex items-start gap-3 rounded-2xl border border-slate-200 bg-slate-50/70 p-4 transition duration-200 hover:-translate-y-0.5 hover:border-primary-200 hover:bg-white hover:shadow-md"
|
|
10377
|
-
},
|
|
10378
|
-
/* @__PURE__ */ React21__default.default.createElement("span", { className: "flex h-11 w-11 items-center justify-center rounded-xl bg-white text-primary-600 shadow-sm group-hover:bg-primary-600 group-hover:text-white" }, /* @__PURE__ */ React21__default.default.createElement(item.icon, { className: "h-5 w-5" })),
|
|
10379
|
-
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "flex items-center gap-2 text-base font-semibold text-slate-900 group-hover:text-primary-700" }, item.label, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ArrowRight, { className: "h-4 w-4 opacity-0 transition group-hover:opacity-100" })), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500" }, item.description))
|
|
10380
|
-
))))
|
|
10381
|
-
))));
|
|
10382
|
-
}
|
|
10383
|
-
function Badge({ children, variant = "primary", size = "md", className = "" }) {
|
|
10384
|
-
const variants = {
|
|
10385
|
-
primary: "bg-primary-100 text-primary-700 border-primary-200",
|
|
10386
|
-
secondary: "bg-secondary-100 text-secondary-700 border-secondary-200",
|
|
10387
|
-
success: "bg-green-100 text-green-700 border-green-200",
|
|
10388
|
-
warning: "bg-yellow-100 text-yellow-700 border-yellow-200",
|
|
10389
|
-
danger: "bg-red-100 text-red-700 border-red-200",
|
|
10390
|
-
gray: "bg-gray-100 text-gray-700 border-gray-200"
|
|
10391
|
-
};
|
|
10392
|
-
const sizes = {
|
|
10393
|
-
sm: "px-2 py-1 text-xs",
|
|
10394
|
-
md: "px-3 py-1 text-sm"
|
|
10395
|
-
};
|
|
10396
|
-
return /* @__PURE__ */ React21__default.default.createElement("span", { className: `inline-flex items-center font-medium rounded-full border ${variants[variant]} ${sizes[size]} ${className}` }, children);
|
|
10397
|
-
}
|
|
10398
|
-
function OrderCard({ order }) {
|
|
10399
|
-
const config = order.orderStatus;
|
|
10400
|
-
const itemCount = order.items?.length || 0;
|
|
10401
|
-
const showPriceBreakdown = order.shippingCost && order.shippingCost > 0 || order.tax && order.tax > 0 || order.discountedAmount && order.discountedAmount > 0;
|
|
10402
|
-
return /* @__PURE__ */ React21__default.default.createElement(
|
|
10403
|
-
framerMotion.motion.div,
|
|
10404
|
-
{
|
|
10405
|
-
initial: { opacity: 0, y: 20 },
|
|
10406
|
-
animate: { opacity: 1, y: 0 },
|
|
10407
|
-
className: "rounded-lg border border-slate-200 bg-white p-4 shadow-sm hover:shadow-md transition-shadow"
|
|
10408
|
-
},
|
|
10409
|
-
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between mb-4 pb-4 border-b border-gray-200" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-base font-bold text-slate-900" }, "Order #", order?._id?.slice(0, 8) || ""), /* @__PURE__ */ React21__default.default.createElement(Badge, { variant: config }, config), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-xs text-gray-500" }, formatDate(order.createdAt || /* @__PURE__ */ new Date(), "short"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-lg font-bold text-slate-900" }, formatPrice(order.grandTotal || 0)), itemCount > 0 && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-gray-500" }, itemCount, " ", itemCount === 1 ? "item" : "items"))),
|
|
10410
|
-
/* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2 mb-4" }, order.items && order.items.length > 0 ? order.items.slice(0, 3).map((item) => {
|
|
10411
|
-
const itemPrice = item.productVariantData?.finalPrice || 0;
|
|
10412
|
-
const itemTotal = itemPrice * item.quantity;
|
|
10413
|
-
return /* @__PURE__ */ React21__default.default.createElement("div", { key: item.productVariantId || item._id, className: "flex items-center gap-2 text-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-12 h-12 rounded bg-gray-100 flex-shrink-0 overflow-hidden" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10414
|
-
Image4__default.default,
|
|
10415
|
-
{
|
|
10416
|
-
src: item?.productVariantData?.productMedia?.[0]?.file || "/placeholder-product.jpg",
|
|
10417
|
-
alt: item?.productVariantData?.name || "Product image",
|
|
10418
|
-
fill: true,
|
|
10419
|
-
className: "object-cover",
|
|
10420
|
-
sizes: "48px"
|
|
10421
|
-
}
|
|
10422
|
-
)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-medium text-slate-900 truncate text-sm" }, item.productVariantData?.name || "Unknown Product"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-gray-500" }, "Qty: ", item.quantity)), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-semibold text-slate-900 text-sm" }, formatPrice(itemTotal)));
|
|
10423
|
-
}) : /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500 text-center py-2" }, "No items found"), order.items && order.items.length > 3 && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-gray-500 text-center pt-1" }, "+", order.items.length - 3, " more ", order.items.length - 3 === 1 ? "item" : "items")),
|
|
10424
|
-
showPriceBreakdown && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-4 pb-4 border-b border-gray-200 space-y-1 text-xs" }, order.shippingCost !== void 0 && order.shippingCost > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-between text-gray-600" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Shipping"), /* @__PURE__ */ React21__default.default.createElement("span", null, formatPrice(order.shippingCost))), order.tax !== void 0 && order.tax > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-between text-gray-600" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Tax"), /* @__PURE__ */ React21__default.default.createElement("span", null, formatPrice(order.tax))), order.discountedAmount !== void 0 && order.discountedAmount > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-between text-green-600" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Discount"), /* @__PURE__ */ React21__default.default.createElement("span", null, "-", formatPrice(order.discountedAmount)))),
|
|
10425
|
-
order.payment?.paymentStatus !== "Paid" /* Paid */ && order.payment?.paymentMethod === "Card" /* Card */ && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10255
|
+
function TabNavigation({ tabs: tabs2, activeTab, onTabChange }) {
|
|
10256
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "mx-auto flex items-center max-w-7xl px-4 py-4" }, /* @__PURE__ */ React21__default.default.createElement("nav", { className: "flex overflow-x-auto scrollbar-hide justify-center gap-4", "aria-label": "Account tabs" }, tabs2.map((tab) => {
|
|
10257
|
+
const isActive = activeTab === tab.id;
|
|
10258
|
+
const Icon = tab.icon;
|
|
10259
|
+
return /* @__PURE__ */ React21__default.default.createElement(
|
|
10426
10260
|
"button",
|
|
10427
10261
|
{
|
|
10428
|
-
|
|
10429
|
-
|
|
10430
|
-
|
|
10431
|
-
|
|
10262
|
+
key: tab.id,
|
|
10263
|
+
onClick: () => onTabChange(tab.id),
|
|
10264
|
+
className: `
|
|
10265
|
+
flex items-center gap-2 px-6 py-3 text-sm font-medium whitespace-nowrap
|
|
10266
|
+
border-b-2 transition-colors
|
|
10267
|
+
${isActive ? "bg-secondary text-white rounded-xl hover:transition-all hover:duration-300 hover:ease-in-out hover:-translate-y-1" : "bg-white text-muted rounded-xl hover:text-secondary hover:transition-all hover:duration-150 hover:ease-in-out hover:-translate-y-1"}
|
|
10268
|
+
`,
|
|
10269
|
+
"aria-current": isActive ? "page" : void 0
|
|
10432
10270
|
},
|
|
10433
|
-
/* @__PURE__ */ React21__default.default.createElement(
|
|
10434
|
-
|
|
10435
|
-
)
|
|
10436
|
-
);
|
|
10271
|
+
/* @__PURE__ */ React21__default.default.createElement(Icon, { className: "h-5 w-5" }),
|
|
10272
|
+
tab.label
|
|
10273
|
+
);
|
|
10274
|
+
})));
|
|
10437
10275
|
}
|
|
10438
10276
|
function useOrders(page = 1, limit = 10, orderStatus, paymentStatus) {
|
|
10439
10277
|
const [orders, setOrders] = React21.useState([]);
|
|
@@ -10530,6 +10368,552 @@ function useCurrentOrders() {
|
|
|
10530
10368
|
}, [fetchCurrentOrders]);
|
|
10531
10369
|
return { orders, isLoading, error, refetch: fetchCurrentOrders };
|
|
10532
10370
|
}
|
|
10371
|
+
function Badge({ children, variant = "primary", size = "md", className = "" }) {
|
|
10372
|
+
const variants = {
|
|
10373
|
+
primary: "bg-primary-100 text-primary-700 border-primary-200",
|
|
10374
|
+
secondary: "bg-secondary-100 text-secondary-700 border-secondary-200",
|
|
10375
|
+
success: "bg-green-100 text-green-700 border-green-200",
|
|
10376
|
+
warning: "bg-yellow-100 text-yellow-700 border-yellow-200",
|
|
10377
|
+
danger: "bg-red-100 text-red-700 border-red-200",
|
|
10378
|
+
gray: "bg-gray-100 text-gray-700 border-gray-200"
|
|
10379
|
+
};
|
|
10380
|
+
const sizes = {
|
|
10381
|
+
sm: "px-2 py-1 text-xs",
|
|
10382
|
+
md: "px-3 py-1 text-sm"
|
|
10383
|
+
};
|
|
10384
|
+
return /* @__PURE__ */ React21__default.default.createElement("span", { className: `inline-flex items-center font-medium rounded-full border ${variants[variant]} ${sizes[size]} ${className}` }, children);
|
|
10385
|
+
}
|
|
10386
|
+
function AccountOverviewTab() {
|
|
10387
|
+
const { user } = useAuth();
|
|
10388
|
+
const { orders, isLoading: ordersLoading } = useCurrentOrders();
|
|
10389
|
+
const { getWishlistCount } = useWishlist();
|
|
10390
|
+
const router = navigation.useRouter();
|
|
10391
|
+
const { buildPath } = useBasePath();
|
|
10392
|
+
if (!user) return null;
|
|
10393
|
+
const totalOrders = orders?.length || 0;
|
|
10394
|
+
const deliveredOrders = orders?.filter((order) => order.orderStatus === "Delivered")?.length || 0;
|
|
10395
|
+
const inTransitOrders = orders?.filter((order) => order.orderStatus === "In Transit")?.length || 0;
|
|
10396
|
+
const savedItemsCount = getWishlistCount();
|
|
10397
|
+
const recentOrders = orders?.slice(0, 3) || [];
|
|
10398
|
+
const stats = [
|
|
10399
|
+
{
|
|
10400
|
+
icon: lucideReact.Package,
|
|
10401
|
+
label: "Total Orders",
|
|
10402
|
+
value: totalOrders,
|
|
10403
|
+
color: "bg-[#DBEAFE] text-[#5B9BD5]"
|
|
10404
|
+
},
|
|
10405
|
+
{
|
|
10406
|
+
icon: lucideReact.CheckCircle,
|
|
10407
|
+
label: "Delivered",
|
|
10408
|
+
value: deliveredOrders,
|
|
10409
|
+
color: "bg-[#DCFCE7] text-[#00A63E]"
|
|
10410
|
+
},
|
|
10411
|
+
{
|
|
10412
|
+
icon: lucideReact.Heart,
|
|
10413
|
+
label: "Saved Items",
|
|
10414
|
+
value: savedItemsCount,
|
|
10415
|
+
color: "bg-[#FFEDD4] text-[#FF6B35]"
|
|
10416
|
+
},
|
|
10417
|
+
{
|
|
10418
|
+
icon: lucideReact.Clock,
|
|
10419
|
+
label: "In Transit",
|
|
10420
|
+
value: inTransitOrders,
|
|
10421
|
+
color: "bg-[#F3E8FF] text-[#9810FA]"
|
|
10422
|
+
}
|
|
10423
|
+
];
|
|
10424
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "py-6 px-3 space-y-6 pb-24" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4" }, stats.map((stat, index) => {
|
|
10425
|
+
const Icon = stat.icon;
|
|
10426
|
+
return /* @__PURE__ */ React21__default.default.createElement(
|
|
10427
|
+
"div",
|
|
10428
|
+
{
|
|
10429
|
+
key: index,
|
|
10430
|
+
className: "rounded-xl border border-slate-200 bg-white p-4 hover:shadow-md transition-shadow"
|
|
10431
|
+
},
|
|
10432
|
+
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: `flex h-12 w-12 items-center justify-center rounded-lg ${stat.color}` }, /* @__PURE__ */ React21__default.default.createElement(Icon, { className: "h-6 w-6" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-2xl font-bold text-secondary" }, stat.value), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-600" }, stat.label)))
|
|
10433
|
+
);
|
|
10434
|
+
})), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-xl border border-slate-200 bg-white p-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-secondary" }, "Profile Information"), /* @__PURE__ */ React21__default.default.createElement(
|
|
10435
|
+
"button",
|
|
10436
|
+
{
|
|
10437
|
+
onClick: () => router.push(buildPath("/account/edit")),
|
|
10438
|
+
className: "flex items-center gap-1 text-sm text-primary-600 hover:text-primary-700"
|
|
10439
|
+
},
|
|
10440
|
+
/* @__PURE__ */ React21__default.default.createElement(lucideReact.Edit, { className: "h-4 w-4" }),
|
|
10441
|
+
"Edit"
|
|
10442
|
+
)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-10 w-10 items-center justify-center rounded-lg bg-[#DBEAFE]" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.User, { className: "h-5 w-5 text-[#5B9BD5]" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, "Full Name"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary" }, user.firstname, " ", user.lastname))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-10 w-10 items-center justify-center rounded-lg bg-[#DBEAFE]" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Mail, { className: "h-5 w-5 text-[#5B9BD5]" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, "E-mail Address"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary" }, user.email))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-10 w-10 items-center justify-center rounded-lg bg-[#DBEAFE]" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Phone, { className: "h-5 w-5 text-[#5B9BD5]" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, "Phone Number"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary" }, user.phoneNumber || "Not provided"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-10 w-10 items-center justify-center rounded-lg bg-[#DBEAFE]" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.MapPin, { className: "h-5 w-5 text-[#5B9BD5]" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, "Date of Birth"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary" }, "Not provided"))))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-xl border border-slate-200 bg-white p-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-secondary" }, "Recent Orders"), /* @__PURE__ */ React21__default.default.createElement(
|
|
10443
|
+
"button",
|
|
10444
|
+
{
|
|
10445
|
+
onClick: () => {
|
|
10446
|
+
const event = new CustomEvent("switchTab", { detail: "orders" });
|
|
10447
|
+
window.dispatchEvent(event);
|
|
10448
|
+
},
|
|
10449
|
+
className: "text-sm text-primary-600 hover:text-primary-700"
|
|
10450
|
+
},
|
|
10451
|
+
"View All \u2192"
|
|
10452
|
+
)), ordersLoading ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(
|
|
10453
|
+
"div",
|
|
10454
|
+
{
|
|
10455
|
+
key: index,
|
|
10456
|
+
className: "h-16 animate-pulse rounded-lg bg-slate-50"
|
|
10457
|
+
}
|
|
10458
|
+
))) : recentOrders.length === 0 ? /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted text-center py-8" }, "No orders yet") : /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, recentOrders.map((order) => /* @__PURE__ */ React21__default.default.createElement(
|
|
10459
|
+
"div",
|
|
10460
|
+
{
|
|
10461
|
+
key: order._id,
|
|
10462
|
+
className: "flex items-center justify-between rounded-lg bg-slate-50 p-4 hover:bg-slate-100 transition-colors"
|
|
10463
|
+
},
|
|
10464
|
+
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex h-10 w-10 items-center justify-center rounded-lg bg-white" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Package, { className: "h-5 w-5 text-slate-600" })), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary" }, "ORD-", order._id?.slice(-6).toUpperCase()), /* @__PURE__ */ React21__default.default.createElement(
|
|
10465
|
+
Badge,
|
|
10466
|
+
{
|
|
10467
|
+
className: "p-1 text-xs",
|
|
10468
|
+
variant: order.orderStatus === "Delivered" ? "success" : order.orderStatus === "In Transit" ? "primary" : order.orderStatus === "Pending" ? "warning" : "gray"
|
|
10469
|
+
},
|
|
10470
|
+
order.orderStatus
|
|
10471
|
+
)), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, formatDate(order.createdAt || /* @__PURE__ */ new Date(), "short")))),
|
|
10472
|
+
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-semibold text-secondary" }, formatPrice(order.grandTotal || 0)))
|
|
10473
|
+
)))));
|
|
10474
|
+
}
|
|
10475
|
+
function AccountOrdersTab() {
|
|
10476
|
+
const { orders, isLoading, error } = useCurrentOrders();
|
|
10477
|
+
if (isLoading) {
|
|
10478
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "py-6 px-3 pb-24" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(
|
|
10479
|
+
"div",
|
|
10480
|
+
{
|
|
10481
|
+
key: index,
|
|
10482
|
+
className: "h-64 animate-pulse rounded-xl bg-slate-50"
|
|
10483
|
+
}
|
|
10484
|
+
))));
|
|
10485
|
+
}
|
|
10486
|
+
if (error) {
|
|
10487
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "py-6 px-3 pb-24" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-lg border border-red-100 bg-red-50 p-6 text-sm text-red-700" }, error.message));
|
|
10488
|
+
}
|
|
10489
|
+
if (orders.length === 0) {
|
|
10490
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "py-6 px-3 pb-24" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10491
|
+
EmptyState,
|
|
10492
|
+
{
|
|
10493
|
+
icon: lucideReact.Package,
|
|
10494
|
+
title: "No orders yet",
|
|
10495
|
+
description: "When you place orders, they'll appear here for easy tracking."
|
|
10496
|
+
}
|
|
10497
|
+
));
|
|
10498
|
+
}
|
|
10499
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "py-6 px-3 space-y-4 pb-24" }, orders.map((order) => {
|
|
10500
|
+
order.items?.length || 0;
|
|
10501
|
+
return /* @__PURE__ */ React21__default.default.createElement(
|
|
10502
|
+
"div",
|
|
10503
|
+
{
|
|
10504
|
+
key: order._id,
|
|
10505
|
+
className: "rounded-xl border border-slate-200 bg-white p-6 hover:shadow-md transition-shadow"
|
|
10506
|
+
},
|
|
10507
|
+
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-start justify-between mb-4 pb-4 border-b border-slate-200" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-base font-semibold text-secondary" }, "Order ORD-", order._id?.slice(-6).toUpperCase()), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted mb-4" }, "Placed on ", formatDate(order.createdAt || /* @__PURE__ */ new Date(), "long"))), /* @__PURE__ */ React21__default.default.createElement(
|
|
10508
|
+
Badge,
|
|
10509
|
+
{
|
|
10510
|
+
className: "text-xs",
|
|
10511
|
+
variant: order.orderStatus === "Delivered" ? "success" : order.orderStatus === "In Transit" ? "primary" : order.orderStatus === "Pending" ? "warning" : "gray"
|
|
10512
|
+
},
|
|
10513
|
+
order.orderStatus
|
|
10514
|
+
)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted mb-1" }, "Total Amount"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-lg font-bold text-secondary" }, formatPrice(order.grandTotal || 0)))),
|
|
10515
|
+
/* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3 mb-4" }, order.items && order.items.length > 0 ? order.items.map((item, index) => {
|
|
10516
|
+
const itemPrice = item.productVariantData?.finalPrice || 0;
|
|
10517
|
+
const itemTotal = itemPrice * item.quantity;
|
|
10518
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { key: item.productVariantId || index, className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-12 h-12 rounded-lg bg-slate-100 flex-shrink-0 overflow-hidden" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10519
|
+
Image4__default.default,
|
|
10520
|
+
{
|
|
10521
|
+
src: item?.productVariantData?.productMedia?.[0]?.file || "/placeholder-product.jpg",
|
|
10522
|
+
alt: item?.productVariantData?.name || "Product image",
|
|
10523
|
+
fill: true,
|
|
10524
|
+
className: "object-cover",
|
|
10525
|
+
sizes: "48px"
|
|
10526
|
+
}
|
|
10527
|
+
)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-medium text-secondary text-sm truncate" }, item.productVariantData?.name || "Unknown Product"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, "Qty: ", item.quantity)), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-semibold text-secondary text-sm" }, formatPrice(itemTotal)));
|
|
10528
|
+
}) : /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted text-center py-2" }, "No items found"))
|
|
10529
|
+
);
|
|
10530
|
+
}));
|
|
10531
|
+
}
|
|
10532
|
+
function useWishlistProducts(productIds = []) {
|
|
10533
|
+
const [products, setProducts] = React21.useState([]);
|
|
10534
|
+
const [isLoading, setIsLoading] = React21.useState(false);
|
|
10535
|
+
const [error, setError] = React21.useState(null);
|
|
10536
|
+
const [cache] = React21.useState(() => /* @__PURE__ */ new Map());
|
|
10537
|
+
const uniqueIds = React21.useMemo(
|
|
10538
|
+
() => Array.from(new Set((productIds || []).filter(Boolean))),
|
|
10539
|
+
[productIds]
|
|
10540
|
+
);
|
|
10541
|
+
const fetchProducts = React21.useCallback(async () => {
|
|
10542
|
+
if (uniqueIds.length === 0) {
|
|
10543
|
+
setProducts([]);
|
|
10544
|
+
setIsLoading(false);
|
|
10545
|
+
setError(null);
|
|
10546
|
+
return;
|
|
10547
|
+
}
|
|
10548
|
+
setIsLoading(true);
|
|
10549
|
+
setError(null);
|
|
10550
|
+
try {
|
|
10551
|
+
const api = new ProductsApi(AXIOS_CONFIG);
|
|
10552
|
+
const results = await Promise.all(
|
|
10553
|
+
uniqueIds.map(async (id) => {
|
|
10554
|
+
if (cache.has(id)) return cache.get(id);
|
|
10555
|
+
const response = await api.getSingleProduct(id?._id || id || "");
|
|
10556
|
+
const product = response.data;
|
|
10557
|
+
cache.set(id, product);
|
|
10558
|
+
return product;
|
|
10559
|
+
})
|
|
10560
|
+
);
|
|
10561
|
+
setProducts(results);
|
|
10562
|
+
} catch (err) {
|
|
10563
|
+
setError(err);
|
|
10564
|
+
console.error("Failed to load wishlist products", err);
|
|
10565
|
+
} finally {
|
|
10566
|
+
setIsLoading(false);
|
|
10567
|
+
}
|
|
10568
|
+
}, [cache, uniqueIds]);
|
|
10569
|
+
React21.useEffect(() => {
|
|
10570
|
+
fetchProducts();
|
|
10571
|
+
}, [fetchProducts]);
|
|
10572
|
+
return {
|
|
10573
|
+
products,
|
|
10574
|
+
isLoading,
|
|
10575
|
+
error,
|
|
10576
|
+
refetch: fetchProducts
|
|
10577
|
+
};
|
|
10578
|
+
}
|
|
10579
|
+
|
|
10580
|
+
// src/components/AccountSavedItemsTab.tsx
|
|
10581
|
+
function AccountSavedItemsTab() {
|
|
10582
|
+
const { products: wishlistProductIds } = useWishlist();
|
|
10583
|
+
const { products: wishlistProducts, isLoading, error } = useWishlistProducts(
|
|
10584
|
+
wishlistProductIds
|
|
10585
|
+
);
|
|
10586
|
+
const products = wishlistProducts || [];
|
|
10587
|
+
console.log(products);
|
|
10588
|
+
if (isLoading) {
|
|
10589
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3" }, Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(
|
|
10590
|
+
"div",
|
|
10591
|
+
{
|
|
10592
|
+
key: index,
|
|
10593
|
+
className: "h-80 animate-pulse rounded-lg border border-slate-100 bg-slate-50"
|
|
10594
|
+
}
|
|
10595
|
+
))));
|
|
10596
|
+
}
|
|
10597
|
+
if (error) {
|
|
10598
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-lg border border-red-100 bg-red-50 p-6 text-sm text-red-700" }, error.message));
|
|
10599
|
+
}
|
|
10600
|
+
if (products.length === 0) {
|
|
10601
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10602
|
+
EmptyState,
|
|
10603
|
+
{
|
|
10604
|
+
icon: lucideReact.Heart,
|
|
10605
|
+
title: "No saved items",
|
|
10606
|
+
description: "Items you save will appear here for easy access later."
|
|
10607
|
+
}
|
|
10608
|
+
));
|
|
10609
|
+
}
|
|
10610
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "pb-24 p-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-6 bg-white rounded-xl" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-secondary" }, "Saved for Later"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-secondary" }, products.length, " ", products.length === 1 ? "item" : "items", " saved")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3" }, products.map((product) => /* @__PURE__ */ React21__default.default.createElement(ProductCard, { key: product._id, product })))));
|
|
10611
|
+
}
|
|
10612
|
+
function ConfirmModal({
|
|
10613
|
+
isOpen,
|
|
10614
|
+
onClose,
|
|
10615
|
+
onConfirm,
|
|
10616
|
+
title,
|
|
10617
|
+
message,
|
|
10618
|
+
confirmText = "Confirm",
|
|
10619
|
+
cancelText = "Cancel",
|
|
10620
|
+
variant = "danger",
|
|
10621
|
+
isLoading = false
|
|
10622
|
+
}) {
|
|
10623
|
+
const handleConfirm = () => {
|
|
10624
|
+
onConfirm();
|
|
10625
|
+
};
|
|
10626
|
+
const variantStyles = {
|
|
10627
|
+
danger: {
|
|
10628
|
+
icon: "text-red-600 bg-red-100",
|
|
10629
|
+
button: "secondary"
|
|
10630
|
+
},
|
|
10631
|
+
warning: {
|
|
10632
|
+
icon: "text-amber-600 bg-amber-100",
|
|
10633
|
+
button: "primary"
|
|
10634
|
+
},
|
|
10635
|
+
info: {
|
|
10636
|
+
icon: "text-secondary bg-blue-100",
|
|
10637
|
+
button: "primary"
|
|
10638
|
+
}
|
|
10639
|
+
};
|
|
10640
|
+
const style = variantStyles[variant];
|
|
10641
|
+
return /* @__PURE__ */ React21__default.default.createElement(Modal, { isOpen, onClose, size: "sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex flex-col items-center text-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: `w-12 h-12 rounded-full ${style.icon} flex items-center justify-center mb-4` }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.AlertTriangle, { className: "w-6 h-6" })), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-xl font-semibold text-secondary mb-2" }, title), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-muted mb-6" }, message), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex gap-3 w-full justify-center" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10642
|
+
"button",
|
|
10643
|
+
{
|
|
10644
|
+
className: "px-6 py-2 border border-slate-200 rounded-full text-slate-700 hover:bg-slate-100 transition-colors",
|
|
10645
|
+
onClick: onClose
|
|
10646
|
+
},
|
|
10647
|
+
cancelText
|
|
10648
|
+
), /* @__PURE__ */ React21__default.default.createElement(
|
|
10649
|
+
"button",
|
|
10650
|
+
{
|
|
10651
|
+
className: "px-6 py-2 border border-red-600 rounded-full text-red-600 hover:bg-red-100 transition-colors bg-red-50",
|
|
10652
|
+
onClick: handleConfirm
|
|
10653
|
+
},
|
|
10654
|
+
confirmText
|
|
10655
|
+
))));
|
|
10656
|
+
}
|
|
10657
|
+
|
|
10658
|
+
// src/components/AccountAddressesTab.tsx
|
|
10659
|
+
function AccountAddressesTab() {
|
|
10660
|
+
const { addresses, isLoading, error, removeAddress, markAsDefault, refresh } = useAddresses();
|
|
10661
|
+
const [deletingId, setDeletingId] = React21.useState(null);
|
|
10662
|
+
const [editingAddress, setEditingAddress] = React21.useState(void 0);
|
|
10663
|
+
const [isAddressModalOpen, setIsAddressModalOpen] = React21.useState(false);
|
|
10664
|
+
const [selectedAddressId, setSelectedAddressId] = React21.useState(null);
|
|
10665
|
+
const [addressToDelete, setAddressToDelete] = React21.useState(null);
|
|
10666
|
+
const notification = useNotification();
|
|
10667
|
+
const handleConfirmDelete = async () => {
|
|
10668
|
+
if (!addressToDelete) return;
|
|
10669
|
+
setDeletingId(addressToDelete.id);
|
|
10670
|
+
try {
|
|
10671
|
+
await removeAddress(addressToDelete.id);
|
|
10672
|
+
if (selectedAddressId === addressToDelete.id) {
|
|
10673
|
+
setSelectedAddressId(null);
|
|
10674
|
+
}
|
|
10675
|
+
notification.success("Address deleted successfully");
|
|
10676
|
+
} catch (error2) {
|
|
10677
|
+
console.error("Failed to delete address:", error2);
|
|
10678
|
+
notification.error("Failed to delete address. Please try again.");
|
|
10679
|
+
} finally {
|
|
10680
|
+
setDeletingId(null);
|
|
10681
|
+
setAddressToDelete(null);
|
|
10682
|
+
}
|
|
10683
|
+
};
|
|
10684
|
+
if (isLoading) {
|
|
10685
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 sm:grid-cols-2" }, Array.from({ length: 2 }).map((_, index) => /* @__PURE__ */ React21__default.default.createElement(
|
|
10686
|
+
"div",
|
|
10687
|
+
{
|
|
10688
|
+
key: index,
|
|
10689
|
+
className: "h-48 animate-pulse rounded-lg border border-slate-100 bg-slate-50"
|
|
10690
|
+
}
|
|
10691
|
+
))));
|
|
10692
|
+
}
|
|
10693
|
+
if (error) {
|
|
10694
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-lg border border-red-100 bg-red-50 p-6 text-sm text-red-700" }, error.message));
|
|
10695
|
+
}
|
|
10696
|
+
return /* @__PURE__ */ React21__default.default.createElement(React21__default.default.Fragment, null, /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-6 bg-white rounded-xl" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-6 flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-secondary" }, "Saved Addresses"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted" }, "Manage your delivery and billing addresses")), /* @__PURE__ */ React21__default.default.createElement(
|
|
10697
|
+
"button",
|
|
10698
|
+
{
|
|
10699
|
+
className: "flex flex-row items-center gap-2 px-6 py-2 border border-slate-200 rounded-xl text-slate-700 hover:opacity-80 transition-colors bg-secondary text-white text-sm",
|
|
10700
|
+
onClick: () => {
|
|
10701
|
+
setEditingAddress(void 0);
|
|
10702
|
+
setIsAddressModalOpen(true);
|
|
10703
|
+
}
|
|
10704
|
+
},
|
|
10705
|
+
/* @__PURE__ */ React21__default.default.createElement(lucideReact.Plus, { className: "h-4 w-4" }),
|
|
10706
|
+
"Add Address"
|
|
10707
|
+
)), addresses.length === 0 ? /* @__PURE__ */ React21__default.default.createElement(
|
|
10708
|
+
EmptyState,
|
|
10709
|
+
{
|
|
10710
|
+
icon: lucideReact.MapPin,
|
|
10711
|
+
title: "No addresses yet",
|
|
10712
|
+
description: "Save a shipping or billing address to speed through checkout.",
|
|
10713
|
+
actionLabel: "Add your first address",
|
|
10714
|
+
onAction: () => {
|
|
10715
|
+
setEditingAddress(void 0);
|
|
10716
|
+
setIsAddressModalOpen(true);
|
|
10717
|
+
}
|
|
10718
|
+
}
|
|
10719
|
+
) : /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid gap-4 sm:grid-cols-2" }, addresses.map((address) => /* @__PURE__ */ React21__default.default.createElement(
|
|
10720
|
+
"div",
|
|
10721
|
+
{
|
|
10722
|
+
key: address.id,
|
|
10723
|
+
className: "relative rounded-xl border border-slate-200 bg-white p-4 hover:shadow-md transition-shadow"
|
|
10724
|
+
},
|
|
10725
|
+
/* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "justify-between flex items-center" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-x-2" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.MapPin, { className: "h-4 w-4 text-secondary" }), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-semibold text-secondary" }, address.name), address.isDefault && /* @__PURE__ */ React21__default.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-green-100 px-2 py-1 text-xs font-semibold text-green-700" }, "Default")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-x-2" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10726
|
+
"button",
|
|
10727
|
+
{
|
|
10728
|
+
onClick: () => {
|
|
10729
|
+
setEditingAddress(address);
|
|
10730
|
+
setIsAddressModalOpen(true);
|
|
10731
|
+
},
|
|
10732
|
+
className: "inline-flex items-center gap-1 rounded-full border border-slate-200 px-2 py-1 text-xs font-medium text-muted transition hover:border-primary-300 hover:text-primary-600"
|
|
10733
|
+
},
|
|
10734
|
+
/* @__PURE__ */ React21__default.default.createElement(lucideReact.Edit3, { className: "h-3 w-3" })
|
|
10735
|
+
), /* @__PURE__ */ React21__default.default.createElement(
|
|
10736
|
+
"button",
|
|
10737
|
+
{
|
|
10738
|
+
onClick: () => setAddressToDelete(address),
|
|
10739
|
+
disabled: deletingId === address.id,
|
|
10740
|
+
className: "inline-flex items-center gap-1 rounded-full border border-red-200 px-2 py-1 text-xs font-semibold text-red-600 transition hover:border-red-300 hover:text-red-700 disabled:opacity-50"
|
|
10741
|
+
},
|
|
10742
|
+
/* @__PURE__ */ React21__default.default.createElement(lucideReact.Trash2, { className: "h-3 w-3" })
|
|
10743
|
+
))), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted mt-1" }, address.street1, address.street2 && `, ${address.street2}`), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted" }, address.city, ", ", address.state, " ", address.zip), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted" }, address.country), address.phone && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-slate-500 mt-1" }, address.phone))
|
|
10744
|
+
)))), /* @__PURE__ */ React21__default.default.createElement(
|
|
10745
|
+
AddressFormModal,
|
|
10746
|
+
{
|
|
10747
|
+
isOpen: isAddressModalOpen,
|
|
10748
|
+
onClose: () => setIsAddressModalOpen(false),
|
|
10749
|
+
initialAddress: editingAddress,
|
|
10750
|
+
onAddressAdded: () => {
|
|
10751
|
+
refresh();
|
|
10752
|
+
},
|
|
10753
|
+
onAddressUpdated: () => {
|
|
10754
|
+
refresh();
|
|
10755
|
+
}
|
|
10756
|
+
}
|
|
10757
|
+
), /* @__PURE__ */ React21__default.default.createElement(
|
|
10758
|
+
ConfirmModal,
|
|
10759
|
+
{
|
|
10760
|
+
isOpen: !!addressToDelete,
|
|
10761
|
+
onClose: () => setAddressToDelete(null),
|
|
10762
|
+
onConfirm: handleConfirmDelete,
|
|
10763
|
+
title: "Delete Address",
|
|
10764
|
+
message: `Are you sure you want to delete ${addressToDelete?.name}'s address? This action cannot be undone.`,
|
|
10765
|
+
confirmText: "Delete",
|
|
10766
|
+
cancelText: "Cancel",
|
|
10767
|
+
variant: "danger",
|
|
10768
|
+
isLoading: deletingId === addressToDelete?.id
|
|
10769
|
+
}
|
|
10770
|
+
));
|
|
10771
|
+
}
|
|
10772
|
+
function AccountSettingsTab() {
|
|
10773
|
+
const router = navigation.useRouter();
|
|
10774
|
+
const { buildPath } = useBasePath();
|
|
10775
|
+
const [emailNotifications, setEmailNotifications] = React21.useState(true);
|
|
10776
|
+
const [orderUpdates, setOrderUpdates] = React21.useState(true);
|
|
10777
|
+
const [promotionalEmails, setPromotionalEmails] = React21.useState(false);
|
|
10778
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-6 space-y-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2 mb-4" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Bell, { className: "h-5 w-5 text-secondary" }), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-secondary" }, "Account Preferences")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21__default.default.createElement("label", { className: "flex items-center justify-between gap-4 rounded-lg border border-slate-200 bg-slate-50 px-4 py-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary" }, "Email Notifications"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, "Receive updates about your orders")), /* @__PURE__ */ React21__default.default.createElement(
|
|
10779
|
+
"input",
|
|
10780
|
+
{
|
|
10781
|
+
type: "checkbox",
|
|
10782
|
+
checked: emailNotifications,
|
|
10783
|
+
onChange: (e) => setEmailNotifications(e.target.checked),
|
|
10784
|
+
className: "h-4 w-4 rounded border-primary-300 text-secondary focus:ring-primary-500"
|
|
10785
|
+
}
|
|
10786
|
+
)), /* @__PURE__ */ React21__default.default.createElement("label", { className: "flex items-center justify-between gap-4 rounded-lg border border-slate-200 bg-slate-50 px-4 py-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary" }, "Order Updates"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, "Get notified about shipping status")), /* @__PURE__ */ React21__default.default.createElement(
|
|
10787
|
+
"input",
|
|
10788
|
+
{
|
|
10789
|
+
type: "checkbox",
|
|
10790
|
+
checked: orderUpdates,
|
|
10791
|
+
onChange: (e) => setOrderUpdates(e.target.checked),
|
|
10792
|
+
className: "h-4 w-4 rounded border-primary-300 text-secondary focus:ring-primary-500"
|
|
10793
|
+
}
|
|
10794
|
+
)), /* @__PURE__ */ React21__default.default.createElement("label", { className: "flex items-center justify-between gap-4 rounded-lg border border-slate-200 bg-slate-50 px-4 py-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary" }, "Promotional Emails"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, "Receive special offers and discounts")), /* @__PURE__ */ React21__default.default.createElement(
|
|
10795
|
+
"input",
|
|
10796
|
+
{
|
|
10797
|
+
type: "checkbox",
|
|
10798
|
+
checked: promotionalEmails,
|
|
10799
|
+
onChange: (e) => setPromotionalEmails(e.target.checked),
|
|
10800
|
+
className: "h-4 w-4 rounded border-primary-300 text-secondary focus:ring-primary-500"
|
|
10801
|
+
}
|
|
10802
|
+
)))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-6" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-2 mb-4" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Lock, { className: "h-5 w-5 text-secondary" }), /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-lg font-semibold text-secondary" }, "Security")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between rounded-lg border border-slate-200 bg-slate-50 px-4 py-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary" }, "Change Password"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-muted" }, "Update your account password")), /* @__PURE__ */ React21__default.default.createElement(
|
|
10803
|
+
Button,
|
|
10804
|
+
{
|
|
10805
|
+
variant: "outline",
|
|
10806
|
+
size: "sm",
|
|
10807
|
+
onClick: () => router.push(buildPath("/account/change-password"))
|
|
10808
|
+
},
|
|
10809
|
+
"Change"
|
|
10810
|
+
)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between rounded-lg border border-red-100 bg-red-50 px-4 py-3" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-red-900" }, "Delete Account"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-red-600" }, "Permanently delete your account and data")), /* @__PURE__ */ React21__default.default.createElement(
|
|
10811
|
+
Button,
|
|
10812
|
+
{
|
|
10813
|
+
variant: "outline",
|
|
10814
|
+
size: "sm",
|
|
10815
|
+
className: "border-red-200 text-red-600 hover:bg-red-50",
|
|
10816
|
+
onClick: () => {
|
|
10817
|
+
if (confirm("Are you sure you want to delete your account? This action cannot be undone.")) {
|
|
10818
|
+
alert("Account deletion functionality coming soon");
|
|
10819
|
+
}
|
|
10820
|
+
}
|
|
10821
|
+
},
|
|
10822
|
+
/* @__PURE__ */ React21__default.default.createElement(lucideReact.Trash2, { className: "h-4 w-4" }),
|
|
10823
|
+
"Delete"
|
|
10824
|
+
)))));
|
|
10825
|
+
}
|
|
10826
|
+
|
|
10827
|
+
// src/screens/ProfileScreen.tsx
|
|
10828
|
+
var tabs = [
|
|
10829
|
+
{ id: "overview", label: "Overview", icon: lucideReact.User },
|
|
10830
|
+
{ id: "orders", label: "Orders", icon: lucideReact.Package },
|
|
10831
|
+
{ id: "saved-items", label: "Saved Items", icon: lucideReact.Heart },
|
|
10832
|
+
// { id: 'payment', label: 'Payment', icon: CreditCard },
|
|
10833
|
+
{ id: "addresses", label: "Addresses", icon: lucideReact.MapPin },
|
|
10834
|
+
{ id: "settings", label: "Settings", icon: lucideReact.Settings }
|
|
10835
|
+
];
|
|
10836
|
+
function AccountPage() {
|
|
10837
|
+
const router = navigation.useRouter();
|
|
10838
|
+
const { user, logout, isLoading } = useAuth();
|
|
10839
|
+
const { buildPath } = useBasePath();
|
|
10840
|
+
const [activeTab, setActiveTab] = React21.useState("overview");
|
|
10841
|
+
const [isDropdownOpen, setIsDropdownOpen] = React21.useState(false);
|
|
10842
|
+
const [isLoggingOut, setIsLoggingOut] = React21.useState(false);
|
|
10843
|
+
React21__default.default.useEffect(() => {
|
|
10844
|
+
const handleTabSwitch = (event) => {
|
|
10845
|
+
setActiveTab(event.detail);
|
|
10846
|
+
};
|
|
10847
|
+
window.addEventListener("switchTab", handleTabSwitch);
|
|
10848
|
+
return () => {
|
|
10849
|
+
window.removeEventListener("switchTab", handleTabSwitch);
|
|
10850
|
+
};
|
|
10851
|
+
}, []);
|
|
10852
|
+
if (!user) {
|
|
10853
|
+
if (isLoading) return null;
|
|
10854
|
+
router.push(buildPath("/login"));
|
|
10855
|
+
return null;
|
|
10856
|
+
}
|
|
10857
|
+
const renderTabContent = () => {
|
|
10858
|
+
switch (activeTab) {
|
|
10859
|
+
case "overview":
|
|
10860
|
+
return /* @__PURE__ */ React21__default.default.createElement(AccountOverviewTab, null);
|
|
10861
|
+
case "orders":
|
|
10862
|
+
return /* @__PURE__ */ React21__default.default.createElement(AccountOrdersTab, null);
|
|
10863
|
+
case "saved-items":
|
|
10864
|
+
return /* @__PURE__ */ React21__default.default.createElement(AccountSavedItemsTab, null);
|
|
10865
|
+
// case 'payment':
|
|
10866
|
+
// return <AccountPaymentTab />;
|
|
10867
|
+
case "addresses":
|
|
10868
|
+
return /* @__PURE__ */ React21__default.default.createElement(AccountAddressesTab, null);
|
|
10869
|
+
case "settings":
|
|
10870
|
+
return /* @__PURE__ */ React21__default.default.createElement(AccountSettingsTab, null);
|
|
10871
|
+
default:
|
|
10872
|
+
return /* @__PURE__ */ React21__default.default.createElement(AccountOverviewTab, null);
|
|
10873
|
+
}
|
|
10874
|
+
};
|
|
10875
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { className: "min-h-screen bg-gradient-to-b from-[#F8FAFC] to-[#EBF4FB]" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h1", { className: "text-2xl font-semibold text-secondary" }, "My Account"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-muted" }, "Manage your profile, orders, and preferences"))))), /* @__PURE__ */ React21__default.default.createElement(TabNavigation, { tabs, activeTab, onTabChange: setActiveTab }), /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto max-w-7xl" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "rounded-2xl shadow-sm" }, renderTabContent())));
|
|
10876
|
+
}
|
|
10877
|
+
function OrderCard({ order }) {
|
|
10878
|
+
const config = order.orderStatus;
|
|
10879
|
+
const itemCount = order.items?.length || 0;
|
|
10880
|
+
const showPriceBreakdown = order.shippingCost && order.shippingCost > 0 || order.tax && order.tax > 0 || order.discountedAmount && order.discountedAmount > 0;
|
|
10881
|
+
return /* @__PURE__ */ React21__default.default.createElement(
|
|
10882
|
+
framerMotion.motion.div,
|
|
10883
|
+
{
|
|
10884
|
+
initial: { opacity: 0, y: 20 },
|
|
10885
|
+
animate: { opacity: 1, y: 0 },
|
|
10886
|
+
className: "rounded-lg border border-slate-200 bg-white p-4 shadow-sm hover:shadow-md transition-shadow"
|
|
10887
|
+
},
|
|
10888
|
+
/* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between mb-4 pb-4 border-b border-gray-200" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-base font-bold text-slate-900" }, "Order #", order?._id?.slice(0, 8) || ""), /* @__PURE__ */ React21__default.default.createElement(Badge, { variant: config }, config), /* @__PURE__ */ React21__default.default.createElement("span", { className: "text-xs text-gray-500" }, formatDate(order.createdAt || /* @__PURE__ */ new Date(), "short"))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "text-right" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-lg font-bold text-slate-900" }, formatPrice(order.grandTotal || 0)), itemCount > 0 && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-gray-500" }, itemCount, " ", itemCount === 1 ? "item" : "items"))),
|
|
10889
|
+
/* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-2 mb-4" }, order.items && order.items.length > 0 ? order.items.slice(0, 3).map((item) => {
|
|
10890
|
+
const itemPrice = item.productVariantData?.finalPrice || 0;
|
|
10891
|
+
const itemTotal = itemPrice * item.quantity;
|
|
10892
|
+
return /* @__PURE__ */ React21__default.default.createElement("div", { key: item.productVariantId || item._id, className: "flex items-center gap-2 text-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-12 h-12 rounded bg-gray-100 flex-shrink-0 overflow-hidden" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10893
|
+
Image4__default.default,
|
|
10894
|
+
{
|
|
10895
|
+
src: item?.productVariantData?.productMedia?.[0]?.file || "/placeholder-product.jpg",
|
|
10896
|
+
alt: item?.productVariantData?.name || "Product image",
|
|
10897
|
+
fill: true,
|
|
10898
|
+
className: "object-cover",
|
|
10899
|
+
sizes: "48px"
|
|
10900
|
+
}
|
|
10901
|
+
)), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-medium text-slate-900 truncate text-sm" }, item.productVariantData?.name || "Unknown Product"), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-gray-500" }, "Qty: ", item.quantity)), /* @__PURE__ */ React21__default.default.createElement("p", { className: "font-semibold text-slate-900 text-sm" }, formatPrice(itemTotal)));
|
|
10902
|
+
}) : /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm text-gray-500 text-center py-2" }, "No items found"), order.items && order.items.length > 3 && /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-gray-500 text-center pt-1" }, "+", order.items.length - 3, " more ", order.items.length - 3 === 1 ? "item" : "items")),
|
|
10903
|
+
showPriceBreakdown && /* @__PURE__ */ React21__default.default.createElement("div", { className: "mb-4 pb-4 border-b border-gray-200 space-y-1 text-xs" }, order.shippingCost !== void 0 && order.shippingCost > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-between text-gray-600" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Shipping"), /* @__PURE__ */ React21__default.default.createElement("span", null, formatPrice(order.shippingCost))), order.tax !== void 0 && order.tax > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-between text-gray-600" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Tax"), /* @__PURE__ */ React21__default.default.createElement("span", null, formatPrice(order.tax))), order.discountedAmount !== void 0 && order.discountedAmount > 0 && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-between text-green-600" }, /* @__PURE__ */ React21__default.default.createElement("span", null, "Discount"), /* @__PURE__ */ React21__default.default.createElement("span", null, "-", formatPrice(order.discountedAmount)))),
|
|
10904
|
+
order.payment?.paymentStatus !== "Paid" /* Paid */ && order.payment?.paymentMethod === "Card" /* Card */ && /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10905
|
+
"button",
|
|
10906
|
+
{
|
|
10907
|
+
onClick: () => {
|
|
10908
|
+
window.open(order?.payment?.hostedInvoiceUrl || "", "_blank");
|
|
10909
|
+
},
|
|
10910
|
+
className: "inline-flex items-center gap-2 rounded-full border-2 border-primary-500 bg-primary-500 hover:bg-primary-600 text-white px-4 py-2 text-sm font-medium transition-colors"
|
|
10911
|
+
},
|
|
10912
|
+
/* @__PURE__ */ React21__default.default.createElement(lucideReact.CreditCard, { className: "w-4 h-4" }),
|
|
10913
|
+
"Pay Now"
|
|
10914
|
+
))
|
|
10915
|
+
);
|
|
10916
|
+
}
|
|
10533
10917
|
function FilterChips({
|
|
10534
10918
|
label,
|
|
10535
10919
|
icon: Icon,
|
|
@@ -10751,7 +11135,7 @@ function CurrentOrdersScreen() {
|
|
|
10751
11135
|
},
|
|
10752
11136
|
/* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-semibold uppercase tracking-[0.35em] text-white/70" }, "Quick actions"),
|
|
10753
11137
|
/* @__PURE__ */ React21__default.default.createElement("div", { className: "mt-4 space-y-3 text-sm text-white/80" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
10754
|
-
|
|
11138
|
+
Link6__default.default,
|
|
10755
11139
|
{
|
|
10756
11140
|
href: buildPath("/orders"),
|
|
10757
11141
|
className: "flex items-center justify-between rounded-2xl bg-white/10 px-4 py-3 transition hover:bg-white/20"
|
|
@@ -11136,53 +11520,6 @@ You can add it back at any time.`
|
|
|
11136
11520
|
))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-end gap-3" }, /* @__PURE__ */ React21__default.default.createElement(Button, { type: "button", variant: "outline", onClick: closeModal }, "Cancel"), /* @__PURE__ */ React21__default.default.createElement(Button, { type: "submit", isLoading: isSubmitting }, editingAddress ? "Save changes" : "Save address")))
|
|
11137
11521
|
));
|
|
11138
11522
|
}
|
|
11139
|
-
function useWishlistProducts(productIds = []) {
|
|
11140
|
-
const [products, setProducts] = React21.useState([]);
|
|
11141
|
-
const [isLoading, setIsLoading] = React21.useState(false);
|
|
11142
|
-
const [error, setError] = React21.useState(null);
|
|
11143
|
-
const [cache] = React21.useState(() => /* @__PURE__ */ new Map());
|
|
11144
|
-
const uniqueIds = React21.useMemo(
|
|
11145
|
-
() => Array.from(new Set((productIds || []).filter(Boolean))),
|
|
11146
|
-
[productIds]
|
|
11147
|
-
);
|
|
11148
|
-
const fetchProducts = React21.useCallback(async () => {
|
|
11149
|
-
if (uniqueIds.length === 0) {
|
|
11150
|
-
setProducts([]);
|
|
11151
|
-
setIsLoading(false);
|
|
11152
|
-
setError(null);
|
|
11153
|
-
return;
|
|
11154
|
-
}
|
|
11155
|
-
setIsLoading(true);
|
|
11156
|
-
setError(null);
|
|
11157
|
-
try {
|
|
11158
|
-
const api = new ProductsApi(AXIOS_CONFIG);
|
|
11159
|
-
const results = await Promise.all(
|
|
11160
|
-
uniqueIds.map(async (id) => {
|
|
11161
|
-
if (cache.has(id)) return cache.get(id);
|
|
11162
|
-
const response = await api.getSingleProduct(id?._id || id || "");
|
|
11163
|
-
const product = response.data;
|
|
11164
|
-
cache.set(id, product);
|
|
11165
|
-
return product;
|
|
11166
|
-
})
|
|
11167
|
-
);
|
|
11168
|
-
setProducts(results);
|
|
11169
|
-
} catch (err) {
|
|
11170
|
-
setError(err);
|
|
11171
|
-
console.error("Failed to load wishlist products", err);
|
|
11172
|
-
} finally {
|
|
11173
|
-
setIsLoading(false);
|
|
11174
|
-
}
|
|
11175
|
-
}, [cache, uniqueIds]);
|
|
11176
|
-
React21.useEffect(() => {
|
|
11177
|
-
fetchProducts();
|
|
11178
|
-
}, [fetchProducts]);
|
|
11179
|
-
return {
|
|
11180
|
-
products,
|
|
11181
|
-
isLoading,
|
|
11182
|
-
error,
|
|
11183
|
-
refetch: fetchProducts
|
|
11184
|
-
};
|
|
11185
|
-
}
|
|
11186
11523
|
var SORT_OPTIONS = [
|
|
11187
11524
|
{ value: "featured", label: "Most loved" },
|
|
11188
11525
|
{ value: "price-low", label: "Price: Low to High" },
|
|
@@ -11528,7 +11865,7 @@ function SearchPage() {
|
|
|
11528
11865
|
isFavorited: isInWishlist(product.id),
|
|
11529
11866
|
onClickProduct: (p) => router.push(buildPath(`/products/${p.id}`))
|
|
11530
11867
|
}
|
|
11531
|
-
))) : hasSearched ? /* @__PURE__ */ React.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React.createElement("div", { className: "text-gray-500 text-lg mb-4" }, 'No products found for "', searchQuery, '"'), /* @__PURE__ */ React.createElement("p", { className: "text-gray-500 mb-6" }, "Try different keywords or check out our", " ", /* @__PURE__ */ React.createElement(
|
|
11868
|
+
))) : hasSearched ? /* @__PURE__ */ React.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React.createElement("div", { className: "text-gray-500 text-lg mb-4" }, 'No products found for "', searchQuery, '"'), /* @__PURE__ */ React.createElement("p", { className: "text-gray-500 mb-6" }, "Try different keywords or check out our", " ", /* @__PURE__ */ React.createElement(Link6__default.default, { href: "/shop", className: "text-primary-600 hover:underline ml-1 font-medium" }, "featured products"))) : /* @__PURE__ */ React.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React.createElement("p", { className: "text-gray-500" }, "Enter a search term to find products"))));
|
|
11532
11869
|
}
|
|
11533
11870
|
function NewAddressPage() {
|
|
11534
11871
|
const router = navigation.useRouter();
|
|
@@ -11702,7 +12039,7 @@ function Header() {
|
|
|
11702
12039
|
const navLinks = [
|
|
11703
12040
|
{ href: buildPath("/shop"), label: "Shop" }
|
|
11704
12041
|
];
|
|
11705
|
-
return /* @__PURE__ */ React21__default.default.createElement("header", { className: "sticky top-0 z-10 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between h-20" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
12042
|
+
return /* @__PURE__ */ React21__default.default.createElement("header", { className: "sticky top-0 z-10 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-sm" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center justify-between h-20" }, /* @__PURE__ */ React21__default.default.createElement(Link6__default.default, { href: buildPath("/"), className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative w-12 h-12" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
11706
12043
|
Image4__default.default,
|
|
11707
12044
|
{
|
|
11708
12045
|
src: config.logo,
|
|
@@ -11711,7 +12048,7 @@ function Header() {
|
|
|
11711
12048
|
className: "object-contain"
|
|
11712
12049
|
}
|
|
11713
12050
|
))), /* @__PURE__ */ React21__default.default.createElement("nav", { className: "hidden lg:flex items-center gap-8" }, navLinks.map((link) => /* @__PURE__ */ React21__default.default.createElement(
|
|
11714
|
-
|
|
12051
|
+
Link6__default.default,
|
|
11715
12052
|
{
|
|
11716
12053
|
key: link.href,
|
|
11717
12054
|
href: link.href,
|
|
@@ -11758,7 +12095,7 @@ function Header() {
|
|
|
11758
12095
|
},
|
|
11759
12096
|
/* @__PURE__ */ React21__default.default.createElement(lucideReact.X, { className: "w-4 h-4" })
|
|
11760
12097
|
))
|
|
11761
|
-
))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
12098
|
+
))), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React21__default.default.createElement(Link6__default.default, { href: buildPath("/wishlist"), className: "relative p-2 text-gray-700 hover:text-red-500 transition-colors" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Heart, { className: "w-6 h-6" }), wishlistCount > 0 && /* @__PURE__ */ React21__default.default.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, wishlistCount)), /* @__PURE__ */ React21__default.default.createElement(Link6__default.default, { href: buildPath("/cart"), className: "relative p-2 text-gray-700 hover:text-primary-600 transition-colors" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.ShoppingCart, { className: "w-6 h-6" }), cart?.cartBody?.items?.length && cart.cartBody?.items?.length > 0 ? /* @__PURE__ */ React21__default.default.createElement("span", { className: "absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center" }, cart.cartBody?.items?.length) : null), isAuthenticated ? /* @__PURE__ */ React21__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React21__default.default.createElement(
|
|
11762
12099
|
"button",
|
|
11763
12100
|
{
|
|
11764
12101
|
onClick: () => setIsDropdownOpen(!isDropdownOpen),
|
|
@@ -11773,7 +12110,7 @@ function Header() {
|
|
|
11773
12110
|
onClick: () => setIsDropdownOpen(false)
|
|
11774
12111
|
}
|
|
11775
12112
|
), /* @__PURE__ */ React21__default.default.createElement("div", { className: "absolute right-0 top-full mt-2 w-56 rounded-lg border border-slate-200 bg-white shadow-lg z-20" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "p-2" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "px-3 py-2 border-b border-slate-200 mb-1" }, /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-sm font-medium text-secondary truncate" }, user?.firstname, " ", user?.lastname), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-xs text-slate-500 truncate" }, user?.email)), /* @__PURE__ */ React21__default.default.createElement(
|
|
11776
|
-
|
|
12113
|
+
Link6__default.default,
|
|
11777
12114
|
{
|
|
11778
12115
|
href: buildPath("/account"),
|
|
11779
12116
|
onClick: () => setIsDropdownOpen(false),
|
|
@@ -11791,7 +12128,7 @@ function Header() {
|
|
|
11791
12128
|
/* @__PURE__ */ React21__default.default.createElement(lucideReact.LogOut, { className: "h-4 w-4" }),
|
|
11792
12129
|
isLoggingOut ? "Signing out..." : "Sign Out"
|
|
11793
12130
|
))))) : /* @__PURE__ */ React21__default.default.createElement(
|
|
11794
|
-
|
|
12131
|
+
Link6__default.default,
|
|
11795
12132
|
{
|
|
11796
12133
|
href: buildPath("/login"),
|
|
11797
12134
|
className: "hidden sm:block px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors font-medium"
|
|
@@ -11813,7 +12150,7 @@ function Header() {
|
|
|
11813
12150
|
className: "lg:hidden overflow-hidden border-t border-gray-200"
|
|
11814
12151
|
},
|
|
11815
12152
|
/* @__PURE__ */ React21__default.default.createElement("nav", { className: "flex flex-col gap-1 py-2" }, navLinks.map((link) => /* @__PURE__ */ React21__default.default.createElement(
|
|
11816
|
-
|
|
12153
|
+
Link6__default.default,
|
|
11817
12154
|
{
|
|
11818
12155
|
key: link.href,
|
|
11819
12156
|
href: link.href,
|
|
@@ -11822,7 +12159,7 @@ function Header() {
|
|
|
11822
12159
|
},
|
|
11823
12160
|
link.label
|
|
11824
12161
|
)), !isAuthenticated && /* @__PURE__ */ React21__default.default.createElement(
|
|
11825
|
-
|
|
12162
|
+
Link6__default.default,
|
|
11826
12163
|
{
|
|
11827
12164
|
href: buildPath("/login"),
|
|
11828
12165
|
onClick: () => setIsMobileMenuOpen(false),
|
|
@@ -11861,21 +12198,21 @@ function Footer() {
|
|
|
11861
12198
|
]
|
|
11862
12199
|
};
|
|
11863
12200
|
return /* @__PURE__ */ React21__default.default.createElement("footer", { className: "bg-gray-900 text-gray-300" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "container mx-auto px-4 py-16" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-12" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "lg:col-span-2" }, /* @__PURE__ */ React21__default.default.createElement("h3", { className: "text-2xl font-bold text-white mb-4" }, config.storeName), /* @__PURE__ */ React21__default.default.createElement("p", { className: "text-gray-400 mb-6 max-w-md" }, "Your trusted online store for quality products. We deliver excellence with every order."), /* @__PURE__ */ React21__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Mail, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "support@", config.storeName.toLowerCase().replace(/\s+/g, ""), ".com")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.Phone, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "+1 (555) 123-4567")), /* @__PURE__ */ React21__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21__default.default.createElement(lucideReact.MapPin, { className: "w-5 h-5 text-primary-500" }), /* @__PURE__ */ React21__default.default.createElement("span", null, "123 Store Street, City, Country")))), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Shop"), /* @__PURE__ */ React21__default.default.createElement("ul", { className: "space-y-2" }, footerLinks.shop.map((link) => /* @__PURE__ */ React21__default.default.createElement("li", { key: link.href }, /* @__PURE__ */ React21__default.default.createElement(
|
|
11864
|
-
|
|
12201
|
+
Link6__default.default,
|
|
11865
12202
|
{
|
|
11866
12203
|
href: link.href,
|
|
11867
12204
|
className: "hover:text-primary-500 transition-colors"
|
|
11868
12205
|
},
|
|
11869
12206
|
link.label
|
|
11870
12207
|
))))), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Account"), /* @__PURE__ */ React21__default.default.createElement("ul", { className: "space-y-2" }, footerLinks.account.map((link) => /* @__PURE__ */ React21__default.default.createElement("li", { key: link.href }, /* @__PURE__ */ React21__default.default.createElement(
|
|
11871
|
-
|
|
12208
|
+
Link6__default.default,
|
|
11872
12209
|
{
|
|
11873
12210
|
href: link.href,
|
|
11874
12211
|
className: "hover:text-primary-500 transition-colors"
|
|
11875
12212
|
},
|
|
11876
12213
|
link.label
|
|
11877
12214
|
))))), /* @__PURE__ */ React21__default.default.createElement("div", null, /* @__PURE__ */ React21__default.default.createElement("h4", { className: "text-lg font-semibold text-white mb-4" }, "Support"), /* @__PURE__ */ React21__default.default.createElement("ul", { className: "space-y-2" }, footerLinks.support.map((link) => /* @__PURE__ */ React21__default.default.createElement("li", { key: link.href }, /* @__PURE__ */ React21__default.default.createElement(
|
|
11878
|
-
|
|
12215
|
+
Link6__default.default,
|
|
11879
12216
|
{
|
|
11880
12217
|
href: link.href,
|
|
11881
12218
|
className: "hover:text-primary-500 transition-colors"
|
|
@@ -11928,7 +12265,7 @@ exports.OrdersScreen = OrdersScreen;
|
|
|
11928
12265
|
exports.ProductCard = ProductCard;
|
|
11929
12266
|
exports.ProductCardSkeleton = ProductCardSkeleton;
|
|
11930
12267
|
exports.ProductDetailScreen = ProductDetailScreen;
|
|
11931
|
-
exports.ProfileScreen =
|
|
12268
|
+
exports.ProfileScreen = AccountPage;
|
|
11932
12269
|
exports.RegisterScreen = RegisterScreen;
|
|
11933
12270
|
exports.SearchResultsScreen = SearchPage;
|
|
11934
12271
|
exports.ShopScreen = ShopScreen;
|