@burdenoff/microfe-adaptercloud 2026.614.1 → 2026.625.1

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.
Files changed (110) hide show
  1. package/dist/adaptercloud/components/EmptyState.js +17 -21
  2. package/dist/adaptercloud/components/EmptyState.js.map +1 -1
  3. package/dist/adaptercloud/components/InvestmentCard.js +30 -28
  4. package/dist/adaptercloud/components/InvestmentCard.js.map +1 -1
  5. package/dist/adaptercloud/components/MetricsCard.js +21 -15
  6. package/dist/adaptercloud/components/MetricsCard.js.map +1 -1
  7. package/dist/adaptercloud/components/PageLayout.js +38 -19
  8. package/dist/adaptercloud/components/PageLayout.js.map +1 -1
  9. package/dist/adaptercloud/components/RatingDisplay.js +3 -3
  10. package/dist/adaptercloud/components/RatingDisplay.js.map +1 -1
  11. package/dist/adaptercloud/components/StatusBadge.js +36 -16
  12. package/dist/adaptercloud/components/StatusBadge.js.map +1 -1
  13. package/dist/adaptercloud/pages/HomePage.js +286 -275
  14. package/dist/adaptercloud/pages/HomePage.js.map +1 -1
  15. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +87 -87
  16. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -1
  17. package/dist/adaptercloud/pages/admin/AdminDashboard.js +101 -101
  18. package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -1
  19. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +48 -48
  20. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -1
  21. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +95 -95
  22. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -1
  23. package/dist/adaptercloud/pages/admin/AdminProfilePage.js +34 -34
  24. package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -1
  25. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +40 -40
  26. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -1
  27. package/dist/adaptercloud/pages/admin/CartManagementPage.js +107 -107
  28. package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -1
  29. package/dist/adaptercloud/pages/admin/UserManagementPage.js +98 -98
  30. package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -1
  31. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +117 -117
  32. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  33. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +33 -33
  34. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  35. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +112 -109
  36. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  37. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +115 -115
  38. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  39. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +85 -85
  40. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  41. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +106 -106
  42. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  43. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +88 -88
  44. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -1
  45. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +94 -94
  46. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -1
  47. package/dist/adaptercloud/pages/common/HelpSupportPage.js +142 -142
  48. package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -1
  49. package/dist/adaptercloud/pages/common/NotificationCenterPage.js +67 -66
  50. package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -1
  51. package/dist/adaptercloud/pages/common/SettingsPage.js +115 -115
  52. package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -1
  53. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +74 -73
  54. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -1
  55. package/dist/adaptercloud/pages/customer/CartDetailPage.js +87 -86
  56. package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -1
  57. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +66 -65
  58. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -1
  59. package/dist/adaptercloud/pages/customer/CheckoutPage.js +80 -80
  60. package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -1
  61. package/dist/adaptercloud/pages/customer/CustomerDashboard.js +88 -88
  62. package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -1
  63. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +84 -84
  64. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -1
  65. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +92 -91
  66. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -1
  67. package/dist/adaptercloud/pages/customer/FavoritesPage.js +34 -33
  68. package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -1
  69. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +44 -43
  70. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -1
  71. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +61 -60
  72. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -1
  73. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +58 -57
  74. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -1
  75. package/dist/adaptercloud/pages/customer/ReviewsPage.js +48 -47
  76. package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -1
  77. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +46 -45
  78. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -1
  79. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +128 -128
  80. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -1
  81. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +88 -87
  82. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  83. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +88 -88
  84. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  85. package/dist/adaptercloud/pages/investor/InvestorDashboard.js +62 -62
  86. package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -1
  87. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +39 -38
  88. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  89. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +66 -66
  90. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -1
  91. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +153 -153
  92. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -1
  93. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +81 -80
  94. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -1
  95. package/dist/adaptercloud/pages/worker/WorkerDashboard.js +106 -106
  96. package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -1
  97. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +73 -72
  98. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -1
  99. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +107 -107
  100. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -1
  101. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +71 -69
  102. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -1
  103. package/dist/adaptercloud/utils/cn.js +2 -2
  104. package/dist/node_modules/{.bun/clsx@2.1.1/node_modules/clsx → clsx}/dist/clsx.js +1 -1
  105. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  106. package/dist/node_modules/{.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge → tailwind-merge}/dist/bundle-mjs.js +212 -170
  107. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  108. package/package.json +3 -3
  109. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +0 -1
  110. package/dist/node_modules/.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
@@ -192,9 +192,10 @@ function D() {
192
192
  if (!A) return /* @__PURE__ */ C(n, {
193
193
  title: "Booking Not Found",
194
194
  children: /* @__PURE__ */ C(i, {
195
+ illustration: "empty-generic",
195
196
  icon: /* @__PURE__ */ C(f, { className: "h-12 w-12" }),
196
197
  title: "Booking not found",
197
- description: `No booking found with ID "${T}".`,
198
+ description: `No booking found with ID"${T}".`,
198
199
  action: /* @__PURE__ */ C("button", {
199
200
  type: "button",
200
201
  onClick: () => D("/customer/dashboard"),
@@ -210,15 +211,15 @@ function D() {
210
211
  children: [/* @__PURE__ */ C("button", {
211
212
  type: "button",
212
213
  onClick: () => D("/customer/dashboard"),
213
- className: "rounded-md p-1 text-muted-foreground hover:bg-accent hover:text-foreground transition-colors",
214
+ className: "rounded-md p-1 text-text-secondary hover:bg-accent hover:text-text-primary transition-colors",
214
215
  children: /* @__PURE__ */ C(u, { className: "h-5 w-5" })
215
216
  }), /* @__PURE__ */ w("span", { children: ["Booking #", A.id] })]
216
217
  }),
217
218
  actions: /* @__PURE__ */ C(r, { status: A.status }),
218
219
  children: [O && /* @__PURE__ */ w("div", {
219
- className: "mb-4 rounded-lg border border-green-500/30 bg-green-500/10 p-3 flex items-center gap-2",
220
- children: [/* @__PURE__ */ C(p, { className: "h-4 w-4 text-green-600 dark:text-green-400 shrink-0" }), /* @__PURE__ */ C("p", {
221
- className: "text-sm text-green-600 dark:text-green-400",
220
+ className: "mb-4 rounded-lg border border-status-success-border/30 bg-status-success-bg-subtle/10 p-3 flex items-center gap-2",
221
+ children: [/* @__PURE__ */ C(p, { className: "h-4 w-4 text-status-success-text shrink-0" }), /* @__PURE__ */ C("p", {
222
+ className: "text-sm text-status-success-text",
222
223
  children: O
223
224
  })]
224
225
  }), /* @__PURE__ */ w("div", {
@@ -227,18 +228,18 @@ function D() {
227
228
  className: "lg:col-span-2 space-y-6",
228
229
  children: [
229
230
  /* @__PURE__ */ w("div", {
230
- className: "rounded-lg border border-border bg-card p-6",
231
+ className: "rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop",
231
232
  children: [
232
233
  /* @__PURE__ */ C("h2", {
233
- className: "text-lg font-semibold text-foreground",
234
+ className: "text-lg font-semibold text-text-primary",
234
235
  children: A.serviceName
235
236
  }),
236
237
  /* @__PURE__ */ C("p", {
237
- className: "mt-1 text-sm text-muted-foreground",
238
+ className: "mt-1 text-sm text-text-secondary",
238
239
  children: A.serviceDescription
239
240
  }),
240
241
  /* @__PURE__ */ w("div", {
241
- className: "mt-4 flex flex-wrap gap-4 text-sm text-muted-foreground",
242
+ className: "mt-4 flex flex-wrap gap-4 text-sm text-text-secondary",
242
243
  children: [
243
244
  /* @__PURE__ */ w("div", {
244
245
  className: "flex items-center gap-1.5",
@@ -255,59 +256,59 @@ function D() {
255
256
  ]
256
257
  }),
257
258
  A.notes && /* @__PURE__ */ w("div", {
258
- className: "mt-4 rounded-md bg-muted p-3",
259
+ className: "mt-4 rounded-md bg-bg-sunken p-3",
259
260
  children: [/* @__PURE__ */ C("p", {
260
- className: "text-xs text-muted-foreground mb-1",
261
+ className: "text-xs text-text-secondary mb-1",
261
262
  children: "Notes"
262
263
  }), /* @__PURE__ */ C("p", {
263
- className: "text-sm text-foreground",
264
+ className: "text-sm text-text-primary",
264
265
  children: A.notes
265
266
  })]
266
267
  }),
267
268
  A.cancellationReason && /* @__PURE__ */ w("div", {
268
- className: "mt-4 rounded-md bg-red-500/5 border border-red-500/20 p-3",
269
+ className: "mt-4 rounded-md bg-status-error-bg-subtle/5 border border-status-error-border/20 p-3",
269
270
  children: [/* @__PURE__ */ w("div", {
270
271
  className: "flex items-center gap-2 mb-1",
271
- children: [/* @__PURE__ */ C(l, { className: "h-3.5 w-3.5 text-red-600 dark:text-red-400" }), /* @__PURE__ */ C("p", {
272
- className: "text-xs font-medium text-red-600 dark:text-red-400",
272
+ children: [/* @__PURE__ */ C(l, { className: "h-3.5 w-3.5 text-status-error-text" }), /* @__PURE__ */ C("p", {
273
+ className: "text-xs font-medium text-status-error-text",
273
274
  children: "Cancellation Reason"
274
275
  })]
275
276
  }), /* @__PURE__ */ C("p", {
276
- className: "text-sm text-foreground",
277
+ className: "text-sm text-text-primary",
277
278
  children: A.cancellationReason
278
279
  })]
279
280
  })
280
281
  ]
281
282
  }),
282
283
  /* @__PURE__ */ w("div", {
283
- className: "rounded-lg border border-border bg-card p-6",
284
+ className: "rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop",
284
285
  children: [
285
286
  /* @__PURE__ */ C("h2", {
286
- className: "text-base font-semibold text-foreground mb-4",
287
+ className: "text-base font-semibold text-text-primary mb-4",
287
288
  children: "Service Provider"
288
289
  }),
289
290
  /* @__PURE__ */ w("div", {
290
291
  className: "flex items-center gap-4",
291
292
  children: [
292
293
  /* @__PURE__ */ C("div", {
293
- className: "flex h-12 w-12 items-center justify-center rounded-full bg-muted text-muted-foreground",
294
+ className: "flex h-12 w-12 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
294
295
  children: /* @__PURE__ */ C(y, { className: "h-6 w-6" })
295
296
  }),
296
297
  /* @__PURE__ */ w("div", {
297
298
  className: "flex-1 min-w-0",
298
299
  children: [
299
300
  /* @__PURE__ */ C("p", {
300
- className: "text-sm font-semibold text-foreground",
301
+ className: "text-sm font-semibold text-text-primary",
301
302
  children: A.provider.name
302
303
  }),
303
304
  /* @__PURE__ */ C("p", {
304
- className: "text-xs text-muted-foreground",
305
+ className: "text-xs text-text-secondary",
305
306
  children: A.provider.category
306
307
  }),
307
308
  /* @__PURE__ */ w("div", {
308
309
  className: "flex items-center gap-1 mt-1",
309
- children: [/* @__PURE__ */ C(b, { className: "h-3 w-3 fill-yellow-400 text-yellow-400" }), /* @__PURE__ */ C("span", {
310
- className: "text-xs font-medium text-foreground",
310
+ children: [/* @__PURE__ */ C(b, { className: "h-3 w-3 fill-status-warning-text text-status-warning-text" }), /* @__PURE__ */ C("span", {
311
+ className: "text-xs font-medium text-text-primary",
311
312
  children: A.provider.rating
312
313
  })]
313
314
  })
@@ -315,21 +316,21 @@ function D() {
315
316
  }),
316
317
  /* @__PURE__ */ C("a", {
317
318
  href: `tel:${A.provider.phone}`,
318
- className: "flex h-10 w-10 items-center justify-center rounded-full bg-muted text-muted-foreground hover:bg-accent hover:text-foreground transition-colors",
319
+ className: "flex h-10 w-10 items-center justify-center rounded-full bg-bg-sunken text-text-secondary hover:bg-accent hover:text-text-primary transition-colors",
319
320
  children: /* @__PURE__ */ C(v, { className: "h-4 w-4" })
320
321
  })
321
322
  ]
322
323
  }),
323
324
  /* @__PURE__ */ w("div", {
324
- className: "mt-3 flex items-center gap-2 text-sm text-muted-foreground",
325
+ className: "mt-3 flex items-center gap-2 text-sm text-text-secondary",
325
326
  children: [/* @__PURE__ */ C(v, { className: "h-4 w-4 shrink-0" }), /* @__PURE__ */ C("span", { children: A.provider.phone })]
326
327
  })
327
328
  ]
328
329
  }),
329
330
  /* @__PURE__ */ w("div", {
330
- className: "rounded-lg border border-border bg-card p-6",
331
+ className: "rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop",
331
332
  children: [/* @__PURE__ */ C("h2", {
332
- className: "text-base font-semibold text-foreground mb-5",
333
+ className: "text-base font-semibold text-text-primary mb-5",
333
334
  children: "Booking Timeline"
334
335
  }), /* @__PURE__ */ C("div", {
335
336
  className: "relative",
@@ -340,16 +341,16 @@ function D() {
340
341
  children: [/* @__PURE__ */ w("div", {
341
342
  className: "flex flex-col items-center",
342
343
  children: [/* @__PURE__ */ C("div", {
343
- className: t("flex h-8 w-8 shrink-0 items-center justify-center rounded-full", i ? "bg-red-500/10 text-red-600 dark:text-red-400" : e.completed ? "bg-green-500/10 text-green-600 dark:text-green-400" : "bg-muted text-muted-foreground"),
344
+ className: t("flex h-8 w-8 shrink-0 items-center justify-center rounded-full", i ? "bg-status-error-bg-subtle/10 text-status-error-text" : e.completed ? "bg-status-success-bg-subtle/10 text-status-success-text" : "bg-bg-sunken text-text-secondary"),
344
345
  children: /* @__PURE__ */ C(a, { className: "h-4 w-4" })
345
- }), !r && /* @__PURE__ */ C("div", { className: t("w-0.5 flex-1 my-1", e.completed ? "bg-green-500/30" : "bg-border") })]
346
+ }), !r && /* @__PURE__ */ C("div", { className: t("w-0.5 flex-1 my-1", e.completed ? "bg-status-success-bg-subtle/30" : "bg-border") })]
346
347
  }), /* @__PURE__ */ w("div", {
347
348
  className: t("pb-6", r && "pb-0"),
348
349
  children: [/* @__PURE__ */ C("p", {
349
- className: "text-sm font-medium text-foreground",
350
+ className: "text-sm font-medium text-text-primary",
350
351
  children: e.label
351
352
  }), /* @__PURE__ */ C("p", {
352
- className: "mt-0.5 text-xs text-muted-foreground",
353
+ className: "mt-0.5 text-xs text-text-secondary",
353
354
  children: e.timestamp ? o(e.timestamp) : "Pending"
354
355
  })]
355
356
  })]
@@ -364,7 +365,7 @@ function D() {
364
365
  onClick: () => {
365
366
  j("Support team will contact you shortly.");
366
367
  },
367
- className: "flex-1 flex items-center justify-center gap-2 rounded-lg border border-border px-4 py-3 text-sm font-medium text-foreground hover:bg-accent transition-colors",
368
+ className: "flex-1 flex items-center justify-center gap-2 rounded-lg border border-border-subtle px-4 py-3 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
368
369
  children: [/* @__PURE__ */ C(g, { className: "h-4 w-4" }), "Contact Support"]
369
370
  }), N && /* @__PURE__ */ w("button", {
370
371
  type: "button",
@@ -380,10 +381,10 @@ function D() {
380
381
  className: "space-y-6",
381
382
  children: [
382
383
  /* @__PURE__ */ w("div", {
383
- className: "rounded-lg border border-border bg-card p-5",
384
+ className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
384
385
  children: [
385
386
  /* @__PURE__ */ C("h3", {
386
- className: "text-base font-semibold text-foreground mb-3",
387
+ className: "text-base font-semibold text-text-primary mb-3",
387
388
  children: "Cart Information"
388
389
  }),
389
390
  /* @__PURE__ */ w("div", {
@@ -396,23 +397,23 @@ function D() {
396
397
  className: "min-w-0",
397
398
  children: [
398
399
  /* @__PURE__ */ C("p", {
399
- className: "text-sm font-semibold text-foreground",
400
+ className: "text-sm font-semibold text-text-primary",
400
401
  children: A.provider.name
401
402
  }),
402
403
  /* @__PURE__ */ C("p", {
403
- className: "text-xs text-muted-foreground",
404
+ className: "text-xs text-text-secondary",
404
405
  children: A.provider.category
405
406
  }),
406
407
  /* @__PURE__ */ w("div", {
407
408
  className: "flex items-center gap-1 mt-0.5",
408
409
  children: [
409
- /* @__PURE__ */ C(b, { className: "h-3 w-3 fill-yellow-400 text-yellow-400" }),
410
+ /* @__PURE__ */ C(b, { className: "h-3 w-3 fill-status-warning-text text-status-warning-text" }),
410
411
  /* @__PURE__ */ C("span", {
411
- className: "text-xs font-medium text-foreground",
412
+ className: "text-xs font-medium text-text-primary",
412
413
  children: A.provider.rating
413
414
  }),
414
415
  /* @__PURE__ */ w("span", {
415
- className: "text-xs text-muted-foreground",
416
+ className: "text-xs text-text-secondary",
416
417
  children: [
417
418
  "(",
418
419
  A.provider.reviewCount,
@@ -428,8 +429,8 @@ function D() {
428
429
  className: "space-y-2 text-sm mb-4",
429
430
  children: /* @__PURE__ */ w("div", {
430
431
  className: "flex items-start gap-2",
431
- children: [/* @__PURE__ */ C(_, { className: "h-4 w-4 text-muted-foreground shrink-0 mt-0.5" }), /* @__PURE__ */ C("span", {
432
- className: "text-muted-foreground",
432
+ children: [/* @__PURE__ */ C(_, { className: "h-4 w-4 text-text-secondary shrink-0 mt-0.5" }), /* @__PURE__ */ C("span", {
433
+ className: "text-text-secondary",
433
434
  children: A.provider.location
434
435
  })]
435
436
  })
@@ -437,25 +438,25 @@ function D() {
437
438
  /* @__PURE__ */ C("button", {
438
439
  type: "button",
439
440
  onClick: () => D(`/customer/carts/${A.provider.id}`),
440
- className: "w-full rounded-lg border border-border px-4 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors",
441
+ className: "w-full rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
441
442
  children: "View Cart Menu"
442
443
  })
443
444
  ]
444
445
  }),
445
446
  /* @__PURE__ */ w("div", {
446
- className: "rounded-lg border border-border bg-card p-5",
447
+ className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
447
448
  children: [/* @__PURE__ */ C("h3", {
448
- className: "text-base font-semibold text-foreground mb-3",
449
+ className: "text-base font-semibold text-text-primary mb-3",
449
450
  children: "Service Location"
450
451
  }), /* @__PURE__ */ w("div", {
451
452
  className: "flex items-start gap-3",
452
- children: [/* @__PURE__ */ C(_, { className: "mt-0.5 h-5 w-5 shrink-0 text-muted-foreground" }), /* @__PURE__ */ w("div", { children: [
453
+ children: [/* @__PURE__ */ C(_, { className: "mt-0.5 h-5 w-5 shrink-0 text-text-secondary" }), /* @__PURE__ */ w("div", { children: [
453
454
  /* @__PURE__ */ C("p", {
454
- className: "text-sm text-foreground",
455
+ className: "text-sm text-text-primary",
455
456
  children: A.location.street
456
457
  }),
457
458
  /* @__PURE__ */ w("p", {
458
- className: "text-sm text-muted-foreground",
459
+ className: "text-sm text-text-secondary",
459
460
  children: [
460
461
  A.location.area,
461
462
  ", ",
@@ -465,16 +466,16 @@ function D() {
465
466
  ]
466
467
  }),
467
468
  A.location.landmark && /* @__PURE__ */ w("p", {
468
- className: "text-xs text-muted-foreground mt-1",
469
+ className: "text-xs text-text-secondary mt-1",
469
470
  children: ["Landmark: ", A.location.landmark]
470
471
  })
471
472
  ] })]
472
473
  })]
473
474
  }),
474
475
  /* @__PURE__ */ w("div", {
475
- className: "rounded-lg border border-border bg-card p-5",
476
+ className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
476
477
  children: [/* @__PURE__ */ C("h3", {
477
- className: "text-base font-semibold text-foreground mb-3",
478
+ className: "text-base font-semibold text-text-primary mb-3",
478
479
  children: "Price Breakdown"
479
480
  }), /* @__PURE__ */ w("div", {
480
481
  className: "space-y-2.5 text-sm",
@@ -482,50 +483,50 @@ function D() {
482
483
  /* @__PURE__ */ w("div", {
483
484
  className: "flex justify-between",
484
485
  children: [/* @__PURE__ */ C("span", {
485
- className: "text-muted-foreground",
486
+ className: "text-text-secondary",
486
487
  children: "Service Charge"
487
488
  }), /* @__PURE__ */ C("span", {
488
- className: "text-foreground",
489
+ className: "text-text-primary",
489
490
  children: a(A.pricing.serviceCharge, { minimumFractionDigits: 0 })
490
491
  })]
491
492
  }),
492
493
  /* @__PURE__ */ w("div", {
493
494
  className: "flex justify-between",
494
495
  children: [/* @__PURE__ */ C("span", {
495
- className: "text-muted-foreground",
496
+ className: "text-text-secondary",
496
497
  children: "Convenience Fee"
497
498
  }), /* @__PURE__ */ C("span", {
498
- className: "text-foreground",
499
+ className: "text-text-primary",
499
500
  children: a(A.pricing.convenienceFee, { minimumFractionDigits: 0 })
500
501
  })]
501
502
  }),
502
503
  /* @__PURE__ */ w("div", {
503
504
  className: "flex justify-between",
504
505
  children: [/* @__PURE__ */ C("span", {
505
- className: "text-muted-foreground",
506
+ className: "text-text-secondary",
506
507
  children: "Tax"
507
508
  }), /* @__PURE__ */ C("span", {
508
- className: "text-foreground",
509
+ className: "text-text-primary",
509
510
  children: a(A.pricing.tax, { minimumFractionDigits: 0 })
510
511
  })]
511
512
  }),
512
513
  A.pricing.discount > 0 && /* @__PURE__ */ w("div", {
513
514
  className: "flex justify-between",
514
515
  children: [/* @__PURE__ */ C("span", {
515
- className: "text-green-600 dark:text-green-400",
516
+ className: "text-status-success-text",
516
517
  children: "Discount"
517
518
  }), /* @__PURE__ */ w("span", {
518
- className: "text-green-600 dark:text-green-400",
519
+ className: "text-status-success-text",
519
520
  children: ["-", a(A.pricing.discount, { minimumFractionDigits: 0 })]
520
521
  })]
521
522
  }),
522
523
  /* @__PURE__ */ w("div", {
523
- className: "flex justify-between border-t border-border pt-2.5",
524
+ className: "flex justify-between border-t border-border-subtle pt-2.5",
524
525
  children: [/* @__PURE__ */ C("span", {
525
- className: "font-semibold text-foreground",
526
+ className: "font-semibold text-text-primary",
526
527
  children: "Total"
527
528
  }), /* @__PURE__ */ C("span", {
528
- className: "font-bold text-foreground",
529
+ className: "font-bold text-text-primary",
529
530
  children: a(A.pricing.total, { minimumFractionDigits: 0 })
530
531
  })]
531
532
  })
@@ -533,30 +534,30 @@ function D() {
533
534
  })]
534
535
  }),
535
536
  /* @__PURE__ */ w("div", {
536
- className: "rounded-lg border border-border bg-card p-5",
537
+ className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
537
538
  children: [/* @__PURE__ */ C("h3", {
538
- className: "text-base font-semibold text-foreground mb-3",
539
+ className: "text-base font-semibold text-text-primary mb-3",
539
540
  children: "Booking Info"
540
541
  }), /* @__PURE__ */ w("div", {
541
542
  className: "space-y-3",
542
543
  children: [
543
544
  /* @__PURE__ */ w("div", {
544
545
  className: "flex items-center gap-2",
545
- children: [/* @__PURE__ */ C(f, { className: "h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
546
- className: "text-xs text-muted-foreground",
546
+ children: [/* @__PURE__ */ C(f, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
547
+ className: "text-xs text-text-secondary",
547
548
  children: "Booked On"
548
549
  }), /* @__PURE__ */ C("p", {
549
- className: "text-sm text-foreground",
550
+ className: "text-sm text-text-primary",
550
551
  children: o(A.createdAt)
551
552
  })] })]
552
553
  }),
553
554
  /* @__PURE__ */ w("div", {
554
555
  className: "flex items-center gap-2",
555
- children: [/* @__PURE__ */ C(d, { className: "h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
556
- className: "text-xs text-muted-foreground",
556
+ children: [/* @__PURE__ */ C(d, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
557
+ className: "text-xs text-text-secondary",
557
558
  children: "Scheduled"
558
559
  }), /* @__PURE__ */ w("p", {
559
- className: "text-sm text-foreground",
560
+ className: "text-sm text-text-primary",
560
561
  children: [
561
562
  A.scheduledDate,
562
563
  " at ",
@@ -566,11 +567,11 @@ function D() {
566
567
  }),
567
568
  /* @__PURE__ */ w("div", {
568
569
  className: "flex items-center gap-2",
569
- children: [/* @__PURE__ */ C(h, { className: "h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
570
- className: "text-xs text-muted-foreground",
570
+ children: [/* @__PURE__ */ C(h, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
571
+ className: "text-xs text-text-secondary",
571
572
  children: "Duration"
572
573
  }), /* @__PURE__ */ w("p", {
573
- className: "text-sm text-foreground",
574
+ className: "text-sm text-text-primary",
574
575
  children: [A.duration, " minutes"]
575
576
  })] })]
576
577
  })
@@ -579,7 +580,7 @@ function D() {
579
580
  }),
580
581
  P && /* @__PURE__ */ w("button", {
581
582
  type: "button",
582
- className: "w-full inline-flex items-center justify-center gap-2 rounded-lg border border-red-500/30 bg-red-500/5 px-4 py-3 text-sm font-medium text-red-600 dark:text-red-400 hover:bg-red-500/10 transition-colors",
583
+ className: "w-full inline-flex items-center justify-center gap-2 rounded-lg border border-status-error-border/30 bg-status-error-bg-subtle/5 px-4 py-3 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle/10 transition-colors",
583
584
  children: [/* @__PURE__ */ C(x, { className: "h-4 w-4" }), "Cancel Booking"]
584
585
  })
585
586
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"BookingDetailsPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/customer/BookingDetailsPage.tsx"],"sourcesContent":["/**\n * Booking Details Page\n * @module adaptercloud/pages/customer\n *\n * Detailed view of a service booking with service name, provider info,\n * scheduled date/time, booking status timeline, location info,\n * price breakdown, Contact Support button, Rate Service button (when completed),\n * Cart Information sidebar, cancel button.\n * Uses route param :bookingId from useParams().\n */\n\nimport { useMemo, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n Calendar,\n Clock,\n MapPin,\n Phone,\n Star,\n CheckCircle2,\n Circle,\n XCircle,\n ShoppingBag,\n CalendarCheck,\n AlertTriangle,\n Headphones,\n MessageSquare,\n IndianRupee,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useAdapterCloud } from '../../context/AdapterCloudContext';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype BookingStatus = 'confirmed' | 'in_progress' | 'completed' | 'cancelled';\n\ninterface BookingTimelineEvent {\n status: string;\n label: string;\n timestamp: string | null;\n completed: boolean;\n}\n\ninterface MockBooking {\n id: string;\n serviceName: string;\n serviceDescription: string;\n provider: {\n id: string;\n name: string;\n phone: string;\n rating: number;\n reviewCount: number;\n category: string;\n image: string;\n location: string;\n };\n scheduledDate: string;\n scheduledTime: string;\n duration: number;\n status: BookingStatus;\n location: {\n street: string;\n area: string;\n city: string;\n pincode: string;\n landmark?: string;\n };\n pricing: {\n serviceCharge: number;\n convenienceFee: number;\n tax: number;\n discount: number;\n total: number;\n };\n createdAt: string;\n notes?: string;\n cancellationReason?: string;\n timeline: BookingTimelineEvent[];\n}\n\n// ============================================================================\n// Mock Data\n// ============================================================================\n\nconst mockBookings: MockBooking[] = [\n {\n id: 'BK-001',\n serviceName: \"Men's Haircut + Beard Trim\",\n serviceDescription: 'Professional haircut and beard grooming service at your doorstep',\n provider: {\n id: 'SERV-001',\n name: 'Quick Cuts Salon',\n phone: '+91-9876543210',\n rating: 4.6,\n reviewCount: 248,\n category: 'Personal Care & Beauty',\n image: 'https://images.unsplash.com/photo-1562322140-8baeececf3df?w=400',\n location: 'Indiranagar, Bangalore',\n },\n scheduledDate: '2024-01-20',\n scheduledTime: '10:00 AM',\n duration: 50,\n status: 'confirmed',\n location: {\n street: '123 Main Street',\n area: 'Koramangala',\n city: 'Bangalore',\n pincode: '560034',\n landmark: 'Near Metro Station',\n },\n pricing: {\n serviceCharge: 450,\n convenienceFee: 30,\n tax: 48,\n discount: 50,\n total: 478,\n },\n createdAt: '2024-01-16T14:30:00Z',\n notes: 'Please bring your own equipment',\n timeline: [\n {\n status: 'booked',\n label: 'Booking Placed',\n timestamp: '2024-01-16T14:30:00Z',\n completed: true,\n },\n {\n status: 'confirmed',\n label: 'Booking Confirmed',\n timestamp: '2024-01-16T14:35:00Z',\n completed: true,\n },\n { status: 'in_progress', label: 'Service Started', timestamp: null, completed: false },\n { status: 'completed', label: 'Service Completed', timestamp: null, completed: false },\n ],\n },\n {\n id: 'BK-002',\n serviceName: 'Deep House Cleaning',\n serviceDescription:\n 'Complete house cleaning service including kitchen, bathrooms, and living areas',\n provider: {\n id: 'SERV-005',\n name: 'Spotless Cleaning Services',\n phone: '+91-9876543215',\n rating: 4.8,\n reviewCount: 312,\n category: 'Home Services',\n image: 'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=400',\n location: 'Whitefield, Bangalore',\n },\n scheduledDate: '2024-01-18',\n scheduledTime: '09:00 AM',\n duration: 180,\n status: 'completed',\n location: {\n street: '456 Park Avenue',\n area: 'Indiranagar',\n city: 'Bangalore',\n pincode: '560038',\n },\n pricing: {\n serviceCharge: 1500,\n convenienceFee: 50,\n tax: 155,\n discount: 0,\n total: 1705,\n },\n createdAt: '2024-01-15T10:00:00Z',\n timeline: [\n {\n status: 'booked',\n label: 'Booking Placed',\n timestamp: '2024-01-15T10:00:00Z',\n completed: true,\n },\n {\n status: 'confirmed',\n label: 'Booking Confirmed',\n timestamp: '2024-01-15T10:05:00Z',\n completed: true,\n },\n {\n status: 'in_progress',\n label: 'Service Started',\n timestamp: '2024-01-18T09:10:00Z',\n completed: true,\n },\n {\n status: 'completed',\n label: 'Service Completed',\n timestamp: '2024-01-18T12:15:00Z',\n completed: true,\n },\n ],\n },\n {\n id: 'BK-003',\n serviceName: 'Facial Treatment',\n serviceDescription: 'Deep cleansing facial with natural ingredients for glowing skin',\n provider: {\n id: 'SERV-002',\n name: 'Glow Beauty Services',\n phone: '+91-9876543212',\n rating: 4.7,\n reviewCount: 180,\n category: 'Personal Care & Beauty',\n image: 'https://images.unsplash.com/photo-1560066984-138dadb4c035?w=400',\n location: 'HSR Layout, Bangalore',\n },\n scheduledDate: '2024-01-22',\n scheduledTime: '02:00 PM',\n duration: 60,\n status: 'cancelled',\n location: {\n street: '789 Lake View',\n area: 'HSR Layout',\n city: 'Bangalore',\n pincode: '560102',\n },\n pricing: {\n serviceCharge: 800,\n convenienceFee: 30,\n tax: 83,\n discount: 0,\n total: 913,\n },\n createdAt: '2024-01-17T16:00:00Z',\n cancellationReason: 'Schedule conflict - need to reschedule',\n timeline: [\n {\n status: 'booked',\n label: 'Booking Placed',\n timestamp: '2024-01-17T16:00:00Z',\n completed: true,\n },\n {\n status: 'confirmed',\n label: 'Booking Confirmed',\n timestamp: '2024-01-17T16:10:00Z',\n completed: true,\n },\n {\n status: 'cancelled',\n label: 'Booking Cancelled',\n timestamp: '2024-01-18T09:00:00Z',\n completed: true,\n },\n ],\n },\n];\n\nconst getBookingById = (bookingId: string): MockBooking | undefined =>\n mockBookings.find((b) => b.id === bookingId);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function BookingDetailsPage() {\n const { bookingId } = useParams<{ bookingId: string }>();\n const { navigateTo } = useAdapterCloud();\n const [statusMessage, setStatusMessage] = useState<string | null>(null);\n\n const booking = useMemo(() => (bookingId ? getBookingById(bookingId) : undefined), [bookingId]);\n\n const showStatus = (msg: string) => {\n setStatusMessage(msg);\n setTimeout(() => setStatusMessage(null), 3000);\n };\n\n if (!booking) {\n return (\n <PageLayout title=\"Booking Not Found\">\n <EmptyState\n icon={<CalendarCheck className=\"h-12 w-12\" />}\n title=\"Booking not found\"\n description={`No booking found with ID \"${bookingId}\".`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/dashboard')}\n className=\"rounded-lg bg-foreground px-4 py-2 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n Go to Dashboard\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n const isCancelled = booking.status === 'cancelled';\n const isCompleted = booking.status === 'completed';\n const canCancel = !isCancelled && !isCompleted;\n\n const handleContactSupport = () => {\n showStatus('Support team will contact you shortly.');\n };\n\n const handleRateService = () => {\n showStatus('Thank you! Rating feature coming soon.');\n };\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/dashboard')}\n className=\"rounded-md p-1 text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n <span>Booking #{booking.id}</span>\n </div>\n }\n actions={<StatusBadge status={booking.status} />}\n >\n {/* Status message */}\n {statusMessage && (\n <div className=\"mb-4 rounded-lg border border-green-500/30 bg-green-500/10 p-3 flex items-center gap-2\">\n <CheckCircle2 className=\"h-4 w-4 text-green-600 dark:text-green-400 shrink-0\" />\n <p className=\"text-sm text-green-600 dark:text-green-400\">{statusMessage}</p>\n </div>\n )}\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Left: Main Content */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Service Info */}\n <div className=\"rounded-lg border border-border bg-card p-6\">\n <h2 className=\"text-lg font-semibold text-foreground\">{booking.serviceName}</h2>\n <p className=\"mt-1 text-sm text-muted-foreground\">{booking.serviceDescription}</p>\n\n <div className=\"mt-4 flex flex-wrap gap-4 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-1.5\">\n <Calendar className=\"h-4 w-4\" />\n <span>{booking.scheduledDate}</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <Clock className=\"h-4 w-4\" />\n <span>{booking.scheduledTime}</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <Clock className=\"h-4 w-4\" />\n <span>{booking.duration} min</span>\n </div>\n </div>\n\n {booking.notes && (\n <div className=\"mt-4 rounded-md bg-muted p-3\">\n <p className=\"text-xs text-muted-foreground mb-1\">Notes</p>\n <p className=\"text-sm text-foreground\">{booking.notes}</p>\n </div>\n )}\n\n {booking.cancellationReason && (\n <div className=\"mt-4 rounded-md bg-red-500/5 border border-red-500/20 p-3\">\n <div className=\"flex items-center gap-2 mb-1\">\n <AlertTriangle className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n <p className=\"text-xs font-medium text-red-600 dark:text-red-400\">\n Cancellation Reason\n </p>\n </div>\n <p className=\"text-sm text-foreground\">{booking.cancellationReason}</p>\n </div>\n )}\n </div>\n\n {/* Provider Info */}\n <div className=\"rounded-lg border border-border bg-card p-6\">\n <h2 className=\"text-base font-semibold text-foreground mb-4\">Service Provider</h2>\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted text-muted-foreground\">\n <ShoppingBag className=\"h-6 w-6\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-semibold text-foreground\">{booking.provider.name}</p>\n <p className=\"text-xs text-muted-foreground\">{booking.provider.category}</p>\n <div className=\"flex items-center gap-1 mt-1\">\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n <span className=\"text-xs font-medium text-foreground\">\n {booking.provider.rating}\n </span>\n </div>\n </div>\n <a\n href={`tel:${booking.provider.phone}`}\n className=\"flex h-10 w-10 items-center justify-center rounded-full bg-muted text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n >\n <Phone className=\"h-4 w-4\" />\n </a>\n </div>\n <div className=\"mt-3 flex items-center gap-2 text-sm text-muted-foreground\">\n <Phone className=\"h-4 w-4 shrink-0\" />\n <span>{booking.provider.phone}</span>\n </div>\n </div>\n\n {/* Booking Status Timeline */}\n <div className=\"rounded-lg border border-border bg-card p-6\">\n <h2 className=\"text-base font-semibold text-foreground mb-5\">Booking Timeline</h2>\n <div className=\"relative\">\n {booking.timeline.map((event, index) => {\n const isLast = index === booking.timeline.length - 1;\n const isCancelledEvent = event.status === 'cancelled';\n const Icon = isCancelledEvent ? XCircle : event.completed ? CheckCircle2 : Circle;\n\n return (\n <div key={`${event.status}-${index}`} className=\"flex gap-4\">\n <div className=\"flex flex-col items-center\">\n <div\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full',\n isCancelledEvent\n ? 'bg-red-500/10 text-red-600 dark:text-red-400'\n : event.completed\n ? 'bg-green-500/10 text-green-600 dark:text-green-400'\n : 'bg-muted text-muted-foreground'\n )}\n >\n <Icon className=\"h-4 w-4\" />\n </div>\n {!isLast && (\n <div\n className={cn(\n 'w-0.5 flex-1 my-1',\n event.completed ? 'bg-green-500/30' : 'bg-border'\n )}\n />\n )}\n </div>\n <div className={cn('pb-6', isLast && 'pb-0')}>\n <p className=\"text-sm font-medium text-foreground\">{event.label}</p>\n <p className=\"mt-0.5 text-xs text-muted-foreground\">\n {event.timestamp ? formatDate(event.timestamp) : 'Pending'}\n </p>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Action Buttons: Contact Support + Rate Service */}\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <button\n type=\"button\"\n onClick={handleContactSupport}\n className=\"flex-1 flex items-center justify-center gap-2 rounded-lg border border-border px-4 py-3 text-sm font-medium text-foreground hover:bg-accent transition-colors\"\n >\n <Headphones className=\"h-4 w-4\" />\n Contact Support\n </button>\n\n {isCompleted && (\n <button\n type=\"button\"\n onClick={handleRateService}\n className=\"flex-1 flex items-center justify-center gap-2 rounded-lg bg-foreground px-4 py-3 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Star className=\"h-4 w-4\" />\n Rate Service\n </button>\n )}\n </div>\n </div>\n\n {/* Right: Sidebar */}\n <div className=\"space-y-6\">\n {/* Cart Information */}\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <h3 className=\"text-base font-semibold text-foreground mb-3\">Cart Information</h3>\n <div className=\"flex items-center gap-3 mb-4\">\n <img\n src={booking.provider.image}\n alt={booking.provider.name}\n className=\"h-14 w-14 rounded-lg object-cover\"\n />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-foreground\">{booking.provider.name}</p>\n <p className=\"text-xs text-muted-foreground\">{booking.provider.category}</p>\n <div className=\"flex items-center gap-1 mt-0.5\">\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n <span className=\"text-xs font-medium text-foreground\">\n {booking.provider.rating}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n ({booking.provider.reviewCount})\n </span>\n </div>\n </div>\n </div>\n\n <div className=\"space-y-2 text-sm mb-4\">\n <div className=\"flex items-start gap-2\">\n <MapPin className=\"h-4 w-4 text-muted-foreground shrink-0 mt-0.5\" />\n <span className=\"text-muted-foreground\">{booking.provider.location}</span>\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={() => navigateTo(`/customer/carts/${booking.provider.id}`)}\n className=\"w-full rounded-lg border border-border px-4 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors\"\n >\n View Cart Menu\n </button>\n </div>\n\n {/* Location Info */}\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <h3 className=\"text-base font-semibold text-foreground mb-3\">Service Location</h3>\n <div className=\"flex items-start gap-3\">\n <MapPin className=\"mt-0.5 h-5 w-5 shrink-0 text-muted-foreground\" />\n <div>\n <p className=\"text-sm text-foreground\">{booking.location.street}</p>\n <p className=\"text-sm text-muted-foreground\">\n {booking.location.area}, {booking.location.city} - {booking.location.pincode}\n </p>\n {booking.location.landmark && (\n <p className=\"text-xs text-muted-foreground mt-1\">\n Landmark: {booking.location.landmark}\n </p>\n )}\n </div>\n </div>\n </div>\n\n {/* Price Breakdown */}\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <h3 className=\"text-base font-semibold text-foreground mb-3\">Price Breakdown</h3>\n <div className=\"space-y-2.5 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Service Charge</span>\n <span className=\"text-foreground\">\n {formatCurrency(booking.pricing.serviceCharge, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Convenience Fee</span>\n <span className=\"text-foreground\">\n {formatCurrency(booking.pricing.convenienceFee, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Tax</span>\n <span className=\"text-foreground\">\n {formatCurrency(booking.pricing.tax, { minimumFractionDigits: 0 })}\n </span>\n </div>\n {booking.pricing.discount > 0 && (\n <div className=\"flex justify-between\">\n <span className=\"text-green-600 dark:text-green-400\">Discount</span>\n <span className=\"text-green-600 dark:text-green-400\">\n -{formatCurrency(booking.pricing.discount, { minimumFractionDigits: 0 })}\n </span>\n </div>\n )}\n <div className=\"flex justify-between border-t border-border pt-2.5\">\n <span className=\"font-semibold text-foreground\">Total</span>\n <span className=\"font-bold text-foreground\">\n {formatCurrency(booking.pricing.total, { minimumFractionDigits: 0 })}\n </span>\n </div>\n </div>\n </div>\n\n {/* Booking Info */}\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <h3 className=\"text-base font-semibold text-foreground mb-3\">Booking Info</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <CalendarCheck className=\"h-4 w-4 text-muted-foreground\" />\n <div>\n <p className=\"text-xs text-muted-foreground\">Booked On</p>\n <p className=\"text-sm text-foreground\">{formatDate(booking.createdAt)}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <div>\n <p className=\"text-xs text-muted-foreground\">Scheduled</p>\n <p className=\"text-sm text-foreground\">\n {booking.scheduledDate} at {booking.scheduledTime}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n <div>\n <p className=\"text-xs text-muted-foreground\">Duration</p>\n <p className=\"text-sm text-foreground\">{booking.duration} minutes</p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Cancel Button */}\n {canCancel && (\n <button\n type=\"button\"\n className=\"w-full inline-flex items-center justify-center gap-2 rounded-lg border border-red-500/30 bg-red-500/5 px-4 py-3 text-sm font-medium text-red-600 dark:text-red-400 hover:bg-red-500/10 transition-colors\"\n >\n <XCircle className=\"h-4 w-4\" />\n Cancel Booking\n </button>\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BookingDetailsPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/customer/BookingDetailsPage.tsx"],"sourcesContent":["/**\n * Booking Details Page\n * @module adaptercloud/pages/customer\n *\n * Detailed view of a service booking with service name, provider info,\n * scheduled date/time, booking status timeline, location info,\n * price breakdown, Contact Support button, Rate Service button (when completed),\n * Cart Information sidebar, cancel button.\n * Uses route param :bookingId from useParams().\n */\n\nimport { useMemo, useState } from'react';\nimport { useParams } from'react-router-dom';\nimport {\n ArrowLeft,\n Calendar,\n Clock,\n MapPin,\n Phone,\n Star,\n CheckCircle2,\n Circle,\n XCircle,\n ShoppingBag,\n CalendarCheck,\n AlertTriangle,\n Headphones,\n MessageSquare,\n IndianRupee,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { StatusBadge } from'../../components/StatusBadge';\nimport { EmptyState } from'../../components/EmptyState';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { cn } from'../../utils/cn';\nimport { formatCurrency, formatDate } from'../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype BookingStatus = 'confirmed' | 'in_progress' | 'completed' | 'cancelled';\n\ninterface BookingTimelineEvent {\n status: string;\n label: string;\n timestamp: string | null;\n completed: boolean;\n}\n\ninterface MockBooking {\n id: string;\n serviceName: string;\n serviceDescription: string;\n provider: {\n id: string;\n name: string;\n phone: string;\n rating: number;\n reviewCount: number;\n category: string;\n image: string;\n location: string;\n };\n scheduledDate: string;\n scheduledTime: string;\n duration: number;\n status: BookingStatus;\n location: {\n street: string;\n area: string;\n city: string;\n pincode: string;\n landmark?: string;\n };\n pricing: {\n serviceCharge: number;\n convenienceFee: number;\n tax: number;\n discount: number;\n total: number;\n };\n createdAt: string;\n notes?: string;\n cancellationReason?: string;\n timeline: BookingTimelineEvent[];\n}\n\n// ============================================================================\n// Mock Data\n// ============================================================================\n\nconst mockBookings: MockBooking[] = [\n {\n id: 'BK-001',\n serviceName: \"Men's Haircut + Beard Trim\",\n serviceDescription: 'Professional haircut and beard grooming service at your doorstep',\n provider: {\n id: 'SERV-001',\n name: 'Quick Cuts Salon',\n phone: '+91-9876543210',\n rating: 4.6,\n reviewCount: 248,\n category: 'Personal Care & Beauty',\n image: 'https://images.unsplash.com/photo-1562322140-8baeececf3df?w=400',\n location: 'Indiranagar, Bangalore',\n },\n scheduledDate: '2024-01-20',\n scheduledTime: '10:00 AM',\n duration: 50,\n status: 'confirmed',\n location: {\n street: '123 Main Street',\n area: 'Koramangala',\n city: 'Bangalore',\n pincode: '560034',\n landmark: 'Near Metro Station',\n },\n pricing: {\n serviceCharge: 450,\n convenienceFee: 30,\n tax: 48,\n discount: 50,\n total: 478,\n },\n createdAt: '2024-01-16T14:30:00Z',\n notes: 'Please bring your own equipment',\n timeline: [\n {\n status: 'booked',\n label: 'Booking Placed',\n timestamp: '2024-01-16T14:30:00Z',\n completed: true,\n },\n {\n status: 'confirmed',\n label: 'Booking Confirmed',\n timestamp: '2024-01-16T14:35:00Z',\n completed: true,\n },\n { status: 'in_progress', label: 'Service Started', timestamp: null, completed: false },\n { status: 'completed', label: 'Service Completed', timestamp: null, completed: false },\n ],\n },\n {\n id: 'BK-002',\n serviceName: 'Deep House Cleaning',\n serviceDescription:\n 'Complete house cleaning service including kitchen, bathrooms, and living areas',\n provider: {\n id: 'SERV-005',\n name: 'Spotless Cleaning Services',\n phone: '+91-9876543215',\n rating: 4.8,\n reviewCount: 312,\n category: 'Home Services',\n image: 'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=400',\n location: 'Whitefield, Bangalore',\n },\n scheduledDate: '2024-01-18',\n scheduledTime: '09:00 AM',\n duration: 180,\n status: 'completed',\n location: {\n street: '456 Park Avenue',\n area: 'Indiranagar',\n city: 'Bangalore',\n pincode: '560038',\n },\n pricing: {\n serviceCharge: 1500,\n convenienceFee: 50,\n tax: 155,\n discount: 0,\n total: 1705,\n },\n createdAt: '2024-01-15T10:00:00Z',\n timeline: [\n {\n status: 'booked',\n label: 'Booking Placed',\n timestamp: '2024-01-15T10:00:00Z',\n completed: true,\n },\n {\n status: 'confirmed',\n label: 'Booking Confirmed',\n timestamp: '2024-01-15T10:05:00Z',\n completed: true,\n },\n {\n status: 'in_progress',\n label: 'Service Started',\n timestamp: '2024-01-18T09:10:00Z',\n completed: true,\n },\n {\n status: 'completed',\n label: 'Service Completed',\n timestamp: '2024-01-18T12:15:00Z',\n completed: true,\n },\n ],\n },\n {\n id: 'BK-003',\n serviceName: 'Facial Treatment',\n serviceDescription: 'Deep cleansing facial with natural ingredients for glowing skin',\n provider: {\n id: 'SERV-002',\n name: 'Glow Beauty Services',\n phone: '+91-9876543212',\n rating: 4.7,\n reviewCount: 180,\n category: 'Personal Care & Beauty',\n image: 'https://images.unsplash.com/photo-1560066984-138dadb4c035?w=400',\n location: 'HSR Layout, Bangalore',\n },\n scheduledDate: '2024-01-22',\n scheduledTime: '02:00 PM',\n duration: 60,\n status: 'cancelled',\n location: {\n street: '789 Lake View',\n area: 'HSR Layout',\n city: 'Bangalore',\n pincode: '560102',\n },\n pricing: {\n serviceCharge: 800,\n convenienceFee: 30,\n tax: 83,\n discount: 0,\n total: 913,\n },\n createdAt: '2024-01-17T16:00:00Z',\n cancellationReason: 'Schedule conflict - need to reschedule',\n timeline: [\n {\n status: 'booked',\n label: 'Booking Placed',\n timestamp: '2024-01-17T16:00:00Z',\n completed: true,\n },\n {\n status: 'confirmed',\n label: 'Booking Confirmed',\n timestamp: '2024-01-17T16:10:00Z',\n completed: true,\n },\n {\n status: 'cancelled',\n label: 'Booking Cancelled',\n timestamp: '2024-01-18T09:00:00Z',\n completed: true,\n },\n ],\n },\n];\n\nconst getBookingById = (bookingId: string): MockBooking | undefined =>\n mockBookings.find((b) => b.id === bookingId);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function BookingDetailsPage() {\n const { bookingId } = useParams<{ bookingId: string }>();\n const { navigateTo } = useAdapterCloud();\n const [statusMessage, setStatusMessage] = useState<string | null>(null);\n\n const booking = useMemo(() => (bookingId ? getBookingById(bookingId) : undefined), [bookingId]);\n\n const showStatus = (msg: string) => {\n setStatusMessage(msg);\n setTimeout(() => setStatusMessage(null), 3000);\n };\n\n if (!booking) {\n return (\n <PageLayout title=\"Booking Not Found\">\n <EmptyState\n illustration=\"empty-generic\"\n icon={<CalendarCheck className=\"h-12 w-12\" />}\n title=\"Booking not found\"\n description={`No booking found with ID\"${bookingId}\".`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/dashboard')}\n className=\"rounded-lg bg-foreground px-4 py-2 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n Go to Dashboard\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n const isCancelled = booking.status === 'cancelled';\n const isCompleted = booking.status === 'completed';\n const canCancel = !isCancelled && !isCompleted;\n\n const handleContactSupport = () => {\n showStatus('Support team will contact you shortly.');\n };\n\n const handleRateService = () => {\n showStatus('Thank you! Rating feature coming soon.');\n };\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/dashboard')}\n className=\"rounded-md p-1 text-text-secondary hover:bg-accent hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n <span>Booking #{booking.id}</span>\n </div>\n }\n actions={<StatusBadge status={booking.status} />}\n >\n {/* Status message */}\n {statusMessage && (\n <div className=\"mb-4 rounded-lg border border-status-success-border/30 bg-status-success-bg-subtle/10 p-3 flex items-center gap-2\">\n <CheckCircle2 className=\"h-4 w-4 text-status-success-text shrink-0\" />\n <p className=\"text-sm text-status-success-text\">{statusMessage}</p>\n </div>\n )}\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Left: Main Content */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Service Info */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <h2 className=\"text-lg font-semibold text-text-primary\">{booking.serviceName}</h2>\n <p className=\"mt-1 text-sm text-text-secondary\">{booking.serviceDescription}</p>\n\n <div className=\"mt-4 flex flex-wrap gap-4 text-sm text-text-secondary\">\n <div className=\"flex items-center gap-1.5\">\n <Calendar className=\"h-4 w-4\" />\n <span>{booking.scheduledDate}</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <Clock className=\"h-4 w-4\" />\n <span>{booking.scheduledTime}</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <Clock className=\"h-4 w-4\" />\n <span>{booking.duration} min</span>\n </div>\n </div>\n\n {booking.notes && (\n <div className=\"mt-4 rounded-md bg-bg-sunken p-3\">\n <p className=\"text-xs text-text-secondary mb-1\">Notes</p>\n <p className=\"text-sm text-text-primary\">{booking.notes}</p>\n </div>\n )}\n\n {booking.cancellationReason && (\n <div className=\"mt-4 rounded-md bg-status-error-bg-subtle/5 border border-status-error-border/20 p-3\">\n <div className=\"flex items-center gap-2 mb-1\">\n <AlertTriangle className=\"h-3.5 w-3.5 text-status-error-text\" />\n <p className=\"text-xs font-medium text-status-error-text\">\n Cancellation Reason\n </p>\n </div>\n <p className=\"text-sm text-text-primary\">{booking.cancellationReason}</p>\n </div>\n )}\n </div>\n\n {/* Provider Info */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <h2 className=\"text-base font-semibold text-text-primary mb-4\">Service Provider</h2>\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-bg-sunken text-text-secondary\">\n <ShoppingBag className=\"h-6 w-6\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-semibold text-text-primary\">{booking.provider.name}</p>\n <p className=\"text-xs text-text-secondary\">{booking.provider.category}</p>\n <div className=\"flex items-center gap-1 mt-1\">\n <Star className=\"h-3 w-3 fill-status-warning-text text-status-warning-text\" />\n <span className=\"text-xs font-medium text-text-primary\">\n {booking.provider.rating}\n </span>\n </div>\n </div>\n <a\n href={`tel:${booking.provider.phone}`}\n className=\"flex h-10 w-10 items-center justify-center rounded-full bg-bg-sunken text-text-secondary hover:bg-accent hover:text-text-primary transition-colors\"\n >\n <Phone className=\"h-4 w-4\" />\n </a>\n </div>\n <div className=\"mt-3 flex items-center gap-2 text-sm text-text-secondary\">\n <Phone className=\"h-4 w-4 shrink-0\" />\n <span>{booking.provider.phone}</span>\n </div>\n </div>\n\n {/* Booking Status Timeline */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <h2 className=\"text-base font-semibold text-text-primary mb-5\">Booking Timeline</h2>\n <div className=\"relative\">\n {booking.timeline.map((event, index) => {\n const isLast = index === booking.timeline.length - 1;\n const isCancelledEvent = event.status === 'cancelled';\n const Icon = isCancelledEvent ? XCircle : event.completed ? CheckCircle2 : Circle;\n\n return (\n <div key={`${event.status}-${index}`} className=\"flex gap-4\">\n <div className=\"flex flex-col items-center\">\n <div\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full',\n isCancelledEvent\n ? 'bg-status-error-bg-subtle/10 text-status-error-text'\n : event.completed\n ? 'bg-status-success-bg-subtle/10 text-status-success-text'\n : 'bg-bg-sunken text-text-secondary'\n )}\n >\n <Icon className=\"h-4 w-4\" />\n </div>\n {!isLast && (\n <div\n className={cn(\n 'w-0.5 flex-1 my-1',\n event.completed ? 'bg-status-success-bg-subtle/30' : 'bg-border'\n )}\n />\n )}\n </div>\n <div className={cn('pb-6', isLast && 'pb-0')}>\n <p className=\"text-sm font-medium text-text-primary\">{event.label}</p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {event.timestamp ? formatDate(event.timestamp) : 'Pending'}\n </p>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Action Buttons: Contact Support + Rate Service */}\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <button\n type=\"button\"\n onClick={handleContactSupport}\n className=\"flex-1 flex items-center justify-center gap-2 rounded-lg border border-border-subtle px-4 py-3 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Headphones className=\"h-4 w-4\" />\n Contact Support\n </button>\n\n {isCompleted && (\n <button\n type=\"button\"\n onClick={handleRateService}\n className=\"flex-1 flex items-center justify-center gap-2 rounded-lg bg-foreground px-4 py-3 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Star className=\"h-4 w-4\" />\n Rate Service\n </button>\n )}\n </div>\n </div>\n\n {/* Right: Sidebar */}\n <div className=\"space-y-6\">\n {/* Cart Information */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Cart Information</h3>\n <div className=\"flex items-center gap-3 mb-4\">\n <img\n src={booking.provider.image}\n alt={booking.provider.name}\n className=\"h-14 w-14 rounded-lg object-cover\"\n />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-text-primary\">{booking.provider.name}</p>\n <p className=\"text-xs text-text-secondary\">{booking.provider.category}</p>\n <div className=\"flex items-center gap-1 mt-0.5\">\n <Star className=\"h-3 w-3 fill-status-warning-text text-status-warning-text\" />\n <span className=\"text-xs font-medium text-text-primary\">\n {booking.provider.rating}\n </span>\n <span className=\"text-xs text-text-secondary\">\n ({booking.provider.reviewCount})\n </span>\n </div>\n </div>\n </div>\n\n <div className=\"space-y-2 text-sm mb-4\">\n <div className=\"flex items-start gap-2\">\n <MapPin className=\"h-4 w-4 text-text-secondary shrink-0 mt-0.5\" />\n <span className=\"text-text-secondary\">{booking.provider.location}</span>\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={() => navigateTo(`/customer/carts/${booking.provider.id}`)}\n className=\"w-full rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n View Cart Menu\n </button>\n </div>\n\n {/* Location Info */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Service Location</h3>\n <div className=\"flex items-start gap-3\">\n <MapPin className=\"mt-0.5 h-5 w-5 shrink-0 text-text-secondary\" />\n <div>\n <p className=\"text-sm text-text-primary\">{booking.location.street}</p>\n <p className=\"text-sm text-text-secondary\">\n {booking.location.area}, {booking.location.city} - {booking.location.pincode}\n </p>\n {booking.location.landmark && (\n <p className=\"text-xs text-text-secondary mt-1\">\n Landmark: {booking.location.landmark}\n </p>\n )}\n </div>\n </div>\n </div>\n\n {/* Price Breakdown */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Price Breakdown</h3>\n <div className=\"space-y-2.5 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Service Charge</span>\n <span className=\"text-text-primary\">\n {formatCurrency(booking.pricing.serviceCharge, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Convenience Fee</span>\n <span className=\"text-text-primary\">\n {formatCurrency(booking.pricing.convenienceFee, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Tax</span>\n <span className=\"text-text-primary\">\n {formatCurrency(booking.pricing.tax, { minimumFractionDigits: 0 })}\n </span>\n </div>\n {booking.pricing.discount > 0 && (\n <div className=\"flex justify-between\">\n <span className=\"text-status-success-text\">Discount</span>\n <span className=\"text-status-success-text\">\n -{formatCurrency(booking.pricing.discount, { minimumFractionDigits: 0 })}\n </span>\n </div>\n )}\n <div className=\"flex justify-between border-t border-border-subtle pt-2.5\">\n <span className=\"font-semibold text-text-primary\">Total</span>\n <span className=\"font-bold text-text-primary\">\n {formatCurrency(booking.pricing.total, { minimumFractionDigits: 0 })}\n </span>\n </div>\n </div>\n </div>\n\n {/* Booking Info */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Booking Info</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <CalendarCheck className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Booked On</p>\n <p className=\"text-sm text-text-primary\">{formatDate(booking.createdAt)}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Scheduled</p>\n <p className=\"text-sm text-text-primary\">\n {booking.scheduledDate} at {booking.scheduledTime}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Duration</p>\n <p className=\"text-sm text-text-primary\">{booking.duration} minutes</p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Cancel Button */}\n {canCancel && (\n <button\n type=\"button\"\n className=\"w-full inline-flex items-center justify-center gap-2 rounded-lg border border-status-error-border/30 bg-status-error-bg-subtle/5 px-4 py-3 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle/10 transition-colors\"\n >\n <XCircle className=\"h-4 w-4\" />\n Cancel Booking\n </button>\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}