heatmapSummary

fun heatmapSummary(range: ClosedRange<LocalDate>, isActive: (LocalDate) -> Boolean): HeatmapSummary

Single-pass scan of range. HeatmapSummary.currentStreak counts consecutive active days ending exactly at range.endInclusive (zero when that day is inactive). An empty range (start after end) yields all zeros.