The continuous style streamed weeks with no boundaries at all, which left it
hard to tell where one month ended: the only marker was a "Jul 1" label on the
1st, and every boundary week mixed two months' days into one row.
It is now a vertical stack of self-contained month blocks. Each block shows only
its own days — the boundary week keeps its seven columns so nothing shifts
sideways, but the neighbour month's cells are blank rather than filled with
duplicates of days shown again a block later — under a sticky month header with
whitespace either side. Scrolling stays continuous; only the reading changes.
- The coordinate space moves from absolute week index to absolute month index
(two LazyColumn items per month: header, then block). Unlike week indices, it
doesn't depend on the week-start preference, so changing that reflows the rows
inside a block without moving the block or losing the scroll position.
- The sliding data window now loads months rather than weeks, widened to whole
grid weeks at both ends so a bar reaching into a block from a clipped-off day
still renders.
- `clipWeekToMonth` is the pure seam: it drops the neighbour month's pills and
counts and cuts spanning bars back to the month's own columns, keeping a flat
cap on the cut side so a bar reads as continuing past the block.
- The top bar carries the year in this style — the block's own header names the
month, so repeating it two lines up was pure duplication.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>