@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.
- package/dist/proserviceworld/pages/AdminReportsPage.js +396 -329
- package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -1
- package/dist/proserviceworld/pages/AdminUsersPage.js +261 -237
- package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -1
- package/dist/proserviceworld/pages/AnalyticsPage.js +373 -315
- package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
- package/dist/proserviceworld/pages/BookingsPage.js +221 -200
- package/dist/proserviceworld/pages/BookingsPage.js.map +1 -1
- package/dist/proserviceworld/pages/DashboardPage.js +474 -405
- package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
- package/dist/proserviceworld/pages/DocumentsPage.js +386 -317
- package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
- package/dist/proserviceworld/pages/MessagesPage.js +201 -192
- package/dist/proserviceworld/pages/MessagesPage.js.map +1 -1
- package/dist/proserviceworld/pages/PaymentsPage.js +398 -340
- package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProjectsPage.js +543 -463
- package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProviderDetailPage.js +420 -346
- package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProvidersPage.js +249 -244
- package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -1
- package/dist/proserviceworld/pages/ReviewsPage.js +93 -76
- package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ServiceDetailsPage.js +377 -309
- package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ServicesPage.js +116 -109
- package/dist/proserviceworld/pages/ServicesPage.js.map +1 -1
- package/dist/proserviceworld/pages/VerificationPage.js +264 -251
- 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 } 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
|
|
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,9 +35,9 @@ function E() {
|
|
|
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
|
-
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: () =>
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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: () =>
|
|
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__ */
|
|
78
|
-
className: "
|
|
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
|
-
|
|
120
|
+
W.featured && /* @__PURE__ */ v(b, { children: "Featured" }),
|
|
89
121
|
/* @__PURE__ */ v(b, {
|
|
90
122
|
variant: "secondary",
|
|
91
|
-
children:
|
|
123
|
+
children: W.category.replace(/_/g, " ")
|
|
92
124
|
}),
|
|
93
125
|
/* @__PURE__ */ v(b, {
|
|
94
126
|
variant: "outline",
|
|
95
|
-
children:
|
|
127
|
+
children: W.subcategory
|
|
96
128
|
})
|
|
97
129
|
]
|
|
98
130
|
}),
|
|
99
131
|
/* @__PURE__ */ v("h1", {
|
|
100
|
-
className: "text-2xl font-bold",
|
|
101
|
-
children:
|
|
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:
|
|
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-
|
|
112
|
-
children:
|
|
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: [
|
|
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-
|
|
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:
|
|
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
|
-
|
|
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: [
|
|
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-
|
|
150
|
-
className: "text-sm",
|
|
151
|
-
children: [
|
|
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
|
-
|
|
191
|
+
W.duration.min,
|
|
160
192
|
"-",
|
|
161
|
-
|
|
193
|
+
W.duration.max,
|
|
162
194
|
" days range"
|
|
163
195
|
]
|
|
164
196
|
})]
|
|
165
197
|
})
|
|
166
198
|
]
|
|
167
199
|
}),
|
|
168
|
-
|
|
169
|
-
className: "mt-4 flex flex-wrap gap-2",
|
|
170
|
-
children: [/* @__PURE__ */ v(g, { className: "h-4 w-4 text-text-secondary" }),
|
|
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:
|
|
181
|
-
onClick: () =>
|
|
182
|
-
|
|
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
|
-
|
|
219
|
+
I === "packages" && /* @__PURE__ */ v("div", {
|
|
187
220
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
188
|
-
children:
|
|
189
|
-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
243
|
-
className: "
|
|
244
|
-
children:
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
children:
|
|
250
|
-
className: "
|
|
251
|
-
children: e
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
},
|
|
267
|
-
|
|
268
|
-
|
|
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:
|
|
271
|
-
className: "
|
|
272
|
-
children:
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
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
|
-
})
|
|
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: [
|
|
292
|
-
className: "
|
|
293
|
-
children:
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
className: "flex
|
|
301
|
-
children:
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
children:
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
className: "
|
|
314
|
-
children: "
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
className: "
|
|
324
|
-
children: "
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
className: "
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
"
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
className: "
|
|
348
|
-
children: "
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
className: "
|
|
358
|
-
children: "
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
className: "
|
|
368
|
-
children: "
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
className: "
|
|
378
|
-
children: "
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
className: "
|
|
388
|
-
children: "
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
"
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
className: "
|
|
402
|
-
children: "
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
className: "
|
|
414
|
-
children: "
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
className: "
|
|
428
|
-
children: "
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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: "
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
className: "
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
"
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
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
|
-
|
|
491
|
-
className: "fixed inset-0 z-50 flex items-center justify-center bg-
|
|
492
|
-
children: /* @__PURE__ */ y(
|
|
493
|
-
|
|
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: () =>
|
|
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:
|
|
574
|
+
children: W.title
|
|
508
575
|
}), /* @__PURE__ */ y("p", {
|
|
509
576
|
className: "text-sm text-text-secondary",
|
|
510
|
-
children: ["by ",
|
|
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
|
-
}),
|
|
518
|
-
onClick: () =>
|
|
519
|
-
|
|
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: () =>
|
|
613
|
+
onClick: () => V(!1),
|
|
546
614
|
children: "Cancel"
|
|
547
615
|
}), /* @__PURE__ */ v(x, {
|
|
548
616
|
className: "flex-1",
|
|
549
|
-
disabled: !
|
|
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 {
|
|
629
|
+
export { M as ServiceDetailsPage };
|
|
562
630
|
|
|
563
631
|
//# sourceMappingURL=ServiceDetailsPage.js.map
|