@burdenoff/microfe-proserviceworld 2026.703.1 → 2026.706.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 (75) hide show
  1. package/dist/index.js +2 -3
  2. package/dist/node_modules/clsx/dist/clsx.js +18 -0
  3. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  4. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1716 -0
  5. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  6. package/dist/proserviceworld/ProServiceWorldRoot.js +92 -136
  7. package/dist/proserviceworld/ProServiceWorldRoot.js.map +1 -1
  8. package/dist/proserviceworld/ProServiceWorldRoutes.js +18 -26
  9. package/dist/proserviceworld/ProServiceWorldRoutes.js.map +1 -1
  10. package/dist/proserviceworld/components/ui.js +273 -0
  11. package/dist/proserviceworld/components/ui.js.map +1 -0
  12. package/dist/proserviceworld/hooks/useFiles.js +45 -0
  13. package/dist/proserviceworld/hooks/useFiles.js.map +1 -0
  14. package/dist/proserviceworld/hooks/useProServiceWorldApi.js +416 -0
  15. package/dist/proserviceworld/hooks/useProServiceWorldApi.js.map +1 -0
  16. package/dist/proserviceworld/index.js +0 -1
  17. package/dist/proserviceworld/pages/AnalyticsPage.js +163 -475
  18. package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
  19. package/dist/proserviceworld/pages/ClientDetailPage.js +238 -0
  20. package/dist/proserviceworld/pages/ClientDetailPage.js.map +1 -0
  21. package/dist/proserviceworld/pages/ClientsPage.js +295 -0
  22. package/dist/proserviceworld/pages/ClientsPage.js.map +1 -0
  23. package/dist/proserviceworld/pages/CompliancePage.js +307 -0
  24. package/dist/proserviceworld/pages/CompliancePage.js.map +1 -0
  25. package/dist/proserviceworld/pages/ConflictsPage.js +234 -0
  26. package/dist/proserviceworld/pages/ConflictsPage.js.map +1 -0
  27. package/dist/proserviceworld/pages/DashboardPage.js +179 -632
  28. package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
  29. package/dist/proserviceworld/pages/DocumentsPage.js +235 -539
  30. package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
  31. package/dist/proserviceworld/pages/EngagementDetailPage.js +444 -0
  32. package/dist/proserviceworld/pages/EngagementDetailPage.js.map +1 -0
  33. package/dist/proserviceworld/pages/EngagementsPage.js +256 -0
  34. package/dist/proserviceworld/pages/EngagementsPage.js.map +1 -0
  35. package/dist/proserviceworld/pages/InvoicesPage.js +303 -0
  36. package/dist/proserviceworld/pages/InvoicesPage.js.map +1 -0
  37. package/dist/proserviceworld/pages/MattersPage.js +275 -0
  38. package/dist/proserviceworld/pages/MattersPage.js.map +1 -0
  39. package/dist/proserviceworld/pages/PracticeAreasPage.js +176 -0
  40. package/dist/proserviceworld/pages/PracticeAreasPage.js.map +1 -0
  41. package/dist/proserviceworld/pages/TimePage.js +310 -0
  42. package/dist/proserviceworld/pages/TimePage.js.map +1 -0
  43. package/dist/proserviceworld/utils/cn.js +10 -0
  44. package/dist/proserviceworld/utils/cn.js.map +1 -0
  45. package/dist/proserviceworld/utils/nav.js +11 -0
  46. package/dist/proserviceworld/utils/nav.js.map +1 -0
  47. package/package.json +1 -1
  48. package/dist/proserviceworld/pages/AdminReportsPage.js +0 -579
  49. package/dist/proserviceworld/pages/AdminReportsPage.js.map +0 -1
  50. package/dist/proserviceworld/pages/AdminUsersPage.js +0 -468
  51. package/dist/proserviceworld/pages/AdminUsersPage.js.map +0 -1
  52. package/dist/proserviceworld/pages/BookingsPage.js +0 -446
  53. package/dist/proserviceworld/pages/BookingsPage.js.map +0 -1
  54. package/dist/proserviceworld/pages/MessagesPage.js +0 -238
  55. package/dist/proserviceworld/pages/MessagesPage.js.map +0 -1
  56. package/dist/proserviceworld/pages/PaymentsPage.js +0 -537
  57. package/dist/proserviceworld/pages/PaymentsPage.js.map +0 -1
  58. package/dist/proserviceworld/pages/ProjectsPage.js +0 -627
  59. package/dist/proserviceworld/pages/ProjectsPage.js.map +0 -1
  60. package/dist/proserviceworld/pages/ProviderDetailPage.js +0 -538
  61. package/dist/proserviceworld/pages/ProviderDetailPage.js.map +0 -1
  62. package/dist/proserviceworld/pages/ProvidersPage.js +0 -347
  63. package/dist/proserviceworld/pages/ProvidersPage.js.map +0 -1
  64. package/dist/proserviceworld/pages/ReviewsPage.js +0 -356
  65. package/dist/proserviceworld/pages/ReviewsPage.js.map +0 -1
  66. package/dist/proserviceworld/pages/ServiceDetailsPage.js +0 -631
  67. package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +0 -1
  68. package/dist/proserviceworld/pages/ServicesPage.js +0 -344
  69. package/dist/proserviceworld/pages/ServicesPage.js.map +0 -1
  70. package/dist/proserviceworld/pages/VerificationPage.js +0 -370
  71. package/dist/proserviceworld/pages/VerificationPage.js.map +0 -1
  72. package/dist/proserviceworld/store/proserviceworldStore.js +0 -2490
  73. package/dist/proserviceworld/store/proserviceworldStore.js.map +0 -1
  74. package/dist/proserviceworld/utils/i18n.js +0 -15
  75. package/dist/proserviceworld/utils/i18n.js.map +0 -1
@@ -1,537 +0,0 @@
1
- import { useProServiceWorldStore as e } from "../store/proserviceworldStore.js";
2
- import { useMemo as t, useState as n } from "react";
3
- import { ArrowDownLeft as r, ArrowUpRight as i, Building2 as a, Clock as o, CreditCard as s, DollarSign as c, Download as l, FileText as u, Plus as d, RotateCcw as f, Search as p, Shield as m, Wallet as h } from "lucide-react";
4
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
5
- import { AuroraBackground as v, Badge as y, Button as b, Card as x, CardContent as S, CardHeader as C, CardTitle as w, GlassCard as T, GradientText as E, IllustratedEmptyState as D, Input as O, NextSteps as k, PagePurpose as A } from "@burdenoff/fe-libs/ui";
6
- //#region src/proserviceworld/pages/PaymentsPage.tsx
7
- function j() {
8
- let { transactions: j, paymentMethods: M, invoices: N } = e(), [P, F] = n("overview"), [I, L] = n(""), [R, z] = n("all"), B = j.filter((e) => e.type === "outgoing" && e.status === "completed").reduce((e, t) => e + t.amount, 0), V = j.filter((e) => e.status === "pending").reduce((e, t) => e + t.amount, 0), H = j.filter((e) => e.status === "completed").reduce((e, t) => e + t.fees, 0), U = j.filter((e) => e.type === "refund" && e.status === "completed").reduce((e, t) => e + t.amount, 0), W = t(() => {
9
- let e = [...j];
10
- if (R !== "all" && (e = e.filter((e) => e.status === R)), I.trim()) {
11
- let t = I.toLowerCase();
12
- e = e.filter((e) => e.description.toLowerCase().includes(t) || e.counterparty.toLowerCase().includes(t) || (e.serviceName?.toLowerCase().includes(t) ?? !1));
13
- }
14
- return e.sort((e, t) => new Date(t.createdAt).getTime() - new Date(e.createdAt).getTime());
15
- }, [
16
- j,
17
- R,
18
- I
19
- ]), G = (e) => e === "outgoing" ? /* @__PURE__ */ g(i, { className: "h-4 w-4 text-status-error-text" }) : e === "refund" ? /* @__PURE__ */ g(f, { className: "h-4 w-4 text-status-success-text" }) : /* @__PURE__ */ g(r, { className: "h-4 w-4 text-accent-blue" }), K = (e) => /* @__PURE__ */ g(y, {
20
- variant: {
21
- completed: "default",
22
- pending: "secondary",
23
- failed: "destructive",
24
- cancelled: "outline"
25
- }[e] ?? "secondary",
26
- children: e
27
- }), q = (e) => g(e === "card" ? s : e === "bank" ? a : h, { className: "h-5 w-5" });
28
- return /* @__PURE__ */ _("div", {
29
- className: "space-y-6 p-6 bg-bg-canvas min-h-screen",
30
- children: [
31
- /* @__PURE__ */ _("div", {
32
- className: "relative overflow-hidden rounded-card -mx-2 px-2 pt-1",
33
- children: [/* @__PURE__ */ g(v, { intensity: "subtle" }), /* @__PURE__ */ _("div", {
34
- className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
35
- children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("h1", {
36
- className: "text-2xl font-semibold tracking-tight",
37
- children: /* @__PURE__ */ g(E, { children: "Payments" })
38
- }), /* @__PURE__ */ g("p", {
39
- className: "text-sm text-text-secondary",
40
- children: "Track transactions, manage payment methods, and view invoices."
41
- })] }), /* @__PURE__ */ _(b, {
42
- size: "sm",
43
- children: [/* @__PURE__ */ g(d, { className: "mr-2 h-4 w-4" }), " Make Payment"]
44
- })]
45
- })]
46
- }),
47
- /* @__PURE__ */ g(A, {
48
- icon: /* @__PURE__ */ g(c, { className: "h-4 w-4" }),
49
- children: "Your money, end to end. See what you have spent, what is pending, and what has been refunded; search and reconcile individual transactions; manage the cards and bank accounts you pay with; and download invoices for your records."
50
- }),
51
- /* @__PURE__ */ g(k, {
52
- storageKey: "proserviceworld-payments",
53
- steps: [
54
- {
55
- id: "transactions",
56
- label: "Review your transactions",
57
- description: "Search and filter every payment, fee, and refund.",
58
- icon: /* @__PURE__ */ g(p, { className: "h-4 w-4" }),
59
- onClick: () => F("transactions")
60
- },
61
- {
62
- id: "methods",
63
- label: "Manage payment methods",
64
- description: "Add or set a default card, bank, or wallet.",
65
- icon: /* @__PURE__ */ g(s, { className: "h-4 w-4" }),
66
- onClick: () => F("methods"),
67
- done: M.length > 0
68
- },
69
- {
70
- id: "invoices",
71
- label: "Check your invoices",
72
- description: "View and download invoices you create or receive.",
73
- icon: /* @__PURE__ */ g(u, { className: "h-4 w-4" }),
74
- onClick: () => F("invoices")
75
- }
76
- ]
77
- }),
78
- /* @__PURE__ */ g("div", {
79
- className: "flex flex-wrap gap-1 border-b border-border-seam",
80
- children: [
81
- {
82
- key: "overview",
83
- label: "Overview"
84
- },
85
- {
86
- key: "transactions",
87
- label: "Transactions"
88
- },
89
- {
90
- key: "methods",
91
- label: "Payment Methods"
92
- },
93
- {
94
- key: "invoices",
95
- label: "Invoices"
96
- }
97
- ].map(({ key: e, label: t }) => /* @__PURE__ */ g("button", {
98
- onClick: () => F(e),
99
- "aria-pressed": P === e,
100
- className: `border-b-2 px-4 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus ${P === e ? "border-action-primary-bg text-text-primary" : "border-transparent text-text-secondary hover:text-text-primary"}`,
101
- children: t
102
- }, e))
103
- }),
104
- P === "overview" && /* @__PURE__ */ _("div", {
105
- className: "space-y-6",
106
- children: [/* @__PURE__ */ _("div", {
107
- className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4",
108
- children: [
109
- /* @__PURE__ */ g(T, {
110
- treatment: "glass",
111
- glow: !0,
112
- className: "border-border-seam",
113
- children: /* @__PURE__ */ _("div", {
114
- className: "flex items-center gap-3",
115
- children: [/* @__PURE__ */ g("div", {
116
- className: "rounded-lg bg-status-error-bg-subtle p-2",
117
- children: /* @__PURE__ */ g(i, { className: "h-5 w-5 text-status-error-text" })
118
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("p", {
119
- className: "text-2xl font-bold tabular-nums",
120
- children: ["$", B.toLocaleString()]
121
- }), /* @__PURE__ */ g("p", {
122
- className: "text-xs text-text-secondary",
123
- children: "Total Spent"
124
- })] })]
125
- })
126
- }),
127
- /* @__PURE__ */ g(T, {
128
- treatment: "metric",
129
- className: "border-border-seam",
130
- children: /* @__PURE__ */ _("div", {
131
- className: "flex items-center gap-3",
132
- children: [/* @__PURE__ */ g("div", {
133
- className: "rounded-lg bg-status-warning-bg-subtle p-2",
134
- children: /* @__PURE__ */ g(o, { className: "h-5 w-5 text-status-warning-text" })
135
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("p", {
136
- className: "text-2xl font-bold tabular-nums",
137
- children: ["$", V.toLocaleString()]
138
- }), /* @__PURE__ */ g("p", {
139
- className: "text-xs text-text-secondary",
140
- children: "Pending"
141
- })] })]
142
- })
143
- }),
144
- /* @__PURE__ */ g(T, {
145
- treatment: "metric",
146
- className: "border-border-seam",
147
- children: /* @__PURE__ */ _("div", {
148
- className: "flex items-center gap-3",
149
- children: [/* @__PURE__ */ g("div", {
150
- className: "rounded-lg bg-status-info-bg-subtle p-2",
151
- children: /* @__PURE__ */ g(c, { className: "h-5 w-5 text-accent-blue" })
152
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("p", {
153
- className: "text-2xl font-bold tabular-nums",
154
- children: ["$", H.toLocaleString()]
155
- }), /* @__PURE__ */ g("p", {
156
- className: "text-xs text-text-secondary",
157
- children: "Total Fees"
158
- })] })]
159
- })
160
- }),
161
- /* @__PURE__ */ g(T, {
162
- treatment: "metric",
163
- className: "border-border-seam",
164
- children: /* @__PURE__ */ _("div", {
165
- className: "flex items-center gap-3",
166
- children: [/* @__PURE__ */ g("div", {
167
- className: "rounded-lg bg-status-success-bg-subtle p-2",
168
- children: /* @__PURE__ */ g(f, { className: "h-5 w-5 text-status-success-text" })
169
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("p", {
170
- className: "text-2xl font-bold tabular-nums",
171
- children: ["$", U.toLocaleString()]
172
- }), /* @__PURE__ */ g("p", {
173
- className: "text-xs text-text-secondary",
174
- children: "Refunded"
175
- })] })]
176
- })
177
- })
178
- ]
179
- }), /* @__PURE__ */ _(x, {
180
- className: "border-border-seam",
181
- children: [/* @__PURE__ */ g(C, { children: /* @__PURE__ */ _("div", {
182
- className: "flex items-center justify-between",
183
- children: [/* @__PURE__ */ g(w, {
184
- className: "text-base",
185
- children: "Recent Transactions"
186
- }), /* @__PURE__ */ g(b, {
187
- variant: "outline",
188
- size: "sm",
189
- onClick: () => F("transactions"),
190
- children: "View All"
191
- })]
192
- }) }), /* @__PURE__ */ g(S, { children: /* @__PURE__ */ g("div", {
193
- className: "space-y-3",
194
- children: j.slice(0, 5).map((e) => /* @__PURE__ */ _("div", {
195
- className: "flex items-center justify-between rounded-lg border border-border-seam p-3 transition-shadow hover:shadow-pop",
196
- children: [/* @__PURE__ */ _("div", {
197
- className: "flex items-center gap-3",
198
- children: [G(e.type), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
199
- className: "text-sm font-medium",
200
- children: e.description
201
- }), /* @__PURE__ */ _("p", {
202
- className: "text-xs text-text-secondary",
203
- children: [
204
- e.counterparty,
205
- " - ",
206
- e.createdAt
207
- ]
208
- })] })]
209
- }), /* @__PURE__ */ _("div", {
210
- className: "text-right",
211
- children: [/* @__PURE__ */ _("p", {
212
- className: `text-sm font-bold tabular-nums ${e.type === "refund" ? "text-status-success-text" : ""}`,
213
- children: [
214
- e.type === "refund" ? "+" : "-",
215
- "$",
216
- e.amount.toLocaleString()
217
- ]
218
- }), K(e.status)]
219
- })]
220
- }, e.id))
221
- }) })]
222
- })]
223
- }),
224
- P === "transactions" && /* @__PURE__ */ _("div", {
225
- className: "space-y-4",
226
- children: [/* @__PURE__ */ _("div", {
227
- className: "flex flex-col gap-4 sm:flex-row sm:items-center",
228
- children: [/* @__PURE__ */ _("div", {
229
- className: "relative flex-1",
230
- children: [/* @__PURE__ */ g(p, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ g(O, {
231
- placeholder: "Search transactions...",
232
- value: I,
233
- onChange: (e) => L(e.target.value),
234
- className: "pl-10"
235
- })]
236
- }), /* @__PURE__ */ g("div", {
237
- className: "flex flex-wrap gap-2",
238
- children: [
239
- "all",
240
- "completed",
241
- "pending",
242
- "failed"
243
- ].map((e) => /* @__PURE__ */ g(b, {
244
- variant: R === e ? "default" : "outline",
245
- size: "sm",
246
- onClick: () => z(e),
247
- children: e === "all" ? "All" : e.charAt(0).toUpperCase() + e.slice(1)
248
- }, e))
249
- })]
250
- }), /* @__PURE__ */ g(x, {
251
- className: "border-border-seam",
252
- children: /* @__PURE__ */ g(S, {
253
- className: "pt-4",
254
- children: W.length === 0 ? /* @__PURE__ */ g(D, {
255
- illustration: "empty-search",
256
- title: "No transactions found",
257
- description: "No transactions match your current filters."
258
- }) : /* @__PURE__ */ g("div", {
259
- className: "overflow-x-auto",
260
- children: /* @__PURE__ */ _("table", {
261
- className: "w-full text-sm",
262
- children: [/* @__PURE__ */ g("thead", { children: /* @__PURE__ */ _("tr", {
263
- className: "border-b border-border-seam text-left text-text-secondary",
264
- children: [
265
- /* @__PURE__ */ g("th", {
266
- className: "p-3 font-medium",
267
- children: "Type"
268
- }),
269
- /* @__PURE__ */ g("th", {
270
- className: "p-3 font-medium",
271
- children: "Description"
272
- }),
273
- /* @__PURE__ */ g("th", {
274
- className: "p-3 font-medium",
275
- children: "Counterparty"
276
- }),
277
- /* @__PURE__ */ g("th", {
278
- className: "p-3 font-medium",
279
- children: "Method"
280
- }),
281
- /* @__PURE__ */ g("th", {
282
- className: "p-3 text-right font-medium",
283
- children: "Amount"
284
- }),
285
- /* @__PURE__ */ g("th", {
286
- className: "p-3 text-right font-medium",
287
- children: "Fees"
288
- }),
289
- /* @__PURE__ */ g("th", {
290
- className: "p-3 text-right font-medium",
291
- children: "Net"
292
- }),
293
- /* @__PURE__ */ g("th", {
294
- className: "p-3 font-medium",
295
- children: "Status"
296
- }),
297
- /* @__PURE__ */ g("th", {
298
- className: "p-3 font-medium",
299
- children: "Date"
300
- })
301
- ]
302
- }) }), /* @__PURE__ */ g("tbody", { children: W.map((e) => /* @__PURE__ */ _("tr", {
303
- className: "border-b border-border-seam transition-colors hover:bg-bg-sunken/50",
304
- children: [
305
- /* @__PURE__ */ g("td", {
306
- className: "p-3",
307
- children: G(e.type)
308
- }),
309
- /* @__PURE__ */ g("td", {
310
- className: "p-3 font-medium",
311
- children: e.description
312
- }),
313
- /* @__PURE__ */ g("td", {
314
- className: "p-3",
315
- children: e.counterparty
316
- }),
317
- /* @__PURE__ */ g("td", {
318
- className: "p-3",
319
- children: /* @__PURE__ */ g(y, {
320
- variant: "outline",
321
- children: e.method.replace("_", " ")
322
- })
323
- }),
324
- /* @__PURE__ */ _("td", {
325
- className: `p-3 text-right font-medium tabular-nums ${e.type === "refund" ? "text-status-success-text" : ""}`,
326
- children: [
327
- e.type === "refund" ? "+" : "-",
328
- "$",
329
- e.amount.toLocaleString()
330
- ]
331
- }),
332
- /* @__PURE__ */ _("td", {
333
- className: "p-3 text-right text-text-secondary tabular-nums",
334
- children: ["$", e.fees]
335
- }),
336
- /* @__PURE__ */ _("td", {
337
- className: "p-3 text-right tabular-nums",
338
- children: ["$", e.netAmount.toLocaleString()]
339
- }),
340
- /* @__PURE__ */ g("td", {
341
- className: "p-3",
342
- children: K(e.status)
343
- }),
344
- /* @__PURE__ */ g("td", {
345
- className: "p-3 text-text-secondary",
346
- children: e.createdAt
347
- })
348
- ]
349
- }, e.id)) })]
350
- })
351
- })
352
- })
353
- })]
354
- }),
355
- P === "methods" && /* @__PURE__ */ g("div", {
356
- className: "space-y-4",
357
- children: /* @__PURE__ */ _("div", {
358
- className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
359
- children: [M.map((e) => /* @__PURE__ */ _(T, {
360
- treatment: "glass",
361
- glow: e.isDefault,
362
- className: `border-border-seam ${e.isDefault, ""}`,
363
- children: [
364
- /* @__PURE__ */ _("div", {
365
- className: "flex items-start justify-between",
366
- children: [/* @__PURE__ */ _("div", {
367
- className: "flex items-center gap-3",
368
- children: [/* @__PURE__ */ g("div", {
369
- className: "rounded-lg border border-border-seam p-2 text-text-primary",
370
- children: q(e.type)
371
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
372
- className: "font-medium",
373
- children: e.name
374
- }), /* @__PURE__ */ g("p", {
375
- className: "text-sm text-text-secondary",
376
- children: e.details
377
- })] })]
378
- }), e.isDefault && /* @__PURE__ */ g(y, { children: "Default" })]
379
- }),
380
- /* @__PURE__ */ _("div", {
381
- className: "mt-4 flex items-center gap-4 text-sm",
382
- children: [e.isVerified ? /* @__PURE__ */ _("span", {
383
- className: "flex items-center gap-1 text-status-success-text",
384
- children: [/* @__PURE__ */ g(m, { className: "h-4 w-4" }), " Verified"]
385
- }) : /* @__PURE__ */ _("span", {
386
- className: "flex items-center gap-1 text-status-warning-text",
387
- children: [/* @__PURE__ */ g(o, { className: "h-4 w-4" }), " Unverified"]
388
- }), e.lastUsed && /* @__PURE__ */ _("span", {
389
- className: "text-text-secondary",
390
- children: ["Last used: ", e.lastUsed]
391
- })]
392
- }),
393
- /* @__PURE__ */ _("div", {
394
- className: "mt-4 flex gap-2",
395
- children: [!e.isDefault && /* @__PURE__ */ g(b, {
396
- variant: "outline",
397
- size: "sm",
398
- className: "flex-1",
399
- children: "Set Default"
400
- }), /* @__PURE__ */ g(b, {
401
- variant: "outline",
402
- size: "sm",
403
- className: "flex-1",
404
- children: "Remove"
405
- })]
406
- })
407
- ]
408
- }, e.id)), /* @__PURE__ */ g(x, {
409
- className: "flex items-center justify-center border-dashed border-border-seam transition-shadow hover:shadow-pop",
410
- children: /* @__PURE__ */ _(S, {
411
- className: "py-8 text-center",
412
- children: [
413
- /* @__PURE__ */ g(d, { className: "mx-auto h-8 w-8 text-text-secondary" }),
414
- /* @__PURE__ */ g("p", {
415
- className: "mt-2 text-sm font-medium",
416
- children: "Add Payment Method"
417
- }),
418
- /* @__PURE__ */ g("p", {
419
- className: "text-xs text-text-secondary",
420
- children: "Add a new card, bank, or PayPal"
421
- })
422
- ]
423
- })
424
- })]
425
- })
426
- }),
427
- P === "invoices" && /* @__PURE__ */ g("div", {
428
- className: "space-y-4",
429
- children: /* @__PURE__ */ g(x, {
430
- className: "border-border-seam",
431
- children: /* @__PURE__ */ g(S, {
432
- className: "pt-4",
433
- children: N.length === 0 ? /* @__PURE__ */ g(D, {
434
- illustration: "empty-files",
435
- title: "No invoices yet",
436
- description: "Invoices you create or receive will appear here."
437
- }) : /* @__PURE__ */ g("div", {
438
- className: "overflow-x-auto",
439
- children: /* @__PURE__ */ _("table", {
440
- className: "w-full text-sm",
441
- children: [/* @__PURE__ */ g("thead", { children: /* @__PURE__ */ _("tr", {
442
- className: "border-b border-border-seam text-left text-text-secondary",
443
- children: [
444
- /* @__PURE__ */ g("th", {
445
- className: "p-3 font-medium",
446
- children: "Invoice #"
447
- }),
448
- /* @__PURE__ */ g("th", {
449
- className: "p-3 font-medium",
450
- children: "Description"
451
- }),
452
- /* @__PURE__ */ g("th", {
453
- className: "p-3 font-medium",
454
- children: "Client"
455
- }),
456
- /* @__PURE__ */ g("th", {
457
- className: "p-3 text-right font-medium",
458
- children: "Amount"
459
- }),
460
- /* @__PURE__ */ g("th", {
461
- className: "p-3 font-medium",
462
- children: "Status"
463
- }),
464
- /* @__PURE__ */ g("th", {
465
- className: "p-3 font-medium",
466
- children: "Due Date"
467
- }),
468
- /* @__PURE__ */ g("th", {
469
- className: "p-3 text-right font-medium",
470
- children: "Actions"
471
- })
472
- ]
473
- }) }), /* @__PURE__ */ g("tbody", { children: N.map((e) => /* @__PURE__ */ _("tr", {
474
- className: "border-b border-border-seam transition-colors hover:bg-bg-sunken/50",
475
- children: [
476
- /* @__PURE__ */ g("td", {
477
- className: "p-3 font-medium",
478
- children: e.number
479
- }),
480
- /* @__PURE__ */ g("td", {
481
- className: "p-3",
482
- children: e.description
483
- }),
484
- /* @__PURE__ */ g("td", {
485
- className: "p-3",
486
- children: e.clientName
487
- }),
488
- /* @__PURE__ */ _("td", {
489
- className: "p-3 text-right font-medium tabular-nums",
490
- children: ["$", e.amount.toLocaleString()]
491
- }),
492
- /* @__PURE__ */ g("td", {
493
- className: "p-3",
494
- children: /* @__PURE__ */ g(y, {
495
- variant: {
496
- paid: "default",
497
- pending: "secondary",
498
- overdue: "destructive"
499
- }[e.status] ?? "secondary",
500
- children: e.status
501
- })
502
- }),
503
- /* @__PURE__ */ g("td", {
504
- className: "p-3 text-text-secondary",
505
- children: e.dueDate
506
- }),
507
- /* @__PURE__ */ g("td", {
508
- className: "p-3 text-right",
509
- children: /* @__PURE__ */ _("div", {
510
- className: "flex justify-end gap-1",
511
- children: [/* @__PURE__ */ g(b, {
512
- variant: "outline",
513
- size: "sm",
514
- "aria-label": "View invoice",
515
- children: /* @__PURE__ */ g(u, { className: "h-3 w-3" })
516
- }), /* @__PURE__ */ g(b, {
517
- variant: "outline",
518
- size: "sm",
519
- "aria-label": "Download invoice",
520
- children: /* @__PURE__ */ g(l, { className: "h-3 w-3" })
521
- })]
522
- })
523
- })
524
- ]
525
- }, e.id)) })]
526
- })
527
- })
528
- })
529
- })
530
- })
531
- ]
532
- });
533
- }
534
- //#endregion
535
- export { j as PaymentsPage };
536
-
537
- //# sourceMappingURL=PaymentsPage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaymentsPage.js","names":[],"sources":["../../../src/proserviceworld/pages/PaymentsPage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n GlassCard,\n IllustratedEmptyState,\n AuroraBackground,\n GradientText,\n PagePurpose,\n NextSteps,\n} from '@burdenoff/fe-libs/ui';\nimport {\n DollarSign,\n CreditCard,\n Building2,\n Wallet,\n ArrowUpRight,\n ArrowDownLeft,\n RotateCcw,\n Clock,\n Search,\n FileText,\n Plus,\n Shield,\n Download,\n} from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\n\ntype PaymentTab = 'overview' | 'transactions' | 'methods' | 'invoices';\n\nexport function PaymentsPage() {\n const { transactions, paymentMethods, invoices } = useProServiceWorldStore();\n const [activeTab, setActiveTab] = useState<PaymentTab>('overview');\n const [searchQuery, setSearchQuery] = useState('');\n const [txnStatusFilter, setTxnStatusFilter] = useState<string>('all');\n\n // Overview stats\n const totalSpent = transactions\n .filter((t) => t.type === 'outgoing' && t.status === 'completed')\n .reduce((s, t) => s + t.amount, 0);\n const totalPending = transactions\n .filter((t) => t.status === 'pending')\n .reduce((s, t) => s + t.amount, 0);\n const totalFees = transactions\n .filter((t) => t.status === 'completed')\n .reduce((s, t) => s + t.fees, 0);\n const totalRefunded = transactions\n .filter((t) => t.type === 'refund' && t.status === 'completed')\n .reduce((s, t) => s + t.amount, 0);\n\n // Filter transactions\n const filteredTxns = useMemo(() => {\n let result = [...transactions];\n if (txnStatusFilter !== 'all') {\n result = result.filter((t) => t.status === txnStatusFilter);\n }\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase();\n result = result.filter(\n (t) =>\n t.description.toLowerCase().includes(q) ||\n t.counterparty.toLowerCase().includes(q) ||\n (t.serviceName?.toLowerCase().includes(q) ?? false)\n );\n }\n return result.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n }, [transactions, txnStatusFilter, searchQuery]);\n\n const txnTypeIcon = (type: string) => {\n if (type === 'outgoing') return <ArrowUpRight className=\"h-4 w-4 text-status-error-text\" />;\n if (type === 'refund') return <RotateCcw className=\"h-4 w-4 text-status-success-text\" />;\n return <ArrowDownLeft className=\"h-4 w-4 text-accent-blue\" />;\n };\n\n const statusBadge = (status: string) => {\n const variants: Record<string, 'default' | 'secondary' | 'destructive' | 'outline'> = {\n completed: 'default',\n pending: 'secondary',\n failed: 'destructive',\n cancelled: 'outline',\n };\n return <Badge variant={variants[status] ?? 'secondary'}>{status}</Badge>;\n };\n\n const methodIcon = (type: string) => {\n if (type === 'card') return <CreditCard className=\"h-5 w-5\" />;\n if (type === 'bank') return <Building2 className=\"h-5 w-5\" />;\n return <Wallet className=\"h-5 w-5\" />;\n };\n\n const tabs: { key: PaymentTab; label: string }[] = [\n { key: 'overview', label: 'Overview' },\n { key: 'transactions', label: 'Transactions' },\n { key: 'methods', label: 'Payment Methods' },\n { key: 'invoices', label: 'Invoices' },\n ];\n\n return (\n <div className=\"space-y-6 p-6 bg-bg-canvas min-h-screen\">\n {/* Hero header — the ONE aurora backdrop for this MFE */}\n <div className=\"relative overflow-hidden rounded-card -mx-2 px-2 pt-1\">\n <AuroraBackground intensity=\"subtle\" />\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">\n <GradientText>Payments</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Track transactions, manage payment methods, and view invoices.\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" /> Make Payment\n </Button>\n </div>\n </div>\n\n <PagePurpose icon={<DollarSign className=\"h-4 w-4\" />}>\n Your money, end to end. See what you have spent, what is pending, and what has been\n refunded; search and reconcile individual transactions; manage the cards and bank accounts\n you pay with; and download invoices for your records.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"proserviceworld-payments\"\n steps={[\n {\n id: 'transactions',\n label: 'Review your transactions',\n description: 'Search and filter every payment, fee, and refund.',\n icon: <Search className=\"h-4 w-4\" />,\n onClick: () => setActiveTab('transactions'),\n },\n {\n id: 'methods',\n label: 'Manage payment methods',\n description: 'Add or set a default card, bank, or wallet.',\n icon: <CreditCard className=\"h-4 w-4\" />,\n onClick: () => setActiveTab('methods'),\n done: paymentMethods.length > 0,\n },\n {\n id: 'invoices',\n label: 'Check your invoices',\n description: 'View and download invoices you create or receive.',\n icon: <FileText className=\"h-4 w-4\" />,\n onClick: () => setActiveTab('invoices'),\n },\n ]}\n />\n\n {/* Tabs */}\n <div className=\"flex flex-wrap gap-1 border-b border-border-seam\">\n {tabs.map(({ key, label }) => (\n <button\n key={key}\n onClick={() => setActiveTab(key)}\n aria-pressed={activeTab === key}\n className={`border-b-2 px-4 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus ${\n activeTab === key\n ? 'border-action-primary-bg text-text-primary'\n : 'border-transparent text-text-secondary hover:text-text-primary'\n }`}\n >\n {label}\n </button>\n ))}\n </div>\n\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <div className=\"space-y-6\">\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-status-error-bg-subtle p-2\">\n <ArrowUpRight className=\"h-5 w-5 text-status-error-text\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold tabular-nums\">${totalSpent.toLocaleString()}</p>\n <p className=\"text-xs text-text-secondary\">Total Spent</p>\n </div>\n </div>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-status-warning-bg-subtle p-2\">\n <Clock className=\"h-5 w-5 text-status-warning-text\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold tabular-nums\">${totalPending.toLocaleString()}</p>\n <p className=\"text-xs text-text-secondary\">Pending</p>\n </div>\n </div>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-status-info-bg-subtle p-2\">\n <DollarSign className=\"h-5 w-5 text-accent-blue\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold tabular-nums\">${totalFees.toLocaleString()}</p>\n <p className=\"text-xs text-text-secondary\">Total Fees</p>\n </div>\n </div>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-status-success-bg-subtle p-2\">\n <RotateCcw className=\"h-5 w-5 text-status-success-text\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold tabular-nums\">\n ${totalRefunded.toLocaleString()}\n </p>\n <p className=\"text-xs text-text-secondary\">Refunded</p>\n </div>\n </div>\n </GlassCard>\n </div>\n\n {/* Recent transactions preview */}\n <Card className=\"border-border-seam\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">Recent Transactions</CardTitle>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setActiveTab('transactions')}>\n View All\n </Button>\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {transactions.slice(0, 5).map((txn) => (\n <div\n key={txn.id}\n className=\"flex items-center justify-between rounded-lg border border-border-seam p-3 transition-shadow hover:shadow-pop\"\n >\n <div className=\"flex items-center gap-3\">\n {txnTypeIcon(txn.type)}\n <div>\n <p className=\"text-sm font-medium\">{txn.description}</p>\n <p className=\"text-xs text-text-secondary\">\n {txn.counterparty} - {txn.createdAt}\n </p>\n </div>\n </div>\n <div className=\"text-right\">\n <p\n className={`text-sm font-bold tabular-nums ${txn.type === 'refund' ? 'text-status-success-text' : ''}`}\n >\n {txn.type === 'refund' ? '+' : '-'}${txn.amount.toLocaleString()}\n </p>\n {statusBadge(txn.status)}\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Transactions Tab */}\n {activeTab === 'transactions' && (\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <Input\n placeholder=\"Search transactions...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {['all', 'completed', 'pending', 'failed'].map((status) => (\n <Button\n key={status}\n variant={txnStatusFilter === status ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setTxnStatusFilter(status)}\n >\n {status === 'all' ? 'All' : status.charAt(0).toUpperCase() + status.slice(1)}\n </Button>\n ))}\n </div>\n </div>\n\n <Card className=\"border-border-seam\">\n <CardContent className=\"pt-4\">\n {filteredTxns.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No transactions found\"\n description=\"No transactions match your current filters.\"\n />\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-seam text-left text-text-secondary\">\n <th className=\"p-3 font-medium\">Type</th>\n <th className=\"p-3 font-medium\">Description</th>\n <th className=\"p-3 font-medium\">Counterparty</th>\n <th className=\"p-3 font-medium\">Method</th>\n <th className=\"p-3 text-right font-medium\">Amount</th>\n <th className=\"p-3 text-right font-medium\">Fees</th>\n <th className=\"p-3 text-right font-medium\">Net</th>\n <th className=\"p-3 font-medium\">Status</th>\n <th className=\"p-3 font-medium\">Date</th>\n </tr>\n </thead>\n <tbody>\n {filteredTxns.map((txn) => (\n <tr\n key={txn.id}\n className=\"border-b border-border-seam transition-colors hover:bg-bg-sunken/50\"\n >\n <td className=\"p-3\">{txnTypeIcon(txn.type)}</td>\n <td className=\"p-3 font-medium\">{txn.description}</td>\n <td className=\"p-3\">{txn.counterparty}</td>\n <td className=\"p-3\">\n <Badge variant=\"outline\">{txn.method.replace('_', ' ')}</Badge>\n </td>\n <td\n className={`p-3 text-right font-medium tabular-nums ${txn.type === 'refund' ? 'text-status-success-text' : ''}`}\n >\n {txn.type === 'refund' ? '+' : '-'}${txn.amount.toLocaleString()}\n </td>\n <td className=\"p-3 text-right text-text-secondary tabular-nums\">\n ${txn.fees}\n </td>\n <td className=\"p-3 text-right tabular-nums\">\n ${txn.netAmount.toLocaleString()}\n </td>\n <td className=\"p-3\">{statusBadge(txn.status)}</td>\n <td className=\"p-3 text-text-secondary\">{txn.createdAt}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Payment Methods Tab */}\n {activeTab === 'methods' && (\n <div className=\"space-y-4\">\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {paymentMethods.map((method) => (\n <GlassCard\n key={method.id}\n treatment=\"glass\"\n glow={method.isDefault}\n className={`border-border-seam ${method.isDefault ? '' : ''}`}\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg border border-border-seam p-2 text-text-primary\">\n {methodIcon(method.type)}\n </div>\n <div>\n <p className=\"font-medium\">{method.name}</p>\n <p className=\"text-sm text-text-secondary\">{method.details}</p>\n </div>\n </div>\n {method.isDefault && <Badge>Default</Badge>}\n </div>\n\n <div className=\"mt-4 flex items-center gap-4 text-sm\">\n {method.isVerified ? (\n <span className=\"flex items-center gap-1 text-status-success-text\">\n <Shield className=\"h-4 w-4\" /> Verified\n </span>\n ) : (\n <span className=\"flex items-center gap-1 text-status-warning-text\">\n <Clock className=\"h-4 w-4\" /> Unverified\n </span>\n )}\n {method.lastUsed && (\n <span className=\"text-text-secondary\">Last used: {method.lastUsed}</span>\n )}\n </div>\n\n <div className=\"mt-4 flex gap-2\">\n {!method.isDefault && (\n <Button variant=\"outline\" size=\"sm\" className=\"flex-1\">\n Set Default\n </Button>\n )}\n <Button variant=\"outline\" size=\"sm\" className=\"flex-1\">\n Remove\n </Button>\n </div>\n </GlassCard>\n ))}\n\n {/* Add new method card */}\n <Card className=\"flex items-center justify-center border-dashed border-border-seam transition-shadow hover:shadow-pop\">\n <CardContent className=\"py-8 text-center\">\n <Plus className=\"mx-auto h-8 w-8 text-text-secondary\" />\n <p className=\"mt-2 text-sm font-medium\">Add Payment Method</p>\n <p className=\"text-xs text-text-secondary\">Add a new card, bank, or PayPal</p>\n </CardContent>\n </Card>\n </div>\n </div>\n )}\n\n {/* Invoices Tab */}\n {activeTab === 'invoices' && (\n <div className=\"space-y-4\">\n <Card className=\"border-border-seam\">\n <CardContent className=\"pt-4\">\n {invoices.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No invoices yet\"\n description=\"Invoices you create or receive will appear here.\"\n />\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-seam text-left text-text-secondary\">\n <th className=\"p-3 font-medium\">Invoice #</th>\n <th className=\"p-3 font-medium\">Description</th>\n <th className=\"p-3 font-medium\">Client</th>\n <th className=\"p-3 text-right font-medium\">Amount</th>\n <th className=\"p-3 font-medium\">Status</th>\n <th className=\"p-3 font-medium\">Due Date</th>\n <th className=\"p-3 text-right font-medium\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {invoices.map((inv) => {\n const invoiceStatusVariant: Record<\n string,\n 'default' | 'secondary' | 'destructive'\n > = {\n paid: 'default',\n pending: 'secondary',\n overdue: 'destructive',\n };\n return (\n <tr\n key={inv.id}\n className=\"border-b border-border-seam transition-colors hover:bg-bg-sunken/50\"\n >\n <td className=\"p-3 font-medium\">{inv.number}</td>\n <td className=\"p-3\">{inv.description}</td>\n <td className=\"p-3\">{inv.clientName}</td>\n <td className=\"p-3 text-right font-medium tabular-nums\">\n ${inv.amount.toLocaleString()}\n </td>\n <td className=\"p-3\">\n <Badge variant={invoiceStatusVariant[inv.status] ?? 'secondary'}>\n {inv.status}\n </Badge>\n </td>\n <td className=\"p-3 text-text-secondary\">{inv.dueDate}</td>\n <td className=\"p-3 text-right\">\n <div className=\"flex justify-end gap-1\">\n <Button variant=\"outline\" size=\"sm\" aria-label=\"View invoice\">\n <FileText className=\"h-3 w-3\" />\n </Button>\n <Button variant=\"outline\" size=\"sm\" aria-label=\"Download invoice\">\n <Download className=\"h-3 w-3\" />\n </Button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}