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