Calendar · Time grid: week and day views, drag to make and to resize

TimeGrid sets days side by side under a column of hours. Each event is
a card by its hours, clipped to each day it touches, and events that
overlap share the width in lanes. A drag on empty time makes an event
by quarter hours through forms::pen; a drag on an event's lower edge,
on the day it ends, moves its end, each drag checked against its
owner. The grid opens at half past seven, or an hour and a half
before now when today is shown and that is later.

CurrentTimeIndicator marks the minute now on today and moves with the
clock. TimezoneOverlay adds another zone's hours beside the grid's.
AllDayRow lays whole days across their columns in lanes.
CalendarWeekView and CalendarDayView are one view of seven days or
one: a header that steps and comes back to today, the days' names
stacked so they fit narrow columns, the whole days, then the hours.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-09-27 03:13:38 -04:00
1 parent f316ab56ba
commit a41cb2f9c2
18 files changed
+1577 -36

No files matched your search

+2 -1
View File
@@ -107,7 +107,7 @@ Per-component lines live in `tasks/`. Tags there:
- [x] T29b Mail · Reading
- [x] T29c Mail · Writing
- [x] T29d Mail · Sorting
- [ ] T30a Calendar · Months
- [x] T30a Calendar · Months
- [ ] T30b Calendar · Time grid
- [ ] T30c Calendar · Agenda and people
- [ ] T30d Calendar · Editing
@@ -354,3 +354,4 @@ Per-component lines live in `tasks/`. Tags there:
| T29d | 1 | FAIL | the time dialog's rule for a time ahead of now had no test; its test found that a picker opened in a dialog panicked on a deferred draw inside another |
| T29d | 2 | FAIL | a raise inside a raise took its place in the queue as its namespace, so one appearing before it rebuilt its state and dropped its focus |
| T29d | 3 | PASS | |
| T30a | 1 | PASS | |