Build the Prism calendar Daybook

This commit is contained in:
Gabriel Brown
2026-08-17 11:38:24 -04:00
parent 6a1bec849d
commit 03914e23af
9 changed files with 724 additions and 165 deletions
@@ -526,7 +526,7 @@ git commit -m "Route the interactive Panama date menu"
- Consumes: `ShellState.dateMenuPage`, `Notifs.hasNotifications`, and existing `NotificationList`.
- Produces: a 760-pixel two-column date menu with left width 310 and independently bounded right content.
- [ ] **Step 1: Add failing structural and live-surface assertions**
- [x] **Step 1: Add failing structural and live-surface assertions**
Extend the contract to assert the loaded layer and approved components:
@@ -542,7 +542,7 @@ done
Run the contract and expect failure on width or missing components.
- [ ] **Step 2: Implement focused event and summary components**
- [x] **Step 2: Implement focused event and summary components**
`AgendaEvent.qml` accepts `property var event`, `property bool past`, and signals `activated` and `joinRequested`. It renders a 48-pixel tabular time column, 3-pixel source-color rail, elided summary, source/location metadata, and optional Join pill. All-day rows replace time with `All day`.
@@ -557,7 +557,7 @@ Run the contract and expect failure on width or missing components.
The Up Next card is omitted for selected dates other than today and when no future timed event exists. Use `ScrollColumn` with a maximum content height derived from the panel's available height. Event clicks call `CalendarAgenda.openEvent(event)`; Join calls `CalendarAgenda.join(event)`.
- [ ] **Step 3: Recompose DateMenuPanel as Daybook**
- [x] **Step 3: Recompose DateMenuPanel as Daybook**
Keep the existing header styling and Prism container, but replace the single `Column` with this concrete structure:
@@ -601,7 +601,7 @@ When Agenda's notification summary activates, set `ShellState.dateMenuPage = "no
Resize MediaCard typography/controls responsively for the 310-pixel column; do not duplicate its playback logic.
- [ ] **Step 4: Update DateMenu lifecycle and bounds**
- [x] **Step 4: Update DateMenu lifecycle and bounds**
Set `DateMenu.implicitWidth: 760`. Bound height to the active screen's available geometry, with the panel content choosing a maximum right-column scroll height instead of overflowing the monitor.
@@ -616,7 +616,7 @@ panel.prepare(ShellState.dateMenuPage);
Add a connection that marks notifications read when an already-open panel switches into Notifications. Opening from the clock must not mark them read.
- [ ] **Step 5: Verify fixture visuals on the real layer surface**
- [x] **Step 5: Verify fixture visuals on the real layer surface**
Run:
@@ -637,7 +637,7 @@ Capture a temporary full-screen screenshot with `grim`, inspect the Daybook at o
Close the panel and reset fixture mode after inspection. Do not add screenshots to git.
- [ ] **Step 6: Commit the Daybook**
- [x] **Step 6: Commit the Daybook**
```bash
git add config/dot/quickshell/modules/datemenu \