@burdenoff/microfe-housingvista 2026.928.2 → 2026.930.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/housingvista/HousingVistaRoutes.js +4 -4
- package/dist/housingvista/HousingVistaRoutes.js.map +1 -1
- package/dist/housingvista/hooks/index.d.ts +5 -1
- package/dist/housingvista/hooks/index.d.ts.map +1 -1
- package/dist/housingvista/hooks/index.js +2 -0
- package/dist/housingvista/hooks/index.js.map +1 -1
- package/dist/housingvista/pages/offers/OffersPage.d.ts.map +1 -1
- package/dist/housingvista/pages/offers/OffersPage.js +14 -0
- package/dist/housingvista/pages/offers/OffersPage.js.map +1 -1
- package/dist/housingvista/pages/properties/PropertyDetailPage.d.ts.map +1 -1
- package/dist/housingvista/pages/properties/PropertyDetailPage.js +715 -684
- package/dist/housingvista/pages/properties/PropertyDetailPage.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, Share2 as Xe, Shield as h, Square as Ze, Trash2 as Qe, TreePine as g, TrendingUp as $e, Utensils as et, Waves as
|
|
23
|
-
import { useLocation as
|
|
24
|
-
import { Fragment as
|
|
25
|
-
import { Button 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, Share2 as Xe, Shield as h, Square as Ze, Trash2 as Qe, TreePine as g, TrendingUp as $e, Utensils as et, Waves as tt, Wifi as nt, Wind as rt } from "lucide-react";
|
|
23
|
+
import { useLocation as it, useNavigate as at, useParams as ot } from "react-router";
|
|
24
|
+
import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
25
|
+
import { Button as b, EmphasisPanel as st, NextSteps as ct, PagePurpose as lt, 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 ut = {
|
|
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
|
+
}, dt = [
|
|
35
35
|
{
|
|
36
36
|
value: "for_sale",
|
|
37
37
|
label: "For Sale"
|
|
@@ -56,7 +56,7 @@ var lt = {
|
|
|
56
56
|
value: "off_market",
|
|
57
57
|
label: "Off Market"
|
|
58
58
|
}
|
|
59
|
-
],
|
|
59
|
+
], ft = [
|
|
60
60
|
{
|
|
61
61
|
value: "sale",
|
|
62
62
|
label: "Sale"
|
|
@@ -69,7 +69,7 @@ var lt = {
|
|
|
69
69
|
value: "lease",
|
|
70
70
|
label: "Lease"
|
|
71
71
|
}
|
|
72
|
-
],
|
|
72
|
+
], pt = [
|
|
73
73
|
{
|
|
74
74
|
value: "",
|
|
75
75
|
label: "— (one-time)"
|
|
@@ -86,7 +86,7 @@ var lt = {
|
|
|
86
86
|
value: "yearly",
|
|
87
87
|
label: "Yearly"
|
|
88
88
|
}
|
|
89
|
-
],
|
|
89
|
+
], mt = {
|
|
90
90
|
title: "",
|
|
91
91
|
description: "",
|
|
92
92
|
status: "for_sale",
|
|
@@ -121,15 +121,15 @@ var lt = {
|
|
|
121
121
|
pricePerSqft: "",
|
|
122
122
|
amenities: [],
|
|
123
123
|
extraAmenities: []
|
|
124
|
-
},
|
|
124
|
+
}, D = (e) => {
|
|
125
125
|
let t = e.trim();
|
|
126
126
|
if (t === "") return null;
|
|
127
127
|
let n = Number(t);
|
|
128
128
|
return Number.isFinite(n) ? n : null;
|
|
129
|
-
},
|
|
130
|
-
let t =
|
|
129
|
+
}, O = (e) => {
|
|
130
|
+
let t = D(e);
|
|
131
131
|
return t === null ? void 0 : t;
|
|
132
|
-
},
|
|
132
|
+
}, k = (e) => e == null ? "" : String(e), ht = (e) => e.split(",").map((e) => e.trim()).filter(Boolean), gt = [
|
|
133
133
|
{
|
|
134
134
|
key: "bedrooms",
|
|
135
135
|
label: "Bedrooms",
|
|
@@ -190,7 +190,12 @@ var lt = {
|
|
|
190
190
|
required: !1,
|
|
191
191
|
step: "1"
|
|
192
192
|
}
|
|
193
|
-
]
|
|
193
|
+
];
|
|
194
|
+
function _t() {
|
|
195
|
+
let e = new Date(Date.now() + 10080 * 60 * 1e3);
|
|
196
|
+
return (/* @__PURE__ */ new Date(e.getTime() - e.getTimezoneOffset() * 6e4)).toISOString().slice(0, 16);
|
|
197
|
+
}
|
|
198
|
+
var vt = [
|
|
194
199
|
{
|
|
195
200
|
id: "details",
|
|
196
201
|
label: "Details"
|
|
@@ -203,10 +208,10 @@ var lt = {
|
|
|
203
208
|
id: "location",
|
|
204
209
|
label: "Location"
|
|
205
210
|
}
|
|
206
|
-
],
|
|
211
|
+
], A = "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)]", yt = [
|
|
207
212
|
{
|
|
208
213
|
match: /pool|swim/i,
|
|
209
|
-
icon:
|
|
214
|
+
icon: tt
|
|
210
215
|
},
|
|
211
216
|
{
|
|
212
217
|
match: /gym|fitness/i,
|
|
@@ -226,11 +231,11 @@ var lt = {
|
|
|
226
231
|
},
|
|
227
232
|
{
|
|
228
233
|
match: /wifi|internet|broadband/i,
|
|
229
|
-
icon:
|
|
234
|
+
icon: nt
|
|
230
235
|
},
|
|
231
236
|
{
|
|
232
237
|
match: /a\/?c|air.?condition|central air|hvac/i,
|
|
233
|
-
icon:
|
|
238
|
+
icon: rt
|
|
234
239
|
},
|
|
235
240
|
{
|
|
236
241
|
match: /fire|chimney|heat/i,
|
|
@@ -244,8 +249,8 @@ var lt = {
|
|
|
244
249
|
match: /car|garage/i,
|
|
245
250
|
icon: Ie
|
|
246
251
|
}
|
|
247
|
-
],
|
|
248
|
-
function
|
|
252
|
+
], bt = (e) => yt.find((t) => t.match.test(e))?.icon ?? p;
|
|
253
|
+
function xt(e) {
|
|
249
254
|
switch (e.toLowerCase()) {
|
|
250
255
|
case "vacant": return "Vacant — accepting applications";
|
|
251
256
|
case "occupied": return "Currently occupied";
|
|
@@ -254,7 +259,7 @@ function yt(e) {
|
|
|
254
259
|
default: return e.replace(/[-_]/g, " ");
|
|
255
260
|
}
|
|
256
261
|
}
|
|
257
|
-
function
|
|
262
|
+
function St(e) {
|
|
258
263
|
switch (e.toLowerCase()) {
|
|
259
264
|
case "vacant": return "success";
|
|
260
265
|
case "occupied": return "muted";
|
|
@@ -263,86 +268,87 @@ function bt(e) {
|
|
|
263
268
|
default: return "muted";
|
|
264
269
|
}
|
|
265
270
|
}
|
|
266
|
-
var
|
|
267
|
-
let { id: p } =
|
|
271
|
+
var Ct = () => {
|
|
272
|
+
let { id: p } = ot(), m = at(), He = it(), { emit: Je, emitResource: h } = ee();
|
|
268
273
|
te("housingvista.property.viewed", p);
|
|
269
|
-
let { data: g, loading: et } = ae(p), { data:
|
|
274
|
+
let { data: g, loading: et } = ae(p), { data: tt } = ie({ pagination: {
|
|
270
275
|
limit: 8,
|
|
271
276
|
offset: 0
|
|
272
|
-
} }), { data:
|
|
277
|
+
} }), { data: nt } = le(), { data: rt } = se({
|
|
273
278
|
filter: p ? { propertyId: p } : void 0,
|
|
274
279
|
pagination: {
|
|
275
280
|
limit: 1,
|
|
276
281
|
offset: 0
|
|
277
282
|
}
|
|
278
|
-
}), { saveShortlist:
|
|
279
|
-
if (et) return /* @__PURE__ */
|
|
283
|
+
}), { saveShortlist: yt, loading: Ct } = ce(), { removeShortlist: wt, loading: Tt } = oe(), { bookViewing: Et, loading: Dt } = l(), { submitOffer: Ot, loading: kt } = ue(), { updateProperty: At, loading: j } = fe(), { deleteProperty: jt, loading: Mt } = re(), { submitRentalApplication: Nt, loading: Pt } = de(), { createInvestment: Ft, loading: It } = ne(), { updatePropertyReraStatus: Lt, loading: Rt } = pe(), zt = Oe(() => tt.filter((e) => e.id !== p).slice(0, 3), [tt, p]), M = Oe(() => nt.some((e) => e.propertyId === p), [nt, p]), [N, Bt] = f(0), [P, Vt] = f("details"), [Ht, F] = f(!1), [Ut, I] = f(!1), [Wt, L] = f(!1), [Gt, R] = f(!1), [Kt, z] = f(!1), [qt, Jt] = f(!1), [Yt, Xt] = f(""), [Zt, Qt] = f(""), [$t, en] = f(""), [tn, nn] = f(""), [rn, an] = f(""), [on, sn] = f(""), [cn, ln] = f(""), [un, dn] = f("8"), [B, fn] = f(!0), [pn, mn] = f("6"), [V, hn] = f(!1), [gn, _n] = f("20"), [vn, yn] = f("8.5"), [bn, xn] = f("20"), [H, Sn] = f(""), [Cn, wn] = f("in_person"), [Tn, En] = f(""), [Dn, On] = f(""), [kn, An] = f(""), [jn, Mn] = f(""), [Nn, Pn] = f(""), [Fn, U] = f(""), [W, In] = f(mt), [Ln, Rn] = f(mt);
|
|
284
|
+
if (et) return /* @__PURE__ */ y("div", {
|
|
280
285
|
className: "space-y-6 p-6",
|
|
281
|
-
children: [/* @__PURE__ */
|
|
286
|
+
children: [/* @__PURE__ */ v(c, { className: "h-80" }), /* @__PURE__ */ v(c, { variant: "detail" })]
|
|
282
287
|
});
|
|
283
|
-
if (!g) return /* @__PURE__ */
|
|
288
|
+
if (!g) return /* @__PURE__ */ v("div", {
|
|
284
289
|
className: "p-6",
|
|
285
|
-
children: /* @__PURE__ */
|
|
290
|
+
children: /* @__PURE__ */ v(o, {
|
|
286
291
|
illustration: "empty-search",
|
|
287
|
-
icon: /* @__PURE__ */
|
|
292
|
+
icon: /* @__PURE__ */ v(Ne, { className: "h-12 w-12" }),
|
|
288
293
|
title: "Property Not Found",
|
|
289
294
|
description: "The property you're looking for doesn't exist or has been removed.",
|
|
290
|
-
action: /* @__PURE__ */
|
|
295
|
+
action: /* @__PURE__ */ y("button", {
|
|
291
296
|
onClick: () => m("../properties"),
|
|
292
297
|
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",
|
|
293
|
-
children: [/* @__PURE__ */
|
|
298
|
+
children: [/* @__PURE__ */ v(ke, { className: "h-4 w-4" }), "Back to Properties"]
|
|
294
299
|
})
|
|
295
300
|
})
|
|
296
301
|
});
|
|
297
|
-
let
|
|
302
|
+
let zn = [{
|
|
298
303
|
label: "Properties",
|
|
299
304
|
href: "../"
|
|
300
|
-
}, { label: g.title }],
|
|
305
|
+
}, { label: g.title }], Bn = (e) => {
|
|
301
306
|
let t = n(e.amount, e.currency);
|
|
302
307
|
return e.type === "rent" && e.period ? `${t}/${e.period.replace("ly", "")}` : t;
|
|
303
|
-
},
|
|
308
|
+
}, Vn = () => Bt((e) => e === g.images.length - 1 ? 0 : e + 1), Hn = () => Bt((e) => e === 0 ? g.images.length - 1 : e - 1), Un = () => {
|
|
304
309
|
navigator.share ? navigator.share({
|
|
305
310
|
title: g.title,
|
|
306
311
|
text: g.description,
|
|
307
312
|
url: window.location.href
|
|
308
313
|
}) : (navigator.clipboard.writeText(window.location.href), u.info("Link copied", "The property link is on your clipboard."));
|
|
309
|
-
},
|
|
314
|
+
}, Wn = async () => {
|
|
310
315
|
try {
|
|
311
|
-
|
|
316
|
+
M ? (await wt(g.id), u.success("Removed from shortlist")) : (await yt(g.id), h("housingvista.shortlist.property_added", g.id), u.success("Saved to shortlist"));
|
|
312
317
|
} catch (e) {
|
|
313
318
|
u.error("Could not update shortlist", e.message);
|
|
314
319
|
}
|
|
315
|
-
},
|
|
316
|
-
if (e.preventDefault(),
|
|
317
|
-
await
|
|
320
|
+
}, Gn = async (e) => {
|
|
321
|
+
if (e.preventDefault(), H) try {
|
|
322
|
+
await Et({
|
|
318
323
|
propertyId: g.id,
|
|
319
|
-
scheduledAt: new Date(
|
|
320
|
-
type:
|
|
321
|
-
attendeeName:
|
|
322
|
-
attendeeEmail:
|
|
323
|
-
notes:
|
|
324
|
-
}), h("housingvista.viewing.scheduled", g.id), u.success("Viewing requested", "The owner will confirm your slot shortly."),
|
|
324
|
+
scheduledAt: new Date(H).toISOString(),
|
|
325
|
+
type: Cn,
|
|
326
|
+
attendeeName: Tn.trim() || void 0,
|
|
327
|
+
attendeeEmail: Dn.trim() || void 0,
|
|
328
|
+
notes: kn.trim() || void 0
|
|
329
|
+
}), h("housingvista.viewing.scheduled", g.id), u.success("Viewing requested", "The owner will confirm your slot shortly."), F(!1), Sn(""), En(""), On(""), An("");
|
|
325
330
|
} catch (e) {
|
|
326
331
|
u.error("Could not book viewing", e.message);
|
|
327
332
|
}
|
|
328
|
-
},
|
|
333
|
+
}, Kn = async (e) => {
|
|
329
334
|
e.preventDefault();
|
|
330
|
-
let t = Number(
|
|
335
|
+
let t = Number(jn);
|
|
331
336
|
if (!t || t <= 0) {
|
|
332
337
|
u.warning("Enter a valid offer amount");
|
|
333
338
|
return;
|
|
334
339
|
}
|
|
335
340
|
try {
|
|
336
|
-
await
|
|
341
|
+
await Ot({
|
|
337
342
|
propertyId: g.id,
|
|
338
343
|
amount: t,
|
|
339
344
|
currency: g.price.currency,
|
|
340
|
-
notes:
|
|
341
|
-
|
|
345
|
+
notes: Nn.trim() || void 0,
|
|
346
|
+
expiresAt: Fn ? new Date(Fn).toISOString() : void 0
|
|
347
|
+
}), h("housingvista.offer.created", g.id), u.success("Offer submitted", `Your offer of ${n(t, g.price.currency)} was sent.`), I(!1), Mn(""), Pn(""), U("");
|
|
342
348
|
} catch (e) {
|
|
343
349
|
u.error("Could not submit offer", e.message);
|
|
344
350
|
}
|
|
345
|
-
},
|
|
351
|
+
}, qn = () => {
|
|
346
352
|
let e = g.location.coordinates, t = {
|
|
347
353
|
title: g.title,
|
|
348
354
|
description: g.description,
|
|
@@ -360,35 +366,35 @@ var xt = () => {
|
|
|
360
366
|
latitude: e.latitude,
|
|
361
367
|
longitude: e.longitude
|
|
362
368
|
} : null,
|
|
363
|
-
bedrooms:
|
|
364
|
-
bathrooms:
|
|
365
|
-
totalArea:
|
|
366
|
-
carpetArea:
|
|
367
|
-
builtUpArea:
|
|
368
|
-
floors:
|
|
369
|
-
totalFloors:
|
|
370
|
-
parking:
|
|
371
|
-
balconies:
|
|
369
|
+
bedrooms: k(g.specifications.bedrooms),
|
|
370
|
+
bathrooms: k(g.specifications.bathrooms),
|
|
371
|
+
totalArea: k(g.specifications.totalArea),
|
|
372
|
+
carpetArea: k(g.specifications.carpetArea),
|
|
373
|
+
builtUpArea: k(g.specifications.builtUpArea),
|
|
374
|
+
floors: k(g.specifications.floors),
|
|
375
|
+
totalFloors: k(g.specifications.totalFloors),
|
|
376
|
+
parking: k(g.specifications.parking),
|
|
377
|
+
balconies: k(g.specifications.balconies),
|
|
372
378
|
furnishingStatus: g.specifications.furnishingStatus,
|
|
373
|
-
ageOfProperty:
|
|
379
|
+
ageOfProperty: k(g.specifications.ageOfProperty),
|
|
374
380
|
facing: g.specifications.facing ?? "",
|
|
375
|
-
price:
|
|
381
|
+
price: k(g.price.amount),
|
|
376
382
|
currency: g.price.currency,
|
|
377
383
|
priceType: g.price.type,
|
|
378
384
|
pricePeriod: g.price.period ?? "",
|
|
379
385
|
negotiable: g.price.negotiable,
|
|
380
|
-
pricePerSqft:
|
|
386
|
+
pricePerSqft: k(g.price.pricePerSqft),
|
|
381
387
|
amenities: g.amenities.filter((e) => e.available).map((e) => d.find((t) => t.label === e.name)?.id ?? "").filter((e) => e !== ""),
|
|
382
388
|
extraAmenities: g.amenities.filter((e) => !d.some((t) => t.label === e.name)),
|
|
383
389
|
catalogAmenities: g.amenities.filter((e) => d.some((t) => t.label === e.name))
|
|
384
390
|
};
|
|
385
|
-
|
|
386
|
-
}, G = (e) =>
|
|
391
|
+
In(t), Rn(t), L(!0);
|
|
392
|
+
}, G = (e) => In((t) => ({
|
|
387
393
|
...t,
|
|
388
394
|
...e
|
|
389
|
-
})), K = (e) => e.trim(),
|
|
395
|
+
})), K = (e) => e.trim(), Jn = async (e) => {
|
|
390
396
|
e.preventDefault();
|
|
391
|
-
let t = W.title.trim(), n = W.city.trim(), r = W.state.trim(), i =
|
|
397
|
+
let t = W.title.trim(), n = W.city.trim(), r = W.state.trim(), i = D(W.bedrooms), a = D(W.bathrooms), o = D(W.totalArea), s = D(W.price);
|
|
392
398
|
if (!t || !n || !r) {
|
|
393
399
|
u.warning("Title, city and state are required");
|
|
394
400
|
return;
|
|
@@ -409,7 +415,7 @@ var xt = () => {
|
|
|
409
415
|
u.warning("Enter a price greater than zero");
|
|
410
416
|
return;
|
|
411
417
|
}
|
|
412
|
-
let c =
|
|
418
|
+
let c = ht(W.landmarks), ee = c.join("|") !== ht(Ln.landmarks).join("|"), te = [...W.amenities].sort().join("|") !== [...Ln.amenities].sort().join("|"), l = {
|
|
413
419
|
title: t,
|
|
414
420
|
description: K(W.description),
|
|
415
421
|
status: W.status,
|
|
@@ -425,21 +431,21 @@ var xt = () => {
|
|
|
425
431
|
bedrooms: i ?? void 0,
|
|
426
432
|
bathrooms: a ?? void 0,
|
|
427
433
|
totalArea: o,
|
|
428
|
-
carpetArea:
|
|
429
|
-
builtUpArea:
|
|
430
|
-
floors:
|
|
431
|
-
totalFloors:
|
|
432
|
-
parking:
|
|
433
|
-
balconies:
|
|
434
|
+
carpetArea: O(W.carpetArea),
|
|
435
|
+
builtUpArea: O(W.builtUpArea),
|
|
436
|
+
floors: O(W.floors),
|
|
437
|
+
totalFloors: O(W.totalFloors),
|
|
438
|
+
parking: O(W.parking),
|
|
439
|
+
balconies: O(W.balconies),
|
|
434
440
|
furnishingStatus: W.furnishingStatus,
|
|
435
|
-
ageOfProperty:
|
|
441
|
+
ageOfProperty: O(W.ageOfProperty),
|
|
436
442
|
facing: W.facing || void 0,
|
|
437
443
|
price: s,
|
|
438
444
|
currency: W.currency || void 0,
|
|
439
445
|
priceType: W.priceType || void 0,
|
|
440
446
|
pricePeriod: W.pricePeriod === "" ? null : W.pricePeriod,
|
|
441
447
|
negotiable: W.negotiable,
|
|
442
|
-
pricePerSqft:
|
|
448
|
+
pricePerSqft: O(W.pricePerSqft)
|
|
443
449
|
};
|
|
444
450
|
if (ee && (l.landmarks = c), te) {
|
|
445
451
|
let e = new Set(W.amenities.map((e) => d.find((t) => t.id === e)?.label ?? e)), t = /* @__PURE__ */ new Map();
|
|
@@ -465,40 +471,40 @@ var xt = () => {
|
|
|
465
471
|
l.amenities = [...t.values()];
|
|
466
472
|
}
|
|
467
473
|
try {
|
|
468
|
-
await
|
|
474
|
+
await At(g.id, l), h("housingvista.property.updated", g.id), u.success("Property updated"), L(!1);
|
|
469
475
|
} catch (e) {
|
|
470
476
|
u.error("Could not update property", e.message);
|
|
471
477
|
}
|
|
472
|
-
},
|
|
478
|
+
}, Yn = async () => {
|
|
473
479
|
try {
|
|
474
|
-
await
|
|
480
|
+
await jt(g.id), h("housingvista.property.deleted", g.id), u.success("Property deleted"), m("../properties");
|
|
475
481
|
} catch (e) {
|
|
476
482
|
u.error("Could not delete property", e.message);
|
|
477
483
|
}
|
|
478
|
-
}, q =
|
|
484
|
+
}, q = rt[0], J = q?.id, Xn = async (e) => {
|
|
479
485
|
if (e.preventDefault(), !J) {
|
|
480
486
|
u.warning("No rental unit is available for this property yet");
|
|
481
487
|
return;
|
|
482
488
|
}
|
|
483
|
-
if (!
|
|
489
|
+
if (!Yt.trim() || !Zt.trim()) {
|
|
484
490
|
u.warning("Enter your name and email to apply");
|
|
485
491
|
return;
|
|
486
492
|
}
|
|
487
493
|
try {
|
|
488
|
-
await
|
|
494
|
+
await Nt({
|
|
489
495
|
rentalUnitId: J,
|
|
490
|
-
applicantName:
|
|
491
|
-
applicantEmail:
|
|
492
|
-
applicantPhone:
|
|
493
|
-
monthlyIncome:
|
|
494
|
-
moveInDate:
|
|
495
|
-
}), u.success("Application submitted", "The owner will review your rental application shortly."),
|
|
496
|
+
applicantName: Yt.trim(),
|
|
497
|
+
applicantEmail: Zt.trim(),
|
|
498
|
+
applicantPhone: $t.trim() || void 0,
|
|
499
|
+
monthlyIncome: tn ? Number(tn) : void 0,
|
|
500
|
+
moveInDate: rn ? new Date(rn).toISOString() : void 0
|
|
501
|
+
}), u.success("Application submitted", "The owner will review your rental application shortly."), z(!1), Xt(""), Qt(""), en(""), nn(""), an("");
|
|
496
502
|
} catch (e) {
|
|
497
503
|
u.error("Could not submit application", e.message);
|
|
498
504
|
}
|
|
499
|
-
},
|
|
505
|
+
}, Zn = async () => {
|
|
500
506
|
try {
|
|
501
|
-
await
|
|
507
|
+
await Ft({
|
|
502
508
|
propertyId: g.id,
|
|
503
509
|
title: `${g.title} — investment`,
|
|
504
510
|
status: "active",
|
|
@@ -510,153 +516,155 @@ var xt = () => {
|
|
|
510
516
|
} catch (e) {
|
|
511
517
|
u.error("Could not track investment", e.message);
|
|
512
518
|
}
|
|
513
|
-
},
|
|
519
|
+
}, Qn = async (e) => {
|
|
514
520
|
try {
|
|
515
|
-
await
|
|
521
|
+
await Lt(g.id, e), u.success(e === "verified" ? "RERA registration verified" : "RERA registration rejected", g.title);
|
|
516
522
|
} catch (e) {
|
|
517
523
|
u.error("Could not update RERA status", e.message);
|
|
518
524
|
}
|
|
519
|
-
}, Y = g.price.amount,
|
|
525
|
+
}, Y = g.price.amount, $n = Number(on) || Math.round(Y * .005), er = Number(cn) || Math.round(Y * .0015), tr = $n * 12, nr = Y > 0 ? tr / Y * 100 : 0, rr = tr - er * 12, ir = Y > 0 ? rr / Y * 100 : 0, ar = Math.max(0, Number(un) || 0) / 100, or = Array.from({ length: 6 }, (e, t) => ({
|
|
520
526
|
label: t === 0 ? "Now" : `Yr ${t}`,
|
|
521
|
-
value: Math.round(Y * (1 +
|
|
522
|
-
})),
|
|
523
|
-
return /* @__PURE__ */
|
|
527
|
+
value: Math.round(Y * (1 + ar) ** +t)
|
|
528
|
+
})), sr = or[or.length - 1].value, cr = sr - Y + rr * 5, lr = Y > 0 ? cr / Y * 100 : 0, ur = Math.max(0, Number(pn) || 0), X = B ? ur / 100 * Y : 0, dr = Math.min(100, Math.max(0, Number(gn) || 0)), fr = Math.max(0, Number(vn) || 0) / 100, pr = Math.max(1, Number(bn) || 1), mr = V ? dr / 100 * Y : Y, Z = V ? Y - mr : 0, Q = fr / 12, hr = pr * 12, gr = V && Z > 0 ? Q > 0 ? Z * Q * (1 + Q) ** +hr / ((1 + Q) ** +hr - 1) : Z / hr : 0, _r = gr * 12, $ = mr + X, vr = rr - _r, yr = $ > 0 ? vr / $ * 100 : 0;
|
|
529
|
+
return /* @__PURE__ */ y("div", {
|
|
524
530
|
className: "space-y-6 p-6",
|
|
525
531
|
children: [
|
|
526
|
-
/* @__PURE__ */
|
|
527
|
-
/* @__PURE__ */
|
|
532
|
+
/* @__PURE__ */ v(s, { items: zn }),
|
|
533
|
+
/* @__PURE__ */ y("div", {
|
|
528
534
|
className: "flex flex-wrap items-center gap-3",
|
|
529
535
|
children: [
|
|
530
|
-
/* @__PURE__ */
|
|
536
|
+
/* @__PURE__ */ y("button", {
|
|
531
537
|
onClick: () => m("../properties"),
|
|
532
538
|
className: "inline-flex items-center gap-2 rounded-md border border-border-subtle px-3 py-1.5 text-sm text-text-primary transition-colors hover:bg-bg-sunken",
|
|
533
|
-
children: [/* @__PURE__ */
|
|
539
|
+
children: [/* @__PURE__ */ v(ke, { className: "h-4 w-4" }), "Back"]
|
|
534
540
|
}),
|
|
535
|
-
/* @__PURE__ */
|
|
541
|
+
/* @__PURE__ */ v(a, {
|
|
536
542
|
label: g.status.replace("_", " "),
|
|
537
|
-
variant:
|
|
543
|
+
variant: ut[g.status] ?? "default",
|
|
538
544
|
dot: !0
|
|
539
545
|
}),
|
|
540
|
-
g.verificationStatus === "verified" && /* @__PURE__ */
|
|
546
|
+
g.verificationStatus === "verified" && /* @__PURE__ */ v(a, {
|
|
541
547
|
label: "Verified",
|
|
542
548
|
variant: "success",
|
|
543
549
|
dot: !0
|
|
544
550
|
}),
|
|
545
|
-
g.price.negotiable && /* @__PURE__ */
|
|
551
|
+
g.price.negotiable && /* @__PURE__ */ v(a, {
|
|
546
552
|
label: "Negotiable",
|
|
547
553
|
variant: "info"
|
|
548
554
|
}),
|
|
549
|
-
/* @__PURE__ */
|
|
555
|
+
/* @__PURE__ */ y("div", {
|
|
550
556
|
className: "ml-auto flex items-center gap-2",
|
|
551
|
-
children: [/* @__PURE__ */ b
|
|
557
|
+
children: [/* @__PURE__ */ y(b, {
|
|
552
558
|
type: "button",
|
|
553
559
|
variant: "outline",
|
|
554
560
|
size: "sm",
|
|
555
|
-
onClick:
|
|
556
|
-
children: [/* @__PURE__ */
|
|
557
|
-
}), /* @__PURE__ */ b
|
|
561
|
+
onClick: qn,
|
|
562
|
+
children: [/* @__PURE__ */ v(Ye, { className: "mr-1.5 h-4 w-4" }), "Edit"]
|
|
563
|
+
}), /* @__PURE__ */ y(b, {
|
|
558
564
|
type: "button",
|
|
559
565
|
variant: "outline",
|
|
560
566
|
size: "sm",
|
|
561
|
-
onClick: () =>
|
|
562
|
-
children: [/* @__PURE__ */
|
|
567
|
+
onClick: () => R(!0),
|
|
568
|
+
children: [/* @__PURE__ */ v(Qe, { className: "mr-1.5 h-4 w-4" }), "Delete"]
|
|
563
569
|
})]
|
|
564
570
|
})
|
|
565
571
|
]
|
|
566
572
|
}),
|
|
567
|
-
/* @__PURE__ */
|
|
573
|
+
/* @__PURE__ */ v(lt, {
|
|
568
574
|
className: "max-w-3xl",
|
|
569
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."
|
|
570
576
|
}),
|
|
571
|
-
/* @__PURE__ */
|
|
577
|
+
/* @__PURE__ */ v(ct, {
|
|
572
578
|
storageKey: "housingvista-property-detail",
|
|
573
579
|
steps: [
|
|
574
580
|
{
|
|
575
581
|
id: "schedule",
|
|
576
582
|
label: "Schedule a viewing",
|
|
577
583
|
description: "Book a time to see the property in person or virtually.",
|
|
578
|
-
onClick: () =>
|
|
584
|
+
onClick: () => F(!0)
|
|
579
585
|
},
|
|
580
586
|
{
|
|
581
587
|
id: "offer",
|
|
582
588
|
label: "Make an offer",
|
|
583
589
|
description: "Submit a price and let the owner respond.",
|
|
584
|
-
onClick: () =>
|
|
590
|
+
onClick: () => {
|
|
591
|
+
U(_t()), I(!0);
|
|
592
|
+
}
|
|
585
593
|
},
|
|
586
594
|
{
|
|
587
595
|
id: "location",
|
|
588
596
|
label: "Explore the location",
|
|
589
597
|
description: "See the neighborhood, nearby landmarks, and map.",
|
|
590
|
-
onClick: () =>
|
|
598
|
+
onClick: () => Vt("location")
|
|
591
599
|
}
|
|
592
600
|
]
|
|
593
601
|
}),
|
|
594
|
-
/* @__PURE__ */
|
|
602
|
+
/* @__PURE__ */ y("div", {
|
|
595
603
|
className: "space-y-3",
|
|
596
|
-
children: [/* @__PURE__ */
|
|
604
|
+
children: [/* @__PURE__ */ y("div", {
|
|
597
605
|
className: "relative overflow-hidden rounded-xl border border-border-subtle bg-bg-sunken",
|
|
598
606
|
children: [
|
|
599
|
-
g.images.length > 0 ? /* @__PURE__ */
|
|
600
|
-
src: g.images[
|
|
601
|
-
alt: g.images[
|
|
607
|
+
g.images.length > 0 ? /* @__PURE__ */ v("img", {
|
|
608
|
+
src: g.images[N]?.url,
|
|
609
|
+
alt: g.images[N]?.title ?? g.title,
|
|
602
610
|
className: "h-80 w-full object-cover sm:h-[26rem]"
|
|
603
|
-
}) : /* @__PURE__ */
|
|
611
|
+
}) : /* @__PURE__ */ y("div", {
|
|
604
612
|
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]",
|
|
605
|
-
children: [/* @__PURE__ */
|
|
613
|
+
children: [/* @__PURE__ */ v(Ne, { className: "h-12 w-12" }), /* @__PURE__ */ v("span", {
|
|
606
614
|
className: "text-sm font-medium tracking-wide",
|
|
607
615
|
children: "No photos yet"
|
|
608
616
|
})]
|
|
609
617
|
}),
|
|
610
|
-
g.images.length > 1 && /* @__PURE__ */
|
|
611
|
-
onClick:
|
|
618
|
+
g.images.length > 1 && /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("button", {
|
|
619
|
+
onClick: Hn,
|
|
612
620
|
"aria-label": "Previous photo",
|
|
613
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",
|
|
614
|
-
children: /* @__PURE__ */
|
|
615
|
-
}), /* @__PURE__ */
|
|
616
|
-
onClick:
|
|
622
|
+
children: /* @__PURE__ */ v(Le, { className: "h-5 w-5" })
|
|
623
|
+
}), /* @__PURE__ */ v("button", {
|
|
624
|
+
onClick: Vn,
|
|
617
625
|
"aria-label": "Next photo",
|
|
618
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",
|
|
619
|
-
children: /* @__PURE__ */
|
|
627
|
+
children: /* @__PURE__ */ v(Re, { className: "h-5 w-5" })
|
|
620
628
|
})] }),
|
|
621
|
-
g.verificationStatus === "verified" && /* @__PURE__ */
|
|
629
|
+
g.verificationStatus === "verified" && /* @__PURE__ */ y("div", {
|
|
622
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",
|
|
623
|
-
children: [/* @__PURE__ */
|
|
631
|
+
children: [/* @__PURE__ */ v(Ae, { className: "h-4 w-4" }), "Verified listing"]
|
|
624
632
|
}),
|
|
625
|
-
/* @__PURE__ */
|
|
633
|
+
/* @__PURE__ */ y("div", {
|
|
626
634
|
className: "absolute right-4 top-4 flex gap-2",
|
|
627
|
-
children: [/* @__PURE__ */
|
|
628
|
-
onClick:
|
|
629
|
-
disabled:
|
|
630
|
-
"aria-label":
|
|
635
|
+
children: [/* @__PURE__ */ v("button", {
|
|
636
|
+
onClick: Wn,
|
|
637
|
+
disabled: Ct || Tt,
|
|
638
|
+
"aria-label": M ? "Remove from shortlist" : "Save to shortlist",
|
|
631
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",
|
|
632
|
-
children: /* @__PURE__ */
|
|
633
|
-
}), /* @__PURE__ */
|
|
634
|
-
onClick:
|
|
640
|
+
children: /* @__PURE__ */ v(Ue, { className: e("h-5 w-5", M ? "fill-status-error-text text-status-error-text" : "text-text-secondary") })
|
|
641
|
+
}), /* @__PURE__ */ v("button", {
|
|
642
|
+
onClick: Un,
|
|
635
643
|
"aria-label": "Share this listing",
|
|
636
644
|
className: "rounded-full bg-bg-surface/85 p-2 shadow-elevation-1 backdrop-blur-sm transition-colors hover:bg-bg-surface",
|
|
637
|
-
children: /* @__PURE__ */
|
|
645
|
+
children: /* @__PURE__ */ v(Xe, { className: "h-5 w-5 text-text-secondary" })
|
|
638
646
|
})]
|
|
639
647
|
}),
|
|
640
|
-
g.images.length > 0 && /* @__PURE__ */
|
|
648
|
+
g.images.length > 0 && /* @__PURE__ */ v("div", {
|
|
641
649
|
className: "absolute bottom-4 right-4",
|
|
642
|
-
children: /* @__PURE__ */
|
|
650
|
+
children: /* @__PURE__ */ y("span", {
|
|
643
651
|
className: "rounded-md bg-bg-overlay/70 px-2 py-1 text-xs font-medium text-text-inverse",
|
|
644
652
|
children: [
|
|
645
|
-
|
|
653
|
+
N + 1,
|
|
646
654
|
" / ",
|
|
647
655
|
g.images.length
|
|
648
656
|
]
|
|
649
657
|
})
|
|
650
658
|
})
|
|
651
659
|
]
|
|
652
|
-
}), g.images.length > 1 && /* @__PURE__ */
|
|
660
|
+
}), g.images.length > 1 && /* @__PURE__ */ v("div", {
|
|
653
661
|
className: "flex gap-3 overflow-x-auto pb-1",
|
|
654
|
-
children: g.images.map((t, n) => /* @__PURE__ */
|
|
655
|
-
onClick: () =>
|
|
662
|
+
children: g.images.map((t, n) => /* @__PURE__ */ v("button", {
|
|
663
|
+
onClick: () => Bt(n),
|
|
656
664
|
"aria-label": `View photo ${n + 1}`,
|
|
657
|
-
"aria-current": n ===
|
|
658
|
-
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 ===
|
|
659
|
-
children: /* @__PURE__ */
|
|
665
|
+
"aria-current": n === N,
|
|
666
|
+
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 === N ? "border-action-primary-border" : "border-transparent opacity-70 hover:opacity-100"),
|
|
667
|
+
children: /* @__PURE__ */ v("img", {
|
|
660
668
|
src: t.url,
|
|
661
669
|
alt: t.title ?? `Photo ${n + 1}`,
|
|
662
670
|
className: "h-full w-full object-cover"
|
|
@@ -664,19 +672,19 @@ var xt = () => {
|
|
|
664
672
|
}, t.id))
|
|
665
673
|
})]
|
|
666
674
|
}),
|
|
667
|
-
/* @__PURE__ */
|
|
675
|
+
/* @__PURE__ */ y("div", {
|
|
668
676
|
className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
|
|
669
|
-
children: [/* @__PURE__ */
|
|
677
|
+
children: [/* @__PURE__ */ y("div", {
|
|
670
678
|
className: "space-y-6 lg:col-span-2",
|
|
671
|
-
children: [/* @__PURE__ */
|
|
672
|
-
/* @__PURE__ */
|
|
679
|
+
children: [/* @__PURE__ */ y(st, { children: [
|
|
680
|
+
/* @__PURE__ */ y("div", {
|
|
673
681
|
className: "flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",
|
|
674
|
-
children: [/* @__PURE__ */
|
|
682
|
+
children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h1", {
|
|
675
683
|
className: "text-2xl font-bold text-text-primary",
|
|
676
684
|
children: g.title
|
|
677
|
-
}), /* @__PURE__ */
|
|
685
|
+
}), /* @__PURE__ */ y("div", {
|
|
678
686
|
className: "mt-2 flex items-center text-text-secondary",
|
|
679
|
-
children: [/* @__PURE__ */
|
|
687
|
+
children: [/* @__PURE__ */ v(Ge, { className: "mr-1.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ v("span", {
|
|
680
688
|
className: "text-sm",
|
|
681
689
|
children: [
|
|
682
690
|
g.location.address,
|
|
@@ -684,18 +692,18 @@ var xt = () => {
|
|
|
684
692
|
g.location.city
|
|
685
693
|
].filter(Boolean).join(", ")
|
|
686
694
|
})]
|
|
687
|
-
})] }), /* @__PURE__ */
|
|
695
|
+
})] }), /* @__PURE__ */ y("div", {
|
|
688
696
|
className: "text-right",
|
|
689
|
-
children: [/* @__PURE__ */
|
|
697
|
+
children: [/* @__PURE__ */ v("div", {
|
|
690
698
|
className: "text-2xl font-bold text-text-primary",
|
|
691
|
-
children:
|
|
692
|
-
}), g.price.pricePerSqft && /* @__PURE__ */
|
|
699
|
+
children: Bn(g.price)
|
|
700
|
+
}), g.price.pricePerSqft && /* @__PURE__ */ y("div", {
|
|
693
701
|
className: "text-sm text-text-secondary",
|
|
694
702
|
children: [n(g.price.pricePerSqft), "/sqft"]
|
|
695
703
|
})]
|
|
696
704
|
})]
|
|
697
705
|
}),
|
|
698
|
-
/* @__PURE__ */
|
|
706
|
+
/* @__PURE__ */ v("div", {
|
|
699
707
|
className: "mt-6 grid grid-cols-2 gap-3 border-t border-border-subtle pt-6 sm:grid-cols-4",
|
|
700
708
|
children: [
|
|
701
709
|
g.specifications.bedrooms != null && {
|
|
@@ -724,15 +732,15 @@ var xt = () => {
|
|
|
724
732
|
} : !1
|
|
725
733
|
].filter((e) => !!e).map((e) => {
|
|
726
734
|
let t = e.icon;
|
|
727
|
-
return /* @__PURE__ */
|
|
735
|
+
return /* @__PURE__ */ y("div", {
|
|
728
736
|
className: "flex flex-col items-center gap-1 rounded-lg border border-border-subtle bg-bg-sunken/40 p-3 text-center",
|
|
729
737
|
children: [
|
|
730
|
-
/* @__PURE__ */
|
|
731
|
-
/* @__PURE__ */
|
|
738
|
+
/* @__PURE__ */ v(t, { className: "h-5 w-5 text-text-secondary" }),
|
|
739
|
+
/* @__PURE__ */ v("span", {
|
|
732
740
|
className: "text-base font-semibold text-text-primary",
|
|
733
741
|
children: e.value
|
|
734
742
|
}),
|
|
735
|
-
/* @__PURE__ */
|
|
743
|
+
/* @__PURE__ */ v("span", {
|
|
736
744
|
className: "text-xs text-text-secondary",
|
|
737
745
|
children: e.label
|
|
738
746
|
})
|
|
@@ -740,95 +748,95 @@ var xt = () => {
|
|
|
740
748
|
}, e.label);
|
|
741
749
|
})
|
|
742
750
|
}),
|
|
743
|
-
g.description && /* @__PURE__ */
|
|
751
|
+
g.description && /* @__PURE__ */ y("div", {
|
|
744
752
|
className: "mt-6 border-t border-border-subtle pt-6",
|
|
745
|
-
children: [/* @__PURE__ */
|
|
753
|
+
children: [/* @__PURE__ */ v("h3", {
|
|
746
754
|
className: "mb-3 text-base font-semibold text-text-primary",
|
|
747
755
|
children: "Description"
|
|
748
|
-
}), /* @__PURE__ */
|
|
756
|
+
}), /* @__PURE__ */ v("p", {
|
|
749
757
|
className: "text-sm leading-relaxed text-text-secondary",
|
|
750
758
|
children: g.description
|
|
751
759
|
})]
|
|
752
760
|
})
|
|
753
|
-
] }), /* @__PURE__ */
|
|
761
|
+
] }), /* @__PURE__ */ y("div", {
|
|
754
762
|
className: "rounded-lg border border-border-subtle bg-bg-surface",
|
|
755
|
-
children: [/* @__PURE__ */
|
|
763
|
+
children: [/* @__PURE__ */ v("div", {
|
|
756
764
|
className: "border-b border-border-subtle",
|
|
757
|
-
children: /* @__PURE__ */
|
|
765
|
+
children: /* @__PURE__ */ v("nav", {
|
|
758
766
|
className: "flex space-x-6 overflow-x-auto px-6",
|
|
759
|
-
children:
|
|
760
|
-
onClick: () =>
|
|
761
|
-
className: e("whitespace-nowrap border-b-2 py-3 text-sm font-medium transition-colors",
|
|
767
|
+
children: vt.map((t) => /* @__PURE__ */ v("button", {
|
|
768
|
+
onClick: () => Vt(t.id),
|
|
769
|
+
className: e("whitespace-nowrap border-b-2 py-3 text-sm font-medium transition-colors", P === t.id ? "border-action-primary-border text-text-primary" : "border-transparent text-text-secondary hover:text-text-primary"),
|
|
762
770
|
children: t.label
|
|
763
771
|
}, t.id))
|
|
764
772
|
})
|
|
765
|
-
}), /* @__PURE__ */
|
|
773
|
+
}), /* @__PURE__ */ y("div", {
|
|
766
774
|
className: "p-6",
|
|
767
775
|
children: [
|
|
768
|
-
|
|
776
|
+
P === "details" && /* @__PURE__ */ y("div", {
|
|
769
777
|
className: "grid grid-cols-1 gap-6 sm:grid-cols-2",
|
|
770
|
-
children: [/* @__PURE__ */
|
|
778
|
+
children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h4", {
|
|
771
779
|
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
772
780
|
children: "Property Information"
|
|
773
|
-
}), /* @__PURE__ */
|
|
781
|
+
}), /* @__PURE__ */ y("dl", {
|
|
774
782
|
className: "space-y-2 text-sm",
|
|
775
783
|
children: [
|
|
776
|
-
/* @__PURE__ */
|
|
784
|
+
/* @__PURE__ */ y("div", {
|
|
777
785
|
className: "flex justify-between",
|
|
778
|
-
children: [/* @__PURE__ */
|
|
786
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
779
787
|
className: "text-text-secondary",
|
|
780
788
|
children: "Property Type"
|
|
781
|
-
}), /* @__PURE__ */
|
|
789
|
+
}), /* @__PURE__ */ v("dd", {
|
|
782
790
|
className: "font-medium capitalize text-text-primary",
|
|
783
791
|
children: g.type
|
|
784
792
|
})]
|
|
785
793
|
}),
|
|
786
|
-
/* @__PURE__ */
|
|
794
|
+
/* @__PURE__ */ y("div", {
|
|
787
795
|
className: "flex justify-between",
|
|
788
|
-
children: [/* @__PURE__ */
|
|
796
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
789
797
|
className: "text-text-secondary",
|
|
790
798
|
children: "Category"
|
|
791
|
-
}), /* @__PURE__ */
|
|
799
|
+
}), /* @__PURE__ */ v("dd", {
|
|
792
800
|
className: "font-medium capitalize text-text-primary",
|
|
793
801
|
children: g.category
|
|
794
802
|
})]
|
|
795
803
|
}),
|
|
796
|
-
g.specifications.ageOfProperty != null && /* @__PURE__ */
|
|
804
|
+
g.specifications.ageOfProperty != null && /* @__PURE__ */ y("div", {
|
|
797
805
|
className: "flex justify-between",
|
|
798
|
-
children: [/* @__PURE__ */
|
|
806
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
799
807
|
className: "text-text-secondary",
|
|
800
808
|
children: "Age of Property"
|
|
801
|
-
}), /* @__PURE__ */
|
|
809
|
+
}), /* @__PURE__ */ y("dd", {
|
|
802
810
|
className: "font-medium text-text-primary",
|
|
803
811
|
children: [g.specifications.ageOfProperty, " years"]
|
|
804
812
|
})]
|
|
805
813
|
}),
|
|
806
|
-
/* @__PURE__ */
|
|
814
|
+
/* @__PURE__ */ y("div", {
|
|
807
815
|
className: "flex justify-between",
|
|
808
|
-
children: [/* @__PURE__ */
|
|
816
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
809
817
|
className: "text-text-secondary",
|
|
810
818
|
children: "Furnishing"
|
|
811
|
-
}), /* @__PURE__ */
|
|
819
|
+
}), /* @__PURE__ */ v("dd", {
|
|
812
820
|
className: "font-medium capitalize text-text-primary",
|
|
813
821
|
children: g.specifications.furnishingStatus?.replace("_", " ")
|
|
814
822
|
})]
|
|
815
823
|
}),
|
|
816
|
-
g.specifications.facing && /* @__PURE__ */
|
|
824
|
+
g.specifications.facing && /* @__PURE__ */ y("div", {
|
|
817
825
|
className: "flex justify-between",
|
|
818
|
-
children: [/* @__PURE__ */
|
|
826
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
819
827
|
className: "text-text-secondary",
|
|
820
828
|
children: "Facing"
|
|
821
|
-
}), /* @__PURE__ */
|
|
829
|
+
}), /* @__PURE__ */ v("dd", {
|
|
822
830
|
className: "font-medium text-text-primary",
|
|
823
831
|
children: g.specifications.facing
|
|
824
832
|
})]
|
|
825
833
|
}),
|
|
826
|
-
g.specifications.floors != null && /* @__PURE__ */
|
|
834
|
+
g.specifications.floors != null && /* @__PURE__ */ y("div", {
|
|
827
835
|
className: "flex justify-between",
|
|
828
|
-
children: [/* @__PURE__ */
|
|
836
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
829
837
|
className: "text-text-secondary",
|
|
830
838
|
children: "Floor"
|
|
831
|
-
}), /* @__PURE__ */
|
|
839
|
+
}), /* @__PURE__ */ y("dd", {
|
|
832
840
|
className: "font-medium text-text-primary",
|
|
833
841
|
children: [
|
|
834
842
|
g.specifications.floors,
|
|
@@ -838,48 +846,48 @@ var xt = () => {
|
|
|
838
846
|
})]
|
|
839
847
|
})
|
|
840
848
|
]
|
|
841
|
-
})] }), /* @__PURE__ */
|
|
849
|
+
})] }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h4", {
|
|
842
850
|
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
843
851
|
children: "Area Details"
|
|
844
|
-
}), /* @__PURE__ */
|
|
852
|
+
}), /* @__PURE__ */ y("dl", {
|
|
845
853
|
className: "space-y-2 text-sm",
|
|
846
854
|
children: [
|
|
847
|
-
/* @__PURE__ */
|
|
855
|
+
/* @__PURE__ */ y("div", {
|
|
848
856
|
className: "flex justify-between",
|
|
849
|
-
children: [/* @__PURE__ */
|
|
857
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
850
858
|
className: "text-text-secondary",
|
|
851
859
|
children: "Total Area"
|
|
852
|
-
}), /* @__PURE__ */
|
|
860
|
+
}), /* @__PURE__ */ y("dd", {
|
|
853
861
|
className: "font-medium text-text-primary",
|
|
854
862
|
children: [i(g.specifications.totalArea), " sqft"]
|
|
855
863
|
})]
|
|
856
864
|
}),
|
|
857
|
-
g.specifications.carpetArea && /* @__PURE__ */
|
|
865
|
+
g.specifications.carpetArea && /* @__PURE__ */ y("div", {
|
|
858
866
|
className: "flex justify-between",
|
|
859
|
-
children: [/* @__PURE__ */
|
|
867
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
860
868
|
className: "text-text-secondary",
|
|
861
869
|
children: "Carpet Area"
|
|
862
|
-
}), /* @__PURE__ */
|
|
870
|
+
}), /* @__PURE__ */ y("dd", {
|
|
863
871
|
className: "font-medium text-text-primary",
|
|
864
872
|
children: [i(g.specifications.carpetArea), " sqft"]
|
|
865
873
|
})]
|
|
866
874
|
}),
|
|
867
|
-
g.specifications.builtUpArea && /* @__PURE__ */
|
|
875
|
+
g.specifications.builtUpArea && /* @__PURE__ */ y("div", {
|
|
868
876
|
className: "flex justify-between",
|
|
869
|
-
children: [/* @__PURE__ */
|
|
877
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
870
878
|
className: "text-text-secondary",
|
|
871
879
|
children: "Built-up Area"
|
|
872
|
-
}), /* @__PURE__ */
|
|
880
|
+
}), /* @__PURE__ */ y("dd", {
|
|
873
881
|
className: "font-medium text-text-primary",
|
|
874
882
|
children: [i(g.specifications.builtUpArea), " sqft"]
|
|
875
883
|
})]
|
|
876
884
|
}),
|
|
877
|
-
g.price.pricePerSqft && /* @__PURE__ */
|
|
885
|
+
g.price.pricePerSqft && /* @__PURE__ */ y("div", {
|
|
878
886
|
className: "flex justify-between",
|
|
879
|
-
children: [/* @__PURE__ */
|
|
887
|
+
children: [/* @__PURE__ */ v("dt", {
|
|
880
888
|
className: "text-text-secondary",
|
|
881
889
|
children: "Price per sqft"
|
|
882
|
-
}), /* @__PURE__ */
|
|
890
|
+
}), /* @__PURE__ */ v("dd", {
|
|
883
891
|
className: "font-medium text-text-primary",
|
|
884
892
|
children: n(g.price.pricePerSqft)
|
|
885
893
|
})]
|
|
@@ -887,84 +895,84 @@ var xt = () => {
|
|
|
887
895
|
]
|
|
888
896
|
})] })]
|
|
889
897
|
}),
|
|
890
|
-
|
|
898
|
+
P === "amenities" && /* @__PURE__ */ v("div", { children: g.amenities.length > 0 ? /* @__PURE__ */ v("div", {
|
|
891
899
|
className: "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4",
|
|
892
|
-
children: g.amenities.map((e) => /* @__PURE__ */
|
|
900
|
+
children: g.amenities.map((e) => /* @__PURE__ */ y("div", {
|
|
893
901
|
className: "flex flex-col items-center gap-2 rounded-lg border border-border-subtle bg-bg-sunken/40 p-4 text-center",
|
|
894
|
-
children: [/* @__PURE__ */
|
|
902
|
+
children: [/* @__PURE__ */ v("span", {
|
|
895
903
|
className: "flex h-10 w-10 items-center justify-center rounded-full bg-status-success-bg-subtle text-status-success-text",
|
|
896
|
-
children: /* @__PURE__ */
|
|
897
|
-
}), /* @__PURE__ */
|
|
904
|
+
children: /* @__PURE__ */ v(bt(e.name), { className: "h-5 w-5" })
|
|
905
|
+
}), /* @__PURE__ */ v("span", {
|
|
898
906
|
className: "text-sm font-medium text-text-primary",
|
|
899
907
|
children: e.name
|
|
900
908
|
})]
|
|
901
909
|
}, e.id))
|
|
902
|
-
}) : /* @__PURE__ */
|
|
910
|
+
}) : /* @__PURE__ */ v(o, {
|
|
903
911
|
illustration: "empty-generic",
|
|
904
912
|
title: "No amenities listed",
|
|
905
913
|
description: "This property has no amenities recorded yet.",
|
|
906
914
|
className: "border-0 bg-transparent p-6"
|
|
907
915
|
}) }),
|
|
908
|
-
|
|
916
|
+
P === "location" && /* @__PURE__ */ y("div", {
|
|
909
917
|
className: "space-y-4",
|
|
910
918
|
children: [
|
|
911
|
-
/* @__PURE__ */
|
|
919
|
+
/* @__PURE__ */ y("div", {
|
|
912
920
|
className: "relative h-56 overflow-hidden rounded-xl border border-border-subtle bg-bg-sunken",
|
|
913
921
|
children: [
|
|
914
|
-
/* @__PURE__ */
|
|
922
|
+
/* @__PURE__ */ v("div", {
|
|
915
923
|
className: "absolute inset-0 opacity-60",
|
|
916
924
|
style: {
|
|
917
925
|
backgroundImage: "linear-gradient(var(--color-border-seam, rgba(120,120,120,.18)) 1px, transparent 1px), linear-gradient(90deg, var(--color-border-seam, rgba(120,120,120,.18)) 1px, transparent 1px)",
|
|
918
926
|
backgroundSize: "32px 32px"
|
|
919
927
|
}
|
|
920
928
|
}),
|
|
921
|
-
/* @__PURE__ */
|
|
929
|
+
/* @__PURE__ */ y("div", {
|
|
922
930
|
className: "absolute left-1/2 top-1/2 flex -translate-x-1/2 -translate-y-1/2 flex-col items-center gap-1 text-center",
|
|
923
931
|
children: [
|
|
924
|
-
/* @__PURE__ */
|
|
932
|
+
/* @__PURE__ */ v("span", {
|
|
925
933
|
className: "flex h-11 w-11 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text shadow-pop",
|
|
926
|
-
children: /* @__PURE__ */
|
|
934
|
+
children: /* @__PURE__ */ v(Ge, { className: "h-5 w-5" })
|
|
927
935
|
}),
|
|
928
|
-
/* @__PURE__ */
|
|
936
|
+
/* @__PURE__ */ v("span", {
|
|
929
937
|
className: "mt-1 rounded-md bg-bg-surface/90 px-2 py-0.5 text-sm font-semibold text-text-primary shadow-elevation-1 backdrop-blur-sm",
|
|
930
938
|
children: g.location.neighborhood || g.location.city
|
|
931
939
|
}),
|
|
932
|
-
/* @__PURE__ */
|
|
940
|
+
/* @__PURE__ */ v("span", {
|
|
933
941
|
className: "text-xs text-text-secondary",
|
|
934
942
|
children: [g.location.city, g.location.state].filter(Boolean).join(", ")
|
|
935
943
|
})
|
|
936
944
|
]
|
|
937
945
|
}),
|
|
938
|
-
g.location.coordinates?.latitude != null && g.location.coordinates?.longitude != null && /* @__PURE__ */
|
|
946
|
+
g.location.coordinates?.latitude != null && g.location.coordinates?.longitude != null && /* @__PURE__ */ y("a", {
|
|
939
947
|
href: `https://www.google.com/maps/search/?api=1&query=${g.location.coordinates.latitude},${g.location.coordinates.longitude}`,
|
|
940
948
|
target: "_blank",
|
|
941
949
|
rel: "noreferrer",
|
|
942
950
|
className: "absolute bottom-3 right-3 inline-flex items-center gap-1.5 rounded-md bg-bg-surface/90 px-2.5 py-1.5 text-xs font-medium text-text-primary shadow-elevation-1 backdrop-blur-sm transition-colors hover:bg-bg-surface",
|
|
943
|
-
children: [/* @__PURE__ */
|
|
951
|
+
children: [/* @__PURE__ */ v(qe, { className: "h-3.5 w-3.5" }), "Open in Maps"]
|
|
944
952
|
})
|
|
945
953
|
]
|
|
946
954
|
}),
|
|
947
|
-
g.location.address && /* @__PURE__ */
|
|
955
|
+
g.location.address && /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
|
|
948
956
|
className: "mb-1 text-xs text-text-secondary",
|
|
949
957
|
children: "Full Address"
|
|
950
|
-
}), /* @__PURE__ */
|
|
958
|
+
}), /* @__PURE__ */ v("div", {
|
|
951
959
|
className: "text-sm font-medium text-text-primary",
|
|
952
960
|
children: g.location.address
|
|
953
961
|
})] }),
|
|
954
|
-
/* @__PURE__ */
|
|
962
|
+
/* @__PURE__ */ y("div", {
|
|
955
963
|
className: "grid grid-cols-1 gap-4 text-sm sm:grid-cols-3",
|
|
956
964
|
children: [
|
|
957
|
-
/* @__PURE__ */
|
|
965
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
|
|
958
966
|
className: "mb-1 text-xs text-text-secondary",
|
|
959
967
|
children: "Neighborhood"
|
|
960
|
-
}), /* @__PURE__ */
|
|
968
|
+
}), /* @__PURE__ */ v("div", {
|
|
961
969
|
className: "font-medium text-text-primary",
|
|
962
970
|
children: g.location.neighborhood || "—"
|
|
963
971
|
})] }),
|
|
964
|
-
/* @__PURE__ */
|
|
972
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
|
|
965
973
|
className: "mb-1 text-xs text-text-secondary",
|
|
966
974
|
children: "City, State"
|
|
967
|
-
}), /* @__PURE__ */
|
|
975
|
+
}), /* @__PURE__ */ y("div", {
|
|
968
976
|
className: "font-medium text-text-primary",
|
|
969
977
|
children: [
|
|
970
978
|
g.location.city,
|
|
@@ -972,23 +980,23 @@ var xt = () => {
|
|
|
972
980
|
g.location.state
|
|
973
981
|
]
|
|
974
982
|
})] }),
|
|
975
|
-
/* @__PURE__ */
|
|
983
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
|
|
976
984
|
className: "mb-1 text-xs text-text-secondary",
|
|
977
985
|
children: "PIN / ZIP"
|
|
978
|
-
}), /* @__PURE__ */
|
|
986
|
+
}), /* @__PURE__ */ v("div", {
|
|
979
987
|
className: "font-medium text-text-primary",
|
|
980
988
|
children: g.location.pincode || "—"
|
|
981
989
|
})] })
|
|
982
990
|
]
|
|
983
991
|
}),
|
|
984
|
-
g.location.landmarks.length > 0 && /* @__PURE__ */
|
|
992
|
+
g.location.landmarks.length > 0 && /* @__PURE__ */ y("div", {
|
|
985
993
|
className: "border-t border-border-subtle pt-4",
|
|
986
|
-
children: [/* @__PURE__ */
|
|
994
|
+
children: [/* @__PURE__ */ v("h4", {
|
|
987
995
|
className: "mb-2 text-xs font-medium text-text-secondary",
|
|
988
996
|
children: "Nearby Landmarks"
|
|
989
|
-
}), /* @__PURE__ */
|
|
997
|
+
}), /* @__PURE__ */ v("div", {
|
|
990
998
|
className: "flex flex-wrap gap-2",
|
|
991
|
-
children: g.location.landmarks.map((e) => /* @__PURE__ */
|
|
999
|
+
children: g.location.landmarks.map((e) => /* @__PURE__ */ v("span", {
|
|
992
1000
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-xs text-text-primary",
|
|
993
1001
|
children: e
|
|
994
1002
|
}, e))
|
|
@@ -999,235 +1007,237 @@ var xt = () => {
|
|
|
999
1007
|
]
|
|
1000
1008
|
})]
|
|
1001
1009
|
})]
|
|
1002
|
-
}), /* @__PURE__ */
|
|
1010
|
+
}), /* @__PURE__ */ y("div", {
|
|
1003
1011
|
className: "space-y-6",
|
|
1004
1012
|
children: [
|
|
1005
|
-
/* @__PURE__ */
|
|
1013
|
+
/* @__PURE__ */ y("div", {
|
|
1006
1014
|
id: "property-actions",
|
|
1007
1015
|
className: "scroll-mt-6 rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-elevation-1 lg:sticky lg:top-6",
|
|
1008
1016
|
children: [
|
|
1009
|
-
/* @__PURE__ */
|
|
1017
|
+
/* @__PURE__ */ y("div", {
|
|
1010
1018
|
className: "flex flex-wrap items-baseline gap-x-2 gap-y-1",
|
|
1011
|
-
children: [/* @__PURE__ */
|
|
1019
|
+
children: [/* @__PURE__ */ v("span", {
|
|
1012
1020
|
className: "text-3xl font-bold text-text-primary",
|
|
1013
|
-
children:
|
|
1014
|
-
}), g.price.negotiable && /* @__PURE__ */
|
|
1021
|
+
children: Bn(g.price)
|
|
1022
|
+
}), g.price.negotiable && /* @__PURE__ */ v("span", {
|
|
1015
1023
|
className: "text-sm text-text-secondary",
|
|
1016
1024
|
children: "· Negotiable"
|
|
1017
1025
|
})]
|
|
1018
1026
|
}),
|
|
1019
|
-
g.price.pricePerSqft && /* @__PURE__ */
|
|
1027
|
+
g.price.pricePerSqft && /* @__PURE__ */ y("p", {
|
|
1020
1028
|
className: "mt-1 text-sm text-text-secondary",
|
|
1021
1029
|
children: [n(g.price.pricePerSqft, g.price.currency), "/sqft"]
|
|
1022
1030
|
}),
|
|
1023
|
-
/* @__PURE__ */
|
|
1031
|
+
/* @__PURE__ */ y("div", {
|
|
1024
1032
|
className: "mt-4 space-y-2",
|
|
1025
1033
|
children: [
|
|
1026
|
-
/* @__PURE__ */ b
|
|
1034
|
+
/* @__PURE__ */ y(b, {
|
|
1027
1035
|
type: "button",
|
|
1028
1036
|
className: "w-full justify-center",
|
|
1029
|
-
onClick: () =>
|
|
1030
|
-
|
|
1037
|
+
onClick: () => {
|
|
1038
|
+
U(_t()), I(!0);
|
|
1039
|
+
},
|
|
1040
|
+
children: [/* @__PURE__ */ v(Be, { className: "mr-2 h-4 w-4" }), "Make Offer"]
|
|
1031
1041
|
}),
|
|
1032
|
-
g.status === "for_rent" && /* @__PURE__ */
|
|
1042
|
+
g.status === "for_rent" && /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ y(b, {
|
|
1033
1043
|
type: "button",
|
|
1034
1044
|
className: "w-full justify-center",
|
|
1035
|
-
onClick: () =>
|
|
1045
|
+
onClick: () => z(!0),
|
|
1036
1046
|
disabled: !J,
|
|
1037
|
-
children: [/* @__PURE__ */
|
|
1038
|
-
}), !J && /* @__PURE__ */
|
|
1047
|
+
children: [/* @__PURE__ */ v(We, { className: "mr-2 h-4 w-4" }), "Apply to Rent"]
|
|
1048
|
+
}), !J && /* @__PURE__ */ v("p", {
|
|
1039
1049
|
className: "px-1 text-xs text-text-secondary",
|
|
1040
1050
|
children: "No rental unit is listed for this property yet — applications open once a unit is added."
|
|
1041
1051
|
})] }),
|
|
1042
|
-
/* @__PURE__ */
|
|
1052
|
+
/* @__PURE__ */ y("div", {
|
|
1043
1053
|
className: "grid grid-cols-2 gap-2",
|
|
1044
|
-
children: [/* @__PURE__ */ b
|
|
1054
|
+
children: [/* @__PURE__ */ y(b, {
|
|
1045
1055
|
type: "button",
|
|
1046
1056
|
variant: "outline",
|
|
1047
1057
|
className: "w-full justify-center",
|
|
1048
|
-
onClick: () =>
|
|
1049
|
-
children: [/* @__PURE__ */
|
|
1050
|
-
}), /* @__PURE__ */ b
|
|
1058
|
+
onClick: () => F(!0),
|
|
1059
|
+
children: [/* @__PURE__ */ v(Fe, { className: "mr-2 h-4 w-4" }), "Viewing"]
|
|
1060
|
+
}), /* @__PURE__ */ y(b, {
|
|
1051
1061
|
type: "button",
|
|
1052
1062
|
variant: "outline",
|
|
1053
1063
|
className: "w-full justify-center",
|
|
1054
|
-
onClick: () =>
|
|
1055
|
-
children: [/* @__PURE__ */
|
|
1064
|
+
onClick: () => Jt(!0),
|
|
1065
|
+
children: [/* @__PURE__ */ v(Ke, { className: "mr-2 h-4 w-4" }), "Contact"]
|
|
1056
1066
|
})]
|
|
1057
1067
|
}),
|
|
1058
|
-
/* @__PURE__ */ b
|
|
1068
|
+
/* @__PURE__ */ y(b, {
|
|
1059
1069
|
type: "button",
|
|
1060
1070
|
variant: "outline",
|
|
1061
1071
|
className: "w-full justify-center",
|
|
1062
|
-
onClick:
|
|
1063
|
-
disabled:
|
|
1064
|
-
children: [/* @__PURE__ */
|
|
1072
|
+
onClick: Wn,
|
|
1073
|
+
disabled: Ct || Tt,
|
|
1074
|
+
children: [/* @__PURE__ */ v(Ue, { className: e("mr-2 h-4 w-4", M && "fill-status-error-text text-status-error-text") }), M ? "Saved to Shortlist" : "Save to Shortlist"]
|
|
1065
1075
|
})
|
|
1066
1076
|
]
|
|
1067
1077
|
}),
|
|
1068
|
-
g.verificationStatus === "verified" && /* @__PURE__ */
|
|
1078
|
+
g.verificationStatus === "verified" && /* @__PURE__ */ y("div", {
|
|
1069
1079
|
className: "mt-4 flex items-center gap-2 border-t border-border-subtle pt-4 text-sm font-medium text-status-success-text",
|
|
1070
|
-
children: [/* @__PURE__ */
|
|
1080
|
+
children: [/* @__PURE__ */ v(Ae, { className: "h-4 w-4" }), "Verified listing"]
|
|
1071
1081
|
})
|
|
1072
1082
|
]
|
|
1073
1083
|
}),
|
|
1074
|
-
/* @__PURE__ */
|
|
1084
|
+
/* @__PURE__ */ y("div", {
|
|
1075
1085
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
1076
1086
|
children: [
|
|
1077
|
-
/* @__PURE__ */
|
|
1087
|
+
/* @__PURE__ */ y("div", {
|
|
1078
1088
|
className: "mb-4 flex items-center gap-2",
|
|
1079
|
-
children: [/* @__PURE__ */
|
|
1089
|
+
children: [/* @__PURE__ */ v(Pe, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ v("h3", {
|
|
1080
1090
|
className: "text-base font-semibold text-text-primary",
|
|
1081
1091
|
children: "Investment Analysis"
|
|
1082
1092
|
})]
|
|
1083
1093
|
}),
|
|
1084
|
-
/* @__PURE__ */
|
|
1094
|
+
/* @__PURE__ */ y("div", {
|
|
1085
1095
|
className: "space-y-3",
|
|
1086
1096
|
children: [
|
|
1087
|
-
/* @__PURE__ */
|
|
1097
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("label", {
|
|
1088
1098
|
className: "mb-1.5 block text-xs font-medium text-text-secondary",
|
|
1089
1099
|
children: [
|
|
1090
1100
|
"Expected monthly rent (",
|
|
1091
1101
|
g.price.currency,
|
|
1092
1102
|
")"
|
|
1093
1103
|
]
|
|
1094
|
-
}), /* @__PURE__ */
|
|
1104
|
+
}), /* @__PURE__ */ v("input", {
|
|
1095
1105
|
type: "number",
|
|
1096
1106
|
min: 0,
|
|
1097
|
-
value:
|
|
1098
|
-
onChange: (e) =>
|
|
1099
|
-
placeholder: String(
|
|
1100
|
-
className:
|
|
1107
|
+
value: on,
|
|
1108
|
+
onChange: (e) => sn(e.target.value),
|
|
1109
|
+
placeholder: String($n),
|
|
1110
|
+
className: A
|
|
1101
1111
|
})] }),
|
|
1102
|
-
/* @__PURE__ */
|
|
1112
|
+
/* @__PURE__ */ y("div", {
|
|
1103
1113
|
className: "grid grid-cols-2 gap-3",
|
|
1104
|
-
children: [/* @__PURE__ */
|
|
1114
|
+
children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("label", {
|
|
1105
1115
|
className: "mb-1.5 block text-xs font-medium text-text-secondary",
|
|
1106
1116
|
children: [
|
|
1107
1117
|
"Monthly costs (",
|
|
1108
1118
|
g.price.currency,
|
|
1109
1119
|
")"
|
|
1110
1120
|
]
|
|
1111
|
-
}), /* @__PURE__ */
|
|
1121
|
+
}), /* @__PURE__ */ v("input", {
|
|
1112
1122
|
type: "number",
|
|
1113
1123
|
min: 0,
|
|
1114
|
-
value:
|
|
1115
|
-
onChange: (e) =>
|
|
1116
|
-
placeholder: String(
|
|
1117
|
-
className:
|
|
1118
|
-
})] }), /* @__PURE__ */
|
|
1124
|
+
value: cn,
|
|
1125
|
+
onChange: (e) => ln(e.target.value),
|
|
1126
|
+
placeholder: String(er),
|
|
1127
|
+
className: A
|
|
1128
|
+
})] }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1119
1129
|
className: "mb-1.5 block text-xs font-medium text-text-secondary",
|
|
1120
1130
|
children: "Appreciation (%/yr)"
|
|
1121
|
-
}), /* @__PURE__ */
|
|
1131
|
+
}), /* @__PURE__ */ v("input", {
|
|
1122
1132
|
type: "number",
|
|
1123
1133
|
min: 0,
|
|
1124
1134
|
step: .5,
|
|
1125
|
-
value:
|
|
1126
|
-
onChange: (e) =>
|
|
1127
|
-
className:
|
|
1135
|
+
value: un,
|
|
1136
|
+
onChange: (e) => dn(e.target.value),
|
|
1137
|
+
className: A
|
|
1128
1138
|
})] })]
|
|
1129
1139
|
}),
|
|
1130
|
-
/* @__PURE__ */
|
|
1140
|
+
/* @__PURE__ */ v("p", {
|
|
1131
1141
|
className: "text-[11px] text-text-secondary",
|
|
1132
1142
|
children: "Costs cover maintenance, tax, insurance, and management."
|
|
1133
1143
|
})
|
|
1134
1144
|
]
|
|
1135
1145
|
}),
|
|
1136
|
-
/* @__PURE__ */
|
|
1146
|
+
/* @__PURE__ */ y("div", {
|
|
1137
1147
|
className: "mt-4 space-y-3 border-t border-border-subtle pt-4",
|
|
1138
1148
|
children: [
|
|
1139
|
-
/* @__PURE__ */
|
|
1149
|
+
/* @__PURE__ */ y("div", {
|
|
1140
1150
|
className: "flex items-center justify-between gap-3",
|
|
1141
|
-
children: [/* @__PURE__ */
|
|
1151
|
+
children: [/* @__PURE__ */ y("label", {
|
|
1142
1152
|
className: "flex items-center gap-2 text-xs font-medium text-text-secondary",
|
|
1143
|
-
children: [/* @__PURE__ */
|
|
1153
|
+
children: [/* @__PURE__ */ v("input", {
|
|
1144
1154
|
type: "checkbox",
|
|
1145
|
-
checked:
|
|
1146
|
-
onChange: (e) =>
|
|
1155
|
+
checked: B,
|
|
1156
|
+
onChange: (e) => fn(e.target.checked),
|
|
1147
1157
|
className: "h-3.5 w-3.5 rounded border-border-subtle"
|
|
1148
1158
|
}), "Include stamp duty & registration"]
|
|
1149
|
-
}),
|
|
1159
|
+
}), B && /* @__PURE__ */ v("input", {
|
|
1150
1160
|
type: "number",
|
|
1151
1161
|
min: 0,
|
|
1152
1162
|
step: .5,
|
|
1153
|
-
value:
|
|
1154
|
-
onChange: (e) =>
|
|
1163
|
+
value: pn,
|
|
1164
|
+
onChange: (e) => mn(e.target.value),
|
|
1155
1165
|
"aria-label": "Stamp duty rate percent",
|
|
1156
1166
|
className: "h-7 w-16 rounded-md border border-border-subtle bg-bg-surface px-2 text-right text-xs text-text-primary"
|
|
1157
1167
|
})]
|
|
1158
1168
|
}),
|
|
1159
|
-
/* @__PURE__ */
|
|
1169
|
+
/* @__PURE__ */ v("div", {
|
|
1160
1170
|
className: "flex items-center justify-between gap-3",
|
|
1161
|
-
children: /* @__PURE__ */
|
|
1171
|
+
children: /* @__PURE__ */ y("label", {
|
|
1162
1172
|
className: "flex items-center gap-2 text-xs font-medium text-text-secondary",
|
|
1163
|
-
children: [/* @__PURE__ */
|
|
1173
|
+
children: [/* @__PURE__ */ v("input", {
|
|
1164
1174
|
type: "checkbox",
|
|
1165
|
-
checked:
|
|
1166
|
-
onChange: (e) =>
|
|
1175
|
+
checked: V,
|
|
1176
|
+
onChange: (e) => hn(e.target.checked),
|
|
1167
1177
|
className: "h-3.5 w-3.5 rounded border-border-subtle"
|
|
1168
1178
|
}), "Include financing (loan)"]
|
|
1169
1179
|
})
|
|
1170
1180
|
}),
|
|
1171
|
-
|
|
1181
|
+
V && /* @__PURE__ */ y("div", {
|
|
1172
1182
|
className: "grid grid-cols-3 gap-2",
|
|
1173
1183
|
children: [
|
|
1174
|
-
/* @__PURE__ */
|
|
1184
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1175
1185
|
className: "mb-1 block text-[10px] text-text-secondary",
|
|
1176
1186
|
children: "Down payment %"
|
|
1177
|
-
}), /* @__PURE__ */
|
|
1187
|
+
}), /* @__PURE__ */ v("input", {
|
|
1178
1188
|
type: "number",
|
|
1179
1189
|
min: 0,
|
|
1180
1190
|
max: 100,
|
|
1181
|
-
value:
|
|
1182
|
-
onChange: (e) =>
|
|
1183
|
-
className:
|
|
1191
|
+
value: gn,
|
|
1192
|
+
onChange: (e) => _n(e.target.value),
|
|
1193
|
+
className: A
|
|
1184
1194
|
})] }),
|
|
1185
|
-
/* @__PURE__ */
|
|
1195
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1186
1196
|
className: "mb-1 block text-[10px] text-text-secondary",
|
|
1187
1197
|
children: "Loan rate %"
|
|
1188
|
-
}), /* @__PURE__ */
|
|
1198
|
+
}), /* @__PURE__ */ v("input", {
|
|
1189
1199
|
type: "number",
|
|
1190
1200
|
min: 0,
|
|
1191
1201
|
step: .1,
|
|
1192
|
-
value:
|
|
1193
|
-
onChange: (e) =>
|
|
1194
|
-
className:
|
|
1202
|
+
value: vn,
|
|
1203
|
+
onChange: (e) => yn(e.target.value),
|
|
1204
|
+
className: A
|
|
1195
1205
|
})] }),
|
|
1196
|
-
/* @__PURE__ */
|
|
1206
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1197
1207
|
className: "mb-1 block text-[10px] text-text-secondary",
|
|
1198
1208
|
children: "Tenure (yrs)"
|
|
1199
|
-
}), /* @__PURE__ */
|
|
1209
|
+
}), /* @__PURE__ */ v("input", {
|
|
1200
1210
|
type: "number",
|
|
1201
1211
|
min: 1,
|
|
1202
|
-
value:
|
|
1203
|
-
onChange: (e) =>
|
|
1204
|
-
className:
|
|
1212
|
+
value: bn,
|
|
1213
|
+
onChange: (e) => xn(e.target.value),
|
|
1214
|
+
className: A
|
|
1205
1215
|
})] })
|
|
1206
1216
|
]
|
|
1207
1217
|
}),
|
|
1208
|
-
(
|
|
1218
|
+
(B || V) && /* @__PURE__ */ y("div", {
|
|
1209
1219
|
className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-[11px] text-text-secondary",
|
|
1210
1220
|
children: [
|
|
1211
|
-
|
|
1221
|
+
B && /* @__PURE__ */ y("span", { children: [
|
|
1212
1222
|
"Stamp duty:",
|
|
1213
1223
|
" ",
|
|
1214
|
-
/* @__PURE__ */
|
|
1224
|
+
/* @__PURE__ */ v("span", {
|
|
1215
1225
|
className: "font-semibold text-text-primary",
|
|
1216
|
-
children: t(
|
|
1226
|
+
children: t(X, g.price.currency)
|
|
1217
1227
|
})
|
|
1218
1228
|
] }),
|
|
1219
|
-
|
|
1229
|
+
V && /* @__PURE__ */ y("span", { children: [
|
|
1220
1230
|
"Monthly EMI:",
|
|
1221
1231
|
" ",
|
|
1222
|
-
/* @__PURE__ */
|
|
1232
|
+
/* @__PURE__ */ v("span", {
|
|
1223
1233
|
className: "font-semibold text-text-primary",
|
|
1224
|
-
children: t(
|
|
1234
|
+
children: t(gr, g.price.currency)
|
|
1225
1235
|
})
|
|
1226
1236
|
] }),
|
|
1227
|
-
/* @__PURE__ */
|
|
1237
|
+
/* @__PURE__ */ y("span", { children: [
|
|
1228
1238
|
"Net cash outlay:",
|
|
1229
1239
|
" ",
|
|
1230
|
-
/* @__PURE__ */
|
|
1240
|
+
/* @__PURE__ */ v("span", {
|
|
1231
1241
|
className: "font-semibold text-text-primary",
|
|
1232
1242
|
children: t($, g.price.currency)
|
|
1233
1243
|
})
|
|
@@ -1236,61 +1246,61 @@ var xt = () => {
|
|
|
1236
1246
|
})
|
|
1237
1247
|
]
|
|
1238
1248
|
}),
|
|
1239
|
-
/* @__PURE__ */
|
|
1249
|
+
/* @__PURE__ */ y("div", {
|
|
1240
1250
|
className: "mt-4 grid grid-cols-3 gap-2 border-t border-border-subtle pt-4",
|
|
1241
1251
|
children: [
|
|
1242
|
-
/* @__PURE__ */
|
|
1252
|
+
/* @__PURE__ */ y("div", {
|
|
1243
1253
|
className: "rounded-lg border border-status-success-border bg-status-success-bg-subtle p-2.5 text-center",
|
|
1244
|
-
children: [/* @__PURE__ */
|
|
1254
|
+
children: [/* @__PURE__ */ v("div", {
|
|
1245
1255
|
className: "text-[11px] font-medium text-status-success-text",
|
|
1246
1256
|
children: "Gross Yield"
|
|
1247
|
-
}), /* @__PURE__ */
|
|
1257
|
+
}), /* @__PURE__ */ y("div", {
|
|
1248
1258
|
className: "mt-0.5 text-lg font-bold text-status-success-text",
|
|
1249
|
-
children: [
|
|
1259
|
+
children: [nr.toFixed(1), "%"]
|
|
1250
1260
|
})]
|
|
1251
1261
|
}),
|
|
1252
|
-
/* @__PURE__ */
|
|
1262
|
+
/* @__PURE__ */ y("div", {
|
|
1253
1263
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/40 p-2.5 text-center",
|
|
1254
|
-
children: [/* @__PURE__ */
|
|
1264
|
+
children: [/* @__PURE__ */ v("div", {
|
|
1255
1265
|
className: "text-[11px] font-medium text-text-secondary",
|
|
1256
1266
|
children: "Net Yield"
|
|
1257
|
-
}), /* @__PURE__ */
|
|
1267
|
+
}), /* @__PURE__ */ y("div", {
|
|
1258
1268
|
className: "mt-0.5 text-lg font-bold text-text-primary",
|
|
1259
|
-
children: [
|
|
1269
|
+
children: [ir.toFixed(1), "%"]
|
|
1260
1270
|
})]
|
|
1261
1271
|
}),
|
|
1262
|
-
/* @__PURE__ */
|
|
1272
|
+
/* @__PURE__ */ y("div", {
|
|
1263
1273
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/40 p-2.5 text-center",
|
|
1264
|
-
children: [/* @__PURE__ */
|
|
1274
|
+
children: [/* @__PURE__ */ v("div", {
|
|
1265
1275
|
className: "text-[11px] font-medium text-text-secondary",
|
|
1266
|
-
children:
|
|
1267
|
-
}), /* @__PURE__ */
|
|
1276
|
+
children: V ? "Cash-on-Cash" : "5-yr ROI"
|
|
1277
|
+
}), /* @__PURE__ */ y("div", {
|
|
1268
1278
|
className: "mt-0.5 text-lg font-bold text-text-primary",
|
|
1269
|
-
children: [
|
|
1279
|
+
children: [V ? yr.toFixed(1) : lr.toFixed(0), "%"]
|
|
1270
1280
|
})]
|
|
1271
1281
|
})
|
|
1272
1282
|
]
|
|
1273
1283
|
}),
|
|
1274
|
-
/* @__PURE__ */
|
|
1284
|
+
/* @__PURE__ */ y("div", {
|
|
1275
1285
|
className: "mt-4",
|
|
1276
1286
|
children: [
|
|
1277
|
-
/* @__PURE__ */
|
|
1287
|
+
/* @__PURE__ */ y("div", {
|
|
1278
1288
|
className: "mb-1 flex items-center justify-between",
|
|
1279
|
-
children: [/* @__PURE__ */
|
|
1289
|
+
children: [/* @__PURE__ */ v("span", {
|
|
1280
1290
|
className: "text-xs font-medium text-text-secondary",
|
|
1281
1291
|
children: "Projected Value Growth"
|
|
1282
|
-
}), /* @__PURE__ */
|
|
1292
|
+
}), /* @__PURE__ */ v("span", {
|
|
1283
1293
|
className: "text-xs font-semibold text-text-primary",
|
|
1284
|
-
children: t(
|
|
1294
|
+
children: t(sr, g.price.currency)
|
|
1285
1295
|
})]
|
|
1286
1296
|
}),
|
|
1287
|
-
/* @__PURE__ */
|
|
1297
|
+
/* @__PURE__ */ v("div", {
|
|
1288
1298
|
className: "h-32",
|
|
1289
|
-
children: /* @__PURE__ */
|
|
1299
|
+
children: /* @__PURE__ */ v(_e, {
|
|
1290
1300
|
width: "100%",
|
|
1291
1301
|
height: "100%",
|
|
1292
|
-
children: /* @__PURE__ */
|
|
1293
|
-
data:
|
|
1302
|
+
children: /* @__PURE__ */ y(xe, {
|
|
1303
|
+
data: or,
|
|
1294
1304
|
margin: {
|
|
1295
1305
|
top: 4,
|
|
1296
1306
|
right: 4,
|
|
@@ -1298,37 +1308,37 @@ var xt = () => {
|
|
|
1298
1308
|
left: 0
|
|
1299
1309
|
},
|
|
1300
1310
|
children: [
|
|
1301
|
-
/* @__PURE__ */
|
|
1311
|
+
/* @__PURE__ */ v("defs", { children: /* @__PURE__ */ y("linearGradient", {
|
|
1302
1312
|
id: "hvValueGrad",
|
|
1303
1313
|
x1: "0",
|
|
1304
1314
|
y1: "0",
|
|
1305
1315
|
x2: "0",
|
|
1306
1316
|
y2: "1",
|
|
1307
|
-
children: [/* @__PURE__ */
|
|
1317
|
+
children: [/* @__PURE__ */ v("stop", {
|
|
1308
1318
|
offset: "5%",
|
|
1309
1319
|
stopColor: "var(--color-chart-2)",
|
|
1310
1320
|
stopOpacity: .35
|
|
1311
|
-
}), /* @__PURE__ */
|
|
1321
|
+
}), /* @__PURE__ */ v("stop", {
|
|
1312
1322
|
offset: "95%",
|
|
1313
1323
|
stopColor: "var(--color-chart-2)",
|
|
1314
1324
|
stopOpacity: 0
|
|
1315
1325
|
})]
|
|
1316
1326
|
}) }),
|
|
1317
|
-
/* @__PURE__ */
|
|
1327
|
+
/* @__PURE__ */ v(ye, {
|
|
1318
1328
|
dataKey: "label",
|
|
1319
1329
|
tick: { fontSize: 10 },
|
|
1320
1330
|
axisLine: !1,
|
|
1321
1331
|
tickLine: !1
|
|
1322
1332
|
}),
|
|
1323
|
-
/* @__PURE__ */
|
|
1333
|
+
/* @__PURE__ */ v(be, {
|
|
1324
1334
|
hide: !0,
|
|
1325
1335
|
domain: ["dataMin", "dataMax"]
|
|
1326
1336
|
}),
|
|
1327
|
-
/* @__PURE__ */
|
|
1337
|
+
/* @__PURE__ */ v(ge, {
|
|
1328
1338
|
formatter: (e) => [t(e, g.price.currency), "Value"],
|
|
1329
1339
|
labelClassName: "text-text-primary"
|
|
1330
1340
|
}),
|
|
1331
|
-
/* @__PURE__ */
|
|
1341
|
+
/* @__PURE__ */ v(ve, {
|
|
1332
1342
|
type: "monotone",
|
|
1333
1343
|
dataKey: "value",
|
|
1334
1344
|
stroke: "var(--color-chart-2)",
|
|
@@ -1339,22 +1349,22 @@ var xt = () => {
|
|
|
1339
1349
|
})
|
|
1340
1350
|
})
|
|
1341
1351
|
}),
|
|
1342
|
-
/* @__PURE__ */
|
|
1352
|
+
/* @__PURE__ */ v("p", {
|
|
1343
1353
|
className: "mt-1 text-[11px] text-text-secondary",
|
|
1344
1354
|
children: "Projection based on your inputs and market appreciation. Consult a financial advisor before investing."
|
|
1345
1355
|
})
|
|
1346
1356
|
]
|
|
1347
1357
|
}),
|
|
1348
|
-
/* @__PURE__ */
|
|
1358
|
+
/* @__PURE__ */ y("div", {
|
|
1349
1359
|
className: "mt-4 flex gap-2",
|
|
1350
|
-
children: [/* @__PURE__ */ b
|
|
1360
|
+
children: [/* @__PURE__ */ y(b, {
|
|
1351
1361
|
type: "button",
|
|
1352
1362
|
variant: "outline",
|
|
1353
1363
|
className: "flex-1 justify-center",
|
|
1354
|
-
onClick:
|
|
1355
|
-
disabled:
|
|
1356
|
-
children: [/* @__PURE__ */
|
|
1357
|
-
}), /* @__PURE__ */
|
|
1364
|
+
onClick: Zn,
|
|
1365
|
+
disabled: It,
|
|
1366
|
+
children: [/* @__PURE__ */ v($e, { className: "mr-2 h-4 w-4" }), It ? "Adding…" : "Track as Investment"]
|
|
1367
|
+
}), /* @__PURE__ */ v(b, {
|
|
1358
1368
|
type: "button",
|
|
1359
1369
|
variant: "ghost",
|
|
1360
1370
|
className: "justify-center",
|
|
@@ -1364,148 +1374,148 @@ var xt = () => {
|
|
|
1364
1374
|
`Generated: ${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}`,
|
|
1365
1375
|
"",
|
|
1366
1376
|
`Listing price,${Y}`,
|
|
1367
|
-
`Expected monthly rent,${
|
|
1368
|
-
`Monthly holding costs,${
|
|
1369
|
-
`Gross rental yield,${
|
|
1370
|
-
`Net rental yield,${
|
|
1371
|
-
`Appreciation rate (input),${(
|
|
1372
|
-
`Projected value (5yr),${
|
|
1373
|
-
`Projected ROI (5yr, unleveraged),${
|
|
1377
|
+
`Expected monthly rent,${$n}`,
|
|
1378
|
+
`Monthly holding costs,${er}`,
|
|
1379
|
+
`Gross rental yield,${nr.toFixed(2)}%`,
|
|
1380
|
+
`Net rental yield,${ir.toFixed(2)}%`,
|
|
1381
|
+
`Appreciation rate (input),${(ar * 100).toFixed(2)}%`,
|
|
1382
|
+
`Projected value (5yr),${sr}`,
|
|
1383
|
+
`Projected ROI (5yr, unleveraged),${lr.toFixed(2)}%`,
|
|
1374
1384
|
"",
|
|
1375
|
-
`Stamp duty & registration included,${
|
|
1376
|
-
`Stamp duty rate,${
|
|
1377
|
-
`Stamp duty & registration cost,${
|
|
1385
|
+
`Stamp duty & registration included,${B ? "Yes" : "No"}`,
|
|
1386
|
+
`Stamp duty rate,${ur}%`,
|
|
1387
|
+
`Stamp duty & registration cost,${X.toFixed(0)}`,
|
|
1378
1388
|
"",
|
|
1379
|
-
`Financing included,${
|
|
1380
|
-
...
|
|
1381
|
-
`Down payment (${
|
|
1382
|
-
`Loan amount,${
|
|
1383
|
-
`Loan rate,${(
|
|
1384
|
-
`Loan tenure (years),${
|
|
1385
|
-
`Monthly EMI,${
|
|
1386
|
-
`Annual debt service,${
|
|
1389
|
+
`Financing included,${V ? "Yes" : "No"}`,
|
|
1390
|
+
...V ? [
|
|
1391
|
+
`Down payment (${dr}%),${mr.toFixed(0)}`,
|
|
1392
|
+
`Loan amount,${Z.toFixed(0)}`,
|
|
1393
|
+
`Loan rate,${(fr * 100).toFixed(2)}%`,
|
|
1394
|
+
`Loan tenure (years),${pr}`,
|
|
1395
|
+
`Monthly EMI,${gr.toFixed(0)}`,
|
|
1396
|
+
`Annual debt service,${_r.toFixed(0)}`
|
|
1387
1397
|
] : [],
|
|
1388
1398
|
`Net cash outlay,${$.toFixed(0)}`,
|
|
1389
|
-
`Cash-on-cash return,${
|
|
1399
|
+
`Cash-on-cash return,${yr.toFixed(2)}%`,
|
|
1390
1400
|
"",
|
|
1391
1401
|
"This is not financial advice. Consult a licensed financial advisor before investing."
|
|
1392
1402
|
], t = new Blob([e.join("\n")], { type: "text/csv;charset=utf-8;" }), n = URL.createObjectURL(t), r = document.createElement("a");
|
|
1393
1403
|
r.href = n, r.download = `${g.id}-investment-analysis.csv`, r.click(), URL.revokeObjectURL(n);
|
|
1394
1404
|
},
|
|
1395
1405
|
"aria-label": "Download investment analysis report",
|
|
1396
|
-
children: /* @__PURE__ */
|
|
1406
|
+
children: /* @__PURE__ */ v(Ve, { className: "h-4 w-4" })
|
|
1397
1407
|
})]
|
|
1398
1408
|
})
|
|
1399
1409
|
]
|
|
1400
1410
|
}),
|
|
1401
|
-
/* @__PURE__ */
|
|
1411
|
+
/* @__PURE__ */ y("div", {
|
|
1402
1412
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
1403
1413
|
children: [
|
|
1404
|
-
/* @__PURE__ */
|
|
1414
|
+
/* @__PURE__ */ v("h3", {
|
|
1405
1415
|
className: "mb-4 text-base font-semibold text-text-primary",
|
|
1406
1416
|
children: "At a Glance"
|
|
1407
1417
|
}),
|
|
1408
|
-
/* @__PURE__ */
|
|
1418
|
+
/* @__PURE__ */ y("div", {
|
|
1409
1419
|
className: "space-y-3 text-sm",
|
|
1410
1420
|
children: [
|
|
1411
|
-
/* @__PURE__ */
|
|
1421
|
+
/* @__PURE__ */ y("div", {
|
|
1412
1422
|
className: "flex items-center justify-between",
|
|
1413
|
-
children: [/* @__PURE__ */
|
|
1423
|
+
children: [/* @__PURE__ */ v("span", {
|
|
1414
1424
|
className: "text-text-secondary",
|
|
1415
1425
|
children: "Status"
|
|
1416
|
-
}), /* @__PURE__ */
|
|
1426
|
+
}), /* @__PURE__ */ v(a, {
|
|
1417
1427
|
label: g.status.replace("_", " "),
|
|
1418
|
-
variant:
|
|
1428
|
+
variant: ut[g.status] ?? "default"
|
|
1419
1429
|
})]
|
|
1420
1430
|
}),
|
|
1421
|
-
/* @__PURE__ */
|
|
1431
|
+
/* @__PURE__ */ y("div", {
|
|
1422
1432
|
className: "flex items-center justify-between",
|
|
1423
|
-
children: [/* @__PURE__ */
|
|
1433
|
+
children: [/* @__PURE__ */ v("span", {
|
|
1424
1434
|
className: "text-text-secondary",
|
|
1425
1435
|
children: "Verification"
|
|
1426
|
-
}), /* @__PURE__ */
|
|
1436
|
+
}), /* @__PURE__ */ v("span", {
|
|
1427
1437
|
className: "font-medium capitalize text-text-primary",
|
|
1428
1438
|
children: g.verificationStatus
|
|
1429
1439
|
})]
|
|
1430
1440
|
}),
|
|
1431
|
-
g.reraVerificationStatus !== "not_applicable" && /* @__PURE__ */
|
|
1441
|
+
g.reraVerificationStatus !== "not_applicable" && /* @__PURE__ */ y("div", {
|
|
1432
1442
|
className: "flex items-center justify-between",
|
|
1433
|
-
children: [/* @__PURE__ */
|
|
1443
|
+
children: [/* @__PURE__ */ v("span", {
|
|
1434
1444
|
className: "text-text-secondary",
|
|
1435
1445
|
children: "RERA status"
|
|
1436
|
-
}), /* @__PURE__ */
|
|
1446
|
+
}), /* @__PURE__ */ y("span", {
|
|
1437
1447
|
className: "flex items-center gap-1.5 font-medium capitalize text-text-primary",
|
|
1438
|
-
children: [g.reraVerificationStatus === "verified" && /* @__PURE__ */
|
|
1448
|
+
children: [g.reraVerificationStatus === "verified" && /* @__PURE__ */ v(Ae, { className: "h-4 w-4 text-status-success-text" }), g.reraVerificationStatus.replace("_", " ")]
|
|
1439
1449
|
})]
|
|
1440
1450
|
}),
|
|
1441
|
-
g.reraRegistrationNo && /* @__PURE__ */
|
|
1451
|
+
g.reraRegistrationNo && /* @__PURE__ */ y("div", {
|
|
1442
1452
|
className: "flex items-center justify-between",
|
|
1443
|
-
children: [/* @__PURE__ */
|
|
1453
|
+
children: [/* @__PURE__ */ v("span", {
|
|
1444
1454
|
className: "text-text-secondary",
|
|
1445
1455
|
children: "RERA reg. no."
|
|
1446
|
-
}), /* @__PURE__ */
|
|
1456
|
+
}), /* @__PURE__ */ v("span", {
|
|
1447
1457
|
className: "font-medium text-text-primary",
|
|
1448
1458
|
children: g.reraRegistrationNo
|
|
1449
1459
|
})]
|
|
1450
1460
|
}),
|
|
1451
|
-
/* @__PURE__ */
|
|
1461
|
+
/* @__PURE__ */ y("div", {
|
|
1452
1462
|
className: "flex items-center justify-between",
|
|
1453
|
-
children: [/* @__PURE__ */
|
|
1463
|
+
children: [/* @__PURE__ */ v("span", {
|
|
1454
1464
|
className: "text-text-secondary",
|
|
1455
1465
|
children: "Listed"
|
|
1456
|
-
}), /* @__PURE__ */
|
|
1466
|
+
}), /* @__PURE__ */ v("span", {
|
|
1457
1467
|
className: "font-medium text-text-primary",
|
|
1458
1468
|
children: r(String(g.createdAt))
|
|
1459
1469
|
})]
|
|
1460
1470
|
})
|
|
1461
1471
|
]
|
|
1462
1472
|
}),
|
|
1463
|
-
g.reraVerificationStatus === "pending" && /* @__PURE__ */
|
|
1473
|
+
g.reraVerificationStatus === "pending" && /* @__PURE__ */ y("div", {
|
|
1464
1474
|
className: "mt-4 flex gap-2 border-t border-border-subtle pt-4",
|
|
1465
|
-
children: [/* @__PURE__ */
|
|
1475
|
+
children: [/* @__PURE__ */ v(b, {
|
|
1466
1476
|
type: "button",
|
|
1467
1477
|
variant: "outline",
|
|
1468
1478
|
className: "flex-1 justify-center",
|
|
1469
|
-
disabled:
|
|
1470
|
-
onClick: () =>
|
|
1479
|
+
disabled: Rt,
|
|
1480
|
+
onClick: () => Qn("verified"),
|
|
1471
1481
|
children: "Verify RERA"
|
|
1472
|
-
}), /* @__PURE__ */
|
|
1482
|
+
}), /* @__PURE__ */ v(b, {
|
|
1473
1483
|
type: "button",
|
|
1474
1484
|
variant: "ghost",
|
|
1475
1485
|
className: "flex-1 justify-center",
|
|
1476
|
-
disabled:
|
|
1477
|
-
onClick: () =>
|
|
1486
|
+
disabled: Rt,
|
|
1487
|
+
onClick: () => Qn("rejected"),
|
|
1478
1488
|
children: "Reject"
|
|
1479
1489
|
})]
|
|
1480
1490
|
})
|
|
1481
1491
|
]
|
|
1482
1492
|
}),
|
|
1483
|
-
|
|
1493
|
+
zt.length > 0 && /* @__PURE__ */ y("div", {
|
|
1484
1494
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
1485
|
-
children: [/* @__PURE__ */
|
|
1495
|
+
children: [/* @__PURE__ */ v("h3", {
|
|
1486
1496
|
className: "mb-4 text-base font-semibold text-text-primary",
|
|
1487
1497
|
children: "Similar Properties"
|
|
1488
|
-
}), /* @__PURE__ */
|
|
1498
|
+
}), /* @__PURE__ */ v("div", {
|
|
1489
1499
|
className: "space-y-3",
|
|
1490
|
-
children:
|
|
1500
|
+
children: zt.map((e) => /* @__PURE__ */ y("button", {
|
|
1491
1501
|
onClick: () => m(`../properties/${e.id}`),
|
|
1492
1502
|
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",
|
|
1493
|
-
children: [e.images[0] && /* @__PURE__ */
|
|
1503
|
+
children: [e.images[0] && /* @__PURE__ */ v("img", {
|
|
1494
1504
|
src: e.images[0].url,
|
|
1495
1505
|
alt: e.title,
|
|
1496
1506
|
className: "h-14 w-14 rounded object-cover"
|
|
1497
|
-
}), /* @__PURE__ */
|
|
1507
|
+
}), /* @__PURE__ */ y("div", {
|
|
1498
1508
|
className: "min-w-0 flex-1",
|
|
1499
1509
|
children: [
|
|
1500
|
-
/* @__PURE__ */
|
|
1510
|
+
/* @__PURE__ */ v("div", {
|
|
1501
1511
|
className: "truncate text-sm font-medium text-text-primary",
|
|
1502
1512
|
children: e.title
|
|
1503
1513
|
}),
|
|
1504
|
-
/* @__PURE__ */
|
|
1514
|
+
/* @__PURE__ */ v("div", {
|
|
1505
1515
|
className: "text-sm font-semibold text-text-primary",
|
|
1506
1516
|
children: n(e.price.amount)
|
|
1507
1517
|
}),
|
|
1508
|
-
/* @__PURE__ */
|
|
1518
|
+
/* @__PURE__ */ v("div", {
|
|
1509
1519
|
className: "truncate text-xs text-text-secondary",
|
|
1510
1520
|
children: [e.location.neighborhood, e.location.city].filter(Boolean).join(", ")
|
|
1511
1521
|
})
|
|
@@ -1517,13 +1527,13 @@ var xt = () => {
|
|
|
1517
1527
|
]
|
|
1518
1528
|
})]
|
|
1519
1529
|
}),
|
|
1520
|
-
/* @__PURE__ */
|
|
1530
|
+
/* @__PURE__ */ v(he, {
|
|
1521
1531
|
entityId: g.id,
|
|
1522
1532
|
entityType: "housingvista-property"
|
|
1523
1533
|
}),
|
|
1524
|
-
/* @__PURE__ */
|
|
1525
|
-
open:
|
|
1526
|
-
onOpenChange:
|
|
1534
|
+
/* @__PURE__ */ v(me, {
|
|
1535
|
+
open: qt,
|
|
1536
|
+
onOpenChange: Jt,
|
|
1527
1537
|
entityId: g.id,
|
|
1528
1538
|
entityType: "housingvista-property",
|
|
1529
1539
|
title: g.title,
|
|
@@ -1531,166 +1541,166 @@ var xt = () => {
|
|
|
1531
1541
|
heading: "Contact owner",
|
|
1532
1542
|
description: `Ask a question or start a conversation about ${g.title}.`
|
|
1533
1543
|
}),
|
|
1534
|
-
/* @__PURE__ */
|
|
1535
|
-
open:
|
|
1536
|
-
onOpenChange:
|
|
1537
|
-
children: /* @__PURE__ */
|
|
1544
|
+
/* @__PURE__ */ v(x, {
|
|
1545
|
+
open: Kt,
|
|
1546
|
+
onOpenChange: z,
|
|
1547
|
+
children: /* @__PURE__ */ v(S, {
|
|
1538
1548
|
className: "sm:max-w-2xl",
|
|
1539
|
-
children: /* @__PURE__ */
|
|
1540
|
-
onSubmit:
|
|
1549
|
+
children: /* @__PURE__ */ y("form", {
|
|
1550
|
+
onSubmit: Xn,
|
|
1541
1551
|
children: [
|
|
1542
|
-
/* @__PURE__ */
|
|
1552
|
+
/* @__PURE__ */ y(T, { children: [/* @__PURE__ */ v(E, { children: "Apply to rent" }), /* @__PURE__ */ y(C, { children: [
|
|
1543
1553
|
"Submit a rental application for ",
|
|
1544
1554
|
g.title,
|
|
1545
1555
|
". The owner will review and respond."
|
|
1546
1556
|
] })] }),
|
|
1547
|
-
/* @__PURE__ */
|
|
1557
|
+
/* @__PURE__ */ y("div", {
|
|
1548
1558
|
className: "grid grid-cols-1 gap-4 py-2 sm:grid-cols-[1fr_16rem]",
|
|
1549
|
-
children: [/* @__PURE__ */
|
|
1559
|
+
children: [/* @__PURE__ */ y("div", {
|
|
1550
1560
|
className: "space-y-3",
|
|
1551
1561
|
children: [
|
|
1552
|
-
/* @__PURE__ */
|
|
1562
|
+
/* @__PURE__ */ y("div", {
|
|
1553
1563
|
className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
|
|
1554
|
-
children: [/* @__PURE__ */
|
|
1564
|
+
children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1555
1565
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1556
1566
|
children: "Full name *"
|
|
1557
|
-
}), /* @__PURE__ */
|
|
1567
|
+
}), /* @__PURE__ */ v("input", {
|
|
1558
1568
|
type: "text",
|
|
1559
1569
|
required: !0,
|
|
1560
|
-
value:
|
|
1561
|
-
onChange: (e) =>
|
|
1562
|
-
className:
|
|
1563
|
-
})] }), /* @__PURE__ */
|
|
1570
|
+
value: Yt,
|
|
1571
|
+
onChange: (e) => Xt(e.target.value),
|
|
1572
|
+
className: A
|
|
1573
|
+
})] }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1564
1574
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1565
1575
|
children: "Email *"
|
|
1566
|
-
}), /* @__PURE__ */
|
|
1576
|
+
}), /* @__PURE__ */ v("input", {
|
|
1567
1577
|
type: "email",
|
|
1568
1578
|
required: !0,
|
|
1569
|
-
value:
|
|
1570
|
-
onChange: (e) =>
|
|
1571
|
-
className:
|
|
1579
|
+
value: Zt,
|
|
1580
|
+
onChange: (e) => Qt(e.target.value),
|
|
1581
|
+
className: A
|
|
1572
1582
|
})] })]
|
|
1573
1583
|
}),
|
|
1574
|
-
/* @__PURE__ */
|
|
1584
|
+
/* @__PURE__ */ y("div", {
|
|
1575
1585
|
className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
|
|
1576
|
-
children: [/* @__PURE__ */
|
|
1586
|
+
children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1577
1587
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1578
1588
|
children: "Phone"
|
|
1579
|
-
}), /* @__PURE__ */
|
|
1589
|
+
}), /* @__PURE__ */ v("input", {
|
|
1580
1590
|
type: "tel",
|
|
1581
|
-
value:
|
|
1582
|
-
onChange: (e) =>
|
|
1583
|
-
className:
|
|
1584
|
-
})] }), /* @__PURE__ */
|
|
1591
|
+
value: $t,
|
|
1592
|
+
onChange: (e) => en(e.target.value),
|
|
1593
|
+
className: A
|
|
1594
|
+
})] }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("label", {
|
|
1585
1595
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1586
1596
|
children: [
|
|
1587
1597
|
"Monthly income (",
|
|
1588
1598
|
g.price.currency,
|
|
1589
1599
|
")"
|
|
1590
1600
|
]
|
|
1591
|
-
}), /* @__PURE__ */
|
|
1601
|
+
}), /* @__PURE__ */ v("input", {
|
|
1592
1602
|
type: "number",
|
|
1593
1603
|
min: 0,
|
|
1594
|
-
value:
|
|
1595
|
-
onChange: (e) =>
|
|
1596
|
-
className:
|
|
1604
|
+
value: tn,
|
|
1605
|
+
onChange: (e) => nn(e.target.value),
|
|
1606
|
+
className: A
|
|
1597
1607
|
})] })]
|
|
1598
1608
|
}),
|
|
1599
|
-
/* @__PURE__ */
|
|
1609
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1600
1610
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1601
1611
|
children: "Preferred move-in date"
|
|
1602
|
-
}), /* @__PURE__ */
|
|
1612
|
+
}), /* @__PURE__ */ v("input", {
|
|
1603
1613
|
type: "date",
|
|
1604
|
-
value:
|
|
1605
|
-
onChange: (e) =>
|
|
1606
|
-
className:
|
|
1614
|
+
value: rn,
|
|
1615
|
+
onChange: (e) => an(e.target.value),
|
|
1616
|
+
className: A
|
|
1607
1617
|
})] })
|
|
1608
1618
|
]
|
|
1609
|
-
}), /* @__PURE__ */
|
|
1619
|
+
}), /* @__PURE__ */ y("aside", {
|
|
1610
1620
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/40 p-3",
|
|
1611
1621
|
children: [
|
|
1612
|
-
/* @__PURE__ */
|
|
1622
|
+
/* @__PURE__ */ v("h3", {
|
|
1613
1623
|
className: "text-sm font-semibold text-text-primary",
|
|
1614
1624
|
children: "Rental summary"
|
|
1615
1625
|
}),
|
|
1616
|
-
/* @__PURE__ */
|
|
1626
|
+
/* @__PURE__ */ y("div", {
|
|
1617
1627
|
className: "mt-3 flex items-start gap-3",
|
|
1618
|
-
children: [g.images[0]?.url && /* @__PURE__ */
|
|
1628
|
+
children: [g.images[0]?.url && /* @__PURE__ */ v("img", {
|
|
1619
1629
|
src: g.images[0].url,
|
|
1620
1630
|
alt: "",
|
|
1621
1631
|
"aria-hidden": !0,
|
|
1622
1632
|
className: "h-14 w-14 shrink-0 rounded-md object-cover"
|
|
1623
|
-
}), /* @__PURE__ */
|
|
1633
|
+
}), /* @__PURE__ */ y("div", {
|
|
1624
1634
|
className: "min-w-0",
|
|
1625
|
-
children: [/* @__PURE__ */
|
|
1635
|
+
children: [/* @__PURE__ */ v("p", {
|
|
1626
1636
|
className: "text-sm font-medium text-text-primary",
|
|
1627
1637
|
children: g.title
|
|
1628
|
-
}), /* @__PURE__ */
|
|
1638
|
+
}), /* @__PURE__ */ v("p", {
|
|
1629
1639
|
className: "truncate text-xs text-text-secondary",
|
|
1630
1640
|
children: [g.location.neighborhood, g.location.city].filter(Boolean).join(", ")
|
|
1631
1641
|
})]
|
|
1632
1642
|
})]
|
|
1633
1643
|
}),
|
|
1634
|
-
q ? /* @__PURE__ */
|
|
1644
|
+
q ? /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ y("dl", {
|
|
1635
1645
|
className: "mt-3 grid grid-cols-2 gap-3 border-t border-border-subtle pt-3",
|
|
1636
1646
|
children: [
|
|
1637
|
-
/* @__PURE__ */
|
|
1647
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
|
|
1638
1648
|
className: "text-xs text-text-secondary",
|
|
1639
1649
|
children: "Rent"
|
|
1640
|
-
}), /* @__PURE__ */
|
|
1650
|
+
}), /* @__PURE__ */ y("dd", {
|
|
1641
1651
|
className: "text-sm font-semibold text-text-primary",
|
|
1642
1652
|
children: [n(q.monthlyRent), "/mo"]
|
|
1643
1653
|
})] }),
|
|
1644
|
-
/* @__PURE__ */
|
|
1654
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
|
|
1645
1655
|
className: "text-xs text-text-secondary",
|
|
1646
1656
|
children: "Deposit"
|
|
1647
|
-
}), /* @__PURE__ */
|
|
1657
|
+
}), /* @__PURE__ */ v("dd", {
|
|
1648
1658
|
className: "text-sm font-semibold text-text-primary",
|
|
1649
1659
|
children: q.securityDeposit ? n(q.securityDeposit) : "—"
|
|
1650
1660
|
})] }),
|
|
1651
|
-
/* @__PURE__ */
|
|
1661
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
|
|
1652
1662
|
className: "text-xs text-text-secondary",
|
|
1653
1663
|
children: "Unit"
|
|
1654
|
-
}), /* @__PURE__ */
|
|
1664
|
+
}), /* @__PURE__ */ v("dd", {
|
|
1655
1665
|
className: "text-sm font-medium text-text-primary",
|
|
1656
1666
|
children: q.unitNumber
|
|
1657
1667
|
})] }),
|
|
1658
|
-
/* @__PURE__ */
|
|
1668
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
|
|
1659
1669
|
className: "text-xs text-text-secondary",
|
|
1660
1670
|
children: "Availability"
|
|
1661
|
-
}), /* @__PURE__ */
|
|
1671
|
+
}), /* @__PURE__ */ v("dd", {
|
|
1662
1672
|
className: "mt-0.5",
|
|
1663
|
-
children: /* @__PURE__ */
|
|
1664
|
-
label:
|
|
1665
|
-
variant:
|
|
1673
|
+
children: /* @__PURE__ */ v(a, {
|
|
1674
|
+
label: xt(q.status),
|
|
1675
|
+
variant: St(q.status)
|
|
1666
1676
|
})
|
|
1667
1677
|
})] })
|
|
1668
1678
|
]
|
|
1669
|
-
}), (q.status === "occupied" || q.status === "notice_period") && q.leaseEnd && /* @__PURE__ */
|
|
1679
|
+
}), (q.status === "occupied" || q.status === "notice_period") && q.leaseEnd && /* @__PURE__ */ y("p", {
|
|
1670
1680
|
className: "mt-2 text-xs text-text-secondary",
|
|
1671
1681
|
children: ["Current lease ends ", r(q.leaseEnd)]
|
|
1672
|
-
})] }) : /* @__PURE__ */
|
|
1682
|
+
})] }) : /* @__PURE__ */ v("p", {
|
|
1673
1683
|
className: "mt-3 border-t border-border-subtle pt-3 text-xs text-text-secondary",
|
|
1674
1684
|
children: "No rental unit is listed for this property yet, so rent and deposit are not available."
|
|
1675
1685
|
}),
|
|
1676
|
-
g.amenities.length > 0 && /* @__PURE__ */
|
|
1686
|
+
g.amenities.length > 0 && /* @__PURE__ */ y("div", {
|
|
1677
1687
|
className: "mt-3 border-t border-border-subtle pt-3",
|
|
1678
1688
|
children: [
|
|
1679
|
-
/* @__PURE__ */
|
|
1689
|
+
/* @__PURE__ */ v("p", {
|
|
1680
1690
|
className: "text-xs text-text-secondary",
|
|
1681
1691
|
children: "Amenities"
|
|
1682
1692
|
}),
|
|
1683
|
-
/* @__PURE__ */
|
|
1693
|
+
/* @__PURE__ */ v("ul", {
|
|
1684
1694
|
className: "mt-1.5 space-y-1.5",
|
|
1685
|
-
children: g.amenities.slice(0, 5).map((e) => /* @__PURE__ */
|
|
1695
|
+
children: g.amenities.slice(0, 5).map((e) => /* @__PURE__ */ y("li", {
|
|
1686
1696
|
className: "flex items-center gap-2 text-sm text-text-primary",
|
|
1687
|
-
children: [/* @__PURE__ */
|
|
1697
|
+
children: [/* @__PURE__ */ v(bt(e.name), { className: "h-4 w-4 shrink-0 text-text-secondary" }), /* @__PURE__ */ v("span", {
|
|
1688
1698
|
className: "truncate",
|
|
1689
1699
|
children: e.name
|
|
1690
1700
|
})]
|
|
1691
1701
|
}, e.id))
|
|
1692
1702
|
}),
|
|
1693
|
-
g.amenities.length > 5 && /* @__PURE__ */
|
|
1703
|
+
g.amenities.length > 5 && /* @__PURE__ */ y("p", {
|
|
1694
1704
|
className: "mt-1.5 text-xs text-text-secondary",
|
|
1695
1705
|
children: [
|
|
1696
1706
|
"+",
|
|
@@ -1703,225 +1713,246 @@ var xt = () => {
|
|
|
1703
1713
|
]
|
|
1704
1714
|
})]
|
|
1705
1715
|
}),
|
|
1706
|
-
/* @__PURE__ */
|
|
1716
|
+
/* @__PURE__ */ y(w, { children: [/* @__PURE__ */ v(b, {
|
|
1707
1717
|
type: "button",
|
|
1708
1718
|
variant: "outline",
|
|
1709
|
-
onClick: () =>
|
|
1719
|
+
onClick: () => z(!1),
|
|
1710
1720
|
children: "Cancel"
|
|
1711
|
-
}), /* @__PURE__ */
|
|
1721
|
+
}), /* @__PURE__ */ v(b, {
|
|
1712
1722
|
type: "submit",
|
|
1713
|
-
disabled:
|
|
1714
|
-
children:
|
|
1723
|
+
disabled: Pt || !J,
|
|
1724
|
+
children: Pt ? "Submitting…" : "Submit application"
|
|
1715
1725
|
})] })
|
|
1716
1726
|
]
|
|
1717
1727
|
})
|
|
1718
1728
|
})
|
|
1719
1729
|
}),
|
|
1720
|
-
/* @__PURE__ */
|
|
1721
|
-
open:
|
|
1722
|
-
onOpenChange:
|
|
1723
|
-
children: /* @__PURE__ */
|
|
1730
|
+
/* @__PURE__ */ v(x, {
|
|
1731
|
+
open: Ht,
|
|
1732
|
+
onOpenChange: F,
|
|
1733
|
+
children: /* @__PURE__ */ v(S, {
|
|
1724
1734
|
className: "sm:max-w-md",
|
|
1725
|
-
children: /* @__PURE__ */
|
|
1726
|
-
onSubmit:
|
|
1735
|
+
children: /* @__PURE__ */ y("form", {
|
|
1736
|
+
onSubmit: Gn,
|
|
1727
1737
|
children: [
|
|
1728
|
-
/* @__PURE__ */
|
|
1738
|
+
/* @__PURE__ */ y(T, { children: [/* @__PURE__ */ v(E, { children: "Schedule a viewing" }), /* @__PURE__ */ y(C, { children: [
|
|
1729
1739
|
"Pick a date and time to see ",
|
|
1730
1740
|
g.title,
|
|
1731
1741
|
"."
|
|
1732
1742
|
] })] }),
|
|
1733
|
-
/* @__PURE__ */
|
|
1743
|
+
/* @__PURE__ */ y("div", {
|
|
1734
1744
|
className: "space-y-3 py-2",
|
|
1735
1745
|
children: [
|
|
1736
|
-
/* @__PURE__ */
|
|
1746
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1737
1747
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1738
1748
|
children: "Date & time *"
|
|
1739
|
-
}), /* @__PURE__ */
|
|
1749
|
+
}), /* @__PURE__ */ v("input", {
|
|
1740
1750
|
type: "datetime-local",
|
|
1741
1751
|
required: !0,
|
|
1742
|
-
value:
|
|
1743
|
-
onChange: (e) =>
|
|
1744
|
-
className:
|
|
1752
|
+
value: H,
|
|
1753
|
+
onChange: (e) => Sn(e.target.value),
|
|
1754
|
+
className: A
|
|
1745
1755
|
})] }),
|
|
1746
|
-
/* @__PURE__ */
|
|
1756
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1747
1757
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1748
1758
|
children: "Type"
|
|
1749
|
-
}), /* @__PURE__ */
|
|
1750
|
-
value:
|
|
1751
|
-
onChange: (e) =>
|
|
1752
|
-
className:
|
|
1753
|
-
children: [/* @__PURE__ */
|
|
1759
|
+
}), /* @__PURE__ */ y("select", {
|
|
1760
|
+
value: Cn,
|
|
1761
|
+
onChange: (e) => wn(e.target.value),
|
|
1762
|
+
className: A,
|
|
1763
|
+
children: [/* @__PURE__ */ v("option", {
|
|
1754
1764
|
value: "in_person",
|
|
1755
1765
|
children: "In person"
|
|
1756
|
-
}), /* @__PURE__ */
|
|
1766
|
+
}), /* @__PURE__ */ v("option", {
|
|
1757
1767
|
value: "virtual",
|
|
1758
1768
|
children: "Virtual"
|
|
1759
1769
|
})]
|
|
1760
1770
|
})] }),
|
|
1761
|
-
/* @__PURE__ */
|
|
1771
|
+
/* @__PURE__ */ y("div", {
|
|
1762
1772
|
className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
|
|
1763
|
-
children: [/* @__PURE__ */
|
|
1773
|
+
children: [/* @__PURE__ */ v("input", {
|
|
1764
1774
|
type: "text",
|
|
1765
1775
|
placeholder: "Your name",
|
|
1766
|
-
value: Cn,
|
|
1767
|
-
onChange: (e) => wn(e.target.value),
|
|
1768
|
-
className: j
|
|
1769
|
-
}), /* @__PURE__ */ y("input", {
|
|
1770
|
-
type: "email",
|
|
1771
|
-
placeholder: "Your email",
|
|
1772
1776
|
value: Tn,
|
|
1773
1777
|
onChange: (e) => En(e.target.value),
|
|
1774
|
-
className:
|
|
1778
|
+
className: A
|
|
1779
|
+
}), /* @__PURE__ */ v("input", {
|
|
1780
|
+
type: "email",
|
|
1781
|
+
placeholder: "Your email",
|
|
1782
|
+
value: Dn,
|
|
1783
|
+
onChange: (e) => On(e.target.value),
|
|
1784
|
+
className: A
|
|
1775
1785
|
})]
|
|
1776
1786
|
}),
|
|
1777
|
-
/* @__PURE__ */
|
|
1787
|
+
/* @__PURE__ */ v("textarea", {
|
|
1778
1788
|
placeholder: "Notes (optional)",
|
|
1779
1789
|
rows: 2,
|
|
1780
|
-
value:
|
|
1781
|
-
onChange: (e) =>
|
|
1790
|
+
value: kn,
|
|
1791
|
+
onChange: (e) => An(e.target.value),
|
|
1782
1792
|
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)]"
|
|
1783
1793
|
})
|
|
1784
1794
|
]
|
|
1785
1795
|
}),
|
|
1786
|
-
/* @__PURE__ */
|
|
1796
|
+
/* @__PURE__ */ y(w, { children: [/* @__PURE__ */ v(b, {
|
|
1787
1797
|
type: "button",
|
|
1788
1798
|
variant: "outline",
|
|
1789
|
-
onClick: () =>
|
|
1799
|
+
onClick: () => F(!1),
|
|
1790
1800
|
children: "Cancel"
|
|
1791
|
-
}), /* @__PURE__ */
|
|
1801
|
+
}), /* @__PURE__ */ v(b, {
|
|
1792
1802
|
type: "submit",
|
|
1793
|
-
disabled:
|
|
1794
|
-
children:
|
|
1803
|
+
disabled: Dt || !H,
|
|
1804
|
+
children: Dt ? "Booking…" : "Request viewing"
|
|
1795
1805
|
})] })
|
|
1796
1806
|
]
|
|
1797
1807
|
})
|
|
1798
1808
|
})
|
|
1799
1809
|
}),
|
|
1800
|
-
/* @__PURE__ */
|
|
1801
|
-
open:
|
|
1802
|
-
onOpenChange:
|
|
1803
|
-
children: /* @__PURE__ */
|
|
1810
|
+
/* @__PURE__ */ v(x, {
|
|
1811
|
+
open: Ut,
|
|
1812
|
+
onOpenChange: I,
|
|
1813
|
+
children: /* @__PURE__ */ v(S, {
|
|
1804
1814
|
className: "sm:max-w-md",
|
|
1805
|
-
children: /* @__PURE__ */
|
|
1806
|
-
onSubmit:
|
|
1815
|
+
children: /* @__PURE__ */ y("form", {
|
|
1816
|
+
onSubmit: Kn,
|
|
1807
1817
|
children: [
|
|
1808
|
-
/* @__PURE__ */
|
|
1818
|
+
/* @__PURE__ */ y(T, { children: [/* @__PURE__ */ v(E, { children: "Make an offer" }), /* @__PURE__ */ y(C, { children: [
|
|
1809
1819
|
"Listing price is ",
|
|
1810
|
-
|
|
1820
|
+
Bn(g.price),
|
|
1811
1821
|
"."
|
|
1812
1822
|
] })] }),
|
|
1813
|
-
/* @__PURE__ */
|
|
1823
|
+
/* @__PURE__ */ y("div", {
|
|
1814
1824
|
className: "space-y-3 py-2",
|
|
1815
|
-
children: [
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1825
|
+
children: [
|
|
1826
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("label", {
|
|
1827
|
+
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1828
|
+
children: [
|
|
1829
|
+
"Your offer (",
|
|
1830
|
+
g.price.currency,
|
|
1831
|
+
") *"
|
|
1832
|
+
]
|
|
1833
|
+
}), /* @__PURE__ */ v("input", {
|
|
1834
|
+
type: "number",
|
|
1835
|
+
required: !0,
|
|
1836
|
+
min: 1,
|
|
1837
|
+
value: jn,
|
|
1838
|
+
onChange: (e) => Mn(e.target.value),
|
|
1839
|
+
placeholder: "Enter amount",
|
|
1840
|
+
className: A
|
|
1841
|
+
})] }),
|
|
1842
|
+
/* @__PURE__ */ v("textarea", {
|
|
1843
|
+
placeholder: "Message to the owner (optional)",
|
|
1844
|
+
rows: 3,
|
|
1845
|
+
value: Nn,
|
|
1846
|
+
onChange: (e) => Pn(e.target.value),
|
|
1847
|
+
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
|
+
}),
|
|
1849
|
+
/* @__PURE__ */ y("div", { children: [
|
|
1850
|
+
/* @__PURE__ */ v("label", {
|
|
1851
|
+
htmlFor: "offer-expires",
|
|
1852
|
+
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1853
|
+
children: "Valid until (optional)"
|
|
1854
|
+
}),
|
|
1855
|
+
/* @__PURE__ */ v("input", {
|
|
1856
|
+
id: "offer-expires",
|
|
1857
|
+
type: "datetime-local",
|
|
1858
|
+
value: Fn,
|
|
1859
|
+
onChange: (e) => U(e.target.value),
|
|
1860
|
+
className: A
|
|
1861
|
+
}),
|
|
1862
|
+
/* @__PURE__ */ v("p", {
|
|
1863
|
+
className: "mt-1 text-xs text-text-secondary",
|
|
1864
|
+
children: "The offer becomes non-actionable after this time. Clear the field for no expiry."
|
|
1865
|
+
})
|
|
1866
|
+
] })
|
|
1867
|
+
]
|
|
1837
1868
|
}),
|
|
1838
|
-
/* @__PURE__ */
|
|
1869
|
+
/* @__PURE__ */ y(w, { children: [/* @__PURE__ */ v(b, {
|
|
1839
1870
|
type: "button",
|
|
1840
1871
|
variant: "outline",
|
|
1841
|
-
onClick: () =>
|
|
1872
|
+
onClick: () => I(!1),
|
|
1842
1873
|
children: "Cancel"
|
|
1843
|
-
}), /* @__PURE__ */
|
|
1874
|
+
}), /* @__PURE__ */ v(b, {
|
|
1844
1875
|
type: "submit",
|
|
1845
|
-
disabled:
|
|
1846
|
-
children:
|
|
1876
|
+
disabled: kt,
|
|
1877
|
+
children: kt ? "Submitting…" : "Submit offer"
|
|
1847
1878
|
})] })
|
|
1848
1879
|
]
|
|
1849
1880
|
})
|
|
1850
1881
|
})
|
|
1851
1882
|
}),
|
|
1852
|
-
/* @__PURE__ */
|
|
1853
|
-
open:
|
|
1854
|
-
onOpenChange: (e) => !e && !
|
|
1855
|
-
children: /* @__PURE__ */
|
|
1883
|
+
/* @__PURE__ */ v(x, {
|
|
1884
|
+
open: Wt,
|
|
1885
|
+
onOpenChange: (e) => !e && !j && L(!1),
|
|
1886
|
+
children: /* @__PURE__ */ v(S, {
|
|
1856
1887
|
className: "sm:max-w-2xl",
|
|
1857
|
-
children: /* @__PURE__ */
|
|
1858
|
-
onSubmit:
|
|
1888
|
+
children: /* @__PURE__ */ y("form", {
|
|
1889
|
+
onSubmit: Jn,
|
|
1859
1890
|
children: [
|
|
1860
|
-
/* @__PURE__ */
|
|
1861
|
-
/* @__PURE__ */
|
|
1891
|
+
/* @__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
|
+
/* @__PURE__ */ y("div", {
|
|
1862
1893
|
className: "max-h-[65vh] space-y-6 overflow-y-auto py-2 pr-1",
|
|
1863
1894
|
children: [
|
|
1864
|
-
/* @__PURE__ */
|
|
1895
|
+
/* @__PURE__ */ y("section", {
|
|
1865
1896
|
className: "space-y-3",
|
|
1866
1897
|
children: [
|
|
1867
|
-
/* @__PURE__ */
|
|
1898
|
+
/* @__PURE__ */ v("h3", {
|
|
1868
1899
|
className: "text-sm font-semibold text-text-primary",
|
|
1869
1900
|
children: "Basics"
|
|
1870
1901
|
}),
|
|
1871
|
-
/* @__PURE__ */
|
|
1902
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1872
1903
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1873
1904
|
children: "Title *"
|
|
1874
|
-
}), /* @__PURE__ */
|
|
1905
|
+
}), /* @__PURE__ */ v("input", {
|
|
1875
1906
|
type: "text",
|
|
1876
1907
|
required: !0,
|
|
1877
1908
|
value: W.title,
|
|
1878
1909
|
onChange: (e) => G({ title: e.target.value }),
|
|
1879
|
-
className:
|
|
1910
|
+
className: A
|
|
1880
1911
|
})] }),
|
|
1881
|
-
/* @__PURE__ */
|
|
1912
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1882
1913
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1883
1914
|
children: "Description"
|
|
1884
|
-
}), /* @__PURE__ */
|
|
1915
|
+
}), /* @__PURE__ */ v("textarea", {
|
|
1885
1916
|
rows: 3,
|
|
1886
1917
|
value: W.description,
|
|
1887
1918
|
onChange: (e) => G({ description: e.target.value }),
|
|
1888
1919
|
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)]"
|
|
1889
1920
|
})] }),
|
|
1890
|
-
/* @__PURE__ */
|
|
1921
|
+
/* @__PURE__ */ y("div", {
|
|
1891
1922
|
className: "grid grid-cols-1 gap-3 sm:grid-cols-3",
|
|
1892
1923
|
children: [
|
|
1893
|
-
/* @__PURE__ */
|
|
1924
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1894
1925
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1895
1926
|
children: "Status"
|
|
1896
|
-
}), /* @__PURE__ */
|
|
1927
|
+
}), /* @__PURE__ */ v("select", {
|
|
1897
1928
|
value: W.status,
|
|
1898
1929
|
onChange: (e) => G({ status: e.target.value }),
|
|
1899
|
-
className:
|
|
1900
|
-
children:
|
|
1930
|
+
className: A,
|
|
1931
|
+
children: dt.map((e) => /* @__PURE__ */ v("option", {
|
|
1901
1932
|
value: e.value,
|
|
1902
1933
|
children: e.label
|
|
1903
1934
|
}, e.value))
|
|
1904
1935
|
})] }),
|
|
1905
|
-
/* @__PURE__ */
|
|
1936
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1906
1937
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1907
1938
|
children: "Type"
|
|
1908
|
-
}), /* @__PURE__ */
|
|
1939
|
+
}), /* @__PURE__ */ v("select", {
|
|
1909
1940
|
value: W.type,
|
|
1910
1941
|
onChange: (e) => G({ type: e.target.value }),
|
|
1911
|
-
className:
|
|
1912
|
-
children: De.map((e) => /* @__PURE__ */
|
|
1942
|
+
className: A,
|
|
1943
|
+
children: De.map((e) => /* @__PURE__ */ v("option", {
|
|
1913
1944
|
value: e.value,
|
|
1914
1945
|
children: e.label
|
|
1915
1946
|
}, e.value))
|
|
1916
1947
|
})] }),
|
|
1917
|
-
/* @__PURE__ */
|
|
1948
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1918
1949
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1919
1950
|
children: "Category"
|
|
1920
|
-
}), /* @__PURE__ */
|
|
1951
|
+
}), /* @__PURE__ */ v("select", {
|
|
1921
1952
|
value: W.category,
|
|
1922
1953
|
onChange: (e) => G({ category: e.target.value }),
|
|
1923
|
-
className:
|
|
1924
|
-
children: Ee.map((e) => /* @__PURE__ */
|
|
1954
|
+
className: A,
|
|
1955
|
+
children: Ee.map((e) => /* @__PURE__ */ v("option", {
|
|
1925
1956
|
value: e.value,
|
|
1926
1957
|
children: e.label
|
|
1927
1958
|
}, e.value))
|
|
@@ -1930,139 +1961,139 @@ var xt = () => {
|
|
|
1930
1961
|
})
|
|
1931
1962
|
]
|
|
1932
1963
|
}),
|
|
1933
|
-
/* @__PURE__ */
|
|
1964
|
+
/* @__PURE__ */ y("section", {
|
|
1934
1965
|
className: "space-y-3",
|
|
1935
1966
|
children: [
|
|
1936
|
-
/* @__PURE__ */
|
|
1967
|
+
/* @__PURE__ */ v("h3", {
|
|
1937
1968
|
className: "text-sm font-semibold text-text-primary",
|
|
1938
1969
|
children: "Location"
|
|
1939
1970
|
}),
|
|
1940
|
-
/* @__PURE__ */
|
|
1971
|
+
/* @__PURE__ */ y("div", {
|
|
1941
1972
|
className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
|
|
1942
1973
|
children: [
|
|
1943
|
-
/* @__PURE__ */
|
|
1974
|
+
/* @__PURE__ */ y("div", {
|
|
1944
1975
|
className: "sm:col-span-2",
|
|
1945
|
-
children: [/* @__PURE__ */
|
|
1976
|
+
children: [/* @__PURE__ */ v("label", {
|
|
1946
1977
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1947
1978
|
children: "Address"
|
|
1948
|
-
}), /* @__PURE__ */
|
|
1979
|
+
}), /* @__PURE__ */ v("input", {
|
|
1949
1980
|
type: "text",
|
|
1950
1981
|
value: W.address,
|
|
1951
1982
|
onChange: (e) => G({ address: e.target.value }),
|
|
1952
|
-
className:
|
|
1983
|
+
className: A
|
|
1953
1984
|
})]
|
|
1954
1985
|
}),
|
|
1955
|
-
/* @__PURE__ */
|
|
1986
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1956
1987
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1957
1988
|
children: "City *"
|
|
1958
|
-
}), /* @__PURE__ */
|
|
1989
|
+
}), /* @__PURE__ */ v("input", {
|
|
1959
1990
|
type: "text",
|
|
1960
1991
|
required: !0,
|
|
1961
1992
|
value: W.city,
|
|
1962
1993
|
onChange: (e) => G({ city: e.target.value }),
|
|
1963
|
-
className:
|
|
1994
|
+
className: A
|
|
1964
1995
|
})] }),
|
|
1965
|
-
/* @__PURE__ */
|
|
1996
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1966
1997
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1967
1998
|
children: "State *"
|
|
1968
|
-
}), /* @__PURE__ */
|
|
1999
|
+
}), /* @__PURE__ */ v("input", {
|
|
1969
2000
|
type: "text",
|
|
1970
2001
|
required: !0,
|
|
1971
2002
|
value: W.state,
|
|
1972
2003
|
onChange: (e) => G({ state: e.target.value }),
|
|
1973
|
-
className:
|
|
2004
|
+
className: A
|
|
1974
2005
|
})] }),
|
|
1975
|
-
/* @__PURE__ */
|
|
2006
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1976
2007
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1977
2008
|
children: "Country"
|
|
1978
|
-
}), /* @__PURE__ */
|
|
2009
|
+
}), /* @__PURE__ */ v("input", {
|
|
1979
2010
|
type: "text",
|
|
1980
2011
|
value: W.country,
|
|
1981
2012
|
onChange: (e) => G({ country: e.target.value }),
|
|
1982
|
-
className:
|
|
2013
|
+
className: A
|
|
1983
2014
|
})] }),
|
|
1984
|
-
/* @__PURE__ */
|
|
2015
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1985
2016
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1986
2017
|
children: "Pincode"
|
|
1987
|
-
}), /* @__PURE__ */
|
|
2018
|
+
}), /* @__PURE__ */ v("input", {
|
|
1988
2019
|
type: "text",
|
|
1989
2020
|
value: W.pincode,
|
|
1990
2021
|
onChange: (e) => G({ pincode: e.target.value }),
|
|
1991
|
-
className:
|
|
2022
|
+
className: A
|
|
1992
2023
|
})] }),
|
|
1993
|
-
/* @__PURE__ */
|
|
2024
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
1994
2025
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
1995
2026
|
children: "Neighborhood"
|
|
1996
|
-
}), /* @__PURE__ */
|
|
2027
|
+
}), /* @__PURE__ */ v("input", {
|
|
1997
2028
|
type: "text",
|
|
1998
2029
|
value: W.neighborhood,
|
|
1999
2030
|
onChange: (e) => G({ neighborhood: e.target.value }),
|
|
2000
|
-
className:
|
|
2031
|
+
className: A
|
|
2001
2032
|
})] }),
|
|
2002
|
-
/* @__PURE__ */
|
|
2033
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2003
2034
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2004
2035
|
children: "Landmarks"
|
|
2005
|
-
}), /* @__PURE__ */
|
|
2036
|
+
}), /* @__PURE__ */ v("input", {
|
|
2006
2037
|
type: "text",
|
|
2007
2038
|
value: W.landmarks,
|
|
2008
2039
|
onChange: (e) => G({ landmarks: e.target.value }),
|
|
2009
2040
|
placeholder: "Comma-separated",
|
|
2010
|
-
className:
|
|
2041
|
+
className: A
|
|
2011
2042
|
})] })
|
|
2012
2043
|
]
|
|
2013
2044
|
}),
|
|
2014
|
-
/* @__PURE__ */
|
|
2045
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("span", {
|
|
2015
2046
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2016
2047
|
children: "Map location"
|
|
2017
|
-
}), /* @__PURE__ */
|
|
2048
|
+
}), /* @__PURE__ */ v(Se, {
|
|
2018
2049
|
value: W.coordinates,
|
|
2019
2050
|
onChange: (e) => G({ coordinates: e })
|
|
2020
2051
|
})] })
|
|
2021
2052
|
]
|
|
2022
2053
|
}),
|
|
2023
|
-
/* @__PURE__ */
|
|
2054
|
+
/* @__PURE__ */ y("section", {
|
|
2024
2055
|
className: "space-y-3",
|
|
2025
|
-
children: [/* @__PURE__ */
|
|
2056
|
+
children: [/* @__PURE__ */ v("h3", {
|
|
2026
2057
|
className: "text-sm font-semibold text-text-primary",
|
|
2027
2058
|
children: "Specifications"
|
|
2028
|
-
}), /* @__PURE__ */
|
|
2059
|
+
}), /* @__PURE__ */ y("div", {
|
|
2029
2060
|
className: "grid grid-cols-2 gap-3 sm:grid-cols-4",
|
|
2030
2061
|
children: [
|
|
2031
|
-
|
|
2062
|
+
gt.map((e) => /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2032
2063
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2033
2064
|
children: e.label
|
|
2034
|
-
}), /* @__PURE__ */
|
|
2065
|
+
}), /* @__PURE__ */ v("input", {
|
|
2035
2066
|
type: "number",
|
|
2036
2067
|
min: 0,
|
|
2037
2068
|
step: e.step,
|
|
2038
2069
|
required: e.required,
|
|
2039
2070
|
value: W[e.key],
|
|
2040
2071
|
onChange: (t) => G({ [e.key]: t.target.value }),
|
|
2041
|
-
className:
|
|
2072
|
+
className: A
|
|
2042
2073
|
})] }, e.key)),
|
|
2043
|
-
/* @__PURE__ */
|
|
2074
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2044
2075
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2045
2076
|
children: "Furnishing"
|
|
2046
|
-
}), /* @__PURE__ */
|
|
2077
|
+
}), /* @__PURE__ */ v("select", {
|
|
2047
2078
|
value: W.furnishingStatus,
|
|
2048
2079
|
onChange: (e) => G({ furnishingStatus: e.target.value }),
|
|
2049
|
-
className:
|
|
2050
|
-
children: Te.map((e) => /* @__PURE__ */
|
|
2080
|
+
className: A,
|
|
2081
|
+
children: Te.map((e) => /* @__PURE__ */ v("option", {
|
|
2051
2082
|
value: e.value,
|
|
2052
2083
|
children: e.label
|
|
2053
2084
|
}, e.value))
|
|
2054
2085
|
})] }),
|
|
2055
|
-
/* @__PURE__ */
|
|
2086
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2056
2087
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2057
2088
|
children: "Facing"
|
|
2058
|
-
}), /* @__PURE__ */
|
|
2089
|
+
}), /* @__PURE__ */ y("select", {
|
|
2059
2090
|
value: W.facing,
|
|
2060
2091
|
onChange: (e) => G({ facing: e.target.value }),
|
|
2061
|
-
className:
|
|
2062
|
-
children: [/* @__PURE__ */
|
|
2092
|
+
className: A,
|
|
2093
|
+
children: [/* @__PURE__ */ v("option", {
|
|
2063
2094
|
value: "",
|
|
2064
2095
|
children: "— (unset)"
|
|
2065
|
-
}), we.map((e) => /* @__PURE__ */
|
|
2096
|
+
}), we.map((e) => /* @__PURE__ */ v("option", {
|
|
2066
2097
|
value: e,
|
|
2067
2098
|
children: e
|
|
2068
2099
|
}, e))]
|
|
@@ -2070,75 +2101,75 @@ var xt = () => {
|
|
|
2070
2101
|
]
|
|
2071
2102
|
})]
|
|
2072
2103
|
}),
|
|
2073
|
-
/* @__PURE__ */
|
|
2104
|
+
/* @__PURE__ */ y("section", {
|
|
2074
2105
|
className: "space-y-3",
|
|
2075
|
-
children: [/* @__PURE__ */
|
|
2106
|
+
children: [/* @__PURE__ */ v("h3", {
|
|
2076
2107
|
className: "text-sm font-semibold text-text-primary",
|
|
2077
2108
|
children: "Pricing"
|
|
2078
|
-
}), /* @__PURE__ */
|
|
2109
|
+
}), /* @__PURE__ */ y("div", {
|
|
2079
2110
|
className: "grid grid-cols-2 gap-3 sm:grid-cols-4",
|
|
2080
2111
|
children: [
|
|
2081
|
-
/* @__PURE__ */
|
|
2112
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2082
2113
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2083
2114
|
children: "Price *"
|
|
2084
|
-
}), /* @__PURE__ */
|
|
2115
|
+
}), /* @__PURE__ */ v("input", {
|
|
2085
2116
|
type: "number",
|
|
2086
2117
|
min: 0,
|
|
2087
2118
|
required: !0,
|
|
2088
2119
|
value: W.price,
|
|
2089
2120
|
onChange: (e) => G({ price: e.target.value }),
|
|
2090
|
-
className:
|
|
2121
|
+
className: A
|
|
2091
2122
|
})] }),
|
|
2092
|
-
/* @__PURE__ */
|
|
2123
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2093
2124
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2094
2125
|
children: "Price type"
|
|
2095
|
-
}), /* @__PURE__ */
|
|
2126
|
+
}), /* @__PURE__ */ v("select", {
|
|
2096
2127
|
value: W.priceType,
|
|
2097
2128
|
onChange: (e) => G({ priceType: e.target.value }),
|
|
2098
|
-
className:
|
|
2099
|
-
children:
|
|
2129
|
+
className: A,
|
|
2130
|
+
children: ft.map((e) => /* @__PURE__ */ v("option", {
|
|
2100
2131
|
value: e.value,
|
|
2101
2132
|
children: e.label
|
|
2102
2133
|
}, e.value))
|
|
2103
2134
|
})] }),
|
|
2104
|
-
/* @__PURE__ */
|
|
2135
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2105
2136
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2106
2137
|
children: "Price period"
|
|
2107
|
-
}), /* @__PURE__ */
|
|
2138
|
+
}), /* @__PURE__ */ v("select", {
|
|
2108
2139
|
value: W.pricePeriod,
|
|
2109
2140
|
onChange: (e) => G({ pricePeriod: e.target.value }),
|
|
2110
|
-
className:
|
|
2111
|
-
children:
|
|
2141
|
+
className: A,
|
|
2142
|
+
children: pt.map((e) => /* @__PURE__ */ v("option", {
|
|
2112
2143
|
value: e.value,
|
|
2113
2144
|
children: e.label
|
|
2114
2145
|
}, e.value))
|
|
2115
2146
|
})] }),
|
|
2116
|
-
/* @__PURE__ */
|
|
2147
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2117
2148
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2118
2149
|
children: "Currency"
|
|
2119
|
-
}), /* @__PURE__ */
|
|
2150
|
+
}), /* @__PURE__ */ v("select", {
|
|
2120
2151
|
value: W.currency,
|
|
2121
2152
|
onChange: (e) => G({ currency: e.target.value }),
|
|
2122
|
-
className:
|
|
2123
|
-
children: Ce.map((e) => /* @__PURE__ */
|
|
2153
|
+
className: A,
|
|
2154
|
+
children: Ce.map((e) => /* @__PURE__ */ v("option", {
|
|
2124
2155
|
value: e.value,
|
|
2125
2156
|
children: e.label
|
|
2126
2157
|
}, e.value))
|
|
2127
2158
|
})] }),
|
|
2128
|
-
/* @__PURE__ */
|
|
2159
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
2129
2160
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
2130
2161
|
children: "Price / sqft"
|
|
2131
|
-
}), /* @__PURE__ */
|
|
2162
|
+
}), /* @__PURE__ */ v("input", {
|
|
2132
2163
|
type: "number",
|
|
2133
2164
|
min: 0,
|
|
2134
2165
|
step: "0.01",
|
|
2135
2166
|
value: W.pricePerSqft,
|
|
2136
2167
|
onChange: (e) => G({ pricePerSqft: e.target.value }),
|
|
2137
|
-
className:
|
|
2168
|
+
className: A
|
|
2138
2169
|
})] }),
|
|
2139
|
-
/* @__PURE__ */
|
|
2170
|
+
/* @__PURE__ */ y("label", {
|
|
2140
2171
|
className: "flex items-end gap-2 pb-2.5 text-sm font-medium text-text-primary",
|
|
2141
|
-
children: [/* @__PURE__ */
|
|
2172
|
+
children: [/* @__PURE__ */ v("input", {
|
|
2142
2173
|
type: "checkbox",
|
|
2143
2174
|
checked: W.negotiable,
|
|
2144
2175
|
onChange: (e) => G({ negotiable: e.target.checked }),
|
|
@@ -2148,58 +2179,58 @@ var xt = () => {
|
|
|
2148
2179
|
]
|
|
2149
2180
|
})]
|
|
2150
2181
|
}),
|
|
2151
|
-
/* @__PURE__ */
|
|
2182
|
+
/* @__PURE__ */ y("section", {
|
|
2152
2183
|
className: "space-y-3",
|
|
2153
|
-
children: [/* @__PURE__ */
|
|
2184
|
+
children: [/* @__PURE__ */ v("h3", {
|
|
2154
2185
|
className: "text-sm font-semibold text-text-primary",
|
|
2155
2186
|
children: "Amenities"
|
|
2156
|
-
}), /* @__PURE__ */
|
|
2187
|
+
}), /* @__PURE__ */ v("div", {
|
|
2157
2188
|
className: "flex flex-wrap gap-2",
|
|
2158
2189
|
children: d.map((t) => {
|
|
2159
2190
|
let n = t.icon, r = W.amenities.includes(t.id);
|
|
2160
|
-
return /* @__PURE__ */
|
|
2191
|
+
return /* @__PURE__ */ y("button", {
|
|
2161
2192
|
type: "button",
|
|
2162
2193
|
"aria-pressed": r,
|
|
2163
2194
|
onClick: () => G({ amenities: r ? W.amenities.filter((e) => e !== t.id) : [...W.amenities, t.id] }),
|
|
2164
2195
|
className: e("inline-flex items-center gap-1.5 rounded-full border px-3 py-1.5 text-xs font-medium transition-colors", r ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-surface text-text-secondary hover:bg-bg-sunken hover:text-text-primary"),
|
|
2165
|
-
children: [/* @__PURE__ */
|
|
2196
|
+
children: [/* @__PURE__ */ v(n, { className: "h-3.5 w-3.5" }), t.label]
|
|
2166
2197
|
}, t.id);
|
|
2167
2198
|
})
|
|
2168
2199
|
})]
|
|
2169
2200
|
})
|
|
2170
2201
|
]
|
|
2171
2202
|
}),
|
|
2172
|
-
/* @__PURE__ */
|
|
2203
|
+
/* @__PURE__ */ y(w, { children: [/* @__PURE__ */ v(b, {
|
|
2173
2204
|
type: "button",
|
|
2174
2205
|
variant: "outline",
|
|
2175
|
-
onClick: () =>
|
|
2176
|
-
disabled:
|
|
2206
|
+
onClick: () => L(!1),
|
|
2207
|
+
disabled: j,
|
|
2177
2208
|
children: "Cancel"
|
|
2178
|
-
}), /* @__PURE__ */
|
|
2209
|
+
}), /* @__PURE__ */ v(b, {
|
|
2179
2210
|
type: "submit",
|
|
2180
|
-
disabled:
|
|
2181
|
-
children:
|
|
2211
|
+
disabled: j,
|
|
2212
|
+
children: j ? "Saving…" : "Save changes"
|
|
2182
2213
|
})] })
|
|
2183
2214
|
]
|
|
2184
2215
|
})
|
|
2185
2216
|
})
|
|
2186
2217
|
}),
|
|
2187
|
-
/* @__PURE__ */
|
|
2188
|
-
open:
|
|
2189
|
-
onOpenChange:
|
|
2190
|
-
children: /* @__PURE__ */
|
|
2218
|
+
/* @__PURE__ */ v(x, {
|
|
2219
|
+
open: Gt,
|
|
2220
|
+
onOpenChange: R,
|
|
2221
|
+
children: /* @__PURE__ */ y(S, {
|
|
2191
2222
|
className: "sm:max-w-md",
|
|
2192
|
-
children: [/* @__PURE__ */
|
|
2223
|
+
children: [/* @__PURE__ */ y(T, { children: [/* @__PURE__ */ v(E, { children: "Delete this property?" }), /* @__PURE__ */ y(C, { children: [g.title, " will be permanently removed. This cannot be undone."] })] }), /* @__PURE__ */ y(w, { children: [/* @__PURE__ */ v(b, {
|
|
2193
2224
|
type: "button",
|
|
2194
2225
|
variant: "outline",
|
|
2195
|
-
onClick: () =>
|
|
2226
|
+
onClick: () => R(!1),
|
|
2196
2227
|
children: "Cancel"
|
|
2197
|
-
}), /* @__PURE__ */
|
|
2228
|
+
}), /* @__PURE__ */ v(b, {
|
|
2198
2229
|
type: "button",
|
|
2199
2230
|
variant: "destructive",
|
|
2200
|
-
onClick:
|
|
2201
|
-
disabled:
|
|
2202
|
-
children:
|
|
2231
|
+
onClick: Yn,
|
|
2232
|
+
disabled: Mt,
|
|
2233
|
+
children: Mt ? "Deleting…" : "Delete property"
|
|
2203
2234
|
})] })]
|
|
2204
2235
|
})
|
|
2205
2236
|
})
|
|
@@ -2207,6 +2238,6 @@ var xt = () => {
|
|
|
2207
2238
|
});
|
|
2208
2239
|
};
|
|
2209
2240
|
//#endregion
|
|
2210
|
-
export {
|
|
2241
|
+
export { Ct as PropertyDetailPage };
|
|
2211
2242
|
|
|
2212
2243
|
//# sourceMappingURL=PropertyDetailPage.js.map
|