@burdenoff/microfe-proserviceworld 2026.509.101

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 (106) hide show
  1. package/README.md +12 -0
  2. package/dist/dev/main.d.ts +2 -0
  3. package/dist/dev/main.d.ts.map +1 -0
  4. package/dist/generated/global-operations.d.ts +2 -0
  5. package/dist/generated/global-operations.d.ts.map +1 -0
  6. package/dist/generated/global-types.d.ts +18199 -0
  7. package/dist/generated/global-types.d.ts.map +1 -0
  8. package/dist/generated/wspace-operations.d.ts +2 -0
  9. package/dist/generated/wspace-operations.d.ts.map +1 -0
  10. package/dist/generated/wspace-types.d.ts +43046 -0
  11. package/dist/generated/wspace-types.d.ts.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +5 -0
  15. package/dist/proserviceworld/ProServiceWorldRoot.d.ts +5 -0
  16. package/dist/proserviceworld/ProServiceWorldRoot.d.ts.map +1 -0
  17. package/dist/proserviceworld/ProServiceWorldRoot.js +151 -0
  18. package/dist/proserviceworld/ProServiceWorldRoot.js.map +1 -0
  19. package/dist/proserviceworld/ProServiceWorldRoutes.d.ts +2 -0
  20. package/dist/proserviceworld/ProServiceWorldRoutes.d.ts.map +1 -0
  21. package/dist/proserviceworld/ProServiceWorldRoutes.js +91 -0
  22. package/dist/proserviceworld/ProServiceWorldRoutes.js.map +1 -0
  23. package/dist/proserviceworld/index.d.ts +5 -0
  24. package/dist/proserviceworld/index.d.ts.map +1 -0
  25. package/dist/proserviceworld/index.js +3 -0
  26. package/dist/proserviceworld/pages/AdminReportsPage.d.ts +2 -0
  27. package/dist/proserviceworld/pages/AdminReportsPage.d.ts.map +1 -0
  28. package/dist/proserviceworld/pages/AdminReportsPage.js +512 -0
  29. package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -0
  30. package/dist/proserviceworld/pages/AdminUsersPage.d.ts +2 -0
  31. package/dist/proserviceworld/pages/AdminUsersPage.d.ts.map +1 -0
  32. package/dist/proserviceworld/pages/AdminUsersPage.js +444 -0
  33. package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -0
  34. package/dist/proserviceworld/pages/AnalyticsPage.d.ts +2 -0
  35. package/dist/proserviceworld/pages/AnalyticsPage.d.ts.map +1 -0
  36. package/dist/proserviceworld/pages/AnalyticsPage.js +433 -0
  37. package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -0
  38. package/dist/proserviceworld/pages/BookingsPage.d.ts +2 -0
  39. package/dist/proserviceworld/pages/BookingsPage.d.ts.map +1 -0
  40. package/dist/proserviceworld/pages/BookingsPage.js +425 -0
  41. package/dist/proserviceworld/pages/BookingsPage.js.map +1 -0
  42. package/dist/proserviceworld/pages/DashboardPage.d.ts +2 -0
  43. package/dist/proserviceworld/pages/DashboardPage.d.ts.map +1 -0
  44. package/dist/proserviceworld/pages/DashboardPage.js +583 -0
  45. package/dist/proserviceworld/pages/DashboardPage.js.map +1 -0
  46. package/dist/proserviceworld/pages/DocumentsPage.d.ts +2 -0
  47. package/dist/proserviceworld/pages/DocumentsPage.d.ts.map +1 -0
  48. package/dist/proserviceworld/pages/DocumentsPage.js +494 -0
  49. package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -0
  50. package/dist/proserviceworld/pages/MessagesPage.d.ts +2 -0
  51. package/dist/proserviceworld/pages/MessagesPage.d.ts.map +1 -0
  52. package/dist/proserviceworld/pages/MessagesPage.js +229 -0
  53. package/dist/proserviceworld/pages/MessagesPage.js.map +1 -0
  54. package/dist/proserviceworld/pages/PaymentsPage.d.ts +2 -0
  55. package/dist/proserviceworld/pages/PaymentsPage.d.ts.map +1 -0
  56. package/dist/proserviceworld/pages/PaymentsPage.js +479 -0
  57. package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -0
  58. package/dist/proserviceworld/pages/ProjectsPage.d.ts +2 -0
  59. package/dist/proserviceworld/pages/ProjectsPage.d.ts.map +1 -0
  60. package/dist/proserviceworld/pages/ProjectsPage.js +547 -0
  61. package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -0
  62. package/dist/proserviceworld/pages/ProviderDetailPage.d.ts +2 -0
  63. package/dist/proserviceworld/pages/ProviderDetailPage.d.ts.map +1 -0
  64. package/dist/proserviceworld/pages/ProviderDetailPage.js +464 -0
  65. package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -0
  66. package/dist/proserviceworld/pages/ProvidersPage.d.ts +2 -0
  67. package/dist/proserviceworld/pages/ProvidersPage.d.ts.map +1 -0
  68. package/dist/proserviceworld/pages/ProvidersPage.js +342 -0
  69. package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -0
  70. package/dist/proserviceworld/pages/ReviewsPage.d.ts +2 -0
  71. package/dist/proserviceworld/pages/ReviewsPage.d.ts.map +1 -0
  72. package/dist/proserviceworld/pages/ReviewsPage.js +339 -0
  73. package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -0
  74. package/dist/proserviceworld/pages/ServiceDetailsPage.d.ts +2 -0
  75. package/dist/proserviceworld/pages/ServiceDetailsPage.d.ts.map +1 -0
  76. package/dist/proserviceworld/pages/ServiceDetailsPage.js +563 -0
  77. package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -0
  78. package/dist/proserviceworld/pages/ServicesPage.d.ts +2 -0
  79. package/dist/proserviceworld/pages/ServicesPage.d.ts.map +1 -0
  80. package/dist/proserviceworld/pages/ServicesPage.js +337 -0
  81. package/dist/proserviceworld/pages/ServicesPage.js.map +1 -0
  82. package/dist/proserviceworld/pages/VerificationPage.d.ts +2 -0
  83. package/dist/proserviceworld/pages/VerificationPage.d.ts.map +1 -0
  84. package/dist/proserviceworld/pages/VerificationPage.js +357 -0
  85. package/dist/proserviceworld/pages/VerificationPage.js.map +1 -0
  86. package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts +6 -0
  87. package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts.map +1 -0
  88. package/dist/proserviceworld/providers/ProServiceWorldProvider.js +27 -0
  89. package/dist/proserviceworld/providers/ProServiceWorldProvider.js.map +1 -0
  90. package/dist/proserviceworld/store/proserviceworldStore.d.ts +32 -0
  91. package/dist/proserviceworld/store/proserviceworldStore.d.ts.map +1 -0
  92. package/dist/proserviceworld/store/proserviceworldStore.js +2490 -0
  93. package/dist/proserviceworld/store/proserviceworldStore.js.map +1 -0
  94. package/dist/proserviceworld/types/index.d.ts +338 -0
  95. package/dist/proserviceworld/types/index.d.ts.map +1 -0
  96. package/dist/proserviceworld/utils/cn.d.ts +4 -0
  97. package/dist/proserviceworld/utils/cn.d.ts.map +1 -0
  98. package/dist/proserviceworld/utils/i18n.d.ts +6 -0
  99. package/dist/proserviceworld/utils/i18n.d.ts.map +1 -0
  100. package/dist/proserviceworld/utils/i18n.js +15 -0
  101. package/dist/proserviceworld/utils/i18n.js.map +1 -0
  102. package/dist/proserviceworld/utils/navigation.d.ts +2 -0
  103. package/dist/proserviceworld/utils/navigation.d.ts.map +1 -0
  104. package/dist/proserviceworld/utils/navigation.js +8 -0
  105. package/dist/proserviceworld/utils/navigation.js.map +1 -0
  106. package/package.json +107 -0
@@ -0,0 +1,479 @@
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 { Badge as v, Button as y, Card as b, CardContent as x, CardHeader as S, CardTitle as C, Input as w } from "@burdenoff/fe-libs/ui";
6
+ //#region src/proserviceworld/pages/PaymentsPage.tsx
7
+ function T() {
8
+ let { transactions: T, paymentMethods: E, invoices: D } = e(), [O, k] = n("overview"), [A, j] = n(""), [M, N] = n("all"), P = T.filter((e) => e.type === "outgoing" && e.status === "completed").reduce((e, t) => e + t.amount, 0), F = T.filter((e) => e.status === "pending").reduce((e, t) => e + t.amount, 0), I = T.filter((e) => e.status === "completed").reduce((e, t) => e + t.fees, 0), L = T.filter((e) => e.type === "refund" && e.status === "completed").reduce((e, t) => e + t.amount, 0), R = t(() => {
9
+ let e = [...T];
10
+ if (M !== "all" && (e = e.filter((e) => e.status === M)), A.trim()) {
11
+ let t = A.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
+ T,
17
+ M,
18
+ A
19
+ ]), z = (e) => e === "outgoing" ? /* @__PURE__ */ g(i, { className: "h-4 w-4 text-red-500" }) : e === "refund" ? /* @__PURE__ */ g(f, { className: "h-4 w-4 text-green-500" }) : /* @__PURE__ */ g(r, { className: "h-4 w-4 text-blue-500" }), B = (e) => /* @__PURE__ */ g(v, {
20
+ variant: {
21
+ completed: "default",
22
+ pending: "secondary",
23
+ failed: "destructive",
24
+ cancelled: "outline"
25
+ }[e] ?? "secondary",
26
+ children: e
27
+ }), V = (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",
30
+ children: [
31
+ /* @__PURE__ */ _("div", {
32
+ className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
33
+ children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("h1", {
34
+ className: "text-2xl font-semibold",
35
+ children: "Payments"
36
+ }), /* @__PURE__ */ g("p", {
37
+ className: "text-sm text-muted-foreground",
38
+ children: "Track transactions, manage payment methods, and view invoices."
39
+ })] }), /* @__PURE__ */ _(y, {
40
+ size: "sm",
41
+ children: [/* @__PURE__ */ g(d, { className: "mr-2 h-4 w-4" }), " Make Payment"]
42
+ })]
43
+ }),
44
+ /* @__PURE__ */ g("div", {
45
+ className: "flex gap-1 border-b",
46
+ children: [
47
+ {
48
+ key: "overview",
49
+ label: "Overview"
50
+ },
51
+ {
52
+ key: "transactions",
53
+ label: "Transactions"
54
+ },
55
+ {
56
+ key: "methods",
57
+ label: "Payment Methods"
58
+ },
59
+ {
60
+ key: "invoices",
61
+ label: "Invoices"
62
+ }
63
+ ].map(({ key: e, label: t }) => /* @__PURE__ */ g("button", {
64
+ onClick: () => k(e),
65
+ className: `border-b-2 px-4 py-2 text-sm font-medium transition-colors ${O === e ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground"}`,
66
+ children: t
67
+ }, e))
68
+ }),
69
+ O === "overview" && /* @__PURE__ */ _("div", {
70
+ className: "space-y-6",
71
+ children: [/* @__PURE__ */ _("div", {
72
+ className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4",
73
+ children: [
74
+ /* @__PURE__ */ g(b, { children: /* @__PURE__ */ g(x, {
75
+ className: "pt-4",
76
+ children: /* @__PURE__ */ _("div", {
77
+ className: "flex items-center gap-3",
78
+ children: [/* @__PURE__ */ g("div", {
79
+ className: "rounded-lg bg-red-100 p-2 dark:bg-red-950",
80
+ children: /* @__PURE__ */ g(i, { className: "h-5 w-5 text-red-600" })
81
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("p", {
82
+ className: "text-2xl font-bold",
83
+ children: ["$", P.toLocaleString()]
84
+ }), /* @__PURE__ */ g("p", {
85
+ className: "text-xs text-muted-foreground",
86
+ children: "Total Spent"
87
+ })] })]
88
+ })
89
+ }) }),
90
+ /* @__PURE__ */ g(b, { children: /* @__PURE__ */ g(x, {
91
+ className: "pt-4",
92
+ children: /* @__PURE__ */ _("div", {
93
+ className: "flex items-center gap-3",
94
+ children: [/* @__PURE__ */ g("div", {
95
+ className: "rounded-lg bg-yellow-100 p-2 dark:bg-yellow-950",
96
+ children: /* @__PURE__ */ g(o, { className: "h-5 w-5 text-yellow-600" })
97
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("p", {
98
+ className: "text-2xl font-bold",
99
+ children: ["$", F.toLocaleString()]
100
+ }), /* @__PURE__ */ g("p", {
101
+ className: "text-xs text-muted-foreground",
102
+ children: "Pending"
103
+ })] })]
104
+ })
105
+ }) }),
106
+ /* @__PURE__ */ g(b, { children: /* @__PURE__ */ g(x, {
107
+ className: "pt-4",
108
+ children: /* @__PURE__ */ _("div", {
109
+ className: "flex items-center gap-3",
110
+ children: [/* @__PURE__ */ g("div", {
111
+ className: "rounded-lg bg-blue-100 p-2 dark:bg-blue-950",
112
+ children: /* @__PURE__ */ g(c, { className: "h-5 w-5 text-blue-600" })
113
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("p", {
114
+ className: "text-2xl font-bold",
115
+ children: ["$", I.toLocaleString()]
116
+ }), /* @__PURE__ */ g("p", {
117
+ className: "text-xs text-muted-foreground",
118
+ children: "Total Fees"
119
+ })] })]
120
+ })
121
+ }) }),
122
+ /* @__PURE__ */ g(b, { children: /* @__PURE__ */ g(x, {
123
+ className: "pt-4",
124
+ children: /* @__PURE__ */ _("div", {
125
+ className: "flex items-center gap-3",
126
+ children: [/* @__PURE__ */ g("div", {
127
+ className: "rounded-lg bg-green-100 p-2 dark:bg-green-950",
128
+ children: /* @__PURE__ */ g(f, { className: "h-5 w-5 text-green-600" })
129
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("p", {
130
+ className: "text-2xl font-bold",
131
+ children: ["$", L.toLocaleString()]
132
+ }), /* @__PURE__ */ g("p", {
133
+ className: "text-xs text-muted-foreground",
134
+ children: "Refunded"
135
+ })] })]
136
+ })
137
+ }) })
138
+ ]
139
+ }), /* @__PURE__ */ _(b, { children: [/* @__PURE__ */ g(S, { children: /* @__PURE__ */ _("div", {
140
+ className: "flex items-center justify-between",
141
+ children: [/* @__PURE__ */ g(C, {
142
+ className: "text-base",
143
+ children: "Recent Transactions"
144
+ }), /* @__PURE__ */ g(y, {
145
+ variant: "outline",
146
+ size: "sm",
147
+ onClick: () => k("transactions"),
148
+ children: "View All"
149
+ })]
150
+ }) }), /* @__PURE__ */ g(x, { children: /* @__PURE__ */ g("div", {
151
+ className: "space-y-3",
152
+ children: T.slice(0, 5).map((e) => /* @__PURE__ */ _("div", {
153
+ className: "flex items-center justify-between rounded-lg border p-3",
154
+ children: [/* @__PURE__ */ _("div", {
155
+ className: "flex items-center gap-3",
156
+ children: [z(e.type), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
157
+ className: "text-sm font-medium",
158
+ children: e.description
159
+ }), /* @__PURE__ */ _("p", {
160
+ className: "text-xs text-muted-foreground",
161
+ children: [
162
+ e.counterparty,
163
+ " - ",
164
+ e.createdAt
165
+ ]
166
+ })] })]
167
+ }), /* @__PURE__ */ _("div", {
168
+ className: "text-right",
169
+ children: [/* @__PURE__ */ _("p", {
170
+ className: `text-sm font-bold ${e.type === "refund" ? "text-green-600" : ""}`,
171
+ children: [
172
+ e.type === "refund" ? "+" : "-",
173
+ "$",
174
+ e.amount.toLocaleString()
175
+ ]
176
+ }), B(e.status)]
177
+ })]
178
+ }, e.id))
179
+ }) })] })]
180
+ }),
181
+ O === "transactions" && /* @__PURE__ */ _("div", {
182
+ className: "space-y-4",
183
+ children: [/* @__PURE__ */ _("div", {
184
+ className: "flex flex-col gap-4 sm:flex-row sm:items-center",
185
+ children: [/* @__PURE__ */ _("div", {
186
+ className: "relative flex-1",
187
+ children: [/* @__PURE__ */ g(p, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), /* @__PURE__ */ g(w, {
188
+ placeholder: "Search transactions...",
189
+ value: A,
190
+ onChange: (e) => j(e.target.value),
191
+ className: "pl-10"
192
+ })]
193
+ }), /* @__PURE__ */ g("div", {
194
+ className: "flex gap-2",
195
+ children: [
196
+ "all",
197
+ "completed",
198
+ "pending",
199
+ "failed"
200
+ ].map((e) => /* @__PURE__ */ g(y, {
201
+ variant: M === e ? "default" : "outline",
202
+ size: "sm",
203
+ onClick: () => N(e),
204
+ children: e === "all" ? "All" : e.charAt(0).toUpperCase() + e.slice(1)
205
+ }, e))
206
+ })]
207
+ }), /* @__PURE__ */ g(b, { children: /* @__PURE__ */ g(x, {
208
+ className: "pt-4",
209
+ children: /* @__PURE__ */ g("div", {
210
+ className: "overflow-x-auto",
211
+ children: /* @__PURE__ */ _("table", {
212
+ className: "w-full text-sm",
213
+ children: [/* @__PURE__ */ g("thead", { children: /* @__PURE__ */ _("tr", {
214
+ className: "border-b text-left text-muted-foreground",
215
+ children: [
216
+ /* @__PURE__ */ g("th", {
217
+ className: "p-3",
218
+ children: "Type"
219
+ }),
220
+ /* @__PURE__ */ g("th", {
221
+ className: "p-3",
222
+ children: "Description"
223
+ }),
224
+ /* @__PURE__ */ g("th", {
225
+ className: "p-3",
226
+ children: "Counterparty"
227
+ }),
228
+ /* @__PURE__ */ g("th", {
229
+ className: "p-3",
230
+ children: "Method"
231
+ }),
232
+ /* @__PURE__ */ g("th", {
233
+ className: "p-3 text-right",
234
+ children: "Amount"
235
+ }),
236
+ /* @__PURE__ */ g("th", {
237
+ className: "p-3 text-right",
238
+ children: "Fees"
239
+ }),
240
+ /* @__PURE__ */ g("th", {
241
+ className: "p-3 text-right",
242
+ children: "Net"
243
+ }),
244
+ /* @__PURE__ */ g("th", {
245
+ className: "p-3",
246
+ children: "Status"
247
+ }),
248
+ /* @__PURE__ */ g("th", {
249
+ className: "p-3",
250
+ children: "Date"
251
+ })
252
+ ]
253
+ }) }), /* @__PURE__ */ g("tbody", { children: R.map((e) => /* @__PURE__ */ _("tr", {
254
+ className: "border-b hover:bg-muted/50",
255
+ children: [
256
+ /* @__PURE__ */ g("td", {
257
+ className: "p-3",
258
+ children: z(e.type)
259
+ }),
260
+ /* @__PURE__ */ g("td", {
261
+ className: "p-3 font-medium",
262
+ children: e.description
263
+ }),
264
+ /* @__PURE__ */ g("td", {
265
+ className: "p-3",
266
+ children: e.counterparty
267
+ }),
268
+ /* @__PURE__ */ g("td", {
269
+ className: "p-3",
270
+ children: /* @__PURE__ */ g(v, {
271
+ variant: "outline",
272
+ children: e.method.replace("_", " ")
273
+ })
274
+ }),
275
+ /* @__PURE__ */ _("td", {
276
+ className: `p-3 text-right font-medium ${e.type === "refund" ? "text-green-600" : ""}`,
277
+ children: [
278
+ e.type === "refund" ? "+" : "-",
279
+ "$",
280
+ e.amount.toLocaleString()
281
+ ]
282
+ }),
283
+ /* @__PURE__ */ _("td", {
284
+ className: "p-3 text-right text-muted-foreground",
285
+ children: ["$", e.fees]
286
+ }),
287
+ /* @__PURE__ */ _("td", {
288
+ className: "p-3 text-right",
289
+ children: ["$", e.netAmount.toLocaleString()]
290
+ }),
291
+ /* @__PURE__ */ g("td", {
292
+ className: "p-3",
293
+ children: B(e.status)
294
+ }),
295
+ /* @__PURE__ */ g("td", {
296
+ className: "p-3 text-muted-foreground",
297
+ children: e.createdAt
298
+ })
299
+ ]
300
+ }, e.id)) })]
301
+ })
302
+ })
303
+ }) })]
304
+ }),
305
+ O === "methods" && /* @__PURE__ */ g("div", {
306
+ className: "space-y-4",
307
+ children: /* @__PURE__ */ _("div", {
308
+ className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
309
+ children: [E.map((e) => /* @__PURE__ */ g(b, {
310
+ className: e.isDefault ? "border-primary" : "",
311
+ children: /* @__PURE__ */ _(x, {
312
+ className: "pt-6",
313
+ children: [
314
+ /* @__PURE__ */ _("div", {
315
+ className: "flex items-start justify-between",
316
+ children: [/* @__PURE__ */ _("div", {
317
+ className: "flex items-center gap-3",
318
+ children: [/* @__PURE__ */ g("div", {
319
+ className: "rounded-lg border p-2",
320
+ children: V(e.type)
321
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
322
+ className: "font-medium",
323
+ children: e.name
324
+ }), /* @__PURE__ */ g("p", {
325
+ className: "text-sm text-muted-foreground",
326
+ children: e.details
327
+ })] })]
328
+ }), e.isDefault && /* @__PURE__ */ g(v, { children: "Default" })]
329
+ }),
330
+ /* @__PURE__ */ _("div", {
331
+ className: "mt-4 flex items-center gap-4 text-sm",
332
+ children: [e.isVerified ? /* @__PURE__ */ _("span", {
333
+ className: "flex items-center gap-1 text-green-600",
334
+ children: [/* @__PURE__ */ g(m, { className: "h-4 w-4" }), " Verified"]
335
+ }) : /* @__PURE__ */ _("span", {
336
+ className: "flex items-center gap-1 text-yellow-600",
337
+ children: [/* @__PURE__ */ g(o, { className: "h-4 w-4" }), " Unverified"]
338
+ }), e.lastUsed && /* @__PURE__ */ _("span", {
339
+ className: "text-muted-foreground",
340
+ children: ["Last used: ", e.lastUsed]
341
+ })]
342
+ }),
343
+ /* @__PURE__ */ _("div", {
344
+ className: "mt-4 flex gap-2",
345
+ children: [!e.isDefault && /* @__PURE__ */ g(y, {
346
+ variant: "outline",
347
+ size: "sm",
348
+ className: "flex-1",
349
+ children: "Set Default"
350
+ }), /* @__PURE__ */ g(y, {
351
+ variant: "outline",
352
+ size: "sm",
353
+ className: "flex-1",
354
+ children: "Remove"
355
+ })]
356
+ })
357
+ ]
358
+ })
359
+ }, e.id)), /* @__PURE__ */ g(b, {
360
+ className: "flex items-center justify-center border-dashed",
361
+ children: /* @__PURE__ */ _(x, {
362
+ className: "py-8 text-center",
363
+ children: [
364
+ /* @__PURE__ */ g(d, { className: "mx-auto h-8 w-8 text-muted-foreground" }),
365
+ /* @__PURE__ */ g("p", {
366
+ className: "mt-2 text-sm font-medium",
367
+ children: "Add Payment Method"
368
+ }),
369
+ /* @__PURE__ */ g("p", {
370
+ className: "text-xs text-muted-foreground",
371
+ children: "Add a new card, bank, or PayPal"
372
+ })
373
+ ]
374
+ })
375
+ })]
376
+ })
377
+ }),
378
+ O === "invoices" && /* @__PURE__ */ g("div", {
379
+ className: "space-y-4",
380
+ children: /* @__PURE__ */ g(b, { children: /* @__PURE__ */ g(x, {
381
+ className: "pt-4",
382
+ children: /* @__PURE__ */ g("div", {
383
+ className: "overflow-x-auto",
384
+ children: /* @__PURE__ */ _("table", {
385
+ className: "w-full text-sm",
386
+ children: [/* @__PURE__ */ g("thead", { children: /* @__PURE__ */ _("tr", {
387
+ className: "border-b text-left text-muted-foreground",
388
+ children: [
389
+ /* @__PURE__ */ g("th", {
390
+ className: "p-3",
391
+ children: "Invoice #"
392
+ }),
393
+ /* @__PURE__ */ g("th", {
394
+ className: "p-3",
395
+ children: "Description"
396
+ }),
397
+ /* @__PURE__ */ g("th", {
398
+ className: "p-3",
399
+ children: "Client"
400
+ }),
401
+ /* @__PURE__ */ g("th", {
402
+ className: "p-3 text-right",
403
+ children: "Amount"
404
+ }),
405
+ /* @__PURE__ */ g("th", {
406
+ className: "p-3",
407
+ children: "Status"
408
+ }),
409
+ /* @__PURE__ */ g("th", {
410
+ className: "p-3",
411
+ children: "Due Date"
412
+ }),
413
+ /* @__PURE__ */ g("th", {
414
+ className: "p-3 text-right",
415
+ children: "Actions"
416
+ })
417
+ ]
418
+ }) }), /* @__PURE__ */ g("tbody", { children: D.map((e) => /* @__PURE__ */ _("tr", {
419
+ className: "border-b hover:bg-muted/50",
420
+ children: [
421
+ /* @__PURE__ */ g("td", {
422
+ className: "p-3 font-medium",
423
+ children: e.number
424
+ }),
425
+ /* @__PURE__ */ g("td", {
426
+ className: "p-3",
427
+ children: e.description
428
+ }),
429
+ /* @__PURE__ */ g("td", {
430
+ className: "p-3",
431
+ children: e.clientName
432
+ }),
433
+ /* @__PURE__ */ _("td", {
434
+ className: "p-3 text-right font-medium",
435
+ children: ["$", e.amount.toLocaleString()]
436
+ }),
437
+ /* @__PURE__ */ g("td", {
438
+ className: "p-3",
439
+ children: /* @__PURE__ */ g(v, {
440
+ variant: {
441
+ paid: "default",
442
+ pending: "secondary",
443
+ overdue: "destructive"
444
+ }[e.status] ?? "secondary",
445
+ children: e.status
446
+ })
447
+ }),
448
+ /* @__PURE__ */ g("td", {
449
+ className: "p-3 text-muted-foreground",
450
+ children: e.dueDate
451
+ }),
452
+ /* @__PURE__ */ g("td", {
453
+ className: "p-3 text-right",
454
+ children: /* @__PURE__ */ _("div", {
455
+ className: "flex justify-end gap-1",
456
+ children: [/* @__PURE__ */ g(y, {
457
+ variant: "outline",
458
+ size: "sm",
459
+ children: /* @__PURE__ */ g(u, { className: "h-3 w-3" })
460
+ }), /* @__PURE__ */ g(y, {
461
+ variant: "outline",
462
+ size: "sm",
463
+ children: /* @__PURE__ */ g(l, { className: "h-3 w-3" })
464
+ })]
465
+ })
466
+ })
467
+ ]
468
+ }, e.id)) })]
469
+ })
470
+ })
471
+ }) })
472
+ })
473
+ ]
474
+ });
475
+ }
476
+ //#endregion
477
+ export { T as PaymentsPage };
478
+
479
+ //# sourceMappingURL=PaymentsPage.js.map
@@ -0,0 +1 @@
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} from '@burdenoff/fe-libs/ui';\nimport {\n DollarSign,\n CreditCard,\n Building2,\n Wallet,\n ArrowUpRight,\n ArrowDownLeft,\n RotateCcw,\n CheckCircle2,\n Clock,\n XCircle,\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-red-500\" />;\n if (type === 'refund') return <RotateCcw className=\"h-4 w-4 text-green-500\" />;\n return <ArrowDownLeft className=\"h-4 w-4 text-blue-500\" />;\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\">\n {/* Header */}\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\">Payments</h1>\n <p className=\"text-sm text-muted-foreground\">\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\n {/* Tabs */}\n <div className=\"flex gap-1 border-b\">\n {tabs.map(({ key, label }) => (\n <button\n key={key}\n onClick={() => setActiveTab(key)}\n className={`border-b-2 px-4 py-2 text-sm font-medium transition-colors ${\n activeTab === key\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground'\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 <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-red-100 p-2 dark:bg-red-950\">\n <ArrowUpRight className=\"h-5 w-5 text-red-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">${totalSpent.toLocaleString()}</p>\n <p className=\"text-xs text-muted-foreground\">Total Spent</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-yellow-100 p-2 dark:bg-yellow-950\">\n <Clock className=\"h-5 w-5 text-yellow-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">${totalPending.toLocaleString()}</p>\n <p className=\"text-xs text-muted-foreground\">Pending</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-blue-100 p-2 dark:bg-blue-950\">\n <DollarSign className=\"h-5 w-5 text-blue-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">${totalFees.toLocaleString()}</p>\n <p className=\"text-xs text-muted-foreground\">Total Fees</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-green-100 p-2 dark:bg-green-950\">\n <RotateCcw className=\"h-5 w-5 text-green-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">${totalRefunded.toLocaleString()}</p>\n <p className=\"text-xs text-muted-foreground\">Refunded</p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Recent transactions preview */}\n <Card>\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 p-3\"\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-muted-foreground\">\n {txn.counterparty} - {txn.createdAt}\n </p>\n </div>\n </div>\n <div className=\"text-right\">\n <p\n className={`text-sm font-bold ${txn.type === 'refund' ? 'text-green-600' : ''}`}\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-muted-foreground\" />\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 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>\n <CardContent className=\"pt-4\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b text-left text-muted-foreground\">\n <th className=\"p-3\">Type</th>\n <th className=\"p-3\">Description</th>\n <th className=\"p-3\">Counterparty</th>\n <th className=\"p-3\">Method</th>\n <th className=\"p-3 text-right\">Amount</th>\n <th className=\"p-3 text-right\">Fees</th>\n <th className=\"p-3 text-right\">Net</th>\n <th className=\"p-3\">Status</th>\n <th className=\"p-3\">Date</th>\n </tr>\n </thead>\n <tbody>\n {filteredTxns.map((txn) => (\n <tr key={txn.id} className=\"border-b hover:bg-muted/50\">\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 ${txn.type === 'refund' ? 'text-green-600' : ''}`}\n >\n {txn.type === 'refund' ? '+' : '-'}${txn.amount.toLocaleString()}\n </td>\n <td className=\"p-3 text-right text-muted-foreground\">${txn.fees}</td>\n <td className=\"p-3 text-right\">${txn.netAmount.toLocaleString()}</td>\n <td className=\"p-3\">{statusBadge(txn.status)}</td>\n <td className=\"p-3 text-muted-foreground\">{txn.createdAt}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\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 <Card key={method.id} className={method.isDefault ? 'border-primary' : ''}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg border p-2\">{methodIcon(method.type)}</div>\n <div>\n <p className=\"font-medium\">{method.name}</p>\n <p className=\"text-sm text-muted-foreground\">{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-green-600\">\n <Shield className=\"h-4 w-4\" /> Verified\n </span>\n ) : (\n <span className=\"flex items-center gap-1 text-yellow-600\">\n <Clock className=\"h-4 w-4\" /> Unverified\n </span>\n )}\n {method.lastUsed && (\n <span className=\"text-muted-foreground\">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 </CardContent>\n </Card>\n ))}\n\n {/* Add new method card */}\n <Card className=\"flex items-center justify-center border-dashed\">\n <CardContent className=\"py-8 text-center\">\n <Plus className=\"mx-auto h-8 w-8 text-muted-foreground\" />\n <p className=\"mt-2 text-sm font-medium\">Add Payment Method</p>\n <p className=\"text-xs text-muted-foreground\">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>\n <CardContent className=\"pt-4\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b text-left text-muted-foreground\">\n <th className=\"p-3\">Invoice #</th>\n <th className=\"p-3\">Description</th>\n <th className=\"p-3\">Client</th>\n <th className=\"p-3 text-right\">Amount</th>\n <th className=\"p-3\">Status</th>\n <th className=\"p-3\">Due Date</th>\n <th className=\"p-3 text-right\">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 key={inv.id} className=\"border-b hover:bg-muted/50\">\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\">\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-muted-foreground\">{inv.dueDate}</td>\n <td className=\"p-3 text-right\">\n <div className=\"flex justify-end gap-1\">\n <Button variant=\"outline\" size=\"sm\">\n <FileText className=\"h-3 w-3\" />\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <Download className=\"h-3 w-3\" />\n </Button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function ProjectsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=ProjectsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectsPage.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/pages/ProjectsPage.tsx"],"names":[],"mappings":"AA6DA,wBAAgB,YAAY,4CA4c3B"}