@burdenoff/microfe-movethewheels 2026.703.3 → 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 (125) 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-BKxMS1AV.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-CH9rjQC-.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-e0ze63iX.js → InventoryPage-DpiqVu1v.js} +8 -8
  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-Cn90P1Xx.js → OrdersListPage-CAMsuUck.js} +166 -89
  21. package/dist/{ProductDetailsPage-C9uOiYLp.js → ProductDetailsPage-wsxAQkA0.js} +12 -12
  22. package/dist/{ProductsPage-QJfHHpqB.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-ApKThYeG.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/MarketplacePage.tsx +265 -50
  71. package/src/movethewheels/pages/OrderDetailsPage.tsx +214 -10
  72. package/src/movethewheels/pages/OrdersListPage.tsx +76 -13
  73. package/src/movethewheels/pages/ProductsPage.tsx +27 -7
  74. package/src/movethewheels/pages/ReportsPage.tsx +65 -4
  75. package/src/movethewheels/pages/RouteDetailsPage.tsx +74 -13
  76. package/src/movethewheels/pages/RoutesPage.tsx +22 -6
  77. package/src/movethewheels/pages/SettingsPage.tsx +3 -19
  78. package/src/movethewheels/pages/VehicleDetailsPage.tsx +3 -33
  79. package/src/movethewheels/pages/VehiclesPage.tsx +26 -5
  80. package/src/movethewheels/pages/WarehousesPage.tsx +22 -17
  81. package/src/movethewheels/types/index.ts +8 -0
  82. package/src/movethewheels/utils/download.ts +62 -0
  83. package/dist/CreateOrderPage-C5iwnjp4.js +0 -479
  84. package/dist/CustomerDetailsPage-B6nwFyLO.js +0 -406
  85. package/dist/DataTable-DmciIKKM.js +0 -249
  86. package/dist/FinancePage-DEDykSOP.js +0 -158
  87. package/dist/MarketplacePage-CIQ97_zp.js +0 -247
  88. package/dist/OrderDetailsPage-DYiZ-9UK.js +0 -429
  89. package/dist/ReportsPage-Zp53q3_8.js +0 -284
  90. package/dist/RouteDetailsPage-DUStXSf9.js +0 -531
  91. /package/dist/{MetricCard-BY0QrMD4.js → MetricCard-CVBVpu7o.js} +0 -0
  92. /package/dist/{StatusBadge-BZurYHMy.js → StatusBadge-C87mDpDP.js} +0 -0
  93. /package/dist/{box-D9Pal4HM.js → box-Eu05PXDh.js} +0 -0
  94. /package/dist/{chart-column-BFIJysDR.js → chart-column-ouzgxIv_.js} +0 -0
  95. /package/dist/{chevron-right-EMIIyyJ1.js → chevron-right-eV4LjaSi.js} +0 -0
  96. /package/dist/{circle-alert-iY24lSlp.js → circle-alert-Bzh2DBSF.js} +0 -0
  97. /package/dist/{circle-check-big-w0TrLKMF.js → circle-check-big-CGMSpQmD.js} +0 -0
  98. /package/dist/{clock-DJZtdl8u.js → clock-Bl3ptexL.js} +0 -0
  99. /package/dist/{dollar-sign-CgKQRz_e.js → dollar-sign-CAVU95SO.js} +0 -0
  100. /package/dist/{download-DRXxoiQR.js → download-C5NbvVDc.js} +0 -0
  101. /package/dist/{file-text-DWWY6_f5.js → file-text-D-1uvLZG.js} +0 -0
  102. /package/dist/{filter-DloLC2eE.js → filter-DUfUg6BO.js} +0 -0
  103. /package/dist/{formatters-CF2S2l1m.js → formatters-BQr-aR5W.js} +0 -0
  104. /package/dist/{map-CkJaULb2.js → map-C-M-FQLR.js} +0 -0
  105. /package/dist/{map-pin-BGiCvyCs.js → map-pin-Dznl5l40.js} +0 -0
  106. /package/dist/{navigation-D36prnAn.js → navigation-BJSJl-VG.js} +0 -0
  107. /package/dist/{package-BChUzpJS.js → package-CcRttV2N.js} +0 -0
  108. /package/dist/{phone-Ac9s3mo_.js → phone-DVSZHt_j.js} +0 -0
  109. /package/dist/{plus-Z76q-FZm.js → plus-C_XZDwBz.js} +0 -0
  110. /package/dist/{refresh-cw-DKt6f5T6.js → refresh-cw-CfgN67l3.js} +0 -0
  111. /package/dist/{save-CojywNhG.js → save-DJE8Fpdv.js} +0 -0
  112. /package/dist/{search-CDGefqb3.js → search-D_VyGcZT.js} +0 -0
  113. /package/dist/{square-pen-CopE9GmB.js → square-pen-D-6JYrVQ.js} +0 -0
  114. /package/dist/{star-nHlLjDKR.js → star-BpRlUZuU.js} +0 -0
  115. /package/dist/{store-BR9Voi5E.js → store-B-8HMuyZ.js} +0 -0
  116. /package/dist/{trash-2-BKhar6Hs.js → trash-2-8vmv-XV_.js} +0 -0
  117. /package/dist/{trending-up-Dohgd4t_.js → trending-up-Dz6PqPRj.js} +0 -0
  118. /package/dist/{triangle-alert-i-XQL9Rd.js → triangle-alert-D7Y3J_4z.js} +0 -0
  119. /package/dist/{truck-C0v_hbLR.js → truck-D-y2IDzv.js} +0 -0
  120. /package/dist/{useAssistant-D4v3oxD3.js → useAssistant-DVW4QgQb.js} +0 -0
  121. /package/dist/{useImportExport-DHr-SWSw.js → useImportExport-DrPDHEDK.js} +0 -0
  122. /package/dist/{useSettings-CkDH_-gM.js → useSettings-BB8X2RLh.js} +0 -0
  123. /package/dist/{user-jyFU3lXk.js → user-DzfTn4dE.js} +0 -0
  124. /package/dist/{users-DZ-ilS6B.js → users-CCrq-w0C.js} +0 -0
  125. /package/dist/{warehouse-6m5kXMLu.js → warehouse-CaqfmMKh.js} +0 -0
@@ -0,0 +1,426 @@
1
+ import { A as e, B as t, F as n, I as r, L as i, P as a, R as o, d as s, f as c, g as ee, h as l, i as te, it as u, l as d, lt as f, ot as ne, u as p } from "./PageLayout-D4LDHJJq.js";
2
+ import { t as re } from "./chevron-left-B2_r0Elx.js";
3
+ import { t as ie } from "./chevron-right-eV4LjaSi.js";
4
+ import { t as ae } from "./clock-Bl3ptexL.js";
5
+ import { t as m } from "./filter-DUfUg6BO.js";
6
+ import { t as oe } from "./map-pin-Dznl5l40.js";
7
+ import { t as se } from "./search-D_VyGcZT.js";
8
+ import { t as ce } from "./star-BpRlUZuU.js";
9
+ import { t as h } from "./store-B-8HMuyZ.js";
10
+ import { n as g } from "./formatters-BQr-aR5W.js";
11
+ import { useCallback as _, useEffect as le, useMemo as v, useState as y } from "react";
12
+ import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
13
+ import { EmphasisPanel as ue, IllustratedEmptyState as C, PagePurpose as de } from "@burdenoff/fe-libs/ui";
14
+ //#region node_modules/lucide-react/dist/esm/icons/chevron-down.js
15
+ var w = f("ChevronDown", [["path", {
16
+ d: "m6 9 6 6 6-6",
17
+ key: "qrunsl"
18
+ }]]), fe = f("ChevronUp", [["path", {
19
+ d: "m18 15-6-6-6 6",
20
+ key: "153udz"
21
+ }]]), pe = "\n query ListServiceProviders($filter: ServiceProviderFilterInput, $pagination: PaginationInput) {\n serviceProviders(filter: $filter, pagination: $pagination) {\n id\n name\n type\n description\n rating\n isVerified\n isActive\n services\n contactInfo\n }\n }\n", me = "\n query ListServiceOfferings($filter: ServiceOfferingFilterInput, $pagination: PaginationInput) {\n serviceOfferings(filter: $filter, pagination: $pagination) {\n id\n providerId\n name\n description\n category\n price\n currency\n availability\n provider {\n id\n name\n type\n rating\n }\n }\n }\n", T = 12, he = [
22
+ {
23
+ value: "0",
24
+ label: "Any rating"
25
+ },
26
+ {
27
+ value: "3",
28
+ label: "3.0+"
29
+ },
30
+ {
31
+ value: "4",
32
+ label: "4.0+"
33
+ },
34
+ {
35
+ value: "4.5",
36
+ label: "4.5+"
37
+ }
38
+ ];
39
+ function E() {
40
+ let { apiGatewayUrl: f, authToken: E, workspaceToken: D, workspaceId: O, tenantId: k, currentUser: A } = ne(), [j, ge] = y([]), [M, _e] = y([]), [N, P] = y(""), [F, I] = y(!1), [L, R] = y(null), [z, B] = y(0), [ve, ye] = y(!1), [V, be] = y(!1), [H, U] = y("all"), [W, G] = y(!1), [K, q] = y("0"), [xe, J] = y(null), Y = v(() => ({
41
+ apiGatewayUrl: f,
42
+ authToken: E,
43
+ workspaceToken: D,
44
+ workspaceId: O,
45
+ tenantId: k,
46
+ actorId: A?.id
47
+ }), [
48
+ f,
49
+ E,
50
+ D,
51
+ O,
52
+ k,
53
+ A?.id
54
+ ]), X = _(async () => {
55
+ I(!0), R(null);
56
+ try {
57
+ let [e, t] = await Promise.all([u(Y, pe, { pagination: {
58
+ limit: T,
59
+ offset: z * T
60
+ } }), u(Y, me, { pagination: {
61
+ limit: 200,
62
+ offset: 0
63
+ } })]);
64
+ ge(e.serviceProviders), ye(e.serviceProviders.length === T), _e(t.serviceOfferings);
65
+ } catch (e) {
66
+ R(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load marketplace"));
67
+ } finally {
68
+ I(!1);
69
+ }
70
+ }, [Y, z]);
71
+ le(() => {
72
+ X();
73
+ }, [X]);
74
+ let Se = v(() => {
75
+ let e = /* @__PURE__ */ new Set();
76
+ return j.forEach((t) => e.add(t.type)), Array.from(e).sort();
77
+ }, [j]), Z = v(() => {
78
+ let e = N.trim().toLowerCase(), t = Number(K);
79
+ return j.filter((n) => !(e && !(n.name.toLowerCase().includes(e) || (n.description ?? "").toLowerCase().includes(e) || n.type.toLowerCase().includes(e)) || H !== "all" && n.type !== H || W && !n.isVerified || t > 0 && (n.rating ?? 0) < t));
80
+ }, [
81
+ j,
82
+ N,
83
+ H,
84
+ W,
85
+ K
86
+ ]), Q = v(() => {
87
+ let e = N.trim().toLowerCase();
88
+ return e ? M.filter((t) => t.name.toLowerCase().includes(e) || (t.description ?? "").toLowerCase().includes(e) || (t.category ?? "").toLowerCase().includes(e)) : M;
89
+ }, [M, N]), Ce = _((e) => M.filter((t) => t.providerId === e), [M]), $ = H !== "all" || W || K !== "0";
90
+ return /* @__PURE__ */ S(te, {
91
+ title: "Marketplace",
92
+ subtitle: "Find logistics service providers",
93
+ icon: /* @__PURE__ */ x(h, { size: 24 }),
94
+ headerActions: /* @__PURE__ */ S(p, {
95
+ variant: V || $ ? "default" : "outline",
96
+ onClick: () => be((e) => !e),
97
+ children: [/* @__PURE__ */ x(m, { size: 16 }), " Filters"]
98
+ }),
99
+ children: [
100
+ /* @__PURE__ */ x(de, {
101
+ icon: /* @__PURE__ */ x(h, { size: 18 }),
102
+ children: "Don't own every leg of the journey? Find vetted third-party logistics providers and service offerings here — compare ratings, verification status and pricing, then engage a partner to cover routes, warehousing or specialised handling you can't do in-house."
103
+ }),
104
+ /* @__PURE__ */ x(s, { children: /* @__PURE__ */ S(c, {
105
+ className: "p-4 space-y-4",
106
+ children: [/* @__PURE__ */ S("div", {
107
+ className: "relative",
108
+ children: [/* @__PURE__ */ x(se, {
109
+ className: "absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary",
110
+ size: 20
111
+ }), /* @__PURE__ */ x(e, {
112
+ placeholder: "Search services, providers, locations...",
113
+ className: "pl-10",
114
+ value: N,
115
+ onChange: (e) => P(e.target.value)
116
+ })]
117
+ }), V && /* @__PURE__ */ S("div", {
118
+ className: "flex flex-wrap items-center gap-3 border-t border-border-seam pt-4",
119
+ children: [
120
+ /* @__PURE__ */ S("div", {
121
+ className: "flex items-center gap-2",
122
+ children: [/* @__PURE__ */ x("span", {
123
+ className: "text-sm font-medium text-text-secondary",
124
+ children: "Type"
125
+ }), /* @__PURE__ */ S(a, {
126
+ value: H,
127
+ onValueChange: U,
128
+ children: [/* @__PURE__ */ x(i, {
129
+ className: "w-[160px]",
130
+ children: /* @__PURE__ */ x(o, { placeholder: "All types" })
131
+ }), /* @__PURE__ */ S(n, { children: [/* @__PURE__ */ x(r, {
132
+ value: "all",
133
+ children: "All types"
134
+ }), Se.map((e) => /* @__PURE__ */ x(r, {
135
+ value: e,
136
+ children: e
137
+ }, e))] })]
138
+ })]
139
+ }),
140
+ /* @__PURE__ */ S("div", {
141
+ className: "flex items-center gap-2",
142
+ children: [/* @__PURE__ */ x("span", {
143
+ className: "text-sm font-medium text-text-secondary",
144
+ children: "Min rating"
145
+ }), /* @__PURE__ */ S(a, {
146
+ value: K,
147
+ onValueChange: q,
148
+ children: [/* @__PURE__ */ x(i, {
149
+ className: "w-[130px]",
150
+ children: /* @__PURE__ */ x(o, {})
151
+ }), /* @__PURE__ */ x(n, { children: he.map((e) => /* @__PURE__ */ x(r, {
152
+ value: e.value,
153
+ children: e.label
154
+ }, e.value)) })]
155
+ })]
156
+ }),
157
+ /* @__PURE__ */ x(p, {
158
+ variant: W ? "default" : "outline",
159
+ size: "sm",
160
+ onClick: () => G((e) => !e),
161
+ children: "Verified only"
162
+ }),
163
+ $ && /* @__PURE__ */ x(p, {
164
+ variant: "ghost",
165
+ size: "sm",
166
+ onClick: () => {
167
+ U("all"), G(!1), q("0");
168
+ },
169
+ children: "Clear filters"
170
+ })
171
+ ]
172
+ })]
173
+ }) }),
174
+ /* @__PURE__ */ S("div", {
175
+ className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
176
+ children: [/* @__PURE__ */ S("div", {
177
+ className: "lg:col-span-2 space-y-4",
178
+ children: [
179
+ /* @__PURE__ */ S("h3", {
180
+ className: "font-semibold",
181
+ children: [
182
+ "Service Providers (",
183
+ Z.length,
184
+ ")"
185
+ ]
186
+ }),
187
+ L && !F && /* @__PURE__ */ x(s, {
188
+ className: "border-status-error-border",
189
+ children: /* @__PURE__ */ S(c, {
190
+ className: "p-6 text-center space-y-3",
191
+ children: [
192
+ /* @__PURE__ */ x("p", {
193
+ className: "text-status-error-text font-medium",
194
+ children: "Couldn't load providers"
195
+ }),
196
+ /* @__PURE__ */ x("p", {
197
+ className: "text-sm text-text-secondary",
198
+ children: L.message
199
+ }),
200
+ /* @__PURE__ */ x(p, {
201
+ variant: "outline",
202
+ onClick: () => void X(),
203
+ children: "Retry"
204
+ })
205
+ ]
206
+ })
207
+ }),
208
+ F && Array.from({ length: 3 }).map((e, n) => /* @__PURE__ */ x(t, { className: "h-32 w-full rounded-lg" }, n)),
209
+ !F && !L && Z.length === 0 && /* @__PURE__ */ x(s, { children: /* @__PURE__ */ x(c, {
210
+ className: "p-0",
211
+ children: /* @__PURE__ */ x(C, {
212
+ illustration: N.trim() || $ ? "empty-search" : "empty-people",
213
+ title: N.trim() || $ ? "No providers match your filters" : "No providers yet",
214
+ description: N.trim() || $ ? "Adjust your search or filters to find logistics partners." : "Verified logistics service providers will appear here as they join the marketplace."
215
+ })
216
+ }) }),
217
+ !F && !L && Z.map((e) => {
218
+ let t = xe === e.id, n = Ce(e.id);
219
+ return /* @__PURE__ */ S(s, { children: [/* @__PURE__ */ x("button", {
220
+ type: "button",
221
+ "aria-expanded": t,
222
+ className: "w-full text-left",
223
+ onClick: () => J(t ? null : e.id),
224
+ children: /* @__PURE__ */ x(c, {
225
+ className: "p-6",
226
+ children: /* @__PURE__ */ S("div", {
227
+ className: "flex items-start justify-between gap-3",
228
+ children: [/* @__PURE__ */ S("div", {
229
+ className: "min-w-0",
230
+ children: [
231
+ /* @__PURE__ */ S("div", {
232
+ className: "flex items-center gap-2 flex-wrap",
233
+ children: [
234
+ /* @__PURE__ */ x("h4", {
235
+ className: "font-semibold text-lg",
236
+ children: e.name
237
+ }),
238
+ e.isVerified && /* @__PURE__ */ x(d, {
239
+ variant: "default",
240
+ children: "Verified"
241
+ }),
242
+ /* @__PURE__ */ x(d, {
243
+ variant: e.isActive ? "default" : "secondary",
244
+ children: e.isActive ? "active" : "inactive"
245
+ })
246
+ ]
247
+ }),
248
+ /* @__PURE__ */ x("p", {
249
+ className: "text-text-secondary mt-1",
250
+ children: e.description
251
+ }),
252
+ /* @__PURE__ */ S("div", {
253
+ className: "flex items-center gap-4 mt-3 text-sm text-text-secondary",
254
+ children: [
255
+ /* @__PURE__ */ S("span", {
256
+ className: "flex items-center gap-1",
257
+ children: [
258
+ /* @__PURE__ */ x(ce, {
259
+ size: 14,
260
+ className: "text-status-warning-text fill-current"
261
+ }),
262
+ " ",
263
+ e.rating ?? 0
264
+ ]
265
+ }),
266
+ /* @__PURE__ */ S("span", {
267
+ className: "flex items-center gap-1",
268
+ children: [
269
+ /* @__PURE__ */ x(oe, { size: 14 }),
270
+ " ",
271
+ e.type
272
+ ]
273
+ }),
274
+ /* @__PURE__ */ S("span", {
275
+ className: "flex items-center gap-1",
276
+ children: [/* @__PURE__ */ x(ae, { size: 14 }), " Listed"]
277
+ })
278
+ ]
279
+ })
280
+ ]
281
+ }), /* @__PURE__ */ S("div", {
282
+ className: "text-right shrink-0",
283
+ children: [
284
+ /* @__PURE__ */ x("p", {
285
+ className: "text-sm text-text-secondary",
286
+ children: "Services"
287
+ }),
288
+ /* @__PURE__ */ x("p", {
289
+ className: "text-lg font-bold",
290
+ children: n.length
291
+ }),
292
+ /* @__PURE__ */ x("span", {
293
+ className: "mt-1 inline-flex items-center gap-1 text-xs text-primary",
294
+ children: t ? /* @__PURE__ */ S(b, { children: ["Hide ", /* @__PURE__ */ x(fe, { size: 14 })] }) : /* @__PURE__ */ S(b, { children: ["View ", /* @__PURE__ */ x(w, { size: 14 })] })
295
+ })
296
+ ]
297
+ })]
298
+ })
299
+ })
300
+ }), t && /* @__PURE__ */ S("div", {
301
+ className: "border-t border-border-seam px-6 py-4 space-y-3",
302
+ children: [/* @__PURE__ */ S("p", {
303
+ className: "text-sm font-medium text-text-secondary",
304
+ children: ["Offerings from ", e.name]
305
+ }), n.length === 0 ? /* @__PURE__ */ x("p", {
306
+ className: "text-sm text-text-secondary",
307
+ children: "This provider hasn't listed any offerings yet."
308
+ }) : n.map((e) => /* @__PURE__ */ S("div", {
309
+ className: "flex items-center justify-between gap-3 rounded-lg border border-border-seam p-3",
310
+ children: [/* @__PURE__ */ S("div", {
311
+ className: "min-w-0",
312
+ children: [/* @__PURE__ */ x("p", {
313
+ className: "font-medium truncate",
314
+ children: e.name
315
+ }), /* @__PURE__ */ x("p", {
316
+ className: "text-sm text-text-secondary truncate",
317
+ children: e.category ?? "general"
318
+ })]
319
+ }), /* @__PURE__ */ S("div", {
320
+ className: "text-right shrink-0",
321
+ children: [/* @__PURE__ */ x("p", {
322
+ className: "font-bold",
323
+ children: g(e.price)
324
+ }), /* @__PURE__ */ x("p", {
325
+ className: "text-xs text-text-secondary",
326
+ children: e.currency
327
+ })]
328
+ })]
329
+ }, e.id))]
330
+ })] }, e.id);
331
+ }),
332
+ !F && !L && (j.length > 0 || z > 0) && /* @__PURE__ */ S("div", {
333
+ className: "flex flex-wrap items-center justify-between gap-3 pt-1",
334
+ children: [/* @__PURE__ */ S("span", {
335
+ className: "text-sm text-text-secondary",
336
+ children: [
337
+ "Showing ",
338
+ j.length === 0 ? 0 : z * T + 1,
339
+ " to",
340
+ " ",
341
+ z * T + j.length
342
+ ]
343
+ }), /* @__PURE__ */ S("div", {
344
+ className: "flex items-center gap-1",
345
+ children: [
346
+ /* @__PURE__ */ x(p, {
347
+ variant: "outline",
348
+ size: "icon",
349
+ className: "h-8 w-8",
350
+ "aria-label": "Previous page",
351
+ onClick: () => {
352
+ J(null), B((e) => Math.max(0, e - 1));
353
+ },
354
+ disabled: z === 0,
355
+ children: /* @__PURE__ */ x(re, { className: "h-4 w-4" })
356
+ }),
357
+ /* @__PURE__ */ S("span", {
358
+ className: "px-3 text-sm",
359
+ children: ["Page ", z + 1]
360
+ }),
361
+ /* @__PURE__ */ x(p, {
362
+ variant: "outline",
363
+ size: "icon",
364
+ className: "h-8 w-8",
365
+ "aria-label": "Next page",
366
+ onClick: () => {
367
+ J(null), B((e) => e + 1);
368
+ },
369
+ disabled: !ve,
370
+ children: /* @__PURE__ */ x(ie, { className: "h-4 w-4" })
371
+ })
372
+ ]
373
+ })]
374
+ })
375
+ ]
376
+ }), /* @__PURE__ */ S(ue, {
377
+ className: "space-y-4",
378
+ children: [
379
+ /* @__PURE__ */ x("h3", {
380
+ className: "text-base font-semibold text-text-primary",
381
+ children: "Popular Services"
382
+ }),
383
+ Q.length === 0 && /* @__PURE__ */ x(C, {
384
+ illustration: N.trim() ? "empty-search" : "empty-generic",
385
+ title: N.trim() ? "No matching services" : "No services listed yet",
386
+ description: N.trim() ? "Adjust your search to discover service offerings." : "Service offerings from providers will be listed here."
387
+ }),
388
+ Q.map((e) => /* @__PURE__ */ S(s, { children: [/* @__PURE__ */ x(l, { children: /* @__PURE__ */ x(ee, {
389
+ className: "text-base",
390
+ children: e.name
391
+ }) }), /* @__PURE__ */ S(c, { children: [
392
+ /* @__PURE__ */ x("p", {
393
+ className: "text-sm text-text-secondary mb-3",
394
+ children: e.description
395
+ }),
396
+ /* @__PURE__ */ S("div", {
397
+ className: "flex flex-wrap gap-1 mb-3",
398
+ children: [/* @__PURE__ */ x(d, {
399
+ variant: "outline",
400
+ className: "text-xs",
401
+ children: e.category ?? "general"
402
+ }), /* @__PURE__ */ x(d, {
403
+ variant: "outline",
404
+ className: "text-xs",
405
+ children: e.provider?.name ?? "provider"
406
+ })]
407
+ }),
408
+ /* @__PURE__ */ S("div", {
409
+ className: "flex items-center justify-between",
410
+ children: [/* @__PURE__ */ x("span", {
411
+ className: "font-bold",
412
+ children: g(e.price)
413
+ }), /* @__PURE__ */ x("span", {
414
+ className: "text-sm text-text-secondary",
415
+ children: e.currency
416
+ })]
417
+ })
418
+ ] })] }, e.id))
419
+ ]
420
+ })]
421
+ })
422
+ ]
423
+ });
424
+ }
425
+ //#endregion
426
+ export { E as default };
@@ -0,0 +1,46 @@
1
+ import { lt as e } from "./PageLayout-D4LDHJJq.js";
2
+ import { t } from "./circle-check-big-CGMSpQmD.js";
3
+ import { useCallback as n, useRef as r, useState as i } from "react";
4
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
+ //#region node_modules/lucide-react/dist/esm/icons/info.js
6
+ var s = e("Info", [
7
+ ["circle", {
8
+ cx: "12",
9
+ cy: "12",
10
+ r: "10",
11
+ key: "1mglay"
12
+ }],
13
+ ["path", {
14
+ d: "M12 16v-4",
15
+ key: "1dtifu"
16
+ }],
17
+ ["path", {
18
+ d: "M12 8h.01",
19
+ key: "e9boi3"
20
+ }]
21
+ ]);
22
+ //#endregion
23
+ //#region src/movethewheels/components/Notice.tsx
24
+ function c({ message: e, variant: n = "success" }) {
25
+ if (!e) return null;
26
+ let r = n === "success";
27
+ return /* @__PURE__ */ o("div", {
28
+ role: "status",
29
+ className: `flex items-start gap-2 rounded-lg border px-4 py-3 text-sm ${r ? "border-status-success-border bg-status-success-bg-subtle text-status-success-text" : "border-status-info-border bg-status-info-bg-subtle text-status-info-text"}`,
30
+ children: [a(r ? t : s, {
31
+ size: 18,
32
+ className: "mt-0.5 shrink-0"
33
+ }), /* @__PURE__ */ a("span", { children: e })]
34
+ });
35
+ }
36
+ function l(e = 4e3) {
37
+ let [t, a] = i(null), o = r(null);
38
+ return {
39
+ message: t,
40
+ notify: n((t) => {
41
+ a(t), o.current && clearTimeout(o.current), o.current = setTimeout(() => a(null), e);
42
+ }, [e])
43
+ };
44
+ }
45
+ //#endregion
46
+ export { l as n, c as t };