@burdenoff/microfe-proserviceworld 2026.703.1 → 2026.706.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/index.js +2 -3
- package/dist/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1716 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/proserviceworld/ProServiceWorldRoot.js +92 -136
- package/dist/proserviceworld/ProServiceWorldRoot.js.map +1 -1
- package/dist/proserviceworld/ProServiceWorldRoutes.js +18 -26
- package/dist/proserviceworld/ProServiceWorldRoutes.js.map +1 -1
- package/dist/proserviceworld/components/ui.js +273 -0
- package/dist/proserviceworld/components/ui.js.map +1 -0
- package/dist/proserviceworld/hooks/useFiles.js +45 -0
- package/dist/proserviceworld/hooks/useFiles.js.map +1 -0
- package/dist/proserviceworld/hooks/useProServiceWorldApi.js +416 -0
- package/dist/proserviceworld/hooks/useProServiceWorldApi.js.map +1 -0
- package/dist/proserviceworld/index.js +0 -1
- package/dist/proserviceworld/pages/AnalyticsPage.js +163 -475
- package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ClientDetailPage.js +238 -0
- package/dist/proserviceworld/pages/ClientDetailPage.js.map +1 -0
- package/dist/proserviceworld/pages/ClientsPage.js +295 -0
- package/dist/proserviceworld/pages/ClientsPage.js.map +1 -0
- package/dist/proserviceworld/pages/CompliancePage.js +307 -0
- package/dist/proserviceworld/pages/CompliancePage.js.map +1 -0
- package/dist/proserviceworld/pages/ConflictsPage.js +234 -0
- package/dist/proserviceworld/pages/ConflictsPage.js.map +1 -0
- package/dist/proserviceworld/pages/DashboardPage.js +179 -632
- package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
- package/dist/proserviceworld/pages/DocumentsPage.js +235 -539
- package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
- package/dist/proserviceworld/pages/EngagementDetailPage.js +444 -0
- package/dist/proserviceworld/pages/EngagementDetailPage.js.map +1 -0
- package/dist/proserviceworld/pages/EngagementsPage.js +256 -0
- package/dist/proserviceworld/pages/EngagementsPage.js.map +1 -0
- package/dist/proserviceworld/pages/InvoicesPage.js +303 -0
- package/dist/proserviceworld/pages/InvoicesPage.js.map +1 -0
- package/dist/proserviceworld/pages/MattersPage.js +275 -0
- package/dist/proserviceworld/pages/MattersPage.js.map +1 -0
- package/dist/proserviceworld/pages/PracticeAreasPage.js +176 -0
- package/dist/proserviceworld/pages/PracticeAreasPage.js.map +1 -0
- package/dist/proserviceworld/pages/TimePage.js +310 -0
- package/dist/proserviceworld/pages/TimePage.js.map +1 -0
- package/dist/proserviceworld/utils/cn.js +10 -0
- package/dist/proserviceworld/utils/cn.js.map +1 -0
- package/dist/proserviceworld/utils/nav.js +11 -0
- package/dist/proserviceworld/utils/nav.js.map +1 -0
- package/package.json +1 -1
- package/dist/proserviceworld/pages/AdminReportsPage.js +0 -579
- package/dist/proserviceworld/pages/AdminReportsPage.js.map +0 -1
- package/dist/proserviceworld/pages/AdminUsersPage.js +0 -468
- package/dist/proserviceworld/pages/AdminUsersPage.js.map +0 -1
- package/dist/proserviceworld/pages/BookingsPage.js +0 -446
- package/dist/proserviceworld/pages/BookingsPage.js.map +0 -1
- package/dist/proserviceworld/pages/MessagesPage.js +0 -238
- package/dist/proserviceworld/pages/MessagesPage.js.map +0 -1
- package/dist/proserviceworld/pages/PaymentsPage.js +0 -537
- package/dist/proserviceworld/pages/PaymentsPage.js.map +0 -1
- package/dist/proserviceworld/pages/ProjectsPage.js +0 -627
- package/dist/proserviceworld/pages/ProjectsPage.js.map +0 -1
- package/dist/proserviceworld/pages/ProviderDetailPage.js +0 -538
- package/dist/proserviceworld/pages/ProviderDetailPage.js.map +0 -1
- package/dist/proserviceworld/pages/ProvidersPage.js +0 -347
- package/dist/proserviceworld/pages/ProvidersPage.js.map +0 -1
- package/dist/proserviceworld/pages/ReviewsPage.js +0 -356
- package/dist/proserviceworld/pages/ReviewsPage.js.map +0 -1
- package/dist/proserviceworld/pages/ServiceDetailsPage.js +0 -631
- package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +0 -1
- package/dist/proserviceworld/pages/ServicesPage.js +0 -344
- package/dist/proserviceworld/pages/ServicesPage.js.map +0 -1
- package/dist/proserviceworld/pages/VerificationPage.js +0 -370
- package/dist/proserviceworld/pages/VerificationPage.js.map +0 -1
- package/dist/proserviceworld/store/proserviceworldStore.js +0 -2490
- package/dist/proserviceworld/store/proserviceworldStore.js.map +0 -1
- package/dist/proserviceworld/utils/i18n.js +0 -15
- package/dist/proserviceworld/utils/i18n.js.map +0 -1
|
@@ -1,631 +0,0 @@
|
|
|
1
|
-
import { useProServiceWorldStore as e } from "../store/proserviceworldStore.js";
|
|
2
|
-
import { useState as t } from "react";
|
|
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
|
-
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, IllustratedEmptyState as O, NextSteps as k, PagePurpose as A, ShowMore as j } from "@burdenoff/fe-libs/ui";
|
|
6
|
-
//#region src/proserviceworld/pages/ServiceDetailsPage.tsx
|
|
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."
|
|
15
|
-
})
|
|
16
|
-
});
|
|
17
|
-
let K = [
|
|
18
|
-
{
|
|
19
|
-
key: "packages",
|
|
20
|
-
label: "Packages",
|
|
21
|
-
icon: p
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
key: "deliverables",
|
|
25
|
-
label: "Deliverables",
|
|
26
|
-
icon: d
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
key: "requirements",
|
|
30
|
-
label: "Requirements",
|
|
31
|
-
icon: c
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
key: "faq",
|
|
35
|
-
label: "FAQ",
|
|
36
|
-
icon: r
|
|
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()}`;
|
|
39
|
-
return /* @__PURE__ */ y("div", {
|
|
40
|
-
className: "space-y-6 p-6 bg-bg-canvas min-h-screen",
|
|
41
|
-
children: [
|
|
42
|
-
/* @__PURE__ */ y("div", {
|
|
43
|
-
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
44
|
-
children: [/* @__PURE__ */ y("div", {
|
|
45
|
-
className: "flex items-center gap-3",
|
|
46
|
-
children: [
|
|
47
|
-
/* @__PURE__ */ y(x, {
|
|
48
|
-
variant: "outline",
|
|
49
|
-
size: "sm",
|
|
50
|
-
onClick: () => F(M[0]?.id ?? ""),
|
|
51
|
-
children: [/* @__PURE__ */ v(n, { className: "mr-2 h-4 w-4" }), " Services"]
|
|
52
|
-
}),
|
|
53
|
-
/* @__PURE__ */ v("span", {
|
|
54
|
-
className: "text-text-secondary",
|
|
55
|
-
children: "/"
|
|
56
|
-
}),
|
|
57
|
-
/* @__PURE__ */ v("select", {
|
|
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", {
|
|
63
|
-
value: e.id,
|
|
64
|
-
children: e.title
|
|
65
|
-
}, e.id))
|
|
66
|
-
})
|
|
67
|
-
]
|
|
68
|
-
}), /* @__PURE__ */ y(x, {
|
|
69
|
-
size: "sm",
|
|
70
|
-
onClick: () => V(!0),
|
|
71
|
-
children: [/* @__PURE__ */ v(i, { className: "mr-2 h-4 w-4" }), " Book This Service"]
|
|
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
|
-
}),
|
|
104
|
-
/* @__PURE__ */ y("div", {
|
|
105
|
-
className: "grid gap-6 lg:grid-cols-3",
|
|
106
|
-
children: [/* @__PURE__ */ y("div", {
|
|
107
|
-
className: "space-y-6 lg:col-span-2",
|
|
108
|
-
children: [
|
|
109
|
-
/* @__PURE__ */ y(E, {
|
|
110
|
-
className: "relative overflow-hidden",
|
|
111
|
-
children: [
|
|
112
|
-
/* @__PURE__ */ y("div", {
|
|
113
|
-
className: "flex flex-wrap items-start justify-between gap-4",
|
|
114
|
-
children: [/* @__PURE__ */ y("div", {
|
|
115
|
-
className: "space-y-2",
|
|
116
|
-
children: [
|
|
117
|
-
/* @__PURE__ */ y("div", {
|
|
118
|
-
className: "flex items-center gap-2",
|
|
119
|
-
children: [
|
|
120
|
-
W.featured && /* @__PURE__ */ v(b, { children: "Featured" }),
|
|
121
|
-
/* @__PURE__ */ v(b, {
|
|
122
|
-
variant: "secondary",
|
|
123
|
-
children: W.category.replace(/_/g, " ")
|
|
124
|
-
}),
|
|
125
|
-
/* @__PURE__ */ v(b, {
|
|
126
|
-
variant: "outline",
|
|
127
|
-
children: W.subcategory
|
|
128
|
-
})
|
|
129
|
-
]
|
|
130
|
-
}),
|
|
131
|
-
/* @__PURE__ */ v("h1", {
|
|
132
|
-
className: "text-2xl font-bold tracking-tight",
|
|
133
|
-
children: W.title
|
|
134
|
-
}),
|
|
135
|
-
/* @__PURE__ */ v("p", {
|
|
136
|
-
className: "max-w-2xl text-text-secondary",
|
|
137
|
-
children: W.description
|
|
138
|
-
})
|
|
139
|
-
]
|
|
140
|
-
}), /* @__PURE__ */ y("div", {
|
|
141
|
-
className: "text-right",
|
|
142
|
-
children: [/* @__PURE__ */ v("p", {
|
|
143
|
-
className: "text-2xl font-bold text-accent-blue tabular-nums",
|
|
144
|
-
children: q
|
|
145
|
-
}), /* @__PURE__ */ y("p", {
|
|
146
|
-
className: "text-xs text-text-secondary",
|
|
147
|
-
children: [W.pricing.type, " pricing"]
|
|
148
|
-
})]
|
|
149
|
-
})]
|
|
150
|
-
}),
|
|
151
|
-
/* @__PURE__ */ y("div", {
|
|
152
|
-
className: "mt-6 flex flex-wrap gap-6 border-t border-border-seam pt-4",
|
|
153
|
-
children: [
|
|
154
|
-
/* @__PURE__ */ y("div", {
|
|
155
|
-
className: "flex items-center gap-2",
|
|
156
|
-
children: [
|
|
157
|
-
/* @__PURE__ */ v(h, { className: "h-4 w-4 text-status-warning-text" }),
|
|
158
|
-
/* @__PURE__ */ v("span", {
|
|
159
|
-
className: "text-sm font-medium tabular-nums",
|
|
160
|
-
children: W.rating
|
|
161
|
-
}),
|
|
162
|
-
/* @__PURE__ */ y("span", {
|
|
163
|
-
className: "text-xs text-text-secondary",
|
|
164
|
-
children: [
|
|
165
|
-
"(",
|
|
166
|
-
W.providerReviews,
|
|
167
|
-
" reviews)"
|
|
168
|
-
]
|
|
169
|
-
})
|
|
170
|
-
]
|
|
171
|
-
}),
|
|
172
|
-
/* @__PURE__ */ y("div", {
|
|
173
|
-
className: "flex items-center gap-2",
|
|
174
|
-
children: [/* @__PURE__ */ v(l, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ y("span", {
|
|
175
|
-
className: "text-sm tabular-nums",
|
|
176
|
-
children: [W.duration.typical, " days typical"]
|
|
177
|
-
})]
|
|
178
|
-
}),
|
|
179
|
-
/* @__PURE__ */ y("div", {
|
|
180
|
-
className: "flex items-center gap-2",
|
|
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"]
|
|
184
|
-
})]
|
|
185
|
-
}),
|
|
186
|
-
/* @__PURE__ */ y("div", {
|
|
187
|
-
className: "flex items-center gap-2",
|
|
188
|
-
children: [/* @__PURE__ */ v(i, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ y("span", {
|
|
189
|
-
className: "text-sm tabular-nums",
|
|
190
|
-
children: [
|
|
191
|
-
W.duration.min,
|
|
192
|
-
"-",
|
|
193
|
-
W.duration.max,
|
|
194
|
-
" days range"
|
|
195
|
-
]
|
|
196
|
-
})]
|
|
197
|
-
})
|
|
198
|
-
]
|
|
199
|
-
}),
|
|
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, {
|
|
203
|
-
variant: "outline",
|
|
204
|
-
className: "text-xs",
|
|
205
|
-
children: e
|
|
206
|
-
}, e))]
|
|
207
|
-
})
|
|
208
|
-
]
|
|
209
|
-
}),
|
|
210
|
-
/* @__PURE__ */ v("div", {
|
|
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"}`,
|
|
216
|
-
children: [/* @__PURE__ */ v(n, { className: "h-4 w-4" }), t]
|
|
217
|
-
}, e))
|
|
218
|
-
}),
|
|
219
|
-
I === "packages" && /* @__PURE__ */ v("div", {
|
|
220
|
-
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
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" : ""}`,
|
|
225
|
-
children: [
|
|
226
|
-
e.popular && /* @__PURE__ */ v("div", {
|
|
227
|
-
className: "absolute -top-3 left-1/2 -translate-x-1/2",
|
|
228
|
-
children: /* @__PURE__ */ v(b, {
|
|
229
|
-
className: "bg-accent-blue text-action-primary-text",
|
|
230
|
-
children: "Most Popular"
|
|
231
|
-
})
|
|
232
|
-
}),
|
|
233
|
-
/* @__PURE__ */ y(w, {
|
|
234
|
-
className: "pb-3",
|
|
235
|
-
children: [/* @__PURE__ */ v(T, {
|
|
236
|
-
className: "text-lg",
|
|
237
|
-
children: e.name
|
|
238
|
-
}), /* @__PURE__ */ v("p", {
|
|
239
|
-
className: "text-sm text-text-secondary",
|
|
240
|
-
children: e.description
|
|
241
|
-
})]
|
|
242
|
-
}),
|
|
243
|
-
/* @__PURE__ */ y(C, {
|
|
244
|
-
className: "space-y-4",
|
|
245
|
-
children: [
|
|
246
|
-
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("span", {
|
|
247
|
-
className: "text-3xl font-bold tabular-nums",
|
|
248
|
-
children: ["$", e.price.toLocaleString()]
|
|
249
|
-
}), /* @__PURE__ */ y("span", {
|
|
250
|
-
className: "text-sm text-text-secondary",
|
|
251
|
-
children: [
|
|
252
|
-
" / ",
|
|
253
|
-
e.duration,
|
|
254
|
-
" days"
|
|
255
|
-
]
|
|
256
|
-
})] }),
|
|
257
|
-
/* @__PURE__ */ v("ul", {
|
|
258
|
-
className: "space-y-2",
|
|
259
|
-
children: e.features.map((e, t) => /* @__PURE__ */ y("li", {
|
|
260
|
-
className: "flex items-start gap-2 text-sm",
|
|
261
|
-
children: [/* @__PURE__ */ v(a, { className: "mt-0.5 h-4 w-4 shrink-0 text-status-success-text" }), e]
|
|
262
|
-
}, t))
|
|
263
|
-
}),
|
|
264
|
-
/* @__PURE__ */ v(x, {
|
|
265
|
-
className: "w-full",
|
|
266
|
-
variant: e.popular ? "default" : "outline",
|
|
267
|
-
onClick: () => {
|
|
268
|
-
U(e.id), V(!0);
|
|
269
|
-
},
|
|
270
|
-
children: "Select Package"
|
|
271
|
-
})
|
|
272
|
-
]
|
|
273
|
-
})
|
|
274
|
-
]
|
|
275
|
-
}, e.id))
|
|
276
|
-
}),
|
|
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", {
|
|
316
|
-
className: "space-y-3",
|
|
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
|
-
})
|
|
326
|
-
})
|
|
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))
|
|
345
|
-
})
|
|
346
|
-
]
|
|
347
|
-
}), /* @__PURE__ */ y("div", {
|
|
348
|
-
className: "space-y-4",
|
|
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",
|
|
503
|
-
variant: "outline",
|
|
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
|
-
})]
|
|
554
|
-
})]
|
|
555
|
-
}),
|
|
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",
|
|
561
|
-
children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ y("div", {
|
|
562
|
-
className: "flex items-center justify-between",
|
|
563
|
-
children: [/* @__PURE__ */ v(T, { children: "Book Service" }), /* @__PURE__ */ v(x, {
|
|
564
|
-
variant: "outline",
|
|
565
|
-
size: "sm",
|
|
566
|
-
onClick: () => V(!1),
|
|
567
|
-
children: "Close"
|
|
568
|
-
})]
|
|
569
|
-
}) }), /* @__PURE__ */ y(C, {
|
|
570
|
-
className: "space-y-4",
|
|
571
|
-
children: [
|
|
572
|
-
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
573
|
-
className: "font-medium",
|
|
574
|
-
children: W.title
|
|
575
|
-
}), /* @__PURE__ */ y("p", {
|
|
576
|
-
className: "text-sm text-text-secondary",
|
|
577
|
-
children: ["by ", W.providerName]
|
|
578
|
-
})] }),
|
|
579
|
-
/* @__PURE__ */ y("div", {
|
|
580
|
-
className: "space-y-2",
|
|
581
|
-
children: [/* @__PURE__ */ v("p", {
|
|
582
|
-
className: "text-sm font-medium",
|
|
583
|
-
children: "Select Package"
|
|
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"}`,
|
|
588
|
-
children: [/* @__PURE__ */ y("div", {
|
|
589
|
-
className: "flex items-center justify-between",
|
|
590
|
-
children: [/* @__PURE__ */ v("span", {
|
|
591
|
-
className: "font-medium",
|
|
592
|
-
children: e.name
|
|
593
|
-
}), /* @__PURE__ */ y("span", {
|
|
594
|
-
className: "font-bold tabular-nums",
|
|
595
|
-
children: ["$", e.price.toLocaleString()]
|
|
596
|
-
})]
|
|
597
|
-
}), /* @__PURE__ */ y("p", {
|
|
598
|
-
className: "text-xs text-text-secondary",
|
|
599
|
-
children: [
|
|
600
|
-
e.description,
|
|
601
|
-
" - ",
|
|
602
|
-
e.duration,
|
|
603
|
-
" days"
|
|
604
|
-
]
|
|
605
|
-
})]
|
|
606
|
-
}, e.id))]
|
|
607
|
-
}),
|
|
608
|
-
/* @__PURE__ */ y("div", {
|
|
609
|
-
className: "flex gap-2",
|
|
610
|
-
children: [/* @__PURE__ */ v(x, {
|
|
611
|
-
variant: "outline",
|
|
612
|
-
className: "flex-1",
|
|
613
|
-
onClick: () => V(!1),
|
|
614
|
-
children: "Cancel"
|
|
615
|
-
}), /* @__PURE__ */ v(x, {
|
|
616
|
-
className: "flex-1",
|
|
617
|
-
disabled: !H,
|
|
618
|
-
children: "Confirm Booking"
|
|
619
|
-
})]
|
|
620
|
-
})
|
|
621
|
-
]
|
|
622
|
-
})]
|
|
623
|
-
})
|
|
624
|
-
})
|
|
625
|
-
]
|
|
626
|
-
});
|
|
627
|
-
}
|
|
628
|
-
//#endregion
|
|
629
|
-
export { M as ServiceDetailsPage };
|
|
630
|
-
|
|
631
|
-
//# sourceMappingURL=ServiceDetailsPage.js.map
|