@burdenoff/microfe-movethewheels 2026.703.8 → 2026.704.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 (37) hide show
  1. package/dist/{CreateOrderPage-V8aXfcpN.js → CreateOrderPage-CXbhJLLz.js} +163 -138
  2. package/dist/{DashboardPage-DiD-cWwD.js → DashboardPage-BoswH3ec.js} +2 -2
  3. package/dist/DriverDetailsPage-CPO0G8Ki.js +518 -0
  4. package/dist/{DriversPage-DW-FGPFW.js → DriversPage-6Z61dpDI.js} +1 -1
  5. package/dist/{FleetPage-P9k4zZqP.js → FleetPage-qWRj7WFO.js} +1 -1
  6. package/dist/{InventoryPage-BWikjZMW.js → InventoryPage-DbR4Z--d.js} +1 -1
  7. package/dist/{LiveTrackingPage-UQBWlthJ.js → LiveTrackingPage-5U68u3oA.js} +1 -1
  8. package/dist/{OrderDetailsPage-2J4ua0wd.js → OrderDetailsPage-DRYifXm9.js} +1 -1
  9. package/dist/ProductDetailsPage-CWgcRqGR.js +375 -0
  10. package/dist/{ProductsPage-Bn1U2jTj.js → ProductsPage-CokwDOR2.js} +1 -1
  11. package/dist/{RouteDetailsPage-CgSY1CTd.js → RouteDetailsPage-BHQbFgI9.js} +242 -210
  12. package/dist/{SettingsPage-2a05Sq2k.js → SettingsPage-_6SIlcBX.js} +1 -1
  13. package/dist/{TrackingPage-SnjW6qeD.js → TrackingPage-Cg0tYGJe.js} +1 -1
  14. package/dist/{VehicleDetailsPage-CvRMJ2zC.js → VehicleDetailsPage-BbZlCFPo.js} +159 -135
  15. package/dist/{VehiclesPage-qxf-1C1B.js → VehiclesPage-BfBEyXGs.js} +1 -1
  16. package/dist/WarehouseDetailsPage-DxNhiaoI.js +515 -0
  17. package/dist/{WarehousesPage-44Wj7AGT.js → WarehousesPage-M3NaBT0z.js} +1 -1
  18. package/dist/index.js +25 -5
  19. package/dist/{useFleet-BXSocBD_.js → useFleet-BfA_-VUW.js} +100 -71
  20. package/dist/{useInventory-DmZficcp.js → useInventory-BO7TSgq_.js} +98 -72
  21. package/dist/{useSettings-CteNasBE.js → useSettings-BNNzQs_B.js} +1 -1
  22. package/dist/{useTracking-B7ttexRe.js → useTracking-7nd_XOSL.js} +1 -1
  23. package/package.json +1 -1
  24. package/src/movethewheels/MoveTheWheelsRoutes.tsx +5 -0
  25. package/src/movethewheels/hooks/useFleet.ts +113 -0
  26. package/src/movethewheels/hooks/useInventory.ts +86 -0
  27. package/src/movethewheels/hooks/useSettings.ts +8 -1
  28. package/src/movethewheels/pages/CreateOrderPage.tsx +48 -6
  29. package/src/movethewheels/pages/DriverDetailsPage.tsx +56 -18
  30. package/src/movethewheels/pages/ProductDetailsPage.tsx +51 -15
  31. package/src/movethewheels/pages/RouteDetailsPage.tsx +51 -7
  32. package/src/movethewheels/pages/VehicleDetailsPage.tsx +51 -15
  33. package/src/movethewheels/pages/WarehouseDetailsPage.tsx +46 -10
  34. package/src/movethewheels/types/index.ts +3 -0
  35. package/dist/DriverDetailsPage-DjaXaATQ.js +0 -490
  36. package/dist/ProductDetailsPage-BSjWLrty.js +0 -350
  37. package/dist/WarehouseDetailsPage-D0Wyyj1Y.js +0 -493
@@ -0,0 +1,375 @@
1
+ import { A as e, d as t, f as n, g as r, h as i, i as a, j as o, l as s, lt as c, n as l, r as u, st as d, u as f, ut as p } from "./PageLayout-j9Zw3wBN.js";
2
+ import { t as m } from "./arrow-left-1dVWv2dg.js";
3
+ import { t as h } from "./box-DW1KNP8j.js";
4
+ import { t as g } from "./dollar-sign-CYGHy2oS.js";
5
+ import { t as _ } from "./package-UyaWiALC.js";
6
+ import { t as v } from "./save-CcfoIn2J.js";
7
+ import { t as y } from "./square-pen-Dr1X-P2s.js";
8
+ import { r as b, t as x } from "./useInventory-BO7TSgq_.js";
9
+ import { t as S } from "./FormError-D4T5FWZA.js";
10
+ import { n as C } from "./formatters-FWJDwTFv.js";
11
+ import { useEffect as w, useState as T } from "react";
12
+ import { useLocation as E, useParams as D } from "react-router-dom";
13
+ import { jsx as O, jsxs as k } from "react/jsx-runtime";
14
+ import { EmphasisPanel as A, NextSteps as j, PagePurpose as M } from "@burdenoff/fe-libs/ui";
15
+ //#region node_modules/lucide-react/dist/esm/icons/tag.js
16
+ var N = p("Tag", [["path", {
17
+ d: "M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",
18
+ key: "vktsd0"
19
+ }], ["circle", {
20
+ cx: "7.5",
21
+ cy: "7.5",
22
+ r: ".5",
23
+ fill: "currentColor",
24
+ key: "kqv944"
25
+ }]]);
26
+ //#endregion
27
+ //#region src/movethewheels/pages/ProductDetailsPage.tsx
28
+ function P({ editId: t }) {
29
+ let { basePath: n, navigate: r } = d(), { createProduct: i, updateProduct: s } = x(), { product: l } = b(t), u = !!t, [p, h] = T({
30
+ name: "",
31
+ sku: "",
32
+ category: "",
33
+ brand: "",
34
+ weight: ""
35
+ }), [g, y] = T(!1), [C, E] = T(null);
36
+ w(() => {
37
+ t && l && h({
38
+ name: l.name ?? "",
39
+ sku: l.sku ?? "",
40
+ category: l.category ?? "",
41
+ brand: l.brand ?? "",
42
+ weight: l.weight == null ? "" : String(l.weight)
43
+ });
44
+ }, [t, l]);
45
+ let D = () => r?.(c(n, "inventory/products")), j = async (e) => {
46
+ if (e.preventDefault(), !p.name.trim() || !p.sku.trim()) {
47
+ E("Product name and SKU are required.");
48
+ return;
49
+ }
50
+ y(!0), E(null);
51
+ try {
52
+ let e = p.weight.trim() ? Number(p.weight) : void 0;
53
+ if (u && t) {
54
+ let i = await s(t, {
55
+ name: p.name.trim(),
56
+ sku: p.sku.trim(),
57
+ category: p.category.trim() || void 0,
58
+ brand: p.brand.trim() || void 0,
59
+ weight: e !== void 0 && !Number.isNaN(e) ? e : void 0
60
+ });
61
+ r?.(c(n, `inventory/products/${i.id}`));
62
+ } else {
63
+ let t = await i({
64
+ name: p.name.trim(),
65
+ sku: p.sku.trim(),
66
+ category: p.category.trim() || void 0,
67
+ brand: p.brand.trim() || void 0,
68
+ weight: e !== void 0 && !Number.isNaN(e) ? e : void 0
69
+ });
70
+ r?.(c(n, `inventory/products/${t.id}`));
71
+ }
72
+ } catch (e) {
73
+ console.error("Failed to create product:", e), E(e instanceof Error ? e.message : "Failed to create product. Please try again."), y(!1);
74
+ }
75
+ };
76
+ return /* @__PURE__ */ k(a, {
77
+ title: u ? "Edit Product" : "Add Product",
78
+ subtitle: "Add an item to your catalog",
79
+ icon: /* @__PURE__ */ O(_, { size: 24 }),
80
+ headerActions: /* @__PURE__ */ k("div", {
81
+ className: "flex gap-2",
82
+ children: [/* @__PURE__ */ k(f, {
83
+ variant: "outline",
84
+ onClick: D,
85
+ disabled: g,
86
+ children: [/* @__PURE__ */ O(m, { size: 16 }), " Cancel"]
87
+ }), /* @__PURE__ */ k(f, {
88
+ onClick: j,
89
+ disabled: g,
90
+ children: [
91
+ /* @__PURE__ */ O(v, { size: 16 }),
92
+ " ",
93
+ u ? g ? "Saving..." : "Save Changes" : g ? "Saving..." : "Add Product"
94
+ ]
95
+ })]
96
+ }),
97
+ children: [/* @__PURE__ */ O(M, {
98
+ icon: /* @__PURE__ */ O(_, { size: 18 }),
99
+ children: "Add a product so it can be added to orders and stocked in warehouses. A name and SKU are all it takes to start — category, brand and weight help with picking, pricing and routing."
100
+ }), /* @__PURE__ */ k("form", {
101
+ onSubmit: j,
102
+ className: "max-w-2xl space-y-6",
103
+ children: [/* @__PURE__ */ O(S, { message: C }), /* @__PURE__ */ k(A, { children: [/* @__PURE__ */ O("h2", {
104
+ className: "text-base font-semibold text-text-primary mb-4",
105
+ children: "Product Details"
106
+ }), /* @__PURE__ */ k("div", {
107
+ className: "space-y-4",
108
+ children: [/* @__PURE__ */ k("div", {
109
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
110
+ children: [/* @__PURE__ */ k("div", {
111
+ className: "space-y-2",
112
+ children: [/* @__PURE__ */ k(o, {
113
+ htmlFor: "name",
114
+ children: ["Name ", /* @__PURE__ */ O("span", {
115
+ className: "text-status-error-text",
116
+ children: "*"
117
+ })]
118
+ }), /* @__PURE__ */ O(e, {
119
+ id: "name",
120
+ value: p.name,
121
+ onChange: (e) => h((t) => ({
122
+ ...t,
123
+ name: e.target.value
124
+ })),
125
+ placeholder: "Wireless Headphones",
126
+ required: !0
127
+ })]
128
+ }), /* @__PURE__ */ k("div", {
129
+ className: "space-y-2",
130
+ children: [/* @__PURE__ */ k(o, {
131
+ htmlFor: "sku",
132
+ children: ["SKU ", /* @__PURE__ */ O("span", {
133
+ className: "text-status-error-text",
134
+ children: "*"
135
+ })]
136
+ }), /* @__PURE__ */ O(e, {
137
+ id: "sku",
138
+ value: p.sku,
139
+ onChange: (e) => h((t) => ({
140
+ ...t,
141
+ sku: e.target.value
142
+ })),
143
+ placeholder: "SKU-001",
144
+ required: !0
145
+ })]
146
+ })]
147
+ }), /* @__PURE__ */ k("div", {
148
+ className: "grid grid-cols-1 md:grid-cols-3 gap-4",
149
+ children: [
150
+ /* @__PURE__ */ k("div", {
151
+ className: "space-y-2",
152
+ children: [/* @__PURE__ */ O(o, {
153
+ htmlFor: "category",
154
+ children: "Category"
155
+ }), /* @__PURE__ */ O(e, {
156
+ id: "category",
157
+ value: p.category,
158
+ onChange: (e) => h((t) => ({
159
+ ...t,
160
+ category: e.target.value
161
+ })),
162
+ placeholder: "Electronics"
163
+ })]
164
+ }),
165
+ /* @__PURE__ */ k("div", {
166
+ className: "space-y-2",
167
+ children: [/* @__PURE__ */ O(o, {
168
+ htmlFor: "brand",
169
+ children: "Brand"
170
+ }), /* @__PURE__ */ O(e, {
171
+ id: "brand",
172
+ value: p.brand,
173
+ onChange: (e) => h((t) => ({
174
+ ...t,
175
+ brand: e.target.value
176
+ })),
177
+ placeholder: "Acme"
178
+ })]
179
+ }),
180
+ /* @__PURE__ */ k("div", {
181
+ className: "space-y-2",
182
+ children: [/* @__PURE__ */ O(o, {
183
+ htmlFor: "weight",
184
+ children: "Weight (kg)"
185
+ }), /* @__PURE__ */ O(e, {
186
+ id: "weight",
187
+ type: "number",
188
+ min: "0",
189
+ step: "0.01",
190
+ value: p.weight,
191
+ onChange: (e) => h((t) => ({
192
+ ...t,
193
+ weight: e.target.value
194
+ })),
195
+ placeholder: "0.5"
196
+ })]
197
+ })
198
+ ]
199
+ })]
200
+ })] })]
201
+ })]
202
+ });
203
+ }
204
+ function F() {
205
+ let { productId: e } = D(), { basePath: o, navigate: p } = d(), { product: v, isLoading: x, error: S, refetch: w } = b(e), T = E().pathname.endsWith("/edit"), F = () => p?.(c(o, "inventory/products")), I = (e) => p?.(c(o, e));
206
+ return e ? T ? /* @__PURE__ */ O(P, { editId: e }) : x ? /* @__PURE__ */ O(u, { message: "Loading product details..." }) : S || !v ? /* @__PURE__ */ O(l, {
207
+ title: "Product not found",
208
+ onRetry: w
209
+ }) : /* @__PURE__ */ k(a, {
210
+ title: v.name,
211
+ subtitle: `SKU: ${v.sku}`,
212
+ icon: /* @__PURE__ */ O(_, { size: 24 }),
213
+ headerActions: /* @__PURE__ */ k("div", {
214
+ className: "flex gap-2",
215
+ children: [/* @__PURE__ */ k(f, {
216
+ variant: "outline",
217
+ onClick: F,
218
+ children: [/* @__PURE__ */ O(m, { size: 16 }), " Back"]
219
+ }), /* @__PURE__ */ k(f, {
220
+ onClick: () => p?.(c(o, `inventory/products/${e}/edit`)),
221
+ children: [/* @__PURE__ */ O(y, { size: 16 }), " Edit"]
222
+ })]
223
+ }),
224
+ headerContent: /* @__PURE__ */ k("div", {
225
+ className: "flex gap-2",
226
+ children: [
227
+ /* @__PURE__ */ O(s, {
228
+ variant: "outline",
229
+ children: v.category
230
+ }),
231
+ v.brand && /* @__PURE__ */ O(s, {
232
+ variant: "secondary",
233
+ children: v.brand
234
+ }),
235
+ v.fragile && /* @__PURE__ */ O(s, {
236
+ variant: "destructive",
237
+ children: "Fragile"
238
+ }),
239
+ v.hazardous && /* @__PURE__ */ O(s, {
240
+ variant: "destructive",
241
+ children: "Hazardous"
242
+ }),
243
+ v.temperatureControlled && /* @__PURE__ */ O(s, {
244
+ variant: "secondary",
245
+ children: "Temp Controlled"
246
+ })
247
+ ]
248
+ }),
249
+ children: [
250
+ /* @__PURE__ */ O(M, {
251
+ icon: /* @__PURE__ */ O(_, { size: 18 }),
252
+ children: "The catalog record for this item — its dimensions, weight, value and handling flags. These drive how it's packed, priced and routed, so keep them accurate before adding the product to an order or stocking it in a warehouse."
253
+ }),
254
+ /* @__PURE__ */ O(j, {
255
+ storageKey: "movethewheels-product-details",
256
+ steps: [{
257
+ id: "order",
258
+ label: "Add this product to an order",
259
+ description: "Include it on a new delivery.",
260
+ icon: /* @__PURE__ */ O(_, { size: 16 }),
261
+ onClick: () => I("orders/new")
262
+ }, {
263
+ id: "edit",
264
+ label: "Edit product details",
265
+ description: "Update dimensions, value or handling flags.",
266
+ icon: /* @__PURE__ */ O(N, { size: 16 }),
267
+ onClick: () => {}
268
+ }]
269
+ }),
270
+ /* @__PURE__ */ k("div", {
271
+ className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
272
+ children: [/* @__PURE__ */ k("div", {
273
+ className: "lg:col-span-2 space-y-6",
274
+ children: [
275
+ /* @__PURE__ */ k(t, { children: [/* @__PURE__ */ O(i, { children: /* @__PURE__ */ O(r, { children: "Description" }) }), /* @__PURE__ */ O(n, { children: /* @__PURE__ */ O("p", { children: v.description }) })] }),
276
+ /* @__PURE__ */ k(t, { children: [/* @__PURE__ */ O(i, { children: /* @__PURE__ */ k(r, {
277
+ className: "flex items-center gap-2",
278
+ children: [/* @__PURE__ */ O(h, { size: 18 }), " Dimensions & Weight"]
279
+ }) }), /* @__PURE__ */ O(n, { children: /* @__PURE__ */ k("div", {
280
+ className: "grid grid-cols-2 md:grid-cols-4 gap-4",
281
+ children: [
282
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
283
+ className: "text-sm text-text-secondary",
284
+ children: "Length"
285
+ }), /* @__PURE__ */ k("p", {
286
+ className: "text-2xl font-bold",
287
+ children: [v.dimensions.length, /* @__PURE__ */ k("span", {
288
+ className: "text-sm font-normal",
289
+ children: [" ", v.dimensions.unit]
290
+ })]
291
+ })] }),
292
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
293
+ className: "text-sm text-text-secondary",
294
+ children: "Width"
295
+ }), /* @__PURE__ */ k("p", {
296
+ className: "text-2xl font-bold",
297
+ children: [v.dimensions.width, /* @__PURE__ */ k("span", {
298
+ className: "text-sm font-normal",
299
+ children: [" ", v.dimensions.unit]
300
+ })]
301
+ })] }),
302
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
303
+ className: "text-sm text-text-secondary",
304
+ children: "Height"
305
+ }), /* @__PURE__ */ k("p", {
306
+ className: "text-2xl font-bold",
307
+ children: [v.dimensions.height, /* @__PURE__ */ k("span", {
308
+ className: "text-sm font-normal",
309
+ children: [" ", v.dimensions.unit]
310
+ })]
311
+ })] }),
312
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
313
+ className: "text-sm text-text-secondary",
314
+ children: "Weight"
315
+ }), /* @__PURE__ */ k("p", {
316
+ className: "text-2xl font-bold",
317
+ children: [v.weight, /* @__PURE__ */ O("span", {
318
+ className: "text-sm font-normal",
319
+ children: " kg"
320
+ })]
321
+ })] })
322
+ ]
323
+ }) })] }),
324
+ v.attributes.length > 0 && /* @__PURE__ */ k(t, { children: [/* @__PURE__ */ O(i, { children: /* @__PURE__ */ k(r, {
325
+ className: "flex items-center gap-2",
326
+ children: [/* @__PURE__ */ O(N, { size: 18 }), " Attributes"]
327
+ }) }), /* @__PURE__ */ O(n, { children: /* @__PURE__ */ O("div", {
328
+ className: "grid grid-cols-2 md:grid-cols-3 gap-4",
329
+ children: v.attributes.map((e, t) => /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
330
+ className: "text-sm text-text-secondary",
331
+ children: e.name
332
+ }), /* @__PURE__ */ O("p", {
333
+ className: "font-medium",
334
+ children: e.value
335
+ })] }, t))
336
+ }) })] })
337
+ ]
338
+ }), /* @__PURE__ */ k("div", {
339
+ className: "space-y-6",
340
+ children: [/* @__PURE__ */ k(A, { children: [
341
+ /* @__PURE__ */ k("h2", {
342
+ className: "flex items-center gap-2 text-base font-semibold text-text-primary mb-3",
343
+ children: [/* @__PURE__ */ O(g, { size: 18 }), " Pricing"]
344
+ }),
345
+ /* @__PURE__ */ O("p", {
346
+ className: "text-3xl font-bold",
347
+ children: C(v.value)
348
+ }),
349
+ /* @__PURE__ */ O("p", {
350
+ className: "text-sm text-text-secondary",
351
+ children: "Unit price"
352
+ })
353
+ ] }), /* @__PURE__ */ k(t, { children: [/* @__PURE__ */ O(i, { children: /* @__PURE__ */ O(r, { children: "Identifiers" }) }), /* @__PURE__ */ k(n, {
354
+ className: "space-y-3",
355
+ children: [/* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
356
+ className: "text-sm text-text-secondary",
357
+ children: "SKU"
358
+ }), /* @__PURE__ */ O("p", {
359
+ className: "font-mono",
360
+ children: v.sku
361
+ })] }), v.barcode && /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
362
+ className: "text-sm text-text-secondary",
363
+ children: "Barcode"
364
+ }), /* @__PURE__ */ O("p", {
365
+ className: "font-mono",
366
+ children: v.barcode
367
+ })] })]
368
+ })] })]
369
+ })]
370
+ })
371
+ ]
372
+ }) : /* @__PURE__ */ O(P, {});
373
+ }
374
+ //#endregion
375
+ export { F as default };
@@ -5,7 +5,7 @@ import { t as s } from "./package-UyaWiALC.js";
5
5
  import { t as c } from "./plus-Bk_G-lFC.js";
6
6
  import { t as l } from "./refresh-cw-C4-jecjy.js";
7
7
  import { t as u } from "./triangle-alert-Dh56Yu3-.js";
8
- import { a as d, i as f } from "./useInventory-DmZficcp.js";
8
+ import { a as d, i as f } from "./useInventory-BO7TSgq_.js";
9
9
  import { r as p, t as m } from "./MetricCard-CqU5WsyW.js";
10
10
  import { n as h } from "./formatters-FWJDwTFv.js";
11
11
  import { useState as g } from "react";