@burdenoff/microfe-housingvista 2026.930.2 → 2026.1001.2
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/pages/offers/OffersPage.d.ts.map +1 -1
- package/dist/housingvista/pages/offers/OffersPage.js +159 -139
- 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 +273 -253
- package/dist/housingvista/pages/properties/AddPropertyPage.js.map +1 -1
- package/dist/housingvista/pages/properties/PropertyDetailPage.d.ts.map +1 -1
- package/dist/housingvista/pages/properties/PropertyDetailPage.js +290 -265
- package/dist/housingvista/pages/properties/PropertyDetailPage.js.map +1 -1
- package/dist/housingvista/utils/propertyOptions.d.ts +11 -1
- package/dist/housingvista/utils/propertyOptions.d.ts.map +1 -1
- package/dist/housingvista/utils/propertyOptions.js +22 -1
- package/dist/housingvista/utils/propertyOptions.js.map +1 -1
- package/package.json +1 -1
|
@@ -19,19 +19,19 @@ import { CoordinatePicker as Se } from "../../components/maps/CoordinatePicker.j
|
|
|
19
19
|
import { amenityOptions as d } from "../../utils/amenities.js";
|
|
20
20
|
import { currencyOptions as Ce, facingOptions as we, furnishingOptions as Te, propertyCategoryOptions as Ee, propertyTypeOptions as De } from "../../utils/propertyOptions.js";
|
|
21
21
|
import { useMemo as Oe, useState as f } from "react";
|
|
22
|
-
import { ArrowLeft as ke, BadgeCheck as Ae, Bath as je, Bed as Me, Building as Ne, Calculator as Pe, Calendar as Fe, Car as Ie, CheckCircle as p, ChevronLeft as Le, ChevronRight as Re, Compass as ze, DollarSign as Be, Download as Ve, Dumbbell as m, Flame as He, Heart as Ue, KeyRound as We, MapPin as Ge, MessageSquare as Ke, Navigation as qe, ParkingCircle as Je, Pencil as Ye,
|
|
23
|
-
import { useLocation as
|
|
24
|
-
import { Fragment as
|
|
25
|
-
import { Button as b, EmphasisPanel as
|
|
22
|
+
import { ArrowLeft as ke, BadgeCheck as Ae, Bath as je, Bed as Me, Building as Ne, Calculator as Pe, Calendar as Fe, Car as Ie, CheckCircle as p, ChevronLeft as Le, ChevronRight as Re, Compass as ze, DollarSign as Be, Download as Ve, Dumbbell as m, Flame as He, Heart as Ue, KeyRound as We, MapPin as Ge, MessageSquare as Ke, Navigation as qe, ParkingCircle as Je, Pencil as Ye, PencilRuler as Xe, Share2 as Ze, Shield as h, Square as Qe, Trash2 as $e, TreePine as g, TrendingUp as et, Utensils as tt, Waves as nt, Wifi as _, Wind as rt } from "lucide-react";
|
|
23
|
+
import { useLocation as it, useNavigate as at, useParams as ot } from "react-router";
|
|
24
|
+
import { Fragment as st, jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
25
|
+
import { Button as b, EmphasisPanel as ct, NextSteps as lt, PagePurpose as ut, ResponsiveDialog as x, ResponsiveDialogContent as S, ResponsiveDialogDescription as C, ResponsiveDialogFooter as w, ResponsiveDialogHeader as T, ResponsiveDialogTitle as E } from "@burdenoff/fe-libs/ui";
|
|
26
26
|
//#region src/housingvista/pages/properties/PropertyDetailPage.tsx
|
|
27
|
-
var
|
|
27
|
+
var dt = {
|
|
28
28
|
for_sale: "success",
|
|
29
29
|
for_rent: "info",
|
|
30
30
|
sold: "muted",
|
|
31
31
|
rented: "muted",
|
|
32
32
|
under_contract: "warning",
|
|
33
33
|
off_market: "error"
|
|
34
|
-
},
|
|
34
|
+
}, ft = [
|
|
35
35
|
{
|
|
36
36
|
value: "for_sale",
|
|
37
37
|
label: "For Sale"
|
|
@@ -56,7 +56,7 @@ var ut = {
|
|
|
56
56
|
value: "off_market",
|
|
57
57
|
label: "Off Market"
|
|
58
58
|
}
|
|
59
|
-
],
|
|
59
|
+
], pt = [
|
|
60
60
|
{
|
|
61
61
|
value: "sale",
|
|
62
62
|
label: "Sale"
|
|
@@ -69,7 +69,7 @@ var ut = {
|
|
|
69
69
|
value: "lease",
|
|
70
70
|
label: "Lease"
|
|
71
71
|
}
|
|
72
|
-
],
|
|
72
|
+
], mt = [
|
|
73
73
|
{
|
|
74
74
|
value: "",
|
|
75
75
|
label: "— (one-time)"
|
|
@@ -86,7 +86,7 @@ var ut = {
|
|
|
86
86
|
value: "yearly",
|
|
87
87
|
label: "Yearly"
|
|
88
88
|
}
|
|
89
|
-
],
|
|
89
|
+
], ht = {
|
|
90
90
|
title: "",
|
|
91
91
|
description: "",
|
|
92
92
|
status: "for_sale",
|
|
@@ -129,7 +129,7 @@ var ut = {
|
|
|
129
129
|
}, O = (e) => {
|
|
130
130
|
let t = D(e);
|
|
131
131
|
return t === null ? void 0 : t;
|
|
132
|
-
}, k = (e) => e == null ? "" : String(e), A = (e) => e ?? "",
|
|
132
|
+
}, k = (e) => e == null ? "" : String(e), A = (e) => e ?? "", gt = (e) => e.split(",").map((e) => e.trim()).filter(Boolean), _t = [
|
|
133
133
|
{
|
|
134
134
|
key: "bedrooms",
|
|
135
135
|
label: "Bedrooms",
|
|
@@ -191,11 +191,11 @@ var ut = {
|
|
|
191
191
|
step: "1"
|
|
192
192
|
}
|
|
193
193
|
];
|
|
194
|
-
function
|
|
194
|
+
function vt() {
|
|
195
195
|
let e = new Date(Date.now() + 10080 * 60 * 1e3);
|
|
196
196
|
return (/* @__PURE__ */ new Date(e.getTime() - e.getTimezoneOffset() * 6e4)).toISOString().slice(0, 16);
|
|
197
197
|
}
|
|
198
|
-
var
|
|
198
|
+
var yt = [
|
|
199
199
|
{
|
|
200
200
|
id: "details",
|
|
201
201
|
label: "Details"
|
|
@@ -208,10 +208,10 @@ var vt = [
|
|
|
208
208
|
id: "location",
|
|
209
209
|
label: "Location"
|
|
210
210
|
}
|
|
211
|
-
], j = "h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
211
|
+
], j = "h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]", bt = [
|
|
212
212
|
{
|
|
213
213
|
match: /pool|swim/i,
|
|
214
|
-
icon:
|
|
214
|
+
icon: nt
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
217
|
match: /gym|fitness/i,
|
|
@@ -231,11 +231,11 @@ var vt = [
|
|
|
231
231
|
},
|
|
232
232
|
{
|
|
233
233
|
match: /wifi|internet|broadband/i,
|
|
234
|
-
icon:
|
|
234
|
+
icon: _
|
|
235
235
|
},
|
|
236
236
|
{
|
|
237
237
|
match: /a\/?c|air.?condition|central air|hvac/i,
|
|
238
|
-
icon:
|
|
238
|
+
icon: rt
|
|
239
239
|
},
|
|
240
240
|
{
|
|
241
241
|
match: /fire|chimney|heat/i,
|
|
@@ -243,14 +243,14 @@ var vt = [
|
|
|
243
243
|
},
|
|
244
244
|
{
|
|
245
245
|
match: /kitchen|modular|dining/i,
|
|
246
|
-
icon:
|
|
246
|
+
icon: tt
|
|
247
247
|
},
|
|
248
248
|
{
|
|
249
249
|
match: /car|garage/i,
|
|
250
250
|
icon: Ie
|
|
251
251
|
}
|
|
252
|
-
],
|
|
253
|
-
function
|
|
252
|
+
], xt = (e) => bt.find((t) => t.match.test(e))?.icon ?? p;
|
|
253
|
+
function St(e) {
|
|
254
254
|
switch (e.toLowerCase()) {
|
|
255
255
|
case "vacant": return "Vacant — accepting applications";
|
|
256
256
|
case "occupied": return "Currently occupied";
|
|
@@ -259,7 +259,7 @@ function xt(e) {
|
|
|
259
259
|
default: return e.replace(/[-_]/g, " ");
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
|
-
function
|
|
262
|
+
function Ct(e) {
|
|
263
263
|
switch (e.toLowerCase()) {
|
|
264
264
|
case "vacant": return "success";
|
|
265
265
|
case "occupied": return "muted";
|
|
@@ -268,20 +268,20 @@ function St(e) {
|
|
|
268
268
|
default: return "muted";
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
|
-
var
|
|
272
|
-
let { id: p } =
|
|
271
|
+
var wt = () => {
|
|
272
|
+
let { id: p } = ot(), m = at(), He = it(), { emit: Je, emitResource: h } = ee();
|
|
273
273
|
te("housingvista.property.viewed", p);
|
|
274
|
-
let { data: g, loading:
|
|
274
|
+
let { data: g, loading: tt } = ae(p), { data: nt } = ie({ pagination: {
|
|
275
275
|
limit: 8,
|
|
276
276
|
offset: 0
|
|
277
|
-
} }), { data:
|
|
277
|
+
} }), { data: _ } = le(), { data: rt } = se({
|
|
278
278
|
filter: p ? { propertyId: p } : void 0,
|
|
279
279
|
pagination: {
|
|
280
280
|
limit: 1,
|
|
281
281
|
offset: 0
|
|
282
282
|
}
|
|
283
|
-
}), { saveShortlist:
|
|
284
|
-
if (
|
|
283
|
+
}), { saveShortlist: bt, loading: wt } = ce(), { removeShortlist: Tt, loading: Et } = oe(), { bookViewing: Dt, loading: Ot } = l(), { submitOffer: kt, loading: At } = ue(), { updateProperty: jt, loading: M } = fe(), { deleteProperty: Mt, loading: Nt } = re(), { submitRentalApplication: Pt, loading: Ft } = de(), { createInvestment: It, loading: Lt } = ne(), { updatePropertyReraStatus: Rt, loading: zt } = pe(), Bt = Oe(() => nt.filter((e) => e.id !== p).slice(0, 3), [nt, p]), N = Oe(() => _.some((e) => e.propertyId === p), [_, p]), [P, F] = f(0), [I, Vt] = f("details"), [Ht, L] = f(!1), [Ut, R] = f(!1), [Wt, z] = f(!1), [Gt, Kt] = f(!1), [qt, B] = f(!1), [Jt, Yt] = f(!1), [Xt, Zt] = f(""), [Qt, $t] = f(""), [en, tn] = f(""), [nn, rn] = f(""), [an, on] = f(""), [sn, cn] = f(""), [ln, un] = f(""), [dn, fn] = f("8"), [V, pn] = f(!0), [mn, hn] = f("6"), [H, gn] = f(!1), [_n, vn] = f("20"), [yn, bn] = f("8.5"), [xn, Sn] = f("20"), [U, Cn] = f(""), [wn, Tn] = f("in_person"), [En, Dn] = f(""), [On, kn] = f(""), [An, jn] = f(""), [Mn, Nn] = f(""), [Pn, Fn] = f(""), [In, W] = f(""), [G, Ln] = f(ht), [Rn, zn] = f(ht);
|
|
284
|
+
if (tt) return /* @__PURE__ */ y("div", {
|
|
285
285
|
className: "space-y-6 p-6",
|
|
286
286
|
children: [/* @__PURE__ */ v(c, { className: "h-80" }), /* @__PURE__ */ v(c, { variant: "detail" })]
|
|
287
287
|
});
|
|
@@ -299,56 +299,56 @@ var Ct = () => {
|
|
|
299
299
|
})
|
|
300
300
|
})
|
|
301
301
|
});
|
|
302
|
-
let
|
|
302
|
+
let Bn = [{
|
|
303
303
|
label: "Properties",
|
|
304
304
|
href: "../"
|
|
305
|
-
}, { label: g.title }],
|
|
305
|
+
}, { label: g.title }], Vn = (e) => {
|
|
306
306
|
let t = n(e.amount, e.currency);
|
|
307
307
|
return e.type === "rent" && e.period ? `${t}/${e.period.replace("ly", "")}` : t;
|
|
308
|
-
},
|
|
308
|
+
}, Hn = () => F((e) => e === g.images.length - 1 ? 0 : e + 1), Un = () => F((e) => e === 0 ? g.images.length - 1 : e - 1), Wn = () => {
|
|
309
309
|
navigator.share ? navigator.share({
|
|
310
310
|
title: g.title,
|
|
311
311
|
text: g.description,
|
|
312
312
|
url: window.location.href
|
|
313
313
|
}) : (navigator.clipboard.writeText(window.location.href), u.info("Link copied", "The property link is on your clipboard."));
|
|
314
|
-
},
|
|
314
|
+
}, Gn = async () => {
|
|
315
315
|
try {
|
|
316
|
-
N ? (await
|
|
316
|
+
N ? (await Tt(g.id), u.success("Removed from shortlist")) : (await bt(g.id), h("housingvista.shortlist.property_added", g.id), u.success("Saved to shortlist"));
|
|
317
317
|
} catch (e) {
|
|
318
318
|
u.error("Could not update shortlist", e.message);
|
|
319
319
|
}
|
|
320
|
-
},
|
|
320
|
+
}, Kn = async (e) => {
|
|
321
321
|
if (e.preventDefault(), U) try {
|
|
322
|
-
await
|
|
322
|
+
await Dt({
|
|
323
323
|
propertyId: g.id,
|
|
324
324
|
scheduledAt: new Date(U).toISOString(),
|
|
325
|
-
type:
|
|
326
|
-
attendeeName:
|
|
327
|
-
attendeeEmail:
|
|
328
|
-
notes:
|
|
329
|
-
}), h("housingvista.viewing.scheduled", g.id), u.success("Viewing requested", "The owner will confirm your slot shortly."),
|
|
325
|
+
type: wn,
|
|
326
|
+
attendeeName: En.trim() || void 0,
|
|
327
|
+
attendeeEmail: On.trim() || void 0,
|
|
328
|
+
notes: An.trim() || void 0
|
|
329
|
+
}), h("housingvista.viewing.scheduled", g.id), u.success("Viewing requested", "The owner will confirm your slot shortly."), L(!1), Cn(""), Dn(""), kn(""), jn("");
|
|
330
330
|
} catch (e) {
|
|
331
331
|
u.error("Could not book viewing", e.message);
|
|
332
332
|
}
|
|
333
|
-
},
|
|
333
|
+
}, qn = async (e) => {
|
|
334
334
|
e.preventDefault();
|
|
335
|
-
let t = Number(
|
|
335
|
+
let t = Number(Mn);
|
|
336
336
|
if (!t || t <= 0) {
|
|
337
337
|
u.warning("Enter a valid offer amount");
|
|
338
338
|
return;
|
|
339
339
|
}
|
|
340
340
|
try {
|
|
341
|
-
await
|
|
341
|
+
await kt({
|
|
342
342
|
propertyId: g.id,
|
|
343
343
|
amount: t,
|
|
344
344
|
currency: g.price.currency,
|
|
345
|
-
notes:
|
|
346
|
-
expiresAt:
|
|
347
|
-
}), h("housingvista.offer.created", g.id), u.success("Offer submitted", `Your offer of ${n(t, g.price.currency)} was sent.`),
|
|
345
|
+
notes: Pn.trim() || void 0,
|
|
346
|
+
expiresAt: In ? new Date(In).toISOString() : void 0
|
|
347
|
+
}), h("housingvista.offer.created", g.id), u.success("Offer submitted", `Your offer of ${n(t, g.price.currency)} was sent.`), R(!1), Nn(""), Fn(""), W("");
|
|
348
348
|
} catch (e) {
|
|
349
349
|
u.error("Could not submit offer", e.message);
|
|
350
350
|
}
|
|
351
|
-
},
|
|
351
|
+
}, Jn = () => {
|
|
352
352
|
let e = g.location.coordinates, t = {
|
|
353
353
|
title: g.title,
|
|
354
354
|
description: A(g.description),
|
|
@@ -388,11 +388,11 @@ var Ct = () => {
|
|
|
388
388
|
extraAmenities: g.amenities.filter((e) => !d.some((t) => t.label === e.name)),
|
|
389
389
|
catalogAmenities: g.amenities.filter((e) => d.some((t) => t.label === e.name))
|
|
390
390
|
};
|
|
391
|
-
|
|
392
|
-
}, K = (e) =>
|
|
391
|
+
Ln(t), zn(t), z(!0);
|
|
392
|
+
}, K = (e) => Ln((t) => ({
|
|
393
393
|
...t,
|
|
394
394
|
...e
|
|
395
|
-
})), q = (e) => e.trim(),
|
|
395
|
+
})), q = (e) => e.trim(), Yn = async (e) => {
|
|
396
396
|
e.preventDefault();
|
|
397
397
|
let t = G.title.trim(), n = G.city.trim(), r = G.state.trim(), i = D(G.bedrooms), a = D(G.bathrooms), o = D(G.totalArea), s = D(G.price);
|
|
398
398
|
if (!t || !n || !r) {
|
|
@@ -415,7 +415,7 @@ var Ct = () => {
|
|
|
415
415
|
u.warning("Enter a price greater than zero");
|
|
416
416
|
return;
|
|
417
417
|
}
|
|
418
|
-
let c =
|
|
418
|
+
let c = gt(G.landmarks), ee = c.join("|") !== gt(Rn.landmarks).join("|"), te = [...G.amenities].sort().join("|") !== [...Rn.amenities].sort().join("|"), l = {
|
|
419
419
|
title: t,
|
|
420
420
|
description: q(G.description),
|
|
421
421
|
status: G.status,
|
|
@@ -471,40 +471,40 @@ var Ct = () => {
|
|
|
471
471
|
l.amenities = [...t.values()];
|
|
472
472
|
}
|
|
473
473
|
try {
|
|
474
|
-
await
|
|
474
|
+
await jt(g.id, l), h("housingvista.property.updated", g.id), u.success("Property updated"), z(!1);
|
|
475
475
|
} catch (e) {
|
|
476
476
|
u.error("Could not update property", e.message);
|
|
477
477
|
}
|
|
478
|
-
},
|
|
478
|
+
}, Xn = async () => {
|
|
479
479
|
try {
|
|
480
|
-
await
|
|
480
|
+
await Mt(g.id), h("housingvista.property.deleted", g.id), u.success("Property deleted"), m("../properties");
|
|
481
481
|
} catch (e) {
|
|
482
482
|
u.error("Could not delete property", e.message);
|
|
483
483
|
}
|
|
484
|
-
}, J =
|
|
484
|
+
}, J = rt[0], Y = J?.id, Zn = async (e) => {
|
|
485
485
|
if (e.preventDefault(), !Y) {
|
|
486
486
|
u.warning("No rental unit is available for this property yet");
|
|
487
487
|
return;
|
|
488
488
|
}
|
|
489
|
-
if (!
|
|
489
|
+
if (!Xt.trim() || !Qt.trim()) {
|
|
490
490
|
u.warning("Enter your name and email to apply");
|
|
491
491
|
return;
|
|
492
492
|
}
|
|
493
493
|
try {
|
|
494
|
-
await
|
|
494
|
+
await Pt({
|
|
495
495
|
rentalUnitId: Y,
|
|
496
|
-
applicantName:
|
|
497
|
-
applicantEmail:
|
|
498
|
-
applicantPhone:
|
|
499
|
-
monthlyIncome:
|
|
500
|
-
moveInDate:
|
|
501
|
-
}), u.success("Application submitted", "The owner will review your rental application shortly."),
|
|
496
|
+
applicantName: Xt.trim(),
|
|
497
|
+
applicantEmail: Qt.trim(),
|
|
498
|
+
applicantPhone: en.trim() || void 0,
|
|
499
|
+
monthlyIncome: nn ? Number(nn) : void 0,
|
|
500
|
+
moveInDate: an ? new Date(an).toISOString() : void 0
|
|
501
|
+
}), u.success("Application submitted", "The owner will review your rental application shortly."), B(!1), Zt(""), $t(""), tn(""), rn(""), on("");
|
|
502
502
|
} catch (e) {
|
|
503
503
|
u.error("Could not submit application", e.message);
|
|
504
504
|
}
|
|
505
|
-
},
|
|
505
|
+
}, Qn = async () => {
|
|
506
506
|
try {
|
|
507
|
-
await
|
|
507
|
+
await It({
|
|
508
508
|
propertyId: g.id,
|
|
509
509
|
title: `${g.title} — investment`,
|
|
510
510
|
status: "active",
|
|
@@ -516,20 +516,20 @@ var Ct = () => {
|
|
|
516
516
|
} catch (e) {
|
|
517
517
|
u.error("Could not track investment", e.message);
|
|
518
518
|
}
|
|
519
|
-
},
|
|
519
|
+
}, $n = async (e) => {
|
|
520
520
|
try {
|
|
521
|
-
await
|
|
521
|
+
await Rt(g.id, e), u.success(e === "verified" ? "RERA registration verified" : "RERA registration rejected", g.title);
|
|
522
522
|
} catch (e) {
|
|
523
523
|
u.error("Could not update RERA status", e.message);
|
|
524
524
|
}
|
|
525
|
-
}, X = g.price.amount,
|
|
525
|
+
}, X = g.price.amount, er = Number(sn) || Math.round(X * .005), tr = Number(ln) || Math.round(X * .0015), nr = er * 12, rr = X > 0 ? nr / X * 100 : 0, ir = nr - tr * 12, ar = X > 0 ? ir / X * 100 : 0, or = Math.max(0, Number(dn) || 0) / 100, sr = Array.from({ length: 6 }, (e, t) => ({
|
|
526
526
|
label: t === 0 ? "Now" : `Yr ${t}`,
|
|
527
|
-
value: Math.round(X * (1 +
|
|
528
|
-
})),
|
|
527
|
+
value: Math.round(X * (1 + or) ** +t)
|
|
528
|
+
})), cr = sr[sr.length - 1].value, lr = cr - X + ir * 5, ur = X > 0 ? lr / X * 100 : 0, dr = Math.max(0, Number(mn) || 0), fr = V ? dr / 100 * X : 0, pr = Math.min(100, Math.max(0, Number(_n) || 0)), mr = Math.max(0, Number(yn) || 0) / 100, hr = Math.max(1, Number(xn) || 1), gr = H ? pr / 100 * X : X, Z = H ? X - gr : 0, Q = mr / 12, _r = hr * 12, vr = H && Z > 0 ? Q > 0 ? Z * Q * (1 + Q) ** +_r / ((1 + Q) ** +_r - 1) : Z / _r : 0, yr = vr * 12, $ = gr + fr, br = ir - yr, xr = $ > 0 ? br / $ * 100 : 0;
|
|
529
529
|
return /* @__PURE__ */ y("div", {
|
|
530
530
|
className: "space-y-6 p-6",
|
|
531
531
|
children: [
|
|
532
|
-
/* @__PURE__ */ v(s, { items:
|
|
532
|
+
/* @__PURE__ */ v(s, { items: Bn }),
|
|
533
533
|
/* @__PURE__ */ y("div", {
|
|
534
534
|
className: "flex flex-wrap items-center gap-3",
|
|
535
535
|
children: [
|
|
@@ -540,7 +540,7 @@ var Ct = () => {
|
|
|
540
540
|
}),
|
|
541
541
|
/* @__PURE__ */ v(a, {
|
|
542
542
|
label: g.status.replace("_", " "),
|
|
543
|
-
variant:
|
|
543
|
+
variant: dt[g.status] ?? "default",
|
|
544
544
|
dot: !0
|
|
545
545
|
}),
|
|
546
546
|
g.verificationStatus === "verified" && /* @__PURE__ */ v(a, {
|
|
@@ -558,37 +558,37 @@ var Ct = () => {
|
|
|
558
558
|
type: "button",
|
|
559
559
|
variant: "outline",
|
|
560
560
|
size: "sm",
|
|
561
|
-
onClick:
|
|
561
|
+
onClick: Jn,
|
|
562
562
|
children: [/* @__PURE__ */ v(Ye, { className: "mr-1.5 h-4 w-4" }), "Edit"]
|
|
563
563
|
}), /* @__PURE__ */ y(b, {
|
|
564
564
|
type: "button",
|
|
565
565
|
variant: "outline",
|
|
566
566
|
size: "sm",
|
|
567
567
|
onClick: () => Kt(!0),
|
|
568
|
-
children: [/* @__PURE__ */ v(
|
|
568
|
+
children: [/* @__PURE__ */ v($e, { className: "mr-1.5 h-4 w-4" }), "Delete"]
|
|
569
569
|
})]
|
|
570
570
|
})
|
|
571
571
|
]
|
|
572
572
|
}),
|
|
573
|
-
/* @__PURE__ */ v(
|
|
573
|
+
/* @__PURE__ */ v(ut, {
|
|
574
574
|
className: "max-w-3xl",
|
|
575
575
|
children: "Everything you need to evaluate this property in one place — photos, specifications, amenities, and location. Use it to shortlist the property, schedule a viewing, or make an offer."
|
|
576
576
|
}),
|
|
577
|
-
/* @__PURE__ */ v(
|
|
577
|
+
/* @__PURE__ */ v(lt, {
|
|
578
578
|
storageKey: "housingvista-property-detail",
|
|
579
579
|
steps: [
|
|
580
580
|
{
|
|
581
581
|
id: "schedule",
|
|
582
582
|
label: "Schedule a viewing",
|
|
583
583
|
description: "Book a time to see the property in person or virtually.",
|
|
584
|
-
onClick: () =>
|
|
584
|
+
onClick: () => L(!0)
|
|
585
585
|
},
|
|
586
586
|
{
|
|
587
587
|
id: "offer",
|
|
588
588
|
label: "Make an offer",
|
|
589
589
|
description: "Submit a price and let the owner respond.",
|
|
590
590
|
onClick: () => {
|
|
591
|
-
W(
|
|
591
|
+
W(vt()), R(!0);
|
|
592
592
|
}
|
|
593
593
|
},
|
|
594
594
|
{
|
|
@@ -601,82 +601,107 @@ var Ct = () => {
|
|
|
601
601
|
}),
|
|
602
602
|
/* @__PURE__ */ y("div", {
|
|
603
603
|
className: "space-y-3",
|
|
604
|
-
children: [
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
className: "
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
"aria-label": "Previous photo",
|
|
621
|
-
className: "absolute left-4 top-1/2 -translate-y-1/2 rounded-full bg-bg-overlay/70 p-2 text-text-inverse transition-colors hover:bg-bg-overlay",
|
|
622
|
-
children: /* @__PURE__ */ v(Le, { className: "h-5 w-5" })
|
|
623
|
-
}), /* @__PURE__ */ v("button", {
|
|
624
|
-
onClick: Vn,
|
|
625
|
-
"aria-label": "Next photo",
|
|
626
|
-
className: "absolute right-4 top-1/2 -translate-y-1/2 rounded-full bg-bg-overlay/70 p-2 text-text-inverse transition-colors hover:bg-bg-overlay",
|
|
627
|
-
children: /* @__PURE__ */ v(Re, { className: "h-5 w-5" })
|
|
628
|
-
})] }),
|
|
629
|
-
g.verificationStatus === "verified" && /* @__PURE__ */ y("div", {
|
|
630
|
-
className: "absolute left-4 top-4 inline-flex items-center gap-1.5 rounded-full bg-status-success-bg-subtle px-3 py-1 text-xs font-semibold text-status-success-text shadow-elevation-1 backdrop-blur-sm",
|
|
631
|
-
children: [/* @__PURE__ */ v(Ae, { className: "h-4 w-4" }), "Verified listing"]
|
|
632
|
-
}),
|
|
633
|
-
/* @__PURE__ */ y("div", {
|
|
634
|
-
className: "absolute right-4 top-4 flex gap-2",
|
|
635
|
-
children: [/* @__PURE__ */ v("button", {
|
|
636
|
-
onClick: Wn,
|
|
637
|
-
disabled: Ct || Tt,
|
|
638
|
-
"aria-label": N ? "Remove from shortlist" : "Save to shortlist",
|
|
639
|
-
className: "rounded-full bg-bg-surface/85 p-2 shadow-elevation-1 backdrop-blur-sm transition-colors hover:bg-bg-surface disabled:opacity-60",
|
|
640
|
-
children: /* @__PURE__ */ v(Ue, { className: e("h-5 w-5", N ? "fill-status-error-text text-status-error-text" : "text-text-secondary") })
|
|
641
|
-
}), /* @__PURE__ */ v("button", {
|
|
604
|
+
children: [
|
|
605
|
+
/* @__PURE__ */ y("div", {
|
|
606
|
+
className: "relative overflow-hidden rounded-xl border border-border-subtle bg-bg-sunken",
|
|
607
|
+
children: [
|
|
608
|
+
g.images.length > 0 ? /* @__PURE__ */ v("img", {
|
|
609
|
+
src: g.images[P]?.url,
|
|
610
|
+
alt: g.images[P]?.title ?? g.title,
|
|
611
|
+
className: "h-80 w-full object-cover sm:h-[26rem]"
|
|
612
|
+
}) : /* @__PURE__ */ y("div", {
|
|
613
|
+
className: "flex h-80 w-full flex-col items-center justify-center gap-3 bg-gradient-to-br from-[var(--color-action-primary-bg)]/12 via-bg-sunken to-[var(--color-accent-blue)]/12 text-text-secondary/70 sm:h-[26rem]",
|
|
614
|
+
children: [/* @__PURE__ */ v(Ne, { className: "h-12 w-12" }), /* @__PURE__ */ v("span", {
|
|
615
|
+
className: "text-sm font-medium tracking-wide",
|
|
616
|
+
children: "No photos yet"
|
|
617
|
+
})]
|
|
618
|
+
}),
|
|
619
|
+
g.images.length > 1 && /* @__PURE__ */ y(st, { children: [/* @__PURE__ */ v("button", {
|
|
642
620
|
onClick: Un,
|
|
643
|
-
"aria-label": "
|
|
644
|
-
className: "rounded-full bg-bg-
|
|
645
|
-
children: /* @__PURE__ */ v(
|
|
646
|
-
})
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
621
|
+
"aria-label": "Previous photo",
|
|
622
|
+
className: "absolute left-4 top-1/2 -translate-y-1/2 rounded-full bg-bg-overlay/70 p-2 text-text-inverse transition-colors hover:bg-bg-overlay",
|
|
623
|
+
children: /* @__PURE__ */ v(Le, { className: "h-5 w-5" })
|
|
624
|
+
}), /* @__PURE__ */ v("button", {
|
|
625
|
+
onClick: Hn,
|
|
626
|
+
"aria-label": "Next photo",
|
|
627
|
+
className: "absolute right-4 top-1/2 -translate-y-1/2 rounded-full bg-bg-overlay/70 p-2 text-text-inverse transition-colors hover:bg-bg-overlay",
|
|
628
|
+
children: /* @__PURE__ */ v(Re, { className: "h-5 w-5" })
|
|
629
|
+
})] }),
|
|
630
|
+
g.verificationStatus === "verified" && /* @__PURE__ */ y("div", {
|
|
631
|
+
className: "absolute left-4 top-4 inline-flex items-center gap-1.5 rounded-full bg-status-success-bg-subtle px-3 py-1 text-xs font-semibold text-status-success-text shadow-elevation-1 backdrop-blur-sm",
|
|
632
|
+
children: [/* @__PURE__ */ v(Ae, { className: "h-4 w-4" }), "Verified listing"]
|
|
633
|
+
}),
|
|
634
|
+
/* @__PURE__ */ y("div", {
|
|
635
|
+
className: "absolute right-4 top-4 flex gap-2",
|
|
636
|
+
children: [/* @__PURE__ */ v("button", {
|
|
637
|
+
onClick: Gn,
|
|
638
|
+
disabled: wt || Et,
|
|
639
|
+
"aria-label": N ? "Remove from shortlist" : "Save to shortlist",
|
|
640
|
+
className: "rounded-full bg-bg-surface/85 p-2 shadow-elevation-1 backdrop-blur-sm transition-colors hover:bg-bg-surface disabled:opacity-60",
|
|
641
|
+
children: /* @__PURE__ */ v(Ue, { className: e("h-5 w-5", N ? "fill-status-error-text text-status-error-text" : "text-text-secondary") })
|
|
642
|
+
}), /* @__PURE__ */ v("button", {
|
|
643
|
+
onClick: Wn,
|
|
644
|
+
"aria-label": "Share this listing",
|
|
645
|
+
className: "rounded-full bg-bg-surface/85 p-2 shadow-elevation-1 backdrop-blur-sm transition-colors hover:bg-bg-surface",
|
|
646
|
+
children: /* @__PURE__ */ v(Ze, { className: "h-5 w-5 text-text-secondary" })
|
|
647
|
+
})]
|
|
648
|
+
}),
|
|
649
|
+
g.images.length > 0 && /* @__PURE__ */ v("div", {
|
|
650
|
+
className: "absolute bottom-4 right-4",
|
|
651
|
+
children: /* @__PURE__ */ y("span", {
|
|
652
|
+
className: "rounded-md bg-bg-overlay/70 px-2 py-1 text-xs font-medium text-text-inverse",
|
|
653
|
+
children: [
|
|
654
|
+
P + 1,
|
|
655
|
+
" / ",
|
|
656
|
+
g.images.length
|
|
657
|
+
]
|
|
658
|
+
})
|
|
657
659
|
})
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
660
|
+
]
|
|
661
|
+
}),
|
|
662
|
+
g.images.length > 1 && /* @__PURE__ */ v("div", {
|
|
663
|
+
className: "flex gap-3 overflow-x-auto pb-1",
|
|
664
|
+
children: g.images.map((t, n) => /* @__PURE__ */ v("button", {
|
|
665
|
+
onClick: () => F(n),
|
|
666
|
+
"aria-label": `View photo ${n + 1}`,
|
|
667
|
+
"aria-current": n === P,
|
|
668
|
+
className: e("h-16 w-24 shrink-0 overflow-hidden rounded-lg border-2 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", n === P ? "border-action-primary-border" : "border-transparent opacity-70 hover:opacity-100"),
|
|
669
|
+
children: /* @__PURE__ */ v("img", {
|
|
670
|
+
src: t.url,
|
|
671
|
+
alt: t.title ?? `Photo ${n + 1}`,
|
|
672
|
+
className: "h-full w-full object-cover"
|
|
673
|
+
})
|
|
674
|
+
}, t.id))
|
|
675
|
+
}),
|
|
676
|
+
g.images.some((e) => e.type === "floor_plan") && /* @__PURE__ */ y("div", {
|
|
677
|
+
className: "rounded-lg border border-border-subtle bg-bg-sunken/50 p-3",
|
|
678
|
+
children: [/* @__PURE__ */ y("p", {
|
|
679
|
+
className: "mb-2 flex items-center gap-1.5 text-xs font-medium text-text-secondary",
|
|
680
|
+
children: [/* @__PURE__ */ v(Xe, { className: "h-3.5 w-3.5" }), "Floor plans"]
|
|
681
|
+
}), /* @__PURE__ */ v("div", {
|
|
682
|
+
className: "flex gap-3 overflow-x-auto pb-1",
|
|
683
|
+
children: g.images.map((e, t) => ({
|
|
684
|
+
img: e,
|
|
685
|
+
index: t
|
|
686
|
+
})).filter(({ img: e }) => e.type === "floor_plan").map(({ img: e, index: t }) => /* @__PURE__ */ v("button", {
|
|
687
|
+
onClick: () => F(t),
|
|
688
|
+
"aria-label": `View floor plan ${t + 1}`,
|
|
689
|
+
className: "h-20 w-28 shrink-0 overflow-hidden rounded-lg border-2 border-border-subtle opacity-80 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
|
|
690
|
+
children: /* @__PURE__ */ v("img", {
|
|
691
|
+
src: e.url,
|
|
692
|
+
alt: e.title ?? `Floor plan ${t + 1}`,
|
|
693
|
+
className: "h-full w-full object-cover"
|
|
694
|
+
})
|
|
695
|
+
}, e.id))
|
|
696
|
+
})]
|
|
697
|
+
})
|
|
698
|
+
]
|
|
674
699
|
}),
|
|
675
700
|
/* @__PURE__ */ y("div", {
|
|
676
701
|
className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
|
|
677
702
|
children: [/* @__PURE__ */ y("div", {
|
|
678
703
|
className: "space-y-6 lg:col-span-2",
|
|
679
|
-
children: [/* @__PURE__ */ y(
|
|
704
|
+
children: [/* @__PURE__ */ y(ct, { children: [
|
|
680
705
|
/* @__PURE__ */ y("div", {
|
|
681
706
|
className: "flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",
|
|
682
707
|
children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h1", {
|
|
@@ -696,7 +721,7 @@ var Ct = () => {
|
|
|
696
721
|
className: "text-right",
|
|
697
722
|
children: [/* @__PURE__ */ v("div", {
|
|
698
723
|
className: "text-2xl font-bold text-text-primary",
|
|
699
|
-
children:
|
|
724
|
+
children: Vn(g.price)
|
|
700
725
|
}), g.price.pricePerSqft && /* @__PURE__ */ y("div", {
|
|
701
726
|
className: "text-sm text-text-secondary",
|
|
702
727
|
children: [n(g.price.pricePerSqft), "/sqft"]
|
|
@@ -717,7 +742,7 @@ var Ct = () => {
|
|
|
717
742
|
label: g.specifications.bathrooms === 1 ? "Bathroom" : "Bathrooms"
|
|
718
743
|
},
|
|
719
744
|
{
|
|
720
|
-
icon:
|
|
745
|
+
icon: Qe,
|
|
721
746
|
value: i(g.specifications.totalArea),
|
|
722
747
|
label: "sq ft"
|
|
723
748
|
},
|
|
@@ -764,16 +789,16 @@ var Ct = () => {
|
|
|
764
789
|
className: "border-b border-border-subtle",
|
|
765
790
|
children: /* @__PURE__ */ v("nav", {
|
|
766
791
|
className: "flex space-x-6 overflow-x-auto px-6",
|
|
767
|
-
children:
|
|
792
|
+
children: yt.map((t) => /* @__PURE__ */ v("button", {
|
|
768
793
|
onClick: () => Vt(t.id),
|
|
769
|
-
className: e("whitespace-nowrap border-b-2 py-3 text-sm font-medium transition-colors",
|
|
794
|
+
className: e("whitespace-nowrap border-b-2 py-3 text-sm font-medium transition-colors", I === t.id ? "border-action-primary-border text-text-primary" : "border-transparent text-text-secondary hover:text-text-primary"),
|
|
770
795
|
children: t.label
|
|
771
796
|
}, t.id))
|
|
772
797
|
})
|
|
773
798
|
}), /* @__PURE__ */ y("div", {
|
|
774
799
|
className: "p-6",
|
|
775
800
|
children: [
|
|
776
|
-
|
|
801
|
+
I === "details" && /* @__PURE__ */ y("div", {
|
|
777
802
|
className: "grid grid-cols-1 gap-6 sm:grid-cols-2",
|
|
778
803
|
children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h4", {
|
|
779
804
|
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
@@ -895,13 +920,13 @@ var Ct = () => {
|
|
|
895
920
|
]
|
|
896
921
|
})] })]
|
|
897
922
|
}),
|
|
898
|
-
|
|
923
|
+
I === "amenities" && /* @__PURE__ */ v("div", { children: g.amenities.length > 0 ? /* @__PURE__ */ v("div", {
|
|
899
924
|
className: "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4",
|
|
900
925
|
children: g.amenities.map((e) => /* @__PURE__ */ y("div", {
|
|
901
926
|
className: "flex flex-col items-center gap-2 rounded-lg border border-border-subtle bg-bg-sunken/40 p-4 text-center",
|
|
902
927
|
children: [/* @__PURE__ */ v("span", {
|
|
903
928
|
className: "flex h-10 w-10 items-center justify-center rounded-full bg-status-success-bg-subtle text-status-success-text",
|
|
904
|
-
children: /* @__PURE__ */ v(
|
|
929
|
+
children: /* @__PURE__ */ v(xt(e.name), { className: "h-5 w-5" })
|
|
905
930
|
}), /* @__PURE__ */ v("span", {
|
|
906
931
|
className: "text-sm font-medium text-text-primary",
|
|
907
932
|
children: e.name
|
|
@@ -913,7 +938,7 @@ var Ct = () => {
|
|
|
913
938
|
description: "This property has no amenities recorded yet.",
|
|
914
939
|
className: "border-0 bg-transparent p-6"
|
|
915
940
|
}) }),
|
|
916
|
-
|
|
941
|
+
I === "location" && /* @__PURE__ */ y("div", {
|
|
917
942
|
className: "space-y-4",
|
|
918
943
|
children: [
|
|
919
944
|
/* @__PURE__ */ y("div", {
|
|
@@ -1018,7 +1043,7 @@ var Ct = () => {
|
|
|
1018
1043
|
className: "flex flex-wrap items-baseline gap-x-2 gap-y-1",
|
|
1019
1044
|
children: [/* @__PURE__ */ v("span", {
|
|
1020
1045
|
className: "text-3xl font-bold text-text-primary",
|
|
1021
|
-
children:
|
|
1046
|
+
children: Vn(g.price)
|
|
1022
1047
|
}), g.price.negotiable && /* @__PURE__ */ v("span", {
|
|
1023
1048
|
className: "text-sm text-text-secondary",
|
|
1024
1049
|
children: "· Negotiable"
|
|
@@ -1035,14 +1060,14 @@ var Ct = () => {
|
|
|
1035
1060
|
type: "button",
|
|
1036
1061
|
className: "w-full justify-center",
|
|
1037
1062
|
onClick: () => {
|
|
1038
|
-
W(
|
|
1063
|
+
W(vt()), R(!0);
|
|
1039
1064
|
},
|
|
1040
1065
|
children: [/* @__PURE__ */ v(Be, { className: "mr-2 h-4 w-4" }), "Make Offer"]
|
|
1041
1066
|
}),
|
|
1042
|
-
g.status === "for_rent" && /* @__PURE__ */ y(
|
|
1067
|
+
g.status === "for_rent" && /* @__PURE__ */ y(st, { children: [/* @__PURE__ */ y(b, {
|
|
1043
1068
|
type: "button",
|
|
1044
1069
|
className: "w-full justify-center",
|
|
1045
|
-
onClick: () =>
|
|
1070
|
+
onClick: () => B(!0),
|
|
1046
1071
|
disabled: !Y,
|
|
1047
1072
|
children: [/* @__PURE__ */ v(We, { className: "mr-2 h-4 w-4" }), "Apply to Rent"]
|
|
1048
1073
|
}), !Y && /* @__PURE__ */ v("p", {
|
|
@@ -1055,7 +1080,7 @@ var Ct = () => {
|
|
|
1055
1080
|
type: "button",
|
|
1056
1081
|
variant: "outline",
|
|
1057
1082
|
className: "w-full justify-center",
|
|
1058
|
-
onClick: () =>
|
|
1083
|
+
onClick: () => L(!0),
|
|
1059
1084
|
children: [/* @__PURE__ */ v(Fe, { className: "mr-2 h-4 w-4" }), "Viewing"]
|
|
1060
1085
|
}), /* @__PURE__ */ y(b, {
|
|
1061
1086
|
type: "button",
|
|
@@ -1069,8 +1094,8 @@ var Ct = () => {
|
|
|
1069
1094
|
type: "button",
|
|
1070
1095
|
variant: "outline",
|
|
1071
1096
|
className: "w-full justify-center",
|
|
1072
|
-
onClick:
|
|
1073
|
-
disabled:
|
|
1097
|
+
onClick: Gn,
|
|
1098
|
+
disabled: wt || Et,
|
|
1074
1099
|
children: [/* @__PURE__ */ v(Ue, { className: e("mr-2 h-4 w-4", N && "fill-status-error-text text-status-error-text") }), N ? "Saved to Shortlist" : "Save to Shortlist"]
|
|
1075
1100
|
})
|
|
1076
1101
|
]
|
|
@@ -1104,9 +1129,9 @@ var Ct = () => {
|
|
|
1104
1129
|
}), /* @__PURE__ */ v("input", {
|
|
1105
1130
|
type: "number",
|
|
1106
1131
|
min: 0,
|
|
1107
|
-
value:
|
|
1108
|
-
onChange: (e) =>
|
|
1109
|
-
placeholder: String(
|
|
1132
|
+
value: sn,
|
|
1133
|
+
onChange: (e) => cn(e.target.value),
|
|
1134
|
+
placeholder: String(er),
|
|
1110
1135
|
className: j
|
|
1111
1136
|
})] }),
|
|
1112
1137
|
/* @__PURE__ */ y("div", {
|
|
@@ -1121,9 +1146,9 @@ var Ct = () => {
|
|
|
1121
1146
|
}), /* @__PURE__ */ v("input", {
|
|
1122
1147
|
type: "number",
|
|
1123
1148
|
min: 0,
|
|
1124
|
-
value:
|
|
1125
|
-
onChange: (e) =>
|
|
1126
|
-
placeholder: String(
|
|
1149
|
+
value: ln,
|
|
1150
|
+
onChange: (e) => un(e.target.value),
|
|
1151
|
+
placeholder: String(tr),
|
|
1127
1152
|
className: j
|
|
1128
1153
|
})] }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1129
1154
|
className: "mb-1.5 block text-xs font-medium text-text-secondary",
|
|
@@ -1132,8 +1157,8 @@ var Ct = () => {
|
|
|
1132
1157
|
type: "number",
|
|
1133
1158
|
min: 0,
|
|
1134
1159
|
step: .5,
|
|
1135
|
-
value:
|
|
1136
|
-
onChange: (e) =>
|
|
1160
|
+
value: dn,
|
|
1161
|
+
onChange: (e) => fn(e.target.value),
|
|
1137
1162
|
className: j
|
|
1138
1163
|
})] })]
|
|
1139
1164
|
}),
|
|
@@ -1153,15 +1178,15 @@ var Ct = () => {
|
|
|
1153
1178
|
children: [/* @__PURE__ */ v("input", {
|
|
1154
1179
|
type: "checkbox",
|
|
1155
1180
|
checked: V,
|
|
1156
|
-
onChange: (e) =>
|
|
1181
|
+
onChange: (e) => pn(e.target.checked),
|
|
1157
1182
|
className: "h-3.5 w-3.5 rounded border-border-subtle"
|
|
1158
1183
|
}), "Include stamp duty & registration"]
|
|
1159
1184
|
}), V && /* @__PURE__ */ v("input", {
|
|
1160
1185
|
type: "number",
|
|
1161
1186
|
min: 0,
|
|
1162
1187
|
step: .5,
|
|
1163
|
-
value:
|
|
1164
|
-
onChange: (e) =>
|
|
1188
|
+
value: mn,
|
|
1189
|
+
onChange: (e) => hn(e.target.value),
|
|
1165
1190
|
"aria-label": "Stamp duty rate percent",
|
|
1166
1191
|
className: "h-7 w-16 rounded-md border border-border-subtle bg-bg-surface px-2 text-right text-xs text-text-primary"
|
|
1167
1192
|
})]
|
|
@@ -1173,7 +1198,7 @@ var Ct = () => {
|
|
|
1173
1198
|
children: [/* @__PURE__ */ v("input", {
|
|
1174
1199
|
type: "checkbox",
|
|
1175
1200
|
checked: H,
|
|
1176
|
-
onChange: (e) =>
|
|
1201
|
+
onChange: (e) => gn(e.target.checked),
|
|
1177
1202
|
className: "h-3.5 w-3.5 rounded border-border-subtle"
|
|
1178
1203
|
}), "Include financing (loan)"]
|
|
1179
1204
|
})
|
|
@@ -1188,8 +1213,8 @@ var Ct = () => {
|
|
|
1188
1213
|
type: "number",
|
|
1189
1214
|
min: 0,
|
|
1190
1215
|
max: 100,
|
|
1191
|
-
value:
|
|
1192
|
-
onChange: (e) =>
|
|
1216
|
+
value: _n,
|
|
1217
|
+
onChange: (e) => vn(e.target.value),
|
|
1193
1218
|
className: j
|
|
1194
1219
|
})] }),
|
|
1195
1220
|
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
@@ -1199,8 +1224,8 @@ var Ct = () => {
|
|
|
1199
1224
|
type: "number",
|
|
1200
1225
|
min: 0,
|
|
1201
1226
|
step: .1,
|
|
1202
|
-
value:
|
|
1203
|
-
onChange: (e) =>
|
|
1227
|
+
value: yn,
|
|
1228
|
+
onChange: (e) => bn(e.target.value),
|
|
1204
1229
|
className: j
|
|
1205
1230
|
})] }),
|
|
1206
1231
|
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
@@ -1209,8 +1234,8 @@ var Ct = () => {
|
|
|
1209
1234
|
}), /* @__PURE__ */ v("input", {
|
|
1210
1235
|
type: "number",
|
|
1211
1236
|
min: 1,
|
|
1212
|
-
value:
|
|
1213
|
-
onChange: (e) =>
|
|
1237
|
+
value: xn,
|
|
1238
|
+
onChange: (e) => Sn(e.target.value),
|
|
1214
1239
|
className: j
|
|
1215
1240
|
})] })
|
|
1216
1241
|
]
|
|
@@ -1223,7 +1248,7 @@ var Ct = () => {
|
|
|
1223
1248
|
" ",
|
|
1224
1249
|
/* @__PURE__ */ v("span", {
|
|
1225
1250
|
className: "font-semibold text-text-primary",
|
|
1226
|
-
children: t(
|
|
1251
|
+
children: t(fr, g.price.currency)
|
|
1227
1252
|
})
|
|
1228
1253
|
] }),
|
|
1229
1254
|
H && /* @__PURE__ */ y("span", { children: [
|
|
@@ -1231,7 +1256,7 @@ var Ct = () => {
|
|
|
1231
1256
|
" ",
|
|
1232
1257
|
/* @__PURE__ */ v("span", {
|
|
1233
1258
|
className: "font-semibold text-text-primary",
|
|
1234
|
-
children: t(
|
|
1259
|
+
children: t(vr, g.price.currency)
|
|
1235
1260
|
})
|
|
1236
1261
|
] }),
|
|
1237
1262
|
/* @__PURE__ */ y("span", { children: [
|
|
@@ -1256,7 +1281,7 @@ var Ct = () => {
|
|
|
1256
1281
|
children: "Gross Yield"
|
|
1257
1282
|
}), /* @__PURE__ */ y("div", {
|
|
1258
1283
|
className: "mt-0.5 text-lg font-bold text-status-success-text",
|
|
1259
|
-
children: [
|
|
1284
|
+
children: [rr.toFixed(1), "%"]
|
|
1260
1285
|
})]
|
|
1261
1286
|
}),
|
|
1262
1287
|
/* @__PURE__ */ y("div", {
|
|
@@ -1266,7 +1291,7 @@ var Ct = () => {
|
|
|
1266
1291
|
children: "Net Yield"
|
|
1267
1292
|
}), /* @__PURE__ */ y("div", {
|
|
1268
1293
|
className: "mt-0.5 text-lg font-bold text-text-primary",
|
|
1269
|
-
children: [
|
|
1294
|
+
children: [ar.toFixed(1), "%"]
|
|
1270
1295
|
})]
|
|
1271
1296
|
}),
|
|
1272
1297
|
/* @__PURE__ */ y("div", {
|
|
@@ -1276,7 +1301,7 @@ var Ct = () => {
|
|
|
1276
1301
|
children: H ? "Cash-on-Cash" : "5-yr ROI"
|
|
1277
1302
|
}), /* @__PURE__ */ y("div", {
|
|
1278
1303
|
className: "mt-0.5 text-lg font-bold text-text-primary",
|
|
1279
|
-
children: [H ?
|
|
1304
|
+
children: [H ? xr.toFixed(1) : ur.toFixed(0), "%"]
|
|
1280
1305
|
})]
|
|
1281
1306
|
})
|
|
1282
1307
|
]
|
|
@@ -1291,7 +1316,7 @@ var Ct = () => {
|
|
|
1291
1316
|
children: "Projected Value Growth"
|
|
1292
1317
|
}), /* @__PURE__ */ v("span", {
|
|
1293
1318
|
className: "text-xs font-semibold text-text-primary",
|
|
1294
|
-
children: t(
|
|
1319
|
+
children: t(cr, g.price.currency)
|
|
1295
1320
|
})]
|
|
1296
1321
|
}),
|
|
1297
1322
|
/* @__PURE__ */ v("div", {
|
|
@@ -1300,7 +1325,7 @@ var Ct = () => {
|
|
|
1300
1325
|
width: "100%",
|
|
1301
1326
|
height: "100%",
|
|
1302
1327
|
children: /* @__PURE__ */ y(xe, {
|
|
1303
|
-
data:
|
|
1328
|
+
data: sr,
|
|
1304
1329
|
margin: {
|
|
1305
1330
|
top: 4,
|
|
1306
1331
|
right: 4,
|
|
@@ -1361,9 +1386,9 @@ var Ct = () => {
|
|
|
1361
1386
|
type: "button",
|
|
1362
1387
|
variant: "outline",
|
|
1363
1388
|
className: "flex-1 justify-center",
|
|
1364
|
-
onClick:
|
|
1365
|
-
disabled:
|
|
1366
|
-
children: [/* @__PURE__ */ v(
|
|
1389
|
+
onClick: Qn,
|
|
1390
|
+
disabled: Lt,
|
|
1391
|
+
children: [/* @__PURE__ */ v(et, { className: "mr-2 h-4 w-4" }), Lt ? "Adding…" : "Track as Investment"]
|
|
1367
1392
|
}), /* @__PURE__ */ v(b, {
|
|
1368
1393
|
type: "button",
|
|
1369
1394
|
variant: "ghost",
|
|
@@ -1374,29 +1399,29 @@ var Ct = () => {
|
|
|
1374
1399
|
`Generated: ${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}`,
|
|
1375
1400
|
"",
|
|
1376
1401
|
`Listing price,${X}`,
|
|
1377
|
-
`Expected monthly rent,${
|
|
1378
|
-
`Monthly holding costs,${
|
|
1379
|
-
`Gross rental yield,${
|
|
1380
|
-
`Net rental yield,${
|
|
1381
|
-
`Appreciation rate (input),${(
|
|
1382
|
-
`Projected value (5yr),${
|
|
1383
|
-
`Projected ROI (5yr, unleveraged),${
|
|
1402
|
+
`Expected monthly rent,${er}`,
|
|
1403
|
+
`Monthly holding costs,${tr}`,
|
|
1404
|
+
`Gross rental yield,${rr.toFixed(2)}%`,
|
|
1405
|
+
`Net rental yield,${ar.toFixed(2)}%`,
|
|
1406
|
+
`Appreciation rate (input),${(or * 100).toFixed(2)}%`,
|
|
1407
|
+
`Projected value (5yr),${cr}`,
|
|
1408
|
+
`Projected ROI (5yr, unleveraged),${ur.toFixed(2)}%`,
|
|
1384
1409
|
"",
|
|
1385
1410
|
`Stamp duty & registration included,${V ? "Yes" : "No"}`,
|
|
1386
|
-
`Stamp duty rate,${
|
|
1387
|
-
`Stamp duty & registration cost,${
|
|
1411
|
+
`Stamp duty rate,${dr}%`,
|
|
1412
|
+
`Stamp duty & registration cost,${fr.toFixed(0)}`,
|
|
1388
1413
|
"",
|
|
1389
1414
|
`Financing included,${H ? "Yes" : "No"}`,
|
|
1390
1415
|
...H ? [
|
|
1391
|
-
`Down payment (${
|
|
1416
|
+
`Down payment (${pr}%),${gr.toFixed(0)}`,
|
|
1392
1417
|
`Loan amount,${Z.toFixed(0)}`,
|
|
1393
|
-
`Loan rate,${(
|
|
1394
|
-
`Loan tenure (years),${
|
|
1395
|
-
`Monthly EMI,${
|
|
1396
|
-
`Annual debt service,${
|
|
1418
|
+
`Loan rate,${(mr * 100).toFixed(2)}%`,
|
|
1419
|
+
`Loan tenure (years),${hr}`,
|
|
1420
|
+
`Monthly EMI,${vr.toFixed(0)}`,
|
|
1421
|
+
`Annual debt service,${yr.toFixed(0)}`
|
|
1397
1422
|
] : [],
|
|
1398
1423
|
`Net cash outlay,${$.toFixed(0)}`,
|
|
1399
|
-
`Cash-on-cash return,${
|
|
1424
|
+
`Cash-on-cash return,${xr.toFixed(2)}%`,
|
|
1400
1425
|
"",
|
|
1401
1426
|
"This is not financial advice. Consult a licensed financial advisor before investing."
|
|
1402
1427
|
], t = new Blob([e.join("\n")], { type: "text/csv;charset=utf-8;" }), n = URL.createObjectURL(t), r = document.createElement("a");
|
|
@@ -1425,7 +1450,7 @@ var Ct = () => {
|
|
|
1425
1450
|
children: "Status"
|
|
1426
1451
|
}), /* @__PURE__ */ v(a, {
|
|
1427
1452
|
label: g.status.replace("_", " "),
|
|
1428
|
-
variant:
|
|
1453
|
+
variant: dt[g.status] ?? "default"
|
|
1429
1454
|
})]
|
|
1430
1455
|
}),
|
|
1431
1456
|
/* @__PURE__ */ y("div", {
|
|
@@ -1476,28 +1501,28 @@ var Ct = () => {
|
|
|
1476
1501
|
type: "button",
|
|
1477
1502
|
variant: "outline",
|
|
1478
1503
|
className: "flex-1 justify-center",
|
|
1479
|
-
disabled:
|
|
1480
|
-
onClick: () =>
|
|
1504
|
+
disabled: zt,
|
|
1505
|
+
onClick: () => $n("verified"),
|
|
1481
1506
|
children: "Verify RERA"
|
|
1482
1507
|
}), /* @__PURE__ */ v(b, {
|
|
1483
1508
|
type: "button",
|
|
1484
1509
|
variant: "ghost",
|
|
1485
1510
|
className: "flex-1 justify-center",
|
|
1486
|
-
disabled:
|
|
1487
|
-
onClick: () =>
|
|
1511
|
+
disabled: zt,
|
|
1512
|
+
onClick: () => $n("rejected"),
|
|
1488
1513
|
children: "Reject"
|
|
1489
1514
|
})]
|
|
1490
1515
|
})
|
|
1491
1516
|
]
|
|
1492
1517
|
}),
|
|
1493
|
-
|
|
1518
|
+
Bt.length > 0 && /* @__PURE__ */ y("div", {
|
|
1494
1519
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
1495
1520
|
children: [/* @__PURE__ */ v("h3", {
|
|
1496
1521
|
className: "mb-4 text-base font-semibold text-text-primary",
|
|
1497
1522
|
children: "Similar Properties"
|
|
1498
1523
|
}), /* @__PURE__ */ v("div", {
|
|
1499
1524
|
className: "space-y-3",
|
|
1500
|
-
children:
|
|
1525
|
+
children: Bt.map((e) => /* @__PURE__ */ y("button", {
|
|
1501
1526
|
onClick: () => m(`../properties/${e.id}`),
|
|
1502
1527
|
className: "flex w-full items-start gap-3 rounded-lg border border-border-subtle p-3 text-left transition-colors hover:bg-bg-sunken/50",
|
|
1503
1528
|
children: [e.images[0] && /* @__PURE__ */ v("img", {
|
|
@@ -1543,11 +1568,11 @@ var Ct = () => {
|
|
|
1543
1568
|
}),
|
|
1544
1569
|
/* @__PURE__ */ v(x, {
|
|
1545
1570
|
open: qt,
|
|
1546
|
-
onOpenChange:
|
|
1571
|
+
onOpenChange: B,
|
|
1547
1572
|
children: /* @__PURE__ */ v(S, {
|
|
1548
1573
|
className: "sm:max-w-2xl",
|
|
1549
1574
|
children: /* @__PURE__ */ y("form", {
|
|
1550
|
-
onSubmit:
|
|
1575
|
+
onSubmit: Zn,
|
|
1551
1576
|
children: [
|
|
1552
1577
|
/* @__PURE__ */ y(T, { children: [/* @__PURE__ */ v(E, { children: "Apply to rent" }), /* @__PURE__ */ y(C, { children: [
|
|
1553
1578
|
"Submit a rental application for ",
|
|
@@ -1567,8 +1592,8 @@ var Ct = () => {
|
|
|
1567
1592
|
}), /* @__PURE__ */ v("input", {
|
|
1568
1593
|
type: "text",
|
|
1569
1594
|
required: !0,
|
|
1570
|
-
value:
|
|
1571
|
-
onChange: (e) =>
|
|
1595
|
+
value: Xt,
|
|
1596
|
+
onChange: (e) => Zt(e.target.value),
|
|
1572
1597
|
className: j
|
|
1573
1598
|
})] }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1574
1599
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
@@ -1576,8 +1601,8 @@ var Ct = () => {
|
|
|
1576
1601
|
}), /* @__PURE__ */ v("input", {
|
|
1577
1602
|
type: "email",
|
|
1578
1603
|
required: !0,
|
|
1579
|
-
value:
|
|
1580
|
-
onChange: (e) =>
|
|
1604
|
+
value: Qt,
|
|
1605
|
+
onChange: (e) => $t(e.target.value),
|
|
1581
1606
|
className: j
|
|
1582
1607
|
})] })]
|
|
1583
1608
|
}),
|
|
@@ -1588,8 +1613,8 @@ var Ct = () => {
|
|
|
1588
1613
|
children: "Phone"
|
|
1589
1614
|
}), /* @__PURE__ */ v("input", {
|
|
1590
1615
|
type: "tel",
|
|
1591
|
-
value:
|
|
1592
|
-
onChange: (e) =>
|
|
1616
|
+
value: en,
|
|
1617
|
+
onChange: (e) => tn(e.target.value),
|
|
1593
1618
|
className: j
|
|
1594
1619
|
})] }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("label", {
|
|
1595
1620
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
@@ -1601,8 +1626,8 @@ var Ct = () => {
|
|
|
1601
1626
|
}), /* @__PURE__ */ v("input", {
|
|
1602
1627
|
type: "number",
|
|
1603
1628
|
min: 0,
|
|
1604
|
-
value:
|
|
1605
|
-
onChange: (e) =>
|
|
1629
|
+
value: nn,
|
|
1630
|
+
onChange: (e) => rn(e.target.value),
|
|
1606
1631
|
className: j
|
|
1607
1632
|
})] })]
|
|
1608
1633
|
}),
|
|
@@ -1611,8 +1636,8 @@ var Ct = () => {
|
|
|
1611
1636
|
children: "Preferred move-in date"
|
|
1612
1637
|
}), /* @__PURE__ */ v("input", {
|
|
1613
1638
|
type: "date",
|
|
1614
|
-
value:
|
|
1615
|
-
onChange: (e) =>
|
|
1639
|
+
value: an,
|
|
1640
|
+
onChange: (e) => on(e.target.value),
|
|
1616
1641
|
className: j
|
|
1617
1642
|
})] })
|
|
1618
1643
|
]
|
|
@@ -1641,7 +1666,7 @@ var Ct = () => {
|
|
|
1641
1666
|
})]
|
|
1642
1667
|
})]
|
|
1643
1668
|
}),
|
|
1644
|
-
J ? /* @__PURE__ */ y(
|
|
1669
|
+
J ? /* @__PURE__ */ y(st, { children: [/* @__PURE__ */ y("dl", {
|
|
1645
1670
|
className: "mt-3 grid grid-cols-2 gap-3 border-t border-border-subtle pt-3",
|
|
1646
1671
|
children: [
|
|
1647
1672
|
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
|
|
@@ -1671,8 +1696,8 @@ var Ct = () => {
|
|
|
1671
1696
|
}), /* @__PURE__ */ v("dd", {
|
|
1672
1697
|
className: "mt-0.5",
|
|
1673
1698
|
children: /* @__PURE__ */ v(a, {
|
|
1674
|
-
label:
|
|
1675
|
-
variant:
|
|
1699
|
+
label: St(J.status),
|
|
1700
|
+
variant: Ct(J.status)
|
|
1676
1701
|
})
|
|
1677
1702
|
})] })
|
|
1678
1703
|
]
|
|
@@ -1694,7 +1719,7 @@ var Ct = () => {
|
|
|
1694
1719
|
className: "mt-1.5 space-y-1.5",
|
|
1695
1720
|
children: g.amenities.slice(0, 5).map((e) => /* @__PURE__ */ y("li", {
|
|
1696
1721
|
className: "flex items-center gap-2 text-sm text-text-primary",
|
|
1697
|
-
children: [/* @__PURE__ */ v(
|
|
1722
|
+
children: [/* @__PURE__ */ v(xt(e.name), { className: "h-4 w-4 shrink-0 text-text-secondary" }), /* @__PURE__ */ v("span", {
|
|
1698
1723
|
className: "truncate",
|
|
1699
1724
|
children: e.name
|
|
1700
1725
|
})]
|
|
@@ -1716,12 +1741,12 @@ var Ct = () => {
|
|
|
1716
1741
|
/* @__PURE__ */ y(w, { children: [/* @__PURE__ */ v(b, {
|
|
1717
1742
|
type: "button",
|
|
1718
1743
|
variant: "outline",
|
|
1719
|
-
onClick: () =>
|
|
1744
|
+
onClick: () => B(!1),
|
|
1720
1745
|
children: "Cancel"
|
|
1721
1746
|
}), /* @__PURE__ */ v(b, {
|
|
1722
1747
|
type: "submit",
|
|
1723
|
-
disabled:
|
|
1724
|
-
children:
|
|
1748
|
+
disabled: Ft || !Y,
|
|
1749
|
+
children: Ft ? "Submitting…" : "Submit application"
|
|
1725
1750
|
})] })
|
|
1726
1751
|
]
|
|
1727
1752
|
})
|
|
@@ -1729,11 +1754,11 @@ var Ct = () => {
|
|
|
1729
1754
|
}),
|
|
1730
1755
|
/* @__PURE__ */ v(x, {
|
|
1731
1756
|
open: Ht,
|
|
1732
|
-
onOpenChange:
|
|
1757
|
+
onOpenChange: L,
|
|
1733
1758
|
children: /* @__PURE__ */ v(S, {
|
|
1734
1759
|
className: "sm:max-w-md",
|
|
1735
1760
|
children: /* @__PURE__ */ y("form", {
|
|
1736
|
-
onSubmit:
|
|
1761
|
+
onSubmit: Kn,
|
|
1737
1762
|
children: [
|
|
1738
1763
|
/* @__PURE__ */ y(T, { children: [/* @__PURE__ */ v(E, { children: "Schedule a viewing" }), /* @__PURE__ */ y(C, { children: [
|
|
1739
1764
|
"Pick a date and time to see ",
|
|
@@ -1750,15 +1775,15 @@ var Ct = () => {
|
|
|
1750
1775
|
type: "datetime-local",
|
|
1751
1776
|
required: !0,
|
|
1752
1777
|
value: U,
|
|
1753
|
-
onChange: (e) =>
|
|
1778
|
+
onChange: (e) => Cn(e.target.value),
|
|
1754
1779
|
className: j
|
|
1755
1780
|
})] }),
|
|
1756
1781
|
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1757
1782
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1758
1783
|
children: "Type"
|
|
1759
1784
|
}), /* @__PURE__ */ y("select", {
|
|
1760
|
-
value:
|
|
1761
|
-
onChange: (e) =>
|
|
1785
|
+
value: wn,
|
|
1786
|
+
onChange: (e) => Tn(e.target.value),
|
|
1762
1787
|
className: j,
|
|
1763
1788
|
children: [/* @__PURE__ */ v("option", {
|
|
1764
1789
|
value: "in_person",
|
|
@@ -1773,22 +1798,22 @@ var Ct = () => {
|
|
|
1773
1798
|
children: [/* @__PURE__ */ v("input", {
|
|
1774
1799
|
type: "text",
|
|
1775
1800
|
placeholder: "Your name",
|
|
1776
|
-
value:
|
|
1777
|
-
onChange: (e) =>
|
|
1801
|
+
value: En,
|
|
1802
|
+
onChange: (e) => Dn(e.target.value),
|
|
1778
1803
|
className: j
|
|
1779
1804
|
}), /* @__PURE__ */ v("input", {
|
|
1780
1805
|
type: "email",
|
|
1781
1806
|
placeholder: "Your email",
|
|
1782
|
-
value:
|
|
1783
|
-
onChange: (e) =>
|
|
1807
|
+
value: On,
|
|
1808
|
+
onChange: (e) => kn(e.target.value),
|
|
1784
1809
|
className: j
|
|
1785
1810
|
})]
|
|
1786
1811
|
}),
|
|
1787
1812
|
/* @__PURE__ */ v("textarea", {
|
|
1788
1813
|
placeholder: "Notes (optional)",
|
|
1789
1814
|
rows: 2,
|
|
1790
|
-
value:
|
|
1791
|
-
onChange: (e) =>
|
|
1815
|
+
value: An,
|
|
1816
|
+
onChange: (e) => jn(e.target.value),
|
|
1792
1817
|
className: "w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]"
|
|
1793
1818
|
})
|
|
1794
1819
|
]
|
|
@@ -1796,12 +1821,12 @@ var Ct = () => {
|
|
|
1796
1821
|
/* @__PURE__ */ y(w, { children: [/* @__PURE__ */ v(b, {
|
|
1797
1822
|
type: "button",
|
|
1798
1823
|
variant: "outline",
|
|
1799
|
-
onClick: () =>
|
|
1824
|
+
onClick: () => L(!1),
|
|
1800
1825
|
children: "Cancel"
|
|
1801
1826
|
}), /* @__PURE__ */ v(b, {
|
|
1802
1827
|
type: "submit",
|
|
1803
|
-
disabled:
|
|
1804
|
-
children:
|
|
1828
|
+
disabled: Ot || !U,
|
|
1829
|
+
children: Ot ? "Booking…" : "Request viewing"
|
|
1805
1830
|
})] })
|
|
1806
1831
|
]
|
|
1807
1832
|
})
|
|
@@ -1809,15 +1834,15 @@ var Ct = () => {
|
|
|
1809
1834
|
}),
|
|
1810
1835
|
/* @__PURE__ */ v(x, {
|
|
1811
1836
|
open: Ut,
|
|
1812
|
-
onOpenChange:
|
|
1837
|
+
onOpenChange: R,
|
|
1813
1838
|
children: /* @__PURE__ */ v(S, {
|
|
1814
1839
|
className: "sm:max-w-md",
|
|
1815
1840
|
children: /* @__PURE__ */ y("form", {
|
|
1816
|
-
onSubmit:
|
|
1841
|
+
onSubmit: qn,
|
|
1817
1842
|
children: [
|
|
1818
1843
|
/* @__PURE__ */ y(T, { children: [/* @__PURE__ */ v(E, { children: "Make an offer" }), /* @__PURE__ */ y(C, { children: [
|
|
1819
1844
|
"Listing price is ",
|
|
1820
|
-
|
|
1845
|
+
Vn(g.price),
|
|
1821
1846
|
"."
|
|
1822
1847
|
] })] }),
|
|
1823
1848
|
/* @__PURE__ */ y("div", {
|
|
@@ -1834,16 +1859,16 @@ var Ct = () => {
|
|
|
1834
1859
|
type: "number",
|
|
1835
1860
|
required: !0,
|
|
1836
1861
|
min: 1,
|
|
1837
|
-
value:
|
|
1838
|
-
onChange: (e) =>
|
|
1862
|
+
value: Mn,
|
|
1863
|
+
onChange: (e) => Nn(e.target.value),
|
|
1839
1864
|
placeholder: "Enter amount",
|
|
1840
1865
|
className: j
|
|
1841
1866
|
})] }),
|
|
1842
1867
|
/* @__PURE__ */ v("textarea", {
|
|
1843
1868
|
placeholder: "Message to the owner (optional)",
|
|
1844
1869
|
rows: 3,
|
|
1845
|
-
value:
|
|
1846
|
-
onChange: (e) =>
|
|
1870
|
+
value: Pn,
|
|
1871
|
+
onChange: (e) => Fn(e.target.value),
|
|
1847
1872
|
className: "w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]"
|
|
1848
1873
|
}),
|
|
1849
1874
|
/* @__PURE__ */ y("div", { children: [
|
|
@@ -1855,7 +1880,7 @@ var Ct = () => {
|
|
|
1855
1880
|
/* @__PURE__ */ v("input", {
|
|
1856
1881
|
id: "offer-expires",
|
|
1857
1882
|
type: "datetime-local",
|
|
1858
|
-
value:
|
|
1883
|
+
value: In,
|
|
1859
1884
|
onChange: (e) => W(e.target.value),
|
|
1860
1885
|
className: j
|
|
1861
1886
|
}),
|
|
@@ -1869,12 +1894,12 @@ var Ct = () => {
|
|
|
1869
1894
|
/* @__PURE__ */ y(w, { children: [/* @__PURE__ */ v(b, {
|
|
1870
1895
|
type: "button",
|
|
1871
1896
|
variant: "outline",
|
|
1872
|
-
onClick: () =>
|
|
1897
|
+
onClick: () => R(!1),
|
|
1873
1898
|
children: "Cancel"
|
|
1874
1899
|
}), /* @__PURE__ */ v(b, {
|
|
1875
1900
|
type: "submit",
|
|
1876
|
-
disabled:
|
|
1877
|
-
children:
|
|
1901
|
+
disabled: At,
|
|
1902
|
+
children: At ? "Submitting…" : "Submit offer"
|
|
1878
1903
|
})] })
|
|
1879
1904
|
]
|
|
1880
1905
|
})
|
|
@@ -1882,11 +1907,11 @@ var Ct = () => {
|
|
|
1882
1907
|
}),
|
|
1883
1908
|
/* @__PURE__ */ v(x, {
|
|
1884
1909
|
open: Wt,
|
|
1885
|
-
onOpenChange: (e) => !e && !M &&
|
|
1910
|
+
onOpenChange: (e) => !e && !M && z(!1),
|
|
1886
1911
|
children: /* @__PURE__ */ v(S, {
|
|
1887
1912
|
className: "sm:max-w-2xl",
|
|
1888
1913
|
children: /* @__PURE__ */ y("form", {
|
|
1889
|
-
onSubmit:
|
|
1914
|
+
onSubmit: Yn,
|
|
1890
1915
|
children: [
|
|
1891
1916
|
/* @__PURE__ */ y(T, { children: [/* @__PURE__ */ v(E, { children: "Edit property" }), /* @__PURE__ */ v(C, { children: "Update the listing details — basics, location, specifications and pricing. Photos are managed separately from the gallery." })] }),
|
|
1892
1917
|
/* @__PURE__ */ y("div", {
|
|
@@ -1928,7 +1953,7 @@ var Ct = () => {
|
|
|
1928
1953
|
value: G.status,
|
|
1929
1954
|
onChange: (e) => K({ status: e.target.value }),
|
|
1930
1955
|
className: j,
|
|
1931
|
-
children:
|
|
1956
|
+
children: ft.map((e) => /* @__PURE__ */ v("option", {
|
|
1932
1957
|
value: e.value,
|
|
1933
1958
|
children: e.label
|
|
1934
1959
|
}, e.value))
|
|
@@ -2059,7 +2084,7 @@ var Ct = () => {
|
|
|
2059
2084
|
}), /* @__PURE__ */ y("div", {
|
|
2060
2085
|
className: "grid grid-cols-2 gap-3 sm:grid-cols-4",
|
|
2061
2086
|
children: [
|
|
2062
|
-
|
|
2087
|
+
_t.map((e) => /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2063
2088
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2064
2089
|
children: e.label
|
|
2065
2090
|
}), /* @__PURE__ */ v("input", {
|
|
@@ -2127,7 +2152,7 @@ var Ct = () => {
|
|
|
2127
2152
|
value: G.priceType,
|
|
2128
2153
|
onChange: (e) => K({ priceType: e.target.value }),
|
|
2129
2154
|
className: j,
|
|
2130
|
-
children:
|
|
2155
|
+
children: pt.map((e) => /* @__PURE__ */ v("option", {
|
|
2131
2156
|
value: e.value,
|
|
2132
2157
|
children: e.label
|
|
2133
2158
|
}, e.value))
|
|
@@ -2139,7 +2164,7 @@ var Ct = () => {
|
|
|
2139
2164
|
value: G.pricePeriod,
|
|
2140
2165
|
onChange: (e) => K({ pricePeriod: e.target.value }),
|
|
2141
2166
|
className: j,
|
|
2142
|
-
children:
|
|
2167
|
+
children: mt.map((e) => /* @__PURE__ */ v("option", {
|
|
2143
2168
|
value: e.value,
|
|
2144
2169
|
children: e.label
|
|
2145
2170
|
}, e.value))
|
|
@@ -2203,7 +2228,7 @@ var Ct = () => {
|
|
|
2203
2228
|
/* @__PURE__ */ y(w, { children: [/* @__PURE__ */ v(b, {
|
|
2204
2229
|
type: "button",
|
|
2205
2230
|
variant: "outline",
|
|
2206
|
-
onClick: () =>
|
|
2231
|
+
onClick: () => z(!1),
|
|
2207
2232
|
disabled: M,
|
|
2208
2233
|
children: "Cancel"
|
|
2209
2234
|
}), /* @__PURE__ */ v(b, {
|
|
@@ -2228,9 +2253,9 @@ var Ct = () => {
|
|
|
2228
2253
|
}), /* @__PURE__ */ v(b, {
|
|
2229
2254
|
type: "button",
|
|
2230
2255
|
variant: "destructive",
|
|
2231
|
-
onClick:
|
|
2232
|
-
disabled:
|
|
2233
|
-
children:
|
|
2256
|
+
onClick: Xn,
|
|
2257
|
+
disabled: Nt,
|
|
2258
|
+
children: Nt ? "Deleting…" : "Delete property"
|
|
2234
2259
|
})] })]
|
|
2235
2260
|
})
|
|
2236
2261
|
})
|
|
@@ -2238,6 +2263,6 @@ var Ct = () => {
|
|
|
2238
2263
|
});
|
|
2239
2264
|
};
|
|
2240
2265
|
//#endregion
|
|
2241
|
-
export {
|
|
2266
|
+
export { wt as PropertyDetailPage };
|
|
2242
2267
|
|
|
2243
2268
|
//# sourceMappingURL=PropertyDetailPage.js.map
|