Drop the local sort-caret gap; makeover-webview 0.31.0 emits it
The gap and the reserved box were written here on 2026-08-11, and in
mnw-server's stylesheet the same afternoon, because the webview renderer
appended the caret glyph bare while the other two renderers wrote a leading
space into theirs. Both copies had to be box-only, with a comment explaining
that this file is unlayered and so declaring `content` would win over the
generated caret and leave the heading with no arrow.
0.31.0 emits the space inside the glyph and holds the box open on the
unsorted arm, so both rules and the two REVIEWED_OVERLAPS entries covering
them come out. A reviewed pairing is a claim about who owns a property, and
it expires when the design system takes the property back.
makeover-build moves to 0.24.0 in the same pass, since the renderer's `links`
key means the whole graph takes one version or none.
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
4 files changed,
+14 insertions,
-39 deletions
| 3398 |
3398 |
|
|
| 3399 |
3399 |
|
[[package]]
|
| 3400 |
3400 |
|
name = "makeover-build"
|
| 3401 |
|
- |
version = "0.23.1"
|
|
3401 |
+ |
version = "0.24.0"
|
| 3402 |
3402 |
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 3403 |
|
- |
checksum = "09326dad8b7fdbf1ae4359f866e8f4432a86c837f5a8bf1576bf0c298afcd41b"
|
|
3403 |
+ |
checksum = "12bcb5bc04026df9a5f4007e2a0f17ed34d8671573ea6445b4d17d7f44280d69"
|
| 3404 |
3404 |
|
dependencies = [
|
| 3405 |
3405 |
|
"makeover",
|
| 3406 |
3406 |
|
"makeover-geometry",
|
| 3442 |
3442 |
|
|
| 3443 |
3443 |
|
[[package]]
|
| 3444 |
3444 |
|
name = "makeover-webview"
|
| 3445 |
|
- |
version = "0.30.1"
|
|
3445 |
+ |
version = "0.31.0"
|
| 3446 |
3446 |
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 3447 |
|
- |
checksum = "d6f86fc082c5fc0d73192a3f3f5f74840848ba2cc815154ab207b1fc707f7c64"
|
|
3447 |
+ |
checksum = "f9f97c1694d50160ed5c980a17c96b1c8d007dbdb2d6b9472a2a5270e28cb4fd"
|
| 3448 |
3448 |
|
dependencies = [
|
| 3449 |
3449 |
|
"makeover-geometry",
|
| 3450 |
3450 |
|
"makeover-layout",
|
| 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.23.1"
|
|
21 |
+ |
makeover-build = "0.24.0"
|
| 22 |
22 |
|
# The table CSS is generated here too: the columns are this app's, so the
|
| 23 |
23 |
|
# shared helper cannot know them, but the tracks and the narrowing rules come
|
| 24 |
24 |
|
# from the description rather than from hand-written nth-child cuts.
|
| 25 |
|
- |
makeover-webview = "0.30.1"
|
|
25 |
+ |
makeover-webview = "0.31.0"
|
| 26 |
26 |
|
makeover-layout = "0.16.0"
|
| 27 |
27 |
|
# Width. Direct rather than through makeover-webview, because the narrow table
|
| 28 |
28 |
|
# pass keys off SizeClass::Compact and a boundary reached transitively is a
|
| 112 |
112 |
|
# The forms emitter and the description it renders. Runtime deps, not build:
|
| 113 |
113 |
|
# form markup depends on the value, the error and the options at the moment a
|
| 114 |
114 |
|
# modal opens, so it cannot be materialised the way the stylesheet is.
|
| 115 |
|
- |
makeover-webview = "0.30.1"
|
|
115 |
+ |
makeover-webview = "0.31.0"
|
| 116 |
116 |
|
makeover-layout = "0.16.0"
|
| 117 |
117 |
|
# Browser opening
|
| 118 |
118 |
|
open = { workspace = true }
|
| 436 |
436 |
|
/// - `.field { box-shadow }` -- makeover owns the resting and invalid bevels;
|
| 437 |
437 |
|
/// GO's are `.field--ghost` (deliberately borderless in toolbars) and the
|
| 438 |
438 |
|
/// `:focus` ring on an invalid field, which makeover draws no arm for.
|
| 439 |
|
- |
/// - `.table-heading { content }` -- the sort caret's reserved gap. Declared on
|
| 440 |
|
- |
/// the **unsorted** arm (`:not([aria-sort])::after`) precisely so it cannot
|
| 441 |
|
- |
/// blank the generated caret on the sorted one. Declaring it on the sorted
|
| 442 |
|
- |
/// arm is the trap that bit twice on 2026-08-11; this entry is what keeps the
|
| 443 |
|
- |
/// correct arrangement legible rather than looking like the bug.
|
| 444 |
|
- |
/// - `.table-heading { display }` -- different elements, not different arms:
|
| 445 |
|
- |
/// makeover sets `table-cell` on the heading, GO sets `inline-block` on the
|
| 446 |
|
- |
/// caret pseudo-element inside it.
|
|
439 |
+ |
/// The caret's two entries were here until makeover-webview 0.31.0, which emits
|
|
440 |
+ |
/// the leading space and the reserved box itself. Both of GO's rules are gone
|
|
441 |
+ |
/// with them: a reviewed pairing is a claim about who owns a property, and it
|
|
442 |
+ |
/// expires when the design system takes the property back.
|
| 447 |
443 |
|
///
|
| 448 |
444 |
|
/// An entry that stops colliding fails the build, so this list cannot outlive
|
| 449 |
445 |
|
/// what it describes.
|
| 455 |
451 |
|
("field", "box-shadow"),
|
| 456 |
452 |
|
("field", "color"),
|
| 457 |
453 |
|
("tab", "color"),
|
| 458 |
|
- |
("table-heading", "content"),
|
| 459 |
|
- |
("table-heading", "display"),
|
| 460 |
454 |
|
];
|
| 461 |
455 |
|
|
| 462 |
456 |
|
/// Widths that are tuning inside the wide shell, not a shell boundary.
|
| 1247 |
1247 |
|
generated pair to match.
|
| 1248 |
1248 |
|
|
| 1249 |
1249 |
|
What is left below is what the design system does not answer -- whether a
|
| 1250 |
|
- |
pressable heading takes a hover surface, and the caret's spacing -- and
|
| 1251 |
|
- |
nothing that restates the glyph. */
|
|
1250 |
+ |
pressable heading takes a hover surface -- and nothing that restates the
|
|
1251 |
+ |
glyph. The caret's gap and its reserved box were here too until
|
|
1252 |
+ |
makeover-webview 0.31.0 began emitting both. */
|
| 1252 |
1253 |
|
.table-heading[data-sortable] {
|
| 1253 |
1254 |
|
user-select: none;
|
| 1254 |
1255 |
|
white-space: nowrap;
|
| 1258 |
1259 |
|
background: var(--hover-surface);
|
| 1259 |
1260 |
|
}
|
| 1260 |
1261 |
|
|
| 1261 |
|
- |
/* makeover-tui and makeover-immediate both emit their caret with a leading
|
| 1262 |
|
- |
space; the webview emitter appends the bare glyph, so the gap is the app's to
|
| 1263 |
|
- |
put back. Reserved on every sortable heading rather than only the sorted one,
|
| 1264 |
|
- |
or pressing a header shifts the row it sits in.
|
| 1265 |
|
- |
|
| 1266 |
|
- |
Box only, never `content`, on the sorted arm. This layer outranks `makeover`,
|
| 1267 |
|
- |
so declaring `content` here at all would win over the generated caret and put
|
| 1268 |
|
- |
the arrow back to nothing -- which is the same override this block was
|
| 1269 |
|
- |
written to delete, one property along. The empty box goes on the arm the
|
| 1270 |
|
- |
generator does not match. */
|
| 1271 |
|
- |
.table-heading[data-sortable]:not([aria-sort])::after {
|
| 1272 |
|
- |
content: '';
|
| 1273 |
|
- |
}
|
| 1274 |
|
- |
|
| 1275 |
|
- |
.table-heading[data-sortable]::after {
|
| 1276 |
|
- |
display: inline-block;
|
| 1277 |
|
- |
min-width: 1ch;
|
| 1278 |
|
- |
margin-left: var(--gap-bound);
|
| 1279 |
|
- |
}
|
| 1280 |
|
- |
|
| 1281 |
1262 |
|
/* Overdue task highlighting */
|
| 1282 |
1263 |
|
.task-overdue .task-description-text {
|
| 1283 |
1264 |
|
color: var(--danger);
|