@burdenoff/microfe-movethewheels 2026.703.1 → 2026.703.3

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 (72) hide show
  1. package/dist/{AIAssistantPage-C3ovZ0Fh.js → AIAssistantPage-C3cPsWt-.js} +1 -1
  2. package/dist/{AnalyticsPage-O8SpY-V4.js → AnalyticsPage-Dz6g2MvK.js} +6 -6
  3. package/dist/{CreateOrderPage-CB1_-_mN.js → CreateOrderPage-C5iwnjp4.js} +29 -58
  4. package/dist/CustomerDetailsPage-B6nwFyLO.js +406 -0
  5. package/dist/{CustomersPage-DRaLuHMC.js → CustomersPage-BKxMS1AV.js} +5 -5
  6. package/dist/{DashboardPage-DPjhNfKB.js → DashboardPage-BVjQi0EB.js} +11 -11
  7. package/dist/DriverDetailsPage-CN3WQ0B9.js +507 -0
  8. package/dist/{DriversPage-C2Bk0w4Q.js → DriversPage-CH9rjQC-.js} +6 -6
  9. package/dist/{FinancePage-lmp0Sdsw.js → FinancePage-DEDykSOP.js} +5 -5
  10. package/dist/{FleetPage-DZn5pIqd.js → FleetPage-DqkFi3s3.js} +5 -5
  11. package/dist/FormError-BlOjnXOq.js +15 -0
  12. package/dist/{ImportExportPage-BIUJZc7O.js → ImportExportPage-DKJRCezl.js} +1 -1
  13. package/dist/{InventoryPage-Cxh1zYJd.js → InventoryPage-e0ze63iX.js} +6 -6
  14. package/dist/{LiveTrackingPage-BY1yAkIt.js → LiveTrackingPage-DCX-K-LR.js} +5 -5
  15. package/dist/{MarketplacePage-RMuL17EA.js → MarketplacePage-CIQ97_zp.js} +1 -1
  16. package/dist/{OrderDetailsPage-C2Mf4KSy.js → OrderDetailsPage-DYiZ-9UK.js} +5 -5
  17. package/dist/{OrdersListPage-BrPBtnhp.js → OrdersListPage-Cn90P1Xx.js} +4 -4
  18. package/dist/ProductDetailsPage-C9uOiYLp.js +350 -0
  19. package/dist/{ProductsPage-I5DilIoY.js → ProductsPage-QJfHHpqB.js} +4 -4
  20. package/dist/{ReportsPage-BDXNmUng.js → ReportsPage-Zp53q3_8.js} +2 -2
  21. package/dist/RouteDetailsPage-DUStXSf9.js +531 -0
  22. package/dist/{RoutesPage-lqX9ylHP.js → RoutesPage-DMfoicM1.js} +3 -3
  23. package/dist/{SettingsPage-CQVIOaNs.js → SettingsPage-Bn-v0mbQ.js} +1 -1
  24. package/dist/{TrackingPage-BXrjz7V8.js → TrackingPage-W-jtdM3Y.js} +4 -4
  25. package/dist/VehicleDetailsPage-Bceo5oz3.js +410 -0
  26. package/dist/{VehiclesPage-6W39XT5W.js → VehiclesPage-ApKThYeG.js} +5 -5
  27. package/dist/WarehouseDetailsPage-L_6sWigM.js +493 -0
  28. package/dist/{WarehousesPage-CHvBqNaQ.js → WarehousesPage-DCbXXXWE.js} +3 -3
  29. package/dist/index.js +154 -138
  30. package/dist/trash-2-BKhar6Hs.js +32 -0
  31. package/dist/{useFleet-DiAC-IiH.js → useFleet-DKqXZ16m.js} +77 -56
  32. package/dist/{useInventory-DKoks37x.js → useInventory-DkyiVY_A.js} +73 -53
  33. package/dist/{useTracking-GJify4HN.js → useTracking-B-va1kO3.js} +2 -2
  34. package/package.json +1 -1
  35. package/src/movethewheels/MoveTheWheelsRoutes.tsx +4 -0
  36. package/src/movethewheels/components/FormError.tsx +25 -0
  37. package/src/movethewheels/hooks/useFleet.ts +107 -0
  38. package/src/movethewheels/hooks/useInventory.ts +107 -0
  39. package/src/movethewheels/pages/CustomerDetailsPage.tsx +153 -20
  40. package/src/movethewheels/pages/CustomersPage.tsx +1 -1
  41. package/src/movethewheels/pages/DriverDetailsPage.tsx +159 -2
  42. package/src/movethewheels/pages/DriversPage.tsx +6 -2
  43. package/src/movethewheels/pages/InventoryPage.tsx +1 -1
  44. package/src/movethewheels/pages/OrdersListPage.tsx +1 -1
  45. package/src/movethewheels/pages/ProductDetailsPage.tsx +146 -3
  46. package/src/movethewheels/pages/ProductsPage.tsx +6 -2
  47. package/src/movethewheels/pages/RouteDetailsPage.tsx +285 -25
  48. package/src/movethewheels/pages/VehicleDetailsPage.tsx +158 -2
  49. package/src/movethewheels/pages/VehiclesPage.tsx +6 -2
  50. package/src/movethewheels/pages/WarehouseDetailsPage.tsx +224 -2
  51. package/src/movethewheels/pages/WarehousesPage.tsx +5 -1
  52. package/dist/CustomerDetailsPage-BaeKEI1D.js +0 -263
  53. package/dist/DriverDetailsPage-CSSQTOzn.js +0 -328
  54. package/dist/ProductDetailsPage-CezzzZcj.js +0 -193
  55. package/dist/RouteDetailsPage-BcomL20M.js +0 -263
  56. package/dist/VehicleDetailsPage-DZjLcJgr.js +0 -218
  57. package/dist/WarehouseDetailsPage-C10pgRGW.js +0 -236
  58. /package/dist/{MetricCard-7aYgzZHK.js → MetricCard-BY0QrMD4.js} +0 -0
  59. /package/dist/{StatusBadge-NpTeHVlw.js → StatusBadge-BZurYHMy.js} +0 -0
  60. /package/dist/{formatters-DhKZ-eA1.js → formatters-CF2S2l1m.js} +0 -0
  61. /package/dist/{trending-up-B7W-GL6P.js → trending-up-Dohgd4t_.js} +0 -0
  62. /package/dist/{triangle-alert-BonHFFNz.js → triangle-alert-i-XQL9Rd.js} +0 -0
  63. /package/dist/{truck-DrlfSpRC.js → truck-C0v_hbLR.js} +0 -0
  64. /package/dist/{useAnalytics-CgdzUfY_.js → useAnalytics-DS8n0xgg.js} +0 -0
  65. /package/dist/{useCustomers-QrlozybF.js → useCustomers-BmTNGxiI.js} +0 -0
  66. /package/dist/{useImportExport-BLMnAKCC.js → useImportExport-DHr-SWSw.js} +0 -0
  67. /package/dist/{useOrders-D3UZVy8Y.js → useOrders-Cfk1GLiq.js} +0 -0
  68. /package/dist/{useReports-Puq4DCH9.js → useReports-CTqZr-AB.js} +0 -0
  69. /package/dist/{useRoutes-Do57LvRb.js → useRoutes-BQWO607N.js} +0 -0
  70. /package/dist/{user-CjSoudeu.js → user-jyFU3lXk.js} +0 -0
  71. /package/dist/{users-BAM4gHTn.js → users-DZ-ilS6B.js} +0 -0
  72. /package/dist/{warehouse-C7MSr47B.js → warehouse-6m5kXMLu.js} +0 -0
@@ -0,0 +1,507 @@
1
+ import { A as e, M as t, ct as n, d as r, f as i, g as a, h as o, i as s, j as c, l, n as u, ot as d, r as f, u as p } from "./PageLayout-D4LDHJJq.js";
2
+ import { t as m } from "./arrow-left-n48Y-Wis.js";
3
+ import { t as h } from "./clock-DJZtdl8u.js";
4
+ import { t as g } from "./dollar-sign-CgKQRz_e.js";
5
+ import { t as _ } from "./file-text-DWWY6_f5.js";
6
+ import { t as v } from "./map-pin-BGiCvyCs.js";
7
+ import { t as y } from "./save-CojywNhG.js";
8
+ import { t as b } from "./square-pen-CopE9GmB.js";
9
+ import { t as x } from "./star-nHlLjDKR.js";
10
+ import { t as S } from "./users-DZ-ilS6B.js";
11
+ import { r as C, t as w } from "./useFleet-DKqXZ16m.js";
12
+ import { r as T } from "./StatusBadge-BZurYHMy.js";
13
+ import { n as E, r as D } from "./formatters-CF2S2l1m.js";
14
+ import { t as O } from "./FormError-BlOjnXOq.js";
15
+ import { useState as k } from "react";
16
+ import { useParams as A } from "react-router-dom";
17
+ import { jsx as j, jsxs as M } from "react/jsx-runtime";
18
+ import { EmphasisPanel as N, NextSteps as P, PagePurpose as F } from "@burdenoff/fe-libs/ui";
19
+ //#region src/movethewheels/pages/DriverDetailsPage.tsx
20
+ function I() {
21
+ let { basePath: t, navigate: r } = d(), { createDriver: i } = C(), [a, o] = k({
22
+ employeeId: "",
23
+ firstName: "",
24
+ lastName: "",
25
+ email: "",
26
+ phone: "",
27
+ licenseNumber: ""
28
+ }), [l, u] = k(!1), [f, h] = k(null), g = () => r?.(n(t, "fleet/drivers")), _ = async (e) => {
29
+ if (e.preventDefault(), !a.employeeId.trim() || !a.firstName.trim() || !a.lastName.trim()) {
30
+ h("Employee ID, first name and last name are required.");
31
+ return;
32
+ }
33
+ u(!0), h(null);
34
+ try {
35
+ let e = await i({
36
+ employeeId: a.employeeId.trim(),
37
+ firstName: a.firstName.trim(),
38
+ lastName: a.lastName.trim(),
39
+ email: a.email.trim() || void 0,
40
+ phone: a.phone.trim() || void 0,
41
+ licenseNumber: a.licenseNumber.trim() || void 0
42
+ });
43
+ r?.(n(t, `fleet/drivers/${e.id}`));
44
+ } catch (e) {
45
+ console.error("Failed to create driver:", e), h(e instanceof Error ? e.message : "Failed to create driver. Please try again."), u(!1);
46
+ }
47
+ };
48
+ return /* @__PURE__ */ M(s, {
49
+ title: "Add Driver",
50
+ subtitle: "Add a driver to your workforce",
51
+ icon: /* @__PURE__ */ j(S, { size: 24 }),
52
+ headerActions: /* @__PURE__ */ M("div", {
53
+ className: "flex gap-2",
54
+ children: [/* @__PURE__ */ M(p, {
55
+ variant: "outline",
56
+ onClick: g,
57
+ disabled: l,
58
+ children: [/* @__PURE__ */ j(m, { size: 16 }), " Cancel"]
59
+ }), /* @__PURE__ */ M(p, {
60
+ onClick: _,
61
+ disabled: l,
62
+ children: [
63
+ /* @__PURE__ */ j(y, { size: 16 }),
64
+ " ",
65
+ l ? "Saving..." : "Add Driver"
66
+ ]
67
+ })]
68
+ }),
69
+ children: [/* @__PURE__ */ j(F, {
70
+ icon: /* @__PURE__ */ j(S, { size: 18 }),
71
+ children: "Add a driver so they can be assigned to orders and routes. An employee ID and name get them on the roster — add contact details and license number to keep the record complete."
72
+ }), /* @__PURE__ */ M("form", {
73
+ onSubmit: _,
74
+ className: "max-w-2xl space-y-6",
75
+ children: [/* @__PURE__ */ j(O, { message: f }), /* @__PURE__ */ M(N, { children: [/* @__PURE__ */ j("h2", {
76
+ className: "text-base font-semibold text-text-primary mb-4",
77
+ children: "Driver Details"
78
+ }), /* @__PURE__ */ M("div", {
79
+ className: "space-y-4",
80
+ children: [/* @__PURE__ */ M("div", {
81
+ className: "grid grid-cols-1 md:grid-cols-3 gap-4",
82
+ children: [
83
+ /* @__PURE__ */ M("div", {
84
+ className: "space-y-2",
85
+ children: [/* @__PURE__ */ M(c, {
86
+ htmlFor: "employeeId",
87
+ children: ["Employee ID ", /* @__PURE__ */ j("span", {
88
+ className: "text-status-error-text",
89
+ children: "*"
90
+ })]
91
+ }), /* @__PURE__ */ j(e, {
92
+ id: "employeeId",
93
+ value: a.employeeId,
94
+ onChange: (e) => o((t) => ({
95
+ ...t,
96
+ employeeId: e.target.value
97
+ })),
98
+ placeholder: "EMP-001",
99
+ required: !0
100
+ })]
101
+ }),
102
+ /* @__PURE__ */ M("div", {
103
+ className: "space-y-2",
104
+ children: [/* @__PURE__ */ M(c, {
105
+ htmlFor: "firstName",
106
+ children: ["First Name ", /* @__PURE__ */ j("span", {
107
+ className: "text-status-error-text",
108
+ children: "*"
109
+ })]
110
+ }), /* @__PURE__ */ j(e, {
111
+ id: "firstName",
112
+ value: a.firstName,
113
+ onChange: (e) => o((t) => ({
114
+ ...t,
115
+ firstName: e.target.value
116
+ })),
117
+ placeholder: "Jane",
118
+ required: !0
119
+ })]
120
+ }),
121
+ /* @__PURE__ */ M("div", {
122
+ className: "space-y-2",
123
+ children: [/* @__PURE__ */ M(c, {
124
+ htmlFor: "lastName",
125
+ children: ["Last Name ", /* @__PURE__ */ j("span", {
126
+ className: "text-status-error-text",
127
+ children: "*"
128
+ })]
129
+ }), /* @__PURE__ */ j(e, {
130
+ id: "lastName",
131
+ value: a.lastName,
132
+ onChange: (e) => o((t) => ({
133
+ ...t,
134
+ lastName: e.target.value
135
+ })),
136
+ placeholder: "Doe",
137
+ required: !0
138
+ })]
139
+ })
140
+ ]
141
+ }), /* @__PURE__ */ M("div", {
142
+ className: "grid grid-cols-1 md:grid-cols-3 gap-4",
143
+ children: [
144
+ /* @__PURE__ */ M("div", {
145
+ className: "space-y-2",
146
+ children: [/* @__PURE__ */ j(c, {
147
+ htmlFor: "email",
148
+ children: "Email"
149
+ }), /* @__PURE__ */ j(e, {
150
+ id: "email",
151
+ type: "email",
152
+ value: a.email,
153
+ onChange: (e) => o((t) => ({
154
+ ...t,
155
+ email: e.target.value
156
+ })),
157
+ placeholder: "jane.doe@example.com"
158
+ })]
159
+ }),
160
+ /* @__PURE__ */ M("div", {
161
+ className: "space-y-2",
162
+ children: [/* @__PURE__ */ j(c, {
163
+ htmlFor: "phone",
164
+ children: "Phone"
165
+ }), /* @__PURE__ */ j(e, {
166
+ id: "phone",
167
+ value: a.phone,
168
+ onChange: (e) => o((t) => ({
169
+ ...t,
170
+ phone: e.target.value
171
+ })),
172
+ placeholder: "+1-555-0100"
173
+ })]
174
+ }),
175
+ /* @__PURE__ */ M("div", {
176
+ className: "space-y-2",
177
+ children: [/* @__PURE__ */ j(c, {
178
+ htmlFor: "licenseNumber",
179
+ children: "License Number"
180
+ }), /* @__PURE__ */ j(e, {
181
+ id: "licenseNumber",
182
+ value: a.licenseNumber,
183
+ onChange: (e) => o((t) => ({
184
+ ...t,
185
+ licenseNumber: e.target.value
186
+ })),
187
+ placeholder: "D1234567"
188
+ })]
189
+ })
190
+ ]
191
+ })]
192
+ })] })]
193
+ })]
194
+ });
195
+ }
196
+ function L() {
197
+ let { driverId: e } = A(), { basePath: c, navigate: y } = d(), { driver: C, isLoading: O, error: k, refetch: L } = w(e), R = () => y?.(n(c, "fleet/drivers")), z = (e) => y?.(n(c, e));
198
+ return e ? O ? /* @__PURE__ */ j(f, { message: "Loading driver details..." }) : k || !C ? /* @__PURE__ */ j(u, {
199
+ title: "Driver not found",
200
+ onRetry: L
201
+ }) : /* @__PURE__ */ M(s, {
202
+ title: C.fullName,
203
+ subtitle: `Employee ID: ${C.employeeId}`,
204
+ icon: /* @__PURE__ */ j(S, { size: 24 }),
205
+ headerActions: /* @__PURE__ */ M("div", {
206
+ className: "flex gap-2",
207
+ children: [/* @__PURE__ */ M(p, {
208
+ variant: "outline",
209
+ onClick: R,
210
+ children: [/* @__PURE__ */ j(m, { size: 16 }), " Back"]
211
+ }), /* @__PURE__ */ M(p, { children: [/* @__PURE__ */ j(b, { size: 16 }), " Edit"] })]
212
+ }),
213
+ headerContent: /* @__PURE__ */ M("div", {
214
+ className: "flex items-center gap-4",
215
+ children: [/* @__PURE__ */ j(T, {
216
+ status: C.status,
217
+ type: "driver"
218
+ }), /* @__PURE__ */ M("div", {
219
+ className: "flex items-center gap-1",
220
+ children: [
221
+ /* @__PURE__ */ j(x, {
222
+ size: 16,
223
+ className: "text-status-warning-text fill-current"
224
+ }),
225
+ /* @__PURE__ */ j("span", {
226
+ className: "font-medium",
227
+ children: C.ratings.overall.toFixed(1)
228
+ }),
229
+ /* @__PURE__ */ M("span", {
230
+ className: "text-text-secondary",
231
+ children: [
232
+ "(",
233
+ C.ratings.totalRatings,
234
+ " ratings)"
235
+ ]
236
+ })
237
+ ]
238
+ })]
239
+ }),
240
+ children: [
241
+ /* @__PURE__ */ j(F, {
242
+ icon: /* @__PURE__ */ j(S, { size: 18 }),
243
+ children: "A driver's full profile — performance ratings, working hours, documents, earnings and live location. Use it to confirm someone is road-ready and compliant before assigning them an order or route."
244
+ }),
245
+ /* @__PURE__ */ j(P, {
246
+ storageKey: "movethewheels-driver-details",
247
+ steps: [
248
+ {
249
+ id: "assign",
250
+ label: "Assign to an order",
251
+ description: "Hand a pending delivery to this driver.",
252
+ icon: /* @__PURE__ */ j(v, { size: 16 }),
253
+ onClick: () => z("orders")
254
+ },
255
+ {
256
+ id: "routes",
257
+ label: "Plan their route",
258
+ description: "Batch nearby drop-offs into an optimized itinerary.",
259
+ icon: /* @__PURE__ */ j(h, { size: 16 }),
260
+ onClick: () => z("routes")
261
+ },
262
+ {
263
+ id: "edit",
264
+ label: "Update driver record",
265
+ description: "Refresh documents, shift or compliance details.",
266
+ icon: /* @__PURE__ */ j(b, { size: 16 }),
267
+ onClick: () => {}
268
+ }
269
+ ]
270
+ }),
271
+ /* @__PURE__ */ M("div", {
272
+ className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
273
+ children: [/* @__PURE__ */ M("div", {
274
+ className: "lg:col-span-2 space-y-6",
275
+ children: [
276
+ /* @__PURE__ */ M(N, { children: [/* @__PURE__ */ M("h2", {
277
+ className: "flex items-center gap-2 text-base font-semibold text-text-primary mb-4",
278
+ children: [/* @__PURE__ */ j(x, { size: 18 }), " Ratings"]
279
+ }), /* @__PURE__ */ j("div", {
280
+ className: "grid grid-cols-2 md:grid-cols-3 gap-4",
281
+ children: [
282
+ {
283
+ label: "Punctuality",
284
+ value: C.ratings.punctuality
285
+ },
286
+ {
287
+ label: "Communication",
288
+ value: C.ratings.communication
289
+ },
290
+ {
291
+ label: "Handling",
292
+ value: C.ratings.carefulHandling
293
+ },
294
+ {
295
+ label: "Professionalism",
296
+ value: C.ratings.professionalism
297
+ },
298
+ {
299
+ label: "On-Time Delivery",
300
+ value: C.ratings.onTimeDelivery
301
+ }
302
+ ].map((e) => /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
303
+ className: "text-sm text-text-secondary",
304
+ children: e.label
305
+ }), /* @__PURE__ */ M("div", {
306
+ className: "flex items-center gap-2 mt-1",
307
+ children: [/* @__PURE__ */ j(t, {
308
+ value: e.value * 20,
309
+ className: "flex-1 h-2"
310
+ }), /* @__PURE__ */ j("span", {
311
+ className: "text-sm font-medium",
312
+ children: e.value.toFixed(1)
313
+ })]
314
+ })] }, e.label))
315
+ })] }),
316
+ /* @__PURE__ */ M(r, { children: [/* @__PURE__ */ j(o, { children: /* @__PURE__ */ M(a, {
317
+ className: "flex items-center gap-2",
318
+ children: [/* @__PURE__ */ j(h, { size: 18 }), " Working Hours"]
319
+ }) }), /* @__PURE__ */ j(i, { children: /* @__PURE__ */ M("div", {
320
+ className: "grid grid-cols-2 md:grid-cols-4 gap-4",
321
+ children: [
322
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
323
+ className: "text-sm text-text-secondary",
324
+ children: "Shift"
325
+ }), /* @__PURE__ */ M("p", {
326
+ className: "font-medium",
327
+ children: [
328
+ C.workingHours.startTime,
329
+ " - ",
330
+ C.workingHours.endTime
331
+ ]
332
+ })] }),
333
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
334
+ className: "text-sm text-text-secondary",
335
+ children: "Working Days"
336
+ }), /* @__PURE__ */ M("p", {
337
+ className: "font-medium",
338
+ children: [C.workingHours.workingDays.length, " days/week"]
339
+ })] }),
340
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
341
+ className: "text-sm text-text-secondary",
342
+ children: "Hours Today"
343
+ }), /* @__PURE__ */ M("p", {
344
+ className: "font-medium",
345
+ children: [
346
+ C.workingHours.currentHoursToday,
347
+ "h / ",
348
+ C.workingHours.maxHoursPerDay,
349
+ "h"
350
+ ]
351
+ })] }),
352
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
353
+ className: "text-sm text-text-secondary",
354
+ children: "Hours This Week"
355
+ }), /* @__PURE__ */ M("p", {
356
+ className: "font-medium",
357
+ children: [
358
+ C.workingHours.currentHoursThisWeek,
359
+ "h /",
360
+ " ",
361
+ C.workingHours.maxHoursPerWeek,
362
+ "h"
363
+ ]
364
+ })] })
365
+ ]
366
+ }) })] }),
367
+ /* @__PURE__ */ M(r, { children: [/* @__PURE__ */ j(o, { children: /* @__PURE__ */ M(a, {
368
+ className: "flex items-center gap-2",
369
+ children: [/* @__PURE__ */ j(_, { size: 18 }), " Documents"]
370
+ }) }), /* @__PURE__ */ j(i, { children: /* @__PURE__ */ M("div", {
371
+ className: "space-y-3",
372
+ children: [/* @__PURE__ */ M("div", {
373
+ className: "flex items-center justify-between p-3 border rounded-lg",
374
+ children: [/* @__PURE__ */ M("div", { children: [
375
+ /* @__PURE__ */ j("p", {
376
+ className: "font-medium",
377
+ children: "Driver's License"
378
+ }),
379
+ /* @__PURE__ */ M("p", {
380
+ className: "text-sm text-text-secondary",
381
+ children: [
382
+ C.licenseNumber,
383
+ " - ",
384
+ C.licenseType
385
+ ]
386
+ }),
387
+ /* @__PURE__ */ M("p", {
388
+ className: "text-sm text-text-secondary",
389
+ children: ["Expires: ", D(C.licenseExpiry)]
390
+ })
391
+ ] }), /* @__PURE__ */ j(l, {
392
+ variant: "default",
393
+ children: "Valid"
394
+ })]
395
+ }), C.documents.map((e) => /* @__PURE__ */ M("div", {
396
+ className: "flex items-center justify-between p-3 border rounded-lg",
397
+ children: [/* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
398
+ className: "font-medium capitalize",
399
+ children: e.type.replace("_", " ")
400
+ }), /* @__PURE__ */ M("p", {
401
+ className: "text-sm text-text-secondary",
402
+ children: ["Expires: ", D(e.expiryDate)]
403
+ })] }), /* @__PURE__ */ j(l, {
404
+ variant: e.verified ? "default" : "secondary",
405
+ children: e.verified ? "Verified" : "Pending"
406
+ })]
407
+ }, e.id))]
408
+ }) })] })
409
+ ]
410
+ }), /* @__PURE__ */ M("div", {
411
+ className: "space-y-6",
412
+ children: [
413
+ /* @__PURE__ */ M(r, { children: [/* @__PURE__ */ j(o, { children: /* @__PURE__ */ j(a, { children: "Statistics" }) }), /* @__PURE__ */ M(i, {
414
+ className: "space-y-4",
415
+ children: [
416
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
417
+ className: "text-sm text-text-secondary",
418
+ children: "Total Deliveries"
419
+ }), /* @__PURE__ */ j("p", {
420
+ className: "text-2xl font-bold",
421
+ children: C.completedOrders.toLocaleString()
422
+ })] }),
423
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
424
+ className: "text-sm text-text-secondary",
425
+ children: "Today's Deliveries"
426
+ }), /* @__PURE__ */ j("p", {
427
+ className: "text-2xl font-bold",
428
+ children: C.todayOrders
429
+ })] }),
430
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
431
+ className: "text-sm text-text-secondary",
432
+ children: "Join Date"
433
+ }), /* @__PURE__ */ j("p", {
434
+ className: "font-medium",
435
+ children: D(C.joinDate)
436
+ })] })
437
+ ]
438
+ })] }),
439
+ /* @__PURE__ */ M(r, { children: [/* @__PURE__ */ j(o, { children: /* @__PURE__ */ M(a, {
440
+ className: "flex items-center gap-2",
441
+ children: [/* @__PURE__ */ j(g, { size: 18 }), " Earnings"]
442
+ }) }), /* @__PURE__ */ M(i, {
443
+ className: "space-y-3",
444
+ children: [
445
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
446
+ className: "text-sm text-text-secondary",
447
+ children: "Total Earnings"
448
+ }), /* @__PURE__ */ j("p", {
449
+ className: "text-2xl font-bold",
450
+ children: E(C.earnings.totalEarnings)
451
+ })] }),
452
+ /* @__PURE__ */ M("div", {
453
+ className: "grid grid-cols-2 gap-3",
454
+ children: [/* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
455
+ className: "text-sm text-text-secondary",
456
+ children: "This Week"
457
+ }), /* @__PURE__ */ j("p", {
458
+ className: "font-medium",
459
+ children: E(C.earnings.weeklyEarnings)
460
+ })] }), /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
461
+ className: "text-sm text-text-secondary",
462
+ children: "This Month"
463
+ }), /* @__PURE__ */ j("p", {
464
+ className: "font-medium",
465
+ children: E(C.earnings.monthlyEarnings)
466
+ })] })]
467
+ }),
468
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
469
+ className: "text-sm text-text-secondary",
470
+ children: "Base Salary"
471
+ }), /* @__PURE__ */ M("p", {
472
+ className: "font-medium",
473
+ children: [E(C.baseSalary), "/year"]
474
+ })] })
475
+ ]
476
+ })] }),
477
+ C.currentLocation && /* @__PURE__ */ M(r, { children: [/* @__PURE__ */ j(o, { children: /* @__PURE__ */ M(a, {
478
+ className: "flex items-center gap-2",
479
+ children: [/* @__PURE__ */ j(v, { size: 18 }), " Current Location"]
480
+ }) }), /* @__PURE__ */ M(i, { children: [/* @__PURE__ */ j("p", {
481
+ className: "text-sm",
482
+ children: C.currentLocation.address || "Location updating..."
483
+ }), /* @__PURE__ */ M("p", {
484
+ className: "text-xs text-text-secondary mt-1",
485
+ children: ["Updated ", D(C.currentLocation.timestamp || /* @__PURE__ */ new Date(), "relative")]
486
+ })] })] }),
487
+ /* @__PURE__ */ M(r, { children: [/* @__PURE__ */ j(o, { children: /* @__PURE__ */ j(a, { children: "Compliance Status" }) }), /* @__PURE__ */ j(i, {
488
+ className: "space-y-2",
489
+ children: Object.entries(C.compliance).filter(([e]) => e !== "lastUpdate").map(([e, t]) => /* @__PURE__ */ M("div", {
490
+ className: "flex items-center justify-between",
491
+ children: [/* @__PURE__ */ j("span", {
492
+ className: "text-sm capitalize",
493
+ children: e.replace(/([A-Z])/g, " $1")
494
+ }), /* @__PURE__ */ j(l, {
495
+ variant: t ? "default" : "destructive",
496
+ children: t ? "Compliant" : "Non-compliant"
497
+ })]
498
+ }, e))
499
+ })] })
500
+ ]
501
+ })]
502
+ })
503
+ ]
504
+ }) : /* @__PURE__ */ j(I, {});
505
+ }
506
+ //#endregion
507
+ export { L as default };
@@ -4,10 +4,10 @@ import { t as o } from "./download-DRXxoiQR.js";
4
4
  import { t as s } from "./plus-Z76q-FZm.js";
5
5
  import { t as c } from "./refresh-cw-DKt6f5T6.js";
6
6
  import { t as l } from "./star-nHlLjDKR.js";
7
- import { t as u } from "./users-BAM4gHTn.js";
8
- import { n as d } from "./useFleet-DiAC-IiH.js";
9
- import { r as f } from "./StatusBadge-NpTeHVlw.js";
10
- import { r as p } from "./formatters-DhKZ-eA1.js";
7
+ import { t as u } from "./users-DZ-ilS6B.js";
8
+ import { n as d } from "./useFleet-DKqXZ16m.js";
9
+ import { r as f } from "./StatusBadge-BZurYHMy.js";
10
+ import { r as p } from "./formatters-CF2S2l1m.js";
11
11
  import { jsx as m, jsxs as h } from "react/jsx-runtime";
12
12
  import { CTAOverflowMenu as g, EmphasisPanel as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
13
13
  //#region src/movethewheels/pages/DriversPage.tsx
@@ -21,7 +21,7 @@ function y() {
21
21
  primary: {
22
22
  label: "Add Driver",
23
23
  icon: /* @__PURE__ */ m(s, { size: 16 }),
24
- onSelect: () => {}
24
+ onSelect: () => T("fleet/drivers/new")
25
25
  },
26
26
  actions: [{
27
27
  label: "Refresh",
@@ -30,7 +30,7 @@ function y() {
30
30
  }, {
31
31
  label: "Export",
32
32
  icon: /* @__PURE__ */ m(o, { size: 16 }),
33
- onSelect: () => {}
33
+ onSelect: () => T("import-export")
34
34
  }]
35
35
  }),
36
36
  children: [
@@ -2,11 +2,11 @@ import { d as e, f as t, g as n, h as r, i, lt as a, u as o } from "./PageLayout
2
2
  import { t as s } from "./dollar-sign-CgKQRz_e.js";
3
3
  import { t as c } from "./download-DRXxoiQR.js";
4
4
  import { t as l } from "./file-text-DWWY6_f5.js";
5
- import { t as u } from "./trending-up-B7W-GL6P.js";
6
- import { n as d } from "./useOrders-D3UZVy8Y.js";
7
- import { t as f } from "./useAnalytics-CgdzUfY_.js";
8
- import { r as p, t as m } from "./MetricCard-7aYgzZHK.js";
9
- import { n as h } from "./formatters-DhKZ-eA1.js";
5
+ import { t as u } from "./trending-up-Dohgd4t_.js";
6
+ import { n as d } from "./useOrders-Cfk1GLiq.js";
7
+ import { t as f } from "./useAnalytics-DS8n0xgg.js";
8
+ import { r as p, t as m } from "./MetricCard-BY0QrMD4.js";
9
+ import { n as h } from "./formatters-CF2S2l1m.js";
10
10
  import { jsx as g, jsxs as _ } from "react/jsx-runtime";
11
11
  import { EmphasisPanel as v, IllustratedEmptyState as y, PagePurpose as b } from "@burdenoff/fe-libs/ui";
12
12
  //#region node_modules/lucide-react/dist/esm/icons/credit-card.js
@@ -2,11 +2,11 @@ import { M as e, a as t, ct as n, d as r, f as i, g as a, h as o, i as s, o as c
2
2
  import { t as f } from "./chevron-right-EMIIyyJ1.js";
3
3
  import { n as p, t as m } from "./wrench-CANXWxF-.js";
4
4
  import { t as h } from "./star-nHlLjDKR.js";
5
- import { t as g } from "./truck-DrlfSpRC.js";
6
- import { t as _ } from "./users-BAM4gHTn.js";
7
- import { i as v, n as y, o as b } from "./useFleet-DiAC-IiH.js";
8
- import { n as x, r as S, t as C } from "./MetricCard-7aYgzZHK.js";
9
- import { a as w, r as T } from "./StatusBadge-NpTeHVlw.js";
5
+ import { t as g } from "./truck-C0v_hbLR.js";
6
+ import { t as _ } from "./users-DZ-ilS6B.js";
7
+ import { i as v, n as y, o as b } from "./useFleet-DKqXZ16m.js";
8
+ import { n as x, r as S, t as C } from "./MetricCard-BY0QrMD4.js";
9
+ import { a as w, r as T } from "./StatusBadge-BZurYHMy.js";
10
10
  import { jsx as E, jsxs as D } from "react/jsx-runtime";
11
11
  import { CTAOverflowMenu as O, EmphasisPanel as k, NextSteps as A, PagePurpose as j } from "@burdenoff/fe-libs/ui";
12
12
  import { useI18n as M } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
@@ -0,0 +1,15 @@
1
+ import { t as e } from "./circle-alert-iY24lSlp.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ //#region src/movethewheels/components/FormError.tsx
4
+ function r({ message: r }) {
5
+ return r ? /* @__PURE__ */ n("div", {
6
+ role: "alert",
7
+ className: "flex items-start gap-2 rounded-lg border border-status-error-border bg-status-error-bg-subtle px-4 py-3 text-sm text-status-error-text",
8
+ children: [/* @__PURE__ */ t(e, {
9
+ size: 18,
10
+ className: "mt-0.5 shrink-0"
11
+ }), /* @__PURE__ */ t("span", { children: r })]
12
+ }) : null;
13
+ }
14
+ //#endregion
15
+ export { r as t };
@@ -1,7 +1,7 @@
1
1
  import { d as e, f as t, g as n, h as r, i, l as a, lt as o, u as s } from "./PageLayout-D4LDHJJq.js";
2
2
  import { t as c } from "./download-DRXxoiQR.js";
3
3
  import { t as l } from "./file-text-DWWY6_f5.js";
4
- import { t as u } from "./useImportExport-BLMnAKCC.js";
4
+ import { t as u } from "./useImportExport-DHr-SWSw.js";
5
5
  import { useRef as d, useState as f } from "react";
6
6
  import { jsx as p, jsxs as m } from "react/jsx-runtime";
7
7
  import { EmphasisPanel as h, IllustratedEmptyState as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
@@ -2,11 +2,11 @@ import { M as e, a as t, ct as n, d as r, f as i, i as a, l as o, ot as s, u as
2
2
  import { t as l } from "./chevron-right-EMIIyyJ1.js";
3
3
  import { t as u } from "./package-BChUzpJS.js";
4
4
  import { t as d } from "./plus-Z76q-FZm.js";
5
- import { t as f } from "./triangle-alert-BonHFFNz.js";
6
- import { t as p } from "./warehouse-C7MSr47B.js";
7
- import { n as m, t as h } from "./useInventory-DKoks37x.js";
8
- import { n as g, r as _, t as v } from "./MetricCard-7aYgzZHK.js";
9
- import { n as y } from "./formatters-DhKZ-eA1.js";
5
+ import { t as f } from "./triangle-alert-i-XQL9Rd.js";
6
+ import { t as p } from "./warehouse-6m5kXMLu.js";
7
+ import { n as m, t as h } from "./useInventory-DkyiVY_A.js";
8
+ import { n as g, r as _, t as v } from "./MetricCard-BY0QrMD4.js";
9
+ import { n as y } from "./formatters-CF2S2l1m.js";
10
10
  import { jsx as b, jsxs as x } from "react/jsx-runtime";
11
11
  import { CTAOverflowMenu as S, EmphasisPanel as C, PagePurpose as w } from "@burdenoff/fe-libs/ui";
12
12
  import { useI18n as T } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
@@ -26,7 +26,7 @@ function E() {
26
26
  primary: {
27
27
  label: D("movethewheels.inventory.actions.addProduct", "Add Product"),
28
28
  icon: /* @__PURE__ */ b(d, { size: 16 }),
29
- onSelect: () => {}
29
+ onSelect: () => L("inventory/products/new")
30
30
  },
31
31
  actions: [{
32
32
  label: D("movethewheels.inventory.actions.products", "Products"),
@@ -3,11 +3,11 @@ import { t as h } from "./map-pin-BGiCvyCs.js";
3
3
  import { t as g } from "./map-CkJaULb2.js";
4
4
  import { t as _ } from "./package-BChUzpJS.js";
5
5
  import { t as v } from "./refresh-cw-DKt6f5T6.js";
6
- import { t as y } from "./truck-DrlfSpRC.js";
7
- import { o as b, r as x } from "./useTracking-GJify4HN.js";
8
- import { r as S, t as C } from "./MetricCard-7aYgzZHK.js";
9
- import { r as w } from "./StatusBadge-NpTeHVlw.js";
10
- import { r as T } from "./formatters-DhKZ-eA1.js";
6
+ import { t as y } from "./truck-C0v_hbLR.js";
7
+ import { o as b, r as x } from "./useTracking-B-va1kO3.js";
8
+ import { r as S, t as C } from "./MetricCard-BY0QrMD4.js";
9
+ import { r as w } from "./StatusBadge-BZurYHMy.js";
10
+ import { r as T } from "./formatters-CF2S2l1m.js";
11
11
  import { useState as E } from "react";
12
12
  import { jsx as D, jsxs as O } from "react/jsx-runtime";
13
13
  import { EmphasisPanel as k, NextSteps as A, PagePurpose as j } from "@burdenoff/fe-libs/ui";
@@ -5,7 +5,7 @@ import { t as p } from "./map-pin-BGiCvyCs.js";
5
5
  import { t as m } from "./search-CDGefqb3.js";
6
6
  import { t as h } from "./star-nHlLjDKR.js";
7
7
  import { t as g } from "./store-BR9Voi5E.js";
8
- import { n as _ } from "./formatters-DhKZ-eA1.js";
8
+ import { n as _ } from "./formatters-CF2S2l1m.js";
9
9
  import { useCallback as v, useEffect as y, useMemo as b, useState as x } from "react";
10
10
  import { jsx as S, jsxs as C } from "react/jsx-runtime";
11
11
  import { EmphasisPanel as w, IllustratedEmptyState as T, PagePurpose as E } from "@burdenoff/fe-libs/ui";