@burdenoff/microfe-subscriberbot 2026.626.2 → 2026.629.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 (141) hide show
  1. package/dist/index.js +4 -4
  2. package/dist/subscriberbot/SubscriberBotRoot.js +61 -133
  3. package/dist/subscriberbot/SubscriberBotRoot.js.map +1 -1
  4. package/dist/subscriberbot/SubscriberBotRoutes.js +56 -187
  5. package/dist/subscriberbot/SubscriberBotRoutes.js.map +1 -1
  6. package/dist/subscriberbot/components/StateViews.js +49 -0
  7. package/dist/subscriberbot/components/StateViews.js.map +1 -0
  8. package/dist/subscriberbot/components/StatusBadge.js +45 -47
  9. package/dist/subscriberbot/components/StatusBadge.js.map +1 -1
  10. package/dist/subscriberbot/context/SubscriberBotContext.js +22 -30
  11. package/dist/subscriberbot/context/SubscriberBotContext.js.map +1 -1
  12. package/dist/subscriberbot/hooks/useSubscriberBotApi.js +342 -195
  13. package/dist/subscriberbot/hooks/useSubscriberBotApi.js.map +1 -1
  14. package/dist/subscriberbot/index.js +1 -1
  15. package/dist/subscriberbot/pages/DashboardPage.js +269 -0
  16. package/dist/subscriberbot/pages/DashboardPage.js.map +1 -0
  17. package/dist/subscriberbot/pages/InboxPage.js +186 -0
  18. package/dist/subscriberbot/pages/InboxPage.js.map +1 -0
  19. package/dist/subscriberbot/pages/InvoicesPage.js +211 -0
  20. package/dist/subscriberbot/pages/InvoicesPage.js.map +1 -0
  21. package/dist/subscriberbot/pages/WorkflowsPage.js +236 -0
  22. package/dist/subscriberbot/pages/WorkflowsPage.js.map +1 -0
  23. package/dist/subscriberbot/pages/agents/AgentDetailPage.js +160 -0
  24. package/dist/subscriberbot/pages/agents/AgentDetailPage.js.map +1 -0
  25. package/dist/subscriberbot/pages/agents/AgentNewPage.js +140 -0
  26. package/dist/subscriberbot/pages/agents/AgentNewPage.js.map +1 -0
  27. package/dist/subscriberbot/pages/agents/AgentsListPage.js +178 -0
  28. package/dist/subscriberbot/pages/agents/AgentsListPage.js.map +1 -0
  29. package/dist/subscriberbot/pages/providers/ProviderDetailPage.js +179 -0
  30. package/dist/subscriberbot/pages/providers/ProviderDetailPage.js.map +1 -0
  31. package/dist/subscriberbot/pages/providers/ProviderNewPage.js +185 -0
  32. package/dist/subscriberbot/pages/providers/ProviderNewPage.js.map +1 -0
  33. package/dist/subscriberbot/pages/providers/ProvidersListPage.js +254 -0
  34. package/dist/subscriberbot/pages/providers/ProvidersListPage.js.map +1 -0
  35. package/dist/subscriberbot/pages/relationships/RelationshipDetailPage.js +306 -0
  36. package/dist/subscriberbot/pages/relationships/RelationshipDetailPage.js.map +1 -0
  37. package/dist/subscriberbot/pages/relationships/RelationshipNewPage.js +253 -0
  38. package/dist/subscriberbot/pages/relationships/RelationshipNewPage.js.map +1 -0
  39. package/dist/subscriberbot/pages/relationships/RelationshipsListPage.js +248 -0
  40. package/dist/subscriberbot/pages/relationships/RelationshipsListPage.js.map +1 -0
  41. package/dist/subscriberbot/utils/formatters.js +50 -32
  42. package/dist/subscriberbot/utils/formatters.js.map +1 -1
  43. package/package.json +1 -1
  44. package/dist/subscriberbot/components/InvestmentCard.js +0 -97
  45. package/dist/subscriberbot/components/InvestmentCard.js.map +0 -1
  46. package/dist/subscriberbot/components/RatingDisplay.js +0 -35
  47. package/dist/subscriberbot/components/RatingDisplay.js.map +0 -1
  48. package/dist/subscriberbot/mocks/data.js +0 -1517
  49. package/dist/subscriberbot/mocks/data.js.map +0 -1
  50. package/dist/subscriberbot/mocks/users.js +0 -34
  51. package/dist/subscriberbot/mocks/users.js.map +0 -1
  52. package/dist/subscriberbot/pages/HomePage.js +0 -930
  53. package/dist/subscriberbot/pages/HomePage.js.map +0 -1
  54. package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js +0 -651
  55. package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js.map +0 -1
  56. package/dist/subscriberbot/pages/admin/AdminDashboard.js +0 -679
  57. package/dist/subscriberbot/pages/admin/AdminDashboard.js.map +0 -1
  58. package/dist/subscriberbot/pages/admin/AdminFinancialPage.js +0 -427
  59. package/dist/subscriberbot/pages/admin/AdminFinancialPage.js.map +0 -1
  60. package/dist/subscriberbot/pages/admin/AdminOrdersPage.js +0 -665
  61. package/dist/subscriberbot/pages/admin/AdminOrdersPage.js.map +0 -1
  62. package/dist/subscriberbot/pages/admin/AdminProfilePage.js +0 -261
  63. package/dist/subscriberbot/pages/admin/AdminProfilePage.js.map +0 -1
  64. package/dist/subscriberbot/pages/admin/AdminSettingsPage.js +0 -654
  65. package/dist/subscriberbot/pages/admin/AdminSettingsPage.js.map +0 -1
  66. package/dist/subscriberbot/pages/admin/CartManagementPage.js +0 -874
  67. package/dist/subscriberbot/pages/admin/CartManagementPage.js.map +0 -1
  68. package/dist/subscriberbot/pages/admin/UserManagementPage.js +0 -898
  69. package/dist/subscriberbot/pages/admin/UserManagementPage.js.map +0 -1
  70. package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js +0 -839
  71. package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js.map +0 -1
  72. package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js +0 -705
  73. package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js.map +0 -1
  74. package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js +0 -802
  75. package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js.map +0 -1
  76. package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js +0 -891
  77. package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js.map +0 -1
  78. package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js +0 -633
  79. package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js.map +0 -1
  80. package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js +0 -910
  81. package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js.map +0 -1
  82. package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js +0 -879
  83. package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js.map +0 -1
  84. package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js +0 -838
  85. package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js.map +0 -1
  86. package/dist/subscriberbot/pages/common/HelpSupportPage.js +0 -1323
  87. package/dist/subscriberbot/pages/common/HelpSupportPage.js.map +0 -1
  88. package/dist/subscriberbot/pages/common/NotificationCenterPage.js +0 -672
  89. package/dist/subscriberbot/pages/common/NotificationCenterPage.js.map +0 -1
  90. package/dist/subscriberbot/pages/common/SettingsPage.js +0 -973
  91. package/dist/subscriberbot/pages/common/SettingsPage.js.map +0 -1
  92. package/dist/subscriberbot/pages/customer/BookingDetailsPage.js +0 -626
  93. package/dist/subscriberbot/pages/customer/BookingDetailsPage.js.map +0 -1
  94. package/dist/subscriberbot/pages/customer/CartDetailPage.js +0 -654
  95. package/dist/subscriberbot/pages/customer/CartDetailPage.js.map +0 -1
  96. package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js +0 -555
  97. package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js.map +0 -1
  98. package/dist/subscriberbot/pages/customer/CheckoutPage.js +0 -529
  99. package/dist/subscriberbot/pages/customer/CheckoutPage.js.map +0 -1
  100. package/dist/subscriberbot/pages/customer/CustomerDashboard.js +0 -532
  101. package/dist/subscriberbot/pages/customer/CustomerDashboard.js.map +0 -1
  102. package/dist/subscriberbot/pages/customer/CustomerProfilePage.js +0 -630
  103. package/dist/subscriberbot/pages/customer/CustomerProfilePage.js.map +0 -1
  104. package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js +0 -633
  105. package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js.map +0 -1
  106. package/dist/subscriberbot/pages/customer/FavoritesPage.js +0 -484
  107. package/dist/subscriberbot/pages/customer/FavoritesPage.js.map +0 -1
  108. package/dist/subscriberbot/pages/customer/OrderHistoryPage.js +0 -446
  109. package/dist/subscriberbot/pages/customer/OrderHistoryPage.js.map +0 -1
  110. package/dist/subscriberbot/pages/customer/OrderTrackingPage.js +0 -394
  111. package/dist/subscriberbot/pages/customer/OrderTrackingPage.js.map +0 -1
  112. package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js +0 -495
  113. package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js.map +0 -1
  114. package/dist/subscriberbot/pages/customer/ReviewsPage.js +0 -613
  115. package/dist/subscriberbot/pages/customer/ReviewsPage.js.map +0 -1
  116. package/dist/subscriberbot/pages/customer/SavedAddressesPage.js +0 -450
  117. package/dist/subscriberbot/pages/customer/SavedAddressesPage.js.map +0 -1
  118. package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js +0 -886
  119. package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js.map +0 -1
  120. package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js +0 -947
  121. package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js.map +0 -1
  122. package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js +0 -687
  123. package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js.map +0 -1
  124. package/dist/subscriberbot/pages/investor/InvestorDashboard.js +0 -451
  125. package/dist/subscriberbot/pages/investor/InvestorDashboard.js.map +0 -1
  126. package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js +0 -406
  127. package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js.map +0 -1
  128. package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js +0 -575
  129. package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js.map +0 -1
  130. package/dist/subscriberbot/pages/investor/InvestorProfilePage.js +0 -1070
  131. package/dist/subscriberbot/pages/investor/InvestorProfilePage.js.map +0 -1
  132. package/dist/subscriberbot/pages/worker/TaskDetailsPage.js +0 -535
  133. package/dist/subscriberbot/pages/worker/TaskDetailsPage.js.map +0 -1
  134. package/dist/subscriberbot/pages/worker/WorkerDashboard.js +0 -666
  135. package/dist/subscriberbot/pages/worker/WorkerDashboard.js.map +0 -1
  136. package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js +0 -681
  137. package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js.map +0 -1
  138. package/dist/subscriberbot/pages/worker/WorkerProfilePage.js +0 -692
  139. package/dist/subscriberbot/pages/worker/WorkerProfilePage.js.map +0 -1
  140. package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js +0 -588
  141. package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js.map +0 -1
@@ -1,535 +0,0 @@
1
- import { useSubscriberBot as e } from "../../context/SubscriberBotContext.js";
2
- import { cn as t } from "../../utils/cn.js";
3
- import { PageLayout as n } from "../../components/PageLayout.js";
4
- import { StatusBadge as r } from "../../components/StatusBadge.js";
5
- import { EmptyState as i } from "../../components/EmptyState.js";
6
- import { formatCurrency as ee, formatDate as a } from "../../utils/formatters.js";
7
- import { useCallback as o, useEffect as s, useMemo as c, useState as l } from "react";
8
- import { AlertTriangle as u, ArrowLeft as d, Boxes as f, Camera as p, CheckCircle2 as m, ChefHat as h, Circle as g, ClipboardList as _, Clock as v, FileText as y, IndianRupee as b, Loader2 as x, MapPin as S, Navigation as C, Package as w, Phone as T, PlayCircle as E, Save as D, ShoppingBag as O, Sparkles as k, StickyNote as A, Timer as j, Truck as M, User as N } from "lucide-react";
9
- import { useParams as P } from "react-router-dom";
10
- import { jsx as F, jsxs as I } from "react/jsx-runtime";
11
- import { EmphasisPanel as L, NextSteps as R, PagePurpose as z } from "@burdenoff/fe-libs/ui";
12
- //#region src/subscriberbot/pages/worker/TaskDetailsPage.tsx
13
- function B(e) {
14
- switch (e) {
15
- case "delivery": return M;
16
- case "preparation": return h;
17
- case "inventory": return f;
18
- case "cleanup": return k;
19
- case "pickup": return O;
20
- case "service": return w;
21
- default: return y;
22
- }
23
- }
24
- function V(e) {
25
- switch (e) {
26
- case "urgent": return "bg-status-error-bg/20 text-status-error-text";
27
- case "high": return "bg-status-warning-bg/20 text-status-warning-text";
28
- case "medium": return "bg-status-warning-bg/20 text-status-warning-text";
29
- case "low": return "bg-status-success-bg/20 text-status-success-text";
30
- default: return "bg-secondary text-secondary-foreground";
31
- }
32
- }
33
- function H(e) {
34
- let t = e.assignedTime, n = e.status === "in_progress" || e.status === "completed" ? new Date(new Date(t).getTime() + 15 * 6e4).toISOString() : null, r = e.status === "completed" ? (/* @__PURE__ */ new Date()).toISOString() : null;
35
- return [
36
- {
37
- status: "assigned",
38
- label: "Task Assigned",
39
- timestamp: t,
40
- completed: !0
41
- },
42
- {
43
- status: "in_progress",
44
- label: "Work Started",
45
- timestamp: n,
46
- completed: e.status === "in_progress" || e.status === "completed"
47
- },
48
- {
49
- status: "completed",
50
- label: "Task Completed",
51
- timestamp: r,
52
- completed: e.status === "completed"
53
- }
54
- ];
55
- }
56
- function U(e) {
57
- return new Date(e).toLocaleTimeString("en-IN", {
58
- hour: "numeric",
59
- minute: "2-digit",
60
- hour12: !0
61
- });
62
- }
63
- function W() {
64
- let { taskId: f } = P(), { navigateTo: h } = e(), [w, k] = l(null), [M, W] = l(!0), [G, K] = l(""), q = o(() => {
65
- W(!0), setTimeout(() => {
66
- let e = {
67
- id: f || "TASK-001",
68
- orderId: "ORD-123",
69
- cartId: "cart-001",
70
- cartName: "South Indian Express",
71
- type: "delivery",
72
- status: "pending",
73
- priority: "high",
74
- title: "Deliver Order #ORD-123",
75
- description: "Deliver 2x Masala Dosa, 1x Filter Coffee to customer at Koramangala",
76
- estimatedTime: 25,
77
- assignedBy: "Cart Manager",
78
- assignedTime: (/* @__PURE__ */ new Date(Date.now() - 300 * 1e3)).toISOString(),
79
- dueTime: new Date(Date.now() + 1800 * 1e3).toISOString(),
80
- location: "Koramangala 5th Block",
81
- earnings: 95,
82
- distance: 3.5,
83
- customerInfo: {
84
- name: "Rahul Sharma",
85
- phone: "+91-98765-43210",
86
- address: "123, MG Road, Near Central Mall, Koramangala 5th Block, Bangalore - 560034"
87
- },
88
- orderItems: [{
89
- name: "Masala Dosa",
90
- quantity: 2,
91
- specialInstructions: "Extra spicy"
92
- }, {
93
- name: "Filter Coffee",
94
- quantity: 1,
95
- specialInstructions: "Less sugar"
96
- }],
97
- specialInstructions: "Please call before delivery. Customer prefers contactless delivery.",
98
- photos: ["https://images.unsplash.com/photo-1630384060421-cb20d0e0649d?w=400", "https://images.unsplash.com/photo-1572802419224-296b0aeee0d9?w=400"],
99
- notes: ""
100
- };
101
- k(e), K(e.notes || ""), W(!1);
102
- }, 600);
103
- }, [f]);
104
- s(() => {
105
- q();
106
- }, [q]);
107
- let J = () => {
108
- w && (k({
109
- ...w,
110
- status: "in_progress"
111
- }), alert("Task started successfully"));
112
- }, Y = () => {
113
- w && (k({
114
- ...w,
115
- status: "completed"
116
- }), alert("Task completed successfully"));
117
- }, X = () => {
118
- w?.customerInfo?.phone && (window.location.href = `tel:${w.customerInfo.phone.replace(/\s/g, "")}`);
119
- }, Z = () => {
120
- if (w?.customerInfo?.address) {
121
- let e = encodeURIComponent(w.customerInfo.address);
122
- window.open(`https://maps.google.com?q=${e}`, "_blank");
123
- }
124
- }, Q = () => {
125
- w && (k({
126
- ...w,
127
- notes: G
128
- }), alert("Notes saved successfully"));
129
- }, $ = c(() => w ? H(w) : [], [w]);
130
- if (M) return /* @__PURE__ */ F(n, {
131
- title: "Task Details",
132
- children: /* @__PURE__ */ F("div", {
133
- className: "flex items-center justify-center py-24",
134
- children: /* @__PURE__ */ I("div", {
135
- className: "text-center",
136
- children: [/* @__PURE__ */ F(x, { className: "h-10 w-10 animate-spin text-text-secondary mx-auto mb-4" }), /* @__PURE__ */ F("p", {
137
- className: "text-sm text-text-secondary",
138
- children: "Loading task details..."
139
- })]
140
- })
141
- })
142
- });
143
- if (!w) return /* @__PURE__ */ F(n, {
144
- title: "Task Not Found",
145
- children: /* @__PURE__ */ F(i, {
146
- illustration: "empty-generic",
147
- icon: /* @__PURE__ */ F(y, { className: "h-12 w-12" }),
148
- title: "Task not found",
149
- description: `No task found with ID "${f}".`,
150
- action: /* @__PURE__ */ F("button", {
151
- type: "button",
152
- onClick: () => h("/worker/orders"),
153
- className: "rounded-lg bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors",
154
- children: "View All Orders"
155
- })
156
- })
157
- });
158
- let te = B(w.type);
159
- return /* @__PURE__ */ F(n, {
160
- title: /* @__PURE__ */ I("div", {
161
- className: "flex items-center gap-3",
162
- children: [/* @__PURE__ */ F("button", {
163
- type: "button",
164
- onClick: () => h("/worker/orders"),
165
- className: "rounded-md p-1 text-text-secondary hover:bg-accent hover:text-text-primary transition-colors",
166
- children: /* @__PURE__ */ F(d, { className: "h-5 w-5" })
167
- }), /* @__PURE__ */ F("span", { children: "Task Details" })]
168
- }),
169
- description: "Manage and track your assigned task",
170
- children: /* @__PURE__ */ I("div", {
171
- className: "space-y-6",
172
- children: [
173
- /* @__PURE__ */ F(z, {
174
- icon: /* @__PURE__ */ F(_, { className: "h-4 w-4" }),
175
- children: "Everything you need to complete one assigned task. See what's being asked, where to go and who to contact, then work it through its stages — start it when you begin, log notes as you go, and mark it complete when you're done. Keeping the status current lets the customer and your cart owner track progress in real time."
176
- }),
177
- /* @__PURE__ */ F(R, {
178
- storageKey: "subscriberbot-task-details",
179
- steps: [
180
- {
181
- id: "start-task",
182
- label: "Start this task",
183
- description: "Mark it in progress so everyone knows you are on it.",
184
- icon: /* @__PURE__ */ F(E, { className: "h-4 w-4" }),
185
- onClick: J
186
- },
187
- {
188
- id: "navigate",
189
- label: "Navigate to the location",
190
- description: "Get directions to the customer or pickup point.",
191
- icon: /* @__PURE__ */ F(C, { className: "h-4 w-4" }),
192
- onClick: Z
193
- },
194
- {
195
- id: "call-customer",
196
- label: "Call the customer",
197
- description: "Confirm details or let them know your ETA.",
198
- icon: /* @__PURE__ */ F(T, { className: "h-4 w-4" }),
199
- onClick: X
200
- },
201
- {
202
- id: "complete-task",
203
- label: "Mark it complete",
204
- description: "Wrap up and log the task once finished.",
205
- icon: /* @__PURE__ */ F(m, { className: "h-4 w-4" }),
206
- onClick: Y
207
- }
208
- ]
209
- }),
210
- /* @__PURE__ */ I(L, { children: [/* @__PURE__ */ I("div", {
211
- className: "flex items-start justify-between mb-4",
212
- children: [/* @__PURE__ */ I("div", {
213
- className: "flex items-start gap-3",
214
- children: [/* @__PURE__ */ F("div", {
215
- className: "flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken",
216
- children: /* @__PURE__ */ F(te, { className: "h-5 w-5 text-text-secondary" })
217
- }), /* @__PURE__ */ I("div", { children: [
218
- /* @__PURE__ */ F("h2", {
219
- className: "text-xl font-bold text-text-primary",
220
- children: w.title
221
- }),
222
- /* @__PURE__ */ F("p", {
223
- className: "text-sm text-text-secondary mt-1",
224
- children: w.description
225
- }),
226
- /* @__PURE__ */ I("div", {
227
- className: "flex flex-wrap items-center gap-2 mt-3",
228
- children: [
229
- /* @__PURE__ */ F("span", {
230
- className: t("inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium uppercase", V(w.priority)),
231
- children: w.priority
232
- }),
233
- /* @__PURE__ */ F(r, { status: w.status }),
234
- /* @__PURE__ */ I("span", {
235
- className: "text-xs text-text-secondary flex items-center gap-1",
236
- children: [
237
- /* @__PURE__ */ F(v, { className: "h-3 w-3" }),
238
- w.estimatedTime,
239
- " min"
240
- ]
241
- })
242
- ]
243
- })
244
- ] })]
245
- }), /* @__PURE__ */ I("div", {
246
- className: "text-right shrink-0",
247
- children: [
248
- /* @__PURE__ */ F("p", {
249
- className: "text-xs text-text-secondary",
250
- children: "Assigned by"
251
- }),
252
- /* @__PURE__ */ F("p", {
253
- className: "text-sm font-medium text-text-primary",
254
- children: w.assignedBy
255
- }),
256
- /* @__PURE__ */ F("p", {
257
- className: "text-xs text-text-secondary mt-1",
258
- children: U(w.assignedTime)
259
- })
260
- ]
261
- })]
262
- }), w.dueTime && w.status !== "completed" && /* @__PURE__ */ F("div", {
263
- className: "rounded-md bg-status-warning-bg/10 border border-status-warning-border/20 p-3",
264
- children: /* @__PURE__ */ I("div", {
265
- className: "flex items-center gap-2",
266
- children: [/* @__PURE__ */ F(j, { className: "h-4 w-4 text-status-warning-text shrink-0" }), /* @__PURE__ */ I("span", {
267
- className: "text-xs font-medium text-status-warning-text",
268
- children: ["Due by ", U(w.dueTime)]
269
- })]
270
- })
271
- })] }),
272
- /* @__PURE__ */ I("div", {
273
- className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
274
- children: [/* @__PURE__ */ I("div", {
275
- className: "lg:col-span-2 space-y-6",
276
- children: [
277
- /* @__PURE__ */ I("div", {
278
- className: "rounded-lg border border-border-seam bg-bg-surface p-6",
279
- children: [/* @__PURE__ */ F("h3", {
280
- className: "text-base font-semibold text-text-primary mb-4",
281
- children: "Customer Information"
282
- }), /* @__PURE__ */ I("div", {
283
- className: "grid grid-cols-1 md:grid-cols-2 gap-5",
284
- children: [/* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("div", {
285
- className: "space-y-3",
286
- children: /* @__PURE__ */ I("div", {
287
- className: "flex items-center gap-3",
288
- children: [/* @__PURE__ */ F("div", {
289
- className: "flex h-10 w-10 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
290
- children: /* @__PURE__ */ F(N, { className: "h-5 w-5" })
291
- }), /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
292
- className: "text-sm font-medium text-text-primary",
293
- children: w.customerInfo.name
294
- }), /* @__PURE__ */ F("p", {
295
- className: "text-xs text-text-secondary",
296
- children: w.customerInfo.phone
297
- })] })]
298
- })
299
- }), /* @__PURE__ */ I("div", {
300
- className: "flex gap-2 mt-4",
301
- children: [/* @__PURE__ */ I("button", {
302
- type: "button",
303
- onClick: X,
304
- className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
305
- children: [/* @__PURE__ */ F(T, { className: "h-3.5 w-3.5" }), "Call Customer"]
306
- }), /* @__PURE__ */ I("button", {
307
- type: "button",
308
- onClick: Z,
309
- className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
310
- children: [/* @__PURE__ */ F(C, { className: "h-3.5 w-3.5" }), "Navigate"]
311
- })]
312
- })] }), /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
313
- className: "text-xs text-text-secondary mb-2",
314
- children: "Delivery Address"
315
- }), /* @__PURE__ */ F("div", {
316
- className: "rounded-md bg-bg-sunken/50 p-3",
317
- children: /* @__PURE__ */ I("p", {
318
- className: "text-xs text-text-primary flex items-start gap-2",
319
- children: [/* @__PURE__ */ F(S, { className: "h-3.5 w-3.5 shrink-0 mt-0.5 text-text-secondary" }), w.customerInfo.address]
320
- })
321
- })] })]
322
- })]
323
- }),
324
- w.orderItems.length > 0 && /* @__PURE__ */ I("div", {
325
- className: "rounded-lg border border-border-seam bg-bg-surface p-6",
326
- children: [/* @__PURE__ */ F("h3", {
327
- className: "text-base font-semibold text-text-primary mb-3",
328
- children: "Order Items"
329
- }), /* @__PURE__ */ F("div", {
330
- className: "space-y-2",
331
- children: w.orderItems.map((e, t) => /* @__PURE__ */ F("div", {
332
- className: "flex items-start justify-between p-3 rounded-md bg-bg-sunken/50",
333
- children: /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ I("p", {
334
- className: "text-sm font-medium text-text-primary",
335
- children: [
336
- e.quantity,
337
- "x ",
338
- e.name
339
- ]
340
- }), e.specialInstructions && /* @__PURE__ */ I("p", {
341
- className: "text-xs text-text-secondary mt-0.5",
342
- children: ["Note: ", e.specialInstructions]
343
- })] })
344
- }, t))
345
- })]
346
- }),
347
- w.specialInstructions && /* @__PURE__ */ I("div", {
348
- className: "rounded-lg border border-border-seam bg-bg-surface p-6",
349
- children: [/* @__PURE__ */ F("h3", {
350
- className: "text-base font-semibold text-text-primary mb-3",
351
- children: "Special Instructions"
352
- }), /* @__PURE__ */ F("div", {
353
- className: "rounded-md bg-status-warning-bg/10 border border-status-warning-border/20 p-4",
354
- children: /* @__PURE__ */ I("p", {
355
- className: "text-sm text-status-warning-text flex items-start gap-2",
356
- children: [/* @__PURE__ */ F(u, { className: "h-4 w-4 shrink-0 mt-0.5 text-status-warning-text" }), w.specialInstructions]
357
- })
358
- })]
359
- }),
360
- w.photos && w.photos.length > 0 && /* @__PURE__ */ I("div", {
361
- className: "rounded-lg border border-border-seam bg-bg-surface p-6",
362
- children: [/* @__PURE__ */ I("h3", {
363
- className: "text-base font-semibold text-text-primary flex items-center gap-2 mb-3",
364
- children: [/* @__PURE__ */ F(p, { className: "h-4 w-4 text-text-secondary" }), "Reference Photos"]
365
- }), /* @__PURE__ */ F("div", {
366
- className: "grid grid-cols-2 md:grid-cols-3 gap-3",
367
- children: w.photos.map((e, t) => /* @__PURE__ */ F("img", {
368
- src: e,
369
- alt: `Reference ${t + 1}`,
370
- className: "w-full h-32 object-cover rounded-lg border border-border-seam"
371
- }, t))
372
- })]
373
- }),
374
- /* @__PURE__ */ I("div", {
375
- className: "rounded-lg border border-border-seam bg-bg-surface p-6",
376
- children: [
377
- /* @__PURE__ */ I("h3", {
378
- className: "text-base font-semibold text-text-primary flex items-center gap-2 mb-3",
379
- children: [/* @__PURE__ */ F(A, { className: "h-4 w-4 text-text-secondary" }), "Task Notes"]
380
- }),
381
- /* @__PURE__ */ F("textarea", {
382
- value: G,
383
- onChange: (e) => K(e.target.value),
384
- placeholder: "Add your notes about this task...",
385
- rows: 4,
386
- className: "w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-status-info-border/40 resize-none"
387
- }),
388
- /* @__PURE__ */ I("button", {
389
- type: "button",
390
- onClick: Q,
391
- className: "mt-3 inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
392
- children: [/* @__PURE__ */ F(D, { className: "h-3.5 w-3.5" }), "Save Notes"]
393
- })
394
- ]
395
- })
396
- ]
397
- }), /* @__PURE__ */ I("div", {
398
- className: "space-y-6",
399
- children: [
400
- /* @__PURE__ */ I("div", {
401
- className: "rounded-lg border border-border-seam bg-bg-surface p-5",
402
- children: [/* @__PURE__ */ F("h3", {
403
- className: "text-base font-semibold text-text-primary mb-3",
404
- children: "Task Details"
405
- }), /* @__PURE__ */ I("div", {
406
- className: "space-y-3",
407
- children: [
408
- /* @__PURE__ */ I("div", {
409
- className: "flex items-center gap-2",
410
- children: [/* @__PURE__ */ F(y, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
411
- className: "text-xs text-text-secondary",
412
- children: "Order ID"
413
- }), /* @__PURE__ */ F("p", {
414
- className: "text-sm font-medium font-mono text-text-primary",
415
- children: w.orderId
416
- })] })]
417
- }),
418
- /* @__PURE__ */ I("div", {
419
- className: "flex items-center gap-2",
420
- children: [/* @__PURE__ */ F(O, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
421
- className: "text-xs text-text-secondary",
422
- children: "Cart"
423
- }), /* @__PURE__ */ F("p", {
424
- className: "text-sm font-medium text-text-primary",
425
- children: w.cartName
426
- })] })]
427
- }),
428
- /* @__PURE__ */ I("div", {
429
- className: "flex items-center gap-2",
430
- children: [/* @__PURE__ */ F(v, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
431
- className: "text-xs text-text-secondary",
432
- children: "Due At"
433
- }), /* @__PURE__ */ F("p", {
434
- className: "text-sm text-text-primary",
435
- children: a(w.dueTime)
436
- })] })]
437
- }),
438
- /* @__PURE__ */ I("div", {
439
- className: "flex items-center gap-2",
440
- children: [/* @__PURE__ */ F(b, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
441
- className: "text-xs text-text-secondary",
442
- children: "Earnings"
443
- }), /* @__PURE__ */ F("p", {
444
- className: "text-sm font-medium text-status-success-text",
445
- children: ee(w.earnings, { minimumFractionDigits: 0 })
446
- })] })]
447
- }),
448
- w.distance != null && /* @__PURE__ */ I("div", {
449
- className: "flex items-center gap-2",
450
- children: [/* @__PURE__ */ F(C, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
451
- className: "text-xs text-text-secondary",
452
- children: "Distance"
453
- }), /* @__PURE__ */ I("p", {
454
- className: "text-sm text-text-primary",
455
- children: [w.distance, " km"]
456
- })] })]
457
- }),
458
- /* @__PURE__ */ I("div", {
459
- className: "flex items-center gap-2",
460
- children: [/* @__PURE__ */ F(v, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
461
- className: "text-xs text-text-secondary",
462
- children: "Assigned At"
463
- }), /* @__PURE__ */ F("p", {
464
- className: "text-sm text-text-primary",
465
- children: a(w.assignedTime)
466
- })] })]
467
- })
468
- ]
469
- })]
470
- }),
471
- /* @__PURE__ */ I("div", {
472
- className: "rounded-lg border border-border-seam bg-bg-surface p-5",
473
- children: [/* @__PURE__ */ F("h3", {
474
- className: "text-base font-semibold text-text-primary mb-4",
475
- children: "Status Timeline"
476
- }), /* @__PURE__ */ F("div", {
477
- className: "relative",
478
- children: $.map((e, n) => {
479
- let r = n === $.length - 1, i = e.completed ? m : g;
480
- return /* @__PURE__ */ I("div", {
481
- className: "flex gap-3",
482
- children: [/* @__PURE__ */ I("div", {
483
- className: "flex flex-col items-center",
484
- children: [/* @__PURE__ */ F("div", {
485
- className: t("flex h-7 w-7 shrink-0 items-center justify-center rounded-full", e.completed ? "bg-status-success-bg/10 text-status-success-text" : "bg-bg-sunken text-text-secondary"),
486
- children: /* @__PURE__ */ F(i, { className: "h-3.5 w-3.5" })
487
- }), !r && /* @__PURE__ */ F("div", { className: t("w-0.5 flex-1 my-1", e.completed ? "bg-status-success-bg/30" : "bg-border") })]
488
- }), /* @__PURE__ */ I("div", {
489
- className: t("pb-5", r && "pb-0"),
490
- children: [/* @__PURE__ */ F("p", {
491
- className: "text-sm font-medium text-text-primary",
492
- children: e.label
493
- }), /* @__PURE__ */ F("p", {
494
- className: "mt-0.5 text-xs text-text-secondary",
495
- children: e.timestamp ? a(e.timestamp) : "Pending"
496
- })]
497
- })]
498
- }, e.status);
499
- })
500
- })]
501
- }),
502
- /* @__PURE__ */ I("div", {
503
- className: "space-y-3",
504
- children: [
505
- w.status === "pending" && /* @__PURE__ */ I("button", {
506
- type: "button",
507
- onClick: J,
508
- className: "w-full inline-flex items-center justify-center gap-2 rounded-lg bg-status-info-bg/10 px-4 py-3 text-sm font-medium text-status-info-text hover:bg-status-info-bg/20 transition-colors",
509
- children: [/* @__PURE__ */ F(E, { className: "h-4 w-4" }), "Start Task"]
510
- }),
511
- w.status === "in_progress" && /* @__PURE__ */ I("button", {
512
- type: "button",
513
- onClick: Y,
514
- className: "w-full inline-flex items-center justify-center gap-2 rounded-lg bg-status-success-bg/10 px-4 py-3 text-sm font-medium text-status-success-text hover:bg-status-success-bg/20 transition-colors",
515
- children: [/* @__PURE__ */ F(m, { className: "h-4 w-4" }), "Complete Task"]
516
- }),
517
- /* @__PURE__ */ I("button", {
518
- type: "button",
519
- onClick: () => h("/worker/orders"),
520
- className: "w-full inline-flex items-center justify-center gap-2 rounded-lg bg-accent px-4 py-3 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors",
521
- children: [/* @__PURE__ */ F(d, { className: "h-4 w-4" }), "Back to Tasks"]
522
- })
523
- ]
524
- })
525
- ]
526
- })]
527
- })
528
- ]
529
- })
530
- });
531
- }
532
- //#endregion
533
- export { W as TaskDetailsPage };
534
-
535
- //# sourceMappingURL=TaskDetailsPage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TaskDetailsPage.js","names":[],"sources":["../../../../src/subscriberbot/pages/worker/TaskDetailsPage.tsx"],"sourcesContent":["/**\n * Task Details Page\n *\n * Full-featured task details page with:\n * - Loading state with spinner\n * - Notes section: textarea for adding worker notes + Save Notes button\n * - Reference Photos grid display\n * - Special Instructions section with yellow warning-style card\n * - Start Task / Complete Task action buttons with state changes\n * - Call Customer button linking to tel:\n * - Navigate to Location button opening Google Maps\n * - Due time warning banner\n * - Task type icon display\n * - Status and priority badges\n * - Order items with special instructions per item\n * - Full delivery address\n * - Status timeline\n *\n * @module subscriberbot/pages/worker\n */\n\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n ClipboardList,\n Package,\n Phone,\n MapPin,\n Clock,\n IndianRupee,\n Navigation,\n CheckCircle2,\n Circle,\n PlayCircle,\n ShoppingBag,\n User,\n AlertTriangle,\n FileText,\n Loader2,\n Truck,\n ChefHat,\n Boxes,\n Sparkles,\n Camera,\n StickyNote,\n Save,\n Timer,\n} from 'lucide-react';\nimport { PagePurpose, NextSteps, EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useSubscriberBot } from '../../context/SubscriberBotContext';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\nimport type { TaskStatus } from '../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface TaskOrderItem {\n name: string;\n quantity: number;\n specialInstructions?: string;\n}\n\ninterface TaskCustomerInfo {\n name: string;\n phone: string;\n address: string;\n}\n\ninterface TaskDetails {\n id: string;\n orderId: string;\n cartId: string;\n cartName: string;\n type: 'delivery' | 'preparation' | 'inventory' | 'cleanup' | 'service' | 'pickup';\n status: TaskStatus;\n priority: 'high' | 'medium' | 'low' | 'urgent';\n title: string;\n description: string;\n estimatedTime: number;\n assignedBy: string;\n assignedTime: string;\n dueTime: string;\n location?: string;\n earnings: number;\n distance?: number;\n customerInfo: TaskCustomerInfo;\n orderItems: TaskOrderItem[];\n specialInstructions?: string;\n photos?: string[];\n notes?: string;\n}\n\ninterface TimelineEvent {\n status: string;\n label: string;\n timestamp: string | null;\n completed: boolean;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getTaskTypeIcon(type: string) {\n switch (type) {\n case 'delivery':\n return Truck;\n case 'preparation':\n return ChefHat;\n case 'inventory':\n return Boxes;\n case 'cleanup':\n return Sparkles;\n case 'pickup':\n return ShoppingBag;\n case 'service':\n return Package;\n default:\n return FileText;\n }\n}\n\nfunction getPriorityStyle(priority: string): string {\n switch (priority) {\n case 'urgent':\n return 'bg-status-error-bg/20 text-status-error-text';\n case 'high':\n return 'bg-status-warning-bg/20 text-status-warning-text';\n case 'medium':\n return 'bg-status-warning-bg/20 text-status-warning-text';\n case 'low':\n return 'bg-status-success-bg/20 text-status-success-text';\n default:\n return 'bg-secondary text-secondary-foreground';\n }\n}\n\nfunction buildTimeline(task: TaskDetails): TimelineEvent[] {\n const assignedTs = task.assignedTime;\n const inProgressTs =\n task.status === 'in_progress' || task.status === 'completed'\n ? new Date(new Date(assignedTs).getTime() + 15 * 60000).toISOString()\n : null;\n const completedTs = task.status === 'completed' ? new Date().toISOString() : null;\n\n return [\n { status: 'assigned', label: 'Task Assigned', timestamp: assignedTs, completed: true },\n {\n status: 'in_progress',\n label: 'Work Started',\n timestamp: inProgressTs,\n completed: task.status === 'in_progress' || task.status === 'completed',\n },\n {\n status: 'completed',\n label: 'Task Completed',\n timestamp: completedTs,\n completed: task.status === 'completed',\n },\n ];\n}\n\nfunction formatTime(dateString: string): string {\n return new Date(dateString).toLocaleTimeString('en-IN', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function TaskDetailsPage() {\n const { taskId } = useParams<{ taskId: string }>();\n const { navigateTo } = useSubscriberBot();\n const [task, setTask] = useState<TaskDetails | null>(null);\n const [loading, setLoading] = useState(true);\n const [notes, setNotes] = useState('');\n\n const loadTask = useCallback(() => {\n setLoading(true);\n setTimeout(() => {\n const mockTask: TaskDetails = {\n id: taskId || 'TASK-001',\n orderId: 'ORD-123',\n cartId: 'cart-001',\n cartName: 'South Indian Express',\n type: 'delivery',\n status: 'pending',\n priority: 'high',\n title: 'Deliver Order #ORD-123',\n description: 'Deliver 2x Masala Dosa, 1x Filter Coffee to customer at Koramangala',\n estimatedTime: 25,\n assignedBy: 'Cart Manager',\n assignedTime: new Date(Date.now() - 5 * 60 * 1000).toISOString(),\n dueTime: new Date(Date.now() + 30 * 60 * 1000).toISOString(),\n location: 'Koramangala 5th Block',\n earnings: 95,\n distance: 3.5,\n customerInfo: {\n name: 'Rahul Sharma',\n phone: '+91-98765-43210',\n address: '123, MG Road, Near Central Mall, Koramangala 5th Block, Bangalore - 560034',\n },\n orderItems: [\n { name: 'Masala Dosa', quantity: 2, specialInstructions: 'Extra spicy' },\n { name: 'Filter Coffee', quantity: 1, specialInstructions: 'Less sugar' },\n ],\n specialInstructions: 'Please call before delivery. Customer prefers contactless delivery.',\n photos: [\n 'https://images.unsplash.com/photo-1630384060421-cb20d0e0649d?w=400',\n 'https://images.unsplash.com/photo-1572802419224-296b0aeee0d9?w=400',\n ],\n notes: '',\n };\n setTask(mockTask);\n setNotes(mockTask.notes || '');\n setLoading(false);\n }, 600);\n }, [taskId]);\n\n useEffect(() => {\n loadTask();\n }, [loadTask]);\n\n const handleStartTask = () => {\n if (task) {\n setTask({ ...task, status: 'in_progress' });\n alert('Task started successfully');\n }\n };\n\n const handleCompleteTask = () => {\n if (task) {\n setTask({ ...task, status: 'completed' });\n alert('Task completed successfully');\n }\n };\n\n const handleCallCustomer = () => {\n if (task?.customerInfo?.phone) {\n window.location.href = `tel:${task.customerInfo.phone.replace(/\\s/g, '')}`;\n }\n };\n\n const handleNavigateToLocation = () => {\n if (task?.customerInfo?.address) {\n const encoded = encodeURIComponent(task.customerInfo.address);\n window.open(`https://maps.google.com?q=${encoded}`, '_blank');\n }\n };\n\n const handleSaveNotes = () => {\n if (task) {\n setTask({ ...task, notes });\n alert('Notes saved successfully');\n }\n };\n\n const timeline = useMemo(() => (task ? buildTimeline(task) : []), [task]);\n\n // Loading state\n if (loading) {\n return (\n <PageLayout title=\"Task Details\">\n <div className=\"flex items-center justify-center py-24\">\n <div className=\"text-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mx-auto mb-4\" />\n <p className=\"text-sm text-text-secondary\">Loading task details...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n // Not found\n if (!task) {\n return (\n <PageLayout title=\"Task Not Found\">\n <EmptyState\n illustration=\"empty-generic\"\n icon={<FileText className=\"h-12 w-12\" />}\n title=\"Task not found\"\n description={`No task found with ID \"${taskId}\".`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"rounded-lg bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n View All Orders\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n const TaskTypeIcon = getTaskTypeIcon(task.type);\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\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>Task Details</span>\n </div>\n }\n description=\"Manage and track your assigned task\"\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<ClipboardList className=\"h-4 w-4\" />}>\n Everything you need to complete one assigned task. See what's being asked, where\n to go and who to contact, then work it through its stages — start it when you\n begin, log notes as you go, and mark it complete when you're done. Keeping the\n status current lets the customer and your cart owner track progress in real time.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"subscriberbot-task-details\"\n steps={[\n {\n id: 'start-task',\n label: 'Start this task',\n description: 'Mark it in progress so everyone knows you are on it.',\n icon: <PlayCircle className=\"h-4 w-4\" />,\n onClick: handleStartTask,\n },\n {\n id: 'navigate',\n label: 'Navigate to the location',\n description: 'Get directions to the customer or pickup point.',\n icon: <Navigation className=\"h-4 w-4\" />,\n onClick: handleNavigateToLocation,\n },\n {\n id: 'call-customer',\n label: 'Call the customer',\n description: 'Confirm details or let them know your ETA.',\n icon: <Phone className=\"h-4 w-4\" />,\n onClick: handleCallCustomer,\n },\n {\n id: 'complete-task',\n label: 'Mark it complete',\n description: 'Wrap up and log the task once finished.',\n icon: <CheckCircle2 className=\"h-4 w-4\" />,\n onClick: handleCompleteTask,\n },\n ]}\n />\n\n {/* Task Header Card — the ONE emphasis zone */}\n <EmphasisPanel>\n <div className=\"flex items-start justify-between mb-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-bg-sunken\">\n <TaskTypeIcon className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div>\n <h2 className=\"text-xl font-bold text-text-primary\">{task.title}</h2>\n <p className=\"text-sm text-text-secondary mt-1\">{task.description}</p>\n <div className=\"flex flex-wrap items-center gap-2 mt-3\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium uppercase',\n getPriorityStyle(task.priority)\n )}\n >\n {task.priority}\n </span>\n <StatusBadge status={task.status} />\n <span className=\"text-xs text-text-secondary flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {task.estimatedTime} min\n </span>\n </div>\n </div>\n </div>\n <div className=\"text-right shrink-0\">\n <p className=\"text-xs text-text-secondary\">Assigned by</p>\n <p className=\"text-sm font-medium text-text-primary\">{task.assignedBy}</p>\n <p className=\"text-xs text-text-secondary mt-1\">{formatTime(task.assignedTime)}</p>\n </div>\n </div>\n\n {/* Due Time Warning Banner */}\n {task.dueTime && task.status !== 'completed' && (\n <div className=\"rounded-md bg-status-warning-bg/10 border border-status-warning-border/20 p-3\">\n <div className=\"flex items-center gap-2\">\n <Timer className=\"h-4 w-4 text-status-warning-text shrink-0\" />\n <span className=\"text-xs font-medium text-status-warning-text\">\n Due by {formatTime(task.dueTime)}\n </span>\n </div>\n </div>\n )}\n </EmphasisPanel>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Left Column */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Customer Information */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary mb-4\">\n Customer Information\n </h3>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-5\">\n <div>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-bg-sunken text-text-secondary\">\n <User className=\"h-5 w-5\" />\n </div>\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {task.customerInfo.name}\n </p>\n <p className=\"text-xs text-text-secondary\">{task.customerInfo.phone}</p>\n </div>\n </div>\n </div>\n <div className=\"flex gap-2 mt-4\">\n <button\n type=\"button\"\n onClick={handleCallCustomer}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call Customer\n </button>\n <button\n type=\"button\"\n onClick={handleNavigateToLocation}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n </div>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary mb-2\">Delivery Address</p>\n <div className=\"rounded-md bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-primary flex items-start gap-2\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0 mt-0.5 text-text-secondary\" />\n {task.customerInfo.address}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Order Items */}\n {task.orderItems.length > 0 && (\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Order Items</h3>\n <div className=\"space-y-2\">\n {task.orderItems.map((item, index) => (\n <div\n key={index}\n className=\"flex items-start justify-between p-3 rounded-md bg-bg-sunken/50\"\n >\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {item.quantity}x {item.name}\n </p>\n {item.specialInstructions && (\n <p className=\"text-xs text-text-secondary mt-0.5\">\n Note: {item.specialInstructions}\n </p>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Special Instructions */}\n {task.specialInstructions && (\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">\n Special Instructions\n </h3>\n <div className=\"rounded-md bg-status-warning-bg/10 border border-status-warning-border/20 p-4\">\n <p className=\"text-sm text-status-warning-text flex items-start gap-2\">\n <AlertTriangle className=\"h-4 w-4 shrink-0 mt-0.5 text-status-warning-text\" />\n {task.specialInstructions}\n </p>\n </div>\n </div>\n )}\n\n {/* Reference Photos */}\n {task.photos && task.photos.length > 0 && (\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Camera className=\"h-4 w-4 text-text-secondary\" />\n Reference Photos\n </h3>\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-3\">\n {task.photos.map((photo, index) => (\n <img\n key={index}\n src={photo}\n alt={`Reference ${index + 1}`}\n className=\"w-full h-32 object-cover rounded-lg border border-border-seam\"\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Task Notes */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-base font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <StickyNote className=\"h-4 w-4 text-text-secondary\" />\n Task Notes\n </h3>\n <textarea\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n placeholder=\"Add your notes about this task...\"\n rows={4}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-status-info-border/40 resize-none\"\n />\n <button\n type=\"button\"\n onClick={handleSaveNotes}\n className=\"mt-3 inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Save className=\"h-3.5 w-3.5\" />\n Save Notes\n </button>\n </div>\n </div>\n\n {/* Right Sidebar */}\n <div className=\"space-y-6\">\n {/* Task Details */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Task Details</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <FileText className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Order ID</p>\n <p className=\"text-sm font-medium font-mono text-text-primary\">\n {task.orderId}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <ShoppingBag className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Cart</p>\n <p className=\"text-sm font-medium text-text-primary\">{task.cartName}</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\">Due At</p>\n <p className=\"text-sm text-text-primary\">{formatDate(task.dueTime)}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <IndianRupee className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Earnings</p>\n <p className=\"text-sm font-medium text-status-success-text\">\n {formatCurrency(task.earnings, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n {task.distance != null && (\n <div className=\"flex items-center gap-2\">\n <Navigation className=\"h-4 w-4 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Distance</p>\n <p className=\"text-sm text-text-primary\">{task.distance} km</p>\n </div>\n </div>\n )}\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\">Assigned At</p>\n <p className=\"text-sm text-text-primary\">{formatDate(task.assignedTime)}</p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Status Timeline */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-4\">Status Timeline</h3>\n <div className=\"relative\">\n {timeline.map((event, index) => {\n const isLast = index === timeline.length - 1;\n const Icon = event.completed ? CheckCircle2 : Circle;\n\n return (\n <div key={event.status} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div\n className={cn(\n 'flex h-7 w-7 shrink-0 items-center justify-center rounded-full',\n event.completed\n ? 'bg-status-success-bg/10 text-status-success-text'\n : 'bg-bg-sunken text-text-secondary'\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </div>\n {!isLast && (\n <div\n className={cn(\n 'w-0.5 flex-1 my-1',\n event.completed ? 'bg-status-success-bg/30' : 'bg-border'\n )}\n />\n )}\n </div>\n <div className={cn('pb-5', 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 */}\n <div className=\"space-y-3\">\n {task.status === 'pending' && (\n <button\n type=\"button\"\n onClick={handleStartTask}\n className=\"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-status-info-bg/10 px-4 py-3 text-sm font-medium text-status-info-text hover:bg-status-info-bg/20 transition-colors\"\n >\n <PlayCircle className=\"h-4 w-4\" />\n Start Task\n </button>\n )}\n {task.status === 'in_progress' && (\n <button\n type=\"button\"\n onClick={handleCompleteTask}\n className=\"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-status-success-bg/10 px-4 py-3 text-sm font-medium text-status-success-text hover:bg-status-success-bg/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-4 w-4\" />\n Complete Task\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-accent px-4 py-3 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Tasks\n </button>\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;AA6GA,SAAS,EAAgB,GAAc;AACrC,SAAQ,GAAR;EACE,KAAK,WACH,QAAO;EACT,KAAK,cACH,QAAO;EACT,KAAK,YACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,EAAiB,GAA0B;AAClD,SAAQ,GAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,MACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,EAAc,GAAoC;CACzD,IAAM,IAAa,EAAK,cAClB,IACJ,EAAK,WAAW,iBAAiB,EAAK,WAAW,cAC7C,IAAI,KAAK,IAAI,KAAK,EAAW,CAAC,SAAS,GAAG,KAAK,IAAM,CAAC,aAAa,GACnE,MACA,IAAc,EAAK,WAAW,+BAAc,IAAI,MAAM,EAAC,aAAa,GAAG;AAE7E,QAAO;EACL;GAAE,QAAQ;GAAY,OAAO;GAAiB,WAAW;GAAY,WAAW;GAAM;EACtF;GACE,QAAQ;GACR,OAAO;GACP,WAAW;GACX,WAAW,EAAK,WAAW,iBAAiB,EAAK,WAAW;GAC7D;EACD;GACE,QAAQ;GACR,OAAO;GACP,WAAW;GACX,WAAW,EAAK,WAAW;GAC5B;EACF;;AAGH,SAAS,EAAW,GAA4B;AAC9C,QAAO,IAAI,KAAK,EAAW,CAAC,mBAAmB,SAAS;EACtD,MAAM;EACN,QAAQ;EACR,QAAQ;EACT,CAAC;;AAOJ,SAAgB,IAAkB;CAChC,IAAM,EAAE,cAAW,GAA+B,EAC5C,EAAE,kBAAe,GAAkB,EACnC,CAAC,GAAM,KAAW,EAA6B,KAAK,EACpD,CAAC,GAAS,KAAc,EAAS,GAAK,EACtC,CAAC,GAAO,KAAY,EAAS,GAAG,EAEhC,IAAW,QAAkB;AAEjC,EADA,EAAW,GAAK,EAChB,iBAAiB;GACf,IAAM,IAAwB;IAC5B,IAAI,KAAU;IACd,SAAS;IACT,QAAQ;IACR,UAAU;IACV,MAAM;IACN,QAAQ;IACR,UAAU;IACV,OAAO;IACP,aAAa;IACb,eAAe;IACf,YAAY;IACZ,+BAAc,IAAI,KAAK,KAAK,KAAK,GAAG,MAAS,IAAK,EAAC,aAAa;IAChE,SAAS,IAAI,KAAK,KAAK,KAAK,GAAG,OAAU,IAAK,CAAC,aAAa;IAC5D,UAAU;IACV,UAAU;IACV,UAAU;IACV,cAAc;KACZ,MAAM;KACN,OAAO;KACP,SAAS;KACV;IACD,YAAY,CACV;KAAE,MAAM;KAAe,UAAU;KAAG,qBAAqB;KAAe,EACxE;KAAE,MAAM;KAAiB,UAAU;KAAG,qBAAqB;KAAc,CAC1E;IACD,qBAAqB;IACrB,QAAQ,CACN,sEACA,qEACD;IACD,OAAO;IACR;AAGD,GAFA,EAAQ,EAAS,EACjB,EAAS,EAAS,SAAS,GAAG,EAC9B,EAAW,GAAM;KAChB,IAAI;IACN,CAAC,EAAO,CAAC;AAEZ,SAAgB;AACd,KAAU;IACT,CAAC,EAAS,CAAC;CAEd,IAAM,UAAwB;AAC5B,EAAI,MACF,EAAQ;GAAE,GAAG;GAAM,QAAQ;GAAe,CAAC,EAC3C,MAAM,4BAA4B;IAIhC,UAA2B;AAC/B,EAAI,MACF,EAAQ;GAAE,GAAG;GAAM,QAAQ;GAAa,CAAC,EACzC,MAAM,8BAA8B;IAIlC,UAA2B;AAC/B,EAAI,GAAM,cAAc,UACtB,OAAO,SAAS,OAAO,OAAO,EAAK,aAAa,MAAM,QAAQ,OAAO,GAAG;IAItE,UAAiC;AACrC,MAAI,GAAM,cAAc,SAAS;GAC/B,IAAM,IAAU,mBAAmB,EAAK,aAAa,QAAQ;AAC7D,UAAO,KAAK,6BAA6B,KAAW,SAAS;;IAI3D,UAAwB;AAC5B,EAAI,MACF,EAAQ;GAAE,GAAG;GAAM;GAAO,CAAC,EAC3B,MAAM,2BAA2B;IAI/B,IAAW,QAAe,IAAO,EAAc,EAAK,GAAG,EAAE,EAAG,CAAC,EAAK,CAAC;AAGzE,KAAI,EACF,QACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAS,WAAU,2DAA4D,CAAA,EAC/E,kBAAC,KAAD;KAAG,WAAU;eAA8B;KAA2B,CAAA,CAClE;;GACF,CAAA;EACK,CAAA;AAKjB,KAAI,CAAC,EACH,QACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD;GACE,cAAa;GACb,MAAM,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA;GACxC,OAAM;GACN,aAAa,0BAA0B,EAAO;GAC9C,QACE,kBAAC,UAAD;IACE,MAAK;IACL,eAAe,EAAW,iBAAiB;IAC3C,WAAU;cACX;IAEQ,CAAA;GAEX,CAAA;EACS,CAAA;CAIjB,IAAM,KAAe,EAAgB,EAAK,KAAK;AAE/C,QACE,kBAAC,GAAD;EACE,OACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,UAAD;IACE,MAAK;IACL,eAAe,EAAW,iBAAiB;IAC3C,WAAU;cAEV,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;IAC1B,CAAA,EACT,kBAAC,QAAD,EAAA,UAAM,gBAAmB,CAAA,CACrB;;EAER,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KAAa,MAAM,kBAAC,GAAD,EAAe,WAAU,WAAY,CAAA;eAAE;KAK5C,CAAA;IAEd,kBAAC,GAAD;KACE,YAAW;KACX,OAAO;MACL;OACE,IAAI;OACJ,OAAO;OACP,aAAa;OACb,MAAM,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;OACxC,SAAS;OACV;MACD;OACE,IAAI;OACJ,OAAO;OACP,aAAa;OACb,MAAM,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;OACxC,SAAS;OACV;MACD;OACE,IAAI;OACJ,OAAO;OACP,aAAa;OACb,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;OACnC,SAAS;OACV;MACD;OACE,IAAI;OACJ,OAAO;OACP,aAAa;OACb,MAAM,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;OAC1C,SAAS;OACV;MACF;KACD,CAAA;IAGF,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,IAAD,EAAc,WAAU,+BAAgC,CAAA;OACpD,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA;OACE,kBAAC,MAAD;QAAI,WAAU;kBAAuC,EAAK;QAAW,CAAA;OACrE,kBAAC,KAAD;QAAG,WAAU;kBAAoC,EAAK;QAAgB,CAAA;OACtE,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,QAAD;UACE,WAAW,EACT,qFACA,EAAiB,EAAK,SAAS,CAChC;oBAEA,EAAK;UACD,CAAA;SACP,kBAAC,GAAD,EAAa,QAAQ,EAAK,QAAU,CAAA;SACpC,kBAAC,QAAD;UAAM,WAAU;oBAAhB;WACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;WAC5B,EAAK;WAAc;WACf;;SACH;;OACF,EAAA,CAAA,CACF;SACN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAe,CAAA;OAC1D,kBAAC,KAAD;QAAG,WAAU;kBAAyC,EAAK;QAAe,CAAA;OAC1E,kBAAC,KAAD;QAAG,WAAU;kBAAoC,EAAW,EAAK,aAAa;QAAK,CAAA;OAC/E;QACF;QAGL,EAAK,WAAW,EAAK,WAAW,eAC/B,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,6CAA8C,CAAA,EAC/D,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CAA+D,WACrD,EAAW,EAAK,QAAQ,CAC3B;SACH;;KACF,CAAA,CAEM,EAAA,CAAA;IAEhB,kBAAC,OAAD;KAAK,WAAU;eAAf,CAEE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OAEE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAE1D,CAAA,EACL,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,OAAD;YAAK,WAAU;sBACb,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;YACxB,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBACV,EAAK,aAAa;YACjB,CAAA,EACJ,kBAAC,KAAD;YAAG,WAAU;sBAA+B,EAAK,aAAa;YAAU,CAAA,CACpE,EAAA,CAAA,CACF;;UACF,CAAA,EACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,UAAD;WACE,MAAK;WACL,SAAS;WACT,WAAU;qBAHZ,CAKE,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA,EAAA,gBAE1B;cACT,kBAAC,UAAD;WACE,MAAK;WACL,SAAS;WACT,WAAU;qBAHZ,CAKE,kBAAC,GAAD,EAAY,WAAU,eAAgB,CAAA,EAAA,WAE/B;aACL;YACF,EAAA,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;UAAG,WAAU;oBAAmC;UAAoB,CAAA,EACpE,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,KAAD;WAAG,WAAU;qBAAb,CACE,kBAAC,GAAD,EAAQ,WAAU,mDAAoD,CAAA,EACrE,EAAK,aAAa,QACjB;;UACA,CAAA,CACF,EAAA,CAAA,CACF;WACF;;OAGL,EAAK,WAAW,SAAS,KACxB,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAAgB,CAAA,EAC/E,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAK,WAAW,KAAK,GAAM,MAC1B,kBAAC,OAAD;UAEE,WAAU;oBAEV,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAK;YAAS;YAAG,EAAK;YACrB;cACH,EAAK,uBACJ,kBAAC,KAAD;WAAG,WAAU;qBAAb,CAAkD,UACzC,EAAK,oBACV;aAEF,EAAA,CAAA;UACF,EAbC,EAaD,CACN;SACE,CAAA,CACF;;OAIP,EAAK,uBACJ,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAE1D,CAAA,EACL,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,KAAD;UAAG,WAAU;oBAAb,CACE,kBAAC,GAAD,EAAe,WAAU,oDAAqD,CAAA,EAC7E,EAAK,oBACJ;;SACA,CAAA,CACF;;OAIP,EAAK,UAAU,EAAK,OAAO,SAAS,KACnC,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAd,CACE,kBAAC,GAAD,EAAQ,WAAU,+BAAgC,CAAA,EAAA,mBAE/C;YACL,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAK,OAAO,KAAK,GAAO,MACvB,kBAAC,OAAD;UAEE,KAAK;UACL,KAAK,aAAa,IAAQ;UAC1B,WAAU;UACV,EAJK,EAIL,CACF;SACE,CAAA,CACF;;OAIR,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,MAAD;UAAI,WAAU;oBAAd,CACE,kBAAC,GAAD,EAAY,WAAU,+BAAgC,CAAA,EAAA,aAEnD;;SACL,kBAAC,YAAD;UACE,OAAO;UACP,WAAW,MAAM,EAAS,EAAE,OAAO,MAAM;UACzC,aAAY;UACZ,MAAM;UACN,WAAU;UACV,CAAA;SACF,kBAAC,UAAD;UACE,MAAK;UACL,SAAS;UACT,WAAU;oBAHZ,CAKE,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA,EAAA,aAEzB;;SACL;;OACF;SAGN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OAEE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAAiB,CAAA,EAChF,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,+BAAgC,CAAA,EACpD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAY,CAAA,EACvD,kBAAC,KAAD;YAAG,WAAU;sBACV,EAAK;YACJ,CAAA,CACA,EAAA,CAAA,CACF;;UACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,+BAAgC,CAAA,EACvD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAQ,CAAA,EACnD,kBAAC,KAAD;YAAG,WAAU;sBAAyC,EAAK;YAAa,CAAA,CACpE,EAAA,CAAA,CACF;;UACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,+BAAgC,CAAA,EACjD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAU,CAAA,EACrD,kBAAC,KAAD;YAAG,WAAU;sBAA6B,EAAW,EAAK,QAAQ;YAAK,CAAA,CACnE,EAAA,CAAA,CACF;;UACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,+BAAgC,CAAA,EACvD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAY,CAAA,EACvD,kBAAC,KAAD;YAAG,WAAU;sBACV,GAAe,EAAK,UAAU,EAAE,uBAAuB,GAAG,CAAC;YAC1D,CAAA,CACA,EAAA,CAAA,CACF;;UACL,EAAK,YAAY,QAChB,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAY,WAAU,+BAAgC,CAAA,EACtD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAY,CAAA,EACvD,kBAAC,KAAD;YAAG,WAAU;sBAAb,CAA0C,EAAK,UAAS,MAAO;cAC3D,EAAA,CAAA,CACF;;UAER,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,+BAAgC,CAAA,EACjD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;sBAA8B;YAAe,CAAA,EAC1D,kBAAC,KAAD;YAAG,WAAU;sBAA6B,EAAW,EAAK,aAAa;YAAK,CAAA,CACxE,EAAA,CAAA,CACF;;UACF;WACF;;OAGN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAiD;SAAoB,CAAA,EACnF,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAS,KAAK,GAAO,MAAU;UAC9B,IAAM,IAAS,MAAU,EAAS,SAAS,GACrC,IAAO,EAAM,YAAY,IAAe;AAE9C,iBACE,kBAAC,OAAD;WAAwB,WAAU;qBAAlC,CACE,kBAAC,OAAD;YAAK,WAAU;sBAAf,CACE,kBAAC,OAAD;aACE,WAAW,EACT,kEACA,EAAM,YACF,qDACA,mCACL;uBAED,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA;aAC5B,CAAA,EACL,CAAC,KACA,kBAAC,OAAD,EACE,WAAW,EACT,qBACA,EAAM,YAAY,4BAA4B,YAC/C,EACD,CAAA,CAEA;eACN,kBAAC,OAAD;YAAK,WAAW,EAAG,QAAQ,KAAU,OAAO;sBAA5C,CACE,kBAAC,KAAD;aAAG,WAAU;uBAAyC,EAAM;aAAU,CAAA,EACtE,kBAAC,KAAD;aAAG,WAAU;uBACV,EAAM,YAAY,EAAW,EAAM,UAAU,GAAG;aAC/C,CAAA,CACA;cACF;aA3BI,EAAM,OA2BV;WAER;SACE,CAAA,CACF;;OAGN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACG,EAAK,WAAW,aACf,kBAAC,UAAD;UACE,MAAK;UACL,SAAS;UACT,WAAU;oBAHZ,CAKE,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA,EAAA,aAE3B;;SAEV,EAAK,WAAW,iBACf,kBAAC,UAAD;UACE,MAAK;UACL,SAAS;UACT,WAAU;oBAHZ,CAKE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,EAAA,gBAE7B;;SAEX,kBAAC,UAAD;UACE,MAAK;UACL,eAAe,EAAW,iBAAiB;UAC3C,WAAU;oBAHZ,CAKE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAAA,gBAE1B;;SACL;;OACF;QACF;;IACF;;EACK,CAAA"}