@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,410 @@
1
+ import { A as e, F as t, I as n, L as r, M as i, P as a, R as o, ct as s, d as c, f as l, g as u, h as d, i as f, j as p, l as m, n as h, ot as g, r as _, u as v } from "./PageLayout-D4LDHJJq.js";
2
+ import { t as y } from "./arrow-left-n48Y-Wis.js";
3
+ import { t as b } from "./file-text-DWWY6_f5.js";
4
+ import { n as x, t as S } from "./wrench-CANXWxF-.js";
5
+ import { t as C } from "./map-pin-BGiCvyCs.js";
6
+ import { t as w } from "./save-CojywNhG.js";
7
+ import { t as T } from "./square-pen-CopE9GmB.js";
8
+ import { t as E } from "./truck-C0v_hbLR.js";
9
+ import { a as D, r as O } from "./useFleet-DKqXZ16m.js";
10
+ import { a as k, r as A } from "./StatusBadge-BZurYHMy.js";
11
+ import { r as j } from "./formatters-CF2S2l1m.js";
12
+ import { t as M } from "./FormError-BlOjnXOq.js";
13
+ import { useState as N } from "react";
14
+ import { useParams as P } from "react-router-dom";
15
+ import { jsx as F, jsxs as I } from "react/jsx-runtime";
16
+ import { EmphasisPanel as L, NextSteps as R, PagePurpose as z } from "@burdenoff/fe-libs/ui";
17
+ //#region src/movethewheels/pages/VehicleDetailsPage.tsx
18
+ var B = [
19
+ {
20
+ value: "TRUCK",
21
+ label: "Truck"
22
+ },
23
+ {
24
+ value: "VAN",
25
+ label: "Van"
26
+ },
27
+ {
28
+ value: "MOTORCYCLE",
29
+ label: "Motorcycle"
30
+ },
31
+ {
32
+ value: "BICYCLE",
33
+ label: "Bicycle"
34
+ },
35
+ {
36
+ value: "FLATBED",
37
+ label: "Flatbed"
38
+ },
39
+ {
40
+ value: "REFRIGERATED",
41
+ label: "Refrigerated"
42
+ },
43
+ {
44
+ value: "SEMI_TRAILER",
45
+ label: "Semi-Trailer"
46
+ },
47
+ {
48
+ value: "DRONE",
49
+ label: "Drone"
50
+ }
51
+ ];
52
+ function V() {
53
+ let { basePath: i, navigate: c } = g(), { createVehicle: l } = O(), [u, d] = N({
54
+ vehicleNumber: "",
55
+ type: "VAN",
56
+ make: "",
57
+ model: "",
58
+ licensePlate: ""
59
+ }), [m, h] = N(!1), [_, b] = N(null), x = () => c?.(s(i, "fleet/vehicles")), S = async (e) => {
60
+ if (e.preventDefault(), !u.vehicleNumber.trim()) {
61
+ b("Vehicle number is required.");
62
+ return;
63
+ }
64
+ h(!0), b(null);
65
+ try {
66
+ let e = await l({
67
+ vehicleNumber: u.vehicleNumber.trim(),
68
+ type: u.type,
69
+ make: u.make.trim() || void 0,
70
+ model: u.model.trim() || void 0,
71
+ licensePlate: u.licensePlate.trim() || void 0
72
+ });
73
+ c?.(s(i, `fleet/vehicles/${e.id}`));
74
+ } catch (e) {
75
+ console.error("Failed to create vehicle:", e), b(e instanceof Error ? e.message : "Failed to create vehicle. Please try again."), h(!1);
76
+ }
77
+ };
78
+ return /* @__PURE__ */ I(f, {
79
+ title: "Add Vehicle",
80
+ subtitle: "Register a new vehicle in your fleet",
81
+ icon: /* @__PURE__ */ F(E, { size: 24 }),
82
+ headerActions: /* @__PURE__ */ I("div", {
83
+ className: "flex gap-2",
84
+ children: [/* @__PURE__ */ I(v, {
85
+ variant: "outline",
86
+ onClick: x,
87
+ disabled: m,
88
+ children: [/* @__PURE__ */ F(y, { size: 16 }), " Cancel"]
89
+ }), /* @__PURE__ */ I(v, {
90
+ onClick: S,
91
+ disabled: m,
92
+ children: [
93
+ /* @__PURE__ */ F(w, { size: 16 }),
94
+ " ",
95
+ m ? "Saving..." : "Add Vehicle"
96
+ ]
97
+ })]
98
+ }),
99
+ children: [/* @__PURE__ */ F(z, {
100
+ icon: /* @__PURE__ */ F(E, { size: 18 }),
101
+ children: "Add a vehicle so it can be assigned to deliveries and routes. Give it a fleet number and type to start — make, model and plate help identify it on the road."
102
+ }), /* @__PURE__ */ I("form", {
103
+ onSubmit: S,
104
+ className: "max-w-2xl space-y-6",
105
+ children: [/* @__PURE__ */ F(M, { message: _ }), /* @__PURE__ */ I(L, { children: [/* @__PURE__ */ F("h2", {
106
+ className: "text-base font-semibold text-text-primary mb-4",
107
+ children: "Vehicle Details"
108
+ }), /* @__PURE__ */ I("div", {
109
+ className: "space-y-4",
110
+ children: [/* @__PURE__ */ I("div", {
111
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
112
+ children: [/* @__PURE__ */ I("div", {
113
+ className: "space-y-2",
114
+ children: [/* @__PURE__ */ I(p, {
115
+ htmlFor: "vehicleNumber",
116
+ children: ["Vehicle Number ", /* @__PURE__ */ F("span", {
117
+ className: "text-status-error-text",
118
+ children: "*"
119
+ })]
120
+ }), /* @__PURE__ */ F(e, {
121
+ id: "vehicleNumber",
122
+ value: u.vehicleNumber,
123
+ onChange: (e) => d((t) => ({
124
+ ...t,
125
+ vehicleNumber: e.target.value
126
+ })),
127
+ placeholder: "MTW-001",
128
+ required: !0
129
+ })]
130
+ }), /* @__PURE__ */ I("div", {
131
+ className: "space-y-2",
132
+ children: [/* @__PURE__ */ I(p, {
133
+ htmlFor: "type",
134
+ children: ["Type ", /* @__PURE__ */ F("span", {
135
+ className: "text-status-error-text",
136
+ children: "*"
137
+ })]
138
+ }), /* @__PURE__ */ I(a, {
139
+ value: u.type,
140
+ onValueChange: (e) => d((t) => ({
141
+ ...t,
142
+ type: e
143
+ })),
144
+ children: [/* @__PURE__ */ F(r, {
145
+ id: "type",
146
+ children: /* @__PURE__ */ F(o, {})
147
+ }), /* @__PURE__ */ F(t, { children: B.map((e) => /* @__PURE__ */ F(n, {
148
+ value: e.value,
149
+ children: e.label
150
+ }, e.value)) })]
151
+ })]
152
+ })]
153
+ }), /* @__PURE__ */ I("div", {
154
+ className: "grid grid-cols-1 md:grid-cols-3 gap-4",
155
+ children: [
156
+ /* @__PURE__ */ I("div", {
157
+ className: "space-y-2",
158
+ children: [/* @__PURE__ */ F(p, {
159
+ htmlFor: "make",
160
+ children: "Make"
161
+ }), /* @__PURE__ */ F(e, {
162
+ id: "make",
163
+ value: u.make,
164
+ onChange: (e) => d((t) => ({
165
+ ...t,
166
+ make: e.target.value
167
+ })),
168
+ placeholder: "Ford"
169
+ })]
170
+ }),
171
+ /* @__PURE__ */ I("div", {
172
+ className: "space-y-2",
173
+ children: [/* @__PURE__ */ F(p, {
174
+ htmlFor: "model",
175
+ children: "Model"
176
+ }), /* @__PURE__ */ F(e, {
177
+ id: "model",
178
+ value: u.model,
179
+ onChange: (e) => d((t) => ({
180
+ ...t,
181
+ model: e.target.value
182
+ })),
183
+ placeholder: "Transit"
184
+ })]
185
+ }),
186
+ /* @__PURE__ */ I("div", {
187
+ className: "space-y-2",
188
+ children: [/* @__PURE__ */ F(p, {
189
+ htmlFor: "licensePlate",
190
+ children: "License Plate"
191
+ }), /* @__PURE__ */ F(e, {
192
+ id: "licensePlate",
193
+ value: u.licensePlate,
194
+ onChange: (e) => d((t) => ({
195
+ ...t,
196
+ licensePlate: e.target.value
197
+ })),
198
+ placeholder: "ABC-1234"
199
+ })]
200
+ })
201
+ ]
202
+ })]
203
+ })] })]
204
+ })]
205
+ });
206
+ }
207
+ function H() {
208
+ let { vehicleId: e } = P(), { basePath: t, navigate: n } = g(), { vehicle: r, isLoading: a, error: o, refetch: p } = D(e), w = () => n?.(s(t, "fleet/vehicles")), O = (e) => n?.(s(t, e));
209
+ return e ? a ? /* @__PURE__ */ F(_, { message: "Loading vehicle details..." }) : o || !r ? /* @__PURE__ */ F(h, {
210
+ title: "Vehicle not found",
211
+ onRetry: p
212
+ }) : /* @__PURE__ */ I(f, {
213
+ title: r.vehicleNumber,
214
+ subtitle: `${r.make} ${r.model} (${r.year})`,
215
+ icon: /* @__PURE__ */ F(E, { size: 24 }),
216
+ headerActions: /* @__PURE__ */ I("div", {
217
+ className: "flex gap-2",
218
+ children: [/* @__PURE__ */ I(v, {
219
+ variant: "outline",
220
+ onClick: w,
221
+ children: [/* @__PURE__ */ F(y, { size: 16 }), " Back"]
222
+ }), /* @__PURE__ */ I(v, { children: [/* @__PURE__ */ F(T, { size: 16 }), " Edit"] })]
223
+ }),
224
+ headerContent: /* @__PURE__ */ I("div", {
225
+ className: "flex gap-2",
226
+ children: [/* @__PURE__ */ F(A, {
227
+ status: r.status,
228
+ type: "vehicle"
229
+ }), /* @__PURE__ */ F(k, { type: r.type })]
230
+ }),
231
+ children: [
232
+ /* @__PURE__ */ F(z, {
233
+ icon: /* @__PURE__ */ F(E, { size: 18 }),
234
+ children: "The full record for this vehicle — specs, capacity, fuel and mileage, maintenance schedule and current location. Use it to confirm a vehicle is fuelled, serviced and the right size before dispatching it on a delivery."
235
+ }),
236
+ /* @__PURE__ */ F(R, {
237
+ storageKey: "movethewheels-vehicle-details",
238
+ steps: [{
239
+ id: "assign",
240
+ label: "Assign to a delivery",
241
+ description: "Put this vehicle on an order that fits its capacity.",
242
+ icon: /* @__PURE__ */ F(C, { size: 16 }),
243
+ onClick: () => O("orders")
244
+ }, {
245
+ id: "maintenance",
246
+ label: "Schedule maintenance",
247
+ description: "Keep it road-ready and compliant.",
248
+ icon: /* @__PURE__ */ F(S, { size: 16 }),
249
+ onClick: () => {}
250
+ }]
251
+ }),
252
+ /* @__PURE__ */ I("div", {
253
+ className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
254
+ children: [/* @__PURE__ */ I("div", {
255
+ className: "lg:col-span-2 space-y-6",
256
+ children: [
257
+ /* @__PURE__ */ I(L, { children: [/* @__PURE__ */ F("h2", {
258
+ className: "text-base font-semibold text-text-primary mb-4",
259
+ children: "Vehicle Information"
260
+ }), /* @__PURE__ */ I("div", {
261
+ className: "grid grid-cols-2 md:grid-cols-4 gap-6",
262
+ children: [
263
+ /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
264
+ className: "text-sm text-text-secondary",
265
+ children: "Type"
266
+ }), /* @__PURE__ */ F("p", {
267
+ className: "font-medium capitalize",
268
+ children: r.type
269
+ })] }),
270
+ /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
271
+ className: "text-sm text-text-secondary",
272
+ children: "Make"
273
+ }), /* @__PURE__ */ F("p", {
274
+ className: "font-medium",
275
+ children: r.make
276
+ })] }),
277
+ /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
278
+ className: "text-sm text-text-secondary",
279
+ children: "Model"
280
+ }), /* @__PURE__ */ F("p", {
281
+ className: "font-medium",
282
+ children: r.model
283
+ })] }),
284
+ /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
285
+ className: "text-sm text-text-secondary",
286
+ children: "Year"
287
+ }), /* @__PURE__ */ F("p", {
288
+ className: "font-medium",
289
+ children: r.year
290
+ })] })
291
+ ]
292
+ })] }),
293
+ /* @__PURE__ */ I(c, { children: [/* @__PURE__ */ F(d, { children: /* @__PURE__ */ F(u, { children: "Capacity" }) }), /* @__PURE__ */ F(l, { children: /* @__PURE__ */ I("div", {
294
+ className: "grid grid-cols-3 gap-6",
295
+ children: [
296
+ /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
297
+ className: "text-sm text-text-secondary",
298
+ children: "Weight"
299
+ }), /* @__PURE__ */ I("p", {
300
+ className: "text-2xl font-bold",
301
+ children: [r.capacity.weight, /* @__PURE__ */ F("span", {
302
+ className: "text-sm font-normal",
303
+ children: " kg"
304
+ })]
305
+ })] }),
306
+ /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
307
+ className: "text-sm text-text-secondary",
308
+ children: "Volume"
309
+ }), /* @__PURE__ */ I("p", {
310
+ className: "text-2xl font-bold",
311
+ children: [r.capacity.volume, /* @__PURE__ */ F("span", {
312
+ className: "text-sm font-normal",
313
+ children: " m³"
314
+ })]
315
+ })] }),
316
+ r.capacity.pallets && /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
317
+ className: "text-sm text-text-secondary",
318
+ children: "Pallets"
319
+ }), /* @__PURE__ */ F("p", {
320
+ className: "text-2xl font-bold",
321
+ children: r.capacity.pallets
322
+ })] })
323
+ ]
324
+ }) })] }),
325
+ /* @__PURE__ */ I(c, { children: [/* @__PURE__ */ F(d, { children: /* @__PURE__ */ I(u, {
326
+ className: "flex items-center gap-2",
327
+ children: [/* @__PURE__ */ F(b, { size: 18 }), " Documents"]
328
+ }) }), /* @__PURE__ */ F(l, { children: r.documents.length > 0 ? /* @__PURE__ */ F("div", {
329
+ className: "space-y-3",
330
+ children: r.documents.map((e) => /* @__PURE__ */ I("div", {
331
+ className: "flex items-center justify-between p-3 border rounded-lg",
332
+ children: [/* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
333
+ className: "font-medium capitalize",
334
+ children: e.type.replace("_", " ")
335
+ }), /* @__PURE__ */ I("p", {
336
+ className: "text-sm text-text-secondary",
337
+ children: ["Expires: ", j(e.expiryDate)]
338
+ })] }), /* @__PURE__ */ F(m, {
339
+ variant: e.verified ? "default" : "secondary",
340
+ children: e.verified ? "Verified" : "Pending"
341
+ })]
342
+ }, e.id))
343
+ }) : /* @__PURE__ */ F("p", {
344
+ className: "text-text-secondary text-center py-4",
345
+ children: "No documents uploaded"
346
+ }) })] })
347
+ ]
348
+ }), /* @__PURE__ */ I("div", {
349
+ className: "space-y-6",
350
+ children: [
351
+ /* @__PURE__ */ I(c, { children: [/* @__PURE__ */ F(d, { children: /* @__PURE__ */ I(u, {
352
+ className: "flex items-center gap-2",
353
+ children: [/* @__PURE__ */ F(x, { size: 18 }), " Fuel & Mileage"]
354
+ }) }), /* @__PURE__ */ I(l, {
355
+ className: "space-y-4",
356
+ children: [r.fuelLevel !== void 0 && /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ I("div", {
357
+ className: "flex justify-between text-sm mb-2",
358
+ children: [/* @__PURE__ */ F("span", { children: "Fuel Level" }), /* @__PURE__ */ I("span", { children: [r.fuelLevel, "%"] })]
359
+ }), /* @__PURE__ */ F(i, { value: r.fuelLevel })] }), r.mileage !== void 0 && /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
360
+ className: "text-sm text-text-secondary",
361
+ children: "Total Mileage"
362
+ }), /* @__PURE__ */ I("p", {
363
+ className: "text-2xl font-bold",
364
+ children: [
365
+ r.mileage.toLocaleString(),
366
+ " ",
367
+ /* @__PURE__ */ F("span", {
368
+ className: "text-sm font-normal",
369
+ children: "miles"
370
+ })
371
+ ]
372
+ })] })]
373
+ })] }),
374
+ /* @__PURE__ */ I(c, { children: [/* @__PURE__ */ F(d, { children: /* @__PURE__ */ I(u, {
375
+ className: "flex items-center gap-2",
376
+ children: [/* @__PURE__ */ F(S, { size: 18 }), " Maintenance"]
377
+ }) }), /* @__PURE__ */ I(l, {
378
+ className: "space-y-3",
379
+ children: [/* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
380
+ className: "text-sm text-text-secondary",
381
+ children: "Last Maintenance"
382
+ }), /* @__PURE__ */ F("p", {
383
+ className: "font-medium",
384
+ children: r.lastMaintenance ? j(r.lastMaintenance) : "N/A"
385
+ })] }), /* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F("p", {
386
+ className: "text-sm text-text-secondary",
387
+ children: "Next Scheduled"
388
+ }), /* @__PURE__ */ F("p", {
389
+ className: "font-medium",
390
+ children: r.nextMaintenance ? j(r.nextMaintenance) : "N/A"
391
+ })] })]
392
+ })] }),
393
+ r.currentLocation && /* @__PURE__ */ I(c, { children: [/* @__PURE__ */ F(d, { children: /* @__PURE__ */ I(u, {
394
+ className: "flex items-center gap-2",
395
+ children: [/* @__PURE__ */ F(C, { size: 18 }), " Current Location"]
396
+ }) }), /* @__PURE__ */ I(l, { children: [/* @__PURE__ */ F("p", {
397
+ className: "text-sm",
398
+ children: r.currentLocation.address || "Location updating..."
399
+ }), /* @__PURE__ */ I("p", {
400
+ className: "text-xs text-text-secondary mt-1",
401
+ children: ["Updated ", j(r.currentLocation.timestamp || /* @__PURE__ */ new Date(), "relative")]
402
+ })] })] })
403
+ ]
404
+ })]
405
+ })
406
+ ]
407
+ }) : /* @__PURE__ */ F(V, {});
408
+ }
409
+ //#endregion
410
+ export { H as default };
@@ -3,9 +3,9 @@ import { t as i } from "./DataTable-DmciIKKM.js";
3
3
  import { t as a } from "./download-DRXxoiQR.js";
4
4
  import { t as o } from "./plus-Z76q-FZm.js";
5
5
  import { t as s } from "./refresh-cw-DKt6f5T6.js";
6
- import { t as c } from "./truck-DrlfSpRC.js";
7
- import { o as l } from "./useFleet-DiAC-IiH.js";
8
- import { a as u, r as d } from "./StatusBadge-NpTeHVlw.js";
6
+ import { t as c } from "./truck-C0v_hbLR.js";
7
+ import { o as l } from "./useFleet-DKqXZ16m.js";
8
+ import { a as u, r as d } from "./StatusBadge-BZurYHMy.js";
9
9
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
10
  import { CTAOverflowMenu as m, EmphasisPanel as h, PagePurpose as g } from "@burdenoff/fe-libs/ui";
11
11
  //#region src/movethewheels/pages/VehiclesPage.tsx
@@ -21,7 +21,7 @@ function _() {
21
21
  primary: {
22
22
  label: "Add Vehicle",
23
23
  icon: /* @__PURE__ */ f(o, { size: 16 }),
24
- onSelect: () => {}
24
+ onSelect: () => C("fleet/vehicles/new")
25
25
  },
26
26
  actions: [{
27
27
  label: "Refresh",
@@ -30,7 +30,7 @@ function _() {
30
30
  }, {
31
31
  label: "Export",
32
32
  icon: /* @__PURE__ */ f(a, { size: 16 }),
33
- onSelect: () => {}
33
+ onSelect: () => C("import-export")
34
34
  }]
35
35
  }),
36
36
  children: [