@burdenoff/microfe-proserviceworld 2026.512.1 → 2026.624.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 +28 -28
- package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -1
- package/dist/proserviceworld/pages/AdminUsersPage.js +19 -19
- package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -1
- package/dist/proserviceworld/pages/AnalyticsPage.js +27 -27
- package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
- package/dist/proserviceworld/pages/BookingsPage.js +24 -24
- package/dist/proserviceworld/pages/BookingsPage.js.map +1 -1
- package/dist/proserviceworld/pages/DashboardPage.js +33 -33
- package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
- package/dist/proserviceworld/pages/DocumentsPage.js +29 -29
- package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
- package/dist/proserviceworld/pages/MessagesPage.js +15 -15
- package/dist/proserviceworld/pages/MessagesPage.js.map +1 -1
- package/dist/proserviceworld/pages/PaymentsPage.js +19 -19
- package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProjectsPage.js +36 -36
- package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProviderDetailPage.js +36 -36
- package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProvidersPage.js +19 -19
- package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -1
- package/dist/proserviceworld/pages/ReviewsPage.js +22 -22
- package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ServiceDetailsPage.js +35 -35
- package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ServicesPage.js +14 -14
- package/dist/proserviceworld/pages/ServicesPage.js.map +1 -1
- package/dist/proserviceworld/pages/VerificationPage.js +23 -23
- package/dist/proserviceworld/pages/VerificationPage.js.map +1 -1
- package/package.json +1 -1
- package/dist/dev/main.d.ts +0 -2
- package/dist/dev/main.d.ts.map +0 -1
- package/dist/generated/global-operations.d.ts +0 -2
- package/dist/generated/global-operations.d.ts.map +0 -1
- package/dist/generated/global-types.d.ts +0 -18199
- package/dist/generated/global-types.d.ts.map +0 -1
- package/dist/generated/wspace-operations.d.ts +0 -2
- package/dist/generated/wspace-operations.d.ts.map +0 -1
- package/dist/generated/wspace-types.d.ts +0 -43046
- package/dist/generated/wspace-types.d.ts.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/proserviceworld/ProServiceWorldRoot.d.ts +0 -5
- package/dist/proserviceworld/ProServiceWorldRoot.d.ts.map +0 -1
- package/dist/proserviceworld/ProServiceWorldRoutes.d.ts +0 -2
- package/dist/proserviceworld/ProServiceWorldRoutes.d.ts.map +0 -1
- package/dist/proserviceworld/index.d.ts +0 -5
- package/dist/proserviceworld/index.d.ts.map +0 -1
- package/dist/proserviceworld/pages/AdminReportsPage.d.ts +0 -2
- package/dist/proserviceworld/pages/AdminReportsPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/AdminUsersPage.d.ts +0 -2
- package/dist/proserviceworld/pages/AdminUsersPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/AnalyticsPage.d.ts +0 -2
- package/dist/proserviceworld/pages/AnalyticsPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/BookingsPage.d.ts +0 -2
- package/dist/proserviceworld/pages/BookingsPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/DashboardPage.d.ts +0 -2
- package/dist/proserviceworld/pages/DashboardPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/DocumentsPage.d.ts +0 -2
- package/dist/proserviceworld/pages/DocumentsPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/MessagesPage.d.ts +0 -2
- package/dist/proserviceworld/pages/MessagesPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/PaymentsPage.d.ts +0 -2
- package/dist/proserviceworld/pages/PaymentsPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/ProjectsPage.d.ts +0 -2
- package/dist/proserviceworld/pages/ProjectsPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/ProviderDetailPage.d.ts +0 -2
- package/dist/proserviceworld/pages/ProviderDetailPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/ProvidersPage.d.ts +0 -2
- package/dist/proserviceworld/pages/ProvidersPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/ReviewsPage.d.ts +0 -2
- package/dist/proserviceworld/pages/ReviewsPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/ServiceDetailsPage.d.ts +0 -2
- package/dist/proserviceworld/pages/ServiceDetailsPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/ServicesPage.d.ts +0 -2
- package/dist/proserviceworld/pages/ServicesPage.d.ts.map +0 -1
- package/dist/proserviceworld/pages/VerificationPage.d.ts +0 -2
- package/dist/proserviceworld/pages/VerificationPage.d.ts.map +0 -1
- package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts +0 -6
- package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts.map +0 -1
- package/dist/proserviceworld/store/proserviceworldStore.d.ts +0 -32
- package/dist/proserviceworld/store/proserviceworldStore.d.ts.map +0 -1
- package/dist/proserviceworld/types/index.d.ts +0 -338
- package/dist/proserviceworld/types/index.d.ts.map +0 -1
- package/dist/proserviceworld/utils/cn.d.ts +0 -4
- package/dist/proserviceworld/utils/cn.d.ts.map +0 -1
- package/dist/proserviceworld/utils/i18n.d.ts +0 -6
- package/dist/proserviceworld/utils/i18n.d.ts.map +0 -1
- package/dist/proserviceworld/utils/navigation.d.ts +0 -2
- package/dist/proserviceworld/utils/navigation.d.ts.map +0 -1
|
@@ -31,7 +31,7 @@ function b() {
|
|
|
31
31
|
children: /* @__PURE__ */ p("div", {
|
|
32
32
|
className: "flex items-start space-x-6",
|
|
33
33
|
children: [/* @__PURE__ */ f("div", {
|
|
34
|
-
className: "h-20 w-20 rounded-full bg-primary/10 flex items-center justify-center shrink-0",
|
|
34
|
+
className: "h-20 w-20 rounded-full bg-action-primary-bg/10 flex items-center justify-center shrink-0",
|
|
35
35
|
children: /* @__PURE__ */ p("span", {
|
|
36
36
|
className: "text-primary text-2xl font-bold",
|
|
37
37
|
children: [T.name.charAt(0), T.name.split(" ")[1]?.charAt(0)]
|
|
@@ -50,11 +50,11 @@ function b() {
|
|
|
50
50
|
})]
|
|
51
51
|
}),
|
|
52
52
|
/* @__PURE__ */ f("p", {
|
|
53
|
-
className: "text-
|
|
53
|
+
className: "text-text-secondary mb-2",
|
|
54
54
|
children: T.name
|
|
55
55
|
}),
|
|
56
56
|
/* @__PURE__ */ f("p", {
|
|
57
|
-
className: "text-sm text-
|
|
57
|
+
className: "text-sm text-text-secondary mb-4",
|
|
58
58
|
children: T.tagline
|
|
59
59
|
}),
|
|
60
60
|
/* @__PURE__ */ p("div", {
|
|
@@ -69,7 +69,7 @@ function b() {
|
|
|
69
69
|
children: T.rating.toFixed(1)
|
|
70
70
|
}),
|
|
71
71
|
/* @__PURE__ */ p("span", {
|
|
72
|
-
className: "text-
|
|
72
|
+
className: "text-text-secondary ml-1",
|
|
73
73
|
children: [
|
|
74
74
|
"(",
|
|
75
75
|
T.totalReviews,
|
|
@@ -79,11 +79,11 @@ function b() {
|
|
|
79
79
|
]
|
|
80
80
|
}),
|
|
81
81
|
/* @__PURE__ */ p("div", {
|
|
82
|
-
className: "flex items-center text-
|
|
82
|
+
className: "flex items-center text-text-secondary",
|
|
83
83
|
children: [/* @__PURE__ */ f(s, { className: "h-4 w-4 mr-1" }), T.location]
|
|
84
84
|
}),
|
|
85
85
|
/* @__PURE__ */ p("div", {
|
|
86
|
-
className: "flex items-center text-
|
|
86
|
+
className: "flex items-center text-text-secondary",
|
|
87
87
|
children: [
|
|
88
88
|
/* @__PURE__ */ f(r, { className: "h-4 w-4 mr-1" }),
|
|
89
89
|
T.yearsExperience,
|
|
@@ -109,7 +109,7 @@ function b() {
|
|
|
109
109
|
"/hr"
|
|
110
110
|
]
|
|
111
111
|
}), /* @__PURE__ */ f("p", {
|
|
112
|
-
className: "text-sm text-
|
|
112
|
+
className: "text-sm text-text-secondary",
|
|
113
113
|
children: "Starting rate"
|
|
114
114
|
})]
|
|
115
115
|
}),
|
|
@@ -131,42 +131,42 @@ function b() {
|
|
|
131
131
|
className: "grid grid-cols-2 gap-4 text-sm pt-4 border-t",
|
|
132
132
|
children: [
|
|
133
133
|
/* @__PURE__ */ p("div", {
|
|
134
|
-
className: "text-center p-3 bg-
|
|
134
|
+
className: "text-center p-3 bg-bg-sunken rounded",
|
|
135
135
|
children: [/* @__PURE__ */ p("div", {
|
|
136
136
|
className: "font-semibold",
|
|
137
137
|
children: [T.responseTime, "h"]
|
|
138
138
|
}), /* @__PURE__ */ f("div", {
|
|
139
|
-
className: "text-
|
|
139
|
+
className: "text-text-secondary",
|
|
140
140
|
children: "Response"
|
|
141
141
|
})]
|
|
142
142
|
}),
|
|
143
143
|
/* @__PURE__ */ p("div", {
|
|
144
|
-
className: "text-center p-3 bg-
|
|
144
|
+
className: "text-center p-3 bg-bg-sunken rounded",
|
|
145
145
|
children: [/* @__PURE__ */ p("div", {
|
|
146
146
|
className: "font-semibold",
|
|
147
147
|
children: [T.completionRate, "%"]
|
|
148
148
|
}), /* @__PURE__ */ f("div", {
|
|
149
|
-
className: "text-
|
|
149
|
+
className: "text-text-secondary",
|
|
150
150
|
children: "Completion"
|
|
151
151
|
})]
|
|
152
152
|
}),
|
|
153
153
|
/* @__PURE__ */ p("div", {
|
|
154
|
-
className: "text-center p-3 bg-
|
|
154
|
+
className: "text-center p-3 bg-bg-sunken rounded",
|
|
155
155
|
children: [/* @__PURE__ */ f("div", {
|
|
156
156
|
className: "font-semibold",
|
|
157
157
|
children: T.projectsCompleted
|
|
158
158
|
}), /* @__PURE__ */ f("div", {
|
|
159
|
-
className: "text-
|
|
159
|
+
className: "text-text-secondary",
|
|
160
160
|
children: "Projects"
|
|
161
161
|
})]
|
|
162
162
|
}),
|
|
163
163
|
/* @__PURE__ */ p("div", {
|
|
164
|
-
className: "text-center p-3 bg-
|
|
164
|
+
className: "text-center p-3 bg-bg-sunken rounded",
|
|
165
165
|
children: [/* @__PURE__ */ f("div", {
|
|
166
166
|
className: "font-semibold",
|
|
167
167
|
children: T.activeProjects
|
|
168
168
|
}), /* @__PURE__ */ f("div", {
|
|
169
|
-
className: "text-
|
|
169
|
+
className: "text-text-secondary",
|
|
170
170
|
children: "Active"
|
|
171
171
|
})]
|
|
172
172
|
})
|
|
@@ -181,7 +181,7 @@ function b() {
|
|
|
181
181
|
className: "-mb-px flex space-x-8",
|
|
182
182
|
children: O.map((e) => /* @__PURE__ */ f("button", {
|
|
183
183
|
onClick: () => w(e.id),
|
|
184
|
-
className: `py-3 px-1 border-b-2 font-medium text-sm transition-colors ${C === e.id ? "border-primary text-primary" : "border-transparent text-
|
|
184
|
+
className: `py-3 px-1 border-b-2 font-medium text-sm transition-colors ${C === e.id ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary"}`,
|
|
185
185
|
children: e.label
|
|
186
186
|
}, e.id))
|
|
187
187
|
})
|
|
@@ -192,7 +192,7 @@ function b() {
|
|
|
192
192
|
className: "lg:col-span-2 space-y-6",
|
|
193
193
|
children: [
|
|
194
194
|
/* @__PURE__ */ p(g, { children: [/* @__PURE__ */ f(v, { children: /* @__PURE__ */ f(y, { children: "About" }) }), /* @__PURE__ */ f(_, { children: /* @__PURE__ */ f("p", {
|
|
195
|
-
className: "text-
|
|
195
|
+
className: "text-text-secondary",
|
|
196
196
|
children: T.description
|
|
197
197
|
}) })] }),
|
|
198
198
|
/* @__PURE__ */ p(g, { children: [/* @__PURE__ */ f(v, { children: /* @__PURE__ */ f(y, { children: "Specializations" }) }), /* @__PURE__ */ f(_, { children: /* @__PURE__ */ f("div", {
|
|
@@ -218,21 +218,21 @@ function b() {
|
|
|
218
218
|
/* @__PURE__ */ p("div", {
|
|
219
219
|
className: "flex justify-between",
|
|
220
220
|
children: [/* @__PURE__ */ f("span", {
|
|
221
|
-
className: "text-
|
|
221
|
+
className: "text-text-secondary",
|
|
222
222
|
children: "Location"
|
|
223
223
|
}), /* @__PURE__ */ f("span", { children: T.location })]
|
|
224
224
|
}),
|
|
225
225
|
/* @__PURE__ */ p("div", {
|
|
226
226
|
className: "flex justify-between",
|
|
227
227
|
children: [/* @__PURE__ */ f("span", {
|
|
228
|
-
className: "text-
|
|
228
|
+
className: "text-text-secondary",
|
|
229
229
|
children: "Languages"
|
|
230
230
|
}), /* @__PURE__ */ f("span", { children: T.languages.join(", ") })]
|
|
231
231
|
}),
|
|
232
232
|
/* @__PURE__ */ p("div", {
|
|
233
233
|
className: "flex justify-between",
|
|
234
234
|
children: [/* @__PURE__ */ f("span", {
|
|
235
|
-
className: "text-
|
|
235
|
+
className: "text-text-secondary",
|
|
236
236
|
children: "Member Since"
|
|
237
237
|
}), /* @__PURE__ */ f("span", { children: new Date(T.joinedDate).toLocaleDateString("en-US", {
|
|
238
238
|
month: "short",
|
|
@@ -242,7 +242,7 @@ function b() {
|
|
|
242
242
|
/* @__PURE__ */ p("div", {
|
|
243
243
|
className: "flex justify-between",
|
|
244
244
|
children: [/* @__PURE__ */ f("span", {
|
|
245
|
-
className: "text-
|
|
245
|
+
className: "text-text-secondary",
|
|
246
246
|
children: "Category"
|
|
247
247
|
}), /* @__PURE__ */ f("span", {
|
|
248
248
|
className: "capitalize",
|
|
@@ -256,7 +256,7 @@ function b() {
|
|
|
256
256
|
className: "flex items-center gap-3",
|
|
257
257
|
children: [
|
|
258
258
|
/* @__PURE__ */ f("div", {
|
|
259
|
-
className: "h-8 w-8 rounded-full bg-
|
|
259
|
+
className: "h-8 w-8 rounded-full bg-bg-sunken flex items-center justify-center text-xs font-medium",
|
|
260
260
|
children: e.name.charAt(0)
|
|
261
261
|
}),
|
|
262
262
|
/* @__PURE__ */ p("div", {
|
|
@@ -265,7 +265,7 @@ function b() {
|
|
|
265
265
|
className: "text-sm font-medium truncate",
|
|
266
266
|
children: e.businessName
|
|
267
267
|
}), /* @__PURE__ */ f("p", {
|
|
268
|
-
className: "text-xs text-
|
|
268
|
+
className: "text-xs text-text-secondary",
|
|
269
269
|
children: e.specializations[0]
|
|
270
270
|
})]
|
|
271
271
|
}),
|
|
@@ -290,7 +290,7 @@ function b() {
|
|
|
290
290
|
children: e.title
|
|
291
291
|
}),
|
|
292
292
|
/* @__PURE__ */ f("p", {
|
|
293
|
-
className: "text-sm text-
|
|
293
|
+
className: "text-sm text-text-secondary mb-3 line-clamp-2",
|
|
294
294
|
children: e.description
|
|
295
295
|
}),
|
|
296
296
|
/* @__PURE__ */ f("div", {
|
|
@@ -307,7 +307,7 @@ function b() {
|
|
|
307
307
|
className: "font-medium",
|
|
308
308
|
children: ["From $", e.pricing.basePrice.toLocaleString()]
|
|
309
309
|
}), /* @__PURE__ */ p("span", {
|
|
310
|
-
className: "text-sm text-
|
|
310
|
+
className: "text-sm text-text-secondary",
|
|
311
311
|
children: [e.duration.typical, " days"]
|
|
312
312
|
})]
|
|
313
313
|
}),
|
|
@@ -321,8 +321,8 @@ function b() {
|
|
|
321
321
|
})
|
|
322
322
|
}, e.id)) : /* @__PURE__ */ p("div", {
|
|
323
323
|
className: "col-span-full text-center py-12",
|
|
324
|
-
children: [/* @__PURE__ */ f(o, { className: "h-12 w-12 mx-auto text-
|
|
325
|
-
className: "text-
|
|
324
|
+
children: [/* @__PURE__ */ f(o, { className: "h-12 w-12 mx-auto text-text-secondary mb-4" }), /* @__PURE__ */ f("p", {
|
|
325
|
+
className: "text-text-secondary",
|
|
326
326
|
children: "No services listed yet"
|
|
327
327
|
})]
|
|
328
328
|
})
|
|
@@ -348,10 +348,10 @@ function b() {
|
|
|
348
348
|
3,
|
|
349
349
|
4,
|
|
350
350
|
5
|
|
351
|
-
].map((e) => /* @__PURE__ */ f(u, { className: `h-4 w-4 ${e <= Math.round(T.rating) ? "text-yellow-400 fill-current" : "text-
|
|
351
|
+
].map((e) => /* @__PURE__ */ f(u, { className: `h-4 w-4 ${e <= Math.round(T.rating) ? "text-yellow-400 fill-current" : "text-text-secondary"}` }, e))
|
|
352
352
|
}),
|
|
353
353
|
/* @__PURE__ */ p("p", {
|
|
354
|
-
className: "text-sm text-
|
|
354
|
+
className: "text-sm text-text-secondary mt-1",
|
|
355
355
|
children: [T.totalReviews, " reviews"]
|
|
356
356
|
})
|
|
357
357
|
]
|
|
@@ -374,14 +374,14 @@ function b() {
|
|
|
374
374
|
}),
|
|
375
375
|
/* @__PURE__ */ f(u, { className: "h-3 w-3 text-yellow-400 fill-current" }),
|
|
376
376
|
/* @__PURE__ */ f("div", {
|
|
377
|
-
className: "flex-1 bg-
|
|
377
|
+
className: "flex-1 bg-bg-sunken rounded-full h-2",
|
|
378
378
|
children: /* @__PURE__ */ f("div", {
|
|
379
379
|
className: "bg-yellow-400 h-2 rounded-full",
|
|
380
380
|
style: { width: `${n}%` }
|
|
381
381
|
})
|
|
382
382
|
}),
|
|
383
383
|
/* @__PURE__ */ f("span", {
|
|
384
|
-
className: "text-sm text-
|
|
384
|
+
className: "text-sm text-text-secondary w-6 text-right",
|
|
385
385
|
children: t
|
|
386
386
|
})
|
|
387
387
|
]
|
|
@@ -395,7 +395,7 @@ function b() {
|
|
|
395
395
|
/* @__PURE__ */ p("div", {
|
|
396
396
|
className: "flex items-center gap-3 mb-3",
|
|
397
397
|
children: [/* @__PURE__ */ f("div", {
|
|
398
|
-
className: "h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center",
|
|
398
|
+
className: "h-10 w-10 rounded-full bg-action-primary-bg/10 flex items-center justify-center",
|
|
399
399
|
children: /* @__PURE__ */ f("span", {
|
|
400
400
|
className: "text-primary font-medium",
|
|
401
401
|
children: e.clientName.charAt(0)
|
|
@@ -413,10 +413,10 @@ function b() {
|
|
|
413
413
|
3,
|
|
414
414
|
4,
|
|
415
415
|
5
|
|
416
|
-
].map((t) => /* @__PURE__ */ f(u, { className: `h-3 w-3 ${t <= e.rating ? "text-yellow-400 fill-current" : "text-
|
|
416
|
+
].map((t) => /* @__PURE__ */ f(u, { className: `h-3 w-3 ${t <= e.rating ? "text-yellow-400 fill-current" : "text-text-secondary"}` }, t))
|
|
417
417
|
})]
|
|
418
418
|
}), /* @__PURE__ */ p("p", {
|
|
419
|
-
className: "text-xs text-
|
|
419
|
+
className: "text-xs text-text-secondary",
|
|
420
420
|
children: [
|
|
421
421
|
e.serviceName,
|
|
422
422
|
" -",
|
|
@@ -430,11 +430,11 @@ function b() {
|
|
|
430
430
|
})] })]
|
|
431
431
|
}),
|
|
432
432
|
/* @__PURE__ */ f("p", {
|
|
433
|
-
className: "text-sm text-
|
|
433
|
+
className: "text-sm text-text-secondary mb-3",
|
|
434
434
|
children: e.comment
|
|
435
435
|
}),
|
|
436
436
|
/* @__PURE__ */ p("div", {
|
|
437
|
-
className: "flex gap-4 text-xs text-
|
|
437
|
+
className: "flex gap-4 text-xs text-text-secondary",
|
|
438
438
|
children: [
|
|
439
439
|
/* @__PURE__ */ p("span", { children: ["Value: $", e.projectValue.toLocaleString()] }),
|
|
440
440
|
/* @__PURE__ */ p("span", { children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderDetailPage.js","names":[],"sources":["../../../src/proserviceworld/pages/ProviderDetailPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Badge } from '@burdenoff/fe-libs/ui';\nimport {\n Star,\n CheckCircle,\n Clock,\n MapPin,\n Briefcase,\n Globe,\n Award,\n MessageSquare,\n Share2,\n Calendar,\n Users,\n} from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\n\ntype DetailTab = 'overview' | 'services' | 'reviews';\n\nexport function ProviderDetailPage() {\n const { providers, services, reviews } = useProServiceWorldStore();\n const [activeTab, setActiveTab] = useState<DetailTab>('overview');\n\n const provider = providers[0];\n const providerServices = services.filter((s) => s.providerId === provider.id);\n const providerReviews = reviews.filter((r) => r.providerName === provider.name);\n\n const tabs: { id: DetailTab; label: string }[] = [\n { id: 'overview', label: 'Overview' },\n { id: 'services', label: `Services (${providerServices.length})` },\n { id: 'reviews', label: `Reviews (${providerReviews.length})` },\n ];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-start space-x-6\">\n <div className=\"h-20 w-20 rounded-full bg-primary/10 flex items-center justify-center shrink-0\">\n <span className=\"text-primary text-2xl font-bold\">\n {provider.name.charAt(0)}\n {provider.name.split(' ')[1]?.charAt(0)}\n </span>\n </div>\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-3 mb-1\">\n <h1 className=\"text-2xl font-bold\">{provider.businessName}</h1>\n {provider.verified && (\n <Badge variant=\"default\">\n <CheckCircle className=\"h-3 w-3 mr-1\" />\n Verified\n </Badge>\n )}\n </div>\n <p className=\"text-muted-foreground mb-2\">{provider.name}</p>\n <p className=\"text-sm text-muted-foreground mb-4\">{provider.tagline}</p>\n <div className=\"flex items-center gap-4 text-sm\">\n <div className=\"flex items-center\">\n <Star className=\"h-4 w-4 text-yellow-400 fill-current mr-1\" />\n <span className=\"font-medium\">{provider.rating.toFixed(1)}</span>\n <span className=\"text-muted-foreground ml-1\">\n ({provider.totalReviews} reviews)\n </span>\n </div>\n <div className=\"flex items-center text-muted-foreground\">\n <MapPin className=\"h-4 w-4 mr-1\" />\n {provider.location}\n </div>\n <div className=\"flex items-center text-muted-foreground\">\n <Briefcase className=\"h-4 w-4 mr-1\" />\n {provider.yearsExperience} years\n </div>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardContent className=\"p-6 space-y-4\">\n <div className=\"text-center\">\n <div className=\"text-2xl font-bold\">${provider.hourlyRate}/hr</div>\n <p className=\"text-sm text-muted-foreground\">Starting rate</p>\n </div>\n <Button className=\"w-full\">\n <MessageSquare className=\"h-4 w-4 mr-2\" />\n Contact Provider\n </Button>\n <Button variant=\"outline\" className=\"w-full\">\n <Calendar className=\"h-4 w-4 mr-2\" />\n Book Consultation\n </Button>\n <Button variant=\"ghost\" className=\"w-full\">\n <Share2 className=\"h-4 w-4 mr-2\" />\n Share Profile\n </Button>\n <div className=\"grid grid-cols-2 gap-4 text-sm pt-4 border-t\">\n <div className=\"text-center p-3 bg-muted rounded\">\n <div className=\"font-semibold\">{provider.responseTime}h</div>\n <div className=\"text-muted-foreground\">Response</div>\n </div>\n <div className=\"text-center p-3 bg-muted rounded\">\n <div className=\"font-semibold\">{provider.completionRate}%</div>\n <div className=\"text-muted-foreground\">Completion</div>\n </div>\n <div className=\"text-center p-3 bg-muted rounded\">\n <div className=\"font-semibold\">{provider.projectsCompleted}</div>\n <div className=\"text-muted-foreground\">Projects</div>\n </div>\n <div className=\"text-center p-3 bg-muted rounded\">\n <div className=\"font-semibold\">{provider.activeProjects}</div>\n <div className=\"text-muted-foreground\">Active</div>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"border-b\">\n <nav className=\"-mb-px flex space-x-8\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={`py-3 px-1 border-b-2 font-medium text-sm transition-colors ${activeTab === tab.id ? 'border-primary text-primary' : 'border-transparent text-muted-foreground hover:text-foreground'}`}\n >\n {tab.label}\n </button>\n ))}\n </nav>\n </div>\n\n {activeTab === 'overview' && (\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>About</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-muted-foreground\">{provider.description}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Specializations</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-wrap gap-2\">\n {provider.specializations.map((s) => (\n <Badge key={s} variant=\"secondary\">\n {s}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Certifications</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {provider.certifications.map((c) => (\n <div key={c} className=\"flex items-center gap-3\">\n <Award className=\"h-5 w-5 text-blue-600\" />\n <span>{c}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Location</span>\n <span>{provider.location}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Languages</span>\n <span>{provider.languages.join(', ')}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Member Since</span>\n <span>\n {new Date(provider.joinedDate).toLocaleDateString('en-US', {\n month: 'short',\n year: 'numeric',\n })}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Category</span>\n <span className=\"capitalize\">{provider.category.replace('_', ' ')}</span>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Similar Providers</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {providers\n .filter((p) => p.id !== provider.id)\n .slice(0, 3)\n .map((p) => (\n <div key={p.id} className=\"flex items-center gap-3\">\n <div className=\"h-8 w-8 rounded-full bg-muted flex items-center justify-center text-xs font-medium\">\n {p.name.charAt(0)}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{p.businessName}</p>\n <p className=\"text-xs text-muted-foreground\">{p.specializations[0]}</p>\n </div>\n <div className=\"flex items-center text-xs\">\n <Star className=\"h-3 w-3 text-yellow-400 fill-current mr-0.5\" />\n {p.rating.toFixed(1)}\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n </div>\n )}\n\n {activeTab === 'services' && (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {providerServices.length > 0 ? (\n providerServices.map((svc) => (\n <Card key={svc.id} className=\"hover:shadow-md transition-shadow\">\n <CardContent className=\"p-6\">\n <h3 className=\"font-semibold mb-2\">{svc.title}</h3>\n <p className=\"text-sm text-muted-foreground mb-3 line-clamp-2\">\n {svc.description}\n </p>\n <div className=\"flex flex-wrap gap-1 mb-3\">\n {svc.tags.slice(0, 3).map((t) => (\n <Badge key={t} variant=\"outline\" className=\"text-xs\">\n {t}\n </Badge>\n ))}\n </div>\n <div className=\"flex justify-between border-t pt-3\">\n <span className=\"font-medium\">\n From ${svc.pricing.basePrice.toLocaleString()}\n </span>\n <span className=\"text-sm text-muted-foreground\">\n {svc.duration.typical} days\n </span>\n </div>\n <Button variant=\"outline\" size=\"sm\" className=\"w-full mt-3\">\n View Details\n </Button>\n </CardContent>\n </Card>\n ))\n ) : (\n <div className=\"col-span-full text-center py-12\">\n <Globe className=\"h-12 w-12 mx-auto text-muted-foreground mb-4\" />\n <p className=\"text-muted-foreground\">No services listed yet</p>\n </div>\n )}\n </div>\n )}\n\n {activeTab === 'reviews' && (\n <div className=\"space-y-4\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center gap-8\">\n <div className=\"text-center\">\n <div className=\"text-4xl font-bold\">{provider.rating.toFixed(1)}</div>\n <div className=\"flex justify-center mt-1\">\n {[1, 2, 3, 4, 5].map((s) => (\n <Star\n key={s}\n className={`h-4 w-4 ${s <= Math.round(provider.rating) ? 'text-yellow-400 fill-current' : 'text-muted-foreground'}`}\n />\n ))}\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {provider.totalReviews} reviews\n </p>\n </div>\n <div className=\"flex-1 space-y-1\">\n {[5, 4, 3, 2, 1].map((r) => {\n const c = providerReviews.filter((rv) => Math.round(rv.rating) === r).length;\n const p = providerReviews.length > 0 ? (c / providerReviews.length) * 100 : 0;\n return (\n <div key={r} className=\"flex items-center gap-2\">\n <span className=\"text-sm w-3\">{r}</span>\n <Star className=\"h-3 w-3 text-yellow-400 fill-current\" />\n <div className=\"flex-1 bg-muted rounded-full h-2\">\n <div\n className=\"bg-yellow-400 h-2 rounded-full\"\n style={{ width: `${p}%` }}\n />\n </div>\n <span className=\"text-sm text-muted-foreground w-6 text-right\">{c}</span>\n </div>\n );\n })}\n </div>\n </div>\n </CardContent>\n </Card>\n {providerReviews.map((rev) => (\n <Card key={rev.id}>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center\">\n <span className=\"text-primary font-medium\">{rev.clientName.charAt(0)}</span>\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{rev.clientName}</span>\n <div className=\"flex\">\n {[1, 2, 3, 4, 5].map((s) => (\n <Star\n key={s}\n className={`h-3 w-3 ${s <= rev.rating ? 'text-yellow-400 fill-current' : 'text-muted-foreground'}`}\n />\n ))}\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {rev.serviceName} -{' '}\n {new Date(rev.createdAt).toLocaleDateString('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n })}\n </p>\n </div>\n </div>\n <p className=\"text-sm text-muted-foreground mb-3\">{rev.comment}</p>\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span>Value: ${rev.projectValue.toLocaleString()}</span>\n <span>Duration: {rev.projectDuration} days</span>\n <span className=\"flex items-center\">\n <Users className=\"h-3 w-3 mr-1\" />\n {rev.helpful} helpful\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProviderDetailPage.js","names":[],"sources":["../../../src/proserviceworld/pages/ProviderDetailPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Badge } from '@burdenoff/fe-libs/ui';\nimport {\n Star,\n CheckCircle,\n Clock,\n MapPin,\n Briefcase,\n Globe,\n Award,\n MessageSquare,\n Share2,\n Calendar,\n Users,\n} from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\n\ntype DetailTab = 'overview' | 'services' | 'reviews';\n\nexport function ProviderDetailPage() {\n const { providers, services, reviews } = useProServiceWorldStore();\n const [activeTab, setActiveTab] = useState<DetailTab>('overview');\n\n const provider = providers[0];\n const providerServices = services.filter((s) => s.providerId === provider.id);\n const providerReviews = reviews.filter((r) => r.providerName === provider.name);\n\n const tabs: { id: DetailTab; label: string }[] = [\n { id: 'overview', label: 'Overview' },\n { id: 'services', label: `Services (${providerServices.length})` },\n { id: 'reviews', label: `Reviews (${providerReviews.length})` },\n ];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-start space-x-6\">\n <div className=\"h-20 w-20 rounded-full bg-action-primary-bg/10 flex items-center justify-center shrink-0\">\n <span className=\"text-primary text-2xl font-bold\">\n {provider.name.charAt(0)}\n {provider.name.split(' ')[1]?.charAt(0)}\n </span>\n </div>\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-3 mb-1\">\n <h1 className=\"text-2xl font-bold\">{provider.businessName}</h1>\n {provider.verified && (\n <Badge variant=\"default\">\n <CheckCircle className=\"h-3 w-3 mr-1\" />\n Verified\n </Badge>\n )}\n </div>\n <p className=\"text-text-secondary mb-2\">{provider.name}</p>\n <p className=\"text-sm text-text-secondary mb-4\">{provider.tagline}</p>\n <div className=\"flex items-center gap-4 text-sm\">\n <div className=\"flex items-center\">\n <Star className=\"h-4 w-4 text-yellow-400 fill-current mr-1\" />\n <span className=\"font-medium\">{provider.rating.toFixed(1)}</span>\n <span className=\"text-text-secondary ml-1\">\n ({provider.totalReviews} reviews)\n </span>\n </div>\n <div className=\"flex items-center text-text-secondary\">\n <MapPin className=\"h-4 w-4 mr-1\" />\n {provider.location}\n </div>\n <div className=\"flex items-center text-text-secondary\">\n <Briefcase className=\"h-4 w-4 mr-1\" />\n {provider.yearsExperience} years\n </div>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardContent className=\"p-6 space-y-4\">\n <div className=\"text-center\">\n <div className=\"text-2xl font-bold\">${provider.hourlyRate}/hr</div>\n <p className=\"text-sm text-text-secondary\">Starting rate</p>\n </div>\n <Button className=\"w-full\">\n <MessageSquare className=\"h-4 w-4 mr-2\" />\n Contact Provider\n </Button>\n <Button variant=\"outline\" className=\"w-full\">\n <Calendar className=\"h-4 w-4 mr-2\" />\n Book Consultation\n </Button>\n <Button variant=\"ghost\" className=\"w-full\">\n <Share2 className=\"h-4 w-4 mr-2\" />\n Share Profile\n </Button>\n <div className=\"grid grid-cols-2 gap-4 text-sm pt-4 border-t\">\n <div className=\"text-center p-3 bg-bg-sunken rounded\">\n <div className=\"font-semibold\">{provider.responseTime}h</div>\n <div className=\"text-text-secondary\">Response</div>\n </div>\n <div className=\"text-center p-3 bg-bg-sunken rounded\">\n <div className=\"font-semibold\">{provider.completionRate}%</div>\n <div className=\"text-text-secondary\">Completion</div>\n </div>\n <div className=\"text-center p-3 bg-bg-sunken rounded\">\n <div className=\"font-semibold\">{provider.projectsCompleted}</div>\n <div className=\"text-text-secondary\">Projects</div>\n </div>\n <div className=\"text-center p-3 bg-bg-sunken rounded\">\n <div className=\"font-semibold\">{provider.activeProjects}</div>\n <div className=\"text-text-secondary\">Active</div>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"border-b\">\n <nav className=\"-mb-px flex space-x-8\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={`py-3 px-1 border-b-2 font-medium text-sm transition-colors ${activeTab === tab.id ? 'border-primary text-primary' : 'border-transparent text-text-secondary hover:text-text-primary'}`}\n >\n {tab.label}\n </button>\n ))}\n </nav>\n </div>\n\n {activeTab === 'overview' && (\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>About</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-text-secondary\">{provider.description}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Specializations</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-wrap gap-2\">\n {provider.specializations.map((s) => (\n <Badge key={s} variant=\"secondary\">\n {s}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Certifications</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {provider.certifications.map((c) => (\n <div key={c} className=\"flex items-center gap-3\">\n <Award className=\"h-5 w-5 text-blue-600\" />\n <span>{c}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Location</span>\n <span>{provider.location}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Languages</span>\n <span>{provider.languages.join(', ')}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Member Since</span>\n <span>\n {new Date(provider.joinedDate).toLocaleDateString('en-US', {\n month: 'short',\n year: 'numeric',\n })}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Category</span>\n <span className=\"capitalize\">{provider.category.replace('_', ' ')}</span>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Similar Providers</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {providers\n .filter((p) => p.id !== provider.id)\n .slice(0, 3)\n .map((p) => (\n <div key={p.id} className=\"flex items-center gap-3\">\n <div className=\"h-8 w-8 rounded-full bg-bg-sunken flex items-center justify-center text-xs font-medium\">\n {p.name.charAt(0)}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{p.businessName}</p>\n <p className=\"text-xs text-text-secondary\">{p.specializations[0]}</p>\n </div>\n <div className=\"flex items-center text-xs\">\n <Star className=\"h-3 w-3 text-yellow-400 fill-current mr-0.5\" />\n {p.rating.toFixed(1)}\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n </div>\n )}\n\n {activeTab === 'services' && (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {providerServices.length > 0 ? (\n providerServices.map((svc) => (\n <Card key={svc.id} className=\"hover:shadow-md transition-shadow\">\n <CardContent className=\"p-6\">\n <h3 className=\"font-semibold mb-2\">{svc.title}</h3>\n <p className=\"text-sm text-text-secondary mb-3 line-clamp-2\">\n {svc.description}\n </p>\n <div className=\"flex flex-wrap gap-1 mb-3\">\n {svc.tags.slice(0, 3).map((t) => (\n <Badge key={t} variant=\"outline\" className=\"text-xs\">\n {t}\n </Badge>\n ))}\n </div>\n <div className=\"flex justify-between border-t pt-3\">\n <span className=\"font-medium\">\n From ${svc.pricing.basePrice.toLocaleString()}\n </span>\n <span className=\"text-sm text-text-secondary\">\n {svc.duration.typical} days\n </span>\n </div>\n <Button variant=\"outline\" size=\"sm\" className=\"w-full mt-3\">\n View Details\n </Button>\n </CardContent>\n </Card>\n ))\n ) : (\n <div className=\"col-span-full text-center py-12\">\n <Globe className=\"h-12 w-12 mx-auto text-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">No services listed yet</p>\n </div>\n )}\n </div>\n )}\n\n {activeTab === 'reviews' && (\n <div className=\"space-y-4\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center gap-8\">\n <div className=\"text-center\">\n <div className=\"text-4xl font-bold\">{provider.rating.toFixed(1)}</div>\n <div className=\"flex justify-center mt-1\">\n {[1, 2, 3, 4, 5].map((s) => (\n <Star\n key={s}\n className={`h-4 w-4 ${s <= Math.round(provider.rating) ? 'text-yellow-400 fill-current' : 'text-text-secondary'}`}\n />\n ))}\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">\n {provider.totalReviews} reviews\n </p>\n </div>\n <div className=\"flex-1 space-y-1\">\n {[5, 4, 3, 2, 1].map((r) => {\n const c = providerReviews.filter((rv) => Math.round(rv.rating) === r).length;\n const p = providerReviews.length > 0 ? (c / providerReviews.length) * 100 : 0;\n return (\n <div key={r} className=\"flex items-center gap-2\">\n <span className=\"text-sm w-3\">{r}</span>\n <Star className=\"h-3 w-3 text-yellow-400 fill-current\" />\n <div className=\"flex-1 bg-bg-sunken rounded-full h-2\">\n <div\n className=\"bg-yellow-400 h-2 rounded-full\"\n style={{ width: `${p}%` }}\n />\n </div>\n <span className=\"text-sm text-text-secondary w-6 text-right\">{c}</span>\n </div>\n );\n })}\n </div>\n </div>\n </CardContent>\n </Card>\n {providerReviews.map((rev) => (\n <Card key={rev.id}>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"h-10 w-10 rounded-full bg-action-primary-bg/10 flex items-center justify-center\">\n <span className=\"text-primary font-medium\">{rev.clientName.charAt(0)}</span>\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{rev.clientName}</span>\n <div className=\"flex\">\n {[1, 2, 3, 4, 5].map((s) => (\n <Star\n key={s}\n className={`h-3 w-3 ${s <= rev.rating ? 'text-yellow-400 fill-current' : 'text-text-secondary'}`}\n />\n ))}\n </div>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {rev.serviceName} -{' '}\n {new Date(rev.createdAt).toLocaleDateString('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n })}\n </p>\n </div>\n </div>\n <p className=\"text-sm text-text-secondary mb-3\">{rev.comment}</p>\n <div className=\"flex gap-4 text-xs text-text-secondary\">\n <span>Value: ${rev.projectValue.toLocaleString()}</span>\n <span>Duration: {rev.projectDuration} days</span>\n <span className=\"flex items-center\">\n <Users className=\"h-3 w-3 mr-1\" />\n {rev.helpful} helpful\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -86,7 +86,7 @@ function x() {
|
|
|
86
86
|
className: "text-2xl font-semibold",
|
|
87
87
|
children: S("proserviceworld.providers.title", "Service Providers")
|
|
88
88
|
}), /* @__PURE__ */ p("p", {
|
|
89
|
-
className: "text-sm text-
|
|
89
|
+
className: "text-sm text-text-secondary",
|
|
90
90
|
children: I
|
|
91
91
|
})] }), /* @__PURE__ */ m(g, {
|
|
92
92
|
variant: "outline",
|
|
@@ -98,7 +98,7 @@ function x() {
|
|
|
98
98
|
className: "flex gap-4",
|
|
99
99
|
children: /* @__PURE__ */ m("div", {
|
|
100
100
|
className: "flex-1 relative",
|
|
101
|
-
children: [/* @__PURE__ */ p(l, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-5 w-5 text-
|
|
101
|
+
children: [/* @__PURE__ */ p(l, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-5 w-5 text-text-secondary" }), /* @__PURE__ */ p(y, {
|
|
102
102
|
type: "text",
|
|
103
103
|
placeholder: S("proserviceworld.providers.search.placeholder", "Search providers by name, business, or specialization..."),
|
|
104
104
|
value: w,
|
|
@@ -118,7 +118,7 @@ function x() {
|
|
|
118
118
|
}), /* @__PURE__ */ p("select", {
|
|
119
119
|
value: E,
|
|
120
120
|
onChange: (e) => D(e.target.value),
|
|
121
|
-
className: "w-full p-2 border border-
|
|
121
|
+
className: "w-full p-2 border border-border-default rounded-md bg-bg-surface text-text-primary",
|
|
122
122
|
children: b.map((e) => /* @__PURE__ */ p("option", {
|
|
123
123
|
value: e.value,
|
|
124
124
|
children: S(e.key, e.fallback)
|
|
@@ -130,7 +130,7 @@ function x() {
|
|
|
130
130
|
}), /* @__PURE__ */ m("select", {
|
|
131
131
|
value: O,
|
|
132
132
|
onChange: (e) => k(e.target.value ? Number(e.target.value) : ""),
|
|
133
|
-
className: "w-full p-2 border border-
|
|
133
|
+
className: "w-full p-2 border border-border-default rounded-md bg-bg-surface text-text-primary",
|
|
134
134
|
children: [
|
|
135
135
|
/* @__PURE__ */ p("option", {
|
|
136
136
|
value: "",
|
|
@@ -173,7 +173,7 @@ function x() {
|
|
|
173
173
|
className: "flex items-center space-x-4 mb-4",
|
|
174
174
|
children: [
|
|
175
175
|
/* @__PURE__ */ p("div", {
|
|
176
|
-
className: "h-12 w-12 rounded-full bg-primary/10 flex items-center justify-center",
|
|
176
|
+
className: "h-12 w-12 rounded-full bg-action-primary-bg/10 flex items-center justify-center",
|
|
177
177
|
children: /* @__PURE__ */ p("span", {
|
|
178
178
|
className: "text-primary font-bold",
|
|
179
179
|
children: e.name.charAt(0)
|
|
@@ -185,7 +185,7 @@ function x() {
|
|
|
185
185
|
className: "font-semibold truncate",
|
|
186
186
|
children: e.businessName
|
|
187
187
|
}), /* @__PURE__ */ p("p", {
|
|
188
|
-
className: "text-sm text-
|
|
188
|
+
className: "text-sm text-text-secondary truncate",
|
|
189
189
|
children: e.name
|
|
190
190
|
})]
|
|
191
191
|
}),
|
|
@@ -193,7 +193,7 @@ function x() {
|
|
|
193
193
|
]
|
|
194
194
|
}),
|
|
195
195
|
/* @__PURE__ */ p("p", {
|
|
196
|
-
className: "text-sm text-
|
|
196
|
+
className: "text-sm text-text-secondary mb-3 line-clamp-2",
|
|
197
197
|
children: e.tagline
|
|
198
198
|
}),
|
|
199
199
|
/* @__PURE__ */ m("div", {
|
|
@@ -219,7 +219,7 @@ function x() {
|
|
|
219
219
|
children: e.rating.toFixed(1)
|
|
220
220
|
}),
|
|
221
221
|
/* @__PURE__ */ m("span", {
|
|
222
|
-
className: "text-
|
|
222
|
+
className: "text-text-secondary ml-1",
|
|
223
223
|
children: [
|
|
224
224
|
"(",
|
|
225
225
|
e.totalReviews,
|
|
@@ -228,12 +228,12 @@ function x() {
|
|
|
228
228
|
})
|
|
229
229
|
]
|
|
230
230
|
}), /* @__PURE__ */ m("div", {
|
|
231
|
-
className: "flex items-center text-
|
|
231
|
+
className: "flex items-center text-text-secondary",
|
|
232
232
|
children: [/* @__PURE__ */ p(c, { className: "h-3 w-3 mr-1" }), /* @__PURE__ */ p("span", { children: e.location })]
|
|
233
233
|
})]
|
|
234
234
|
}),
|
|
235
235
|
/* @__PURE__ */ m("div", {
|
|
236
|
-
className: "grid grid-cols-2 gap-2 text-xs text-
|
|
236
|
+
className: "grid grid-cols-2 gap-2 text-xs text-text-secondary border-t pt-3",
|
|
237
237
|
children: [/* @__PURE__ */ m("div", {
|
|
238
238
|
className: "flex items-center",
|
|
239
239
|
children: [/* @__PURE__ */ p(o, { className: "h-3 w-3 mr-1" }), S("proserviceworld.providers.card.responseTime", "{{count}}h response", { count: e.responseTime })]
|
|
@@ -254,19 +254,19 @@ function x() {
|
|
|
254
254
|
}) : /* @__PURE__ */ m("div", {
|
|
255
255
|
className: "text-center py-12",
|
|
256
256
|
children: [
|
|
257
|
-
/* @__PURE__ */ p(d, { className: "h-12 w-12 mx-auto text-
|
|
257
|
+
/* @__PURE__ */ p(d, { className: "h-12 w-12 mx-auto text-text-secondary mb-4" }),
|
|
258
258
|
/* @__PURE__ */ p("h3", {
|
|
259
259
|
className: "text-lg font-medium mb-2",
|
|
260
260
|
children: S("proserviceworld.providers.empty.title", "No providers found")
|
|
261
261
|
}),
|
|
262
262
|
/* @__PURE__ */ p("p", {
|
|
263
|
-
className: "text-
|
|
263
|
+
className: "text-text-secondary",
|
|
264
264
|
children: S("proserviceworld.shared.empty.adjustFilters", "Try adjusting your search criteria or filters.")
|
|
265
265
|
})
|
|
266
266
|
]
|
|
267
267
|
}),
|
|
268
268
|
M.length > 0 && /* @__PURE__ */ p(_, {
|
|
269
|
-
className: "bg-primary/5",
|
|
269
|
+
className: "bg-action-primary-bg/5",
|
|
270
270
|
children: /* @__PURE__ */ m(v, {
|
|
271
271
|
className: "p-8",
|
|
272
272
|
children: [/* @__PURE__ */ p("div", {
|
|
@@ -282,7 +282,7 @@ function x() {
|
|
|
282
282
|
className: "text-center",
|
|
283
283
|
children: [
|
|
284
284
|
/* @__PURE__ */ p("div", {
|
|
285
|
-
className: "flex items-center justify-center w-12 h-12 mx-auto bg-primary/10 rounded-lg mb-4",
|
|
285
|
+
className: "flex items-center justify-center w-12 h-12 mx-auto bg-action-primary-bg/10 rounded-lg mb-4",
|
|
286
286
|
children: /* @__PURE__ */ p(u, { className: "h-6 w-6 text-primary" })
|
|
287
287
|
}),
|
|
288
288
|
/* @__PURE__ */ p("div", {
|
|
@@ -290,7 +290,7 @@ function x() {
|
|
|
290
290
|
children: N
|
|
291
291
|
}),
|
|
292
292
|
/* @__PURE__ */ p("div", {
|
|
293
|
-
className: "text-sm text-
|
|
293
|
+
className: "text-sm text-text-secondary",
|
|
294
294
|
children: S("proserviceworld.providers.stats.averageRating", "Average Rating")
|
|
295
295
|
})
|
|
296
296
|
]
|
|
@@ -299,7 +299,7 @@ function x() {
|
|
|
299
299
|
className: "text-center",
|
|
300
300
|
children: [
|
|
301
301
|
/* @__PURE__ */ p("div", {
|
|
302
|
-
className: "flex items-center justify-center w-12 h-12 mx-auto bg-primary/10 rounded-lg mb-4",
|
|
302
|
+
className: "flex items-center justify-center w-12 h-12 mx-auto bg-action-primary-bg/10 rounded-lg mb-4",
|
|
303
303
|
children: /* @__PURE__ */ p(d, { className: "h-6 w-6 text-primary" })
|
|
304
304
|
}),
|
|
305
305
|
/* @__PURE__ */ p("div", {
|
|
@@ -307,7 +307,7 @@ function x() {
|
|
|
307
307
|
children: M.length
|
|
308
308
|
}),
|
|
309
309
|
/* @__PURE__ */ p("div", {
|
|
310
|
-
className: "text-sm text-
|
|
310
|
+
className: "text-sm text-text-secondary",
|
|
311
311
|
children: S("proserviceworld.providers.stats.expertProviders", "Expert Providers")
|
|
312
312
|
})
|
|
313
313
|
]
|
|
@@ -316,7 +316,7 @@ function x() {
|
|
|
316
316
|
className: "text-center",
|
|
317
317
|
children: [
|
|
318
318
|
/* @__PURE__ */ p("div", {
|
|
319
|
-
className: "flex items-center justify-center w-12 h-12 mx-auto bg-primary/10 rounded-lg mb-4",
|
|
319
|
+
className: "flex items-center justify-center w-12 h-12 mx-auto bg-action-primary-bg/10 rounded-lg mb-4",
|
|
320
320
|
children: /* @__PURE__ */ p(c, { className: "h-6 w-6 text-primary" })
|
|
321
321
|
}),
|
|
322
322
|
/* @__PURE__ */ p("div", {
|
|
@@ -324,7 +324,7 @@ function x() {
|
|
|
324
324
|
children: P
|
|
325
325
|
}),
|
|
326
326
|
/* @__PURE__ */ p("div", {
|
|
327
|
-
className: "text-sm text-
|
|
327
|
+
className: "text-sm text-text-secondary",
|
|
328
328
|
children: S("proserviceworld.providers.stats.countries", "Countries")
|
|
329
329
|
})
|
|
330
330
|
]
|