// Villa Mesochori — home page, content harvested from the owners' Airbnb & Booking.com listings
const NS = window.VillaMesochoriDesignSystem_9e1a21;
const { Button, Badge, Card, LucideIcon } = NS;
// Photos now come from the content store (owners can replace them in the admin area).
// Amenities now come from the content store (editable in the owners' area).
// "More photos" — collapsed gallery that expands on click
function MorePhotos({ items }) {
const [open, setOpen] = React.useState(false);
const shown = items.filter((g) => g.label || g.img);
if (!shown.length) return null;
return (
More photos
A closer look inside
{open && (
{shown.map((g, i) => (
{g.img ? (
) : (
Photo coming soon
)}
{g.label}
))}
)}
);
}
function Eyebrow({ color = "var(--accent)", children }) {
return {children};
}
function Photo({ src, alt, style, className }) {
return ;
}
// Split "a | b | c" multiline content strings into arrays
function vmLines(str, parts) {
return String(str || "").split("\n").map((l) => l.trim()).filter(Boolean).map((l) => {
const bits = l.split("|").map((b) => b.trim());
while (bits.length < parts) bits.push("");
return bits;
});
}
function Home({ onBook, onGuide, onManual }) {
const c = window.VMContent.get();
const highlights = vmLines(c.homeHighlights, 3);
const amenities = vmLines(c.amenities, 2);
return (
{/* Guide + manual teasers */}
Open the guide} onClick={onGuide}>
Simos beach, Monemvasia, the tavernas we actually eat at — everything we tell friends when they visit.
Read the manual} onClick={onManual}>
Check-in from {c.checkIn}, checkout by {c.checkOut}, where to park, and the few house rules we ask everyone to keep.
{/* CTA band */}