@burdenoff/microfe-movethewheels 2026.703.2 → 2026.703.4

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 (126) hide show
  1. package/dist/{AIAssistantPage-C3cPsWt-.js → AIAssistantPage-3YOnHO9Y.js} +3 -3
  2. package/dist/{AnalyticsPage-Dz6g2MvK.js → AnalyticsPage-CMpI1070.js} +11 -11
  3. package/dist/CreateOrderPage-DRAgGo9i.js +490 -0
  4. package/dist/CustomerDetailsPage-BCeMmOFe.js +615 -0
  5. package/dist/{CustomersPage-2Y05LVyh.js → CustomersPage-CaNBMXmM.js} +64 -53
  6. package/dist/{DashboardPage-BVjQi0EB.js → DashboardPage-DIKlXde3.js} +16 -16
  7. package/dist/DataTable-XvUcTjwi.js +340 -0
  8. package/dist/DocumentsCard-U2lSe-cn.js +169 -0
  9. package/dist/{DriverDetailsPage-CN3WQ0B9.js → DriverDetailsPage-BQrYd_Lp.js} +178 -195
  10. package/dist/{DriversPage-B0Zpx8OQ.js → DriversPage-PYmdFiby.js} +65 -54
  11. package/dist/FinancePage-Cwh9Bw4M.js +136 -0
  12. package/dist/{FleetPage-DqkFi3s3.js → FleetPage-3ZHsB-TN.js} +23 -22
  13. package/dist/{FormError-BlOjnXOq.js → FormError-cuLV2jVD.js} +1 -1
  14. package/dist/{ImportExportPage-DKJRCezl.js → ImportExportPage-C6f7DqhM.js} +50 -70
  15. package/dist/{InventoryPage-DwfgCUQq.js → InventoryPage-DpiqVu1v.js} +9 -9
  16. package/dist/{LiveTrackingPage-DCX-K-LR.js → LiveTrackingPage-FAzzlVnX.js} +9 -9
  17. package/dist/MarketplacePage-Bh_2ns4v.js +426 -0
  18. package/dist/Notice-CSoDYKw9.js +46 -0
  19. package/dist/OrderDetailsPage-zCj0lW0j.js +584 -0
  20. package/dist/{OrdersListPage-BjDlCKJd.js → OrdersListPage-CAMsuUck.js} +166 -89
  21. package/dist/{ProductDetailsPage-C9uOiYLp.js → ProductDetailsPage-wsxAQkA0.js} +12 -12
  22. package/dist/{ProductsPage-C1G9h7Xd.js → ProductsPage-DC5qDLfz.js} +60 -49
  23. package/dist/ReportsPage-BwUJ37eO.js +356 -0
  24. package/dist/RouteDetailsPage-DyMJE9AS.js +583 -0
  25. package/dist/{RoutesPage-DMfoicM1.js → RoutesPage-Dtc669yc.js} +57 -46
  26. package/dist/{SettingsPage-Bn-v0mbQ.js → SettingsPage-CpH9xhQg.js} +5 -27
  27. package/dist/{TrackingPage-W-jtdM3Y.js → TrackingPage-DaNEFG_h.js} +10 -10
  28. package/dist/{VehicleDetailsPage-Bceo5oz3.js → VehicleDetailsPage-DldYNsYV.js} +125 -142
  29. package/dist/{VehiclesPage-VBtOep91.js → VehiclesPage-BFw13iMt.js} +61 -50
  30. package/dist/{WarehouseDetailsPage-L_6sWigM.js → WarehouseDetailsPage-CMG7or6G.js} +17 -17
  31. package/dist/{WarehousesPage-DCbXXXWE.js → WarehousesPage-Wkytnt86.js} +58 -47
  32. package/dist/arrow-right-Q3XQpTPR.js +11 -0
  33. package/dist/arrow-up-xNF1zJUG.js +17 -0
  34. package/dist/chevron-left-B2_r0Elx.js +8 -0
  35. package/dist/{wrench-CANXWxF-.js → fuel-B6_lnKDs.js} +2 -5
  36. package/dist/index.js +163 -174
  37. package/dist/upload-CHZofOqb.js +21 -0
  38. package/dist/{useAnalytics-DS8n0xgg.js → useAnalytics-D7HW2XRb.js} +52 -2
  39. package/dist/{useCustomers-BmTNGxiI.js → useCustomers-BPW4__PR.js} +29 -26
  40. package/dist/{useFleet-DKqXZ16m.js → useFleet-ChBkxAd6.js} +81 -69
  41. package/dist/{useInventory-DkyiVY_A.js → useInventory-CAAVMRp6.js} +83 -38
  42. package/dist/{useOrders-Cfk1GLiq.js → useOrders-B465S2nt.js} +58 -47
  43. package/dist/{useReports-CTqZr-AB.js → useReports-jQ3GpNOm.js} +40 -34
  44. package/dist/{useRoutes-BQWO607N.js → useRoutes-hS3d5-xr.js} +49 -41
  45. package/dist/{useTracking-B-va1kO3.js → useTracking-RjGz9PZG.js} +2 -2
  46. package/dist/user-check-BEKRCi7v.js +20 -0
  47. package/dist/wrench-q_rgJfaP.js +8 -0
  48. package/dist/x-tMeDMcCw.js +11 -0
  49. package/package.json +1 -1
  50. package/src/movethewheels/components/DataTable.tsx +252 -84
  51. package/src/movethewheels/components/DocumentsCard.tsx +102 -0
  52. package/src/movethewheels/components/Notice.tsx +61 -0
  53. package/src/movethewheels/components/index.ts +7 -0
  54. package/src/movethewheels/hooks/index.ts +9 -0
  55. package/src/movethewheels/hooks/useAnalytics.ts +95 -0
  56. package/src/movethewheels/hooks/useCustomers.ts +11 -4
  57. package/src/movethewheels/hooks/useEntityDocuments.ts +132 -0
  58. package/src/movethewheels/hooks/useFleet.ts +26 -7
  59. package/src/movethewheels/hooks/useInventory.ts +70 -7
  60. package/src/movethewheels/hooks/useOrders.ts +32 -2
  61. package/src/movethewheels/hooks/useReports.ts +14 -4
  62. package/src/movethewheels/hooks/useRoutes.ts +20 -3
  63. package/src/movethewheels/pages/AnalyticsPage.tsx +2 -2
  64. package/src/movethewheels/pages/CreateOrderPage.tsx +44 -16
  65. package/src/movethewheels/pages/CustomerDetailsPage.tsx +239 -33
  66. package/src/movethewheels/pages/CustomersPage.tsx +27 -11
  67. package/src/movethewheels/pages/DriverDetailsPage.tsx +16 -30
  68. package/src/movethewheels/pages/DriversPage.tsx +26 -9
  69. package/src/movethewheels/pages/FinancePage.tsx +67 -84
  70. package/src/movethewheels/pages/InventoryPage.tsx +1 -1
  71. package/src/movethewheels/pages/MarketplacePage.tsx +265 -50
  72. package/src/movethewheels/pages/OrderDetailsPage.tsx +214 -10
  73. package/src/movethewheels/pages/OrdersListPage.tsx +77 -14
  74. package/src/movethewheels/pages/ProductsPage.tsx +27 -7
  75. package/src/movethewheels/pages/ReportsPage.tsx +65 -4
  76. package/src/movethewheels/pages/RouteDetailsPage.tsx +74 -13
  77. package/src/movethewheels/pages/RoutesPage.tsx +22 -6
  78. package/src/movethewheels/pages/SettingsPage.tsx +3 -19
  79. package/src/movethewheels/pages/VehicleDetailsPage.tsx +3 -33
  80. package/src/movethewheels/pages/VehiclesPage.tsx +26 -5
  81. package/src/movethewheels/pages/WarehousesPage.tsx +22 -17
  82. package/src/movethewheels/types/index.ts +8 -0
  83. package/src/movethewheels/utils/download.ts +62 -0
  84. package/dist/CreateOrderPage-C5iwnjp4.js +0 -479
  85. package/dist/CustomerDetailsPage-B6nwFyLO.js +0 -406
  86. package/dist/DataTable-DmciIKKM.js +0 -249
  87. package/dist/FinancePage-DEDykSOP.js +0 -158
  88. package/dist/MarketplacePage-CIQ97_zp.js +0 -247
  89. package/dist/OrderDetailsPage-DYiZ-9UK.js +0 -429
  90. package/dist/ReportsPage-Zp53q3_8.js +0 -284
  91. package/dist/RouteDetailsPage-DUStXSf9.js +0 -531
  92. /package/dist/{MetricCard-BY0QrMD4.js → MetricCard-CVBVpu7o.js} +0 -0
  93. /package/dist/{StatusBadge-BZurYHMy.js → StatusBadge-C87mDpDP.js} +0 -0
  94. /package/dist/{box-D9Pal4HM.js → box-Eu05PXDh.js} +0 -0
  95. /package/dist/{chart-column-BFIJysDR.js → chart-column-ouzgxIv_.js} +0 -0
  96. /package/dist/{chevron-right-EMIIyyJ1.js → chevron-right-eV4LjaSi.js} +0 -0
  97. /package/dist/{circle-alert-iY24lSlp.js → circle-alert-Bzh2DBSF.js} +0 -0
  98. /package/dist/{circle-check-big-w0TrLKMF.js → circle-check-big-CGMSpQmD.js} +0 -0
  99. /package/dist/{clock-DJZtdl8u.js → clock-Bl3ptexL.js} +0 -0
  100. /package/dist/{dollar-sign-CgKQRz_e.js → dollar-sign-CAVU95SO.js} +0 -0
  101. /package/dist/{download-DRXxoiQR.js → download-C5NbvVDc.js} +0 -0
  102. /package/dist/{file-text-DWWY6_f5.js → file-text-D-1uvLZG.js} +0 -0
  103. /package/dist/{filter-DloLC2eE.js → filter-DUfUg6BO.js} +0 -0
  104. /package/dist/{formatters-CF2S2l1m.js → formatters-BQr-aR5W.js} +0 -0
  105. /package/dist/{map-CkJaULb2.js → map-C-M-FQLR.js} +0 -0
  106. /package/dist/{map-pin-BGiCvyCs.js → map-pin-Dznl5l40.js} +0 -0
  107. /package/dist/{navigation-D36prnAn.js → navigation-BJSJl-VG.js} +0 -0
  108. /package/dist/{package-BChUzpJS.js → package-CcRttV2N.js} +0 -0
  109. /package/dist/{phone-Ac9s3mo_.js → phone-DVSZHt_j.js} +0 -0
  110. /package/dist/{plus-Z76q-FZm.js → plus-C_XZDwBz.js} +0 -0
  111. /package/dist/{refresh-cw-DKt6f5T6.js → refresh-cw-CfgN67l3.js} +0 -0
  112. /package/dist/{save-CojywNhG.js → save-DJE8Fpdv.js} +0 -0
  113. /package/dist/{search-CDGefqb3.js → search-D_VyGcZT.js} +0 -0
  114. /package/dist/{square-pen-CopE9GmB.js → square-pen-D-6JYrVQ.js} +0 -0
  115. /package/dist/{star-nHlLjDKR.js → star-BpRlUZuU.js} +0 -0
  116. /package/dist/{store-BR9Voi5E.js → store-B-8HMuyZ.js} +0 -0
  117. /package/dist/{trash-2-BKhar6Hs.js → trash-2-8vmv-XV_.js} +0 -0
  118. /package/dist/{trending-up-Dohgd4t_.js → trending-up-Dz6PqPRj.js} +0 -0
  119. /package/dist/{triangle-alert-i-XQL9Rd.js → triangle-alert-D7Y3J_4z.js} +0 -0
  120. /package/dist/{truck-C0v_hbLR.js → truck-D-y2IDzv.js} +0 -0
  121. /package/dist/{useAssistant-D4v3oxD3.js → useAssistant-DVW4QgQb.js} +0 -0
  122. /package/dist/{useImportExport-DHr-SWSw.js → useImportExport-DrPDHEDK.js} +0 -0
  123. /package/dist/{useSettings-CkDH_-gM.js → useSettings-BB8X2RLh.js} +0 -0
  124. /package/dist/{user-jyFU3lXk.js → user-DzfTn4dE.js} +0 -0
  125. /package/dist/{users-DZ-ilS6B.js → users-CCrq-w0C.js} +0 -0
  126. /package/dist/{warehouse-6m5kXMLu.js → warehouse-CaqfmMKh.js} +0 -0
@@ -1,406 +0,0 @@
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 };
@@ -1,249 +0,0 @@
1
- import { A as e, B as t, F as n, G as r, H as i, I as a, K as o, L as s, P as c, R as l, U as u, W as d, lt as f, q as p, rt as m, u as h } from "./PageLayout-D4LDHJJq.js";
2
- import { t as g } from "./chevron-right-EMIIyyJ1.js";
3
- import { t as ee } from "./search-CDGefqb3.js";
4
- import { useMemo as _, useState as v } from "react";
5
- import { jsx as y, jsxs as b } from "react/jsx-runtime";
6
- import { IllustratedEmptyState as x } from "@burdenoff/fe-libs/ui";
7
- //#region node_modules/lucide-react/dist/esm/icons/arrow-down.js
8
- var S = f("ArrowDown", [["path", {
9
- d: "M12 5v14",
10
- key: "s699le"
11
- }], ["path", {
12
- d: "m19 12-7 7-7-7",
13
- key: "1idqje"
14
- }]]), C = f("ArrowUpDown", [
15
- ["path", {
16
- d: "m21 16-4 4-4-4",
17
- key: "f6ql7i"
18
- }],
19
- ["path", {
20
- d: "M17 20V4",
21
- key: "1ejh1v"
22
- }],
23
- ["path", {
24
- d: "m3 8 4-4 4 4",
25
- key: "11wl7u"
26
- }],
27
- ["path", {
28
- d: "M7 4v16",
29
- key: "1glfcx"
30
- }]
31
- ]), w = f("ArrowUp", [["path", {
32
- d: "m5 12 7-7 7 7",
33
- key: "hav0vg"
34
- }], ["path", {
35
- d: "M12 19V5",
36
- key: "x0mq9r"
37
- }]]), te = f("ChevronLeft", [["path", {
38
- d: "m15 18-6-6 6-6",
39
- key: "1wnfg3"
40
- }]]), ne = f("ChevronsLeft", [["path", {
41
- d: "m11 17-5-5 5-5",
42
- key: "13zhaf"
43
- }], ["path", {
44
- d: "m18 17-5-5 5-5",
45
- key: "h8a8et"
46
- }]]), re = f("ChevronsRight", [["path", {
47
- d: "m6 17 5-5-5-5",
48
- key: "xnjwq"
49
- }], ["path", {
50
- d: "m13 17 5-5-5-5",
51
- key: "17xmmf"
52
- }]]);
53
- //#endregion
54
- //#region src/movethewheels/components/DataTable.tsx
55
- function T({ columns: f, data: T, isLoading: E = !1, searchable: D = !1, searchPlaceholder: O = "Search...", searchFields: k, pagination: A = !0, pageSize: ie = 10, pageSizeOptions: j = [
56
- 5,
57
- 10,
58
- 20,
59
- 50
60
- ], onRowClick: M, rowClassName: N, emptyMessage: P = "No data found", emptyIllustration: F, emptyTitle: I, emptyDescription: L, emptyAction: R, className: z, getRowId: B }) {
61
- let [V, H] = v(""), [U, W] = v(null), [G, K] = v(null), [q, J] = v(1), [Y, ae] = v(ie), X = _(() => {
62
- if (!V || !k || k.length === 0) return T;
63
- let e = V.toLowerCase();
64
- return T.filter((t) => k.some((n) => {
65
- let r = t[n];
66
- return r != null && String(r).toLowerCase().includes(e);
67
- }));
68
- }, [
69
- T,
70
- V,
71
- k
72
- ]), Z = _(() => {
73
- if (!U || !G) return X;
74
- let e = f.find((e) => e.id === U);
75
- return e?.accessorKey ? [...X].sort((t, n) => {
76
- let r = t[e.accessorKey], i = n[e.accessorKey];
77
- if (r == null) return 1;
78
- if (i == null) return -1;
79
- let a = 0;
80
- return a = typeof r == "string" && typeof i == "string" ? r.localeCompare(i) : typeof r == "number" && typeof i == "number" ? r - i : r instanceof Date && i instanceof Date ? r.getTime() - i.getTime() : String(r).localeCompare(String(i)), G === "asc" ? a : -a;
81
- }) : X;
82
- }, [
83
- X,
84
- U,
85
- G,
86
- f
87
- ]), Q = _(() => {
88
- if (!A) return Z;
89
- let e = (q - 1) * Y;
90
- return Z.slice(e, e + Y);
91
- }, [
92
- Z,
93
- q,
94
- Y,
95
- A
96
- ]), $ = Math.ceil(Z.length / Y), oe = (e) => {
97
- U === e ? G === "asc" ? K("desc") : G === "desc" && (W(null), K(null)) : (W(e), K("asc"));
98
- }, se = (e) => U === e ? y(G === "asc" ? w : S, { className: "w-4 h-4 text-primary" }) : /* @__PURE__ */ y(C, { className: "w-4 h-4 text-text-secondary/50" }), ce = (e, t) => {
99
- if (t.cell) return t.cell(e);
100
- if (t.accessorKey) {
101
- let n = e[t.accessorKey];
102
- return n == null ? "-" : n instanceof Date ? n.toLocaleDateString() : String(n);
103
- }
104
- return "-";
105
- };
106
- return E ? /* @__PURE__ */ b("div", {
107
- className: m("space-y-4", z),
108
- children: [D && /* @__PURE__ */ y("div", {
109
- className: "flex items-center gap-4",
110
- children: /* @__PURE__ */ y(t, { className: "h-10 w-64" })
111
- }), /* @__PURE__ */ y("div", {
112
- className: "rounded-card border border-border-seam bg-bg-surface shadow-elevation-1",
113
- children: /* @__PURE__ */ b(i, { children: [/* @__PURE__ */ y(o, { children: /* @__PURE__ */ y(p, { children: f.map((e) => /* @__PURE__ */ y(r, { children: /* @__PURE__ */ y(t, { className: "h-4 w-20 motion-safe:animate-vc-shimmer" }) }, e.id)) }) }), /* @__PURE__ */ y(u, { children: Array.from({ length: 5 }).map((e, n) => /* @__PURE__ */ y(p, { children: f.map((e) => /* @__PURE__ */ y(d, { children: /* @__PURE__ */ y(t, { className: "h-4 w-full max-w-[100px] motion-safe:animate-vc-shimmer" }) }, e.id)) }, n)) })] })
114
- })]
115
- }) : /* @__PURE__ */ b("div", {
116
- className: m("space-y-4", z),
117
- children: [
118
- D && /* @__PURE__ */ y("div", {
119
- className: "flex items-center gap-4",
120
- children: /* @__PURE__ */ b("div", {
121
- className: "relative flex-1 max-w-sm",
122
- children: [/* @__PURE__ */ y(ee, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-text-secondary" }), /* @__PURE__ */ y(e, {
123
- placeholder: O,
124
- value: V,
125
- onChange: (e) => {
126
- H(e.target.value), J(1);
127
- },
128
- className: "pl-9"
129
- })]
130
- })
131
- }),
132
- /* @__PURE__ */ y("div", {
133
- className: "overflow-x-auto rounded-card border border-border-seam bg-bg-surface shadow-elevation-1",
134
- children: /* @__PURE__ */ b(i, { children: [/* @__PURE__ */ y(o, { children: /* @__PURE__ */ y(p, { children: f.map((e) => /* @__PURE__ */ y(r, {
135
- className: m(e.sortable && "cursor-pointer select-none hover:bg-bg-sunken/50", e.headerClassName),
136
- onClick: () => e.sortable && oe(e.id),
137
- children: /* @__PURE__ */ b("div", {
138
- className: "flex items-center gap-2",
139
- children: [e.header, e.sortable && se(e.id)]
140
- })
141
- }, e.id)) }) }), /* @__PURE__ */ y(u, { children: Q.length === 0 ? /* @__PURE__ */ y(p, { children: /* @__PURE__ */ y(d, {
142
- colSpan: f.length,
143
- className: "py-8 text-center",
144
- children: F ? V ? /* @__PURE__ */ y(x, {
145
- illustration: "empty-search",
146
- title: "No matches",
147
- description: `Nothing matches “${V}”. Try a different search.`
148
- }) : /* @__PURE__ */ y(x, {
149
- illustration: F,
150
- title: I ?? P,
151
- description: L,
152
- action: R
153
- }) : /* @__PURE__ */ y("p", {
154
- className: "text-text-secondary",
155
- children: P
156
- })
157
- }) }) : Q.map((e, t) => {
158
- let n = B ? B(e) : t, r = typeof N == "function" ? N(e) : N;
159
- return /* @__PURE__ */ y(p, {
160
- className: m(M && "cursor-pointer hover:bg-bg-sunken/50", r),
161
- onClick: () => M?.(e),
162
- children: f.map((t) => /* @__PURE__ */ y(d, {
163
- className: t.className,
164
- children: ce(e, t)
165
- }, t.id))
166
- }, n);
167
- }) })] })
168
- }),
169
- A && Z.length > 0 && /* @__PURE__ */ b("div", {
170
- className: "flex items-center justify-between",
171
- children: [/* @__PURE__ */ b("div", {
172
- className: "flex items-center gap-2 text-sm text-text-secondary",
173
- children: [
174
- /* @__PURE__ */ b("span", { children: [
175
- "Showing ",
176
- (q - 1) * Y + 1,
177
- " to",
178
- " ",
179
- Math.min(q * Y, Z.length),
180
- " of ",
181
- Z.length
182
- ] }),
183
- /* @__PURE__ */ b(c, {
184
- value: String(Y),
185
- onValueChange: (e) => {
186
- ae(Number(e)), J(1);
187
- },
188
- children: [/* @__PURE__ */ y(s, {
189
- className: "w-[70px] h-8",
190
- children: /* @__PURE__ */ y(l, {})
191
- }), /* @__PURE__ */ y(n, { children: j.map((e) => /* @__PURE__ */ y(a, {
192
- value: String(e),
193
- children: e
194
- }, e)) })]
195
- }),
196
- /* @__PURE__ */ y("span", { children: "per page" })
197
- ]
198
- }), /* @__PURE__ */ b("div", {
199
- className: "flex items-center gap-1",
200
- children: [
201
- /* @__PURE__ */ y(h, {
202
- variant: "outline",
203
- size: "icon",
204
- className: "h-8 w-8",
205
- onClick: () => J(1),
206
- disabled: q === 1,
207
- children: /* @__PURE__ */ y(ne, { className: "h-4 w-4" })
208
- }),
209
- /* @__PURE__ */ y(h, {
210
- variant: "outline",
211
- size: "icon",
212
- className: "h-8 w-8",
213
- onClick: () => J((e) => Math.max(1, e - 1)),
214
- disabled: q === 1,
215
- children: /* @__PURE__ */ y(te, { className: "h-4 w-4" })
216
- }),
217
- /* @__PURE__ */ b("span", {
218
- className: "px-3 text-sm",
219
- children: [
220
- "Page ",
221
- q,
222
- " of ",
223
- $
224
- ]
225
- }),
226
- /* @__PURE__ */ y(h, {
227
- variant: "outline",
228
- size: "icon",
229
- className: "h-8 w-8",
230
- onClick: () => J((e) => Math.min($, e + 1)),
231
- disabled: q === $,
232
- children: /* @__PURE__ */ y(g, { className: "h-4 w-4" })
233
- }),
234
- /* @__PURE__ */ y(h, {
235
- variant: "outline",
236
- size: "icon",
237
- className: "h-8 w-8",
238
- onClick: () => J($),
239
- disabled: q === $,
240
- children: /* @__PURE__ */ y(re, { className: "h-4 w-4" })
241
- })
242
- ]
243
- })]
244
- })
245
- ]
246
- });
247
- }
248
- //#endregion
249
- export { T as t };