@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,18 +2,19 @@ import { useProServiceWorldStore as e } from "../store/proserviceworldStore.js";
2
2
  import { useState as t } from "react";
3
3
  import { ArrowLeft as n, BookOpen as r, Calendar as i, CheckCircle2 as a, ChevronDown as o, ChevronUp as s, ClipboardList as c, Clock as l, DollarSign as u, FileText as d, MessageSquare as f, Package as p, Shield as m, Star as h, Tag as g, User as _ } from "lucide-react";
4
4
  import { jsx as v, jsxs as y } from "react/jsx-runtime";
5
- import { Badge as b, Button as x, Card as S, CardContent as C, CardHeader as w, CardTitle as T } from "@burdenoff/fe-libs/ui";
5
+ import { Badge as b, Button as x, Card as S, CardContent as C, CardHeader as w, CardTitle as T, EmphasisPanel as E, GlassCard as D, IllustratedEmptyState as O, NextSteps as k, PagePurpose as A, ShowMore as j } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/proserviceworld/pages/ServiceDetailsPage.tsx
7
- function E() {
8
- let { services: E, providers: D } = e(), [O, k] = t(E[0]?.id ?? ""), [A, j] = t("packages"), [M, N] = t(null), [P, F] = t(!1), [I, L] = t(null), R = E.find((e) => e.id === O) ?? E[0], z = R ? D.find((e) => e.id === R.providerId) : null;
9
- if (!R) return /* @__PURE__ */ v("div", {
10
- className: "flex items-center justify-center p-12",
11
- children: /* @__PURE__ */ v("p", {
12
- className: "text-text-secondary",
13
- children: "No services available."
7
+ function M() {
8
+ let { services: M, providers: N } = e(), [P, F] = t(M[0]?.id ?? ""), [I, L] = t("packages"), [R, z] = t(null), [B, V] = t(!1), [H, U] = t(null), W = M.find((e) => e.id === P) ?? M[0], G = W ? N.find((e) => e.id === W.providerId) : null;
9
+ if (!W) return /* @__PURE__ */ v("div", {
10
+ className: "p-6 bg-bg-canvas min-h-screen",
11
+ children: /* @__PURE__ */ v(O, {
12
+ illustration: "empty-data",
13
+ title: "No services available",
14
+ description: "There are no services to display yet. Once services are published they will appear here with full package and provider details."
14
15
  })
15
16
  });
16
- let B = [
17
+ let K = [
17
18
  {
18
19
  key: "packages",
19
20
  label: "Packages",
@@ -34,9 +35,9 @@ function E() {
34
35
  label: "FAQ",
35
36
  icon: r
36
37
  }
37
- ], V = R.pricing.type === "hourly" ? `$${R.pricing.hourlyRate}/hr` : R.pricing.type === "fixed" ? `$${R.pricing.basePrice.toLocaleString()} fixed` : `From $${R.pricing.basePrice.toLocaleString()}`;
38
+ ], q = W.pricing.type === "hourly" ? `$${W.pricing.hourlyRate}/hr` : W.pricing.type === "fixed" ? `$${W.pricing.basePrice.toLocaleString()} fixed` : `From $${W.pricing.basePrice.toLocaleString()}`;
38
39
  return /* @__PURE__ */ y("div", {
39
- className: "space-y-6 p-6",
40
+ className: "space-y-6 p-6 bg-bg-canvas min-h-screen",
40
41
  children: [
41
42
  /* @__PURE__ */ y("div", {
42
43
  className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
@@ -46,7 +47,7 @@ function E() {
46
47
  /* @__PURE__ */ y(x, {
47
48
  variant: "outline",
48
49
  size: "sm",
49
- onClick: () => k(E[0]?.id ?? ""),
50
+ onClick: () => F(M[0]?.id ?? ""),
50
51
  children: [/* @__PURE__ */ v(n, { className: "mr-2 h-4 w-4" }), " Services"]
51
52
  }),
52
53
  /* @__PURE__ */ v("span", {
@@ -54,10 +55,11 @@ function E() {
54
55
  children: "/"
55
56
  }),
56
57
  /* @__PURE__ */ v("select", {
57
- className: "rounded border bg-bg-surface px-2 py-1 text-sm",
58
- value: O,
59
- onChange: (e) => k(e.target.value),
60
- children: E.map((e) => /* @__PURE__ */ v("option", {
58
+ "aria-label": "Select service",
59
+ className: "rounded border border-border-seam bg-bg-surface px-2 py-1 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
60
+ value: P,
61
+ onChange: (e) => F(e.target.value),
62
+ children: M.map((e) => /* @__PURE__ */ v("option", {
61
63
  value: e.id,
62
64
  children: e.title
63
65
  }, e.id))
@@ -65,17 +67,47 @@ function E() {
65
67
  ]
66
68
  }), /* @__PURE__ */ y(x, {
67
69
  size: "sm",
68
- onClick: () => F(!0),
70
+ onClick: () => V(!0),
69
71
  children: [/* @__PURE__ */ v(i, { className: "mr-2 h-4 w-4" }), " Book This Service"]
70
72
  })]
71
73
  }),
74
+ /* @__PURE__ */ v(A, {
75
+ icon: /* @__PURE__ */ v(p, { className: "h-4 w-4" }),
76
+ children: "Everything you need to decide on this service. Compare packages and pricing, see exactly what you will receive and what is required from you, read the FAQ, and review the provider behind it — then book the package that fits your project."
77
+ }),
78
+ /* @__PURE__ */ v(k, {
79
+ storageKey: "proserviceworld-service-details",
80
+ steps: [
81
+ {
82
+ id: "packages",
83
+ label: "Compare packages",
84
+ description: "Review tiers, features, and pricing to pick the right fit.",
85
+ icon: /* @__PURE__ */ v(p, { className: "h-4 w-4" }),
86
+ onClick: () => L("packages")
87
+ },
88
+ {
89
+ id: "requirements",
90
+ label: "Check what is required",
91
+ description: "See the deliverables and what the provider needs from you.",
92
+ icon: /* @__PURE__ */ v(c, { className: "h-4 w-4" }),
93
+ onClick: () => L("requirements")
94
+ },
95
+ {
96
+ id: "book",
97
+ label: "Book this service",
98
+ description: "Select a package and confirm your booking.",
99
+ icon: /* @__PURE__ */ v(i, { className: "h-4 w-4" }),
100
+ onClick: () => V(!0)
101
+ }
102
+ ]
103
+ }),
72
104
  /* @__PURE__ */ y("div", {
73
105
  className: "grid gap-6 lg:grid-cols-3",
74
106
  children: [/* @__PURE__ */ y("div", {
75
107
  className: "space-y-6 lg:col-span-2",
76
108
  children: [
77
- /* @__PURE__ */ v(S, { children: /* @__PURE__ */ y(C, {
78
- className: "pt-6",
109
+ /* @__PURE__ */ y(E, {
110
+ className: "relative overflow-hidden",
79
111
  children: [
80
112
  /* @__PURE__ */ y("div", {
81
113
  className: "flex flex-wrap items-start justify-between gap-4",
@@ -85,53 +117,53 @@ function E() {
85
117
  /* @__PURE__ */ y("div", {
86
118
  className: "flex items-center gap-2",
87
119
  children: [
88
- R.featured && /* @__PURE__ */ v(b, { children: "Featured" }),
120
+ W.featured && /* @__PURE__ */ v(b, { children: "Featured" }),
89
121
  /* @__PURE__ */ v(b, {
90
122
  variant: "secondary",
91
- children: R.category.replace(/_/g, " ")
123
+ children: W.category.replace(/_/g, " ")
92
124
  }),
93
125
  /* @__PURE__ */ v(b, {
94
126
  variant: "outline",
95
- children: R.subcategory
127
+ children: W.subcategory
96
128
  })
97
129
  ]
98
130
  }),
99
131
  /* @__PURE__ */ v("h1", {
100
- className: "text-2xl font-bold",
101
- children: R.title
132
+ className: "text-2xl font-bold tracking-tight",
133
+ children: W.title
102
134
  }),
103
135
  /* @__PURE__ */ v("p", {
104
136
  className: "max-w-2xl text-text-secondary",
105
- children: R.description
137
+ children: W.description
106
138
  })
107
139
  ]
108
140
  }), /* @__PURE__ */ y("div", {
109
141
  className: "text-right",
110
142
  children: [/* @__PURE__ */ v("p", {
111
- className: "text-2xl font-bold text-primary",
112
- children: V
143
+ className: "text-2xl font-bold text-accent-blue tabular-nums",
144
+ children: q
113
145
  }), /* @__PURE__ */ y("p", {
114
146
  className: "text-xs text-text-secondary",
115
- children: [R.pricing.type, " pricing"]
147
+ children: [W.pricing.type, " pricing"]
116
148
  })]
117
149
  })]
118
150
  }),
119
151
  /* @__PURE__ */ y("div", {
120
- className: "mt-6 flex flex-wrap gap-6 border-t pt-4",
152
+ className: "mt-6 flex flex-wrap gap-6 border-t border-border-seam pt-4",
121
153
  children: [
122
154
  /* @__PURE__ */ y("div", {
123
155
  className: "flex items-center gap-2",
124
156
  children: [
125
- /* @__PURE__ */ v(h, { className: "h-4 w-4 text-yellow-500" }),
157
+ /* @__PURE__ */ v(h, { className: "h-4 w-4 text-status-warning-text" }),
126
158
  /* @__PURE__ */ v("span", {
127
- className: "text-sm font-medium",
128
- children: R.rating
159
+ className: "text-sm font-medium tabular-nums",
160
+ children: W.rating
129
161
  }),
130
162
  /* @__PURE__ */ y("span", {
131
163
  className: "text-xs text-text-secondary",
132
164
  children: [
133
165
  "(",
134
- R.providerReviews,
166
+ W.providerReviews,
135
167
  " reviews)"
136
168
  ]
137
169
  })
@@ -140,58 +172,61 @@ function E() {
140
172
  /* @__PURE__ */ y("div", {
141
173
  className: "flex items-center gap-2",
142
174
  children: [/* @__PURE__ */ v(l, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ y("span", {
143
- className: "text-sm",
144
- children: [R.duration.typical, " days typical"]
175
+ className: "text-sm tabular-nums",
176
+ children: [W.duration.typical, " days typical"]
145
177
  })]
146
178
  }),
147
179
  /* @__PURE__ */ y("div", {
148
180
  className: "flex items-center gap-2",
149
- children: [/* @__PURE__ */ v(a, { className: "h-4 w-4 text-green-500" }), /* @__PURE__ */ y("span", {
150
- className: "text-sm",
151
- children: [R.totalBookings, " bookings"]
181
+ children: [/* @__PURE__ */ v(a, { className: "h-4 w-4 text-status-success-text" }), /* @__PURE__ */ y("span", {
182
+ className: "text-sm tabular-nums",
183
+ children: [W.totalBookings, " bookings"]
152
184
  })]
153
185
  }),
154
186
  /* @__PURE__ */ y("div", {
155
187
  className: "flex items-center gap-2",
156
188
  children: [/* @__PURE__ */ v(i, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ y("span", {
157
- className: "text-sm",
189
+ className: "text-sm tabular-nums",
158
190
  children: [
159
- R.duration.min,
191
+ W.duration.min,
160
192
  "-",
161
- R.duration.max,
193
+ W.duration.max,
162
194
  " days range"
163
195
  ]
164
196
  })]
165
197
  })
166
198
  ]
167
199
  }),
168
- R.tags.length > 0 && /* @__PURE__ */ y("div", {
169
- className: "mt-4 flex flex-wrap gap-2",
170
- children: [/* @__PURE__ */ v(g, { className: "h-4 w-4 text-text-secondary" }), R.tags.map((e) => /* @__PURE__ */ v(b, {
200
+ W.tags.length > 0 && /* @__PURE__ */ y("div", {
201
+ className: "mt-4 flex flex-wrap items-center gap-2",
202
+ children: [/* @__PURE__ */ v(g, { className: "h-4 w-4 text-text-secondary" }), W.tags.map((e) => /* @__PURE__ */ v(b, {
171
203
  variant: "outline",
172
204
  className: "text-xs",
173
205
  children: e
174
206
  }, e))]
175
207
  })
176
208
  ]
177
- }) }),
209
+ }),
178
210
  /* @__PURE__ */ v("div", {
179
- className: "flex gap-1 border-b",
180
- children: B.map(({ key: e, label: t, icon: n }) => /* @__PURE__ */ y("button", {
181
- onClick: () => j(e),
182
- className: `flex items-center gap-2 border-b-2 px-4 py-2 text-sm font-medium transition-colors ${A === e ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary"}`,
211
+ className: "flex gap-1 border-b border-border-seam",
212
+ children: K.map(({ key: e, label: t, icon: n }) => /* @__PURE__ */ y("button", {
213
+ onClick: () => L(e),
214
+ "aria-pressed": I === e,
215
+ 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 ${I === e ? "border-accent-blue text-accent-blue" : "border-transparent text-text-secondary hover:text-text-primary"}`,
183
216
  children: [/* @__PURE__ */ v(n, { className: "h-4 w-4" }), t]
184
217
  }, e))
185
218
  }),
186
- A === "packages" && /* @__PURE__ */ v("div", {
219
+ I === "packages" && /* @__PURE__ */ v("div", {
187
220
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
188
- children: R.packages.map((e) => /* @__PURE__ */ y(S, {
189
- className: `relative ${e.popular ? "border-primary ring-1 ring-primary" : ""} ${I === e.id ? "bg-action-primary-bg/5" : ""}`,
221
+ children: W.packages.map((e) => /* @__PURE__ */ y(D, {
222
+ treatment: e.popular ? "glass" : "plain",
223
+ glow: e.popular,
224
+ className: `relative border-border-seam ${H === e.id ? "ring-1 ring-accent-blue" : ""}`,
190
225
  children: [
191
226
  e.popular && /* @__PURE__ */ v("div", {
192
227
  className: "absolute -top-3 left-1/2 -translate-x-1/2",
193
228
  children: /* @__PURE__ */ v(b, {
194
- className: "bg-action-primary-bg text-action-primary-text",
229
+ className: "bg-accent-blue text-action-primary-text",
195
230
  children: "Most Popular"
196
231
  })
197
232
  }),
@@ -209,7 +244,7 @@ function E() {
209
244
  className: "space-y-4",
210
245
  children: [
211
246
  /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("span", {
212
- className: "text-3xl font-bold",
247
+ className: "text-3xl font-bold tabular-nums",
213
248
  children: ["$", e.price.toLocaleString()]
214
249
  }), /* @__PURE__ */ y("span", {
215
250
  className: "text-sm text-text-secondary",
@@ -223,14 +258,14 @@ function E() {
223
258
  className: "space-y-2",
224
259
  children: e.features.map((e, t) => /* @__PURE__ */ y("li", {
225
260
  className: "flex items-start gap-2 text-sm",
226
- children: [/* @__PURE__ */ v(a, { className: "mt-0.5 h-4 w-4 shrink-0 text-green-500" }), e]
261
+ children: [/* @__PURE__ */ v(a, { className: "mt-0.5 h-4 w-4 shrink-0 text-status-success-text" }), e]
227
262
  }, t))
228
263
  }),
229
264
  /* @__PURE__ */ v(x, {
230
265
  className: "w-full",
231
266
  variant: e.popular ? "default" : "outline",
232
267
  onClick: () => {
233
- L(e.id), F(!0);
268
+ U(e.id), V(!0);
234
269
  },
235
270
  children: "Select Package"
236
271
  })
@@ -239,264 +274,296 @@ function E() {
239
274
  ]
240
275
  }, e.id))
241
276
  }),
242
- A === "deliverables" && /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
243
- className: "text-base",
244
- children: "What You'll Receive"
245
- }) }), /* @__PURE__ */ v(C, { children: /* @__PURE__ */ v("ul", {
246
- className: "grid gap-3 sm:grid-cols-2",
247
- children: R.deliverables.map((e, t) => /* @__PURE__ */ y("li", {
248
- className: "flex items-center gap-3 rounded-lg border p-3",
249
- children: [/* @__PURE__ */ v(d, { className: "h-5 w-5 text-primary" }), /* @__PURE__ */ v("span", {
250
- className: "text-sm font-medium",
251
- children: e
252
- })]
253
- }, t))
254
- }) })] }),
255
- A === "requirements" && /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
256
- className: "text-base",
257
- children: "What We Need From You"
258
- }) }), /* @__PURE__ */ v(C, { children: /* @__PURE__ */ v("ul", {
259
- className: "space-y-3",
260
- children: R.requirements.map((e, t) => /* @__PURE__ */ y("li", {
261
- className: "flex items-start gap-3 rounded-lg border p-3",
262
- children: [/* @__PURE__ */ v(c, { className: "mt-0.5 h-5 w-5 text-orange-500" }), /* @__PURE__ */ v("span", {
263
- className: "text-sm",
264
- children: e
265
- })]
266
- }, t))
267
- }) })] }),
268
- A === "faq" && /* @__PURE__ */ v("div", {
277
+ I === "deliverables" && /* @__PURE__ */ y(S, {
278
+ className: "border-border-seam",
279
+ children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
280
+ className: "text-base",
281
+ children: "What You'll Receive"
282
+ }) }), /* @__PURE__ */ v(C, { children: /* @__PURE__ */ v(j, {
283
+ collapsedHeight: 180,
284
+ children: /* @__PURE__ */ v("ul", {
285
+ className: "grid gap-3 sm:grid-cols-2",
286
+ children: W.deliverables.map((e, t) => /* @__PURE__ */ y("li", {
287
+ className: "flex items-center gap-3 rounded-lg border border-border-seam p-3",
288
+ children: [/* @__PURE__ */ v(d, { className: "h-5 w-5 text-accent-blue" }), /* @__PURE__ */ v("span", {
289
+ className: "text-sm font-medium",
290
+ children: e
291
+ })]
292
+ }, t))
293
+ })
294
+ }) })]
295
+ }),
296
+ I === "requirements" && /* @__PURE__ */ y(S, {
297
+ className: "border-border-seam",
298
+ children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
299
+ className: "text-base",
300
+ children: "What We Need From You"
301
+ }) }), /* @__PURE__ */ v(C, { children: /* @__PURE__ */ v(j, {
302
+ collapsedHeight: 180,
303
+ children: /* @__PURE__ */ v("ul", {
304
+ className: "space-y-3",
305
+ children: W.requirements.map((e, t) => /* @__PURE__ */ y("li", {
306
+ className: "flex items-start gap-3 rounded-lg border border-border-seam p-3",
307
+ children: [/* @__PURE__ */ v(c, { className: "mt-0.5 h-5 w-5 text-status-warning-text" }), /* @__PURE__ */ v("span", {
308
+ className: "text-sm",
309
+ children: e
310
+ })]
311
+ }, t))
312
+ })
313
+ }) })]
314
+ }),
315
+ I === "faq" && /* @__PURE__ */ v("div", {
269
316
  className: "space-y-3",
270
- children: R.faq.length === 0 ? /* @__PURE__ */ v(S, { children: /* @__PURE__ */ v(C, {
271
- className: "py-8 text-center text-text-secondary",
272
- children: "No FAQ items for this service yet."
273
- }) }) : R.faq.map((e) => /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ y("button", {
274
- className: "flex w-full items-center justify-between p-4 text-left",
275
- onClick: () => N(M === e.id ? null : e.id),
276
- children: [/* @__PURE__ */ v("span", {
277
- className: "font-medium",
278
- children: e.question
279
- }), M === e.id ? /* @__PURE__ */ v(s, { className: "h-4 w-4 text-text-secondary" }) : /* @__PURE__ */ v(o, { className: "h-4 w-4 text-text-secondary" })]
280
- }), M === e.id && /* @__PURE__ */ v(C, {
281
- className: "border-t pt-4",
282
- children: /* @__PURE__ */ v("p", {
283
- className: "text-sm text-text-secondary",
284
- children: e.answer
317
+ children: W.faq.length === 0 ? /* @__PURE__ */ v(S, {
318
+ className: "border-border-seam",
319
+ children: /* @__PURE__ */ v(C, {
320
+ className: "py-6",
321
+ children: /* @__PURE__ */ v(O, {
322
+ illustration: "empty-generic",
323
+ title: "No FAQ items yet",
324
+ description: "This service does not have any frequently asked questions yet. Message the provider if you have a question before booking."
325
+ })
285
326
  })
286
- })] }, e.id))
327
+ }) : W.faq.map((e) => /* @__PURE__ */ y(S, {
328
+ className: "border-border-seam",
329
+ children: [/* @__PURE__ */ y("button", {
330
+ className: "flex w-full items-center justify-between p-4 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
331
+ "aria-expanded": R === e.id,
332
+ onClick: () => z(R === e.id ? null : e.id),
333
+ children: [/* @__PURE__ */ v("span", {
334
+ className: "font-medium",
335
+ children: e.question
336
+ }), R === e.id ? /* @__PURE__ */ v(s, { className: "h-4 w-4 text-text-secondary" }) : /* @__PURE__ */ v(o, { className: "h-4 w-4 text-text-secondary" })]
337
+ }), R === e.id && /* @__PURE__ */ v(C, {
338
+ className: "border-t border-border-seam pt-4",
339
+ children: /* @__PURE__ */ v("p", {
340
+ className: "text-sm text-text-secondary",
341
+ children: e.answer
342
+ })
343
+ })]
344
+ }, e.id))
287
345
  })
288
346
  ]
289
347
  }), /* @__PURE__ */ y("div", {
290
348
  className: "space-y-4",
291
- children: [z && /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
292
- className: "text-base",
293
- children: "Service Provider"
294
- }) }), /* @__PURE__ */ y(C, {
295
- className: "space-y-4",
296
- children: [
297
- /* @__PURE__ */ y("div", {
298
- className: "flex items-center gap-3",
299
- children: [/* @__PURE__ */ v("div", {
300
- className: "flex h-12 w-12 items-center justify-center rounded-full bg-action-primary-bg/10 text-primary font-semibold",
301
- children: z.name.charAt(0)
302
- }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
303
- className: "font-medium",
304
- children: z.name
305
- }), /* @__PURE__ */ v("p", {
306
- className: "text-sm text-text-secondary",
307
- children: z.businessName
308
- })] })]
309
- }),
310
- z.verified && /* @__PURE__ */ y("div", {
311
- className: "flex items-center gap-2 rounded-lg bg-green-50 p-2 dark:bg-green-950",
312
- children: [/* @__PURE__ */ v(m, { className: "h-4 w-4 text-green-600" }), /* @__PURE__ */ v("span", {
313
- className: "text-sm font-medium text-green-700 dark:text-green-400",
314
- children: "Verified Provider"
315
- })]
316
- }),
317
- /* @__PURE__ */ y("div", {
318
- className: "space-y-3 text-sm",
319
- children: [
320
- /* @__PURE__ */ y("div", {
321
- className: "flex items-center justify-between",
322
- children: [/* @__PURE__ */ v("span", {
323
- className: "text-text-secondary",
324
- children: "Rating"
325
- }), /* @__PURE__ */ y("div", {
326
- className: "flex items-center gap-1",
327
- children: [
328
- /* @__PURE__ */ v(h, { className: "h-4 w-4 text-yellow-500" }),
329
- /* @__PURE__ */ v("span", {
330
- className: "font-medium",
331
- children: z.rating
332
- }),
333
- /* @__PURE__ */ y("span", {
334
- className: "text-text-secondary",
335
- children: [
336
- "(",
337
- z.totalReviews,
338
- ")"
339
- ]
340
- })
341
- ]
342
- })]
343
- }),
344
- /* @__PURE__ */ y("div", {
345
- className: "flex items-center justify-between",
346
- children: [/* @__PURE__ */ v("span", {
347
- className: "text-text-secondary",
348
- children: "Completion Rate"
349
- }), /* @__PURE__ */ y("span", {
350
- className: "font-medium",
351
- children: [z.completionRate, "%"]
352
- })]
353
- }),
354
- /* @__PURE__ */ y("div", {
355
- className: "flex items-center justify-between",
356
- children: [/* @__PURE__ */ v("span", {
357
- className: "text-text-secondary",
358
- children: "Response Time"
359
- }), /* @__PURE__ */ y("span", {
360
- className: "font-medium",
361
- children: [z.responseTime, "h avg"]
362
- })]
363
- }),
364
- /* @__PURE__ */ y("div", {
365
- className: "flex items-center justify-between",
366
- children: [/* @__PURE__ */ v("span", {
367
- className: "text-text-secondary",
368
- children: "Experience"
369
- }), /* @__PURE__ */ y("span", {
370
- className: "font-medium",
371
- children: [z.yearsExperience, " years"]
372
- })]
373
- }),
374
- /* @__PURE__ */ y("div", {
375
- className: "flex items-center justify-between",
376
- children: [/* @__PURE__ */ v("span", {
377
- className: "text-text-secondary",
378
- children: "Projects Done"
379
- }), /* @__PURE__ */ v("span", {
380
- className: "font-medium",
381
- children: z.projectsCompleted
382
- })]
383
- }),
384
- /* @__PURE__ */ y("div", {
385
- className: "flex items-center justify-between",
386
- children: [/* @__PURE__ */ v("span", {
387
- className: "text-text-secondary",
388
- children: "Hourly Rate"
389
- }), /* @__PURE__ */ y("span", {
390
- className: "font-medium",
391
- children: [
392
- "$",
393
- z.hourlyRate,
394
- "/hr"
395
- ]
396
- })]
397
- }),
398
- /* @__PURE__ */ y("div", {
399
- className: "flex items-center justify-between",
400
- children: [/* @__PURE__ */ v("span", {
401
- className: "text-text-secondary",
402
- children: "Location"
403
- }), /* @__PURE__ */ v("span", {
404
- className: "font-medium",
405
- children: z.location
406
- })]
407
- })
408
- ]
409
- }),
410
- /* @__PURE__ */ y("div", {
411
- className: "space-y-2 border-t pt-3",
412
- children: [/* @__PURE__ */ v("p", {
413
- className: "text-xs font-medium text-text-secondary",
414
- children: "Certifications"
415
- }), /* @__PURE__ */ v("div", {
416
- className: "flex flex-wrap gap-1",
417
- children: z.certifications.map((e) => /* @__PURE__ */ v(b, {
418
- variant: "secondary",
419
- className: "text-xs",
420
- children: e
421
- }, e))
422
- })]
423
- }),
424
- /* @__PURE__ */ y("div", {
425
- className: "space-y-2 border-t pt-3",
426
- children: [/* @__PURE__ */ v("p", {
427
- className: "text-xs font-medium text-text-secondary",
428
- children: "Languages"
429
- }), /* @__PURE__ */ v("div", {
430
- className: "flex flex-wrap gap-1",
431
- children: z.languages.map((e) => /* @__PURE__ */ v(b, {
349
+ children: [G && /* @__PURE__ */ y(S, {
350
+ className: "border-border-seam",
351
+ children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
352
+ className: "text-base",
353
+ children: "Service Provider"
354
+ }) }), /* @__PURE__ */ y(C, {
355
+ className: "space-y-4",
356
+ children: [
357
+ /* @__PURE__ */ y("div", {
358
+ className: "flex items-center gap-3",
359
+ children: [/* @__PURE__ */ v("div", {
360
+ className: "flex h-12 w-12 items-center justify-center rounded-full bg-accent-soft text-text-primary font-semibold",
361
+ children: G.name.charAt(0)
362
+ }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
363
+ className: "font-medium",
364
+ children: G.name
365
+ }), /* @__PURE__ */ v("p", {
366
+ className: "text-sm text-text-secondary",
367
+ children: G.businessName
368
+ })] })]
369
+ }),
370
+ G.verified && /* @__PURE__ */ y("div", {
371
+ className: "flex items-center gap-2 rounded-lg bg-status-success-bg-subtle p-2",
372
+ children: [/* @__PURE__ */ v(m, { className: "h-4 w-4 text-status-success-text" }), /* @__PURE__ */ v("span", {
373
+ className: "text-sm font-medium text-status-success-text",
374
+ children: "Verified Provider"
375
+ })]
376
+ }),
377
+ /* @__PURE__ */ y("div", {
378
+ className: "space-y-3 text-sm",
379
+ children: [
380
+ /* @__PURE__ */ y("div", {
381
+ className: "flex items-center justify-between",
382
+ children: [/* @__PURE__ */ v("span", {
383
+ className: "text-text-secondary",
384
+ children: "Rating"
385
+ }), /* @__PURE__ */ y("div", {
386
+ className: "flex items-center gap-1",
387
+ children: [
388
+ /* @__PURE__ */ v(h, { className: "h-4 w-4 text-status-warning-text" }),
389
+ /* @__PURE__ */ v("span", {
390
+ className: "font-medium tabular-nums",
391
+ children: G.rating
392
+ }),
393
+ /* @__PURE__ */ y("span", {
394
+ className: "text-text-secondary tabular-nums",
395
+ children: [
396
+ "(",
397
+ G.totalReviews,
398
+ ")"
399
+ ]
400
+ })
401
+ ]
402
+ })]
403
+ }),
404
+ /* @__PURE__ */ y("div", {
405
+ className: "flex items-center justify-between",
406
+ children: [/* @__PURE__ */ v("span", {
407
+ className: "text-text-secondary",
408
+ children: "Completion Rate"
409
+ }), /* @__PURE__ */ y("span", {
410
+ className: "font-medium tabular-nums",
411
+ children: [G.completionRate, "%"]
412
+ })]
413
+ }),
414
+ /* @__PURE__ */ y("div", {
415
+ className: "flex items-center justify-between",
416
+ children: [/* @__PURE__ */ v("span", {
417
+ className: "text-text-secondary",
418
+ children: "Response Time"
419
+ }), /* @__PURE__ */ y("span", {
420
+ className: "font-medium tabular-nums",
421
+ children: [G.responseTime, "h avg"]
422
+ })]
423
+ }),
424
+ /* @__PURE__ */ y("div", {
425
+ className: "flex items-center justify-between",
426
+ children: [/* @__PURE__ */ v("span", {
427
+ className: "text-text-secondary",
428
+ children: "Experience"
429
+ }), /* @__PURE__ */ y("span", {
430
+ className: "font-medium tabular-nums",
431
+ children: [G.yearsExperience, " years"]
432
+ })]
433
+ }),
434
+ /* @__PURE__ */ y("div", {
435
+ className: "flex items-center justify-between",
436
+ children: [/* @__PURE__ */ v("span", {
437
+ className: "text-text-secondary",
438
+ children: "Projects Done"
439
+ }), /* @__PURE__ */ v("span", {
440
+ className: "font-medium tabular-nums",
441
+ children: G.projectsCompleted
442
+ })]
443
+ }),
444
+ /* @__PURE__ */ y("div", {
445
+ className: "flex items-center justify-between",
446
+ children: [/* @__PURE__ */ v("span", {
447
+ className: "text-text-secondary",
448
+ children: "Hourly Rate"
449
+ }), /* @__PURE__ */ y("span", {
450
+ className: "font-medium tabular-nums",
451
+ children: [
452
+ "$",
453
+ G.hourlyRate,
454
+ "/hr"
455
+ ]
456
+ })]
457
+ }),
458
+ /* @__PURE__ */ y("div", {
459
+ className: "flex items-center justify-between",
460
+ children: [/* @__PURE__ */ v("span", {
461
+ className: "text-text-secondary",
462
+ children: "Location"
463
+ }), /* @__PURE__ */ v("span", {
464
+ className: "font-medium",
465
+ children: G.location
466
+ })]
467
+ })
468
+ ]
469
+ }),
470
+ /* @__PURE__ */ y("div", {
471
+ className: "space-y-2 border-t border-border-seam pt-3",
472
+ children: [/* @__PURE__ */ v("p", {
473
+ className: "text-xs font-medium text-text-secondary",
474
+ children: "Certifications"
475
+ }), /* @__PURE__ */ v("div", {
476
+ className: "flex flex-wrap gap-1",
477
+ children: G.certifications.map((e) => /* @__PURE__ */ v(b, {
478
+ variant: "secondary",
479
+ className: "text-xs",
480
+ children: e
481
+ }, e))
482
+ })]
483
+ }),
484
+ /* @__PURE__ */ y("div", {
485
+ className: "space-y-2 border-t border-border-seam pt-3",
486
+ children: [/* @__PURE__ */ v("p", {
487
+ className: "text-xs font-medium text-text-secondary",
488
+ children: "Languages"
489
+ }), /* @__PURE__ */ v("div", {
490
+ className: "flex flex-wrap gap-1",
491
+ children: G.languages.map((e) => /* @__PURE__ */ v(b, {
492
+ variant: "outline",
493
+ className: "text-xs",
494
+ children: e
495
+ }, e))
496
+ })]
497
+ }),
498
+ /* @__PURE__ */ y("div", {
499
+ className: "flex gap-2 border-t border-border-seam pt-3",
500
+ children: [/* @__PURE__ */ y(x, {
501
+ className: "flex-1",
502
+ size: "sm",
432
503
  variant: "outline",
433
- className: "text-xs",
434
- children: e
435
- }, e))
436
- })]
437
- }),
438
- /* @__PURE__ */ y("div", {
439
- className: "flex gap-2 border-t pt-3",
440
- children: [/* @__PURE__ */ y(x, {
441
- className: "flex-1",
442
- size: "sm",
443
- variant: "outline",
444
- children: [/* @__PURE__ */ v(_, { className: "mr-2 h-4 w-4" }), " View Profile"]
445
- }), /* @__PURE__ */ y(x, {
446
- className: "flex-1",
447
- size: "sm",
448
- variant: "outline",
449
- children: [/* @__PURE__ */ v(f, { className: "mr-2 h-4 w-4" }), " Message"]
450
- })]
451
- })
452
- ]
453
- })] }), /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
454
- className: "text-base",
455
- children: "Quick Book"
456
- }) }), /* @__PURE__ */ y(C, {
457
- className: "space-y-3",
458
- children: [
459
- /* @__PURE__ */ y("div", {
460
- className: "flex items-center justify-between text-sm",
461
- children: [/* @__PURE__ */ v("span", {
462
- className: "text-text-secondary",
463
- children: "Starting from"
464
- }), /* @__PURE__ */ y("span", {
465
- className: "text-lg font-bold text-primary",
466
- children: ["$", R.pricing.basePrice.toLocaleString()]
467
- })]
468
- }),
469
- /* @__PURE__ */ y("div", {
470
- className: "flex items-center gap-2 text-sm text-text-secondary",
471
- children: [/* @__PURE__ */ v(l, { className: "h-4 w-4" }), /* @__PURE__ */ y("span", { children: [
472
- "Typical duration: ",
473
- R.duration.typical,
474
- " days"
475
- ] })]
476
- }),
477
- /* @__PURE__ */ y("div", {
478
- className: "flex items-center gap-2 text-sm text-text-secondary",
479
- children: [/* @__PURE__ */ v(u, { className: "h-4 w-4" }), /* @__PURE__ */ y("span", { children: [R.pricing.type, " pricing model"] })]
480
- }),
481
- /* @__PURE__ */ y(x, {
482
- className: "w-full",
483
- onClick: () => F(!0),
484
- children: [/* @__PURE__ */ v(i, { className: "mr-2 h-4 w-4" }), " Book Now"]
485
- })
486
- ]
487
- })] })]
504
+ children: [/* @__PURE__ */ v(_, { className: "mr-2 h-4 w-4" }), " View Profile"]
505
+ }), /* @__PURE__ */ y(x, {
506
+ className: "flex-1",
507
+ size: "sm",
508
+ variant: "outline",
509
+ children: [/* @__PURE__ */ v(f, { className: "mr-2 h-4 w-4" }), " Message"]
510
+ })]
511
+ })
512
+ ]
513
+ })]
514
+ }), /* @__PURE__ */ y(D, {
515
+ treatment: "glass",
516
+ glow: !0,
517
+ className: "border-border-seam",
518
+ children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
519
+ className: "text-base",
520
+ children: "Quick Book"
521
+ }) }), /* @__PURE__ */ y(C, {
522
+ className: "space-y-3",
523
+ children: [
524
+ /* @__PURE__ */ y("div", {
525
+ className: "flex items-center justify-between text-sm",
526
+ children: [/* @__PURE__ */ v("span", {
527
+ className: "text-text-secondary",
528
+ children: "Starting from"
529
+ }), /* @__PURE__ */ y("span", {
530
+ className: "text-lg font-bold text-accent-blue tabular-nums",
531
+ children: ["$", W.pricing.basePrice.toLocaleString()]
532
+ })]
533
+ }),
534
+ /* @__PURE__ */ y("div", {
535
+ className: "flex items-center gap-2 text-sm text-text-secondary",
536
+ children: [/* @__PURE__ */ v(l, { className: "h-4 w-4" }), /* @__PURE__ */ y("span", { children: [
537
+ "Typical duration: ",
538
+ W.duration.typical,
539
+ " days"
540
+ ] })]
541
+ }),
542
+ /* @__PURE__ */ y("div", {
543
+ className: "flex items-center gap-2 text-sm text-text-secondary",
544
+ children: [/* @__PURE__ */ v(u, { className: "h-4 w-4" }), /* @__PURE__ */ y("span", { children: [W.pricing.type, " pricing model"] })]
545
+ }),
546
+ /* @__PURE__ */ y(x, {
547
+ className: "w-full",
548
+ onClick: () => V(!0),
549
+ children: [/* @__PURE__ */ v(i, { className: "mr-2 h-4 w-4" }), " Book Now"]
550
+ })
551
+ ]
552
+ })]
553
+ })]
488
554
  })]
489
555
  }),
490
- P && /* @__PURE__ */ v("div", {
491
- className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
492
- children: /* @__PURE__ */ y(S, {
493
- className: "w-full max-w-lg mx-4",
556
+ B && /* @__PURE__ */ v("div", {
557
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-bg-overlay",
558
+ children: /* @__PURE__ */ y(D, {
559
+ treatment: "glass",
560
+ className: "w-full max-w-lg mx-4 border-border-seam",
494
561
  children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ y("div", {
495
562
  className: "flex items-center justify-between",
496
563
  children: [/* @__PURE__ */ v(T, { children: "Book Service" }), /* @__PURE__ */ v(x, {
497
564
  variant: "outline",
498
565
  size: "sm",
499
- onClick: () => F(!1),
566
+ onClick: () => V(!1),
500
567
  children: "Close"
501
568
  })]
502
569
  }) }), /* @__PURE__ */ y(C, {
@@ -504,26 +571,27 @@ function E() {
504
571
  children: [
505
572
  /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
506
573
  className: "font-medium",
507
- children: R.title
574
+ children: W.title
508
575
  }), /* @__PURE__ */ y("p", {
509
576
  className: "text-sm text-text-secondary",
510
- children: ["by ", R.providerName]
577
+ children: ["by ", W.providerName]
511
578
  })] }),
512
579
  /* @__PURE__ */ y("div", {
513
580
  className: "space-y-2",
514
581
  children: [/* @__PURE__ */ v("p", {
515
582
  className: "text-sm font-medium",
516
583
  children: "Select Package"
517
- }), R.packages.map((e) => /* @__PURE__ */ y("button", {
518
- onClick: () => L(e.id),
519
- className: `w-full rounded-lg border p-3 text-left transition-colors ${I === e.id ? "border-primary bg-action-primary-bg/5" : "hover:bg-bg-sunken/50"}`,
584
+ }), W.packages.map((e) => /* @__PURE__ */ y("button", {
585
+ onClick: () => U(e.id),
586
+ "aria-pressed": H === e.id,
587
+ className: `w-full rounded-lg border p-3 text-left transition-shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus ${H === e.id ? "border-accent-blue bg-accent-blue-subtle" : "border-border-seam hover:shadow-pop"}`,
520
588
  children: [/* @__PURE__ */ y("div", {
521
589
  className: "flex items-center justify-between",
522
590
  children: [/* @__PURE__ */ v("span", {
523
591
  className: "font-medium",
524
592
  children: e.name
525
593
  }), /* @__PURE__ */ y("span", {
526
- className: "font-bold",
594
+ className: "font-bold tabular-nums",
527
595
  children: ["$", e.price.toLocaleString()]
528
596
  })]
529
597
  }), /* @__PURE__ */ y("p", {
@@ -542,11 +610,11 @@ function E() {
542
610
  children: [/* @__PURE__ */ v(x, {
543
611
  variant: "outline",
544
612
  className: "flex-1",
545
- onClick: () => F(!1),
613
+ onClick: () => V(!1),
546
614
  children: "Cancel"
547
615
  }), /* @__PURE__ */ v(x, {
548
616
  className: "flex-1",
549
- disabled: !I,
617
+ disabled: !H,
550
618
  children: "Confirm Booking"
551
619
  })]
552
620
  })
@@ -558,6 +626,6 @@ function E() {
558
626
  });
559
627
  }
560
628
  //#endregion
561
- export { E as ServiceDetailsPage };
629
+ export { M as ServiceDetailsPage };
562
630
 
563
631
  //# sourceMappingURL=ServiceDetailsPage.js.map