Follow the Bespoke split: the heatmap is Ceded
`Slot::bespoke` becomes `Slot::ceded` for the completion heatmap, on this
module's own words: "Not a workaround and not a gap". Nothing is owed
there, so a renderer without a fill for it draws nothing and is right to,
which is what the new member says and the old one could not.
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
- Claude-Session
- https://claude.ai/code/session_01MptwXZ8k65v19rFmdGAyki
6 files changed,
+17 insertions,
-16 deletions
| 3459 |
3459 |
|
|
| 3460 |
3460 |
|
[[package]]
|
| 3461 |
3461 |
|
name = "makeover-layout"
|
| 3462 |
|
- |
version = "0.42.0"
|
|
3462 |
+ |
version = "0.43.0"
|
| 3463 |
3463 |
|
|
| 3464 |
3464 |
|
[[package]]
|
| 3465 |
3465 |
|
name = "makeover-timing"
|
| 8474 |
8474 |
|
name = "makeover-immediate"
|
| 8475 |
8475 |
|
version = "0.43.0"
|
| 8476 |
8476 |
|
|
|
8477 |
+ |
[[patch.unused]]
|
|
8478 |
+ |
name = "ops-status"
|
|
8479 |
+ |
version = "0.1.0"
|
|
8480 |
+ |
|
| 8477 |
8481 |
|
[[patch.unused]]
|
| 8478 |
8482 |
|
name = "quasi-axum"
|
| 8479 |
8483 |
|
version = "0.97.0"
|
| 8489 |
8493 |
|
[[patch.unused]]
|
| 8490 |
8494 |
|
name = "quasi-store"
|
| 8491 |
8495 |
|
version = "0.1.0"
|
| 8492 |
|
- |
|
| 8493 |
|
- |
[[patch.unused]]
|
| 8494 |
|
- |
name = "ops-status"
|
| 8495 |
|
- |
version = "0.1.0"
|
| 100 |
100 |
|
notify = "8.2"
|
| 101 |
101 |
|
notify-debouncer-mini = "0.7"
|
| 102 |
102 |
|
makeover = "3.2"
|
| 103 |
|
- |
makeover-tui = "0.42"
|
|
103 |
+ |
makeover-tui = "0.43"
|
| 104 |
104 |
|
toml = "1.1"
|
| 105 |
105 |
|
|
| 106 |
106 |
|
# Enums
|
| 18 |
18 |
|
# Materialises all three generated files: themes/, geometry.css, layout.css,
|
| 19 |
19 |
|
# and holds both drift checks this build.rs used to carry itself: touch density
|
| 20 |
20 |
|
# as of 0.17, breakpoints as of 0.18.
|
| 21 |
|
- |
makeover-build = "0.64"
|
|
21 |
+ |
makeover-build = "0.65"
|
| 22 |
22 |
|
# Cuts the two house faces into frontend/fonts/. A git dependency because
|
| 23 |
23 |
|
# quasi-type is `publish = false`, which is also why makeover-build cannot do
|
| 24 |
24 |
|
# this and only emits the CSS that fetches the result. The rev is the one
|
| 28 |
28 |
|
# The table CSS is generated here too: the columns are this app's, so the
|
| 29 |
29 |
|
# shared helper cannot know them, but the tracks and the narrowing rules come
|
| 30 |
30 |
|
# from the description rather than from hand-written nth-child cuts.
|
| 31 |
|
- |
makeover-webview = "0.71"
|
| 32 |
|
- |
makeover-layout = "0.42"
|
|
31 |
+ |
makeover-webview = "0.72"
|
|
32 |
+ |
makeover-layout = "0.43"
|
| 33 |
33 |
|
# Width. Direct rather than through makeover-webview, because the narrow table
|
| 34 |
34 |
|
# pass keys off SizeClass::Compact and a boundary reached transitively is a
|
| 35 |
35 |
|
# boundary nobody pinned.
|
| 134 |
134 |
|
# The forms emitter and the description it renders. Runtime deps, not build:
|
| 135 |
135 |
|
# form markup depends on the value, the error and the options at the moment a
|
| 136 |
136 |
|
# modal opens, so it cannot be materialised the way the stylesheet is.
|
| 137 |
|
- |
makeover-webview = "0.71"
|
| 138 |
|
- |
makeover-layout = "0.42"
|
|
137 |
+ |
makeover-webview = "0.72"
|
|
138 |
+ |
makeover-layout = "0.43"
|
| 139 |
139 |
|
# Browser opening
|
| 140 |
140 |
|
open = { workspace = true }
|
| 141 |
141 |
|
|
| 126 |
126 |
|
///
|
| 127 |
127 |
|
/// # The grid is not described
|
| 128 |
128 |
|
///
|
| 129 |
|
- |
/// A month grid is [`RegionKind::Bespoke`]'s shape. A list of days that had
|
|
129 |
+ |
/// A month grid is [`RegionKind::Ceded`]'s shape. A list of days that had
|
| 130 |
130 |
|
/// something on them keeps every fact the grid carries except the shape, and
|
| 131 |
131 |
|
/// inventing a `Node::Calendar` to keep the shape is a vocabulary decision this
|
| 132 |
132 |
|
/// screen has no standing to make alone.
|
| 4 |
4 |
|
//!
|
| 5 |
5 |
|
//! The completion heatmap is a month grid of counts, and a description
|
| 6 |
6 |
|
//! expressive enough to produce one is a widget library wearing a description's
|
| 7 |
|
- |
//! name. It gets a [`RegionKind::Bespoke`] and stops there.
|
|
7 |
+ |
//! name. It gets a [`RegionKind::Ceded`] and stops there: nothing is owed, so
|
|
8 |
+ |
//! a renderer with no fill for it draws nothing and is right to.
|
| 8 |
9 |
|
//!
|
| 9 |
10 |
|
//! # The shape
|
| 10 |
11 |
|
//!
|
| 160 |
161 |
|
Node::section("Completion History"),
|
| 161 |
162 |
|
habit_figures(streak),
|
| 162 |
163 |
|
// The heatmap. A month grid of completion counts is exactly what
|
| 163 |
|
- |
// `Region::Bespoke` was named for: the description says a thing called
|
|
164 |
+ |
// `Region::Handover` was named for: the description says a thing called
|
| 164 |
165 |
|
// `task-heatmap` goes here and says nothing else, and
|
| 165 |
166 |
|
// `task-overview.js:renderHeatmap` fills it. Not a workaround and not a
|
| 166 |
167 |
|
// gap — a description able to produce a calendar grid is a widget
|
| 168 |
169 |
|
//
|
| 169 |
170 |
|
// The id carries the task so the filling code knows which chain to
|
| 170 |
171 |
|
// render without asking the screen.
|
| 171 |
|
- |
Node::Region(Slot::bespoke(
|
|
172 |
+ |
Node::Region(Slot::ceded(
|
| 172 |
173 |
|
format!("task-heatmap-{task_id}"),
|
| 173 |
174 |
|
"task-heatmap",
|
| 174 |
175 |
|
)),
|
| 353 |
353 |
|
/// Not filed as its own task. `Arrangement`'s docs say the two members came from
|
| 354 |
354 |
|
/// measuring the two apps and that discovering the layer missing after the
|
| 355 |
355 |
|
/// renderers exist is a redesign; this is the first counter-example and one
|
| 356 |
|
- |
/// counter-example is not a member. It is noted on the `Region::Bespoke`
|
|
356 |
+ |
/// counter-example is not a member. It is noted on the `Region::Handover`
|
| 357 |
357 |
|
/// reasoning instead: a dashboard is a candidate for the app owning its own
|
| 358 |
358 |
|
/// arrangement, the way it owns the heatmap.
|
| 359 |
359 |
|
fn column(id: &str, title: &str, body: Node) -> Slot {
|