+ {/* Month navigation */}
+
+
+ {monthLabel}
+
+
+
+ {/* Calendar grid */}
+
+ {DAYS.map((d) => (
+ {d}
+ ))}
+ {Array.from({ length: firstDay }, (_, i) => (
+
+ ))}
+ {Array.from({ length: daysInMonth }, (_, i) => {
+ const day = i + 1
+ const isToday = viewYear === today.getFullYear() && viewMonth === today.getMonth() && day === today.getDate()
+ const isSelected = selectedDate && viewYear === selectedDate.getFullYear() && viewMonth === selectedDate.getMonth() && day === selectedDate.getDate()
+ return (
+
+ )
+ })}
+
+
+ {/* Time selector */}
+
+ Time
+ setHour(e.target.value.replace(/\D/g, '').slice(0, 2))}
+ maxLength={2}
+ aria-label="Hour"
+ />
+ :
+ setMinute(e.target.value.replace(/\D/g, '').slice(0, 2))}
+ maxLength={2}
+ aria-label="Minute"
+ />
+
+
+ {/* Actions */}
+
+
+
+
+