))}
{people.length < 4 && (
{[0, 1, 2, 3, 4, 5, 6].map(offset => {
const d = new Date(today);
d.setDate(today.getDate() + offset);
const sel = date && d.toDateString() === date.toDateString();
return (
);
})}
Or pick another date
{
if (!e.target.value) { setDate(null); return; }
const [y, m, d] = e.target.value.split('-').map(Number);
setDate(new Date(y, m - 1, d));
}}
/>
{touched && !date &&
Pick a date.
}
{/* TIME — dropdown grouped by Morning/Afternoon/Evening, real-time availability */}
{date && bookings.length > 0 && (
Some slots hidden — {selectedDuration >= 60 ? Math.round(selectedDuration / 60) + ' hr ' + (selectedDuration % 60 ? (selectedDuration % 60) + ' min ' : '') : selectedDuration + ' min '}
block applied for your selected services.
)}
{touched && !time &&
Pick a time.
}