@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.
- package/dist/housingvista/HousingVistaRoutes.d.ts.map +1 -1
- package/dist/housingvista/HousingVistaRoutes.js +136 -37
- package/dist/housingvista/HousingVistaRoutes.js.map +1 -1
- package/dist/housingvista/hooks/useHousingVistaAnalytics.d.ts +1 -1
- package/dist/housingvista/hooks/useHousingVistaAnalytics.d.ts.map +1 -1
- package/dist/housingvista/hooks/useHousingVistaAnalytics.js +4 -4
- package/dist/housingvista/hooks/useHousingVistaAnalytics.js.map +1 -1
- package/dist/housingvista/pages/amc/AMCManagementPage.d.ts.map +1 -1
- package/dist/housingvista/pages/amc/AMCManagementPage.js +62 -60
- package/dist/housingvista/pages/amc/AMCManagementPage.js.map +1 -1
- package/dist/housingvista/pages/assets/AssetDetailPage.d.ts.map +1 -1
- package/dist/housingvista/pages/assets/AssetDetailPage.js +141 -138
- package/dist/housingvista/pages/assets/AssetDetailPage.js.map +1 -1
- package/dist/housingvista/pages/assets/AssetManagementPage.d.ts.map +1 -1
- package/dist/housingvista/pages/assets/AssetManagementPage.js +193 -191
- package/dist/housingvista/pages/assets/AssetManagementPage.js.map +1 -1
- package/dist/housingvista/pages/chat/ChatPage.d.ts.map +1 -1
- package/dist/housingvista/pages/chat/ChatPage.js +115 -113
- package/dist/housingvista/pages/chat/ChatPage.js.map +1 -1
- package/dist/housingvista/pages/finance/HomeLoanDetailPage.d.ts.map +1 -1
- package/dist/housingvista/pages/finance/HomeLoanDetailPage.js +152 -149
- package/dist/housingvista/pages/finance/HomeLoanDetailPage.js.map +1 -1
- package/dist/housingvista/pages/finance/HomeLoansPage.d.ts.map +1 -1
- package/dist/housingvista/pages/finance/HomeLoansPage.js +141 -139
- package/dist/housingvista/pages/finance/HomeLoansPage.js.map +1 -1
- package/dist/housingvista/pages/investments/InvestmentDetailPage.d.ts.map +1 -1
- package/dist/housingvista/pages/investments/InvestmentDetailPage.js +290 -287
- package/dist/housingvista/pages/investments/InvestmentDetailPage.js.map +1 -1
- package/dist/housingvista/pages/investments/InvestmentsPage.d.ts.map +1 -1
- package/dist/housingvista/pages/investments/InvestmentsPage.js +64 -62
- package/dist/housingvista/pages/investments/InvestmentsPage.js.map +1 -1
- package/dist/housingvista/pages/legal/LegalPage.d.ts.map +1 -1
- package/dist/housingvista/pages/legal/LegalPage.js +95 -93
- package/dist/housingvista/pages/legal/LegalPage.js.map +1 -1
- package/dist/housingvista/pages/legal/LegalServiceDetailPage.d.ts.map +1 -1
- package/dist/housingvista/pages/legal/LegalServiceDetailPage.js +129 -126
- package/dist/housingvista/pages/legal/LegalServiceDetailPage.js.map +1 -1
- package/dist/housingvista/pages/market/AreaInsightsPage.d.ts.map +1 -1
- package/dist/housingvista/pages/market/AreaInsightsPage.js +99 -97
- package/dist/housingvista/pages/market/AreaInsightsPage.js.map +1 -1
- package/dist/housingvista/pages/market/MarketAnalyticsPage.d.ts.map +1 -1
- package/dist/housingvista/pages/market/MarketAnalyticsPage.js +138 -136
- package/dist/housingvista/pages/market/MarketAnalyticsPage.js.map +1 -1
- package/dist/housingvista/pages/marketplace/MarketplacePage.d.ts.map +1 -1
- package/dist/housingvista/pages/marketplace/MarketplacePage.js +99 -97
- package/dist/housingvista/pages/marketplace/MarketplacePage.js.map +1 -1
- package/dist/housingvista/pages/marketplace/ServiceDetailPage.d.ts.map +1 -1
- package/dist/housingvista/pages/marketplace/ServiceDetailPage.js +137 -134
- package/dist/housingvista/pages/marketplace/ServiceDetailPage.js.map +1 -1
- package/dist/housingvista/pages/offers/OffersPage.d.ts.map +1 -1
- package/dist/housingvista/pages/offers/OffersPage.js +94 -92
- package/dist/housingvista/pages/offers/OffersPage.js.map +1 -1
- package/dist/housingvista/pages/properties/AddPropertyPage.d.ts.map +1 -1
- package/dist/housingvista/pages/properties/AddPropertyPage.js +280 -279
- package/dist/housingvista/pages/properties/AddPropertyPage.js.map +1 -1
- package/dist/housingvista/pages/rental/RentalManagementPage.d.ts.map +1 -1
- package/dist/housingvista/pages/rental/RentalManagementPage.js +153 -151
- package/dist/housingvista/pages/rental/RentalManagementPage.js.map +1 -1
- package/dist/housingvista/pages/settings/ProfilePage.d.ts.map +1 -1
- package/dist/housingvista/pages/settings/ProfilePage.js +52 -50
- package/dist/housingvista/pages/settings/ProfilePage.js.map +1 -1
- package/dist/housingvista/pages/settings/SettingsPage.d.ts.map +1 -1
- package/dist/housingvista/pages/settings/SettingsPage.js +54 -52
- package/dist/housingvista/pages/settings/SettingsPage.js.map +1 -1
- package/dist/housingvista/pages/shortlist/ShortlistPage.d.ts.map +1 -1
- package/dist/housingvista/pages/shortlist/ShortlistPage.js +43 -41
- package/dist/housingvista/pages/shortlist/ShortlistPage.js.map +1 -1
- package/dist/housingvista/pages/transactions/TransactionDetailPage.d.ts.map +1 -1
- package/dist/housingvista/pages/transactions/TransactionDetailPage.js +211 -208
- package/dist/housingvista/pages/transactions/TransactionDetailPage.js.map +1 -1
- package/dist/housingvista/pages/transactions/TransactionsPage.d.ts.map +1 -1
- package/dist/housingvista/pages/transactions/TransactionsPage.js +85 -83
- package/dist/housingvista/pages/transactions/TransactionsPage.js.map +1 -1
- package/dist/housingvista/pages/verification/VerificationDetailPage.d.ts.map +1 -1
- package/dist/housingvista/pages/verification/VerificationDetailPage.js +25 -22
- package/dist/housingvista/pages/verification/VerificationDetailPage.js.map +1 -1
- package/dist/housingvista/pages/verification/VerificationPage.d.ts.map +1 -1
- package/dist/housingvista/pages/verification/VerificationPage.js +123 -121
- package/dist/housingvista/pages/verification/VerificationPage.js.map +1 -1
- package/dist/housingvista/pages/viewings/ViewingsPage.d.ts.map +1 -1
- package/dist/housingvista/pages/viewings/ViewingsPage.js +128 -126
- package/dist/housingvista/pages/viewings/ViewingsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,27 +3,28 @@ import { StatusBadge as n } from "../../components/StatusBadge.js";
|
|
|
3
3
|
import { EmptyState as r } from "../../components/EmptyState.js";
|
|
4
4
|
import { Breadcrumbs as i } from "../../components/Breadcrumbs.js";
|
|
5
5
|
import { LoadingSkeleton as a } from "../../components/LoadingSkeleton.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { useTrackPageView as o } from "../../hooks/useHousingVistaAnalytics.js";
|
|
7
|
+
import { useLegalService as s } from "../../hooks/index.js";
|
|
8
|
+
import { ContactOwnerDialog as c } from "../../components/ContactOwnerDialog.js";
|
|
9
|
+
import { ReviewsSection as l } from "../../components/ReviewsSection.js";
|
|
9
10
|
import "../../components/index.js";
|
|
10
|
-
import { useState as
|
|
11
|
-
import { ArrowLeft as
|
|
12
|
-
import { useLocation as
|
|
13
|
-
import { jsx as
|
|
14
|
-
import { Button as
|
|
11
|
+
import { useState as u } from "react";
|
|
12
|
+
import { ArrowLeft as d, BookOpen as f, ClipboardCheck as p, Clock as m, FileText as h, Gavel as g, IndianRupee as _, MessageCircle as v, Scale as y, Search as b, ShieldCheck as x, Star as S } from "lucide-react";
|
|
13
|
+
import { useLocation as C, useNavigate as w, useParams as T } from "react-router-dom";
|
|
14
|
+
import { jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
15
|
+
import { Button as O, EmphasisPanel as k, GlassCard as A, PagePurpose as j } from "@burdenoff/fe-libs/ui";
|
|
15
16
|
//#region src/housingvista/pages/legal/LegalServiceDetailPage.tsx
|
|
16
|
-
function
|
|
17
|
+
function M(e) {
|
|
17
18
|
switch (e) {
|
|
18
|
-
case "title_search": return /* @__PURE__ */
|
|
19
|
-
case "lease_review": return /* @__PURE__ */
|
|
20
|
-
case "dispute_resolution": return /* @__PURE__ */
|
|
21
|
-
case "registration": return /* @__PURE__ */
|
|
22
|
-
case "compliance": return /* @__PURE__ */
|
|
23
|
-
default: return /* @__PURE__ */
|
|
19
|
+
case "title_search": return /* @__PURE__ */ E(b, { className: "h-5 w-5" });
|
|
20
|
+
case "lease_review": return /* @__PURE__ */ E(h, { className: "h-5 w-5" });
|
|
21
|
+
case "dispute_resolution": return /* @__PURE__ */ E(g, { className: "h-5 w-5" });
|
|
22
|
+
case "registration": return /* @__PURE__ */ E(p, { className: "h-5 w-5" });
|
|
23
|
+
case "compliance": return /* @__PURE__ */ E(f, { className: "h-5 w-5" });
|
|
24
|
+
default: return /* @__PURE__ */ E(y, { className: "h-5 w-5" });
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
|
-
function
|
|
27
|
+
function N(e) {
|
|
27
28
|
switch (e) {
|
|
28
29
|
case "available": return "success";
|
|
29
30
|
case "busy": return "warning";
|
|
@@ -31,270 +32,272 @@ function M(e) {
|
|
|
31
32
|
default: return "muted";
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
|
-
function
|
|
35
|
-
return /* @__PURE__ */
|
|
35
|
+
function P({ rating: t }) {
|
|
36
|
+
return /* @__PURE__ */ E("div", {
|
|
36
37
|
className: "flex items-center gap-0.5 text-status-warning-text",
|
|
37
|
-
children: Array.from({ length: 5 }).map((n, r) => /* @__PURE__ */
|
|
38
|
+
children: Array.from({ length: 5 }).map((n, r) => /* @__PURE__ */ E(S, { className: e("h-4 w-4", r < Math.floor(t) ? "fill-current" : "fill-none text-text-secondary/30") }, r))
|
|
38
39
|
});
|
|
39
40
|
}
|
|
40
|
-
function
|
|
41
|
-
let { id: e } =
|
|
42
|
-
|
|
41
|
+
function F() {
|
|
42
|
+
let { id: e } = T();
|
|
43
|
+
o("housingvista.legal.viewed", e);
|
|
44
|
+
let f = w(), g = C(), [b, F] = u(!1), { data: I, loading: L } = s(e);
|
|
45
|
+
if (L) return /* @__PURE__ */ E("div", {
|
|
43
46
|
className: "p-6",
|
|
44
|
-
children: /* @__PURE__ */
|
|
47
|
+
children: /* @__PURE__ */ E(a, { variant: "detail" })
|
|
45
48
|
});
|
|
46
|
-
if (!
|
|
49
|
+
if (!I) return /* @__PURE__ */ E("div", {
|
|
47
50
|
className: "p-6",
|
|
48
|
-
children: /* @__PURE__ */
|
|
51
|
+
children: /* @__PURE__ */ E(r, {
|
|
49
52
|
illustration: "empty-search",
|
|
50
|
-
icon: /* @__PURE__ */
|
|
53
|
+
icon: /* @__PURE__ */ E(y, { className: "h-12 w-12" }),
|
|
51
54
|
title: "Legal Service Not Found",
|
|
52
55
|
description: "The legal service you're looking for doesn't exist or is no longer offered.",
|
|
53
|
-
action: /* @__PURE__ */
|
|
54
|
-
onClick: () =>
|
|
56
|
+
action: /* @__PURE__ */ D("button", {
|
|
57
|
+
onClick: () => f("../legal"),
|
|
55
58
|
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",
|
|
56
|
-
children: [/* @__PURE__ */
|
|
59
|
+
children: [/* @__PURE__ */ E(d, { className: "h-4 w-4" }), "Back to Legal Services"]
|
|
57
60
|
})
|
|
58
61
|
})
|
|
59
62
|
});
|
|
60
|
-
let
|
|
61
|
-
return /* @__PURE__ */
|
|
63
|
+
let R = I.status === "unavailable", z = I.documentsRequired ?? [];
|
|
64
|
+
return /* @__PURE__ */ D("div", {
|
|
62
65
|
className: "flex flex-col gap-6 p-6",
|
|
63
66
|
children: [
|
|
64
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ E(i, { items: [{
|
|
65
68
|
label: "Legal",
|
|
66
69
|
href: "../"
|
|
67
|
-
}, { label:
|
|
68
|
-
/* @__PURE__ */
|
|
70
|
+
}, { label: I.title }] }),
|
|
71
|
+
/* @__PURE__ */ D("div", {
|
|
69
72
|
className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",
|
|
70
|
-
children: [/* @__PURE__ */
|
|
73
|
+
children: [/* @__PURE__ */ D("div", {
|
|
71
74
|
className: "flex items-start gap-4",
|
|
72
|
-
children: [/* @__PURE__ */
|
|
75
|
+
children: [/* @__PURE__ */ E("div", {
|
|
73
76
|
className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-lg bg-bg-sunken text-text-secondary",
|
|
74
|
-
children:
|
|
75
|
-
}), /* @__PURE__ */
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
-
onClick: () =>
|
|
77
|
+
children: M(I.category)
|
|
78
|
+
}), /* @__PURE__ */ D("div", { children: [
|
|
79
|
+
/* @__PURE__ */ D("button", {
|
|
80
|
+
onClick: () => f("../legal"),
|
|
78
81
|
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",
|
|
79
|
-
children: [/* @__PURE__ */
|
|
82
|
+
children: [/* @__PURE__ */ E(d, { className: "h-4 w-4" }), "Back to Legal Services"]
|
|
80
83
|
}),
|
|
81
|
-
/* @__PURE__ */
|
|
84
|
+
/* @__PURE__ */ E("h1", {
|
|
82
85
|
className: "text-2xl font-semibold text-text-primary",
|
|
83
|
-
children:
|
|
86
|
+
children: I.title
|
|
84
87
|
}),
|
|
85
|
-
/* @__PURE__ */
|
|
88
|
+
/* @__PURE__ */ D("div", {
|
|
86
89
|
className: "mt-2 flex flex-wrap items-center gap-2",
|
|
87
90
|
children: [
|
|
88
|
-
/* @__PURE__ */
|
|
89
|
-
label:
|
|
90
|
-
variant:
|
|
91
|
+
/* @__PURE__ */ E(n, {
|
|
92
|
+
label: I.status,
|
|
93
|
+
variant: N(I.status),
|
|
91
94
|
dot: !0
|
|
92
95
|
}),
|
|
93
|
-
/* @__PURE__ */
|
|
94
|
-
label:
|
|
96
|
+
/* @__PURE__ */ E(n, {
|
|
97
|
+
label: I.category.replace(/_/g, " "),
|
|
95
98
|
variant: "muted"
|
|
96
99
|
}),
|
|
97
|
-
/* @__PURE__ */
|
|
100
|
+
/* @__PURE__ */ E("span", {
|
|
98
101
|
className: "text-sm text-text-secondary",
|
|
99
|
-
children:
|
|
102
|
+
children: I.providerName
|
|
100
103
|
})
|
|
101
104
|
]
|
|
102
105
|
})
|
|
103
106
|
] })]
|
|
104
|
-
}), /* @__PURE__ */
|
|
107
|
+
}), /* @__PURE__ */ E("div", {
|
|
105
108
|
className: "flex items-center gap-2",
|
|
106
|
-
children:
|
|
109
|
+
children: R ? /* @__PURE__ */ E(O, {
|
|
107
110
|
type: "button",
|
|
108
111
|
disabled: !0,
|
|
109
112
|
children: "Currently Unavailable"
|
|
110
|
-
}) : /* @__PURE__ */
|
|
113
|
+
}) : /* @__PURE__ */ D(O, {
|
|
111
114
|
type: "button",
|
|
112
115
|
variant: "default",
|
|
113
|
-
onClick: () =>
|
|
114
|
-
children: [/* @__PURE__ */
|
|
116
|
+
onClick: () => F(!0),
|
|
117
|
+
children: [/* @__PURE__ */ E(v, { className: "mr-1.5 h-4 w-4" }), "Book Now"]
|
|
115
118
|
})
|
|
116
119
|
})]
|
|
117
120
|
}),
|
|
118
|
-
/* @__PURE__ */
|
|
121
|
+
/* @__PURE__ */ E(j, {
|
|
119
122
|
className: "max-w-3xl",
|
|
120
123
|
children: "Everything you need to decide whether to engage this legal provider — what the service covers, their rating and fees, how long it takes, and which documents to prepare. When you're ready, request a consultation to reach them through Messages."
|
|
121
124
|
}),
|
|
122
|
-
/* @__PURE__ */
|
|
125
|
+
/* @__PURE__ */ E(k, {
|
|
123
126
|
className: "p-4",
|
|
124
|
-
children: /* @__PURE__ */
|
|
127
|
+
children: /* @__PURE__ */ D("div", {
|
|
125
128
|
className: "grid grid-cols-2 gap-4 lg:grid-cols-4",
|
|
126
129
|
children: [
|
|
127
|
-
/* @__PURE__ */
|
|
130
|
+
/* @__PURE__ */ D("div", {
|
|
128
131
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
|
|
129
|
-
children: [/* @__PURE__ */
|
|
132
|
+
children: [/* @__PURE__ */ D("div", {
|
|
130
133
|
className: "flex items-center gap-2 text-text-secondary",
|
|
131
|
-
children: [/* @__PURE__ */
|
|
134
|
+
children: [/* @__PURE__ */ E(S, { className: "h-4 w-4" }), /* @__PURE__ */ E("span", {
|
|
132
135
|
className: "text-xs font-medium",
|
|
133
136
|
children: "Provider Rating"
|
|
134
137
|
})]
|
|
135
|
-
}), /* @__PURE__ */
|
|
138
|
+
}), /* @__PURE__ */ D("div", {
|
|
136
139
|
className: "mt-2 flex items-center gap-2",
|
|
137
|
-
children: [/* @__PURE__ */
|
|
140
|
+
children: [/* @__PURE__ */ E("span", {
|
|
138
141
|
className: "text-xl font-bold text-text-primary",
|
|
139
|
-
children:
|
|
140
|
-
}),
|
|
142
|
+
children: I.providerRating ?? "—"
|
|
143
|
+
}), I.providerRating != null && /* @__PURE__ */ E(P, { rating: I.providerRating })]
|
|
141
144
|
})]
|
|
142
145
|
}),
|
|
143
|
-
/* @__PURE__ */
|
|
146
|
+
/* @__PURE__ */ D("div", {
|
|
144
147
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
|
|
145
|
-
children: [/* @__PURE__ */
|
|
148
|
+
children: [/* @__PURE__ */ D("div", {
|
|
146
149
|
className: "flex items-center gap-2 text-text-secondary",
|
|
147
|
-
children: [/* @__PURE__ */
|
|
150
|
+
children: [/* @__PURE__ */ E(_, { className: "h-4 w-4" }), /* @__PURE__ */ E("span", {
|
|
148
151
|
className: "text-xs font-medium",
|
|
149
152
|
children: "Price Range"
|
|
150
153
|
})]
|
|
151
|
-
}), /* @__PURE__ */
|
|
154
|
+
}), /* @__PURE__ */ E("div", {
|
|
152
155
|
className: "mt-2 text-xl font-bold text-text-primary",
|
|
153
|
-
children:
|
|
156
|
+
children: I.priceRange ?? "—"
|
|
154
157
|
})]
|
|
155
158
|
}),
|
|
156
|
-
/* @__PURE__ */
|
|
159
|
+
/* @__PURE__ */ D("div", {
|
|
157
160
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
|
|
158
|
-
children: [/* @__PURE__ */
|
|
161
|
+
children: [/* @__PURE__ */ D("div", {
|
|
159
162
|
className: "flex items-center gap-2 text-text-secondary",
|
|
160
|
-
children: [/* @__PURE__ */
|
|
163
|
+
children: [/* @__PURE__ */ E(m, { className: "h-4 w-4" }), /* @__PURE__ */ E("span", {
|
|
161
164
|
className: "text-xs font-medium",
|
|
162
165
|
children: "Est. Duration"
|
|
163
166
|
})]
|
|
164
|
-
}), /* @__PURE__ */
|
|
167
|
+
}), /* @__PURE__ */ E("div", {
|
|
165
168
|
className: "mt-2 text-sm font-bold text-text-primary",
|
|
166
|
-
children:
|
|
169
|
+
children: I.estimatedDuration ?? "—"
|
|
167
170
|
})]
|
|
168
171
|
}),
|
|
169
|
-
/* @__PURE__ */
|
|
172
|
+
/* @__PURE__ */ D("div", {
|
|
170
173
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-4",
|
|
171
|
-
children: [/* @__PURE__ */
|
|
174
|
+
children: [/* @__PURE__ */ D("div", {
|
|
172
175
|
className: "flex items-center gap-2 text-text-secondary",
|
|
173
|
-
children: [/* @__PURE__ */
|
|
176
|
+
children: [/* @__PURE__ */ E(x, { className: "h-4 w-4" }), /* @__PURE__ */ E("span", {
|
|
174
177
|
className: "text-xs font-medium",
|
|
175
178
|
children: "Consultation"
|
|
176
179
|
})]
|
|
177
|
-
}), /* @__PURE__ */
|
|
180
|
+
}), /* @__PURE__ */ E("div", {
|
|
178
181
|
className: "mt-2 text-sm font-bold text-text-primary",
|
|
179
|
-
children:
|
|
182
|
+
children: I.consultationFee && I.consultationFee > 0 ? t(I.consultationFee) : "Free"
|
|
180
183
|
})]
|
|
181
184
|
})
|
|
182
185
|
]
|
|
183
186
|
})
|
|
184
187
|
}),
|
|
185
|
-
/* @__PURE__ */
|
|
188
|
+
/* @__PURE__ */ D("div", {
|
|
186
189
|
className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
|
|
187
|
-
children: [/* @__PURE__ */
|
|
190
|
+
children: [/* @__PURE__ */ D("div", {
|
|
188
191
|
className: "space-y-6 lg:col-span-2",
|
|
189
|
-
children: [
|
|
192
|
+
children: [I.description && /* @__PURE__ */ D(A, {
|
|
190
193
|
treatment: "plain",
|
|
191
194
|
className: "border-border-seam p-6",
|
|
192
|
-
children: [/* @__PURE__ */
|
|
195
|
+
children: [/* @__PURE__ */ E("h2", {
|
|
193
196
|
className: "mb-3 text-base font-semibold text-text-primary",
|
|
194
197
|
children: "About this service"
|
|
195
|
-
}), /* @__PURE__ */
|
|
198
|
+
}), /* @__PURE__ */ E("p", {
|
|
196
199
|
className: "text-sm leading-relaxed text-text-secondary",
|
|
197
|
-
children:
|
|
200
|
+
children: I.description
|
|
198
201
|
})]
|
|
199
|
-
}), /* @__PURE__ */
|
|
202
|
+
}), /* @__PURE__ */ D(A, {
|
|
200
203
|
treatment: "plain",
|
|
201
204
|
className: "border-border-seam p-6",
|
|
202
|
-
children: [/* @__PURE__ */
|
|
205
|
+
children: [/* @__PURE__ */ D("h2", {
|
|
203
206
|
className: "mb-4 flex items-center gap-2 text-base font-semibold text-text-primary",
|
|
204
|
-
children: [/* @__PURE__ */
|
|
205
|
-
}),
|
|
207
|
+
children: [/* @__PURE__ */ E(h, { className: "h-5 w-5" }), "Documents Required"]
|
|
208
|
+
}), z.length > 0 ? /* @__PURE__ */ E("ul", {
|
|
206
209
|
className: "grid grid-cols-1 gap-2 sm:grid-cols-2",
|
|
207
|
-
children:
|
|
210
|
+
children: z.map((e, t) => /* @__PURE__ */ D("li", {
|
|
208
211
|
className: "flex items-center gap-2 rounded-lg bg-bg-sunken/50 p-3 text-sm text-text-primary",
|
|
209
|
-
children: [/* @__PURE__ */
|
|
212
|
+
children: [/* @__PURE__ */ E(p, { className: "h-4 w-4 shrink-0 text-status-success-text" }), e]
|
|
210
213
|
}, t))
|
|
211
|
-
}) : /* @__PURE__ */
|
|
214
|
+
}) : /* @__PURE__ */ E(r, {
|
|
212
215
|
illustration: "empty-files",
|
|
213
216
|
title: "No documents listed",
|
|
214
217
|
description: "The provider will confirm what to prepare during your consultation.",
|
|
215
218
|
className: "border-0 bg-transparent p-4"
|
|
216
219
|
})]
|
|
217
220
|
})]
|
|
218
|
-
}), /* @__PURE__ */
|
|
221
|
+
}), /* @__PURE__ */ E("div", {
|
|
219
222
|
className: "space-y-6",
|
|
220
|
-
children: /* @__PURE__ */
|
|
223
|
+
children: /* @__PURE__ */ D(A, {
|
|
221
224
|
treatment: "plain",
|
|
222
225
|
className: "border-border-seam p-5",
|
|
223
226
|
children: [
|
|
224
|
-
/* @__PURE__ */
|
|
227
|
+
/* @__PURE__ */ E("h3", {
|
|
225
228
|
className: "mb-4 text-base font-semibold text-text-primary",
|
|
226
229
|
children: "Provider"
|
|
227
230
|
}),
|
|
228
|
-
/* @__PURE__ */
|
|
231
|
+
/* @__PURE__ */ D("dl", {
|
|
229
232
|
className: "space-y-3 text-sm",
|
|
230
233
|
children: [
|
|
231
|
-
/* @__PURE__ */
|
|
234
|
+
/* @__PURE__ */ D("div", {
|
|
232
235
|
className: "flex items-center justify-between",
|
|
233
|
-
children: [/* @__PURE__ */
|
|
236
|
+
children: [/* @__PURE__ */ E("dt", {
|
|
234
237
|
className: "text-text-secondary",
|
|
235
238
|
children: "Name"
|
|
236
|
-
}), /* @__PURE__ */
|
|
239
|
+
}), /* @__PURE__ */ E("dd", {
|
|
237
240
|
className: "font-medium text-text-primary",
|
|
238
|
-
children:
|
|
241
|
+
children: I.providerName
|
|
239
242
|
})]
|
|
240
243
|
}),
|
|
241
|
-
/* @__PURE__ */
|
|
244
|
+
/* @__PURE__ */ D("div", {
|
|
242
245
|
className: "flex items-center justify-between",
|
|
243
|
-
children: [/* @__PURE__ */
|
|
246
|
+
children: [/* @__PURE__ */ E("dt", {
|
|
244
247
|
className: "text-text-secondary",
|
|
245
248
|
children: "Rating"
|
|
246
|
-
}), /* @__PURE__ */
|
|
249
|
+
}), /* @__PURE__ */ E("dd", {
|
|
247
250
|
className: "font-medium text-text-primary",
|
|
248
|
-
children:
|
|
251
|
+
children: I.providerRating ?? "—"
|
|
249
252
|
})]
|
|
250
253
|
}),
|
|
251
|
-
/* @__PURE__ */
|
|
254
|
+
/* @__PURE__ */ D("div", {
|
|
252
255
|
className: "flex items-center justify-between",
|
|
253
|
-
children: [/* @__PURE__ */
|
|
256
|
+
children: [/* @__PURE__ */ E("dt", {
|
|
254
257
|
className: "text-text-secondary",
|
|
255
258
|
children: "Availability"
|
|
256
|
-
}), /* @__PURE__ */
|
|
257
|
-
label:
|
|
258
|
-
variant:
|
|
259
|
+
}), /* @__PURE__ */ E("dd", { children: /* @__PURE__ */ E(n, {
|
|
260
|
+
label: I.status,
|
|
261
|
+
variant: N(I.status)
|
|
259
262
|
}) })]
|
|
260
263
|
})
|
|
261
264
|
]
|
|
262
265
|
}),
|
|
263
|
-
|
|
266
|
+
R ? /* @__PURE__ */ E(O, {
|
|
264
267
|
type: "button",
|
|
265
268
|
className: "mt-4 w-full justify-center",
|
|
266
269
|
disabled: !0,
|
|
267
270
|
children: "Currently Unavailable"
|
|
268
|
-
}) : /* @__PURE__ */
|
|
271
|
+
}) : /* @__PURE__ */ E(O, {
|
|
269
272
|
type: "button",
|
|
270
273
|
variant: "default",
|
|
271
274
|
className: "mt-4 w-full justify-center",
|
|
272
|
-
onClick: () =>
|
|
275
|
+
onClick: () => F(!0),
|
|
273
276
|
children: "Request a consultation"
|
|
274
277
|
})
|
|
275
278
|
]
|
|
276
279
|
})
|
|
277
280
|
})]
|
|
278
281
|
}),
|
|
279
|
-
/* @__PURE__ */
|
|
280
|
-
entityId:
|
|
282
|
+
/* @__PURE__ */ E(l, {
|
|
283
|
+
entityId: I.id,
|
|
281
284
|
entityType: "housingvista-legal-service",
|
|
282
|
-
aggregateRating:
|
|
285
|
+
aggregateRating: I.providerRating
|
|
283
286
|
}),
|
|
284
|
-
/* @__PURE__ */
|
|
285
|
-
open:
|
|
286
|
-
onOpenChange:
|
|
287
|
-
entityId:
|
|
287
|
+
/* @__PURE__ */ E(c, {
|
|
288
|
+
open: b,
|
|
289
|
+
onOpenChange: F,
|
|
290
|
+
entityId: I.id,
|
|
288
291
|
entityType: "housingvista-legal-service",
|
|
289
|
-
title:
|
|
290
|
-
pagePath:
|
|
291
|
-
heading: `Contact ${
|
|
292
|
-
description: `Request a consultation about ${
|
|
292
|
+
title: I.title,
|
|
293
|
+
pagePath: g.pathname,
|
|
294
|
+
heading: `Contact ${I.providerName}`,
|
|
295
|
+
description: `Request a consultation about ${I.title}. Messages are saved and delivered in your inbox.`
|
|
293
296
|
})
|
|
294
297
|
]
|
|
295
298
|
});
|
|
296
299
|
}
|
|
297
300
|
//#endregion
|
|
298
|
-
export {
|
|
301
|
+
export { F as LegalServiceDetailPage };
|
|
299
302
|
|
|
300
303
|
//# sourceMappingURL=LegalServiceDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegalServiceDetailPage.js","names":[],"sources":["../../../../src/housingvista/pages/legal/LegalServiceDetailPage.tsx"],"sourcesContent":["/**\n * HousingVista Legal Service Detail Page\n * Single legal-service provider backed by `housingvistaLegalService(id)` —\n * category, provider, rating, price, duration, documents required.\n *\n * \"Book Now\" / \"Request a consultation\" opens the real `ContactOwnerDialog` — a\n * persisted conversation with the provider. Reviews are real, backed by\n * EntityComments.\n * @module housingvista\n */\n\nimport { useState } from 'react';\nimport { useNavigate, useParams, useLocation } from 'react-router-dom';\nimport {\n ArrowLeft,\n Scale,\n Star,\n Clock,\n FileText,\n Search as SearchIcon,\n Gavel,\n BookOpen,\n ClipboardCheck,\n MessageCircle,\n ShieldCheck,\n IndianRupee,\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 { useLegalService } from '../../hooks';\nimport { cn, formatCurrency } from '../../utils/helpers';\n\nfunction getCategoryIcon(category: string) {\n switch (category) {\n case 'title_search':\n return <SearchIcon className=\"h-5 w-5\" />;\n case 'lease_review':\n return <FileText className=\"h-5 w-5\" />;\n case 'dispute_resolution':\n return <Gavel className=\"h-5 w-5\" />;\n case 'registration':\n return <ClipboardCheck className=\"h-5 w-5\" />;\n case 'compliance':\n return <BookOpen className=\"h-5 w-5\" />;\n default:\n return <Scale className=\"h-5 w-5\" />;\n }\n}\n\nfunction getStatusVariant(status: string): 'success' | 'warning' | 'error' | 'muted' {\n switch (status) {\n case 'available':\n return 'success';\n case 'busy':\n return 'warning';\n case 'unavailable':\n return 'error';\n default:\n return 'muted';\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('h-4 w-4', i < Math.floor(rating) ? 'fill-current' : 'fill-none text-text-secondary/30')}\n />\n ))}\n </div>\n );\n}\n\nexport function LegalServiceDetailPage() {\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 } = useLegalService(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={<Scale className=\"h-12 w-12\" />}\n title=\"Legal Service Not Found\"\n description=\"The legal service you're looking for doesn't exist or is no longer offered.\"\n action={\n <button\n onClick={() => navigate('../legal')}\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 Legal Services\n </button>\n }\n />\n </div>\n );\n }\n\n const unavailable = service.status === 'unavailable';\n const documents = service.documentsRequired ?? [];\n const breadcrumbs: BreadcrumbItem[] = [{ label: 'Legal', href: '../' }, { label: service.title }];\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('../legal')}\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 Legal Services\n </button>\n <h1 className=\"text-2xl font-semibold text-text-primary\">{service.title}</h1>\n <div className=\"mt-2 flex flex-wrap items-center gap-2\">\n <StatusBadge label={service.status} variant={getStatusVariant(service.status)} dot />\n <StatusBadge label={service.category.replace(/_/g, ' ')} variant=\"muted\" />\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 {unavailable ? (\n <Button type=\"button\" disabled>\n Currently Unavailable\n </Button>\n ) : (\n <Button type=\"button\" variant=\"default\" onClick={() => setContactOpen(true)}>\n <MessageCircle className=\"mr-1.5 h-4 w-4\" />\n Book Now\n </Button>\n )}\n </div>\n </div>\n\n <PagePurpose className=\"max-w-3xl\">\n Everything you need to decide whether to engage this legal provider — what the service covers, their rating and\n fees, how long it takes, and which documents to prepare. When you're ready, request a consultation to reach them\n 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\">Provider 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.providerRating ?? '—'}</span>\n {service.providerRating != null && <RatingStars rating={service.providerRating} />}\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 <IndianRupee className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Price Range</span>\n </div>\n <div className=\"mt-2 text-xl font-bold text-text-primary\">{service.priceRange ?? '—'}</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\">Est. Duration</span>\n </div>\n <div className=\"mt-2 text-sm font-bold text-text-primary\">{service.estimatedDuration ?? '—'}</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 <ShieldCheck className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Consultation</span>\n </div>\n <div className=\"mt-2 text-sm font-bold text-text-primary\">\n {service.consultationFee && service.consultationFee > 0\n ? formatCurrency(service.consultationFee)\n : 'Free'}\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.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 service</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 <FileText className=\"h-5 w-5\" />\n Documents Required\n </h2>\n {documents.length > 0 ? (\n <ul className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n {documents.map((doc, i) => (\n <li\n key={i}\n className=\"flex items-center gap-2 rounded-lg bg-bg-sunken/50 p-3 text-sm text-text-primary\"\n >\n <ClipboardCheck className=\"h-4 w-4 shrink-0 text-status-success-text\" />\n {doc}\n </li>\n ))}\n </ul>\n ) : (\n <EmptyState\n illustration=\"empty-files\"\n title=\"No documents listed\"\n description=\"The provider will confirm what to prepare during your consultation.\"\n className=\"border-0 bg-transparent p-4\"\n />\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\">Rating</dt>\n <dd className=\"font-medium text-text-primary\">{service.providerRating ?? '—'}</dd>\n </div>\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Availability</dt>\n <dd>\n <StatusBadge label={service.status} variant={getStatusVariant(service.status)} />\n </dd>\n </div>\n </dl>\n {unavailable ? (\n <Button type=\"button\" className=\"mt-4 w-full justify-center\" disabled>\n Currently Unavailable\n </Button>\n ) : (\n <Button\n type=\"button\"\n variant=\"default\"\n className=\"mt-4 w-full justify-center\"\n onClick={() => setContactOpen(true)}\n >\n Request a consultation\n </Button>\n )}\n </GlassCard>\n </div>\n </div>\n\n {/* Reviews — real, backed by EntityComments */}\n <ReviewsSection\n entityId={service.id}\n entityType=\"housingvista-legal-service\"\n aggregateRating={service.providerRating}\n />\n\n <ContactOwnerDialog\n open={contactOpen}\n onOpenChange={setContactOpen}\n entityId={service.id}\n entityType=\"housingvista-legal-service\"\n title={service.title}\n pagePath={location.pathname}\n heading={`Contact ${service.providerName}`}\n description={`Request a consultation about ${service.title}. Messages are saved and delivered in your inbox.`}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LegalServiceDetailPage.js","names":[],"sources":["../../../../src/housingvista/pages/legal/LegalServiceDetailPage.tsx"],"sourcesContent":["/**\n * HousingVista Legal Service Detail Page\n * Single legal-service provider backed by `housingvistaLegalService(id)` —\n * category, provider, rating, price, duration, documents required.\n *\n * \"Book Now\" / \"Request a consultation\" opens the real `ContactOwnerDialog` — a\n * persisted conversation with the provider. Reviews are real, backed by\n * EntityComments.\n * @module housingvista\n */\n\nimport { useState } from 'react';\nimport { useNavigate, useParams, useLocation } from 'react-router-dom';\nimport {\n ArrowLeft,\n Scale,\n Star,\n Clock,\n FileText,\n Search as SearchIcon,\n Gavel,\n BookOpen,\n ClipboardCheck,\n MessageCircle,\n ShieldCheck,\n IndianRupee,\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 { useLegalService } from '../../hooks';\nimport { cn, formatCurrency } from '../../utils/helpers';\nimport { useTrackPageView } from '../../hooks/useHousingVistaAnalytics';\n\nfunction getCategoryIcon(category: string) {\n switch (category) {\n case 'title_search':\n return <SearchIcon className=\"h-5 w-5\" />;\n case 'lease_review':\n return <FileText className=\"h-5 w-5\" />;\n case 'dispute_resolution':\n return <Gavel className=\"h-5 w-5\" />;\n case 'registration':\n return <ClipboardCheck className=\"h-5 w-5\" />;\n case 'compliance':\n return <BookOpen className=\"h-5 w-5\" />;\n default:\n return <Scale className=\"h-5 w-5\" />;\n }\n}\n\nfunction getStatusVariant(status: string): 'success' | 'warning' | 'error' | 'muted' {\n switch (status) {\n case 'available':\n return 'success';\n case 'busy':\n return 'warning';\n case 'unavailable':\n return 'error';\n default:\n return 'muted';\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('h-4 w-4', i < Math.floor(rating) ? 'fill-current' : 'fill-none text-text-secondary/30')}\n />\n ))}\n </div>\n );\n}\n\nexport function LegalServiceDetailPage() {\n const { id } = useParams<{ id: string }>();\n\n useTrackPageView('housingvista.legal.viewed', id);\n const navigate = useNavigate();\n const location = useLocation();\n const [contactOpen, setContactOpen] = useState(false);\n const { data: service, loading } = useLegalService(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={<Scale className=\"h-12 w-12\" />}\n title=\"Legal Service Not Found\"\n description=\"The legal service you're looking for doesn't exist or is no longer offered.\"\n action={\n <button\n onClick={() => navigate('../legal')}\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 Legal Services\n </button>\n }\n />\n </div>\n );\n }\n\n const unavailable = service.status === 'unavailable';\n const documents = service.documentsRequired ?? [];\n const breadcrumbs: BreadcrumbItem[] = [{ label: 'Legal', href: '../' }, { label: service.title }];\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('../legal')}\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 Legal Services\n </button>\n <h1 className=\"text-2xl font-semibold text-text-primary\">{service.title}</h1>\n <div className=\"mt-2 flex flex-wrap items-center gap-2\">\n <StatusBadge label={service.status} variant={getStatusVariant(service.status)} dot />\n <StatusBadge label={service.category.replace(/_/g, ' ')} variant=\"muted\" />\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 {unavailable ? (\n <Button type=\"button\" disabled>\n Currently Unavailable\n </Button>\n ) : (\n <Button type=\"button\" variant=\"default\" onClick={() => setContactOpen(true)}>\n <MessageCircle className=\"mr-1.5 h-4 w-4\" />\n Book Now\n </Button>\n )}\n </div>\n </div>\n\n <PagePurpose className=\"max-w-3xl\">\n Everything you need to decide whether to engage this legal provider — what the service covers, their rating and\n fees, how long it takes, and which documents to prepare. When you're ready, request a consultation to reach them\n 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\">Provider 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.providerRating ?? '—'}</span>\n {service.providerRating != null && <RatingStars rating={service.providerRating} />}\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 <IndianRupee className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Price Range</span>\n </div>\n <div className=\"mt-2 text-xl font-bold text-text-primary\">{service.priceRange ?? '—'}</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\">Est. Duration</span>\n </div>\n <div className=\"mt-2 text-sm font-bold text-text-primary\">{service.estimatedDuration ?? '—'}</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 <ShieldCheck className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Consultation</span>\n </div>\n <div className=\"mt-2 text-sm font-bold text-text-primary\">\n {service.consultationFee && service.consultationFee > 0\n ? formatCurrency(service.consultationFee)\n : 'Free'}\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.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 service</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 <FileText className=\"h-5 w-5\" />\n Documents Required\n </h2>\n {documents.length > 0 ? (\n <ul className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n {documents.map((doc, i) => (\n <li\n key={i}\n className=\"flex items-center gap-2 rounded-lg bg-bg-sunken/50 p-3 text-sm text-text-primary\"\n >\n <ClipboardCheck className=\"h-4 w-4 shrink-0 text-status-success-text\" />\n {doc}\n </li>\n ))}\n </ul>\n ) : (\n <EmptyState\n illustration=\"empty-files\"\n title=\"No documents listed\"\n description=\"The provider will confirm what to prepare during your consultation.\"\n className=\"border-0 bg-transparent p-4\"\n />\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\">Rating</dt>\n <dd className=\"font-medium text-text-primary\">{service.providerRating ?? '—'}</dd>\n </div>\n <div className=\"flex items-center justify-between\">\n <dt className=\"text-text-secondary\">Availability</dt>\n <dd>\n <StatusBadge label={service.status} variant={getStatusVariant(service.status)} />\n </dd>\n </div>\n </dl>\n {unavailable ? (\n <Button type=\"button\" className=\"mt-4 w-full justify-center\" disabled>\n Currently Unavailable\n </Button>\n ) : (\n <Button\n type=\"button\"\n variant=\"default\"\n className=\"mt-4 w-full justify-center\"\n onClick={() => setContactOpen(true)}\n >\n Request a consultation\n </Button>\n )}\n </GlassCard>\n </div>\n </div>\n\n {/* Reviews — real, backed by EntityComments */}\n <ReviewsSection\n entityId={service.id}\n entityType=\"housingvista-legal-service\"\n aggregateRating={service.providerRating}\n />\n\n <ContactOwnerDialog\n open={contactOpen}\n onOpenChange={setContactOpen}\n entityId={service.id}\n entityType=\"housingvista-legal-service\"\n title={service.title}\n pagePath={location.pathname}\n heading={`Contact ${service.providerName}`}\n description={`Request a consultation about ${service.title}. 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":"AreaInsightsPage.d.ts","sourceRoot":"","sources":["../../../../src/housingvista/pages/market/AreaInsightsPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AreaInsightsPage.d.ts","sourceRoot":"","sources":["../../../../src/housingvista/pages/market/AreaInsightsPage.tsx"],"names":[],"mappings":"AAiMA,wBAAgB,gBAAgB,gCAkI/B"}
|