@burdenoff/microfe-movethewheels 2026.626.2 → 2026.703.2

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 (135) hide show
  1. package/dist/{AIAssistantPage-AvsMbunM.js → AIAssistantPage-C3cPsWt-.js} +100 -73
  2. package/dist/AnalyticsPage-Dz6g2MvK.js +215 -0
  3. package/dist/{CreateOrderPage-CjlnEtk3.js → CreateOrderPage-C5iwnjp4.js} +36 -67
  4. package/dist/CustomerDetailsPage-B6nwFyLO.js +406 -0
  5. package/dist/{CustomersPage-CGGfD4ki.js → CustomersPage-2Y05LVyh.js} +26 -28
  6. package/dist/{DashboardPage-D2HRqwg9.js → DashboardPage-BVjQi0EB.js} +85 -83
  7. package/dist/{DataTable-CD9ZhpLB.js → DataTable-DmciIKKM.js} +3 -3
  8. package/dist/DriverDetailsPage-CN3WQ0B9.js +507 -0
  9. package/dist/{DriversPage-DKiynISH.js → DriversPage-B0Zpx8OQ.js} +25 -27
  10. package/dist/{FinancePage-Vg8WPs38.js → FinancePage-DEDykSOP.js} +9 -9
  11. package/dist/FleetPage-DqkFi3s3.js +365 -0
  12. package/dist/FormError-BlOjnXOq.js +15 -0
  13. package/dist/ImportExportPage-DKJRCezl.js +290 -0
  14. package/dist/InventoryPage-DwfgCUQq.js +253 -0
  15. package/dist/{LiveTrackingPage-DQ1q4Id3.js → LiveTrackingPage-DCX-K-LR.js} +60 -56
  16. package/dist/MarketplacePage-CIQ97_zp.js +247 -0
  17. package/dist/{MetricCard-B7yMyvMX.js → MetricCard-BY0QrMD4.js} +1 -1
  18. package/dist/{OrderDetailsPage-CFASgsYX.js → OrderDetailsPage-DYiZ-9UK.js} +83 -85
  19. package/dist/{OrdersListPage-BHeT8S5o.js → OrdersListPage-BjDlCKJd.js} +31 -33
  20. package/dist/{PageLayout-D3N8MCTm.js → PageLayout-D4LDHJJq.js} +483 -422
  21. package/dist/ProductDetailsPage-C9uOiYLp.js +350 -0
  22. package/dist/{ProductsPage--xEpbQ8A.js → ProductsPage-C1G9h7Xd.js} +22 -24
  23. package/dist/ReportsPage-Zp53q3_8.js +284 -0
  24. package/dist/RouteDetailsPage-DUStXSf9.js +531 -0
  25. package/dist/RoutesPage-DMfoicM1.js +144 -0
  26. package/dist/SettingsPage-Bn-v0mbQ.js +421 -0
  27. package/dist/StatusBadge-BZurYHMy.js +152 -0
  28. package/dist/{TrackingPage-CcRc_dva.js → TrackingPage-W-jtdM3Y.js} +59 -61
  29. package/dist/VehicleDetailsPage-Bceo5oz3.js +410 -0
  30. package/dist/{VehiclesPage-UlxPWP9K.js → VehiclesPage-VBtOep91.js} +20 -22
  31. package/dist/WarehouseDetailsPage-L_6sWigM.js +493 -0
  32. package/dist/{WarehousesPage-CuTO-OPp.js → WarehousesPage-DCbXXXWE.js} +16 -18
  33. package/dist/{arrow-left-CBpZKkpq.js → arrow-left-n48Y-Wis.js} +1 -1
  34. package/dist/{box-CAaiElsb.js → box-D9Pal4HM.js} +1 -1
  35. package/dist/{chart-column-D1Ym15-S.js → chart-column-BFIJysDR.js} +1 -1
  36. package/dist/{chevron-right-BIFGi0UA.js → chevron-right-EMIIyyJ1.js} +1 -1
  37. package/dist/{circle-alert-DjmNo5_L.js → circle-alert-iY24lSlp.js} +1 -1
  38. package/dist/{circle-check-big-CjuPVo3_.js → circle-check-big-w0TrLKMF.js} +1 -1
  39. package/dist/{clock-BjkdnddD.js → clock-DJZtdl8u.js} +1 -1
  40. package/dist/{dollar-sign-IB4O0wuQ.js → dollar-sign-CgKQRz_e.js} +1 -1
  41. package/dist/{download-Dpa9vqoG.js → download-DRXxoiQR.js} +1 -1
  42. package/dist/{file-text-C8Uioy11.js → file-text-DWWY6_f5.js} +1 -1
  43. package/dist/{filter-Da5OZaHI.js → filter-DloLC2eE.js} +1 -1
  44. package/dist/index.js +186 -162
  45. package/dist/{map-_Per4sT9.js → map-CkJaULb2.js} +1 -1
  46. package/dist/{map-pin-BSaf5IDL.js → map-pin-BGiCvyCs.js} +1 -1
  47. package/dist/{navigation-DaTbrhw2.js → navigation-D36prnAn.js} +1 -1
  48. package/dist/{package-BE7U0wQE.js → package-BChUzpJS.js} +1 -1
  49. package/dist/{phone-DV4StZiA.js → phone-Ac9s3mo_.js} +1 -1
  50. package/dist/{plus-Dl1rLeJR.js → plus-Z76q-FZm.js} +1 -1
  51. package/dist/{refresh-cw-CWfERAit.js → refresh-cw-DKt6f5T6.js} +1 -1
  52. package/dist/{save-XH8vydOn.js → save-CojywNhG.js} +1 -1
  53. package/dist/{search-OxoIiL_C.js → search-CDGefqb3.js} +1 -1
  54. package/dist/{square-pen-hLIbFQFV.js → square-pen-CopE9GmB.js} +1 -1
  55. package/dist/{star-YsVV3MNQ.js → star-nHlLjDKR.js} +1 -1
  56. package/dist/{store-RCBl7HB-.js → store-BR9Voi5E.js} +1 -1
  57. package/dist/trash-2-BKhar6Hs.js +32 -0
  58. package/dist/{trending-up-C-85AwGT.js → trending-up-Dohgd4t_.js} +1 -1
  59. package/dist/{triangle-alert-BOhfGgmh.js → triangle-alert-i-XQL9Rd.js} +1 -1
  60. package/dist/{truck-CtDjNFbi.js → truck-C0v_hbLR.js} +1 -1
  61. package/dist/{useAnalytics-ph7eTIK6.js → useAnalytics-DS8n0xgg.js} +40 -40
  62. package/dist/useAssistant-D4v3oxD3.js +84 -0
  63. package/dist/{useCustomers-bS3a4ytk.js → useCustomers-BmTNGxiI.js} +24 -24
  64. package/dist/{useFleet-BdETplNE.js → useFleet-DKqXZ16m.js} +133 -109
  65. package/dist/useImportExport-DHr-SWSw.js +55 -0
  66. package/dist/{useInventory-Dwn18FPz.js → useInventory-DkyiVY_A.js} +95 -75
  67. package/dist/{useOrders-D_3_hGMp.js → useOrders-Cfk1GLiq.js} +42 -42
  68. package/dist/useReports-CTqZr-AB.js +78 -0
  69. package/dist/{useRoutes-v4aBaS-E.js → useRoutes-BQWO607N.js} +31 -31
  70. package/dist/useSettings-CkDH_-gM.js +81 -0
  71. package/dist/{useTracking-De2KIUNu.js → useTracking-B-va1kO3.js} +22 -22
  72. package/dist/{user-Dz5TJZFs.js → user-jyFU3lXk.js} +1 -1
  73. package/dist/{users-g2N0eL-Z.js → users-DZ-ilS6B.js} +1 -1
  74. package/dist/{warehouse-D3WWDeTX.js → warehouse-6m5kXMLu.js} +1 -1
  75. package/dist/{wrench-CmxY1n4I.js → wrench-CANXWxF-.js} +1 -1
  76. package/package.json +1 -1
  77. package/src/movethewheels/MoveTheWheelsRoutes.tsx +31 -3
  78. package/src/movethewheels/components/FormError.tsx +25 -0
  79. package/src/movethewheels/components/StatusBadge.tsx +18 -37
  80. package/src/movethewheels/constants/index.ts +67 -26
  81. package/src/movethewheels/hooks/index.ts +12 -0
  82. package/src/movethewheels/hooks/useAnalytics.ts +20 -6
  83. package/src/movethewheels/hooks/useAssistant.ts +74 -0
  84. package/src/movethewheels/hooks/useFleet.ts +170 -59
  85. package/src/movethewheels/hooks/useImportExport.ts +101 -0
  86. package/src/movethewheels/hooks/useInventory.ts +107 -0
  87. package/src/movethewheels/hooks/useReports.ts +158 -0
  88. package/src/movethewheels/hooks/useSettings.ts +120 -0
  89. package/src/movethewheels/pages/AIAssistantPage.tsx +53 -15
  90. package/src/movethewheels/pages/AnalyticsPage.tsx +67 -64
  91. package/src/movethewheels/pages/CustomerDetailsPage.tsx +154 -21
  92. package/src/movethewheels/pages/CustomersPage.tsx +1 -1
  93. package/src/movethewheels/pages/DashboardPage.tsx +42 -22
  94. package/src/movethewheels/pages/DriverDetailsPage.tsx +160 -3
  95. package/src/movethewheels/pages/DriversPage.tsx +6 -2
  96. package/src/movethewheels/pages/FleetPage.tsx +96 -38
  97. package/src/movethewheels/pages/ImportExportPage.tsx +174 -68
  98. package/src/movethewheels/pages/InventoryPage.tsx +66 -28
  99. package/src/movethewheels/pages/LiveTrackingPage.tsx +12 -3
  100. package/src/movethewheels/pages/MarketplacePage.tsx +87 -45
  101. package/src/movethewheels/pages/OrderDetailsPage.tsx +2 -2
  102. package/src/movethewheels/pages/ProductDetailsPage.tsx +146 -3
  103. package/src/movethewheels/pages/ProductsPage.tsx +5 -1
  104. package/src/movethewheels/pages/ReportsPage.tsx +194 -90
  105. package/src/movethewheels/pages/RouteDetailsPage.tsx +290 -36
  106. package/src/movethewheels/pages/RoutesPage.tsx +4 -9
  107. package/src/movethewheels/pages/SettingsPage.tsx +234 -56
  108. package/src/movethewheels/pages/TrackingPage.tsx +6 -6
  109. package/src/movethewheels/pages/VehicleDetailsPage.tsx +158 -2
  110. package/src/movethewheels/pages/VehiclesPage.tsx +5 -1
  111. package/src/movethewheels/pages/WarehouseDetailsPage.tsx +224 -2
  112. package/src/movethewheels/pages/WarehousesPage.tsx +5 -1
  113. package/src/movethewheels/providers/MoveTheWheelsProvider.tsx +7 -6
  114. package/src/movethewheels/store/movethewheelsStore.ts +1 -1
  115. package/dist/AnalyticsPage-CCLfHgQZ.js +0 -212
  116. package/dist/CustomerDetailsPage-I6cdDHUi.js +0 -265
  117. package/dist/DriverDetailsPage-rg_pGNuP.js +0 -330
  118. package/dist/FleetPage-DddXt8r8.js +0 -332
  119. package/dist/ImportExportPage-BW6qO3kc.js +0 -248
  120. package/dist/InventoryPage-rMGuaJN-.js +0 -222
  121. package/dist/MarketplacePage-DKrXAv62.js +0 -219
  122. package/dist/ProductDetailsPage-CFGcbaHo.js +0 -195
  123. package/dist/ReportsPage-Bb7_90rK.js +0 -235
  124. package/dist/RouteDetailsPage-CVtDVb1N.js +0 -282
  125. package/dist/RoutesPage-s57PtgcQ.js +0 -163
  126. package/dist/SettingsPage-BYNCBOpN.js +0 -298
  127. package/dist/StatusBadge-CijYQXtb.js +0 -209
  128. package/dist/VehicleDetailsPage-3YDMPsPs.js +0 -220
  129. package/dist/WarehouseDetailsPage-Db7KeN-d.js +0 -238
  130. package/dist/graphqlClient-CdJyR_ed.js +0 -55
  131. package/dist/navigation-BgnOfsVd.js +0 -6
  132. package/dist/route-Dp9JiN_E.js +0 -51
  133. package/dist/settings-3Rw5NwFF.js +0 -28
  134. package/src/movethewheels/constants/mockData.ts +0 -1342
  135. /package/dist/{formatters-_vJlC-47.js → formatters-CF2S2l1m.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 };
@@ -1,43 +1,41 @@
1
- import { i as e, o as t, s as n } from "./PageLayout-D3N8MCTm.js";
2
- import { t as r } from "./DataTable-CD9ZhpLB.js";
3
- import { t as i } from "./download-Dpa9vqoG.js";
4
- import { t as a } from "./plus-Dl1rLeJR.js";
5
- import { t as o } from "./refresh-cw-CWfERAit.js";
6
- import { t as s } from "./star-YsVV3MNQ.js";
7
- import { t as c } from "./users-g2N0eL-Z.js";
8
- import { r as l } from "./graphqlClient-CdJyR_ed.js";
9
- import { n as u } from "./useFleet-BdETplNE.js";
10
- import { r as d } from "./StatusBadge-CijYQXtb.js";
11
- import { r as f } from "./formatters-_vJlC-47.js";
12
- import { t as p } from "./navigation-BgnOfsVd.js";
1
+ import { ct as e, i as t, o as n, ot as r, s as i } from "./PageLayout-D4LDHJJq.js";
2
+ import { t as a } from "./DataTable-DmciIKKM.js";
3
+ import { t as o } from "./download-DRXxoiQR.js";
4
+ import { t as s } from "./plus-Z76q-FZm.js";
5
+ import { t as c } from "./refresh-cw-DKt6f5T6.js";
6
+ import { t as l } from "./star-nHlLjDKR.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";
13
11
  import { jsx as m, jsxs as h } from "react/jsx-runtime";
14
12
  import { CTAOverflowMenu as g, EmphasisPanel as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
15
13
  //#region src/movethewheels/pages/DriversPage.tsx
16
14
  function y() {
17
- let { basePath: y, navigate: b } = l(), { drivers: x, totalDrivers: S, isLoading: C, refetch: w } = u(), T = (e) => b?.(p(y, e));
18
- return /* @__PURE__ */ h(e, {
15
+ let { basePath: y, navigate: b } = r(), { drivers: x, totalDrivers: S, isLoading: C, refetch: w } = d(), T = (t) => b?.(e(y, t));
16
+ return /* @__PURE__ */ h(t, {
19
17
  title: "Drivers",
20
18
  subtitle: `${S} drivers`,
21
- icon: /* @__PURE__ */ m(c, { size: 24 }),
19
+ icon: /* @__PURE__ */ m(u, { size: 24 }),
22
20
  headerActions: /* @__PURE__ */ m(g, {
23
21
  primary: {
24
22
  label: "Add Driver",
25
- icon: /* @__PURE__ */ m(a, { size: 16 }),
26
- onSelect: () => {}
23
+ icon: /* @__PURE__ */ m(s, { size: 16 }),
24
+ onSelect: () => T("fleet/drivers/new")
27
25
  },
28
26
  actions: [{
29
27
  label: "Refresh",
30
- icon: /* @__PURE__ */ m(o, { size: 16 }),
28
+ icon: /* @__PURE__ */ m(c, { size: 16 }),
31
29
  onSelect: () => w()
32
30
  }, {
33
31
  label: "Export",
34
- icon: /* @__PURE__ */ m(i, { size: 16 }),
32
+ icon: /* @__PURE__ */ m(o, { size: 16 }),
35
33
  onSelect: () => {}
36
34
  }]
37
35
  }),
38
36
  children: [
39
37
  /* @__PURE__ */ m(v, {
40
- icon: /* @__PURE__ */ m(c, { size: 18 }),
38
+ icon: /* @__PURE__ */ m(u, { size: 18 }),
41
39
  children: "Your delivery workforce. Track each driver's availability, performance rating, completed deliveries and license status here — open a driver to review their history before assigning them to an order or route."
42
40
  }),
43
41
  /* @__PURE__ */ h(_, { children: [/* @__PURE__ */ m("p", {
@@ -69,14 +67,14 @@ function y() {
69
67
  })] })
70
68
  ]
71
69
  })] }),
72
- /* @__PURE__ */ m(r, {
70
+ /* @__PURE__ */ m(a, {
73
71
  columns: [
74
72
  {
75
73
  id: "driver",
76
74
  header: "Driver",
77
75
  cell: (e) => /* @__PURE__ */ h("div", {
78
76
  className: "flex items-center gap-3",
79
- children: [/* @__PURE__ */ m(t, { children: /* @__PURE__ */ m(n, { children: e.fullName.split(" ").map((e) => e[0]).join("") }) }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
77
+ children: [/* @__PURE__ */ m(n, { children: /* @__PURE__ */ m(i, { children: e.fullName.split(" ").map((e) => e[0]).join("") }) }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
80
78
  className: "font-medium",
81
79
  children: e.fullName
82
80
  }), /* @__PURE__ */ m("p", {
@@ -90,7 +88,7 @@ function y() {
90
88
  header: "Status",
91
89
  accessorKey: "status",
92
90
  sortable: !0,
93
- cell: (e) => /* @__PURE__ */ m(d, {
91
+ cell: (e) => /* @__PURE__ */ m(f, {
94
92
  status: e.status,
95
93
  type: "driver"
96
94
  })
@@ -101,9 +99,9 @@ function y() {
101
99
  cell: (e) => /* @__PURE__ */ h("div", {
102
100
  className: "flex items-center gap-1",
103
101
  children: [
104
- /* @__PURE__ */ m(s, {
102
+ /* @__PURE__ */ m(l, {
105
103
  size: 14,
106
- className: "text-yellow-500 fill-yellow-500"
104
+ className: "text-status-warning-text fill-current"
107
105
  }),
108
106
  /* @__PURE__ */ m("span", {
109
107
  className: "font-medium",
@@ -137,7 +135,7 @@ function y() {
137
135
  className: "text-sm",
138
136
  children: [/* @__PURE__ */ m("p", { children: e.licenseType }), /* @__PURE__ */ h("p", {
139
137
  className: "text-text-secondary",
140
- children: ["Exp: ", f(e.licenseExpiry, "short")]
138
+ children: ["Exp: ", p(e.licenseExpiry, "short")]
141
139
  })]
142
140
  })
143
141
  },
@@ -146,7 +144,7 @@ function y() {
146
144
  header: "Join Date",
147
145
  accessorKey: "joinDate",
148
146
  sortable: !0,
149
- cell: (e) => f(e.joinDate, "short")
147
+ cell: (e) => p(e.joinDate, "short")
150
148
  }
151
149
  ],
152
150
  data: x,
@@ -1,12 +1,12 @@
1
- import { d as e, f as t, g as n, h as r, i, it as a, u as o } from "./PageLayout-D3N8MCTm.js";
2
- import { t as s } from "./dollar-sign-IB4O0wuQ.js";
3
- import { t as c } from "./download-Dpa9vqoG.js";
4
- import { t as l } from "./file-text-C8Uioy11.js";
5
- import { t as u } from "./trending-up-C-85AwGT.js";
6
- import { n as d } from "./useOrders-D_3_hGMp.js";
7
- import { t as f } from "./useAnalytics-ph7eTIK6.js";
8
- import { r as p, t as m } from "./MetricCard-B7yMyvMX.js";
9
- import { n as h } from "./formatters-_vJlC-47.js";
1
+ import { d as e, f as t, g as n, h as r, i, lt as a, u as o } from "./PageLayout-D4LDHJJq.js";
2
+ import { t as s } from "./dollar-sign-CgKQRz_e.js";
3
+ import { t as c } from "./download-DRXxoiQR.js";
4
+ import { t as l } from "./file-text-DWWY6_f5.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