@burdenoff/microfe-housingvista 2026.709.2 → 2026.709.3

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 (83) hide show
  1. package/dist/housingvista/HousingVistaRoutes.d.ts.map +1 -1
  2. package/dist/housingvista/HousingVistaRoutes.js +136 -37
  3. package/dist/housingvista/HousingVistaRoutes.js.map +1 -1
  4. package/dist/housingvista/hooks/useHousingVistaAnalytics.d.ts +1 -1
  5. package/dist/housingvista/hooks/useHousingVistaAnalytics.d.ts.map +1 -1
  6. package/dist/housingvista/hooks/useHousingVistaAnalytics.js +4 -4
  7. package/dist/housingvista/hooks/useHousingVistaAnalytics.js.map +1 -1
  8. package/dist/housingvista/pages/amc/AMCManagementPage.d.ts.map +1 -1
  9. package/dist/housingvista/pages/amc/AMCManagementPage.js +62 -60
  10. package/dist/housingvista/pages/amc/AMCManagementPage.js.map +1 -1
  11. package/dist/housingvista/pages/assets/AssetDetailPage.d.ts.map +1 -1
  12. package/dist/housingvista/pages/assets/AssetDetailPage.js +141 -138
  13. package/dist/housingvista/pages/assets/AssetDetailPage.js.map +1 -1
  14. package/dist/housingvista/pages/assets/AssetManagementPage.d.ts.map +1 -1
  15. package/dist/housingvista/pages/assets/AssetManagementPage.js +193 -191
  16. package/dist/housingvista/pages/assets/AssetManagementPage.js.map +1 -1
  17. package/dist/housingvista/pages/chat/ChatPage.d.ts.map +1 -1
  18. package/dist/housingvista/pages/chat/ChatPage.js +115 -113
  19. package/dist/housingvista/pages/chat/ChatPage.js.map +1 -1
  20. package/dist/housingvista/pages/finance/HomeLoanDetailPage.d.ts.map +1 -1
  21. package/dist/housingvista/pages/finance/HomeLoanDetailPage.js +152 -149
  22. package/dist/housingvista/pages/finance/HomeLoanDetailPage.js.map +1 -1
  23. package/dist/housingvista/pages/finance/HomeLoansPage.d.ts.map +1 -1
  24. package/dist/housingvista/pages/finance/HomeLoansPage.js +141 -139
  25. package/dist/housingvista/pages/finance/HomeLoansPage.js.map +1 -1
  26. package/dist/housingvista/pages/investments/InvestmentDetailPage.d.ts.map +1 -1
  27. package/dist/housingvista/pages/investments/InvestmentDetailPage.js +290 -287
  28. package/dist/housingvista/pages/investments/InvestmentDetailPage.js.map +1 -1
  29. package/dist/housingvista/pages/investments/InvestmentsPage.d.ts.map +1 -1
  30. package/dist/housingvista/pages/investments/InvestmentsPage.js +64 -62
  31. package/dist/housingvista/pages/investments/InvestmentsPage.js.map +1 -1
  32. package/dist/housingvista/pages/legal/LegalPage.d.ts.map +1 -1
  33. package/dist/housingvista/pages/legal/LegalPage.js +95 -93
  34. package/dist/housingvista/pages/legal/LegalPage.js.map +1 -1
  35. package/dist/housingvista/pages/legal/LegalServiceDetailPage.d.ts.map +1 -1
  36. package/dist/housingvista/pages/legal/LegalServiceDetailPage.js +129 -126
  37. package/dist/housingvista/pages/legal/LegalServiceDetailPage.js.map +1 -1
  38. package/dist/housingvista/pages/market/AreaInsightsPage.d.ts.map +1 -1
  39. package/dist/housingvista/pages/market/AreaInsightsPage.js +99 -97
  40. package/dist/housingvista/pages/market/AreaInsightsPage.js.map +1 -1
  41. package/dist/housingvista/pages/market/MarketAnalyticsPage.d.ts.map +1 -1
  42. package/dist/housingvista/pages/market/MarketAnalyticsPage.js +138 -136
  43. package/dist/housingvista/pages/market/MarketAnalyticsPage.js.map +1 -1
  44. package/dist/housingvista/pages/marketplace/MarketplacePage.d.ts.map +1 -1
  45. package/dist/housingvista/pages/marketplace/MarketplacePage.js +99 -97
  46. package/dist/housingvista/pages/marketplace/MarketplacePage.js.map +1 -1
  47. package/dist/housingvista/pages/marketplace/ServiceDetailPage.d.ts.map +1 -1
  48. package/dist/housingvista/pages/marketplace/ServiceDetailPage.js +137 -134
  49. package/dist/housingvista/pages/marketplace/ServiceDetailPage.js.map +1 -1
  50. package/dist/housingvista/pages/offers/OffersPage.d.ts.map +1 -1
  51. package/dist/housingvista/pages/offers/OffersPage.js +94 -92
  52. package/dist/housingvista/pages/offers/OffersPage.js.map +1 -1
  53. package/dist/housingvista/pages/properties/AddPropertyPage.d.ts.map +1 -1
  54. package/dist/housingvista/pages/properties/AddPropertyPage.js +280 -279
  55. package/dist/housingvista/pages/properties/AddPropertyPage.js.map +1 -1
  56. package/dist/housingvista/pages/rental/RentalManagementPage.d.ts.map +1 -1
  57. package/dist/housingvista/pages/rental/RentalManagementPage.js +153 -151
  58. package/dist/housingvista/pages/rental/RentalManagementPage.js.map +1 -1
  59. package/dist/housingvista/pages/settings/ProfilePage.d.ts.map +1 -1
  60. package/dist/housingvista/pages/settings/ProfilePage.js +52 -50
  61. package/dist/housingvista/pages/settings/ProfilePage.js.map +1 -1
  62. package/dist/housingvista/pages/settings/SettingsPage.d.ts.map +1 -1
  63. package/dist/housingvista/pages/settings/SettingsPage.js +54 -52
  64. package/dist/housingvista/pages/settings/SettingsPage.js.map +1 -1
  65. package/dist/housingvista/pages/shortlist/ShortlistPage.d.ts.map +1 -1
  66. package/dist/housingvista/pages/shortlist/ShortlistPage.js +43 -41
  67. package/dist/housingvista/pages/shortlist/ShortlistPage.js.map +1 -1
  68. package/dist/housingvista/pages/transactions/TransactionDetailPage.d.ts.map +1 -1
  69. package/dist/housingvista/pages/transactions/TransactionDetailPage.js +211 -208
  70. package/dist/housingvista/pages/transactions/TransactionDetailPage.js.map +1 -1
  71. package/dist/housingvista/pages/transactions/TransactionsPage.d.ts.map +1 -1
  72. package/dist/housingvista/pages/transactions/TransactionsPage.js +85 -83
  73. package/dist/housingvista/pages/transactions/TransactionsPage.js.map +1 -1
  74. package/dist/housingvista/pages/verification/VerificationDetailPage.d.ts.map +1 -1
  75. package/dist/housingvista/pages/verification/VerificationDetailPage.js +25 -22
  76. package/dist/housingvista/pages/verification/VerificationDetailPage.js.map +1 -1
  77. package/dist/housingvista/pages/verification/VerificationPage.d.ts.map +1 -1
  78. package/dist/housingvista/pages/verification/VerificationPage.js +123 -121
  79. package/dist/housingvista/pages/verification/VerificationPage.js.map +1 -1
  80. package/dist/housingvista/pages/viewings/ViewingsPage.d.ts.map +1 -1
  81. package/dist/housingvista/pages/viewings/ViewingsPage.js +128 -126
  82. package/dist/housingvista/pages/viewings/ViewingsPage.js.map +1 -1
  83. package/package.json +1 -1
@@ -3,314 +3,317 @@ import { StatusBadge as t } from "../../components/StatusBadge.js";
3
3
  import { EmptyState as n } from "../../components/EmptyState.js";
4
4
  import { Breadcrumbs as r } from "../../components/Breadcrumbs.js";
5
5
  import { LoadingSkeleton as i } from "../../components/LoadingSkeleton.js";
6
- import { useMarketplaceService as a } from "../../hooks/index.js";
7
- import { ContactOwnerDialog as o } from "../../components/ContactOwnerDialog.js";
8
- import { ReviewsSection as s } from "../../components/ReviewsSection.js";
6
+ import { useTrackPageView as a } from "../../hooks/useHousingVistaAnalytics.js";
7
+ import { useMarketplaceService as o } from "../../hooks/index.js";
8
+ import { ContactOwnerDialog as s } from "../../components/ContactOwnerDialog.js";
9
+ import { ReviewsSection as c } from "../../components/ReviewsSection.js";
9
10
  import "../../components/index.js";
10
- import { useState as c } from "react";
11
- import { ArrowLeft as l, CheckCircle as u, Clock as d, MapPin as f, MessageCircle as p, Paintbrush as m, Phone as h, Shield as g, ShieldCheck as _, SprayCanIcon as v, Star as y, Trees as b, Users as x, Wrench as S, Zap as C } from "lucide-react";
12
- import { useLocation as w, useNavigate as T, useParams as E } from "react-router-dom";
13
- import { jsx as D, jsxs as O } from "react/jsx-runtime";
14
- import { Button as k, EmphasisPanel as A, GlassCard as j, PagePurpose as M } from "@burdenoff/fe-libs/ui";
11
+ import { useState as l } from "react";
12
+ import { ArrowLeft as u, CheckCircle as d, Clock as f, MapPin as p, MessageCircle as m, Paintbrush as h, Phone as g, Shield as _, ShieldCheck as v, SprayCanIcon as y, Star as b, Trees as x, Users as S, Wrench as C, Zap as w } from "lucide-react";
13
+ import { useLocation as T, useNavigate as E, useParams as D } from "react-router-dom";
14
+ import { jsx as O, jsxs as k } from "react/jsx-runtime";
15
+ import { Button as A, EmphasisPanel as j, GlassCard as M, PagePurpose as N } from "@burdenoff/fe-libs/ui";
15
16
  //#region src/housingvista/pages/marketplace/ServiceDetailPage.tsx
16
- function N(e) {
17
+ function P(e) {
17
18
  switch (e) {
18
- case "repair": return /* @__PURE__ */ D(S, { className: "h-5 w-5" });
19
- case "maintenance": return /* @__PURE__ */ D(C, { className: "h-5 w-5" });
20
- case "cleaning": return /* @__PURE__ */ D(v, { className: "h-5 w-5" });
21
- case "renovation": return /* @__PURE__ */ D(m, { className: "h-5 w-5" });
22
- case "security": return /* @__PURE__ */ D(g, { className: "h-5 w-5" });
23
- case "landscaping": return /* @__PURE__ */ D(b, { className: "h-5 w-5" });
24
- case "pest_control": return /* @__PURE__ */ D(_, { className: "h-5 w-5" });
25
- default: return /* @__PURE__ */ D(S, { className: "h-5 w-5" });
19
+ case "repair": return /* @__PURE__ */ O(C, { className: "h-5 w-5" });
20
+ case "maintenance": return /* @__PURE__ */ O(w, { className: "h-5 w-5" });
21
+ case "cleaning": return /* @__PURE__ */ O(y, { className: "h-5 w-5" });
22
+ case "renovation": return /* @__PURE__ */ O(h, { className: "h-5 w-5" });
23
+ case "security": return /* @__PURE__ */ O(_, { className: "h-5 w-5" });
24
+ case "landscaping": return /* @__PURE__ */ O(x, { className: "h-5 w-5" });
25
+ case "pest_control": return /* @__PURE__ */ O(v, { className: "h-5 w-5" });
26
+ default: return /* @__PURE__ */ O(C, { className: "h-5 w-5" });
26
27
  }
27
28
  }
28
- function P({ rating: t }) {
29
- return /* @__PURE__ */ D("div", {
29
+ function F({ rating: t }) {
30
+ return /* @__PURE__ */ O("div", {
30
31
  className: "flex items-center gap-0.5 text-status-warning-text",
31
- children: Array.from({ length: 5 }).map((n, r) => /* @__PURE__ */ D(y, { className: e("h-4 w-4", r < Math.floor(t) ? "fill-current" : r < t ? "fill-current opacity-50" : "fill-none text-text-secondary/30") }, r))
32
+ children: Array.from({ length: 5 }).map((n, r) => /* @__PURE__ */ O(b, { className: e("h-4 w-4", r < Math.floor(t) ? "fill-current" : r < t ? "fill-current opacity-50" : "fill-none text-text-secondary/30") }, r))
32
33
  });
33
34
  }
34
- function F() {
35
- let { id: e } = E(), m = T(), g = w(), [_, v] = c(!1), { data: b, loading: S } = a(e);
36
- if (S) return /* @__PURE__ */ D("div", {
35
+ function I() {
36
+ let { id: e } = D();
37
+ a("housingvista.marketplace.viewed", e);
38
+ let h = E(), _ = T(), [v, y] = l(!1), { data: x, loading: C } = o(e);
39
+ if (C) return /* @__PURE__ */ O("div", {
37
40
  className: "p-6",
38
- children: /* @__PURE__ */ D(i, { variant: "detail" })
41
+ children: /* @__PURE__ */ O(i, { variant: "detail" })
39
42
  });
40
- if (!b) return /* @__PURE__ */ D("div", {
43
+ if (!x) return /* @__PURE__ */ O("div", {
41
44
  className: "p-6",
42
- children: /* @__PURE__ */ D(n, {
45
+ children: /* @__PURE__ */ O(n, {
43
46
  illustration: "empty-search",
44
- icon: /* @__PURE__ */ D(x, { className: "h-12 w-12" }),
47
+ icon: /* @__PURE__ */ O(S, { className: "h-12 w-12" }),
45
48
  title: "Service Not Found",
46
49
  description: "The service provider you're looking for doesn't exist or is no longer listed.",
47
- action: /* @__PURE__ */ O("button", {
48
- onClick: () => m("../marketplace"),
50
+ action: /* @__PURE__ */ k("button", {
51
+ onClick: () => h("../marketplace"),
49
52
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg-hover",
50
- children: [/* @__PURE__ */ D(l, { className: "h-4 w-4" }), "Back to Marketplace"]
53
+ children: [/* @__PURE__ */ O(u, { className: "h-4 w-4" }), "Back to Marketplace"]
51
54
  })
52
55
  })
53
56
  });
54
- let C = b.availableAreas ?? [];
55
- return /* @__PURE__ */ O("div", {
57
+ let w = x.availableAreas ?? [];
58
+ return /* @__PURE__ */ k("div", {
56
59
  className: "flex flex-col gap-6 p-6",
57
60
  children: [
58
- /* @__PURE__ */ D(r, { items: [{
61
+ /* @__PURE__ */ O(r, { items: [{
59
62
  label: "Marketplace",
60
63
  href: "../"
61
- }, { label: b.name }] }),
62
- /* @__PURE__ */ O("div", {
64
+ }, { label: x.name }] }),
65
+ /* @__PURE__ */ k("div", {
63
66
  className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",
64
- children: [/* @__PURE__ */ O("div", {
67
+ children: [/* @__PURE__ */ k("div", {
65
68
  className: "flex items-start gap-4",
66
- children: [/* @__PURE__ */ D("div", {
69
+ children: [/* @__PURE__ */ O("div", {
67
70
  className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-lg bg-bg-sunken text-text-secondary",
68
- children: N(b.category)
69
- }), /* @__PURE__ */ O("div", { children: [
70
- /* @__PURE__ */ O("button", {
71
- onClick: () => m("../marketplace"),
71
+ children: P(x.category)
72
+ }), /* @__PURE__ */ k("div", { children: [
73
+ /* @__PURE__ */ k("button", {
74
+ onClick: () => h("../marketplace"),
72
75
  className: "mb-2 inline-flex items-center gap-2 rounded-md px-2 py-1 text-sm text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary",
73
- children: [/* @__PURE__ */ D(l, { className: "h-4 w-4" }), "Back to Marketplace"]
76
+ children: [/* @__PURE__ */ O(u, { className: "h-4 w-4" }), "Back to Marketplace"]
74
77
  }),
75
- /* @__PURE__ */ D("h1", {
78
+ /* @__PURE__ */ O("h1", {
76
79
  className: "text-2xl font-semibold text-text-primary",
77
- children: b.name
80
+ children: x.name
78
81
  }),
79
- /* @__PURE__ */ O("div", {
82
+ /* @__PURE__ */ k("div", {
80
83
  className: "mt-2 flex flex-wrap items-center gap-2",
81
84
  children: [
82
- /* @__PURE__ */ D(t, {
83
- label: b.category.replace(/_/g, " "),
85
+ /* @__PURE__ */ O(t, {
86
+ label: x.category.replace(/_/g, " "),
84
87
  variant: "muted"
85
88
  }),
86
- b.verified && /* @__PURE__ */ D(t, {
89
+ x.verified && /* @__PURE__ */ O(t, {
87
90
  label: "Verified",
88
91
  variant: "success",
89
92
  dot: !0
90
93
  }),
91
- b.featured && /* @__PURE__ */ D(t, {
94
+ x.featured && /* @__PURE__ */ O(t, {
92
95
  label: "Featured",
93
96
  variant: "warning"
94
97
  }),
95
- /* @__PURE__ */ D("span", {
98
+ /* @__PURE__ */ O("span", {
96
99
  className: "text-sm text-text-secondary",
97
- children: b.providerName
100
+ children: x.providerName
98
101
  })
99
102
  ]
100
103
  })
101
104
  ] })]
102
- }), /* @__PURE__ */ D("div", {
105
+ }), /* @__PURE__ */ O("div", {
103
106
  className: "flex items-center gap-2",
104
- children: /* @__PURE__ */ O(k, {
107
+ children: /* @__PURE__ */ k(A, {
105
108
  type: "button",
106
109
  variant: "default",
107
- onClick: () => v(!0),
108
- children: [/* @__PURE__ */ D(p, { className: "mr-1.5 h-4 w-4" }), "Contact"]
110
+ onClick: () => y(!0),
111
+ children: [/* @__PURE__ */ O(m, { className: "mr-1.5 h-4 w-4" }), "Contact"]
109
112
  })
110
113
  })]
111
114
  }),
112
- /* @__PURE__ */ D(M, {
115
+ /* @__PURE__ */ O(N, {
113
116
  className: "max-w-3xl",
114
117
  children: "Everything you need to decide whether to hire this provider — their rating and reviews, how fast they respond, the areas they cover, and whether they're verified. When you're ready, contact them through Messages."
115
118
  }),
116
- /* @__PURE__ */ D(A, {
119
+ /* @__PURE__ */ O(j, {
117
120
  className: "p-4",
118
- children: /* @__PURE__ */ O("div", {
121
+ children: /* @__PURE__ */ k("div", {
119
122
  className: "grid grid-cols-2 gap-4 lg:grid-cols-4",
120
123
  children: [
121
- /* @__PURE__ */ O("div", {
124
+ /* @__PURE__ */ k("div", {
122
125
  className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
123
- children: [/* @__PURE__ */ O("div", {
126
+ children: [/* @__PURE__ */ k("div", {
124
127
  className: "flex items-center gap-2 text-text-secondary",
125
- children: [/* @__PURE__ */ D(y, { className: "h-4 w-4" }), /* @__PURE__ */ D("span", {
128
+ children: [/* @__PURE__ */ O(b, { className: "h-4 w-4" }), /* @__PURE__ */ O("span", {
126
129
  className: "text-xs font-medium",
127
130
  children: "Rating"
128
131
  })]
129
- }), /* @__PURE__ */ O("div", {
132
+ }), /* @__PURE__ */ k("div", {
130
133
  className: "mt-2 flex items-center gap-2",
131
- children: [/* @__PURE__ */ D("span", {
134
+ children: [/* @__PURE__ */ O("span", {
132
135
  className: "text-xl font-bold text-text-primary",
133
- children: b.rating ?? "—"
134
- }), b.rating != null && /* @__PURE__ */ D(P, { rating: b.rating })]
136
+ children: x.rating ?? "—"
137
+ }), x.rating != null && /* @__PURE__ */ O(F, { rating: x.rating })]
135
138
  })]
136
139
  }),
137
- /* @__PURE__ */ O("div", {
140
+ /* @__PURE__ */ k("div", {
138
141
  className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
139
- children: [/* @__PURE__ */ O("div", {
142
+ children: [/* @__PURE__ */ k("div", {
140
143
  className: "flex items-center gap-2 text-text-secondary",
141
- children: [/* @__PURE__ */ D(x, { className: "h-4 w-4" }), /* @__PURE__ */ D("span", {
144
+ children: [/* @__PURE__ */ O(S, { className: "h-4 w-4" }), /* @__PURE__ */ O("span", {
142
145
  className: "text-xs font-medium",
143
146
  children: "Reviews"
144
147
  })]
145
- }), /* @__PURE__ */ D("div", {
148
+ }), /* @__PURE__ */ O("div", {
146
149
  className: "mt-2 text-xl font-bold text-text-primary",
147
- children: b.reviewCount
150
+ children: x.reviewCount
148
151
  })]
149
152
  }),
150
- /* @__PURE__ */ O("div", {
153
+ /* @__PURE__ */ k("div", {
151
154
  className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
152
- children: [/* @__PURE__ */ O("div", {
155
+ children: [/* @__PURE__ */ k("div", {
153
156
  className: "flex items-center gap-2 text-text-secondary",
154
- children: [/* @__PURE__ */ D(d, { className: "h-4 w-4" }), /* @__PURE__ */ D("span", {
157
+ children: [/* @__PURE__ */ O(f, { className: "h-4 w-4" }), /* @__PURE__ */ O("span", {
155
158
  className: "text-xs font-medium",
156
159
  children: "Response Time"
157
160
  })]
158
- }), /* @__PURE__ */ D("div", {
161
+ }), /* @__PURE__ */ O("div", {
159
162
  className: "mt-2 text-sm font-bold text-text-primary",
160
- children: b.responseTime ?? "—"
163
+ children: x.responseTime ?? "—"
161
164
  })]
162
165
  }),
163
- /* @__PURE__ */ O("div", {
166
+ /* @__PURE__ */ k("div", {
164
167
  className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
165
- children: [/* @__PURE__ */ O("div", {
168
+ children: [/* @__PURE__ */ k("div", {
166
169
  className: "flex items-center gap-2 text-text-secondary",
167
- children: [/* @__PURE__ */ D(f, { className: "h-4 w-4" }), /* @__PURE__ */ D("span", {
170
+ children: [/* @__PURE__ */ O(p, { className: "h-4 w-4" }), /* @__PURE__ */ O("span", {
168
171
  className: "text-xs font-medium",
169
172
  children: "Coverage"
170
173
  })]
171
- }), /* @__PURE__ */ O("div", {
174
+ }), /* @__PURE__ */ k("div", {
172
175
  className: "mt-2 text-sm font-bold text-text-primary",
173
176
  children: [
174
- C.length,
177
+ w.length,
175
178
  " area",
176
- C.length === 1 ? "" : "s"
179
+ w.length === 1 ? "" : "s"
177
180
  ]
178
181
  })]
179
182
  })
180
183
  ]
181
184
  })
182
185
  }),
183
- /* @__PURE__ */ O("div", {
186
+ /* @__PURE__ */ k("div", {
184
187
  className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
185
- children: [/* @__PURE__ */ O("div", {
188
+ children: [/* @__PURE__ */ k("div", {
186
189
  className: "space-y-6 lg:col-span-2",
187
190
  children: [
188
- b.imageUrl && /* @__PURE__ */ D("div", {
191
+ x.imageUrl && /* @__PURE__ */ O("div", {
189
192
  className: "overflow-hidden rounded-xl border border-border-subtle",
190
- children: /* @__PURE__ */ D("img", {
191
- src: b.imageUrl,
192
- alt: b.name,
193
+ children: /* @__PURE__ */ O("img", {
194
+ src: x.imageUrl,
195
+ alt: x.name,
193
196
  className: "h-64 w-full object-cover"
194
197
  })
195
198
  }),
196
- b.description && /* @__PURE__ */ O(j, {
199
+ x.description && /* @__PURE__ */ k(M, {
197
200
  treatment: "plain",
198
201
  className: "border-border-seam p-6",
199
- children: [/* @__PURE__ */ D("h2", {
202
+ children: [/* @__PURE__ */ O("h2", {
200
203
  className: "mb-3 text-base font-semibold text-text-primary",
201
204
  children: "About this provider"
202
- }), /* @__PURE__ */ D("p", {
205
+ }), /* @__PURE__ */ O("p", {
203
206
  className: "text-sm leading-relaxed text-text-secondary",
204
- children: b.description
207
+ children: x.description
205
208
  })]
206
209
  }),
207
- /* @__PURE__ */ O(j, {
210
+ /* @__PURE__ */ k(M, {
208
211
  treatment: "plain",
209
212
  className: "border-border-seam p-6",
210
- children: [/* @__PURE__ */ O("h2", {
213
+ children: [/* @__PURE__ */ k("h2", {
211
214
  className: "mb-4 flex items-center gap-2 text-base font-semibold text-text-primary",
212
- children: [/* @__PURE__ */ D(f, { className: "h-5 w-5" }), "Service Areas"]
213
- }), C.length > 0 ? /* @__PURE__ */ D("div", {
215
+ children: [/* @__PURE__ */ O(p, { className: "h-5 w-5" }), "Service Areas"]
216
+ }), w.length > 0 ? /* @__PURE__ */ O("div", {
214
217
  className: "flex flex-wrap gap-2",
215
- children: C.map((e, t) => /* @__PURE__ */ D("span", {
218
+ children: w.map((e, t) => /* @__PURE__ */ O("span", {
216
219
  className: "rounded-full bg-bg-sunken px-3 py-1 text-xs text-text-primary",
217
220
  children: e
218
221
  }, t))
219
- }) : /* @__PURE__ */ D("p", {
222
+ }) : /* @__PURE__ */ O("p", {
220
223
  className: "text-sm text-text-secondary",
221
224
  children: "Service areas not specified — ask the provider directly."
222
225
  })]
223
226
  })
224
227
  ]
225
- }), /* @__PURE__ */ D("div", {
228
+ }), /* @__PURE__ */ O("div", {
226
229
  className: "space-y-6",
227
- children: /* @__PURE__ */ O(j, {
230
+ children: /* @__PURE__ */ k(M, {
228
231
  treatment: "plain",
229
232
  className: "border-border-seam p-5",
230
233
  children: [
231
- /* @__PURE__ */ D("h3", {
234
+ /* @__PURE__ */ O("h3", {
232
235
  className: "mb-4 text-base font-semibold text-text-primary",
233
236
  children: "Provider"
234
237
  }),
235
- /* @__PURE__ */ O("dl", {
238
+ /* @__PURE__ */ k("dl", {
236
239
  className: "space-y-3 text-sm",
237
240
  children: [
238
- /* @__PURE__ */ O("div", {
241
+ /* @__PURE__ */ k("div", {
239
242
  className: "flex items-center justify-between",
240
- children: [/* @__PURE__ */ D("dt", {
243
+ children: [/* @__PURE__ */ O("dt", {
241
244
  className: "text-text-secondary",
242
245
  children: "Name"
243
- }), /* @__PURE__ */ D("dd", {
246
+ }), /* @__PURE__ */ O("dd", {
244
247
  className: "font-medium text-text-primary",
245
- children: b.providerName
248
+ children: x.providerName
246
249
  })]
247
250
  }),
248
- /* @__PURE__ */ O("div", {
251
+ /* @__PURE__ */ k("div", {
249
252
  className: "flex items-center justify-between",
250
- children: [/* @__PURE__ */ D("dt", {
253
+ children: [/* @__PURE__ */ O("dt", {
251
254
  className: "text-text-secondary",
252
255
  children: "Category"
253
- }), /* @__PURE__ */ D("dd", {
256
+ }), /* @__PURE__ */ O("dd", {
254
257
  className: "font-medium capitalize text-text-primary",
255
- children: b.category.replace(/_/g, " ")
258
+ children: x.category.replace(/_/g, " ")
256
259
  })]
257
260
  }),
258
- /* @__PURE__ */ O("div", {
261
+ /* @__PURE__ */ k("div", {
259
262
  className: "flex items-center justify-between",
260
- children: [/* @__PURE__ */ D("dt", {
263
+ children: [/* @__PURE__ */ O("dt", {
261
264
  className: "text-text-secondary",
262
265
  children: "Price Range"
263
- }), /* @__PURE__ */ D("dd", {
266
+ }), /* @__PURE__ */ O("dd", {
264
267
  className: "font-medium text-text-primary",
265
- children: b.priceRange ?? "—"
268
+ children: x.priceRange ?? "—"
266
269
  })]
267
270
  }),
268
- /* @__PURE__ */ O("div", {
271
+ /* @__PURE__ */ k("div", {
269
272
  className: "flex items-center justify-between",
270
- children: [/* @__PURE__ */ D("dt", {
273
+ children: [/* @__PURE__ */ O("dt", {
271
274
  className: "text-text-secondary",
272
275
  children: "Verified"
273
- }), /* @__PURE__ */ D("dd", { children: b.verified ? /* @__PURE__ */ O("span", {
276
+ }), /* @__PURE__ */ O("dd", { children: x.verified ? /* @__PURE__ */ k("span", {
274
277
  className: "inline-flex items-center gap-1 text-status-success-text",
275
- children: [/* @__PURE__ */ D(u, { className: "h-4 w-4" }), "Yes"]
276
- }) : /* @__PURE__ */ D("span", {
278
+ children: [/* @__PURE__ */ O(d, { className: "h-4 w-4" }), "Yes"]
279
+ }) : /* @__PURE__ */ O("span", {
277
280
  className: "text-text-secondary",
278
281
  children: "Not verified"
279
282
  }) })]
280
283
  })
281
284
  ]
282
285
  }),
283
- /* @__PURE__ */ O(k, {
286
+ /* @__PURE__ */ k(A, {
284
287
  type: "button",
285
288
  variant: "default",
286
289
  className: "mt-4 w-full justify-center",
287
- onClick: () => v(!0),
288
- children: [/* @__PURE__ */ D(h, { className: "mr-1.5 h-4 w-4" }), "Contact provider"]
290
+ onClick: () => y(!0),
291
+ children: [/* @__PURE__ */ O(g, { className: "mr-1.5 h-4 w-4" }), "Contact provider"]
289
292
  })
290
293
  ]
291
294
  })
292
295
  })]
293
296
  }),
294
- /* @__PURE__ */ D(s, {
295
- entityId: b.id,
297
+ /* @__PURE__ */ O(c, {
298
+ entityId: x.id,
296
299
  entityType: "housingvista-marketplace-service",
297
- aggregateRating: b.rating,
298
- reviewCount: b.reviewCount
300
+ aggregateRating: x.rating,
301
+ reviewCount: x.reviewCount
299
302
  }),
300
- /* @__PURE__ */ D(o, {
301
- open: _,
302
- onOpenChange: v,
303
- entityId: b.id,
303
+ /* @__PURE__ */ O(s, {
304
+ open: v,
305
+ onOpenChange: y,
306
+ entityId: x.id,
304
307
  entityType: "housingvista-marketplace-service",
305
- title: b.name,
306
- pagePath: g.pathname,
307
- heading: `Contact ${b.providerName}`,
308
- description: `Start a conversation about ${b.name}. Messages are saved and delivered in your inbox.`
308
+ title: x.name,
309
+ pagePath: _.pathname,
310
+ heading: `Contact ${x.providerName}`,
311
+ description: `Start a conversation about ${x.name}. Messages are saved and delivered in your inbox.`
309
312
  })
310
313
  ]
311
314
  });
312
315
  }
313
316
  //#endregion
314
- export { F as ServiceDetailPage };
317
+ export { I as ServiceDetailPage };
315
318
 
316
319
  //# sourceMappingURL=ServiceDetailPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceDetailPage.js","names":[],"sources":["../../../../src/housingvista/pages/marketplace/ServiceDetailPage.tsx"],"sourcesContent":["/**\n * HousingVista Marketplace Service Detail Page\n * Single service provider backed by `housingvistaMarketplaceService(id)` —\n * rating, review count, response time, service areas, verified status.\n *\n * \"Contact\" opens the real `ContactOwnerDialog` — a persisted conversation with\n * the provider. Reviews are real, backed by EntityComments; the denormalized\n * rating/reviewCount stays for at-a-glance display.\n * @module housingvista\n */\n\nimport { useState } from 'react';\nimport { useNavigate, useParams, useLocation } from 'react-router-dom';\nimport {\n ArrowLeft,\n Star,\n MapPin,\n Clock,\n CheckCircle,\n MessageCircle,\n Phone,\n Wrench,\n Zap,\n SprayCanIcon,\n Paintbrush,\n Shield,\n ShieldCheck,\n Trees,\n Users,\n} from 'lucide-react';\nimport { Button, EmphasisPanel, GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport {\n Breadcrumbs,\n StatusBadge,\n EmptyState,\n LoadingSkeleton,\n ContactOwnerDialog,\n ReviewsSection,\n} from '../../components';\nimport type { BreadcrumbItem } from '../../components';\nimport { useMarketplaceService } from '../../hooks';\nimport { cn } from '../../utils/helpers';\n\nfunction getCategoryIcon(category: string) {\n switch (category) {\n case 'repair':\n return <Wrench className=\"h-5 w-5\" />;\n case 'maintenance':\n return <Zap className=\"h-5 w-5\" />;\n case 'cleaning':\n return <SprayCanIcon className=\"h-5 w-5\" />;\n case 'renovation':\n return <Paintbrush className=\"h-5 w-5\" />;\n case 'security':\n return <Shield className=\"h-5 w-5\" />;\n case 'landscaping':\n return <Trees className=\"h-5 w-5\" />;\n case 'pest_control':\n return <ShieldCheck className=\"h-5 w-5\" />;\n default:\n return <Wrench className=\"h-5 w-5\" />;\n }\n}\n\nfunction RatingStars({ rating }: { rating: number }) {\n return (\n <div className=\"flex items-center gap-0.5 text-status-warning-text\">\n {Array.from({ length: 5 }).map((_, i) => (\n <Star\n key={i}\n className={cn(\n 'h-4 w-4',\n i < Math.floor(rating)\n ? 'fill-current'\n : i < rating\n ? 'fill-current opacity-50'\n : 'fill-none text-text-secondary/30'\n )}\n />\n ))}\n </div>\n );\n}\n\nexport function ServiceDetailPage() {\n const { id } = useParams<{ id: string }>();\n const navigate = useNavigate();\n const location = useLocation();\n const [contactOpen, setContactOpen] = useState(false);\n const { data: service, loading } = useMarketplaceService(id);\n\n if (loading) {\n return (\n <div className=\"p-6\">\n <LoadingSkeleton variant=\"detail\" />\n </div>\n );\n }\n\n if (!service) {\n return (\n <div className=\"p-6\">\n <EmptyState\n illustration=\"empty-search\"\n icon={<Users className=\"h-12 w-12\" />}\n title=\"Service Not Found\"\n description=\"The service provider you're looking for doesn't exist or is no longer listed.\"\n action={\n <button\n onClick={() => navigate('../marketplace')}\n className=\"inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg-hover\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Marketplace\n </button>\n }\n />\n </div>\n );\n }\n\n const areas = service.availableAreas ?? [];\n const breadcrumbs: BreadcrumbItem[] = [{ label: 'Marketplace', href: '../' }, { label: service.name }];\n\n return (\n <div className=\"flex flex-col gap-6 p-6\">\n <Breadcrumbs items={breadcrumbs} />\n\n {/* Header */}\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div className=\"flex items-start gap-4\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-lg bg-bg-sunken text-text-secondary\">\n {getCategoryIcon(service.category)}\n </div>\n <div>\n <button\n onClick={() => navigate('../marketplace')}\n className=\"mb-2 inline-flex items-center gap-2 rounded-md px-2 py-1 text-sm text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Marketplace\n </button>\n <h1 className=\"text-2xl font-semibold text-text-primary\">{service.name}</h1>\n <div className=\"mt-2 flex flex-wrap items-center gap-2\">\n <StatusBadge label={service.category.replace(/_/g, ' ')} variant=\"muted\" />\n {service.verified && <StatusBadge label=\"Verified\" variant=\"success\" dot />}\n {service.featured && <StatusBadge label=\"Featured\" variant=\"warning\" />}\n <span className=\"text-sm text-text-secondary\">{service.providerName}</span>\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button type=\"button\" variant=\"default\" onClick={() => setContactOpen(true)}>\n <MessageCircle className=\"mr-1.5 h-4 w-4\" />\n Contact\n </Button>\n </div>\n </div>\n\n <PagePurpose className=\"max-w-3xl\">\n Everything you need to decide whether to hire this provider — their rating and reviews, how fast they respond,\n the areas they cover, and whether they're verified. When you're ready, contact them through Messages.\n </PagePurpose>\n\n {/* Key facts — primary insight zone (one EmphasisPanel per page) */}\n <EmphasisPanel className=\"p-4\">\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-text-secondary\">\n <Star className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Rating</span>\n </div>\n <div className=\"mt-2 flex items-center gap-2\">\n <span className=\"text-xl font-bold text-text-primary\">{service.rating ?? '—'}</span>\n {service.rating != null && <RatingStars rating={service.rating} />}\n </div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-text-secondary\">\n <Users className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Reviews</span>\n </div>\n <div className=\"mt-2 text-xl font-bold text-text-primary\">{service.reviewCount}</div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-text-secondary\">\n <Clock className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Response Time</span>\n </div>\n <div className=\"mt-2 text-sm font-bold text-text-primary\">{service.responseTime ?? '—'}</div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-text-secondary\">\n <MapPin className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Coverage</span>\n </div>\n <div className=\"mt-2 text-sm font-bold text-text-primary\">\n {areas.length} area{areas.length !== 1 ? 's' : ''}\n </div>\n </div>\n </div>\n </EmphasisPanel>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Overview */}\n <div className=\"space-y-6 lg:col-span-2\">\n {service.imageUrl && (\n <div className=\"overflow-hidden rounded-xl border border-border-subtle\">\n <img src={service.imageUrl} alt={service.name} className=\"h-64 w-full object-cover\" />\n </div>\n )}\n\n {service.description && (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"mb-3 text-base font-semibold text-text-primary\">About this provider</h2>\n <p className=\"text-sm leading-relaxed text-text-secondary\">{service.description}</p>\n </GlassCard>\n )}\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"mb-4 flex items-center gap-2 text-base font-semibold text-text-primary\">\n <MapPin className=\"h-5 w-5\" />\n Service Areas\n </h2>\n {areas.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {areas.map((area, i) => (\n <span key={i} className=\"rounded-full bg-bg-sunken px-3 py-1 text-xs text-text-primary\">\n {area}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">Service areas not specified — ask the provider directly.</p>\n )}\n </GlassCard>\n </div>\n\n {/* Provider card */}\n <div className=\"space-y-6\">\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h3 className=\"mb-4 text-base font-semibold text-text-primary\">Provider</h3>\n <dl className=\"space-y-3 text-sm\">\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Name</dt>\n <dd className=\"font-medium text-text-primary\">{service.providerName}</dd>\n </div>\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Category</dt>\n <dd className=\"font-medium capitalize text-text-primary\">{service.category.replace(/_/g, ' ')}</dd>\n </div>\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Price Range</dt>\n <dd className=\"font-medium text-text-primary\">{service.priceRange ?? '—'}</dd>\n </div>\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Verified</dt>\n <dd>\n {service.verified ? (\n <span className=\"inline-flex items-center gap-1 text-status-success-text\">\n <CheckCircle className=\"h-4 w-4\" />\n Yes\n </span>\n ) : (\n <span className=\"text-text-secondary\">Not verified</span>\n )}\n </dd>\n </div>\n </dl>\n <Button\n type=\"button\"\n variant=\"default\"\n className=\"mt-4 w-full justify-center\"\n onClick={() => setContactOpen(true)}\n >\n <Phone className=\"mr-1.5 h-4 w-4\" />\n Contact provider\n </Button>\n </GlassCard>\n </div>\n </div>\n\n {/* Reviews — real, backed by EntityComments */}\n <ReviewsSection\n entityId={service.id}\n entityType=\"housingvista-marketplace-service\"\n aggregateRating={service.rating}\n reviewCount={service.reviewCount}\n />\n\n <ContactOwnerDialog\n open={contactOpen}\n onOpenChange={setContactOpen}\n entityId={service.id}\n entityType=\"housingvista-marketplace-service\"\n title={service.name}\n pagePath={location.pathname}\n heading={`Contact ${service.providerName}`}\n description={`Start a conversation about ${service.name}. Messages are saved and delivered in your inbox.`}\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ServiceDetailPage.js","names":[],"sources":["../../../../src/housingvista/pages/marketplace/ServiceDetailPage.tsx"],"sourcesContent":["/**\n * HousingVista Marketplace Service Detail Page\n * Single service provider backed by `housingvistaMarketplaceService(id)` —\n * rating, review count, response time, service areas, verified status.\n *\n * \"Contact\" opens the real `ContactOwnerDialog` — a persisted conversation with\n * the provider. Reviews are real, backed by EntityComments; the denormalized\n * rating/reviewCount stays for at-a-glance display.\n * @module housingvista\n */\n\nimport { useState } from 'react';\nimport { useNavigate, useParams, useLocation } from 'react-router-dom';\nimport {\n ArrowLeft,\n Star,\n MapPin,\n Clock,\n CheckCircle,\n MessageCircle,\n Phone,\n Wrench,\n Zap,\n SprayCanIcon,\n Paintbrush,\n Shield,\n ShieldCheck,\n Trees,\n Users,\n} from 'lucide-react';\nimport { Button, EmphasisPanel, GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport {\n Breadcrumbs,\n StatusBadge,\n EmptyState,\n LoadingSkeleton,\n ContactOwnerDialog,\n ReviewsSection,\n} from '../../components';\nimport type { BreadcrumbItem } from '../../components';\nimport { useMarketplaceService } from '../../hooks';\nimport { cn } from '../../utils/helpers';\nimport { useTrackPageView } from '../../hooks/useHousingVistaAnalytics';\n\nfunction getCategoryIcon(category: string) {\n switch (category) {\n case 'repair':\n return <Wrench className=\"h-5 w-5\" />;\n case 'maintenance':\n return <Zap className=\"h-5 w-5\" />;\n case 'cleaning':\n return <SprayCanIcon className=\"h-5 w-5\" />;\n case 'renovation':\n return <Paintbrush className=\"h-5 w-5\" />;\n case 'security':\n return <Shield className=\"h-5 w-5\" />;\n case 'landscaping':\n return <Trees className=\"h-5 w-5\" />;\n case 'pest_control':\n return <ShieldCheck className=\"h-5 w-5\" />;\n default:\n return <Wrench className=\"h-5 w-5\" />;\n }\n}\n\nfunction RatingStars({ rating }: { rating: number }) {\n return (\n <div className=\"flex items-center gap-0.5 text-status-warning-text\">\n {Array.from({ length: 5 }).map((_, i) => (\n <Star\n key={i}\n className={cn(\n 'h-4 w-4',\n i < Math.floor(rating)\n ? 'fill-current'\n : i < rating\n ? 'fill-current opacity-50'\n : 'fill-none text-text-secondary/30'\n )}\n />\n ))}\n </div>\n );\n}\n\nexport function ServiceDetailPage() {\n const { id } = useParams<{ id: string }>();\n\n useTrackPageView('housingvista.marketplace.viewed', id);\n const navigate = useNavigate();\n const location = useLocation();\n const [contactOpen, setContactOpen] = useState(false);\n const { data: service, loading } = useMarketplaceService(id);\n\n if (loading) {\n return (\n <div className=\"p-6\">\n <LoadingSkeleton variant=\"detail\" />\n </div>\n );\n }\n\n if (!service) {\n return (\n <div className=\"p-6\">\n <EmptyState\n illustration=\"empty-search\"\n icon={<Users className=\"h-12 w-12\" />}\n title=\"Service Not Found\"\n description=\"The service provider you're looking for doesn't exist or is no longer listed.\"\n action={\n <button\n onClick={() => navigate('../marketplace')}\n className=\"inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg-hover\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Marketplace\n </button>\n }\n />\n </div>\n );\n }\n\n const areas = service.availableAreas ?? [];\n const breadcrumbs: BreadcrumbItem[] = [{ label: 'Marketplace', href: '../' }, { label: service.name }];\n\n return (\n <div className=\"flex flex-col gap-6 p-6\">\n <Breadcrumbs items={breadcrumbs} />\n\n {/* Header */}\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div className=\"flex items-start gap-4\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-lg bg-bg-sunken text-text-secondary\">\n {getCategoryIcon(service.category)}\n </div>\n <div>\n <button\n onClick={() => navigate('../marketplace')}\n className=\"mb-2 inline-flex items-center gap-2 rounded-md px-2 py-1 text-sm text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Marketplace\n </button>\n <h1 className=\"text-2xl font-semibold text-text-primary\">{service.name}</h1>\n <div className=\"mt-2 flex flex-wrap items-center gap-2\">\n <StatusBadge label={service.category.replace(/_/g, ' ')} variant=\"muted\" />\n {service.verified && <StatusBadge label=\"Verified\" variant=\"success\" dot />}\n {service.featured && <StatusBadge label=\"Featured\" variant=\"warning\" />}\n <span className=\"text-sm text-text-secondary\">{service.providerName}</span>\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button type=\"button\" variant=\"default\" onClick={() => setContactOpen(true)}>\n <MessageCircle className=\"mr-1.5 h-4 w-4\" />\n Contact\n </Button>\n </div>\n </div>\n\n <PagePurpose className=\"max-w-3xl\">\n Everything you need to decide whether to hire this provider — their rating and reviews, how fast they respond,\n the areas they cover, and whether they're verified. When you're ready, contact them through Messages.\n </PagePurpose>\n\n {/* Key facts — primary insight zone (one EmphasisPanel per page) */}\n <EmphasisPanel className=\"p-4\">\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-text-secondary\">\n <Star className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Rating</span>\n </div>\n <div className=\"mt-2 flex items-center gap-2\">\n <span className=\"text-xl font-bold text-text-primary\">{service.rating ?? '—'}</span>\n {service.rating != null && <RatingStars rating={service.rating} />}\n </div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-text-secondary\">\n <Users className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Reviews</span>\n </div>\n <div className=\"mt-2 text-xl font-bold text-text-primary\">{service.reviewCount}</div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-text-secondary\">\n <Clock className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Response Time</span>\n </div>\n <div className=\"mt-2 text-sm font-bold text-text-primary\">{service.responseTime ?? '—'}</div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-text-secondary\">\n <MapPin className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Coverage</span>\n </div>\n <div className=\"mt-2 text-sm font-bold text-text-primary\">\n {areas.length} area{areas.length !== 1 ? 's' : ''}\n </div>\n </div>\n </div>\n </EmphasisPanel>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Overview */}\n <div className=\"space-y-6 lg:col-span-2\">\n {service.imageUrl && (\n <div className=\"overflow-hidden rounded-xl border border-border-subtle\">\n <img src={service.imageUrl} alt={service.name} className=\"h-64 w-full object-cover\" />\n </div>\n )}\n\n {service.description && (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"mb-3 text-base font-semibold text-text-primary\">About this provider</h2>\n <p className=\"text-sm leading-relaxed text-text-secondary\">{service.description}</p>\n </GlassCard>\n )}\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"mb-4 flex items-center gap-2 text-base font-semibold text-text-primary\">\n <MapPin className=\"h-5 w-5\" />\n Service Areas\n </h2>\n {areas.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {areas.map((area, i) => (\n <span key={i} className=\"rounded-full bg-bg-sunken px-3 py-1 text-xs text-text-primary\">\n {area}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">Service areas not specified — ask the provider directly.</p>\n )}\n </GlassCard>\n </div>\n\n {/* Provider card */}\n <div className=\"space-y-6\">\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h3 className=\"mb-4 text-base font-semibold text-text-primary\">Provider</h3>\n <dl className=\"space-y-3 text-sm\">\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Name</dt>\n <dd className=\"font-medium text-text-primary\">{service.providerName}</dd>\n </div>\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Category</dt>\n <dd className=\"font-medium capitalize text-text-primary\">{service.category.replace(/_/g, ' ')}</dd>\n </div>\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Price Range</dt>\n <dd className=\"font-medium text-text-primary\">{service.priceRange ?? '—'}</dd>\n </div>\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Verified</dt>\n <dd>\n {service.verified ? (\n <span className=\"inline-flex items-center gap-1 text-status-success-text\">\n <CheckCircle className=\"h-4 w-4\" />\n Yes\n </span>\n ) : (\n <span className=\"text-text-secondary\">Not verified</span>\n )}\n </dd>\n </div>\n </dl>\n <Button\n type=\"button\"\n variant=\"default\"\n className=\"mt-4 w-full justify-center\"\n onClick={() => setContactOpen(true)}\n >\n <Phone className=\"mr-1.5 h-4 w-4\" />\n Contact provider\n </Button>\n </GlassCard>\n </div>\n </div>\n\n {/* Reviews — real, backed by EntityComments */}\n <ReviewsSection\n entityId={service.id}\n entityType=\"housingvista-marketplace-service\"\n aggregateRating={service.rating}\n reviewCount={service.reviewCount}\n />\n\n <ContactOwnerDialog\n open={contactOpen}\n onOpenChange={setContactOpen}\n entityId={service.id}\n entityType=\"housingvista-marketplace-service\"\n title={service.name}\n pagePath={location.pathname}\n heading={`Contact ${service.providerName}`}\n description={`Start a conversation about ${service.name}. Messages are saved and delivered in your inbox.`}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OffersPage.d.ts","sourceRoot":"","sources":["../../../../src/housingvista/pages/offers/OffersPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoIH,wBAAgB,UAAU,gCAuSzB"}
1
+ {"version":3,"file":"OffersPage.d.ts","sourceRoot":"","sources":["../../../../src/housingvista/pages/offers/OffersPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqIH,wBAAgB,UAAU,gCAwSzB"}