@burdenoff/microfe-proserviceworld 2026.625.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.
- package/dist/proserviceworld/pages/AdminReportsPage.js +102 -68
- package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -1
- package/dist/proserviceworld/pages/AdminUsersPage.js +37 -33
- package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -1
- package/dist/proserviceworld/pages/AnalyticsPage.js +66 -36
- package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
- package/dist/proserviceworld/pages/BookingsPage.js +52 -48
- package/dist/proserviceworld/pages/BookingsPage.js.map +1 -1
- package/dist/proserviceworld/pages/DashboardPage.js +275 -243
- package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
- package/dist/proserviceworld/pages/DocumentsPage.js +204 -200
- package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
- package/dist/proserviceworld/pages/MessagesPage.js +200 -186
- package/dist/proserviceworld/pages/MessagesPage.js.map +1 -1
- package/dist/proserviceworld/pages/PaymentsPage.js +70 -39
- package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProjectsPage.js +510 -477
- package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProviderDetailPage.js +71 -41
- package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProvidersPage.js +62 -58
- package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -1
- package/dist/proserviceworld/pages/ReviewsPage.js +80 -63
- package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ServiceDetailsPage.js +118 -83
- package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ServicesPage.js +134 -130
- package/dist/proserviceworld/pages/ServicesPage.js.map +1 -1
- package/dist/proserviceworld/pages/VerificationPage.js +23 -19
- package/dist/proserviceworld/pages/VerificationPage.js.map +1 -1
- 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, EmphasisPanel as E, GlassCard as D,
|
|
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
|
|
8
|
-
let { services:
|
|
9
|
-
if (!
|
|
10
|
-
className: "
|
|
11
|
-
children: /* @__PURE__ */ v(
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
17
|
+
let K = [
|
|
17
18
|
{
|
|
18
19
|
key: "packages",
|
|
19
20
|
label: "Packages",
|
|
@@ -34,7 +35,7 @@ function k() {
|
|
|
34
35
|
label: "FAQ",
|
|
35
36
|
icon: r
|
|
36
37
|
}
|
|
37
|
-
],
|
|
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
40
|
className: "space-y-6 p-6 bg-bg-canvas min-h-screen",
|
|
40
41
|
children: [
|
|
@@ -46,7 +47,7 @@ function k() {
|
|
|
46
47
|
/* @__PURE__ */ y(x, {
|
|
47
48
|
variant: "outline",
|
|
48
49
|
size: "sm",
|
|
49
|
-
onClick: () => M
|
|
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", {
|
|
@@ -56,9 +57,9 @@ function k() {
|
|
|
56
57
|
/* @__PURE__ */ v("select", {
|
|
57
58
|
"aria-label": "Select service",
|
|
58
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",
|
|
59
|
-
value:
|
|
60
|
-
onChange: (e) =>
|
|
61
|
-
children:
|
|
60
|
+
value: P,
|
|
61
|
+
onChange: (e) => F(e.target.value),
|
|
62
|
+
children: M.map((e) => /* @__PURE__ */ v("option", {
|
|
62
63
|
value: e.id,
|
|
63
64
|
children: e.title
|
|
64
65
|
}, e.id))
|
|
@@ -66,10 +67,40 @@ function k() {
|
|
|
66
67
|
]
|
|
67
68
|
}), /* @__PURE__ */ y(x, {
|
|
68
69
|
size: "sm",
|
|
69
|
-
onClick: () =>
|
|
70
|
+
onClick: () => V(!0),
|
|
70
71
|
children: [/* @__PURE__ */ v(i, { className: "mr-2 h-4 w-4" }), " Book This Service"]
|
|
71
72
|
})]
|
|
72
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
|
+
}),
|
|
73
104
|
/* @__PURE__ */ y("div", {
|
|
74
105
|
className: "grid gap-6 lg:grid-cols-3",
|
|
75
106
|
children: [/* @__PURE__ */ y("div", {
|
|
@@ -86,34 +117,34 @@ function k() {
|
|
|
86
117
|
/* @__PURE__ */ y("div", {
|
|
87
118
|
className: "flex items-center gap-2",
|
|
88
119
|
children: [
|
|
89
|
-
|
|
120
|
+
W.featured && /* @__PURE__ */ v(b, { children: "Featured" }),
|
|
90
121
|
/* @__PURE__ */ v(b, {
|
|
91
122
|
variant: "secondary",
|
|
92
|
-
children:
|
|
123
|
+
children: W.category.replace(/_/g, " ")
|
|
93
124
|
}),
|
|
94
125
|
/* @__PURE__ */ v(b, {
|
|
95
126
|
variant: "outline",
|
|
96
|
-
children:
|
|
127
|
+
children: W.subcategory
|
|
97
128
|
})
|
|
98
129
|
]
|
|
99
130
|
}),
|
|
100
131
|
/* @__PURE__ */ v("h1", {
|
|
101
132
|
className: "text-2xl font-bold tracking-tight",
|
|
102
|
-
children:
|
|
133
|
+
children: W.title
|
|
103
134
|
}),
|
|
104
135
|
/* @__PURE__ */ v("p", {
|
|
105
136
|
className: "max-w-2xl text-text-secondary",
|
|
106
|
-
children:
|
|
137
|
+
children: W.description
|
|
107
138
|
})
|
|
108
139
|
]
|
|
109
140
|
}), /* @__PURE__ */ y("div", {
|
|
110
141
|
className: "text-right",
|
|
111
142
|
children: [/* @__PURE__ */ v("p", {
|
|
112
143
|
className: "text-2xl font-bold text-accent-blue tabular-nums",
|
|
113
|
-
children:
|
|
144
|
+
children: q
|
|
114
145
|
}), /* @__PURE__ */ y("p", {
|
|
115
146
|
className: "text-xs text-text-secondary",
|
|
116
|
-
children: [
|
|
147
|
+
children: [W.pricing.type, " pricing"]
|
|
117
148
|
})]
|
|
118
149
|
})]
|
|
119
150
|
}),
|
|
@@ -126,13 +157,13 @@ function k() {
|
|
|
126
157
|
/* @__PURE__ */ v(h, { className: "h-4 w-4 text-status-warning-text" }),
|
|
127
158
|
/* @__PURE__ */ v("span", {
|
|
128
159
|
className: "text-sm font-medium tabular-nums",
|
|
129
|
-
children:
|
|
160
|
+
children: W.rating
|
|
130
161
|
}),
|
|
131
162
|
/* @__PURE__ */ y("span", {
|
|
132
163
|
className: "text-xs text-text-secondary",
|
|
133
164
|
children: [
|
|
134
165
|
"(",
|
|
135
|
-
|
|
166
|
+
W.providerReviews,
|
|
136
167
|
" reviews)"
|
|
137
168
|
]
|
|
138
169
|
})
|
|
@@ -142,14 +173,14 @@ function k() {
|
|
|
142
173
|
className: "flex items-center gap-2",
|
|
143
174
|
children: [/* @__PURE__ */ v(l, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ y("span", {
|
|
144
175
|
className: "text-sm tabular-nums",
|
|
145
|
-
children: [
|
|
176
|
+
children: [W.duration.typical, " days typical"]
|
|
146
177
|
})]
|
|
147
178
|
}),
|
|
148
179
|
/* @__PURE__ */ y("div", {
|
|
149
180
|
className: "flex items-center gap-2",
|
|
150
181
|
children: [/* @__PURE__ */ v(a, { className: "h-4 w-4 text-status-success-text" }), /* @__PURE__ */ y("span", {
|
|
151
182
|
className: "text-sm tabular-nums",
|
|
152
|
-
children: [
|
|
183
|
+
children: [W.totalBookings, " bookings"]
|
|
153
184
|
})]
|
|
154
185
|
}),
|
|
155
186
|
/* @__PURE__ */ y("div", {
|
|
@@ -157,18 +188,18 @@ function k() {
|
|
|
157
188
|
children: [/* @__PURE__ */ v(i, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ y("span", {
|
|
158
189
|
className: "text-sm tabular-nums",
|
|
159
190
|
children: [
|
|
160
|
-
|
|
191
|
+
W.duration.min,
|
|
161
192
|
"-",
|
|
162
|
-
|
|
193
|
+
W.duration.max,
|
|
163
194
|
" days range"
|
|
164
195
|
]
|
|
165
196
|
})]
|
|
166
197
|
})
|
|
167
198
|
]
|
|
168
199
|
}),
|
|
169
|
-
|
|
200
|
+
W.tags.length > 0 && /* @__PURE__ */ y("div", {
|
|
170
201
|
className: "mt-4 flex flex-wrap items-center gap-2",
|
|
171
|
-
children: [/* @__PURE__ */ v(g, { className: "h-4 w-4 text-text-secondary" }),
|
|
202
|
+
children: [/* @__PURE__ */ v(g, { className: "h-4 w-4 text-text-secondary" }), W.tags.map((e) => /* @__PURE__ */ v(b, {
|
|
172
203
|
variant: "outline",
|
|
173
204
|
className: "text-xs",
|
|
174
205
|
children: e
|
|
@@ -178,19 +209,19 @@ function k() {
|
|
|
178
209
|
}),
|
|
179
210
|
/* @__PURE__ */ v("div", {
|
|
180
211
|
className: "flex gap-1 border-b border-border-seam",
|
|
181
|
-
children:
|
|
182
|
-
onClick: () =>
|
|
183
|
-
"aria-pressed":
|
|
184
|
-
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 ${
|
|
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"}`,
|
|
185
216
|
children: [/* @__PURE__ */ v(n, { className: "h-4 w-4" }), t]
|
|
186
217
|
}, e))
|
|
187
218
|
}),
|
|
188
|
-
|
|
219
|
+
I === "packages" && /* @__PURE__ */ v("div", {
|
|
189
220
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
190
|
-
children:
|
|
221
|
+
children: W.packages.map((e) => /* @__PURE__ */ y(D, {
|
|
191
222
|
treatment: e.popular ? "glass" : "plain",
|
|
192
223
|
glow: e.popular,
|
|
193
|
-
className: `relative border-border-seam ${
|
|
224
|
+
className: `relative border-border-seam ${H === e.id ? "ring-1 ring-accent-blue" : ""}`,
|
|
194
225
|
children: [
|
|
195
226
|
e.popular && /* @__PURE__ */ v("div", {
|
|
196
227
|
className: "absolute -top-3 left-1/2 -translate-x-1/2",
|
|
@@ -234,7 +265,7 @@ function k() {
|
|
|
234
265
|
className: "w-full",
|
|
235
266
|
variant: e.popular ? "default" : "outline",
|
|
236
267
|
onClick: () => {
|
|
237
|
-
|
|
268
|
+
U(e.id), V(!0);
|
|
238
269
|
},
|
|
239
270
|
children: "Select Package"
|
|
240
271
|
})
|
|
@@ -243,16 +274,16 @@ function k() {
|
|
|
243
274
|
]
|
|
244
275
|
}, e.id))
|
|
245
276
|
}),
|
|
246
|
-
|
|
277
|
+
I === "deliverables" && /* @__PURE__ */ y(S, {
|
|
247
278
|
className: "border-border-seam",
|
|
248
279
|
children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
|
|
249
280
|
className: "text-base",
|
|
250
281
|
children: "What You'll Receive"
|
|
251
|
-
}) }), /* @__PURE__ */ v(C, { children: /* @__PURE__ */ v(
|
|
282
|
+
}) }), /* @__PURE__ */ v(C, { children: /* @__PURE__ */ v(j, {
|
|
252
283
|
collapsedHeight: 180,
|
|
253
284
|
children: /* @__PURE__ */ v("ul", {
|
|
254
285
|
className: "grid gap-3 sm:grid-cols-2",
|
|
255
|
-
children:
|
|
286
|
+
children: W.deliverables.map((e, t) => /* @__PURE__ */ y("li", {
|
|
256
287
|
className: "flex items-center gap-3 rounded-lg border border-border-seam p-3",
|
|
257
288
|
children: [/* @__PURE__ */ v(d, { className: "h-5 w-5 text-accent-blue" }), /* @__PURE__ */ v("span", {
|
|
258
289
|
className: "text-sm font-medium",
|
|
@@ -262,16 +293,16 @@ function k() {
|
|
|
262
293
|
})
|
|
263
294
|
}) })]
|
|
264
295
|
}),
|
|
265
|
-
|
|
296
|
+
I === "requirements" && /* @__PURE__ */ y(S, {
|
|
266
297
|
className: "border-border-seam",
|
|
267
298
|
children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
|
|
268
299
|
className: "text-base",
|
|
269
300
|
children: "What We Need From You"
|
|
270
|
-
}) }), /* @__PURE__ */ v(C, { children: /* @__PURE__ */ v(
|
|
301
|
+
}) }), /* @__PURE__ */ v(C, { children: /* @__PURE__ */ v(j, {
|
|
271
302
|
collapsedHeight: 180,
|
|
272
303
|
children: /* @__PURE__ */ v("ul", {
|
|
273
304
|
className: "space-y-3",
|
|
274
|
-
children:
|
|
305
|
+
children: W.requirements.map((e, t) => /* @__PURE__ */ y("li", {
|
|
275
306
|
className: "flex items-start gap-3 rounded-lg border border-border-seam p-3",
|
|
276
307
|
children: [/* @__PURE__ */ v(c, { className: "mt-0.5 h-5 w-5 text-status-warning-text" }), /* @__PURE__ */ v("span", {
|
|
277
308
|
className: "text-sm",
|
|
@@ -281,25 +312,29 @@ function k() {
|
|
|
281
312
|
})
|
|
282
313
|
}) })]
|
|
283
314
|
}),
|
|
284
|
-
|
|
315
|
+
I === "faq" && /* @__PURE__ */ v("div", {
|
|
285
316
|
className: "space-y-3",
|
|
286
|
-
children:
|
|
317
|
+
children: W.faq.length === 0 ? /* @__PURE__ */ v(S, {
|
|
287
318
|
className: "border-border-seam",
|
|
288
319
|
children: /* @__PURE__ */ v(C, {
|
|
289
|
-
className: "py-
|
|
290
|
-
children:
|
|
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
|
+
})
|
|
291
326
|
})
|
|
292
|
-
}) :
|
|
327
|
+
}) : W.faq.map((e) => /* @__PURE__ */ y(S, {
|
|
293
328
|
className: "border-border-seam",
|
|
294
329
|
children: [/* @__PURE__ */ y("button", {
|
|
295
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",
|
|
296
|
-
"aria-expanded":
|
|
297
|
-
onClick: () =>
|
|
331
|
+
"aria-expanded": R === e.id,
|
|
332
|
+
onClick: () => z(R === e.id ? null : e.id),
|
|
298
333
|
children: [/* @__PURE__ */ v("span", {
|
|
299
334
|
className: "font-medium",
|
|
300
335
|
children: e.question
|
|
301
|
-
}),
|
|
302
|
-
}),
|
|
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, {
|
|
303
338
|
className: "border-t border-border-seam pt-4",
|
|
304
339
|
children: /* @__PURE__ */ v("p", {
|
|
305
340
|
className: "text-sm text-text-secondary",
|
|
@@ -311,7 +346,7 @@ function k() {
|
|
|
311
346
|
]
|
|
312
347
|
}), /* @__PURE__ */ y("div", {
|
|
313
348
|
className: "space-y-4",
|
|
314
|
-
children: [
|
|
349
|
+
children: [G && /* @__PURE__ */ y(S, {
|
|
315
350
|
className: "border-border-seam",
|
|
316
351
|
children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
|
|
317
352
|
className: "text-base",
|
|
@@ -323,16 +358,16 @@ function k() {
|
|
|
323
358
|
className: "flex items-center gap-3",
|
|
324
359
|
children: [/* @__PURE__ */ v("div", {
|
|
325
360
|
className: "flex h-12 w-12 items-center justify-center rounded-full bg-accent-soft text-text-primary font-semibold",
|
|
326
|
-
children:
|
|
361
|
+
children: G.name.charAt(0)
|
|
327
362
|
}), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
328
363
|
className: "font-medium",
|
|
329
|
-
children:
|
|
364
|
+
children: G.name
|
|
330
365
|
}), /* @__PURE__ */ v("p", {
|
|
331
366
|
className: "text-sm text-text-secondary",
|
|
332
|
-
children:
|
|
367
|
+
children: G.businessName
|
|
333
368
|
})] })]
|
|
334
369
|
}),
|
|
335
|
-
|
|
370
|
+
G.verified && /* @__PURE__ */ y("div", {
|
|
336
371
|
className: "flex items-center gap-2 rounded-lg bg-status-success-bg-subtle p-2",
|
|
337
372
|
children: [/* @__PURE__ */ v(m, { className: "h-4 w-4 text-status-success-text" }), /* @__PURE__ */ v("span", {
|
|
338
373
|
className: "text-sm font-medium text-status-success-text",
|
|
@@ -353,13 +388,13 @@ function k() {
|
|
|
353
388
|
/* @__PURE__ */ v(h, { className: "h-4 w-4 text-status-warning-text" }),
|
|
354
389
|
/* @__PURE__ */ v("span", {
|
|
355
390
|
className: "font-medium tabular-nums",
|
|
356
|
-
children:
|
|
391
|
+
children: G.rating
|
|
357
392
|
}),
|
|
358
393
|
/* @__PURE__ */ y("span", {
|
|
359
394
|
className: "text-text-secondary tabular-nums",
|
|
360
395
|
children: [
|
|
361
396
|
"(",
|
|
362
|
-
|
|
397
|
+
G.totalReviews,
|
|
363
398
|
")"
|
|
364
399
|
]
|
|
365
400
|
})
|
|
@@ -373,7 +408,7 @@ function k() {
|
|
|
373
408
|
children: "Completion Rate"
|
|
374
409
|
}), /* @__PURE__ */ y("span", {
|
|
375
410
|
className: "font-medium tabular-nums",
|
|
376
|
-
children: [
|
|
411
|
+
children: [G.completionRate, "%"]
|
|
377
412
|
})]
|
|
378
413
|
}),
|
|
379
414
|
/* @__PURE__ */ y("div", {
|
|
@@ -383,7 +418,7 @@ function k() {
|
|
|
383
418
|
children: "Response Time"
|
|
384
419
|
}), /* @__PURE__ */ y("span", {
|
|
385
420
|
className: "font-medium tabular-nums",
|
|
386
|
-
children: [
|
|
421
|
+
children: [G.responseTime, "h avg"]
|
|
387
422
|
})]
|
|
388
423
|
}),
|
|
389
424
|
/* @__PURE__ */ y("div", {
|
|
@@ -393,7 +428,7 @@ function k() {
|
|
|
393
428
|
children: "Experience"
|
|
394
429
|
}), /* @__PURE__ */ y("span", {
|
|
395
430
|
className: "font-medium tabular-nums",
|
|
396
|
-
children: [
|
|
431
|
+
children: [G.yearsExperience, " years"]
|
|
397
432
|
})]
|
|
398
433
|
}),
|
|
399
434
|
/* @__PURE__ */ y("div", {
|
|
@@ -403,7 +438,7 @@ function k() {
|
|
|
403
438
|
children: "Projects Done"
|
|
404
439
|
}), /* @__PURE__ */ v("span", {
|
|
405
440
|
className: "font-medium tabular-nums",
|
|
406
|
-
children:
|
|
441
|
+
children: G.projectsCompleted
|
|
407
442
|
})]
|
|
408
443
|
}),
|
|
409
444
|
/* @__PURE__ */ y("div", {
|
|
@@ -415,7 +450,7 @@ function k() {
|
|
|
415
450
|
className: "font-medium tabular-nums",
|
|
416
451
|
children: [
|
|
417
452
|
"$",
|
|
418
|
-
|
|
453
|
+
G.hourlyRate,
|
|
419
454
|
"/hr"
|
|
420
455
|
]
|
|
421
456
|
})]
|
|
@@ -427,7 +462,7 @@ function k() {
|
|
|
427
462
|
children: "Location"
|
|
428
463
|
}), /* @__PURE__ */ v("span", {
|
|
429
464
|
className: "font-medium",
|
|
430
|
-
children:
|
|
465
|
+
children: G.location
|
|
431
466
|
})]
|
|
432
467
|
})
|
|
433
468
|
]
|
|
@@ -439,7 +474,7 @@ function k() {
|
|
|
439
474
|
children: "Certifications"
|
|
440
475
|
}), /* @__PURE__ */ v("div", {
|
|
441
476
|
className: "flex flex-wrap gap-1",
|
|
442
|
-
children:
|
|
477
|
+
children: G.certifications.map((e) => /* @__PURE__ */ v(b, {
|
|
443
478
|
variant: "secondary",
|
|
444
479
|
className: "text-xs",
|
|
445
480
|
children: e
|
|
@@ -453,7 +488,7 @@ function k() {
|
|
|
453
488
|
children: "Languages"
|
|
454
489
|
}), /* @__PURE__ */ v("div", {
|
|
455
490
|
className: "flex flex-wrap gap-1",
|
|
456
|
-
children:
|
|
491
|
+
children: G.languages.map((e) => /* @__PURE__ */ v(b, {
|
|
457
492
|
variant: "outline",
|
|
458
493
|
className: "text-xs",
|
|
459
494
|
children: e
|
|
@@ -493,24 +528,24 @@ function k() {
|
|
|
493
528
|
children: "Starting from"
|
|
494
529
|
}), /* @__PURE__ */ y("span", {
|
|
495
530
|
className: "text-lg font-bold text-accent-blue tabular-nums",
|
|
496
|
-
children: ["$",
|
|
531
|
+
children: ["$", W.pricing.basePrice.toLocaleString()]
|
|
497
532
|
})]
|
|
498
533
|
}),
|
|
499
534
|
/* @__PURE__ */ y("div", {
|
|
500
535
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
501
536
|
children: [/* @__PURE__ */ v(l, { className: "h-4 w-4" }), /* @__PURE__ */ y("span", { children: [
|
|
502
537
|
"Typical duration: ",
|
|
503
|
-
|
|
538
|
+
W.duration.typical,
|
|
504
539
|
" days"
|
|
505
540
|
] })]
|
|
506
541
|
}),
|
|
507
542
|
/* @__PURE__ */ y("div", {
|
|
508
543
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
509
|
-
children: [/* @__PURE__ */ v(u, { className: "h-4 w-4" }), /* @__PURE__ */ y("span", { children: [
|
|
544
|
+
children: [/* @__PURE__ */ v(u, { className: "h-4 w-4" }), /* @__PURE__ */ y("span", { children: [W.pricing.type, " pricing model"] })]
|
|
510
545
|
}),
|
|
511
546
|
/* @__PURE__ */ y(x, {
|
|
512
547
|
className: "w-full",
|
|
513
|
-
onClick: () =>
|
|
548
|
+
onClick: () => V(!0),
|
|
514
549
|
children: [/* @__PURE__ */ v(i, { className: "mr-2 h-4 w-4" }), " Book Now"]
|
|
515
550
|
})
|
|
516
551
|
]
|
|
@@ -518,7 +553,7 @@ function k() {
|
|
|
518
553
|
})]
|
|
519
554
|
})]
|
|
520
555
|
}),
|
|
521
|
-
|
|
556
|
+
B && /* @__PURE__ */ v("div", {
|
|
522
557
|
className: "fixed inset-0 z-50 flex items-center justify-center bg-bg-overlay",
|
|
523
558
|
children: /* @__PURE__ */ y(D, {
|
|
524
559
|
treatment: "glass",
|
|
@@ -528,7 +563,7 @@ function k() {
|
|
|
528
563
|
children: [/* @__PURE__ */ v(T, { children: "Book Service" }), /* @__PURE__ */ v(x, {
|
|
529
564
|
variant: "outline",
|
|
530
565
|
size: "sm",
|
|
531
|
-
onClick: () =>
|
|
566
|
+
onClick: () => V(!1),
|
|
532
567
|
children: "Close"
|
|
533
568
|
})]
|
|
534
569
|
}) }), /* @__PURE__ */ y(C, {
|
|
@@ -536,20 +571,20 @@ function k() {
|
|
|
536
571
|
children: [
|
|
537
572
|
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
538
573
|
className: "font-medium",
|
|
539
|
-
children:
|
|
574
|
+
children: W.title
|
|
540
575
|
}), /* @__PURE__ */ y("p", {
|
|
541
576
|
className: "text-sm text-text-secondary",
|
|
542
|
-
children: ["by ",
|
|
577
|
+
children: ["by ", W.providerName]
|
|
543
578
|
})] }),
|
|
544
579
|
/* @__PURE__ */ y("div", {
|
|
545
580
|
className: "space-y-2",
|
|
546
581
|
children: [/* @__PURE__ */ v("p", {
|
|
547
582
|
className: "text-sm font-medium",
|
|
548
583
|
children: "Select Package"
|
|
549
|
-
}),
|
|
550
|
-
onClick: () =>
|
|
551
|
-
"aria-pressed":
|
|
552
|
-
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 ${
|
|
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"}`,
|
|
553
588
|
children: [/* @__PURE__ */ y("div", {
|
|
554
589
|
className: "flex items-center justify-between",
|
|
555
590
|
children: [/* @__PURE__ */ v("span", {
|
|
@@ -575,11 +610,11 @@ function k() {
|
|
|
575
610
|
children: [/* @__PURE__ */ v(x, {
|
|
576
611
|
variant: "outline",
|
|
577
612
|
className: "flex-1",
|
|
578
|
-
onClick: () =>
|
|
613
|
+
onClick: () => V(!1),
|
|
579
614
|
children: "Cancel"
|
|
580
615
|
}), /* @__PURE__ */ v(x, {
|
|
581
616
|
className: "flex-1",
|
|
582
|
-
disabled: !
|
|
617
|
+
disabled: !H,
|
|
583
618
|
children: "Confirm Booking"
|
|
584
619
|
})]
|
|
585
620
|
})
|
|
@@ -591,6 +626,6 @@ function k() {
|
|
|
591
626
|
});
|
|
592
627
|
}
|
|
593
628
|
//#endregion
|
|
594
|
-
export {
|
|
629
|
+
export { M as ServiceDetailsPage };
|
|
595
630
|
|
|
596
631
|
//# sourceMappingURL=ServiceDetailsPage.js.map
|