@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.
Files changed (31) hide show
  1. package/dist/proserviceworld/pages/AdminReportsPage.js +368 -335
  2. package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -1
  3. package/dist/proserviceworld/pages/AdminUsersPage.js +262 -242
  4. package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -1
  5. package/dist/proserviceworld/pages/AnalyticsPage.js +346 -318
  6. package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
  7. package/dist/proserviceworld/pages/BookingsPage.js +202 -185
  8. package/dist/proserviceworld/pages/BookingsPage.js.map +1 -1
  9. package/dist/proserviceworld/pages/DashboardPage.js +400 -363
  10. package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
  11. package/dist/proserviceworld/pages/DocumentsPage.js +389 -324
  12. package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
  13. package/dist/proserviceworld/pages/MessagesPage.js +77 -82
  14. package/dist/proserviceworld/pages/MessagesPage.js.map +1 -1
  15. package/dist/proserviceworld/pages/PaymentsPage.js +373 -346
  16. package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -1
  17. package/dist/proserviceworld/pages/ProjectsPage.js +432 -385
  18. package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -1
  19. package/dist/proserviceworld/pages/ProviderDetailPage.js +396 -352
  20. package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -1
  21. package/dist/proserviceworld/pages/ProvidersPage.js +245 -244
  22. package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -1
  23. package/dist/proserviceworld/pages/ReviewsPage.js +31 -31
  24. package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -1
  25. package/dist/proserviceworld/pages/ServiceDetailsPage.js +349 -316
  26. package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -1
  27. package/dist/proserviceworld/pages/ServicesPage.js +163 -160
  28. package/dist/proserviceworld/pages/ServicesPage.js.map +1 -1
  29. package/dist/proserviceworld/pages/VerificationPage.js +265 -256
  30. package/dist/proserviceworld/pages/VerificationPage.js.map +1 -1
  31. package/package.json +2 -2
@@ -1,12 +1,12 @@
1
1
  import { useProServiceWorldStore as e } from "../store/proserviceworldStore.js";
2
2
  import { tWithFallback as t } from "../utils/i18n.js";
3
3
  import { useMemo as n, useState as r } from "react";
4
- import { Clock as i, Filter as a, Grid as o, List as s, Search as c, Star as l, Tag as u } from "lucide-react";
5
- import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell";
6
- import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
7
- import { Badge as h, Button as g, Card as _, CardContent as v, Input as y } from "@burdenoff/fe-libs/ui";
4
+ import { Clock as i, Grid as a, List as o, Search as s, Star as c, Tag as l } from "lucide-react";
5
+ import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell";
6
+ import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
7
+ import { AuroraBackground as m, Badge as h, Button as g, GlassCard as _, GradientText as v, IllustratedEmptyState as y, Input as b } from "@burdenoff/fe-libs/ui";
8
8
  //#region src/proserviceworld/pages/ServicesPage.tsx
9
- var b = {
9
+ var x = {
10
10
  accounting_bookkeeping: {
11
11
  key: "proserviceworld.shared.categories.accountingBookkeeping",
12
12
  fallback: "Accounting & Bookkeeping"
@@ -56,155 +56,164 @@ var b = {
56
56
  fallback: "Real Estate"
57
57
  }
58
58
  };
59
- function x() {
60
- let { t: x } = d(), C = (e, n, r) => t(x, e, n, r), { services: w } = e(), [T, E] = r(""), [D, O] = r(""), [k, A] = r("grid"), [j, M] = r(1), N = n(() => {
61
- let e = [...w];
62
- if (T) {
63
- let t = T.toLowerCase();
59
+ function S() {
60
+ let { t: S } = u(), w = (e, n, r) => t(S, e, n, r), { services: T } = e(), [E, D] = r(""), [O, k] = r(""), [A, j] = r("grid"), [M, N] = r(1), P = n(() => {
61
+ let e = [...T];
62
+ if (E) {
63
+ let t = E.toLowerCase();
64
64
  e = e.filter((e) => e.title.toLowerCase().includes(t) || e.description.toLowerCase().includes(t) || e.tags.some((e) => e.toLowerCase().includes(t)));
65
65
  }
66
- return D && (e = e.filter((e) => e.category === D)), e;
66
+ return O && (e = e.filter((e) => e.category === O)), e;
67
67
  }, [
68
- w,
69
68
  T,
70
- D
71
- ]), P = Math.ceil(N.length / 12), F = N.slice((j - 1) * 12, j * 12), I = T ? C("proserviceworld.services.subtitleWithQuery", "{{count}} services found for \"{{query}}\"", {
72
- count: N.length,
73
- query: T
74
- }) : C("proserviceworld.services.subtitle", "{{count}} services found", { count: N.length }), L = (e) => {
75
- let t = b[e];
76
- return C(t.key, t.fallback);
69
+ E,
70
+ O
71
+ ]), F = Math.ceil(P.length / 12), I = P.slice((M - 1) * 12, M * 12), L = E ? w("proserviceworld.services.subtitleWithQuery", "{{count}} services found for \"{{query}}\"", {
72
+ count: P.length,
73
+ query: E
74
+ }) : w("proserviceworld.services.subtitle", "{{count}} services found", { count: P.length }), R = (e) => {
75
+ let t = x[e];
76
+ return w(t.key, t.fallback);
77
77
  };
78
- return /* @__PURE__ */ m("div", {
79
- className: "space-y-6 p-6",
78
+ return /* @__PURE__ */ p("div", {
79
+ className: "space-y-6 p-6 bg-bg-canvas min-h-screen",
80
80
  children: [
81
- /* @__PURE__ */ m("div", {
82
- className: "flex flex-col md:flex-row md:items-center md:justify-between",
83
- children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h1", {
84
- className: "text-2xl font-semibold",
85
- children: C("proserviceworld.services.title", "Services")
86
- }), /* @__PURE__ */ p("p", {
87
- className: "text-sm text-muted-foreground",
88
- children: I
89
- })] }), /* @__PURE__ */ m("div", {
90
- className: "flex items-center gap-2 mt-4 md:mt-0",
91
- children: [/* @__PURE__ */ p(g, {
92
- variant: k === "grid" ? "default" : "outline",
93
- size: "sm",
94
- onClick: () => A("grid"),
95
- children: /* @__PURE__ */ p(o, { className: "h-4 w-4" })
96
- }), /* @__PURE__ */ p(g, {
97
- variant: k === "list" ? "default" : "outline",
98
- size: "sm",
99
- onClick: () => A("list"),
100
- children: /* @__PURE__ */ p(s, { className: "h-4 w-4" })
101
- })]
102
- })]
81
+ /* @__PURE__ */ p("div", {
82
+ className: "relative overflow-hidden rounded-card -mx-2 px-2 pt-1 flex flex-col md:flex-row md:items-center md:justify-between gap-4",
83
+ children: [
84
+ /* @__PURE__ */ f(m, { intensity: "subtle" }),
85
+ /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("h1", {
86
+ className: "text-2xl font-semibold tracking-tight",
87
+ children: /* @__PURE__ */ f(v, { children: w("proserviceworld.services.title", "Services") })
88
+ }), /* @__PURE__ */ f("p", {
89
+ className: "text-sm text-text-secondary",
90
+ children: L
91
+ })] }),
92
+ /* @__PURE__ */ p("div", {
93
+ className: "flex items-center gap-2 mt-4 md:mt-0",
94
+ children: [/* @__PURE__ */ f(g, {
95
+ variant: A === "grid" ? "default" : "outline",
96
+ size: "sm",
97
+ onClick: () => j("grid"),
98
+ children: /* @__PURE__ */ f(a, { className: "h-4 w-4" })
99
+ }), /* @__PURE__ */ f(g, {
100
+ variant: A === "list" ? "default" : "outline",
101
+ size: "sm",
102
+ onClick: () => j("list"),
103
+ children: /* @__PURE__ */ f(o, { className: "h-4 w-4" })
104
+ })]
105
+ })
106
+ ]
103
107
  }),
104
- /* @__PURE__ */ m("div", {
108
+ /* @__PURE__ */ p("div", {
105
109
  className: "flex flex-col sm:flex-row gap-4",
106
- children: [/* @__PURE__ */ m("div", {
110
+ children: [/* @__PURE__ */ p("div", {
107
111
  className: "flex-1 relative",
108
- children: [/* @__PURE__ */ p(c, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ p(y, {
109
- placeholder: C("proserviceworld.services.search.placeholder", "Search services..."),
110
- value: T,
112
+ children: [/* @__PURE__ */ f(s, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ f(b, {
113
+ placeholder: w("proserviceworld.services.search.placeholder", "Search services..."),
114
+ value: E,
111
115
  onChange: (e) => {
112
- E(e.target.value), M(1);
116
+ D(e.target.value), N(1);
113
117
  },
114
118
  className: "pl-10"
115
119
  })]
116
- }), /* @__PURE__ */ m("select", {
117
- value: D,
120
+ }), /* @__PURE__ */ p("select", {
121
+ value: O,
118
122
  onChange: (e) => {
119
- O(e.target.value), M(1);
123
+ k(e.target.value), N(1);
120
124
  },
121
- className: "px-4 py-2 border border-input rounded-md bg-background text-foreground",
125
+ className: "px-4 py-2 border border-border-seam rounded-md bg-bg-surface text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
122
126
  children: [
123
- /* @__PURE__ */ p("option", {
127
+ /* @__PURE__ */ f("option", {
124
128
  value: "",
125
- children: C("proserviceworld.shared.filters.allCategories", "All Categories")
129
+ children: w("proserviceworld.shared.filters.allCategories", "All Categories")
126
130
  }),
127
- /* @__PURE__ */ p("option", {
131
+ /* @__PURE__ */ f("option", {
128
132
  value: "financial_services",
129
- children: L("financial_services")
133
+ children: R("financial_services")
130
134
  }),
131
- /* @__PURE__ */ p("option", {
135
+ /* @__PURE__ */ f("option", {
132
136
  value: "legal_services",
133
- children: L("legal_services")
137
+ children: R("legal_services")
134
138
  }),
135
- /* @__PURE__ */ p("option", {
139
+ /* @__PURE__ */ f("option", {
136
140
  value: "marketing_advertising",
137
- children: L("marketing_advertising")
141
+ children: R("marketing_advertising")
138
142
  }),
139
- /* @__PURE__ */ p("option", {
143
+ /* @__PURE__ */ f("option", {
140
144
  value: "it_technology",
141
- children: L("it_technology")
145
+ children: R("it_technology")
142
146
  }),
143
- /* @__PURE__ */ p("option", {
147
+ /* @__PURE__ */ f("option", {
144
148
  value: "human_resources",
145
- children: L("human_resources")
149
+ children: R("human_resources")
146
150
  }),
147
- /* @__PURE__ */ p("option", {
151
+ /* @__PURE__ */ f("option", {
148
152
  value: "accounting_bookkeeping",
149
- children: L("accounting_bookkeeping")
153
+ children: R("accounting_bookkeeping")
150
154
  }),
151
- /* @__PURE__ */ p("option", {
155
+ /* @__PURE__ */ f("option", {
152
156
  value: "creative_design",
153
- children: L("creative_design")
157
+ children: R("creative_design")
154
158
  }),
155
- /* @__PURE__ */ p("option", {
159
+ /* @__PURE__ */ f("option", {
156
160
  value: "education_training",
157
- children: L("education_training")
161
+ children: R("education_training")
158
162
  })
159
163
  ]
160
164
  })]
161
165
  }),
162
- F.length > 0 ? /* @__PURE__ */ p("div", {
163
- className: k === "grid" ? "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" : "space-y-4",
164
- children: F.map((e) => /* @__PURE__ */ p(_, {
165
- className: "hover:shadow-md transition-shadow",
166
- children: /* @__PURE__ */ p(v, {
167
- className: k === "grid" ? "p-6" : "p-4 flex items-center gap-6",
168
- children: k === "grid" ? /* @__PURE__ */ m(f, { children: [
169
- /* @__PURE__ */ m("div", {
166
+ I.length > 0 ? /* @__PURE__ */ f("div", {
167
+ className: A === "grid" ? "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" : "space-y-4",
168
+ children: I.map((e) => /* @__PURE__ */ f(_, {
169
+ treatment: "glass",
170
+ glow: e.featured,
171
+ className: "border-border-seam p-0 transition-shadow hover:shadow-pop",
172
+ children: /* @__PURE__ */ f("div", {
173
+ className: A === "grid" ? "p-6" : "p-4 flex items-center gap-6",
174
+ children: A === "grid" ? /* @__PURE__ */ p(d, { children: [
175
+ /* @__PURE__ */ p("div", {
170
176
  className: "flex items-center justify-between mb-3",
171
- children: [/* @__PURE__ */ p(h, {
177
+ children: [/* @__PURE__ */ f(h, {
172
178
  variant: "outline",
173
179
  className: "text-xs capitalize",
174
- children: L(e.category)
175
- }), e.featured && /* @__PURE__ */ p(h, { children: C("proserviceworld.services.badges.featured", "Featured") })]
180
+ children: R(e.category)
181
+ }), e.featured && /* @__PURE__ */ f(h, { children: w("proserviceworld.services.badges.featured", "Featured") })]
176
182
  }),
177
- /* @__PURE__ */ p("h3", {
183
+ /* @__PURE__ */ f("h3", {
178
184
  className: "font-semibold mb-2",
179
185
  children: e.title
180
186
  }),
181
- /* @__PURE__ */ p("p", {
182
- className: "text-sm text-muted-foreground mb-3 line-clamp-2",
187
+ /* @__PURE__ */ f("p", {
188
+ className: "text-sm text-text-secondary mb-3 line-clamp-2",
183
189
  children: e.description
184
190
  }),
185
- /* @__PURE__ */ m("div", {
191
+ /* @__PURE__ */ p("div", {
186
192
  className: "flex items-center gap-2 mb-3 text-sm",
187
193
  children: [
188
- /* @__PURE__ */ p("div", {
189
- className: "h-6 w-6 rounded-full bg-muted flex items-center justify-center text-xs",
194
+ /* @__PURE__ */ f("div", {
195
+ className: "h-6 w-6 rounded-full bg-bg-sunken flex items-center justify-center text-xs",
190
196
  children: e.providerName.charAt(0)
191
197
  }),
192
- /* @__PURE__ */ p("span", {
193
- className: "text-muted-foreground",
198
+ /* @__PURE__ */ f("span", {
199
+ className: "text-text-secondary",
194
200
  children: e.providerName
195
201
  }),
196
- e.providerVerified && /* @__PURE__ */ p(S, {})
202
+ e.providerVerified && /* @__PURE__ */ f(C, {})
197
203
  ]
198
204
  }),
199
- /* @__PURE__ */ m("div", {
205
+ /* @__PURE__ */ p("div", {
200
206
  className: "flex items-center justify-between text-sm",
201
- children: [/* @__PURE__ */ m("div", {
207
+ children: [/* @__PURE__ */ p("div", {
202
208
  className: "flex items-center",
203
209
  children: [
204
- /* @__PURE__ */ p(l, { className: "h-4 w-4 text-yellow-400 fill-current mr-1" }),
205
- e.providerRating.toFixed(1),
206
- /* @__PURE__ */ m("span", {
207
- className: "text-muted-foreground ml-1",
210
+ /* @__PURE__ */ f(c, { className: "h-4 w-4 text-status-warning-text fill-current mr-1" }),
211
+ /* @__PURE__ */ f("span", {
212
+ className: "tabular-nums",
213
+ children: e.providerRating.toFixed(1)
214
+ }),
215
+ /* @__PURE__ */ p("span", {
216
+ className: "text-text-secondary ml-1 tabular-nums",
208
217
  children: [
209
218
  "(",
210
219
  e.providerReviews,
@@ -212,119 +221,113 @@ function x() {
212
221
  ]
213
222
  })
214
223
  ]
215
- }), /* @__PURE__ */ p("span", {
216
- className: "font-medium",
217
- children: C("proserviceworld.services.card.pricing.from", "From ${{amount}}", { amount: e.pricing.basePrice.toLocaleString() })
224
+ }), /* @__PURE__ */ f("span", {
225
+ className: "font-medium tabular-nums",
226
+ children: w("proserviceworld.services.card.pricing.from", "From ${{amount}}", { amount: e.pricing.basePrice.toLocaleString() })
218
227
  })]
219
228
  }),
220
- /* @__PURE__ */ p("div", {
229
+ /* @__PURE__ */ f("div", {
221
230
  className: "flex flex-wrap gap-1 mt-3",
222
- children: e.tags.slice(0, 3).map((e) => /* @__PURE__ */ p("span", {
223
- className: "inline-block px-2 py-0.5 bg-muted text-xs rounded",
231
+ children: e.tags.slice(0, 3).map((e) => /* @__PURE__ */ f("span", {
232
+ className: "inline-block px-2 py-0.5 bg-bg-sunken text-xs rounded",
224
233
  children: e
225
234
  }, e))
226
235
  }),
227
- /* @__PURE__ */ m("div", {
228
- className: "flex items-center gap-4 mt-3 pt-3 border-t text-xs text-muted-foreground",
229
- children: [/* @__PURE__ */ m("span", {
236
+ /* @__PURE__ */ p("div", {
237
+ className: "flex items-center gap-4 mt-3 pt-3 border-t border-border-seam text-xs text-text-secondary",
238
+ children: [/* @__PURE__ */ p("span", {
230
239
  className: "flex items-center",
231
- children: [/* @__PURE__ */ p(i, { className: "h-3 w-3 mr-1" }), C("proserviceworld.services.card.meta.days", "{{count}} days", { count: e.duration.typical })]
232
- }), /* @__PURE__ */ m("span", {
240
+ children: [/* @__PURE__ */ f(i, { className: "h-3 w-3 mr-1" }), w("proserviceworld.services.card.meta.days", "{{count}} days", { count: e.duration.typical })]
241
+ }), /* @__PURE__ */ p("span", {
233
242
  className: "flex items-center",
234
- children: [/* @__PURE__ */ p(u, { className: "h-3 w-3 mr-1" }), C("proserviceworld.services.card.meta.bookings", "{{count}} bookings", { count: e.totalBookings })]
243
+ children: [/* @__PURE__ */ f(l, { className: "h-3 w-3 mr-1" }), w("proserviceworld.services.card.meta.bookings", "{{count}} bookings", { count: e.totalBookings })]
235
244
  })]
236
245
  })
237
- ] }) : /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ m("div", {
246
+ ] }) : /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ p("div", {
238
247
  className: "flex-1 min-w-0",
239
248
  children: [
240
- /* @__PURE__ */ m("div", {
249
+ /* @__PURE__ */ p("div", {
241
250
  className: "flex items-center gap-2 mb-1",
242
- children: [/* @__PURE__ */ p("h3", {
251
+ children: [/* @__PURE__ */ f("h3", {
243
252
  className: "font-semibold",
244
253
  children: e.title
245
- }), e.featured && /* @__PURE__ */ p(h, {
254
+ }), e.featured && /* @__PURE__ */ f(h, {
246
255
  className: "text-xs",
247
- children: C("proserviceworld.services.badges.featured", "Featured")
256
+ children: w("proserviceworld.services.badges.featured", "Featured")
248
257
  })]
249
258
  }),
250
- /* @__PURE__ */ p("p", {
251
- className: "text-sm text-muted-foreground mb-2 line-clamp-1",
259
+ /* @__PURE__ */ f("p", {
260
+ className: "text-sm text-text-secondary mb-2 line-clamp-1",
252
261
  children: e.description
253
262
  }),
254
- /* @__PURE__ */ m("div", {
255
- className: "flex items-center gap-3 text-sm text-muted-foreground",
263
+ /* @__PURE__ */ p("div", {
264
+ className: "flex items-center gap-3 text-sm text-text-secondary",
256
265
  children: [
257
- /* @__PURE__ */ p("span", { children: e.providerName }),
258
- /* @__PURE__ */ m("span", {
266
+ /* @__PURE__ */ f("span", { children: e.providerName }),
267
+ /* @__PURE__ */ p("span", {
259
268
  className: "flex items-center",
260
- children: [/* @__PURE__ */ p(l, { className: "h-3 w-3 text-yellow-400 fill-current mr-0.5" }), e.providerRating.toFixed(1)]
269
+ children: [/* @__PURE__ */ f(c, { className: "h-3 w-3 text-status-warning-text fill-current mr-0.5" }), /* @__PURE__ */ f("span", {
270
+ className: "tabular-nums",
271
+ children: e.providerRating.toFixed(1)
272
+ })]
261
273
  }),
262
- /* @__PURE__ */ p("span", {
274
+ /* @__PURE__ */ f("span", {
263
275
  className: "capitalize",
264
- children: L(e.category)
276
+ children: R(e.category)
265
277
  })
266
278
  ]
267
279
  })
268
280
  ]
269
- }), /* @__PURE__ */ m("div", {
281
+ }), /* @__PURE__ */ p("div", {
270
282
  className: "text-right shrink-0",
271
- children: [/* @__PURE__ */ p("div", {
283
+ children: [/* @__PURE__ */ f("div", {
272
284
  className: "font-medium",
273
- children: C("proserviceworld.services.card.pricing.from", "From ${{amount}}", { amount: e.pricing.basePrice.toLocaleString() })
274
- }), /* @__PURE__ */ p("div", {
275
- className: "text-sm text-muted-foreground",
276
- children: C("proserviceworld.services.card.meta.days", "{{count}} days", { count: e.duration.typical })
285
+ children: w("proserviceworld.services.card.pricing.from", "From ${{amount}}", { amount: e.pricing.basePrice.toLocaleString() })
286
+ }), /* @__PURE__ */ f("div", {
287
+ className: "text-sm text-text-secondary",
288
+ children: w("proserviceworld.services.card.meta.days", "{{count}} days", { count: e.duration.typical })
277
289
  })]
278
290
  })] })
279
291
  })
280
292
  }, e.id))
281
- }) : /* @__PURE__ */ m("div", {
282
- className: "text-center py-12",
283
- children: [
284
- /* @__PURE__ */ p(a, { className: "h-12 w-12 mx-auto text-muted-foreground mb-4" }),
285
- /* @__PURE__ */ p("h3", {
286
- className: "text-lg font-medium mb-2",
287
- children: C("proserviceworld.services.empty.title", "No services found")
288
- }),
289
- /* @__PURE__ */ p("p", {
290
- className: "text-muted-foreground",
291
- children: C("proserviceworld.shared.empty.adjustFilters", "Try adjusting your search criteria or filters.")
292
- })
293
- ]
293
+ }) : /* @__PURE__ */ f(y, {
294
+ illustration: "empty-search",
295
+ title: w("proserviceworld.services.empty.title", "No services found"),
296
+ description: w("proserviceworld.shared.empty.adjustFilters", "Try adjusting your search criteria or filters.")
294
297
  }),
295
- P > 1 && /* @__PURE__ */ m("div", {
298
+ F > 1 && /* @__PURE__ */ p("div", {
296
299
  className: "flex justify-center gap-2",
297
300
  children: [
298
- /* @__PURE__ */ p(g, {
301
+ /* @__PURE__ */ f(g, {
299
302
  variant: "outline",
300
- disabled: j === 1,
301
- onClick: () => M((e) => e - 1),
302
- children: C("proserviceworld.shared.pagination.previous", "Previous")
303
+ disabled: M === 1,
304
+ onClick: () => N((e) => e - 1),
305
+ children: w("proserviceworld.shared.pagination.previous", "Previous")
303
306
  }),
304
- /* @__PURE__ */ p("span", {
307
+ /* @__PURE__ */ f("span", {
305
308
  className: "flex items-center px-4 text-sm",
306
- children: C("proserviceworld.shared.pagination.pageInfo", "Page {{page}} of {{total}}", {
307
- page: j,
308
- total: P
309
+ children: w("proserviceworld.shared.pagination.pageInfo", "Page {{page}} of {{total}}", {
310
+ page: M,
311
+ total: F
309
312
  })
310
313
  }),
311
- /* @__PURE__ */ p(g, {
314
+ /* @__PURE__ */ f(g, {
312
315
  variant: "outline",
313
- disabled: j >= P,
314
- onClick: () => M((e) => e + 1),
315
- children: C("proserviceworld.shared.pagination.next", "Next")
316
+ disabled: M >= F,
317
+ onClick: () => N((e) => e + 1),
318
+ children: w("proserviceworld.shared.pagination.next", "Next")
316
319
  })
317
320
  ]
318
321
  })
319
322
  ]
320
323
  });
321
324
  }
322
- function S() {
323
- return /* @__PURE__ */ p("svg", {
324
- className: "h-4 w-4 text-blue-600",
325
+ function C() {
326
+ return /* @__PURE__ */ f("svg", {
327
+ className: "h-4 w-4 text-accent-blue",
325
328
  viewBox: "0 0 20 20",
326
329
  fill: "currentColor",
327
- children: /* @__PURE__ */ p("path", {
330
+ children: /* @__PURE__ */ f("path", {
328
331
  fillRule: "evenodd",
329
332
  d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",
330
333
  clipRule: "evenodd"
@@ -332,6 +335,6 @@ function S() {
332
335
  });
333
336
  }
334
337
  //#endregion
335
- export { x as ServicesPage };
338
+ export { S as ServicesPage };
336
339
 
337
340
  //# sourceMappingURL=ServicesPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServicesPage.js","names":[],"sources":["../../../src/proserviceworld/pages/ServicesPage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { Card, CardContent, Button, Badge, Input } from '@burdenoff/fe-libs/ui';\nimport { Search, Filter, Grid, List, Star, Clock, Tag } from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\nimport type { ServiceCategory } from '../types';\nimport { tWithFallback } from '../utils/i18n';\n\nconst serviceCategoryLabels: Record<ServiceCategory, { key: string; fallback: string }> = {\n accounting_bookkeeping: {\n key: 'proserviceworld.shared.categories.accountingBookkeeping',\n fallback: 'Accounting & Bookkeeping',\n },\n business_consulting: {\n key: 'proserviceworld.shared.categories.businessConsulting',\n fallback: 'Business Consulting',\n },\n creative_design: {\n key: 'proserviceworld.shared.categories.creativeDesign',\n fallback: 'Creative & Design',\n },\n education_training: {\n key: 'proserviceworld.shared.categories.educationTraining',\n fallback: 'Education & Training',\n },\n financial_services: {\n key: 'proserviceworld.shared.categories.financialServices',\n fallback: 'Financial Services',\n },\n healthcare: { key: 'proserviceworld.shared.categories.healthcare', fallback: 'Healthcare' },\n human_resources: {\n key: 'proserviceworld.shared.categories.humanResources',\n fallback: 'Human Resources',\n },\n insurance: { key: 'proserviceworld.shared.categories.insurance', fallback: 'Insurance' },\n it_technology: {\n key: 'proserviceworld.shared.categories.itTechnology',\n fallback: 'IT & Technology',\n },\n legal_services: {\n key: 'proserviceworld.shared.categories.legalServices',\n fallback: 'Legal Services',\n },\n marketing_advertising: {\n key: 'proserviceworld.shared.categories.marketingAdvertising',\n fallback: 'Marketing & Advertising',\n },\n real_estate: { key: 'proserviceworld.shared.categories.realEstate', fallback: 'Real Estate' },\n};\n\nexport function ServicesPage() {\n const { t } = useI18n();\n const tr = (key: string, fallback: string, params?: Record<string, string | number>): string =>\n tWithFallback(t, key, fallback, params);\n const { services } = useProServiceWorldStore();\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<ServiceCategory | ''>('');\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n const [currentPage, setCurrentPage] = useState(1);\n const perPage = 12;\n\n const filtered = useMemo(() => {\n let result = [...services];\n if (searchQuery) {\n const q = searchQuery.toLowerCase();\n result = result.filter(\n (s) =>\n s.title.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q) ||\n s.tags.some((t) => t.toLowerCase().includes(q))\n );\n }\n if (selectedCategory) result = result.filter((s) => s.category === selectedCategory);\n return result;\n }, [services, searchQuery, selectedCategory]);\n\n const totalPages = Math.ceil(filtered.length / perPage);\n const paged = filtered.slice((currentPage - 1) * perPage, currentPage * perPage);\n const subtitle = searchQuery\n ? tr('proserviceworld.services.subtitleWithQuery', '{{count}} services found for \"{{query}}\"', {\n count: filtered.length,\n query: searchQuery,\n })\n : tr('proserviceworld.services.subtitle', '{{count}} services found', {\n count: filtered.length,\n });\n const categoryLabel = (category: ServiceCategory): string => {\n const entry = serviceCategoryLabels[category];\n return tr(entry.key, entry.fallback);\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-col md:flex-row md:items-center md:justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n {tr('proserviceworld.services.title', 'Services')}\n </h1>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n <div className=\"flex items-center gap-2 mt-4 md:mt-0\">\n <Button\n variant={viewMode === 'grid' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setViewMode('grid')}\n >\n <Grid className=\"h-4 w-4\" />\n </Button>\n <Button\n variant={viewMode === 'list' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setViewMode('list')}\n >\n <List className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n <div className=\"flex flex-col sm:flex-row gap-4\">\n <div className=\"flex-1 relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n placeholder={tr('proserviceworld.services.search.placeholder', 'Search services...')}\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setCurrentPage(1);\n }}\n className=\"pl-10\"\n />\n </div>\n <select\n value={selectedCategory}\n onChange={(e) => {\n setSelectedCategory(e.target.value as ServiceCategory | '');\n setCurrentPage(1);\n }}\n className=\"px-4 py-2 border border-input rounded-md bg-background text-foreground\"\n >\n <option value=\"\">\n {tr('proserviceworld.shared.filters.allCategories', 'All Categories')}\n </option>\n <option value=\"financial_services\">{categoryLabel('financial_services')}</option>\n <option value=\"legal_services\">{categoryLabel('legal_services')}</option>\n <option value=\"marketing_advertising\">{categoryLabel('marketing_advertising')}</option>\n <option value=\"it_technology\">{categoryLabel('it_technology')}</option>\n <option value=\"human_resources\">{categoryLabel('human_resources')}</option>\n <option value=\"accounting_bookkeeping\">{categoryLabel('accounting_bookkeeping')}</option>\n <option value=\"creative_design\">{categoryLabel('creative_design')}</option>\n <option value=\"education_training\">{categoryLabel('education_training')}</option>\n </select>\n </div>\n\n {paged.length > 0 ? (\n <div\n className={\n viewMode === 'grid'\n ? 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6'\n : 'space-y-4'\n }\n >\n {paged.map((service) => (\n <Card key={service.id} className=\"hover:shadow-md transition-shadow\">\n <CardContent className={viewMode === 'grid' ? 'p-6' : 'p-4 flex items-center gap-6'}>\n {viewMode === 'grid' ? (\n <>\n <div className=\"flex items-center justify-between mb-3\">\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {categoryLabel(service.category)}\n </Badge>\n {service.featured && (\n <Badge>{tr('proserviceworld.services.badges.featured', 'Featured')}</Badge>\n )}\n </div>\n <h3 className=\"font-semibold mb-2\">{service.title}</h3>\n <p className=\"text-sm text-muted-foreground mb-3 line-clamp-2\">\n {service.description}\n </p>\n <div className=\"flex items-center gap-2 mb-3 text-sm\">\n <div className=\"h-6 w-6 rounded-full bg-muted flex items-center justify-center text-xs\">\n {service.providerName.charAt(0)}\n </div>\n <span className=\"text-muted-foreground\">{service.providerName}</span>\n {service.providerVerified && <CheckMark />}\n </div>\n <div className=\"flex items-center justify-between text-sm\">\n <div className=\"flex items-center\">\n <Star className=\"h-4 w-4 text-yellow-400 fill-current mr-1\" />\n {service.providerRating.toFixed(1)}\n <span className=\"text-muted-foreground ml-1\">\n ({service.providerReviews})\n </span>\n </div>\n <span className=\"font-medium\">\n {tr('proserviceworld.services.card.pricing.from', 'From ${{amount}}', {\n amount: service.pricing.basePrice.toLocaleString(),\n })}\n </span>\n </div>\n <div className=\"flex flex-wrap gap-1 mt-3\">\n {service.tags.slice(0, 3).map((t) => (\n <span key={t} className=\"inline-block px-2 py-0.5 bg-muted text-xs rounded\">\n {t}\n </span>\n ))}\n </div>\n <div className=\"flex items-center gap-4 mt-3 pt-3 border-t text-xs text-muted-foreground\">\n <span className=\"flex items-center\">\n <Clock className=\"h-3 w-3 mr-1\" />\n {tr('proserviceworld.services.card.meta.days', '{{count}} days', {\n count: service.duration.typical,\n })}\n </span>\n <span className=\"flex items-center\">\n <Tag className=\"h-3 w-3 mr-1\" />\n {tr('proserviceworld.services.card.meta.bookings', '{{count}} bookings', {\n count: service.totalBookings,\n })}\n </span>\n </div>\n </>\n ) : (\n <>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <h3 className=\"font-semibold\">{service.title}</h3>\n {service.featured && (\n <Badge className=\"text-xs\">\n {tr('proserviceworld.services.badges.featured', 'Featured')}\n </Badge>\n )}\n </div>\n <p className=\"text-sm text-muted-foreground mb-2 line-clamp-1\">\n {service.description}\n </p>\n <div className=\"flex items-center gap-3 text-sm text-muted-foreground\">\n <span>{service.providerName}</span>\n <span className=\"flex items-center\">\n <Star className=\"h-3 w-3 text-yellow-400 fill-current mr-0.5\" />\n {service.providerRating.toFixed(1)}\n </span>\n <span className=\"capitalize\">{categoryLabel(service.category)}</span>\n </div>\n </div>\n <div className=\"text-right shrink-0\">\n <div className=\"font-medium\">\n {tr('proserviceworld.services.card.pricing.from', 'From ${{amount}}', {\n amount: service.pricing.basePrice.toLocaleString(),\n })}\n </div>\n <div className=\"text-sm text-muted-foreground\">\n {tr('proserviceworld.services.card.meta.days', '{{count}} days', {\n count: service.duration.typical,\n })}\n </div>\n </div>\n </>\n )}\n </CardContent>\n </Card>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-12\">\n <Filter className=\"h-12 w-12 mx-auto text-muted-foreground mb-4\" />\n <h3 className=\"text-lg font-medium mb-2\">\n {tr('proserviceworld.services.empty.title', 'No services found')}\n </h3>\n <p className=\"text-muted-foreground\">\n {tr(\n 'proserviceworld.shared.empty.adjustFilters',\n 'Try adjusting your search criteria or filters.'\n )}\n </p>\n </div>\n )}\n\n {totalPages > 1 && (\n <div className=\"flex justify-center gap-2\">\n <Button\n variant=\"outline\"\n disabled={currentPage === 1}\n onClick={() => setCurrentPage((p) => p - 1)}\n >\n {tr('proserviceworld.shared.pagination.previous', 'Previous')}\n </Button>\n <span className=\"flex items-center px-4 text-sm\">\n {tr('proserviceworld.shared.pagination.pageInfo', 'Page {{page}} of {{total}}', {\n page: currentPage,\n total: totalPages,\n })}\n </span>\n <Button\n variant=\"outline\"\n disabled={currentPage >= totalPages}\n onClick={() => setCurrentPage((p) => p + 1)}\n >\n {tr('proserviceworld.shared.pagination.next', 'Next')}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction CheckMark() {\n return (\n <svg className=\"h-4 w-4 text-blue-600\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ServicesPage.js","names":[],"sources":["../../../src/proserviceworld/pages/ServicesPage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell';\nimport {\n Card,\n CardContent,\n Button,\n Badge,\n Input,\n GlassCard,\n AuroraBackground,\n GradientText,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Search, Grid, List, Star, Clock, Tag } from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\nimport type { ServiceCategory } from '../types';\nimport { tWithFallback } from '../utils/i18n';\n\nconst serviceCategoryLabels: Record<ServiceCategory, { key: string; fallback: string }> = {\n accounting_bookkeeping: {\n key: 'proserviceworld.shared.categories.accountingBookkeeping',\n fallback: 'Accounting & Bookkeeping',\n },\n business_consulting: {\n key: 'proserviceworld.shared.categories.businessConsulting',\n fallback: 'Business Consulting',\n },\n creative_design: {\n key: 'proserviceworld.shared.categories.creativeDesign',\n fallback: 'Creative & Design',\n },\n education_training: {\n key: 'proserviceworld.shared.categories.educationTraining',\n fallback: 'Education & Training',\n },\n financial_services: {\n key: 'proserviceworld.shared.categories.financialServices',\n fallback: 'Financial Services',\n },\n healthcare: { key: 'proserviceworld.shared.categories.healthcare', fallback: 'Healthcare' },\n human_resources: {\n key: 'proserviceworld.shared.categories.humanResources',\n fallback: 'Human Resources',\n },\n insurance: { key: 'proserviceworld.shared.categories.insurance', fallback: 'Insurance' },\n it_technology: {\n key: 'proserviceworld.shared.categories.itTechnology',\n fallback: 'IT & Technology',\n },\n legal_services: {\n key: 'proserviceworld.shared.categories.legalServices',\n fallback: 'Legal Services',\n },\n marketing_advertising: {\n key: 'proserviceworld.shared.categories.marketingAdvertising',\n fallback: 'Marketing & Advertising',\n },\n real_estate: { key: 'proserviceworld.shared.categories.realEstate', fallback: 'Real Estate' },\n};\n\nexport function ServicesPage() {\n const { t } = useI18n();\n const tr = (key: string, fallback: string, params?: Record<string, string | number>): string =>\n tWithFallback(t, key, fallback, params);\n const { services } = useProServiceWorldStore();\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<ServiceCategory | ''>('');\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n const [currentPage, setCurrentPage] = useState(1);\n const perPage = 12;\n\n const filtered = useMemo(() => {\n let result = [...services];\n if (searchQuery) {\n const q = searchQuery.toLowerCase();\n result = result.filter(\n (s) =>\n s.title.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q) ||\n s.tags.some((t) => t.toLowerCase().includes(q))\n );\n }\n if (selectedCategory) result = result.filter((s) => s.category === selectedCategory);\n return result;\n }, [services, searchQuery, selectedCategory]);\n\n const totalPages = Math.ceil(filtered.length / perPage);\n const paged = filtered.slice((currentPage - 1) * perPage, currentPage * perPage);\n const subtitle = searchQuery\n ? tr('proserviceworld.services.subtitleWithQuery', '{{count}} services found for \"{{query}}\"', {\n count: filtered.length,\n query: searchQuery,\n })\n : tr('proserviceworld.services.subtitle', '{{count}} services found', {\n count: filtered.length,\n });\n const categoryLabel = (category: ServiceCategory): string => {\n const entry = serviceCategoryLabels[category];\n return tr(entry.key, entry.fallback);\n };\n\n return (\n <div className=\"space-y-6 p-6 bg-bg-canvas min-h-screen\">\n <div className=\"relative overflow-hidden rounded-card -mx-2 px-2 pt-1 flex flex-col md:flex-row md:items-center md:justify-between gap-4\">\n <AuroraBackground intensity=\"subtle\" />\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">\n <GradientText>{tr('proserviceworld.services.title', 'Services')}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{subtitle}</p>\n </div>\n <div className=\"flex items-center gap-2 mt-4 md:mt-0\">\n <Button\n variant={viewMode === 'grid' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setViewMode('grid')}\n >\n <Grid className=\"h-4 w-4\" />\n </Button>\n <Button\n variant={viewMode === 'list' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setViewMode('list')}\n >\n <List className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n <div className=\"flex flex-col sm:flex-row gap-4\">\n <div className=\"flex-1 relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder={tr('proserviceworld.services.search.placeholder', 'Search services...')}\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setCurrentPage(1);\n }}\n className=\"pl-10\"\n />\n </div>\n <select\n value={selectedCategory}\n onChange={(e) => {\n setSelectedCategory(e.target.value as ServiceCategory | '');\n setCurrentPage(1);\n }}\n className=\"px-4 py-2 border border-border-seam rounded-md bg-bg-surface text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\"\n >\n <option value=\"\">\n {tr('proserviceworld.shared.filters.allCategories', 'All Categories')}\n </option>\n <option value=\"financial_services\">{categoryLabel('financial_services')}</option>\n <option value=\"legal_services\">{categoryLabel('legal_services')}</option>\n <option value=\"marketing_advertising\">{categoryLabel('marketing_advertising')}</option>\n <option value=\"it_technology\">{categoryLabel('it_technology')}</option>\n <option value=\"human_resources\">{categoryLabel('human_resources')}</option>\n <option value=\"accounting_bookkeeping\">{categoryLabel('accounting_bookkeeping')}</option>\n <option value=\"creative_design\">{categoryLabel('creative_design')}</option>\n <option value=\"education_training\">{categoryLabel('education_training')}</option>\n </select>\n </div>\n\n {paged.length > 0 ? (\n <div\n className={\n viewMode === 'grid'\n ? 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6'\n : 'space-y-4'\n }\n >\n {paged.map((service) => (\n <GlassCard\n key={service.id}\n treatment=\"glass\"\n glow={service.featured}\n className=\"border-border-seam p-0 transition-shadow hover:shadow-pop\"\n >\n <div className={viewMode === 'grid' ? 'p-6' : 'p-4 flex items-center gap-6'}>\n {viewMode === 'grid' ? (\n <>\n <div className=\"flex items-center justify-between mb-3\">\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {categoryLabel(service.category)}\n </Badge>\n {service.featured && (\n <Badge>{tr('proserviceworld.services.badges.featured', 'Featured')}</Badge>\n )}\n </div>\n <h3 className=\"font-semibold mb-2\">{service.title}</h3>\n <p className=\"text-sm text-text-secondary mb-3 line-clamp-2\">\n {service.description}\n </p>\n <div className=\"flex items-center gap-2 mb-3 text-sm\">\n <div className=\"h-6 w-6 rounded-full bg-bg-sunken flex items-center justify-center text-xs\">\n {service.providerName.charAt(0)}\n </div>\n <span className=\"text-text-secondary\">{service.providerName}</span>\n {service.providerVerified && <CheckMark />}\n </div>\n <div className=\"flex items-center justify-between text-sm\">\n <div className=\"flex items-center\">\n <Star className=\"h-4 w-4 text-status-warning-text fill-current mr-1\" />\n <span className=\"tabular-nums\">{service.providerRating.toFixed(1)}</span>\n <span className=\"text-text-secondary ml-1 tabular-nums\">\n ({service.providerReviews})\n </span>\n </div>\n <span className=\"font-medium tabular-nums\">\n {tr('proserviceworld.services.card.pricing.from', 'From ${{amount}}', {\n amount: service.pricing.basePrice.toLocaleString(),\n })}\n </span>\n </div>\n <div className=\"flex flex-wrap gap-1 mt-3\">\n {service.tags.slice(0, 3).map((t) => (\n <span key={t} className=\"inline-block px-2 py-0.5 bg-bg-sunken text-xs rounded\">\n {t}\n </span>\n ))}\n </div>\n <div className=\"flex items-center gap-4 mt-3 pt-3 border-t border-border-seam text-xs text-text-secondary\">\n <span className=\"flex items-center\">\n <Clock className=\"h-3 w-3 mr-1\" />\n {tr('proserviceworld.services.card.meta.days', '{{count}} days', {\n count: service.duration.typical,\n })}\n </span>\n <span className=\"flex items-center\">\n <Tag className=\"h-3 w-3 mr-1\" />\n {tr('proserviceworld.services.card.meta.bookings', '{{count}} bookings', {\n count: service.totalBookings,\n })}\n </span>\n </div>\n </>\n ) : (\n <>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <h3 className=\"font-semibold\">{service.title}</h3>\n {service.featured && (\n <Badge className=\"text-xs\">\n {tr('proserviceworld.services.badges.featured', 'Featured')}\n </Badge>\n )}\n </div>\n <p className=\"text-sm text-text-secondary mb-2 line-clamp-1\">\n {service.description}\n </p>\n <div className=\"flex items-center gap-3 text-sm text-text-secondary\">\n <span>{service.providerName}</span>\n <span className=\"flex items-center\">\n <Star className=\"h-3 w-3 text-status-warning-text fill-current mr-0.5\" />\n <span className=\"tabular-nums\">{service.providerRating.toFixed(1)}</span>\n </span>\n <span className=\"capitalize\">{categoryLabel(service.category)}</span>\n </div>\n </div>\n <div className=\"text-right shrink-0\">\n <div className=\"font-medium\">\n {tr('proserviceworld.services.card.pricing.from', 'From ${{amount}}', {\n amount: service.pricing.basePrice.toLocaleString(),\n })}\n </div>\n <div className=\"text-sm text-text-secondary\">\n {tr('proserviceworld.services.card.meta.days', '{{count}} days', {\n count: service.duration.typical,\n })}\n </div>\n </div>\n </>\n )}\n </div>\n </GlassCard>\n ))}\n </div>\n ) : (\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title={tr('proserviceworld.services.empty.title', 'No services found')}\n description={tr(\n 'proserviceworld.shared.empty.adjustFilters',\n 'Try adjusting your search criteria or filters.'\n )}\n />\n )}\n\n {totalPages > 1 && (\n <div className=\"flex justify-center gap-2\">\n <Button\n variant=\"outline\"\n disabled={currentPage === 1}\n onClick={() => setCurrentPage((p) => p - 1)}\n >\n {tr('proserviceworld.shared.pagination.previous', 'Previous')}\n </Button>\n <span className=\"flex items-center px-4 text-sm\">\n {tr('proserviceworld.shared.pagination.pageInfo', 'Page {{page}} of {{total}}', {\n page: currentPage,\n total: totalPages,\n })}\n </span>\n <Button\n variant=\"outline\"\n disabled={currentPage >= totalPages}\n onClick={() => setCurrentPage((p) => p + 1)}\n >\n {tr('proserviceworld.shared.pagination.next', 'Next')}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction CheckMark() {\n return (\n <svg className=\"h-4 w-4 text-accent-blue\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n"],"mappings":"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"}