@burdenoff/microfe-proserviceworld 2026.624.1 → 2026.626.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 (31) hide show
  1. package/dist/proserviceworld/pages/AdminReportsPage.js +396 -329
  2. package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -1
  3. package/dist/proserviceworld/pages/AdminUsersPage.js +261 -237
  4. package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -1
  5. package/dist/proserviceworld/pages/AnalyticsPage.js +373 -315
  6. package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
  7. package/dist/proserviceworld/pages/BookingsPage.js +221 -200
  8. package/dist/proserviceworld/pages/BookingsPage.js.map +1 -1
  9. package/dist/proserviceworld/pages/DashboardPage.js +474 -405
  10. package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
  11. package/dist/proserviceworld/pages/DocumentsPage.js +386 -317
  12. package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
  13. package/dist/proserviceworld/pages/MessagesPage.js +201 -192
  14. package/dist/proserviceworld/pages/MessagesPage.js.map +1 -1
  15. package/dist/proserviceworld/pages/PaymentsPage.js +398 -340
  16. package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -1
  17. package/dist/proserviceworld/pages/ProjectsPage.js +543 -463
  18. package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -1
  19. package/dist/proserviceworld/pages/ProviderDetailPage.js +420 -346
  20. package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -1
  21. package/dist/proserviceworld/pages/ProvidersPage.js +249 -244
  22. package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -1
  23. package/dist/proserviceworld/pages/ReviewsPage.js +93 -76
  24. package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -1
  25. package/dist/proserviceworld/pages/ServiceDetailsPage.js +377 -309
  26. package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -1
  27. package/dist/proserviceworld/pages/ServicesPage.js +116 -109
  28. package/dist/proserviceworld/pages/ServicesPage.js.map +1 -1
  29. package/dist/proserviceworld/pages/VerificationPage.js +264 -251
  30. package/dist/proserviceworld/pages/VerificationPage.js.map +1 -1
  31. package/package.json +2 -2
@@ -2,10 +2,10 @@ import { useProServiceWorldStore as e } from "../store/proserviceworldStore.js";
2
2
  import { useState as t } from "react";
3
3
  import { Activity as n, ArrowDownRight as r, ArrowUpRight as i, BarChart3 as a, Calendar as o, DollarSign as s, Download as c, Globe as l, Minus as u, TrendingDown as d, TrendingUp as f, Users as p } from "lucide-react";
4
4
  import { jsx as m, jsxs as h } from "react/jsx-runtime";
5
- import { Badge as g, Button as _, Card as v, CardContent as y, CardHeader as b, CardTitle as x } from "@burdenoff/fe-libs/ui";
5
+ import { AuroraBackground as g, Badge as _, Button as v, Card as y, CardContent as b, CardHeader as x, CardTitle as S, EmphasisPanel as C, GlassCard as w, GradientText as T, NextSteps as E, PagePurpose as D } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/proserviceworld/pages/AnalyticsPage.tsx
7
- function S() {
8
- let { analyticsMetrics: S, revenueData: C, clientData: w, servicePerformance: T, geographicData: E } = e(), [D, O] = t("overview"), [k, A] = t("6m"), j = [
7
+ function O() {
8
+ let { analyticsMetrics: O, revenueData: k, clientData: A, servicePerformance: j, geographicData: M } = e(), [N, P] = t("overview"), [F, I] = t("6m"), L = [
9
9
  {
10
10
  key: "overview",
11
11
  label: "Overview",
@@ -31,84 +31,121 @@ function S() {
31
31
  label: "Performance",
32
32
  icon: f
33
33
  }
34
- ], M = (e) => e === "positive" ? /* @__PURE__ */ m(f, { className: "h-4 w-4 text-green-500" }) : e === "negative" ? /* @__PURE__ */ m(d, { className: "h-4 w-4 text-red-500" }) : /* @__PURE__ */ m(u, { className: "h-4 w-4 text-gray-400" }), N = Math.max(...C.map((e) => e.value)), P = Math.max(...w.map((e) => e.value)), F = Math.max(...T.map((e) => e.value));
34
+ ], R = (e) => e === "positive" ? /* @__PURE__ */ m(f, { className: "h-4 w-4 text-status-success-text" }) : e === "negative" ? /* @__PURE__ */ m(d, { className: "h-4 w-4 text-status-error-text" }) : /* @__PURE__ */ m(u, { className: "h-4 w-4 text-text-muted" }), z = Math.max(...k.map((e) => e.value)), B = Math.max(...A.map((e) => e.value)), V = Math.max(...j.map((e) => e.value));
35
35
  return /* @__PURE__ */ h("div", {
36
- className: "space-y-6 p-6",
36
+ className: "space-y-6 p-6 bg-bg-canvas min-h-screen",
37
37
  children: [
38
38
  /* @__PURE__ */ h("div", {
39
- className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
40
- children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h1", {
41
- className: "text-2xl font-semibold",
42
- children: "Analytics"
43
- }), /* @__PURE__ */ m("p", {
44
- className: "text-sm text-text-secondary",
45
- children: "Insights and performance metrics for your professional services."
46
- })] }), /* @__PURE__ */ h("div", {
47
- className: "flex items-center gap-2",
48
- children: [/* @__PURE__ */ m("div", {
49
- className: "flex rounded border",
50
- children: [
51
- "1m",
52
- "3m",
53
- "6m",
54
- "1y"
55
- ].map((e) => /* @__PURE__ */ m("button", {
56
- onClick: () => A(e),
57
- className: `px-3 py-1 text-xs font-medium ${k === e ? "bg-action-primary-bg text-action-primary-text" : "text-text-secondary hover:bg-bg-sunken/50"}`,
58
- children: e.toUpperCase()
59
- }, e))
60
- }), /* @__PURE__ */ h(_, {
61
- variant: "outline",
62
- size: "sm",
63
- children: [/* @__PURE__ */ m(c, { className: "mr-2 h-4 w-4" }), " Export"]
39
+ className: "relative overflow-hidden rounded-card -mx-2 px-2 pt-1",
40
+ children: [/* @__PURE__ */ m(g, { intensity: "subtle" }), /* @__PURE__ */ h("div", {
41
+ className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
42
+ children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h1", {
43
+ className: "text-2xl font-semibold tracking-tight",
44
+ children: /* @__PURE__ */ m(T, { children: "Analytics" })
45
+ }), /* @__PURE__ */ m("p", {
46
+ className: "text-sm text-text-secondary",
47
+ children: "Insights and performance metrics for your professional services."
48
+ })] }), /* @__PURE__ */ h("div", {
49
+ className: "flex items-center gap-2",
50
+ children: [/* @__PURE__ */ m("div", {
51
+ className: "flex rounded border border-border-seam overflow-hidden",
52
+ children: [
53
+ "1m",
54
+ "3m",
55
+ "6m",
56
+ "1y"
57
+ ].map((e) => /* @__PURE__ */ m("button", {
58
+ onClick: () => I(e),
59
+ "aria-pressed": F === e,
60
+ className: `px-3 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus ${F === e ? "bg-action-primary-bg text-action-primary-text" : "text-text-secondary hover:bg-bg-sunken/50"}`,
61
+ children: e.toUpperCase()
62
+ }, e))
63
+ }), /* @__PURE__ */ h(v, {
64
+ variant: "outline",
65
+ size: "sm",
66
+ children: [/* @__PURE__ */ m(c, { className: "mr-2 h-4 w-4" }), " Export"]
67
+ })]
64
68
  })]
65
69
  })]
66
70
  }),
71
+ /* @__PURE__ */ m(D, {
72
+ icon: /* @__PURE__ */ m(a, { className: "h-4 w-4" }),
73
+ children: "Understand how your professional services are performing. Track revenue and client growth over time, see which services and regions drive the most demand, and export the numbers — so you can double down on what works and plan where to grow next."
74
+ }),
75
+ /* @__PURE__ */ m(E, {
76
+ storageKey: "proserviceworld-analytics",
77
+ steps: [
78
+ {
79
+ id: "revenue",
80
+ label: "Inspect revenue performance",
81
+ description: "Open the Revenue tab to see month-over-month growth.",
82
+ icon: /* @__PURE__ */ m(s, { className: "h-4 w-4" }),
83
+ onClick: () => P("revenue")
84
+ },
85
+ {
86
+ id: "services",
87
+ label: "Find your top services",
88
+ description: "See which services attract the most bookings.",
89
+ icon: /* @__PURE__ */ m(n, { className: "h-4 w-4" }),
90
+ onClick: () => P("services")
91
+ },
92
+ {
93
+ id: "clients",
94
+ label: "Track client acquisition",
95
+ description: "Review client growth and geographic reach.",
96
+ icon: /* @__PURE__ */ m(p, { className: "h-4 w-4" }),
97
+ onClick: () => P("clients")
98
+ }
99
+ ]
100
+ }),
67
101
  /* @__PURE__ */ m("div", {
68
- className: "flex gap-1 border-b",
69
- children: j.map(({ key: e, label: t, icon: n }) => /* @__PURE__ */ h("button", {
70
- onClick: () => O(e),
71
- className: `flex items-center gap-2 border-b-2 px-4 py-2 text-sm font-medium transition-colors ${D === e ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary"}`,
102
+ className: "flex flex-wrap gap-1 border-b border-border-seam",
103
+ children: L.map(({ key: e, label: t, icon: n }) => /* @__PURE__ */ h("button", {
104
+ onClick: () => P(e),
105
+ "aria-pressed": N === e,
106
+ className: `flex items-center gap-2 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 === e ? "border-action-primary-bg text-text-primary" : "border-transparent text-text-secondary hover:text-text-primary"}`,
72
107
  children: [/* @__PURE__ */ m(n, { className: "h-4 w-4" }), t]
73
108
  }, e))
74
109
  }),
75
110
  /* @__PURE__ */ m("div", {
76
111
  className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-5",
77
- children: S.map((e, t) => /* @__PURE__ */ m(v, { children: /* @__PURE__ */ h(y, {
78
- className: "pt-4",
112
+ children: O.map((e, t) => /* @__PURE__ */ h(w, {
113
+ treatment: t === 0 ? "glass" : "metric",
114
+ glow: t === 0,
115
+ className: "border-border-seam",
79
116
  children: [
80
117
  /* @__PURE__ */ h("div", {
81
118
  className: "flex items-center justify-between",
82
119
  children: [/* @__PURE__ */ m("p", {
83
120
  className: "text-xs font-medium text-text-secondary",
84
121
  children: e.label
85
- }), M(e.changeType)]
122
+ }), R(e.changeType)]
86
123
  }),
87
124
  /* @__PURE__ */ m("p", {
88
- className: "mt-1 text-2xl font-bold",
125
+ className: "mt-1 text-2xl font-bold tabular-nums",
89
126
  children: e.value
90
127
  }),
91
128
  /* @__PURE__ */ h("p", {
92
- className: `mt-0.5 text-xs ${e.changeType === "positive" ? "text-green-600" : e.changeType === "negative" ? "text-red-600" : "text-gray-500"}`,
129
+ className: `mt-0.5 text-xs ${e.changeType === "positive" ? "text-status-success-text" : e.changeType === "negative" ? "text-status-error-text" : "text-text-muted"}`,
93
130
  children: [e.change, " from last period"]
94
131
  })
95
132
  ]
96
- }) }, t))
133
+ }, t))
97
134
  }),
98
- D === "overview" && /* @__PURE__ */ h("div", {
135
+ N === "overview" && /* @__PURE__ */ h("div", {
99
136
  className: "grid gap-6 lg:grid-cols-2",
100
- children: [/* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ h("div", {
101
- className: "flex items-center justify-between",
102
- children: [/* @__PURE__ */ m(x, {
103
- className: "text-base",
137
+ children: [/* @__PURE__ */ h(C, { children: [/* @__PURE__ */ h("div", {
138
+ className: "flex items-center justify-between mb-4",
139
+ children: [/* @__PURE__ */ m("h2", {
140
+ className: "text-base font-semibold tracking-tight",
104
141
  children: "Revenue Trend"
105
- }), /* @__PURE__ */ m(g, {
142
+ }), /* @__PURE__ */ m(_, {
106
143
  variant: "secondary",
107
144
  children: "Last 6 months"
108
145
  })]
109
- }) }), /* @__PURE__ */ m(y, {
146
+ }), /* @__PURE__ */ m("div", {
110
147
  className: "space-y-3",
111
- children: C.map((e) => /* @__PURE__ */ h("div", {
148
+ children: k.map((e) => /* @__PURE__ */ h("div", {
112
149
  className: "flex items-center gap-3",
113
150
  children: [
114
151
  /* @__PURE__ */ m("span", {
@@ -118,15 +155,15 @@ function S() {
118
155
  /* @__PURE__ */ h("div", {
119
156
  className: "relative flex-1 h-6 bg-bg-sunken rounded overflow-hidden",
120
157
  children: [e.prev !== void 0 && /* @__PURE__ */ m("div", {
121
- className: "absolute h-6 bg-muted-foreground/10 rounded",
122
- style: { width: `${e.prev / N * 100}%` }
158
+ className: "absolute h-6 bg-text-muted/15 rounded",
159
+ style: { width: `${e.prev / z * 100}%` }
123
160
  }), /* @__PURE__ */ m("div", {
124
- className: "relative h-6 bg-action-primary-bg rounded",
125
- style: { width: `${e.value / N * 100}%` }
161
+ className: "relative h-6 bg-action-primary-bg rounded shadow-[var(--shadow-glow)]",
162
+ style: { width: `${e.value / z * 100}%` }
126
163
  })]
127
164
  }),
128
165
  /* @__PURE__ */ h("span", {
129
- className: "w-20 text-right text-xs font-medium",
166
+ className: "w-20 text-right text-xs font-medium tabular-nums",
130
167
  children: [
131
168
  "$",
132
169
  (e.value / 1e3).toFixed(1),
@@ -135,299 +172,320 @@ function S() {
135
172
  })
136
173
  ]
137
174
  }, e.name))
138
- })] }), /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ h("div", {
139
- className: "flex items-center justify-between",
140
- children: [/* @__PURE__ */ m(x, {
141
- className: "text-base",
142
- children: "Client Growth"
143
- }), /* @__PURE__ */ m(g, {
144
- variant: "secondary",
145
- children: "Monthly"
146
- })]
147
- }) }), /* @__PURE__ */ m(y, {
148
- className: "space-y-3",
149
- children: w.map((e) => /* @__PURE__ */ h("div", {
150
- className: "flex items-center gap-3",
151
- children: [
152
- /* @__PURE__ */ m("span", {
153
- className: "w-10 text-xs text-text-secondary",
154
- children: e.name
155
- }),
156
- /* @__PURE__ */ m("div", {
157
- className: "flex-1 h-6 bg-bg-sunken rounded overflow-hidden",
158
- children: /* @__PURE__ */ m("div", {
159
- className: "h-6 bg-blue-500 rounded",
160
- style: { width: `${e.value / P * 100}%` }
175
+ })] }), /* @__PURE__ */ h(y, {
176
+ className: "border-border-seam",
177
+ children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ h("div", {
178
+ className: "flex items-center justify-between",
179
+ children: [/* @__PURE__ */ m(S, {
180
+ className: "text-base",
181
+ children: "Client Growth"
182
+ }), /* @__PURE__ */ m(_, {
183
+ variant: "secondary",
184
+ children: "Monthly"
185
+ })]
186
+ }) }), /* @__PURE__ */ m(b, {
187
+ className: "space-y-3",
188
+ children: A.map((e) => /* @__PURE__ */ h("div", {
189
+ className: "flex items-center gap-3",
190
+ children: [
191
+ /* @__PURE__ */ m("span", {
192
+ className: "w-10 text-xs text-text-secondary",
193
+ children: e.name
194
+ }),
195
+ /* @__PURE__ */ m("div", {
196
+ className: "flex-1 h-6 bg-bg-sunken rounded overflow-hidden",
197
+ children: /* @__PURE__ */ m("div", {
198
+ className: "h-6 bg-accent-blue rounded",
199
+ style: { width: `${e.value / B * 100}%` }
200
+ })
201
+ }),
202
+ /* @__PURE__ */ m("span", {
203
+ className: "w-12 text-right text-xs font-medium tabular-nums",
204
+ children: e.value
161
205
  })
162
- }),
163
- /* @__PURE__ */ m("span", {
164
- className: "w-12 text-right text-xs font-medium",
165
- children: e.value
166
- })
167
- ]
168
- }, e.name))
169
- })] })]
206
+ ]
207
+ }, e.name))
208
+ })]
209
+ })]
170
210
  }),
171
- D === "revenue" && /* @__PURE__ */ m("div", {
211
+ N === "revenue" && /* @__PURE__ */ m("div", {
172
212
  className: "space-y-6",
173
- children: /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ m(x, {
174
- className: "text-base",
175
- children: "Revenue Breakdown"
176
- }) }), /* @__PURE__ */ m(y, { children: /* @__PURE__ */ m("div", {
177
- className: "space-y-4",
178
- children: C.map((e) => {
179
- let t = e.prev ? ((e.value - e.prev) / e.prev * 100).toFixed(1) : "0", n = e.prev ? e.value >= e.prev : !0;
180
- return /* @__PURE__ */ h("div", {
181
- className: "flex items-center justify-between rounded-lg border p-4",
182
- children: [/* @__PURE__ */ h("div", {
183
- className: "flex items-center gap-4",
184
- children: [/* @__PURE__ */ m("div", {
185
- className: "flex h-10 w-10 items-center justify-center rounded-lg bg-action-primary-bg/10",
186
- children: /* @__PURE__ */ m(o, { className: "h-5 w-5 text-primary" })
187
- }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("p", {
188
- className: "font-medium",
189
- children: [e.name, " 2025"]
190
- }), /* @__PURE__ */ h("p", {
191
- className: "text-sm text-text-secondary",
192
- children: [
193
- "Previous: $",
194
- ((e.prev ?? 0) / 1e3).toFixed(1),
195
- "k"
196
- ]
197
- })] })]
198
- }), /* @__PURE__ */ h("div", {
199
- className: "text-right",
200
- children: [/* @__PURE__ */ h("p", {
201
- className: "text-lg font-bold",
202
- children: [
203
- "$",
204
- (e.value / 1e3).toFixed(1),
205
- "k"
206
- ]
207
- }), /* @__PURE__ */ h("p", {
208
- className: `flex items-center gap-1 text-xs ${n ? "text-green-600" : "text-red-600"}`,
209
- children: [
210
- m(n ? i : r, { className: "h-3 w-3" }),
211
- t,
212
- "%"
213
- ]
213
+ children: /* @__PURE__ */ h(y, {
214
+ className: "border-border-seam",
215
+ children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ m(S, {
216
+ className: "text-base",
217
+ children: "Revenue Breakdown"
218
+ }) }), /* @__PURE__ */ m(b, { children: /* @__PURE__ */ m("div", {
219
+ className: "space-y-4",
220
+ children: k.map((e) => {
221
+ let t = e.prev ? ((e.value - e.prev) / e.prev * 100).toFixed(1) : "0", n = e.prev ? e.value >= e.prev : !0;
222
+ return /* @__PURE__ */ h("div", {
223
+ className: "flex items-center justify-between rounded-lg border border-border-seam p-4 transition-shadow hover:shadow-pop",
224
+ children: [/* @__PURE__ */ h("div", {
225
+ className: "flex items-center gap-4",
226
+ children: [/* @__PURE__ */ m("div", {
227
+ className: "flex h-10 w-10 items-center justify-center rounded-lg bg-accent-soft",
228
+ children: /* @__PURE__ */ m(o, { className: "h-5 w-5 text-text-primary" })
229
+ }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("p", {
230
+ className: "font-medium",
231
+ children: [e.name, " 2025"]
232
+ }), /* @__PURE__ */ h("p", {
233
+ className: "text-sm text-text-secondary tabular-nums",
234
+ children: [
235
+ "Previous: $",
236
+ ((e.prev ?? 0) / 1e3).toFixed(1),
237
+ "k"
238
+ ]
239
+ })] })]
240
+ }), /* @__PURE__ */ h("div", {
241
+ className: "text-right",
242
+ children: [/* @__PURE__ */ h("p", {
243
+ className: "text-lg font-bold tabular-nums",
244
+ children: [
245
+ "$",
246
+ (e.value / 1e3).toFixed(1),
247
+ "k"
248
+ ]
249
+ }), /* @__PURE__ */ h("p", {
250
+ className: `flex items-center justify-end gap-1 text-xs tabular-nums ${n ? "text-status-success-text" : "text-status-error-text"}`,
251
+ children: [
252
+ m(n ? i : r, { className: "h-3 w-3" }),
253
+ t,
254
+ "%"
255
+ ]
256
+ })]
214
257
  })]
215
- })]
216
- }, e.name);
217
- })
218
- }) })] })
258
+ }, e.name);
259
+ })
260
+ }) })]
261
+ })
219
262
  }),
220
- D === "clients" && /* @__PURE__ */ h("div", {
263
+ N === "clients" && /* @__PURE__ */ h("div", {
221
264
  className: "space-y-6",
222
- children: [/* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ m(x, {
223
- className: "text-base",
224
- children: "Client Acquisition"
225
- }) }), /* @__PURE__ */ m(y, {
226
- className: "space-y-3",
227
- children: w.map((e, t) => {
228
- let n = t > 0 ? w[t - 1]?.value ?? 0 : 0, r = n > 0 ? ((e.value - n) / n * 100).toFixed(0) : "N/A";
229
- return /* @__PURE__ */ h("div", {
230
- className: "flex items-center gap-4 rounded-lg border p-3",
231
- children: [/* @__PURE__ */ h("div", {
232
- className: "flex-1",
265
+ children: [/* @__PURE__ */ h(y, {
266
+ className: "border-border-seam",
267
+ children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ m(S, {
268
+ className: "text-base",
269
+ children: "Client Acquisition"
270
+ }) }), /* @__PURE__ */ m(b, {
271
+ className: "space-y-3",
272
+ children: A.map((e, t) => {
273
+ let n = t > 0 ? A[t - 1]?.value ?? 0 : 0, r = n > 0 ? ((e.value - n) / n * 100).toFixed(0) : "N/A";
274
+ return /* @__PURE__ */ h("div", {
275
+ className: "flex items-center gap-4 rounded-lg border border-border-seam p-3",
233
276
  children: [/* @__PURE__ */ h("div", {
234
- className: "flex items-center justify-between",
235
- children: [/* @__PURE__ */ m("span", {
236
- className: "font-medium",
237
- children: e.name
238
- }), /* @__PURE__ */ h("span", {
239
- className: "text-lg font-bold",
240
- children: [e.value, " clients"]
277
+ className: "flex-1",
278
+ children: [/* @__PURE__ */ h("div", {
279
+ className: "flex items-center justify-between",
280
+ children: [/* @__PURE__ */ m("span", {
281
+ className: "font-medium",
282
+ children: e.name
283
+ }), /* @__PURE__ */ h("span", {
284
+ className: "text-lg font-bold tabular-nums",
285
+ children: [e.value, " clients"]
286
+ })]
287
+ }), /* @__PURE__ */ m("div", {
288
+ className: "mt-2 h-2 overflow-hidden rounded-full bg-bg-sunken",
289
+ children: /* @__PURE__ */ m("div", {
290
+ className: "h-2 rounded-full bg-accent-blue",
291
+ style: { width: `${e.value / B * 100}%` }
292
+ })
241
293
  })]
242
- }), /* @__PURE__ */ m("div", {
243
- className: "mt-2 h-2 overflow-hidden rounded-full bg-bg-sunken",
244
- children: /* @__PURE__ */ m("div", {
245
- className: "h-2 rounded-full bg-blue-500",
246
- style: { width: `${e.value / P * 100}%` }
247
- })
294
+ }), /* @__PURE__ */ m(_, {
295
+ variant: "secondary",
296
+ className: "text-xs tabular-nums",
297
+ children: typeof r == "string" ? r : `+${r}%`
248
298
  })]
249
- }), /* @__PURE__ */ m(g, {
250
- variant: "secondary",
251
- className: "text-xs",
252
- children: typeof r == "string" ? r : `+${r}%`
253
- })]
254
- }, e.name);
255
- })
256
- })] }), /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ h("div", {
257
- className: "flex items-center gap-2",
258
- children: [/* @__PURE__ */ m(l, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ m(x, {
259
- className: "text-base",
260
- children: "Geographic Distribution"
299
+ }, e.name);
300
+ })
261
301
  })]
262
- }) }), /* @__PURE__ */ m(y, { children: /* @__PURE__ */ m("div", {
263
- className: "overflow-x-auto",
264
- children: /* @__PURE__ */ h("table", {
265
- className: "w-full text-sm",
266
- children: [/* @__PURE__ */ m("thead", { children: /* @__PURE__ */ h("tr", {
267
- className: "border-b text-left text-text-secondary",
268
- children: [
269
- /* @__PURE__ */ m("th", {
270
- className: "p-3",
271
- children: "Country"
272
- }),
273
- /* @__PURE__ */ m("th", {
274
- className: "p-3 text-right",
275
- children: "Clients"
276
- }),
277
- /* @__PURE__ */ m("th", {
278
- className: "p-3 text-right",
279
- children: "Revenue"
280
- }),
281
- /* @__PURE__ */ m("th", {
282
- className: "p-3",
283
- children: "Distribution"
284
- })
285
- ]
286
- }) }), /* @__PURE__ */ m("tbody", { children: E.map((e) => {
287
- let t = E.reduce((e, t) => e + t.clients, 0), n = Math.round(e.clients / t * 100);
288
- return /* @__PURE__ */ h("tr", {
289
- className: "border-b hover:bg-bg-sunken/50",
302
+ }), /* @__PURE__ */ h(y, {
303
+ className: "border-border-seam",
304
+ children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ h("div", {
305
+ className: "flex items-center gap-2",
306
+ children: [/* @__PURE__ */ m(l, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ m(S, {
307
+ className: "text-base",
308
+ children: "Geographic Distribution"
309
+ })]
310
+ }) }), /* @__PURE__ */ m(b, { children: /* @__PURE__ */ m("div", {
311
+ className: "overflow-x-auto",
312
+ children: /* @__PURE__ */ h("table", {
313
+ className: "w-full text-sm",
314
+ children: [/* @__PURE__ */ m("thead", { children: /* @__PURE__ */ h("tr", {
315
+ className: "border-b border-border-seam text-left text-text-secondary",
290
316
  children: [
291
- /* @__PURE__ */ m("td", {
317
+ /* @__PURE__ */ m("th", {
292
318
  className: "p-3 font-medium",
293
- children: e.country
319
+ children: "Country"
294
320
  }),
295
- /* @__PURE__ */ m("td", {
296
- className: "p-3 text-right",
297
- children: e.clients
321
+ /* @__PURE__ */ m("th", {
322
+ className: "p-3 text-right font-medium",
323
+ children: "Clients"
298
324
  }),
299
- /* @__PURE__ */ h("td", {
300
- className: "p-3 text-right",
301
- children: [
302
- "$",
303
- (e.revenue / 1e3).toFixed(0),
304
- "k"
305
- ]
325
+ /* @__PURE__ */ m("th", {
326
+ className: "p-3 text-right font-medium",
327
+ children: "Revenue"
306
328
  }),
307
- /* @__PURE__ */ m("td", {
308
- className: "p-3",
309
- children: /* @__PURE__ */ h("div", {
310
- className: "flex items-center gap-2",
311
- children: [/* @__PURE__ */ m("div", {
312
- className: "h-2 flex-1 overflow-hidden rounded-full bg-bg-sunken",
313
- children: /* @__PURE__ */ m("div", {
314
- className: "h-2 rounded-full bg-action-primary-bg",
315
- style: { width: `${n}%` }
316
- })
317
- }), /* @__PURE__ */ h("span", {
318
- className: "w-10 text-right text-xs text-text-secondary",
319
- children: [n, "%"]
320
- })]
321
- })
329
+ /* @__PURE__ */ m("th", {
330
+ className: "p-3 font-medium",
331
+ children: "Distribution"
322
332
  })
323
333
  ]
324
- }, e.country);
325
- }) })]
326
- })
327
- }) })] })]
334
+ }) }), /* @__PURE__ */ m("tbody", { children: M.map((e) => {
335
+ let t = M.reduce((e, t) => e + t.clients, 0), n = Math.round(e.clients / t * 100);
336
+ return /* @__PURE__ */ h("tr", {
337
+ className: "border-b border-border-seam transition-colors hover:bg-bg-sunken/50",
338
+ children: [
339
+ /* @__PURE__ */ m("td", {
340
+ className: "p-3 font-medium",
341
+ children: e.country
342
+ }),
343
+ /* @__PURE__ */ m("td", {
344
+ className: "p-3 text-right tabular-nums",
345
+ children: e.clients
346
+ }),
347
+ /* @__PURE__ */ h("td", {
348
+ className: "p-3 text-right tabular-nums",
349
+ children: [
350
+ "$",
351
+ (e.revenue / 1e3).toFixed(0),
352
+ "k"
353
+ ]
354
+ }),
355
+ /* @__PURE__ */ m("td", {
356
+ className: "p-3",
357
+ children: /* @__PURE__ */ h("div", {
358
+ className: "flex items-center gap-2",
359
+ children: [/* @__PURE__ */ m("div", {
360
+ className: "h-2 flex-1 overflow-hidden rounded-full bg-bg-sunken",
361
+ children: /* @__PURE__ */ m("div", {
362
+ className: "h-2 rounded-full bg-action-primary-bg",
363
+ style: { width: `${n}%` }
364
+ })
365
+ }), /* @__PURE__ */ h("span", {
366
+ className: "w-10 text-right text-xs text-text-secondary tabular-nums",
367
+ children: [n, "%"]
368
+ })]
369
+ })
370
+ })
371
+ ]
372
+ }, e.country);
373
+ }) })]
374
+ })
375
+ }) })]
376
+ })]
328
377
  }),
329
- D === "services" && /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ m(x, {
330
- className: "text-base",
331
- children: "Service Performance (Total Bookings)"
332
- }) }), /* @__PURE__ */ m(y, {
333
- className: "space-y-3",
334
- children: [...T].sort((e, t) => t.value - e.value).map((e, t) => /* @__PURE__ */ h("div", {
335
- className: "flex items-center gap-4",
336
- children: [/* @__PURE__ */ h("span", {
337
- className: "w-6 text-sm font-medium text-text-secondary",
338
- children: ["#", t + 1]
339
- }), /* @__PURE__ */ h("div", {
340
- className: "flex-1",
341
- children: [/* @__PURE__ */ h("div", {
342
- className: "flex items-center justify-between",
343
- children: [/* @__PURE__ */ m("span", {
344
- className: "text-sm font-medium",
345
- children: e.name
346
- }), /* @__PURE__ */ m("span", {
347
- className: "text-sm font-bold",
348
- children: e.value
349
- })]
350
- }), /* @__PURE__ */ m("div", {
351
- className: "mt-1 h-3 overflow-hidden rounded-full bg-bg-sunken",
352
- children: /* @__PURE__ */ m("div", {
353
- className: "h-3 rounded-full bg-action-primary-bg transition-all",
354
- style: { width: `${e.value / F * 100}%` }
355
- })
356
- })]
357
- })]
358
- }, e.name))
359
- })] }),
360
- D === "performance" && /* @__PURE__ */ h("div", {
361
- className: "grid gap-6 lg:grid-cols-2",
362
- children: [/* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ m(x, {
378
+ N === "services" && /* @__PURE__ */ h(y, {
379
+ className: "border-border-seam",
380
+ children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ m(S, {
363
381
  className: "text-base",
364
- children: "Monthly Revenue vs Previous"
365
- }) }), /* @__PURE__ */ h(y, {
382
+ children: "Service Performance (Total Bookings)"
383
+ }) }), /* @__PURE__ */ m(b, {
366
384
  className: "space-y-3",
367
- children: [C.map((e) => /* @__PURE__ */ h("div", {
368
- className: "space-y-1",
369
- children: [/* @__PURE__ */ h("div", {
370
- className: "flex items-center justify-between text-xs",
371
- children: [/* @__PURE__ */ m("span", {
372
- className: "font-medium",
373
- children: e.name
374
- }), /* @__PURE__ */ h("span", {
375
- className: "text-text-secondary",
376
- children: [
377
- "$",
378
- (e.value / 1e3).toFixed(1),
379
- "k vs $",
380
- ((e.prev ?? 0) / 1e3).toFixed(1),
381
- "k"
382
- ]
383
- })]
385
+ children: [...j].sort((e, t) => t.value - e.value).map((e, t) => /* @__PURE__ */ h("div", {
386
+ className: "flex items-center gap-4",
387
+ children: [/* @__PURE__ */ h("span", {
388
+ className: "w-6 text-sm font-medium text-text-secondary tabular-nums",
389
+ children: ["#", t + 1]
384
390
  }), /* @__PURE__ */ h("div", {
385
- className: "flex gap-1",
386
- children: [/* @__PURE__ */ m("div", {
387
- className: "h-4 rounded bg-action-primary-bg/30",
388
- style: { width: `${(e.prev ?? 0) / N * 100}%` }
391
+ className: "flex-1",
392
+ children: [/* @__PURE__ */ h("div", {
393
+ className: "flex items-center justify-between",
394
+ children: [/* @__PURE__ */ m("span", {
395
+ className: "text-sm font-medium",
396
+ children: e.name
397
+ }), /* @__PURE__ */ m("span", {
398
+ className: "text-sm font-bold tabular-nums",
399
+ children: e.value
400
+ })]
389
401
  }), /* @__PURE__ */ m("div", {
390
- className: "h-4 rounded bg-action-primary-bg",
391
- style: { width: `${e.value / N * 100 - (e.prev ?? 0) / N * 100}%` }
402
+ className: "mt-1 h-3 overflow-hidden rounded-full bg-bg-sunken",
403
+ children: /* @__PURE__ */ m("div", {
404
+ className: "h-3 rounded-full bg-action-primary-bg transition-all",
405
+ style: { width: `${e.value / V * 100}%` }
406
+ })
392
407
  })]
393
408
  })]
394
- }, e.name)), /* @__PURE__ */ h("div", {
395
- className: "mt-4 flex items-center gap-4 text-xs",
396
- children: [/* @__PURE__ */ h("span", {
397
- className: "flex items-center gap-1",
398
- children: [/* @__PURE__ */ m("div", { className: "h-3 w-3 rounded bg-action-primary-bg/30" }), " Previous"]
399
- }), /* @__PURE__ */ h("span", {
400
- className: "flex items-center gap-1",
401
- children: [/* @__PURE__ */ m("div", { className: "h-3 w-3 rounded bg-action-primary-bg" }), " Current"]
409
+ }, e.name))
410
+ })]
411
+ }),
412
+ N === "performance" && /* @__PURE__ */ h("div", {
413
+ className: "grid gap-6 lg:grid-cols-2",
414
+ children: [/* @__PURE__ */ h(y, {
415
+ className: "border-border-seam",
416
+ children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ m(S, {
417
+ className: "text-base",
418
+ children: "Monthly Revenue vs Previous"
419
+ }) }), /* @__PURE__ */ h(b, {
420
+ className: "space-y-3",
421
+ children: [k.map((e) => /* @__PURE__ */ h("div", {
422
+ className: "space-y-1",
423
+ children: [/* @__PURE__ */ h("div", {
424
+ className: "flex items-center justify-between text-xs",
425
+ children: [/* @__PURE__ */ m("span", {
426
+ className: "font-medium",
427
+ children: e.name
428
+ }), /* @__PURE__ */ h("span", {
429
+ className: "text-text-secondary tabular-nums",
430
+ children: [
431
+ "$",
432
+ (e.value / 1e3).toFixed(1),
433
+ "k vs $",
434
+ ((e.prev ?? 0) / 1e3).toFixed(1),
435
+ "k"
436
+ ]
437
+ })]
438
+ }), /* @__PURE__ */ h("div", {
439
+ className: "flex gap-1",
440
+ children: [/* @__PURE__ */ m("div", {
441
+ className: "h-4 rounded bg-action-primary-bg/30",
442
+ style: { width: `${(e.prev ?? 0) / z * 100}%` }
443
+ }), /* @__PURE__ */ m("div", {
444
+ className: "h-4 rounded bg-action-primary-bg",
445
+ style: { width: `${e.value / z * 100 - (e.prev ?? 0) / z * 100}%` }
446
+ })]
447
+ })]
448
+ }, e.name)), /* @__PURE__ */ h("div", {
449
+ className: "mt-4 flex items-center gap-4 text-xs",
450
+ children: [/* @__PURE__ */ h("span", {
451
+ className: "flex items-center gap-1",
452
+ children: [/* @__PURE__ */ m("div", { className: "h-3 w-3 rounded bg-action-primary-bg/30" }), " Previous"]
453
+ }), /* @__PURE__ */ h("span", {
454
+ className: "flex items-center gap-1",
455
+ children: [/* @__PURE__ */ m("div", { className: "h-3 w-3 rounded bg-action-primary-bg" }), " Current"]
456
+ })]
402
457
  })]
403
458
  })]
404
- })] }), /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ m(x, {
405
- className: "text-base",
406
- children: "Top Performing Services"
407
- }) }), /* @__PURE__ */ m(y, { children: /* @__PURE__ */ m("div", {
408
- className: "space-y-3",
409
- children: [...T].sort((e, t) => t.value - e.value).slice(0, 5).map((e, t) => /* @__PURE__ */ h("div", {
410
- className: "flex items-center justify-between rounded-lg border p-3",
411
- children: [/* @__PURE__ */ h("div", {
412
- className: "flex items-center gap-3",
413
- children: [/* @__PURE__ */ m("div", {
414
- className: `flex h-8 w-8 items-center justify-center rounded-full ${t === 0 ? "bg-yellow-100 text-yellow-700" : t === 1 ? "bg-gray-100 text-gray-600" : t === 2 ? "bg-orange-100 text-orange-600" : "bg-bg-sunken text-text-secondary"} text-sm font-bold`,
415
- children: t + 1
416
- }), /* @__PURE__ */ m("span", {
417
- className: "font-medium text-sm",
418
- children: e.name
459
+ }), /* @__PURE__ */ h(y, {
460
+ className: "border-border-seam",
461
+ children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ m(S, {
462
+ className: "text-base",
463
+ children: "Top Performing Services"
464
+ }) }), /* @__PURE__ */ m(b, { children: /* @__PURE__ */ m("div", {
465
+ className: "space-y-3",
466
+ children: [...j].sort((e, t) => t.value - e.value).slice(0, 5).map((e, t) => /* @__PURE__ */ h("div", {
467
+ className: "flex items-center justify-between rounded-lg border border-border-seam p-3",
468
+ children: [/* @__PURE__ */ h("div", {
469
+ className: "flex items-center gap-3",
470
+ children: [/* @__PURE__ */ m("div", {
471
+ className: `flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold tabular-nums ${t === 0 ? "bg-status-warning-bg-subtle text-status-warning-text" : t === 1 ? "bg-bg-sunken text-text-secondary" : t === 2 ? "bg-accent-soft text-text-primary" : "bg-bg-sunken text-text-secondary"}`,
472
+ children: t + 1
473
+ }), /* @__PURE__ */ m("span", {
474
+ className: "font-medium text-sm",
475
+ children: e.name
476
+ })]
477
+ }), /* @__PURE__ */ h(_, {
478
+ variant: "secondary",
479
+ children: [e.value, " bookings"]
419
480
  })]
420
- }), /* @__PURE__ */ h(g, {
421
- variant: "secondary",
422
- children: [e.value, " bookings"]
423
- })]
424
- }, e.name))
425
- }) })] })]
481
+ }, e.name))
482
+ }) })]
483
+ })]
426
484
  })
427
485
  ]
428
486
  });
429
487
  }
430
488
  //#endregion
431
- export { S as AnalyticsPage };
489
+ export { O as AnalyticsPage };
432
490
 
433
491
  //# sourceMappingURL=AnalyticsPage.js.map