fix(web): align the reserved delete slot
ci / web (push) Successful in 31s
e2e / e2e (push) Successful in 1m18s
ci / rust (push) Failing after 1m40s

This commit is contained in:
Miguel Palhas
2026-08-25 19:17:07 +01:00
parent dee7340a01
commit 06f8a6f0ea
3 changed files with 14 additions and 7 deletions
+8 -2
View File
@@ -1285,11 +1285,17 @@ function wireCollapsedToggle(bucket: CollapsedBucketDom) {
// icon() and armedDeleteIcon() live in icons.ts, shared with the settings
// rows (#231); the §9.6 painters below stay here as their only consumer.
/** Invisible spacer that reserves a delete control's slot (#254). */
/**
* Invisible spacer that reserves a delete control's slot (#254). It is the
* delete control's own box, hidden — a hand-sized guess drifts as soon as the
* icon control's padding changes, and an 8px drift is the misalignment this
* was meant to remove.
*/
function placeholderSlot(): HTMLSpanElement {
const slot = document.createElement("span");
slot.className = "slot-icon";
slot.className = "control control-quiet control-icon slot-icon";
slot.setAttribute("aria-hidden", "true");
slot.append(icon("trash"));
return slot;
}
+4 -5
View File
@@ -1635,12 +1635,11 @@ body {
font-size: var(--text-xs);
}
/* an invisible spacer sized as an icon control: rows without a delete
reserve its slot so search sits in the same column on every row */
/* an invisible spacer that IS an icon control: rows without a delete reserve
its slot so search sits in the same column on every row */
.slot-icon {
flex: none;
width: var(--control-h);
height: var(--control-h);
visibility: hidden;
pointer-events: none;
}
/* #227: the season the operator's own report was about read `0/10` beside