@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
@@ -1,51 +1,20 @@
1
- import { A as e, F as t, I as n, L as r, P as i, Q as a, R as o, d as s, f as c, g as l, h as u, i as d, it as f, j as p, t as m, u as h, z as g } from "./PageLayout-D3N8MCTm.js";
2
- import { t as _ } from "./arrow-left-CBpZKkpq.js";
3
- import { t as v } from "./map-pin-BSaf5IDL.js";
4
- import { t as y } from "./package-BE7U0wQE.js";
5
- import { t as b } from "./plus-Dl1rLeJR.js";
6
- import { t as x } from "./save-XH8vydOn.js";
7
- import { t as S } from "./users-g2N0eL-Z.js";
8
- import { r as C } from "./graphqlClient-CdJyR_ed.js";
9
- import { r as w, t as T } from "./useOrders-D_3_hGMp.js";
10
- import { r as E } from "./useCustomers-bS3a4ytk.js";
11
- import { t as D } from "./navigation-BgnOfsVd.js";
1
+ import { A as e, F as t, I as n, L as r, P as i, Q 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, ot as m, t as h, u as g, z as _ } from "./PageLayout-D4LDHJJq.js";
2
+ import { t as v } from "./arrow-left-n48Y-Wis.js";
3
+ import { t as y } from "./map-pin-BGiCvyCs.js";
4
+ import { t as b } from "./package-BChUzpJS.js";
5
+ import { t as x } from "./plus-Z76q-FZm.js";
6
+ import { t as S } from "./save-CojywNhG.js";
7
+ import { t as C } from "./trash-2-BKhar6Hs.js";
8
+ import { t as w } from "./users-DZ-ilS6B.js";
9
+ import { r as T, t as E } from "./useOrders-Cfk1GLiq.js";
10
+ import { r as D } from "./useCustomers-BmTNGxiI.js";
12
11
  import { useState as O } from "react";
13
12
  import { useParams as k } from "react-router-dom";
14
13
  import { jsx as A, jsxs as j } from "react/jsx-runtime";
15
14
  import { EmphasisPanel as M, NextSteps as N, PagePurpose as P } from "@burdenoff/fe-libs/ui";
16
- //#region node_modules/lucide-react/dist/esm/icons/trash-2.js
17
- var F = f("Trash2", [
18
- ["path", {
19
- d: "M3 6h18",
20
- key: "d0wm0j"
21
- }],
22
- ["path", {
23
- d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",
24
- key: "4alrt4"
25
- }],
26
- ["path", {
27
- d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",
28
- key: "v07s0e"
29
- }],
30
- ["line", {
31
- x1: "10",
32
- x2: "10",
33
- y1: "11",
34
- y2: "17",
35
- key: "1uufr5"
36
- }],
37
- ["line", {
38
- x1: "14",
39
- x2: "14",
40
- y1: "11",
41
- y2: "17",
42
- key: "xtxkd"
43
- }]
44
- ]);
45
- //#endregion
46
15
  //#region src/movethewheels/pages/CreateOrderPage.tsx
47
- function I() {
48
- let { orderId: f } = k(), { basePath: I, navigate: L } = C(), { order: R } = T(f), { createOrder: z } = w(), { customers: B } = E({ limit: 100 }), V = !!f && !!R, [H, U] = O({
16
+ function F() {
17
+ let { orderId: F } = k(), { basePath: I, navigate: L } = m(), { order: R } = E(F), { createOrder: z } = T(), { customers: B } = D({ limit: 100 }), V = !!F && !!R, [H, U] = O({
49
18
  customerId: R?.customerId || "",
50
19
  orderType: R?.orderType || "b2c",
51
20
  priority: R?.priority || "normal",
@@ -66,7 +35,7 @@ function I() {
66
35
  items: R?.items || [],
67
36
  specialInstructions: R?.specialInstructions || ""
68
37
  }), [W, G] = O(!1), K = () => {
69
- L && L(D(I, "orders"));
38
+ L && L(s(I, "orders"));
70
39
  }, q = async (e) => {
71
40
  e.preventDefault(), G(!0);
72
41
  try {
@@ -141,25 +110,25 @@ function I() {
141
110
  } : r)
142
111
  }));
143
112
  };
144
- return /* @__PURE__ */ j(d, {
113
+ return /* @__PURE__ */ j(f, {
145
114
  title: V ? "Edit Order" : "Create Order",
146
115
  subtitle: V ? `Editing ${R?.orderNumber}` : "Create a new delivery order",
147
- icon: /* @__PURE__ */ A(y, { size: 24 }),
116
+ icon: /* @__PURE__ */ A(b, { size: 24 }),
148
117
  headerActions: /* @__PURE__ */ j("div", {
149
118
  className: "flex gap-2",
150
- children: [/* @__PURE__ */ j(h, {
119
+ children: [/* @__PURE__ */ j(g, {
151
120
  variant: "outline",
152
121
  onClick: K,
153
- children: [/* @__PURE__ */ A(_, { size: 16 }), "Cancel"]
154
- }), /* @__PURE__ */ j(h, {
122
+ children: [/* @__PURE__ */ A(v, { size: 16 }), "Cancel"]
123
+ }), /* @__PURE__ */ j(g, {
155
124
  onClick: q,
156
125
  disabled: W,
157
- children: [/* @__PURE__ */ A(x, { size: 16 }), W ? "Saving..." : V ? "Save Changes" : "Create Order"]
126
+ children: [/* @__PURE__ */ A(S, { size: 16 }), W ? "Saving..." : V ? "Save Changes" : "Create Order"]
158
127
  })]
159
128
  }),
160
129
  children: [
161
130
  /* @__PURE__ */ A(P, {
162
- icon: /* @__PURE__ */ A(y, { size: 18 }),
131
+ icon: /* @__PURE__ */ A(b, { size: 18 }),
163
132
  children: V ? "Update this delivery before it goes out — change the customer, addresses, items or handling notes, then save." : "Book a new delivery in a few steps: choose who it’s for, set pickup and drop-off addresses, list what’s being shipped, and add any handling notes. Once created it joins the orders pipeline ready to assign and track."
164
133
  }),
165
134
  /* @__PURE__ */ A(N, {
@@ -169,7 +138,7 @@ function I() {
169
138
  id: "customer",
170
139
  label: "Pick the customer first",
171
140
  description: "Their saved contact details auto-fill the order.",
172
- icon: /* @__PURE__ */ A(S, { size: 16 }),
141
+ icon: /* @__PURE__ */ A(w, { size: 16 }),
173
142
  done: !!H.customerId,
174
143
  onClick: () => document.getElementById("customer")?.focus()
175
144
  },
@@ -177,7 +146,7 @@ function I() {
177
146
  id: "addresses",
178
147
  label: "Set pickup & delivery addresses",
179
148
  description: "Where the shipment is collected and dropped off.",
180
- icon: /* @__PURE__ */ A(v, { size: 16 }),
149
+ icon: /* @__PURE__ */ A(y, { size: 16 }),
181
150
  done: !!H.pickupAddress.street && !!H.deliveryAddress.street,
182
151
  onClick: () => document.getElementById("pickupStreet")?.focus()
183
152
  },
@@ -185,7 +154,7 @@ function I() {
185
154
  id: "items",
186
155
  label: "Add the items to ship",
187
156
  description: "List each product with its quantity and value.",
188
- icon: /* @__PURE__ */ A(y, { size: 16 }),
157
+ icon: /* @__PURE__ */ A(b, { size: 16 }),
189
158
  done: H.items.length > 0,
190
159
  onClick: X
191
160
  }
@@ -281,7 +250,7 @@ function I() {
281
250
  })] }),
282
251
  /* @__PURE__ */ j("div", {
283
252
  className: "grid grid-cols-1 md:grid-cols-2 gap-6",
284
- children: [/* @__PURE__ */ j(s, { children: [/* @__PURE__ */ A(u, { children: /* @__PURE__ */ A(l, { children: "Pickup Address" }) }), /* @__PURE__ */ j(c, {
253
+ children: [/* @__PURE__ */ j(c, { children: [/* @__PURE__ */ A(d, { children: /* @__PURE__ */ A(u, { children: "Pickup Address" }) }), /* @__PURE__ */ j(l, {
285
254
  className: "space-y-4",
286
255
  children: [
287
256
  /* @__PURE__ */ j("div", {
@@ -349,7 +318,7 @@ function I() {
349
318
  })]
350
319
  })
351
320
  ]
352
- })] }), /* @__PURE__ */ j(s, { children: [/* @__PURE__ */ A(u, { children: /* @__PURE__ */ A(l, { children: "Delivery Address" }) }), /* @__PURE__ */ j(c, {
321
+ })] }), /* @__PURE__ */ j(c, { children: [/* @__PURE__ */ A(d, { children: /* @__PURE__ */ A(u, { children: "Delivery Address" }) }), /* @__PURE__ */ j(l, {
353
322
  className: "space-y-4",
354
323
  children: [
355
324
  /* @__PURE__ */ j("div", {
@@ -419,31 +388,31 @@ function I() {
419
388
  ]
420
389
  })] })]
421
390
  }),
422
- /* @__PURE__ */ j(s, { children: [/* @__PURE__ */ j(u, {
391
+ /* @__PURE__ */ j(c, { children: [/* @__PURE__ */ j(d, {
423
392
  className: "flex flex-row items-center justify-between",
424
- children: [/* @__PURE__ */ A(l, { children: "Order Items" }), /* @__PURE__ */ j(h, {
393
+ children: [/* @__PURE__ */ A(u, { children: "Order Items" }), /* @__PURE__ */ j(g, {
425
394
  type: "button",
426
395
  variant: "outline",
427
396
  size: "sm",
428
397
  onClick: X,
429
- children: [/* @__PURE__ */ A(b, { size: 16 }), "Add Item"]
398
+ children: [/* @__PURE__ */ A(x, { size: 16 }), "Add Item"]
430
399
  })]
431
- }), /* @__PURE__ */ A(c, { children: H.items.length === 0 ? /* @__PURE__ */ A(m, {
400
+ }), /* @__PURE__ */ A(l, { children: H.items.length === 0 ? /* @__PURE__ */ A(h, {
432
401
  illustration: "empty-files",
433
402
  title: "No items added yet",
434
403
  description: "Add the products this order will ship — each with a name, SKU, quantity and value.",
435
- action: /* @__PURE__ */ j(h, {
404
+ action: /* @__PURE__ */ j(g, {
436
405
  type: "button",
437
406
  variant: "outline",
438
407
  onClick: X,
439
- children: [/* @__PURE__ */ A(b, {
408
+ children: [/* @__PURE__ */ A(x, {
440
409
  size: 16,
441
410
  className: "mr-1.5"
442
411
  }), "Add your first item"]
443
412
  })
444
413
  }) : /* @__PURE__ */ A("div", {
445
414
  className: "space-y-4",
446
- children: H.items.map((t, n) => /* @__PURE__ */ j("div", { children: [n > 0 && /* @__PURE__ */ A(g, { className: "my-4" }), /* @__PURE__ */ j("div", {
415
+ children: H.items.map((t, n) => /* @__PURE__ */ j("div", { children: [n > 0 && /* @__PURE__ */ A(_, { className: "my-4" }), /* @__PURE__ */ j("div", {
447
416
  className: "grid grid-cols-1 md:grid-cols-6 gap-4",
448
417
  children: [
449
418
  /* @__PURE__ */ j("div", {
@@ -483,19 +452,19 @@ function I() {
483
452
  }),
484
453
  /* @__PURE__ */ A("div", {
485
454
  className: "flex items-end",
486
- children: /* @__PURE__ */ A(h, {
455
+ children: /* @__PURE__ */ A(g, {
487
456
  type: "button",
488
457
  variant: "ghost",
489
458
  size: "icon",
490
459
  className: "text-status-error-text",
491
460
  onClick: () => Z(n),
492
- children: /* @__PURE__ */ A(F, { size: 16 })
461
+ children: /* @__PURE__ */ A(C, { size: 16 })
493
462
  })
494
463
  })
495
464
  ]
496
465
  })] }, t.id))
497
466
  }) })] }),
498
- /* @__PURE__ */ j(s, { children: [/* @__PURE__ */ A(u, { children: /* @__PURE__ */ A(l, { children: "Special Instructions" }) }), /* @__PURE__ */ A(c, { children: /* @__PURE__ */ A(a, {
467
+ /* @__PURE__ */ j(c, { children: [/* @__PURE__ */ A(d, { children: /* @__PURE__ */ A(u, { children: "Special Instructions" }) }), /* @__PURE__ */ A(l, { children: /* @__PURE__ */ A(a, {
499
468
  value: H.specialInstructions,
500
469
  onChange: (e) => J("specialInstructions", e.target.value),
501
470
  placeholder: "Any special handling or delivery instructions...",
@@ -507,4 +476,4 @@ function I() {
507
476
  });
508
477
  }
509
478
  //#endregion
510
- export { I as default };
479
+ export { F as default };
@@ -0,0 +1,406 @@
1
+ import { A as e, F as t, I as n, L as r, P as i, R as a, ct as o, d as s, f as c, g as l, h as u, i as d, j as f, l as p, lt 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 "./phone-Ac9s3mo_.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 "./star-nHlLjDKR.js";
9
+ import { t as D } from "./users-DZ-ilS6B.js";
10
+ import { r as O, t as k } from "./useCustomers-BmTNGxiI.js";
11
+ import { i as A } from "./StatusBadge-BZurYHMy.js";
12
+ import { r as j, t as M } from "./formatters-CF2S2l1m.js";
13
+ import { t as N } from "./FormError-BlOjnXOq.js";
14
+ import { useState as P } from "react";
15
+ import { useParams as F } from "react-router-dom";
16
+ import { jsx as I, jsxs as L } from "react/jsx-runtime";
17
+ import { EmphasisPanel as R, NextSteps as z, PagePurpose as B } from "@burdenoff/fe-libs/ui";
18
+ //#region node_modules/lucide-react/dist/esm/icons/building.js
19
+ var V = m("Building", [
20
+ ["rect", {
21
+ width: "16",
22
+ height: "20",
23
+ x: "4",
24
+ y: "2",
25
+ rx: "2",
26
+ ry: "2",
27
+ key: "76otgf"
28
+ }],
29
+ ["path", {
30
+ d: "M9 22v-4h6v4",
31
+ key: "r93iot"
32
+ }],
33
+ ["path", {
34
+ d: "M8 6h.01",
35
+ key: "1dz90k"
36
+ }],
37
+ ["path", {
38
+ d: "M16 6h.01",
39
+ key: "1x0f13"
40
+ }],
41
+ ["path", {
42
+ d: "M12 6h.01",
43
+ key: "1vi96p"
44
+ }],
45
+ ["path", {
46
+ d: "M12 10h.01",
47
+ key: "1nrarc"
48
+ }],
49
+ ["path", {
50
+ d: "M12 14h.01",
51
+ key: "1etili"
52
+ }],
53
+ ["path", {
54
+ d: "M16 10h.01",
55
+ key: "1m94wz"
56
+ }],
57
+ ["path", {
58
+ d: "M16 14h.01",
59
+ key: "1gbofw"
60
+ }],
61
+ ["path", {
62
+ d: "M8 10h.01",
63
+ key: "19clt8"
64
+ }],
65
+ ["path", {
66
+ d: "M8 14h.01",
67
+ key: "6423bh"
68
+ }]
69
+ ]);
70
+ //#endregion
71
+ //#region src/movethewheels/pages/CustomerDetailsPage.tsx
72
+ function H() {
73
+ let { basePath: s, navigate: c } = g(), { createCustomer: l } = O(), [u, p] = P({
74
+ name: "",
75
+ type: "b2c",
76
+ email: "",
77
+ phone: "",
78
+ company: ""
79
+ }), [m, h] = P(!1), [_, b] = P(null), x = () => c?.(o(s, "customers")), S = async (e) => {
80
+ if (e.preventDefault(), !u.name.trim()) {
81
+ b("Customer name is required.");
82
+ return;
83
+ }
84
+ h(!0), b(null);
85
+ try {
86
+ let e = await l({
87
+ name: u.name.trim(),
88
+ type: u.type,
89
+ email: u.email.trim() || void 0,
90
+ phone: u.phone.trim() || void 0,
91
+ company: u.company.trim() || void 0
92
+ });
93
+ c?.(o(s, `customers/${e.id}`));
94
+ } catch (e) {
95
+ console.error("Failed to create customer:", e), b(e instanceof Error ? e.message : "Failed to create customer. Please try again."), h(!1);
96
+ }
97
+ };
98
+ return /* @__PURE__ */ L(d, {
99
+ title: "New Customer",
100
+ subtitle: "Add a new customer to your account",
101
+ icon: /* @__PURE__ */ I(D, { size: 24 }),
102
+ headerActions: /* @__PURE__ */ L("div", {
103
+ className: "flex gap-2",
104
+ children: [/* @__PURE__ */ L(v, {
105
+ variant: "outline",
106
+ onClick: x,
107
+ disabled: m,
108
+ children: [/* @__PURE__ */ I(y, { size: 16 }), " Cancel"]
109
+ }), /* @__PURE__ */ L(v, {
110
+ onClick: S,
111
+ disabled: m,
112
+ children: [
113
+ /* @__PURE__ */ I(w, { size: 16 }),
114
+ " ",
115
+ m ? "Saving..." : "Create Customer"
116
+ ]
117
+ })]
118
+ }),
119
+ children: [/* @__PURE__ */ I(B, {
120
+ icon: /* @__PURE__ */ I(D, { size: 18 }),
121
+ children: "Add a customer once and their contact details auto-fill every future order you book for them. Only a name is required — add email, phone and company to make deliveries easier to arrange."
122
+ }), /* @__PURE__ */ L("form", {
123
+ onSubmit: S,
124
+ className: "max-w-2xl space-y-6",
125
+ children: [/* @__PURE__ */ I(N, { message: _ }), /* @__PURE__ */ L(R, { children: [/* @__PURE__ */ I("h2", {
126
+ className: "text-base font-semibold text-text-primary mb-4",
127
+ children: "Customer Details"
128
+ }), /* @__PURE__ */ L("div", {
129
+ className: "space-y-4",
130
+ children: [
131
+ /* @__PURE__ */ L("div", {
132
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
133
+ children: [/* @__PURE__ */ L("div", {
134
+ className: "space-y-2",
135
+ children: [/* @__PURE__ */ L(f, {
136
+ htmlFor: "name",
137
+ children: ["Name ", /* @__PURE__ */ I("span", {
138
+ className: "text-status-error-text",
139
+ children: "*"
140
+ })]
141
+ }), /* @__PURE__ */ I(e, {
142
+ id: "name",
143
+ value: u.name,
144
+ onChange: (e) => p((t) => ({
145
+ ...t,
146
+ name: e.target.value
147
+ })),
148
+ placeholder: "Acme Corp or Jane Doe",
149
+ required: !0
150
+ })]
151
+ }), /* @__PURE__ */ L("div", {
152
+ className: "space-y-2",
153
+ children: [/* @__PURE__ */ I(f, {
154
+ htmlFor: "type",
155
+ children: "Customer Type"
156
+ }), /* @__PURE__ */ L(i, {
157
+ value: u.type,
158
+ onValueChange: (e) => p((t) => ({
159
+ ...t,
160
+ type: e
161
+ })),
162
+ children: [/* @__PURE__ */ I(r, {
163
+ id: "type",
164
+ children: /* @__PURE__ */ I(a, {})
165
+ }), /* @__PURE__ */ L(t, { children: [/* @__PURE__ */ I(n, {
166
+ value: "b2c",
167
+ children: "B2C (Individual)"
168
+ }), /* @__PURE__ */ I(n, {
169
+ value: "b2b",
170
+ children: "B2B (Business)"
171
+ })] })]
172
+ })]
173
+ })]
174
+ }),
175
+ /* @__PURE__ */ L("div", {
176
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
177
+ children: [/* @__PURE__ */ L("div", {
178
+ className: "space-y-2",
179
+ children: [/* @__PURE__ */ I(f, {
180
+ htmlFor: "email",
181
+ children: "Email"
182
+ }), /* @__PURE__ */ I(e, {
183
+ id: "email",
184
+ type: "email",
185
+ value: u.email,
186
+ onChange: (e) => p((t) => ({
187
+ ...t,
188
+ email: e.target.value
189
+ })),
190
+ placeholder: "customer@example.com"
191
+ })]
192
+ }), /* @__PURE__ */ L("div", {
193
+ className: "space-y-2",
194
+ children: [/* @__PURE__ */ I(f, {
195
+ htmlFor: "phone",
196
+ children: "Phone"
197
+ }), /* @__PURE__ */ I(e, {
198
+ id: "phone",
199
+ value: u.phone,
200
+ onChange: (e) => p((t) => ({
201
+ ...t,
202
+ phone: e.target.value
203
+ })),
204
+ placeholder: "+1-555-0100"
205
+ })]
206
+ })]
207
+ }),
208
+ /* @__PURE__ */ L("div", {
209
+ className: "space-y-2",
210
+ children: [/* @__PURE__ */ I(f, {
211
+ htmlFor: "company",
212
+ children: "Company"
213
+ }), /* @__PURE__ */ I(e, {
214
+ id: "company",
215
+ value: u.company,
216
+ onChange: (e) => p((t) => ({
217
+ ...t,
218
+ company: e.target.value
219
+ })),
220
+ placeholder: "Company name (for B2B accounts)"
221
+ })]
222
+ })
223
+ ]
224
+ })] })]
225
+ })]
226
+ });
227
+ }
228
+ function U() {
229
+ let { customerId: e } = F(), { basePath: t, navigate: n } = g(), { customer: r, isLoading: i, error: a, refetch: f } = k(e), m = () => n?.(o(t, "customers")), w = (e) => n?.(o(t, e));
230
+ return e ? i ? /* @__PURE__ */ I(_, { message: "Loading customer details..." }) : a || !r ? /* @__PURE__ */ I(h, {
231
+ title: "Customer not found",
232
+ onRetry: f
233
+ }) : /* @__PURE__ */ L(d, {
234
+ title: r.name,
235
+ subtitle: r.company || r.email,
236
+ icon: /* @__PURE__ */ I(D, { size: 24 }),
237
+ headerActions: /* @__PURE__ */ L("div", {
238
+ className: "flex gap-2",
239
+ children: [/* @__PURE__ */ L(v, {
240
+ variant: "outline",
241
+ onClick: m,
242
+ children: [/* @__PURE__ */ I(y, { size: 16 }), " Back"]
243
+ }), /* @__PURE__ */ L(v, { children: [/* @__PURE__ */ I(T, { size: 16 }), " Edit"] })]
244
+ }),
245
+ headerContent: /* @__PURE__ */ L("div", {
246
+ className: "flex items-center gap-4",
247
+ children: [
248
+ /* @__PURE__ */ I(A, { type: r.type }),
249
+ /* @__PURE__ */ I(p, {
250
+ variant: r.isActive ? "default" : "secondary",
251
+ children: r.isActive ? "Active" : "Inactive"
252
+ }),
253
+ /* @__PURE__ */ L("div", {
254
+ className: "flex items-center gap-1",
255
+ children: [/* @__PURE__ */ I(E, {
256
+ size: 16,
257
+ className: "text-status-warning-text fill-current"
258
+ }), /* @__PURE__ */ I("span", {
259
+ className: "font-medium",
260
+ children: r.rating.toFixed(1)
261
+ })]
262
+ })
263
+ ]
264
+ }),
265
+ children: [
266
+ /* @__PURE__ */ I(B, {
267
+ icon: /* @__PURE__ */ I(D, { size: 18 }),
268
+ children: "Everything you know about this customer — how to reach them, where they are, and their account standing. Use it to confirm contact details before a delivery, check their rating, or book their next order."
269
+ }),
270
+ /* @__PURE__ */ I(z, {
271
+ storageKey: "movethewheels-customer-details",
272
+ steps: [{
273
+ id: "new-order",
274
+ label: "Book a delivery for this customer",
275
+ description: "Start a new order pre-filled for this account.",
276
+ icon: /* @__PURE__ */ I(b, { size: 16 }),
277
+ onClick: () => w("orders/new")
278
+ }, {
279
+ id: "edit",
280
+ label: "Update contact details",
281
+ description: "Keep email, phone and address current.",
282
+ icon: /* @__PURE__ */ I(T, { size: 16 }),
283
+ onClick: () => {}
284
+ }]
285
+ }),
286
+ /* @__PURE__ */ L("div", {
287
+ className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
288
+ children: [/* @__PURE__ */ L("div", {
289
+ className: "lg:col-span-2 space-y-6",
290
+ children: [
291
+ /* @__PURE__ */ L(R, { children: [/* @__PURE__ */ I("h2", {
292
+ className: "text-base font-semibold text-text-primary mb-4",
293
+ children: "Contact Information"
294
+ }), /* @__PURE__ */ L("div", {
295
+ className: "grid grid-cols-1 md:grid-cols-2 gap-6",
296
+ children: [/* @__PURE__ */ L("div", {
297
+ className: "space-y-4",
298
+ children: [/* @__PURE__ */ L("div", {
299
+ className: "flex items-center gap-3",
300
+ children: [/* @__PURE__ */ I(x, {
301
+ size: 18,
302
+ className: "text-text-secondary"
303
+ }), /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
304
+ className: "text-sm text-text-secondary",
305
+ children: "Email"
306
+ }), /* @__PURE__ */ I("p", {
307
+ className: "font-medium",
308
+ children: r.email
309
+ })] })]
310
+ }), /* @__PURE__ */ L("div", {
311
+ className: "flex items-center gap-3",
312
+ children: [/* @__PURE__ */ I(S, {
313
+ size: 18,
314
+ className: "text-text-secondary"
315
+ }), /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
316
+ className: "text-sm text-text-secondary",
317
+ children: "Phone"
318
+ }), /* @__PURE__ */ I("p", {
319
+ className: "font-medium",
320
+ children: r.phone
321
+ })] })]
322
+ })]
323
+ }), /* @__PURE__ */ L("div", {
324
+ className: "space-y-4",
325
+ children: [r.company && /* @__PURE__ */ L("div", {
326
+ className: "flex items-center gap-3",
327
+ children: [/* @__PURE__ */ I(V, {
328
+ size: 18,
329
+ className: "text-text-secondary"
330
+ }), /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
331
+ className: "text-sm text-text-secondary",
332
+ children: "Company"
333
+ }), /* @__PURE__ */ I("p", {
334
+ className: "font-medium",
335
+ children: r.company
336
+ })] })]
337
+ }), r.website && /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
338
+ className: "text-sm text-text-secondary",
339
+ children: "Website"
340
+ }), /* @__PURE__ */ I("a", {
341
+ href: r.website,
342
+ className: "text-primary hover:underline",
343
+ children: r.website
344
+ })] })]
345
+ })]
346
+ })] }),
347
+ /* @__PURE__ */ L(s, { children: [/* @__PURE__ */ I(u, { children: /* @__PURE__ */ L(l, {
348
+ className: "flex items-center gap-2",
349
+ children: [/* @__PURE__ */ I(C, { size: 18 }), " Address"]
350
+ }) }), /* @__PURE__ */ I(c, { children: /* @__PURE__ */ I("p", { children: M(r.address) }) })] }),
351
+ r.notes && /* @__PURE__ */ L(s, { children: [/* @__PURE__ */ I(u, { children: /* @__PURE__ */ L(l, {
352
+ className: "flex items-center gap-2",
353
+ children: [/* @__PURE__ */ I(b, { size: 18 }), " Notes"]
354
+ }) }), /* @__PURE__ */ I(c, { children: /* @__PURE__ */ I("p", { children: r.notes }) })] })
355
+ ]
356
+ }), /* @__PURE__ */ L("div", {
357
+ className: "space-y-6",
358
+ children: [/* @__PURE__ */ L(s, { children: [/* @__PURE__ */ I(u, { children: /* @__PURE__ */ I(l, { children: "Business Details" }) }), /* @__PURE__ */ L(c, {
359
+ className: "space-y-3",
360
+ children: [
361
+ r.businessLicense && /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
362
+ className: "text-sm text-text-secondary",
363
+ children: "Business License"
364
+ }), /* @__PURE__ */ I("p", {
365
+ className: "font-mono",
366
+ children: r.businessLicense
367
+ })] }),
368
+ r.taxId && /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
369
+ className: "text-sm text-text-secondary",
370
+ children: "Tax ID"
371
+ }), /* @__PURE__ */ I("p", {
372
+ className: "font-mono",
373
+ children: r.taxId
374
+ })] }),
375
+ /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
376
+ className: "text-sm text-text-secondary",
377
+ children: "Preferred Contact"
378
+ }), /* @__PURE__ */ I("p", {
379
+ className: "capitalize",
380
+ children: r.preferredContactMethod
381
+ })] }),
382
+ /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
383
+ className: "text-sm text-text-secondary",
384
+ children: "Marketing Opt-in"
385
+ }), /* @__PURE__ */ I(p, {
386
+ variant: r.marketingOptIn ? "default" : "secondary",
387
+ children: r.marketingOptIn ? "Yes" : "No"
388
+ })] })
389
+ ]
390
+ })] }), /* @__PURE__ */ L(s, { children: [/* @__PURE__ */ I(u, { children: /* @__PURE__ */ I(l, { children: "Account Info" }) }), /* @__PURE__ */ L(c, {
391
+ className: "space-y-3",
392
+ children: [/* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
393
+ className: "text-sm text-text-secondary",
394
+ children: "Created"
395
+ }), /* @__PURE__ */ I("p", { children: j(r.createdAt, "full") })] }), /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("p", {
396
+ className: "text-sm text-text-secondary",
397
+ children: "Last Updated"
398
+ }), /* @__PURE__ */ I("p", { children: j(r.updatedAt, "relative") })] })]
399
+ })] })]
400
+ })]
401
+ })
402
+ ]
403
+ }) : /* @__PURE__ */ I(H, {});
404
+ }
405
+ //#endregion
406
+ export { U as default };