@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,444 @@
1
+ import { useProServiceWorldStore as e } from "../store/proserviceworldStore.js";
2
+ import { useMemo as t, useState as n } from "react";
3
+ import { Ban as r, CheckCircle2 as i, Clock as a, Download as o, Filter as s, Mail as c, MoreHorizontal as l, Plus as u, Search as d, Shield as f, Star as p, UserCheck as m, Users as h, XCircle as g } from "lucide-react";
4
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
5
+ import { Badge as y, Button as b, Card as x, CardContent as S, Input as C } from "@burdenoff/fe-libs/ui";
6
+ //#region src/proserviceworld/pages/AdminUsersPage.tsx
7
+ var w = {
8
+ client: {
9
+ label: "Client",
10
+ variant: "secondary"
11
+ },
12
+ provider: {
13
+ label: "Provider",
14
+ variant: "default"
15
+ },
16
+ admin: {
17
+ label: "Admin",
18
+ variant: "destructive"
19
+ },
20
+ team_member: {
21
+ label: "Team",
22
+ variant: "outline"
23
+ }
24
+ }, T = {
25
+ active: {
26
+ label: "Active",
27
+ icon: i,
28
+ color: "text-green-600"
29
+ },
30
+ suspended: {
31
+ label: "Suspended",
32
+ icon: r,
33
+ color: "text-orange-600"
34
+ },
35
+ pending: {
36
+ label: "Pending",
37
+ icon: a,
38
+ color: "text-yellow-600"
39
+ },
40
+ banned: {
41
+ label: "Banned",
42
+ icon: g,
43
+ color: "text-red-600"
44
+ }
45
+ };
46
+ function E() {
47
+ let { adminUsers: r } = e(), [a, E] = n(""), [D, O] = n("all"), [k, A] = n("all"), [j, M] = n(/* @__PURE__ */ new Set()), N = t(() => {
48
+ let e = [...r];
49
+ if (D !== "all" && (e = e.filter((e) => e.role === D)), k !== "all" && (e = e.filter((e) => e.status === k)), a.trim()) {
50
+ let t = a.toLowerCase();
51
+ e = e.filter((e) => e.name.toLowerCase().includes(t) || e.email.toLowerCase().includes(t));
52
+ }
53
+ return e;
54
+ }, [
55
+ r,
56
+ D,
57
+ k,
58
+ a
59
+ ]), P = r.length, F = r.filter((e) => e.status === "active").length, I = r.filter((e) => e.role === "provider").length, L = r.filter((e) => e.verified).length, R = (e) => {
60
+ let t = new Set(j);
61
+ t.has(e) ? t.delete(e) : t.add(e), M(t);
62
+ };
63
+ return /* @__PURE__ */ v("div", {
64
+ className: "space-y-6 p-6",
65
+ children: [
66
+ /* @__PURE__ */ v("div", {
67
+ className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
68
+ children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("h1", {
69
+ className: "text-2xl font-semibold",
70
+ children: "User Management"
71
+ }), /* @__PURE__ */ _("p", {
72
+ className: "text-sm text-muted-foreground",
73
+ children: "Admin panel to manage platform users, roles, and access."
74
+ })] }), /* @__PURE__ */ v("div", {
75
+ className: "flex gap-2",
76
+ children: [/* @__PURE__ */ v(b, {
77
+ variant: "outline",
78
+ size: "sm",
79
+ children: [/* @__PURE__ */ _(o, { className: "mr-2 h-4 w-4" }), " Export"]
80
+ }), /* @__PURE__ */ v(b, {
81
+ size: "sm",
82
+ children: [/* @__PURE__ */ _(u, { className: "mr-2 h-4 w-4" }), " Invite User"]
83
+ })]
84
+ })]
85
+ }),
86
+ /* @__PURE__ */ v("div", {
87
+ className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4",
88
+ children: [
89
+ /* @__PURE__ */ _(x, { children: /* @__PURE__ */ _(S, {
90
+ className: "pt-4",
91
+ children: /* @__PURE__ */ v("div", {
92
+ className: "flex items-center gap-3",
93
+ children: [/* @__PURE__ */ _("div", {
94
+ className: "rounded-lg bg-blue-100 p-2 dark:bg-blue-950",
95
+ children: /* @__PURE__ */ _(h, { className: "h-5 w-5 text-blue-600" })
96
+ }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
97
+ className: "text-2xl font-bold",
98
+ children: P
99
+ }), /* @__PURE__ */ _("p", {
100
+ className: "text-xs text-muted-foreground",
101
+ children: "Total Users"
102
+ })] })]
103
+ })
104
+ }) }),
105
+ /* @__PURE__ */ _(x, { children: /* @__PURE__ */ _(S, {
106
+ className: "pt-4",
107
+ children: /* @__PURE__ */ v("div", {
108
+ className: "flex items-center gap-3",
109
+ children: [/* @__PURE__ */ _("div", {
110
+ className: "rounded-lg bg-green-100 p-2 dark:bg-green-950",
111
+ children: /* @__PURE__ */ _(m, { className: "h-5 w-5 text-green-600" })
112
+ }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
113
+ className: "text-2xl font-bold",
114
+ children: F
115
+ }), /* @__PURE__ */ _("p", {
116
+ className: "text-xs text-muted-foreground",
117
+ children: "Active Users"
118
+ })] })]
119
+ })
120
+ }) }),
121
+ /* @__PURE__ */ _(x, { children: /* @__PURE__ */ _(S, {
122
+ className: "pt-4",
123
+ children: /* @__PURE__ */ v("div", {
124
+ className: "flex items-center gap-3",
125
+ children: [/* @__PURE__ */ _("div", {
126
+ className: "rounded-lg bg-purple-100 p-2 dark:bg-purple-950",
127
+ children: /* @__PURE__ */ _(f, { className: "h-5 w-5 text-purple-600" })
128
+ }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
129
+ className: "text-2xl font-bold",
130
+ children: I
131
+ }), /* @__PURE__ */ _("p", {
132
+ className: "text-xs text-muted-foreground",
133
+ children: "Providers"
134
+ })] })]
135
+ })
136
+ }) }),
137
+ /* @__PURE__ */ _(x, { children: /* @__PURE__ */ _(S, {
138
+ className: "pt-4",
139
+ children: /* @__PURE__ */ v("div", {
140
+ className: "flex items-center gap-3",
141
+ children: [/* @__PURE__ */ _("div", {
142
+ className: "rounded-lg bg-yellow-100 p-2 dark:bg-yellow-950",
143
+ children: /* @__PURE__ */ _(i, { className: "h-5 w-5 text-yellow-600" })
144
+ }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
145
+ className: "text-2xl font-bold",
146
+ children: L
147
+ }), /* @__PURE__ */ _("p", {
148
+ className: "text-xs text-muted-foreground",
149
+ children: "Verified"
150
+ })] })]
151
+ })
152
+ }) })
153
+ ]
154
+ }),
155
+ /* @__PURE__ */ v("div", {
156
+ className: "flex flex-col gap-4 sm:flex-row sm:items-center",
157
+ children: [/* @__PURE__ */ v("div", {
158
+ className: "relative flex-1",
159
+ children: [/* @__PURE__ */ _(d, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), /* @__PURE__ */ _(C, {
160
+ placeholder: "Search by name or email...",
161
+ value: a,
162
+ onChange: (e) => E(e.target.value),
163
+ className: "pl-10"
164
+ })]
165
+ }), /* @__PURE__ */ v("div", {
166
+ className: "flex items-center gap-2",
167
+ children: [
168
+ /* @__PURE__ */ _(s, { className: "h-4 w-4 text-muted-foreground" }),
169
+ /* @__PURE__ */ v("select", {
170
+ className: "rounded border bg-background px-2 py-1 text-sm",
171
+ value: D,
172
+ onChange: (e) => O(e.target.value),
173
+ children: [
174
+ /* @__PURE__ */ _("option", {
175
+ value: "all",
176
+ children: "All Roles"
177
+ }),
178
+ /* @__PURE__ */ _("option", {
179
+ value: "client",
180
+ children: "Client"
181
+ }),
182
+ /* @__PURE__ */ _("option", {
183
+ value: "provider",
184
+ children: "Provider"
185
+ }),
186
+ /* @__PURE__ */ _("option", {
187
+ value: "admin",
188
+ children: "Admin"
189
+ }),
190
+ /* @__PURE__ */ _("option", {
191
+ value: "team_member",
192
+ children: "Team Member"
193
+ })
194
+ ]
195
+ }),
196
+ /* @__PURE__ */ v("select", {
197
+ className: "rounded border bg-background px-2 py-1 text-sm",
198
+ value: k,
199
+ onChange: (e) => A(e.target.value),
200
+ children: [
201
+ /* @__PURE__ */ _("option", {
202
+ value: "all",
203
+ children: "All Status"
204
+ }),
205
+ /* @__PURE__ */ _("option", {
206
+ value: "active",
207
+ children: "Active"
208
+ }),
209
+ /* @__PURE__ */ _("option", {
210
+ value: "suspended",
211
+ children: "Suspended"
212
+ }),
213
+ /* @__PURE__ */ _("option", {
214
+ value: "pending",
215
+ children: "Pending"
216
+ }),
217
+ /* @__PURE__ */ _("option", {
218
+ value: "banned",
219
+ children: "Banned"
220
+ })
221
+ ]
222
+ })
223
+ ]
224
+ })]
225
+ }),
226
+ j.size > 0 && /* @__PURE__ */ v("div", {
227
+ className: "flex items-center gap-3 rounded-lg bg-primary/5 border border-primary/20 p-3",
228
+ children: [
229
+ /* @__PURE__ */ v("span", {
230
+ className: "text-sm font-medium",
231
+ children: [j.size, " user(s) selected"]
232
+ }),
233
+ /* @__PURE__ */ _(b, {
234
+ variant: "outline",
235
+ size: "sm",
236
+ children: "Activate"
237
+ }),
238
+ /* @__PURE__ */ _(b, {
239
+ variant: "outline",
240
+ size: "sm",
241
+ children: "Suspend"
242
+ }),
243
+ /* @__PURE__ */ _(b, {
244
+ variant: "destructive",
245
+ size: "sm",
246
+ children: "Ban"
247
+ })
248
+ ]
249
+ }),
250
+ /* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
251
+ className: "pt-4",
252
+ children: [/* @__PURE__ */ _("div", {
253
+ className: "overflow-x-auto",
254
+ children: /* @__PURE__ */ v("table", {
255
+ className: "w-full text-sm",
256
+ children: [/* @__PURE__ */ _("thead", { children: /* @__PURE__ */ v("tr", {
257
+ className: "border-b text-left text-muted-foreground",
258
+ children: [
259
+ /* @__PURE__ */ _("th", {
260
+ className: "p-3",
261
+ children: /* @__PURE__ */ _("input", {
262
+ type: "checkbox",
263
+ checked: j.size === N.length && N.length > 0,
264
+ onChange: () => {
265
+ j.size === N.length ? M(/* @__PURE__ */ new Set()) : M(new Set(N.map((e) => e.id)));
266
+ },
267
+ className: "rounded"
268
+ })
269
+ }),
270
+ /* @__PURE__ */ _("th", {
271
+ className: "p-3",
272
+ children: "User"
273
+ }),
274
+ /* @__PURE__ */ _("th", {
275
+ className: "p-3",
276
+ children: "Role"
277
+ }),
278
+ /* @__PURE__ */ _("th", {
279
+ className: "p-3",
280
+ children: "Status"
281
+ }),
282
+ /* @__PURE__ */ _("th", {
283
+ className: "p-3",
284
+ children: "Verified"
285
+ }),
286
+ /* @__PURE__ */ _("th", {
287
+ className: "p-3",
288
+ children: "Joined"
289
+ }),
290
+ /* @__PURE__ */ _("th", {
291
+ className: "p-3",
292
+ children: "Last Active"
293
+ }),
294
+ /* @__PURE__ */ _("th", {
295
+ className: "p-3 text-right",
296
+ children: "Bookings"
297
+ }),
298
+ /* @__PURE__ */ _("th", {
299
+ className: "p-3 text-right",
300
+ children: "Spent"
301
+ }),
302
+ /* @__PURE__ */ _("th", {
303
+ className: "p-3",
304
+ children: "Rating"
305
+ }),
306
+ /* @__PURE__ */ _("th", {
307
+ className: "p-3 text-right",
308
+ children: "Actions"
309
+ })
310
+ ]
311
+ }) }), /* @__PURE__ */ _("tbody", { children: N.length === 0 ? /* @__PURE__ */ _("tr", { children: /* @__PURE__ */ _("td", {
312
+ colSpan: 11,
313
+ className: "p-8 text-center text-muted-foreground",
314
+ children: "No users match your filters."
315
+ }) }) : N.map((e) => {
316
+ let t = T[e.status], n = t.icon;
317
+ return /* @__PURE__ */ v("tr", {
318
+ className: "border-b hover:bg-muted/50",
319
+ children: [
320
+ /* @__PURE__ */ _("td", {
321
+ className: "p-3",
322
+ children: /* @__PURE__ */ _("input", {
323
+ type: "checkbox",
324
+ checked: j.has(e.id),
325
+ onChange: () => R(e.id),
326
+ className: "rounded"
327
+ })
328
+ }),
329
+ /* @__PURE__ */ _("td", {
330
+ className: "p-3",
331
+ children: /* @__PURE__ */ v("div", {
332
+ className: "flex items-center gap-3",
333
+ children: [/* @__PURE__ */ _("div", {
334
+ className: "flex h-8 w-8 items-center justify-center rounded-full bg-primary/10 text-xs font-semibold text-primary",
335
+ children: e.name.charAt(0)
336
+ }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
337
+ className: "font-medium",
338
+ children: e.name
339
+ }), /* @__PURE__ */ _("p", {
340
+ className: "text-xs text-muted-foreground",
341
+ children: e.email
342
+ })] })]
343
+ })
344
+ }),
345
+ /* @__PURE__ */ _("td", {
346
+ className: "p-3",
347
+ children: /* @__PURE__ */ _(y, {
348
+ variant: w[e.role].variant,
349
+ children: w[e.role].label
350
+ })
351
+ }),
352
+ /* @__PURE__ */ _("td", {
353
+ className: "p-3",
354
+ children: /* @__PURE__ */ v("div", {
355
+ className: "flex items-center gap-1",
356
+ children: [/* @__PURE__ */ _(n, { className: `h-4 w-4 ${t.color}` }), /* @__PURE__ */ _("span", {
357
+ className: `text-xs font-medium ${t.color}`,
358
+ children: t.label
359
+ })]
360
+ })
361
+ }),
362
+ /* @__PURE__ */ _("td", {
363
+ className: "p-3",
364
+ children: e.verified ? /* @__PURE__ */ _(i, { className: "h-4 w-4 text-green-500" }) : /* @__PURE__ */ _(g, { className: "h-4 w-4 text-gray-300" })
365
+ }),
366
+ /* @__PURE__ */ _("td", {
367
+ className: "p-3 text-muted-foreground",
368
+ children: e.joinedDate
369
+ }),
370
+ /* @__PURE__ */ _("td", {
371
+ className: "p-3 text-muted-foreground",
372
+ children: e.lastActive
373
+ }),
374
+ /* @__PURE__ */ _("td", {
375
+ className: "p-3 text-right",
376
+ children: e.bookingsCount
377
+ }),
378
+ /* @__PURE__ */ _("td", {
379
+ className: "p-3 text-right",
380
+ children: e.totalSpent > 0 ? `$${e.totalSpent.toLocaleString()}` : "-"
381
+ }),
382
+ /* @__PURE__ */ _("td", {
383
+ className: "p-3",
384
+ children: e.rating ? /* @__PURE__ */ v("div", {
385
+ className: "flex items-center gap-1",
386
+ children: [/* @__PURE__ */ _(p, { className: "h-3 w-3 fill-yellow-400 text-yellow-400" }), /* @__PURE__ */ _("span", {
387
+ className: "text-xs font-medium",
388
+ children: e.rating
389
+ })]
390
+ }) : /* @__PURE__ */ _("span", {
391
+ className: "text-xs text-muted-foreground",
392
+ children: "-"
393
+ })
394
+ }),
395
+ /* @__PURE__ */ _("td", {
396
+ className: "p-3 text-right",
397
+ children: /* @__PURE__ */ v("div", {
398
+ className: "flex justify-end gap-1",
399
+ children: [/* @__PURE__ */ _(b, {
400
+ variant: "outline",
401
+ size: "sm",
402
+ children: /* @__PURE__ */ _(c, { className: "h-3 w-3" })
403
+ }), /* @__PURE__ */ _(b, {
404
+ variant: "outline",
405
+ size: "sm",
406
+ children: /* @__PURE__ */ _(l, { className: "h-3 w-3" })
407
+ })]
408
+ })
409
+ })
410
+ ]
411
+ }, e.id);
412
+ }) })]
413
+ })
414
+ }), /* @__PURE__ */ v("div", {
415
+ className: "mt-4 flex items-center justify-between border-t pt-4 text-sm text-muted-foreground",
416
+ children: [/* @__PURE__ */ v("span", { children: [
417
+ "Showing ",
418
+ N.length,
419
+ " of ",
420
+ r.length,
421
+ " users"
422
+ ] }), /* @__PURE__ */ v("div", {
423
+ className: "flex gap-1",
424
+ children: [/* @__PURE__ */ _(b, {
425
+ variant: "outline",
426
+ size: "sm",
427
+ disabled: !0,
428
+ children: "Previous"
429
+ }), /* @__PURE__ */ _(b, {
430
+ variant: "outline",
431
+ size: "sm",
432
+ disabled: !0,
433
+ children: "Next"
434
+ })]
435
+ })]
436
+ })]
437
+ }) })
438
+ ]
439
+ });
440
+ }
441
+ //#endregion
442
+ export { E as AdminUsersPage };
443
+
444
+ //# sourceMappingURL=AdminUsersPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminUsersPage.js","names":[],"sources":["../../../src/proserviceworld/pages/AdminUsersPage.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 Search,\n Filter,\n Users,\n UserCheck,\n UserX,\n Shield,\n Star,\n CheckCircle2,\n XCircle,\n Clock,\n Ban,\n MoreHorizontal,\n Download,\n Plus,\n Mail,\n Calendar,\n} from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\nimport type { AdminUserRole, AdminUserStatus } from '../types';\n\nconst roleConfig: Record<\n AdminUserRole,\n { label: string; variant: 'default' | 'secondary' | 'outline' | 'destructive' }\n> = {\n client: { label: 'Client', variant: 'secondary' },\n provider: { label: 'Provider', variant: 'default' },\n admin: { label: 'Admin', variant: 'destructive' },\n team_member: { label: 'Team', variant: 'outline' },\n};\n\nconst statusConfig: Record<\n AdminUserStatus,\n { label: string; icon: typeof CheckCircle2; color: string }\n> = {\n active: { label: 'Active', icon: CheckCircle2, color: 'text-green-600' },\n suspended: { label: 'Suspended', icon: Ban, color: 'text-orange-600' },\n pending: { label: 'Pending', icon: Clock, color: 'text-yellow-600' },\n banned: { label: 'Banned', icon: XCircle, color: 'text-red-600' },\n};\n\nexport function AdminUsersPage() {\n const { adminUsers } = useProServiceWorldStore();\n const [searchQuery, setSearchQuery] = useState('');\n const [roleFilter, setRoleFilter] = useState<AdminUserRole | 'all'>('all');\n const [statusFilter, setStatusFilter] = useState<AdminUserStatus | 'all'>('all');\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n\n const filtered = useMemo(() => {\n let result = [...adminUsers];\n if (roleFilter !== 'all') result = result.filter((u) => u.role === roleFilter);\n if (statusFilter !== 'all') result = result.filter((u) => u.status === statusFilter);\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase();\n result = result.filter(\n (u) => u.name.toLowerCase().includes(q) || u.email.toLowerCase().includes(q)\n );\n }\n return result;\n }, [adminUsers, roleFilter, statusFilter, searchQuery]);\n\n // Stats\n const totalUsers = adminUsers.length;\n const activeUsers = adminUsers.filter((u) => u.status === 'active').length;\n const providers = adminUsers.filter((u) => u.role === 'provider').length;\n const verifiedUsers = adminUsers.filter((u) => u.verified).length;\n\n const toggleSelect = (id: string) => {\n const next = new Set(selectedIds);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n setSelectedIds(next);\n };\n\n const toggleSelectAll = () => {\n if (selectedIds.size === filtered.length) setSelectedIds(new Set());\n else setSelectedIds(new Set(filtered.map((u) => u.id)));\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\">User Management</h1>\n <p className=\"text-sm text-muted-foreground\">\n Admin panel to manage platform users, roles, and access.\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Download className=\"mr-2 h-4 w-4\" /> Export\n </Button>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" /> Invite User\n </Button>\n </div>\n </div>\n\n {/* Stats */}\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-blue-100 p-2 dark:bg-blue-950\">\n <Users className=\"h-5 w-5 text-blue-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{totalUsers}</p>\n <p className=\"text-xs text-muted-foreground\">Total Users</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 <UserCheck className=\"h-5 w-5 text-green-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{activeUsers}</p>\n <p className=\"text-xs text-muted-foreground\">Active Users</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-purple-100 p-2 dark:bg-purple-950\">\n <Shield className=\"h-5 w-5 text-purple-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{providers}</p>\n <p className=\"text-xs text-muted-foreground\">Providers</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 <CheckCircle2 className=\"h-5 w-5 text-yellow-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{verifiedUsers}</p>\n <p className=\"text-xs text-muted-foreground\">Verified</p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Filters */}\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 by name or email...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <select\n className=\"rounded border bg-background px-2 py-1 text-sm\"\n value={roleFilter}\n onChange={(e) => setRoleFilter(e.target.value as AdminUserRole | 'all')}\n >\n <option value=\"all\">All Roles</option>\n <option value=\"client\">Client</option>\n <option value=\"provider\">Provider</option>\n <option value=\"admin\">Admin</option>\n <option value=\"team_member\">Team Member</option>\n </select>\n <select\n className=\"rounded border bg-background px-2 py-1 text-sm\"\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value as AdminUserStatus | 'all')}\n >\n <option value=\"all\">All Status</option>\n <option value=\"active\">Active</option>\n <option value=\"suspended\">Suspended</option>\n <option value=\"pending\">Pending</option>\n <option value=\"banned\">Banned</option>\n </select>\n </div>\n </div>\n\n {/* Bulk actions */}\n {selectedIds.size > 0 && (\n <div className=\"flex items-center gap-3 rounded-lg bg-primary/5 border border-primary/20 p-3\">\n <span className=\"text-sm font-medium\">{selectedIds.size} user(s) selected</span>\n <Button variant=\"outline\" size=\"sm\">\n Activate\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n Suspend\n </Button>\n <Button variant=\"destructive\" size=\"sm\">\n Ban\n </Button>\n </div>\n )}\n\n {/* User table */}\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\">\n <input\n type=\"checkbox\"\n checked={selectedIds.size === filtered.length && filtered.length > 0}\n onChange={toggleSelectAll}\n className=\"rounded\"\n />\n </th>\n <th className=\"p-3\">User</th>\n <th className=\"p-3\">Role</th>\n <th className=\"p-3\">Status</th>\n <th className=\"p-3\">Verified</th>\n <th className=\"p-3\">Joined</th>\n <th className=\"p-3\">Last Active</th>\n <th className=\"p-3 text-right\">Bookings</th>\n <th className=\"p-3 text-right\">Spent</th>\n <th className=\"p-3\">Rating</th>\n <th className=\"p-3 text-right\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {filtered.length === 0 ? (\n <tr>\n <td colSpan={11} className=\"p-8 text-center text-muted-foreground\">\n No users match your filters.\n </td>\n </tr>\n ) : (\n filtered.map((user) => {\n const sCfg = statusConfig[user.status];\n const StatusIcon = sCfg.icon;\n return (\n <tr key={user.id} className=\"border-b hover:bg-muted/50\">\n <td className=\"p-3\">\n <input\n type=\"checkbox\"\n checked={selectedIds.has(user.id)}\n onChange={() => toggleSelect(user.id)}\n className=\"rounded\"\n />\n </td>\n <td className=\"p-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-primary/10 text-xs font-semibold text-primary\">\n {user.name.charAt(0)}\n </div>\n <div>\n <p className=\"font-medium\">{user.name}</p>\n <p className=\"text-xs text-muted-foreground\">{user.email}</p>\n </div>\n </div>\n </td>\n <td className=\"p-3\">\n <Badge variant={roleConfig[user.role].variant}>\n {roleConfig[user.role].label}\n </Badge>\n </td>\n <td className=\"p-3\">\n <div className=\"flex items-center gap-1\">\n <StatusIcon className={`h-4 w-4 ${sCfg.color}`} />\n <span className={`text-xs font-medium ${sCfg.color}`}>\n {sCfg.label}\n </span>\n </div>\n </td>\n <td className=\"p-3\">\n {user.verified ? (\n <CheckCircle2 className=\"h-4 w-4 text-green-500\" />\n ) : (\n <XCircle className=\"h-4 w-4 text-gray-300\" />\n )}\n </td>\n <td className=\"p-3 text-muted-foreground\">{user.joinedDate}</td>\n <td className=\"p-3 text-muted-foreground\">{user.lastActive}</td>\n <td className=\"p-3 text-right\">{user.bookingsCount}</td>\n <td className=\"p-3 text-right\">\n {user.totalSpent > 0 ? `$${user.totalSpent.toLocaleString()}` : '-'}\n </td>\n <td className=\"p-3\">\n {user.rating ? (\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n <span className=\"text-xs font-medium\">{user.rating}</span>\n </div>\n ) : (\n <span className=\"text-xs text-muted-foreground\">-</span>\n )}\n </td>\n <td className=\"p-3 text-right\">\n <div className=\"flex justify-end gap-1\">\n <Button variant=\"outline\" size=\"sm\">\n <Mail className=\"h-3 w-3\" />\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <MoreHorizontal className=\"h-3 w-3\" />\n </Button>\n </div>\n </td>\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {/* Pagination hint */}\n <div className=\"mt-4 flex items-center justify-between border-t pt-4 text-sm text-muted-foreground\">\n <span>\n Showing {filtered.length} of {adminUsers.length} users\n </span>\n <div className=\"flex gap-1\">\n <Button variant=\"outline\" size=\"sm\" disabled>\n Previous\n </Button>\n <Button variant=\"outline\" size=\"sm\" disabled>\n Next\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function AnalyticsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=AnalyticsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPage.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/pages/AnalyticsPage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,aAAa,4CA2Z5B"}