@burdenoff/microfe-kadaikodi 2026.704.3 → 2026.704.5

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 (145) hide show
  1. package/dist/kadaikodi/KadaikodiRoutes.js +34 -26
  2. package/dist/kadaikodi/KadaikodiRoutes.js.map +1 -1
  3. package/dist/kadaikodi/components/viz/AllocationBar.js +68 -0
  4. package/dist/kadaikodi/components/viz/AllocationBar.js.map +1 -0
  5. package/dist/kadaikodi/components/viz/AreaChart.js +102 -0
  6. package/dist/kadaikodi/components/viz/AreaChart.js.map +1 -0
  7. package/dist/kadaikodi/components/viz/AvatarStack.js +36 -0
  8. package/dist/kadaikodi/components/viz/AvatarStack.js.map +1 -0
  9. package/dist/kadaikodi/components/viz/BarChart.js +83 -0
  10. package/dist/kadaikodi/components/viz/BarChart.js.map +1 -0
  11. package/dist/kadaikodi/components/viz/CertificateCard.js +4 -0
  12. package/dist/kadaikodi/components/viz/DonutChart.js +109 -0
  13. package/dist/kadaikodi/components/viz/DonutChart.js.map +1 -0
  14. package/dist/kadaikodi/components/viz/HBarFunnel.js +54 -0
  15. package/dist/kadaikodi/components/viz/HBarFunnel.js.map +1 -0
  16. package/dist/kadaikodi/components/viz/Heatmap.js +3 -0
  17. package/dist/kadaikodi/components/viz/KanbanBoard.js +50 -0
  18. package/dist/kadaikodi/components/viz/KanbanBoard.js.map +1 -0
  19. package/dist/kadaikodi/components/viz/LineChart.js +4 -0
  20. package/dist/kadaikodi/components/viz/OrgTree.js +2 -0
  21. package/dist/kadaikodi/components/viz/PathSteps.js +3 -0
  22. package/dist/kadaikodi/components/viz/ProgressRing.js +68 -0
  23. package/dist/kadaikodi/components/viz/ProgressRing.js.map +1 -0
  24. package/dist/kadaikodi/components/viz/RatingStars.js +51 -0
  25. package/dist/kadaikodi/components/viz/RatingStars.js.map +1 -0
  26. package/dist/kadaikodi/components/viz/SegmentedTabs.js +69 -0
  27. package/dist/kadaikodi/components/viz/SegmentedTabs.js.map +1 -0
  28. package/dist/kadaikodi/components/viz/SkillBar.js +3 -0
  29. package/dist/kadaikodi/components/viz/Sparkline.js +74 -0
  30. package/dist/kadaikodi/components/viz/Sparkline.js.map +1 -0
  31. package/dist/kadaikodi/components/viz/StatCard.js +60 -0
  32. package/dist/kadaikodi/components/viz/StatCard.js.map +1 -0
  33. package/dist/kadaikodi/components/viz/StepProgress.js +64 -0
  34. package/dist/kadaikodi/components/viz/StepProgress.js.map +1 -0
  35. package/dist/kadaikodi/components/viz/Timeline.js +66 -0
  36. package/dist/kadaikodi/components/viz/Timeline.js.map +1 -0
  37. package/dist/kadaikodi/components/viz/index.js +23 -0
  38. package/dist/kadaikodi/components/viz/lib/Avatar.js +30 -0
  39. package/dist/kadaikodi/components/viz/lib/Avatar.js.map +1 -0
  40. package/dist/kadaikodi/components/viz/lib/CartesianFrame.js +119 -0
  41. package/dist/kadaikodi/components/viz/lib/CartesianFrame.js.map +1 -0
  42. package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js +35 -0
  43. package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js.map +1 -0
  44. package/dist/kadaikodi/components/viz/lib/format.js +21 -0
  45. package/dist/kadaikodi/components/viz/lib/format.js.map +1 -0
  46. package/dist/kadaikodi/components/viz/lib/geometry.js +61 -0
  47. package/dist/kadaikodi/components/viz/lib/geometry.js.map +1 -0
  48. package/dist/kadaikodi/components/viz/lib/hooks.js +39 -0
  49. package/dist/kadaikodi/components/viz/lib/hooks.js.map +1 -0
  50. package/dist/kadaikodi/components/viz/lib/palette.js +27 -0
  51. package/dist/kadaikodi/components/viz/lib/palette.js.map +1 -0
  52. package/dist/kadaikodi/hooks/useKadaikodiApi.js +84 -6
  53. package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
  54. package/dist/kadaikodi/pages/HomePage.js +373 -631
  55. package/dist/kadaikodi/pages/HomePage.js.map +1 -1
  56. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +304 -169
  57. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
  58. package/dist/kadaikodi/pages/admin/AdminDashboard.js +255 -271
  59. package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
  60. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js +185 -125
  61. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js.map +1 -1
  62. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +141 -102
  63. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
  64. package/dist/kadaikodi/pages/admin/AdminProfilePage.js.map +1 -1
  65. package/dist/kadaikodi/pages/admin/AdminSettingsPage.js +332 -276
  66. package/dist/kadaikodi/pages/admin/AdminSettingsPage.js.map +1 -1
  67. package/dist/kadaikodi/pages/admin/CartManagementPage.js +564 -729
  68. package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
  69. package/dist/kadaikodi/pages/admin/UserManagementPage.js +310 -366
  70. package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
  71. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +201 -120
  72. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  73. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js +290 -257
  74. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  75. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +173 -194
  76. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  77. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js +270 -228
  78. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  79. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js +194 -173
  80. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  81. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +428 -347
  82. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  83. package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js +332 -0
  84. package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js.map +1 -0
  85. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js +373 -0
  86. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js.map +1 -0
  87. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +294 -162
  88. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
  89. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +180 -181
  90. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
  91. package/dist/kadaikodi/pages/common/HelpSupportPage.js +310 -317
  92. package/dist/kadaikodi/pages/common/HelpSupportPage.js.map +1 -1
  93. package/dist/kadaikodi/pages/common/NotificationCenterPage.js.map +1 -1
  94. package/dist/kadaikodi/pages/common/SettingsPage.js +502 -586
  95. package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
  96. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +239 -156
  97. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js.map +1 -1
  98. package/dist/kadaikodi/pages/customer/CartDetailPage.js +405 -248
  99. package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
  100. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +258 -232
  101. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
  102. package/dist/kadaikodi/pages/customer/CheckoutPage.js +254 -205
  103. package/dist/kadaikodi/pages/customer/CheckoutPage.js.map +1 -1
  104. package/dist/kadaikodi/pages/customer/CustomerDashboard.js +5 -5
  105. package/dist/kadaikodi/pages/customer/CustomerDashboard.js.map +1 -1
  106. package/dist/kadaikodi/pages/customer/CustomerProfilePage.js +189 -199
  107. package/dist/kadaikodi/pages/customer/CustomerProfilePage.js.map +1 -1
  108. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js +272 -230
  109. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
  110. package/dist/kadaikodi/pages/customer/FavoritesPage.js +150 -413
  111. package/dist/kadaikodi/pages/customer/FavoritesPage.js.map +1 -1
  112. package/dist/kadaikodi/pages/customer/OrderHistoryPage.js +173 -134
  113. package/dist/kadaikodi/pages/customer/OrderHistoryPage.js.map +1 -1
  114. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +411 -305
  115. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
  116. package/dist/kadaikodi/pages/customer/ReviewsPage.js +310 -406
  117. package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
  118. package/dist/kadaikodi/pages/customer/SavedAddressesPage.js.map +1 -1
  119. package/dist/kadaikodi/pages/customer/shared.js +181 -0
  120. package/dist/kadaikodi/pages/customer/shared.js.map +1 -0
  121. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js +438 -311
  122. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js.map +1 -1
  123. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +320 -293
  124. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  125. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js +159 -91
  126. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  127. package/dist/kadaikodi/pages/investor/InvestorDashboard.js +137 -107
  128. package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
  129. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +157 -135
  130. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  131. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js +280 -206
  132. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js.map +1 -1
  133. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js +441 -514
  134. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
  135. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +428 -431
  136. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
  137. package/dist/kadaikodi/pages/worker/WorkerDashboard.js +328 -445
  138. package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
  139. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +141 -164
  140. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
  141. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +360 -288
  142. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
  143. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +303 -281
  144. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
  145. package/package.json +1 -1
@@ -3,18 +3,21 @@ import { cn as t } from "../../utils/cn.js";
3
3
  import { PageLayout as n } from "../../components/PageLayout.js";
4
4
  import { StatusBadge as r } from "../../components/StatusBadge.js";
5
5
  import { EmptyState as i } from "../../components/EmptyState.js";
6
- import { useOrder as a } from "../../hooks/useKadaikodiApi.js";
7
- import { formatCurrency as o, formatDate as s } from "../../utils/formatters.js";
8
- import { useMemo as c, useState as l } from "react";
9
- import { ArrowLeft as u, CalendarCheck as d, CheckCircle2 as f, Circle as p, Headphones as m, MapPin as h, ShoppingBag as g, Star as _, XCircle as v } from "lucide-react";
10
- import { useParams as y } from "react-router-dom";
11
- import { jsx as b, jsxs as x } from "react/jsx-runtime";
12
- import { GlassCard as S, PagePurpose as C } from "@burdenoff/fe-libs/ui";
6
+ import { useCreateReview as a, useOrder as o, useUpdateOrderStatus as s } from "../../hooks/useKadaikodiApi.js";
7
+ import { formatCurrency as c, formatDate as l } from "../../utils/formatters.js";
8
+ import { Timeline as u } from "../../components/viz/Timeline.js";
9
+ import "../../components/viz/index.js";
10
+ import { useMemo as d, useState as f } from "react";
11
+ import { ArrowLeft as p, CalendarCheck as m, CheckCircle2 as h, Headphones as g, Loader2 as _, MapPin as v, ShoppingBag as y, Star as b, X as x, XCircle as S } from "lucide-react";
12
+ import { useParams as C } from "react-router-dom";
13
+ import { jsx as w, jsxs as T } from "react/jsx-runtime";
14
+ import { GlassCard as E, PagePurpose as D } from "@burdenoff/fe-libs/ui";
13
15
  //#region src/kadaikodi/pages/customer/BookingDetailsPage.tsx
14
- function w() {
15
- let { bookingId: w } = y(), { navigateTo: T } = e(), { data: E, isLoading: D } = a(w), [O, k] = l(null), A = (e) => {
16
- k(e), setTimeout(() => k(null), 3e3);
17
- }, j = c(() => E ? E.timeline.length > 0 ? E.timeline.map((e) => ({
16
+ var O = "support@kadaikodi.com";
17
+ function k() {
18
+ let { bookingId: k } = C(), { navigateTo: A, currentUser: j } = e(), { data: M, isLoading: N } = o(k), P = a(), F = s(), [I, L] = f(null), [R, z] = f(!1), [B, V] = f(5), [H, U] = f(""), W = (e) => {
19
+ L(e), setTimeout(() => L(null), 3e3);
20
+ }, G = d(() => M ? M.timeline.length > 0 ? M.timeline.map((e) => ({
18
21
  status: e.status,
19
22
  label: e.description || e.status,
20
23
  timestamp: e.timestamp,
@@ -22,328 +25,408 @@ function w() {
22
25
  })) : [{
23
26
  status: "placed",
24
27
  label: "Order placed",
25
- timestamp: E.orderDate,
28
+ timestamp: M.orderDate,
26
29
  completed: !0
27
- }] : [], [E]);
28
- if (D) return /* @__PURE__ */ b(n, {
30
+ }] : [], [M]);
31
+ if (N) return /* @__PURE__ */ w(n, {
29
32
  title: "Booking Details",
30
- children: /* @__PURE__ */ b("div", {
33
+ children: /* @__PURE__ */ w("div", {
31
34
  className: "flex items-center justify-center py-20",
32
- children: /* @__PURE__ */ b("div", { className: "h-12 w-12 animate-spin rounded-full border-b-2 border-foreground" })
35
+ children: /* @__PURE__ */ w("div", { className: "h-12 w-12 animate-spin rounded-full border-b-2 border-foreground" })
33
36
  })
34
37
  });
35
- if (!E) return /* @__PURE__ */ b(n, {
38
+ if (!M) return /* @__PURE__ */ w(n, {
36
39
  title: "Booking Not Found",
37
- children: /* @__PURE__ */ b(i, {
38
- icon: /* @__PURE__ */ b(d, { className: "h-12 w-12" }),
40
+ children: /* @__PURE__ */ w(i, {
41
+ icon: /* @__PURE__ */ w(m, { className: "h-12 w-12" }),
39
42
  title: "Booking not found",
40
- description: `No booking found with ID "${w}".`,
41
- action: /* @__PURE__ */ b("button", {
43
+ description: `No booking found with ID "${k}".`,
44
+ action: /* @__PURE__ */ w("button", {
42
45
  type: "button",
43
- onClick: () => T("/customer/dashboard"),
46
+ onClick: () => A("/customer/dashboard"),
44
47
  className: "rounded-lg bg-foreground px-4 py-2 text-sm font-medium text-background hover:opacity-90 transition-opacity",
45
48
  children: "Go to Dashboard"
46
49
  })
47
50
  })
48
51
  });
49
- let M = E.status === "cancelled", N = E.status === "delivered", P = !M && !N, F = E.deliveryAddress, I = !!(F.street || F.area || F.city);
50
- return /* @__PURE__ */ x(n, {
51
- title: /* @__PURE__ */ x("div", {
52
+ let K = M.status === "cancelled", q = M.status === "delivered", J = !K && !q, Y = M.deliveryAddress, X = !!(Y.street || Y.area || Y.city), Z = M.rating != null && M.rating > 0;
53
+ return /* @__PURE__ */ T(n, {
54
+ title: /* @__PURE__ */ T("div", {
52
55
  className: "flex items-center gap-3",
53
- children: [/* @__PURE__ */ b("button", {
56
+ children: [/* @__PURE__ */ w("button", {
54
57
  type: "button",
55
- onClick: () => T("/customer/dashboard"),
58
+ onClick: () => A("/customer/dashboard"),
56
59
  className: "rounded-md p-1 text-text-secondary hover:bg-accent hover:text-text-primary transition-colors",
57
- children: /* @__PURE__ */ b(u, { className: "h-5 w-5" })
58
- }), /* @__PURE__ */ x("span", { children: ["Booking #", E.id] })]
60
+ children: /* @__PURE__ */ w(p, { className: "h-5 w-5" })
61
+ }), /* @__PURE__ */ T("span", { children: ["Booking #", M.id] })]
59
62
  }),
60
- actions: /* @__PURE__ */ b(r, { status: E.status }),
63
+ actions: /* @__PURE__ */ w(r, { status: M.status }),
61
64
  children: [
62
- /* @__PURE__ */ b(C, {
65
+ /* @__PURE__ */ w(D, {
63
66
  className: "mb-4",
64
67
  children: "The full picture of one service booking — who's providing it, what was ordered, what it costs, and the actions you can take such as contacting support or cancelling."
65
68
  }),
66
- O && /* @__PURE__ */ x("div", {
69
+ I && /* @__PURE__ */ T("div", {
67
70
  className: "mb-4 rounded-lg border border-status-success-text/30 bg-status-success-bg-subtle p-3 flex items-center gap-2",
68
- children: [/* @__PURE__ */ b(f, { className: "h-4 w-4 text-status-success-text shrink-0" }), /* @__PURE__ */ b("p", {
71
+ children: [/* @__PURE__ */ w(h, { className: "h-4 w-4 text-status-success-text shrink-0" }), /* @__PURE__ */ w("p", {
69
72
  className: "text-sm text-status-success-text",
70
- children: O
73
+ children: I
71
74
  })]
72
75
  }),
73
- /* @__PURE__ */ x("div", {
76
+ /* @__PURE__ */ T("div", {
74
77
  className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
75
- children: [/* @__PURE__ */ x("div", {
78
+ children: [/* @__PURE__ */ T("div", {
76
79
  className: "lg:col-span-2 space-y-6",
77
80
  children: [
78
- /* @__PURE__ */ x(S, {
81
+ /* @__PURE__ */ T(E, {
79
82
  treatment: "glass",
80
83
  glow: !0,
81
84
  className: "p-6",
82
85
  children: [
83
- /* @__PURE__ */ b("h2", {
86
+ /* @__PURE__ */ w("h2", {
84
87
  className: "text-lg font-semibold text-text-primary",
85
- children: E.cartName
88
+ children: M.cartName
86
89
  }),
87
- /* @__PURE__ */ x("p", {
90
+ /* @__PURE__ */ T("p", {
88
91
  className: "mt-1 text-sm text-text-secondary",
89
- children: ["Order placed on ", s(E.orderDate)]
92
+ children: ["Order placed on ", l(M.orderDate)]
90
93
  }),
91
- E.items.length > 0 && /* @__PURE__ */ b("div", {
94
+ M.items.length > 0 && /* @__PURE__ */ w("div", {
92
95
  className: "mt-4 space-y-1.5",
93
- children: E.items.map((e, t) => /* @__PURE__ */ x("div", {
96
+ children: M.items.map((e, t) => /* @__PURE__ */ T("div", {
94
97
  className: "flex justify-between text-sm",
95
- children: [/* @__PURE__ */ x("span", {
98
+ children: [/* @__PURE__ */ T("span", {
96
99
  className: "text-text-primary",
97
100
  children: [
98
101
  e.quantity,
99
102
  "x ",
100
103
  e.name
101
104
  ]
102
- }), /* @__PURE__ */ b("span", {
105
+ }), /* @__PURE__ */ w("span", {
103
106
  className: "text-text-secondary",
104
- children: o(e.price * e.quantity, { minimumFractionDigits: 0 })
107
+ children: c(e.price * e.quantity, { minimumFractionDigits: 0 })
105
108
  })]
106
109
  }, e.id || t))
107
110
  })
108
111
  ]
109
112
  }),
110
- /* @__PURE__ */ x("div", {
113
+ /* @__PURE__ */ T("div", {
111
114
  className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
112
- children: [/* @__PURE__ */ b("h2", {
115
+ children: [/* @__PURE__ */ w("h2", {
113
116
  className: "text-base font-semibold text-text-primary mb-4",
114
117
  children: "Service Provider"
115
- }), /* @__PURE__ */ x("div", {
118
+ }), /* @__PURE__ */ T("div", {
116
119
  className: "flex items-center gap-4",
117
120
  children: [
118
- /* @__PURE__ */ b("div", {
121
+ /* @__PURE__ */ w("div", {
119
122
  className: "flex h-12 w-12 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
120
- children: /* @__PURE__ */ b(g, { className: "h-6 w-6" })
123
+ children: /* @__PURE__ */ w(y, { className: "h-6 w-6" })
121
124
  }),
122
- /* @__PURE__ */ b("div", {
125
+ /* @__PURE__ */ w("div", {
123
126
  className: "flex-1 min-w-0",
124
- children: /* @__PURE__ */ b("p", {
127
+ children: /* @__PURE__ */ w("p", {
125
128
  className: "text-sm font-semibold text-text-primary",
126
- children: E.cartName
129
+ children: M.cartName
127
130
  })
128
131
  }),
129
- /* @__PURE__ */ b("button", {
132
+ /* @__PURE__ */ w("button", {
130
133
  type: "button",
131
- onClick: () => T(`/customer/carts/${E.cartId}`),
134
+ onClick: () => A(`/customer/cart/${M.cartId}`),
132
135
  className: "rounded-lg border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
133
136
  children: "View Cart"
134
137
  })
135
138
  ]
136
139
  })]
137
140
  }),
138
- /* @__PURE__ */ x("div", {
141
+ /* @__PURE__ */ T("div", {
139
142
  className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
140
- children: [/* @__PURE__ */ b("h2", {
143
+ children: [/* @__PURE__ */ w("h2", {
141
144
  className: "text-base font-semibold text-text-primary mb-5",
142
145
  children: "Booking Timeline"
143
- }), /* @__PURE__ */ b("div", {
144
- className: "relative",
145
- children: j.map((e, n) => {
146
- let r = n === j.length - 1, i = e.status === "cancelled", a = i ? v : e.completed ? f : p;
147
- return /* @__PURE__ */ x("div", {
148
- className: "flex gap-4",
149
- children: [/* @__PURE__ */ x("div", {
150
- className: "flex flex-col items-center",
151
- children: [/* @__PURE__ */ b("div", {
152
- className: t("flex h-8 w-8 shrink-0 items-center justify-center rounded-full", i ? "bg-status-error-bg-subtle text-status-error-text" : e.completed ? "bg-status-success-bg-subtle text-status-success-text" : "bg-bg-sunken text-text-secondary"),
153
- children: /* @__PURE__ */ b(a, { className: "h-4 w-4" })
154
- }), !r && /* @__PURE__ */ b("div", { className: t("w-0.5 flex-1 my-1", e.completed ? "bg-status-success-bg-subtle" : "bg-border") })]
155
- }), /* @__PURE__ */ x("div", {
156
- className: t("pb-6", r && "pb-0"),
157
- children: [/* @__PURE__ */ b("p", {
158
- className: "text-sm font-medium text-text-primary",
159
- children: e.label
160
- }), /* @__PURE__ */ b("p", {
161
- className: "mt-0.5 text-xs text-text-secondary",
162
- children: e.timestamp ? s(e.timestamp) : "Pending"
163
- })]
164
- })]
165
- }, `${e.status}-${n}`);
166
- })
167
- })]
146
+ }), /* @__PURE__ */ w(u, { items: G.map((e, t) => ({
147
+ id: `${e.status}-${t}`,
148
+ title: e.label,
149
+ tone: e.status === "cancelled" ? "danger" : e.completed ? "success" : "muted",
150
+ time: e.timestamp ? l(e.timestamp) : "Pending"
151
+ })) })]
168
152
  }),
169
- /* @__PURE__ */ x("div", {
153
+ /* @__PURE__ */ T("div", {
170
154
  className: "flex flex-col sm:flex-row gap-3",
171
- children: [/* @__PURE__ */ x("button", {
172
- type: "button",
173
- onClick: () => {
174
- A("Support team will contact you shortly.");
175
- },
155
+ children: [/* @__PURE__ */ T("a", {
156
+ href: `mailto:${O}?subject=${encodeURIComponent(`Support request — Booking #${M.id}`)}`,
176
157
  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",
177
- children: [/* @__PURE__ */ b(m, { className: "h-4 w-4" }), "Contact Support"]
178
- }), N && /* @__PURE__ */ x("button", {
158
+ children: [/* @__PURE__ */ w(g, { className: "h-4 w-4" }), "Contact Support"]
159
+ }), q && /* @__PURE__ */ T("button", {
179
160
  type: "button",
180
- onClick: () => {
181
- A("Thank you! Rating feature coming soon.");
182
- },
183
- 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",
184
- children: [/* @__PURE__ */ b(_, { className: "h-4 w-4" }), "Rate Service"]
161
+ disabled: Z,
162
+ onClick: () => z(!0),
163
+ className: t("flex-1 flex items-center justify-center gap-2 rounded-lg px-4 py-3 text-sm font-medium transition-opacity", Z ? "bg-bg-sunken text-text-secondary cursor-not-allowed" : "bg-foreground text-background hover:opacity-90"),
164
+ children: [/* @__PURE__ */ w(b, { className: "h-4 w-4" }), Z ? "Rated" : "Rate Service"]
185
165
  })]
186
166
  })
187
167
  ]
188
- }), /* @__PURE__ */ x("div", {
168
+ }), /* @__PURE__ */ T("div", {
189
169
  className: "space-y-6",
190
170
  children: [
191
- /* @__PURE__ */ x("div", {
171
+ /* @__PURE__ */ T("div", {
192
172
  className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
193
173
  children: [
194
- /* @__PURE__ */ b("h3", {
174
+ /* @__PURE__ */ w("h3", {
195
175
  className: "text-base font-semibold text-text-primary mb-3",
196
176
  children: "Cart Information"
197
177
  }),
198
- /* @__PURE__ */ x("div", {
178
+ /* @__PURE__ */ T("div", {
199
179
  className: "flex items-center gap-3 mb-4",
200
- children: [/* @__PURE__ */ b("div", {
180
+ children: [/* @__PURE__ */ w("div", {
201
181
  className: "flex h-14 w-14 shrink-0 items-center justify-center rounded-lg bg-bg-sunken text-text-secondary",
202
- children: /* @__PURE__ */ b(g, { className: "h-6 w-6" })
203
- }), /* @__PURE__ */ b("div", {
182
+ children: /* @__PURE__ */ w(y, { className: "h-6 w-6" })
183
+ }), /* @__PURE__ */ w("div", {
204
184
  className: "min-w-0",
205
- children: /* @__PURE__ */ b("p", {
185
+ children: /* @__PURE__ */ w("p", {
206
186
  className: "text-sm font-semibold text-text-primary",
207
- children: E.cartName
187
+ children: M.cartName
208
188
  })
209
189
  })]
210
190
  }),
211
- /* @__PURE__ */ b("button", {
191
+ /* @__PURE__ */ w("button", {
212
192
  type: "button",
213
- onClick: () => T(`/customer/carts/${E.cartId}`),
193
+ onClick: () => A(`/customer/cart/${M.cartId}`),
214
194
  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",
215
195
  children: "View Cart Menu"
216
196
  })
217
197
  ]
218
198
  }),
219
- I && /* @__PURE__ */ x("div", {
199
+ X && /* @__PURE__ */ T("div", {
220
200
  className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
221
- children: [/* @__PURE__ */ b("h3", {
201
+ children: [/* @__PURE__ */ w("h3", {
222
202
  className: "text-base font-semibold text-text-primary mb-3",
223
203
  children: "Service Location"
224
- }), /* @__PURE__ */ x("div", {
204
+ }), /* @__PURE__ */ T("div", {
225
205
  className: "flex items-start gap-3",
226
- children: [/* @__PURE__ */ b(h, { className: "mt-0.5 h-5 w-5 shrink-0 text-text-secondary" }), /* @__PURE__ */ x("div", { children: [
227
- F.street && /* @__PURE__ */ b("p", {
206
+ children: [/* @__PURE__ */ w(v, { className: "mt-0.5 h-5 w-5 shrink-0 text-text-secondary" }), /* @__PURE__ */ T("div", { children: [
207
+ Y.street && /* @__PURE__ */ w("p", {
228
208
  className: "text-sm text-text-primary",
229
- children: F.street
209
+ children: Y.street
230
210
  }),
231
- /* @__PURE__ */ x("p", {
211
+ /* @__PURE__ */ T("p", {
232
212
  className: "text-sm text-text-secondary",
233
- children: [[F.area, F.city].filter(Boolean).join(", "), F.pincode ? ` - ${F.pincode}` : ""]
213
+ children: [[Y.area, Y.city].filter(Boolean).join(", "), Y.pincode ? ` - ${Y.pincode}` : ""]
234
214
  }),
235
- F.landmark && /* @__PURE__ */ x("p", {
215
+ Y.landmark && /* @__PURE__ */ T("p", {
236
216
  className: "text-xs text-text-secondary mt-1",
237
- children: ["Landmark: ", F.landmark]
217
+ children: ["Landmark: ", Y.landmark]
238
218
  })
239
219
  ] })]
240
220
  })]
241
221
  }),
242
- /* @__PURE__ */ x("div", {
222
+ /* @__PURE__ */ T("div", {
243
223
  className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
244
- children: [/* @__PURE__ */ b("h3", {
224
+ children: [/* @__PURE__ */ w("h3", {
245
225
  className: "text-base font-semibold text-text-primary mb-3",
246
226
  children: "Price Breakdown"
247
- }), /* @__PURE__ */ x("div", {
227
+ }), /* @__PURE__ */ T("div", {
248
228
  className: "space-y-2.5 text-sm",
249
229
  children: [
250
- /* @__PURE__ */ x("div", {
230
+ /* @__PURE__ */ T("div", {
251
231
  className: "flex justify-between",
252
- children: [/* @__PURE__ */ b("span", {
232
+ children: [/* @__PURE__ */ w("span", {
253
233
  className: "text-text-secondary",
254
234
  children: "Subtotal"
255
- }), /* @__PURE__ */ b("span", {
235
+ }), /* @__PURE__ */ w("span", {
256
236
  className: "text-text-primary",
257
- children: o(E.subtotal, { minimumFractionDigits: 0 })
237
+ children: c(M.subtotal, { minimumFractionDigits: 0 })
258
238
  })]
259
239
  }),
260
- /* @__PURE__ */ x("div", {
240
+ /* @__PURE__ */ T("div", {
261
241
  className: "flex justify-between",
262
- children: [/* @__PURE__ */ b("span", {
242
+ children: [/* @__PURE__ */ w("span", {
263
243
  className: "text-text-secondary",
264
244
  children: "Delivery Fee"
265
- }), /* @__PURE__ */ b("span", {
245
+ }), /* @__PURE__ */ w("span", {
266
246
  className: "text-text-primary",
267
- children: E.deliveryFee === 0 ? "FREE" : o(E.deliveryFee, { minimumFractionDigits: 0 })
247
+ children: M.deliveryFee === 0 ? "FREE" : c(M.deliveryFee, { minimumFractionDigits: 0 })
268
248
  })]
269
249
  }),
270
- /* @__PURE__ */ x("div", {
250
+ /* @__PURE__ */ T("div", {
271
251
  className: "flex justify-between",
272
- children: [/* @__PURE__ */ b("span", {
252
+ children: [/* @__PURE__ */ w("span", {
273
253
  className: "text-text-secondary",
274
254
  children: "Tax"
275
- }), /* @__PURE__ */ b("span", {
255
+ }), /* @__PURE__ */ w("span", {
276
256
  className: "text-text-primary",
277
- children: o(E.taxes, { minimumFractionDigits: 0 })
257
+ children: c(M.taxes, { minimumFractionDigits: 0 })
278
258
  })]
279
259
  }),
280
- E.discount != null && E.discount > 0 && /* @__PURE__ */ x("div", {
260
+ M.discount != null && M.discount > 0 && /* @__PURE__ */ T("div", {
281
261
  className: "flex justify-between",
282
- children: [/* @__PURE__ */ b("span", {
262
+ children: [/* @__PURE__ */ w("span", {
283
263
  className: "text-status-success-text",
284
264
  children: "Discount"
285
- }), /* @__PURE__ */ x("span", {
265
+ }), /* @__PURE__ */ T("span", {
286
266
  className: "text-status-success-text",
287
- children: ["-", o(E.discount, { minimumFractionDigits: 0 })]
267
+ children: ["-", c(M.discount, { minimumFractionDigits: 0 })]
288
268
  })]
289
269
  }),
290
- /* @__PURE__ */ x("div", {
270
+ /* @__PURE__ */ T("div", {
291
271
  className: "flex justify-between border-t border-border-subtle pt-2.5",
292
- children: [/* @__PURE__ */ b("span", {
272
+ children: [/* @__PURE__ */ w("span", {
293
273
  className: "font-semibold text-text-primary",
294
274
  children: "Total"
295
- }), /* @__PURE__ */ b("span", {
275
+ }), /* @__PURE__ */ w("span", {
296
276
  className: "font-bold text-text-primary",
297
- children: o(E.total, { minimumFractionDigits: 0 })
277
+ children: c(M.total, { minimumFractionDigits: 0 })
298
278
  })]
299
279
  })
300
280
  ]
301
281
  })]
302
282
  }),
303
- /* @__PURE__ */ x("div", {
283
+ /* @__PURE__ */ T("div", {
304
284
  className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
305
- children: [/* @__PURE__ */ b("h3", {
285
+ children: [/* @__PURE__ */ w("h3", {
306
286
  className: "text-base font-semibold text-text-primary mb-3",
307
287
  children: "Booking Info"
308
- }), /* @__PURE__ */ x("div", {
288
+ }), /* @__PURE__ */ T("div", {
309
289
  className: "space-y-3",
310
- children: [/* @__PURE__ */ x("div", {
290
+ children: [/* @__PURE__ */ T("div", {
311
291
  className: "flex items-center gap-2",
312
- children: [/* @__PURE__ */ b(d, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
292
+ children: [/* @__PURE__ */ w(m, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
313
293
  className: "text-xs text-text-secondary",
314
294
  children: "Booked On"
315
- }), /* @__PURE__ */ b("p", {
295
+ }), /* @__PURE__ */ w("p", {
316
296
  className: "text-sm text-text-primary",
317
- children: s(E.orderDate)
297
+ children: l(M.orderDate)
318
298
  })] })]
319
- }), /* @__PURE__ */ x("div", {
299
+ }), /* @__PURE__ */ T("div", {
320
300
  className: "flex items-center gap-2",
321
- children: [/* @__PURE__ */ b(f, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
301
+ children: [/* @__PURE__ */ w(h, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
322
302
  className: "text-xs text-text-secondary",
323
303
  children: "Payment"
324
- }), /* @__PURE__ */ x("p", {
304
+ }), /* @__PURE__ */ T("p", {
325
305
  className: "text-sm text-text-primary capitalize",
326
306
  children: [
327
- E.paymentMethod,
307
+ M.paymentMethod,
328
308
  " · ",
329
- E.paymentStatus
309
+ M.paymentStatus
330
310
  ]
331
311
  })] })]
332
312
  })]
333
313
  })]
334
314
  }),
335
- P && /* @__PURE__ */ x("button", {
315
+ J && /* @__PURE__ */ T("button", {
336
316
  type: "button",
337
- className: "w-full inline-flex items-center justify-center gap-2 rounded-lg border border-status-error-text/30 bg-status-error-bg-subtle px-4 py-3 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle transition-colors",
338
- children: [/* @__PURE__ */ b(v, { className: "h-4 w-4" }), "Cancel Booking"]
317
+ onClick: () => {
318
+ window.confirm("Cancel this booking? This cannot be undone.") && F.mutate({
319
+ id: M.id,
320
+ status: "CANCELLED"
321
+ }, {
322
+ onSuccess: () => W("Your booking has been cancelled."),
323
+ onError: () => W("Could not cancel the booking. Please try again.")
324
+ });
325
+ },
326
+ disabled: F.isPending,
327
+ className: t("w-full inline-flex items-center justify-center gap-2 rounded-lg border border-status-error-text/30 bg-status-error-bg-subtle px-4 py-3 text-sm font-medium text-status-error-text transition-colors", F.isPending ? "opacity-60 cursor-not-allowed" : "hover:bg-status-error-bg-subtle"),
328
+ children: [F.isPending ? /* @__PURE__ */ w(_, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ w(S, { className: "h-4 w-4" }), "Cancel Booking"]
339
329
  })
340
330
  ]
341
331
  })]
332
+ }),
333
+ R && /* @__PURE__ */ w("div", {
334
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
335
+ children: /* @__PURE__ */ w("div", {
336
+ className: "w-full max-w-md rounded-lg border border-border-subtle bg-bg-surface shadow-lg",
337
+ children: /* @__PURE__ */ T("div", {
338
+ className: "p-5",
339
+ children: [
340
+ /* @__PURE__ */ T("div", {
341
+ className: "flex items-center justify-between mb-4",
342
+ children: [/* @__PURE__ */ w("h3", {
343
+ className: "text-lg font-semibold text-text-primary",
344
+ children: "Rate this service"
345
+ }), /* @__PURE__ */ w("button", {
346
+ type: "button",
347
+ onClick: () => z(!1),
348
+ className: "rounded-md p-2 text-text-secondary hover:bg-accent hover:text-text-primary transition-colors",
349
+ children: /* @__PURE__ */ w(x, { className: "h-4 w-4" })
350
+ })]
351
+ }),
352
+ /* @__PURE__ */ T("div", {
353
+ className: "mb-4",
354
+ children: [/* @__PURE__ */ w("label", {
355
+ className: "block text-sm font-medium text-text-primary mb-2",
356
+ children: "Your rating"
357
+ }), /* @__PURE__ */ w("div", {
358
+ className: "flex items-center gap-1",
359
+ children: [
360
+ 1,
361
+ 2,
362
+ 3,
363
+ 4,
364
+ 5
365
+ ].map((e) => /* @__PURE__ */ w("button", {
366
+ type: "button",
367
+ onClick: () => V(e),
368
+ className: "p-0.5",
369
+ "aria-label": `${e} star${e > 1 ? "s" : ""}`,
370
+ children: /* @__PURE__ */ w(b, { className: t("h-7 w-7", e <= B ? "fill-status-warning-text text-status-warning-text" : "fill-none text-text-secondary/40") })
371
+ }, e))
372
+ })]
373
+ }),
374
+ /* @__PURE__ */ T("div", {
375
+ className: "mb-5",
376
+ children: [/* @__PURE__ */ T("label", {
377
+ className: "block text-sm font-medium text-text-primary mb-1.5",
378
+ children: ["Review ", /* @__PURE__ */ w("span", {
379
+ className: "text-text-secondary font-normal",
380
+ children: "(optional)"
381
+ })]
382
+ }), /* @__PURE__ */ w("textarea", {
383
+ rows: 4,
384
+ value: H,
385
+ onChange: (e) => U(e.target.value),
386
+ placeholder: "Share your experience with this service...",
387
+ className: "w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] resize-none"
388
+ })]
389
+ }),
390
+ /* @__PURE__ */ T("div", {
391
+ className: "flex items-center gap-3",
392
+ children: [/* @__PURE__ */ T("button", {
393
+ type: "button",
394
+ onClick: () => {
395
+ if (!j?.id) {
396
+ W("Please sign in to rate this service.");
397
+ return;
398
+ }
399
+ P.mutate({
400
+ providerId: M.cartId,
401
+ orderId: M.id,
402
+ customerId: j.id,
403
+ rating: B,
404
+ review: H.trim() || void 0
405
+ }, {
406
+ onSuccess: () => {
407
+ z(!1), U(""), W("Thanks! Your rating has been submitted.");
408
+ },
409
+ onError: () => W("Could not submit your rating. Please try again.")
410
+ });
411
+ },
412
+ disabled: P.isPending,
413
+ className: t("flex-1 inline-flex items-center justify-center gap-2 rounded-lg bg-foreground px-4 py-2.5 text-sm font-medium text-background transition-opacity", P.isPending ? "opacity-60 cursor-not-allowed" : "hover:opacity-90"),
414
+ children: [P.isPending && /* @__PURE__ */ w(_, { className: "h-4 w-4 animate-spin" }), "Submit Rating"]
415
+ }), /* @__PURE__ */ w("button", {
416
+ type: "button",
417
+ onClick: () => z(!1),
418
+ className: "rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
419
+ children: "Cancel"
420
+ })]
421
+ })
422
+ ]
423
+ })
424
+ })
342
425
  })
343
426
  ]
344
427
  });
345
428
  }
346
429
  //#endregion
347
- export { w as BookingDetailsPage };
430
+ export { k as BookingDetailsPage };
348
431
 
349
432
  //# sourceMappingURL=BookingDetailsPage.js.map