+ {/* Gouttière heures */}
+
+ {Array.from({ length: 23 }, (_, i) => i + 1).map((h) => (
+
+ {String(h).padStart(2, "0")}:00
+
+ ))}
+
+
+ {perDay.map(({ day, positioned }, dayIndex) => {
+ const isToday = isSameDay(day, now)
+ const nowTop = (now.getHours() * 60 + now.getMinutes()) * (HOUR_PX / 60)
+ return (
+
+ {/* Lignes d'heures */}
+ {Array.from({ length: 23 }, (_, i) => i + 1).map((h) => (
+
+ ))}
+
+ {/* Sélection en cours */}
+ {drag && drag.dayIndex === dayIndex && drag.moved && (
+
+
+ {formatMinutes(drag.startMin)} – {formatMinutes(drag.endMin)}
+
+
+ )}
+
+ {/* Événements positionnés */}
+ {positioned.map(({ event, top, duration, leftPct, widthPct }) => {
+ const compact = (duration / 60) * HOUR_PX < 40
+ return (
+
{
+ e.stopPropagation()
+ onEventClick(event, anchorFromEvent(e))
+ }}
+ onPointerDown={(e) => e.stopPropagation()}
+ >
+
+ {event.title}
+ {compact && (
+
+ {" "}
+ ⋅ {formatEventTime(event.start)}
+
+ )}
+
+ {!compact && (
+
+ {formatEventTime(event.start)} – {formatEventTime(event.end)}
+
+ )}
+
+ )
+ })}
+
+ {/* Indicateur maintenant */}
+ {isToday && (
+
+ )}
+
+ )
+ })}
+