Skip to content

Settings → Sync: 'recent days' number field rides the shared TextField face#155

Merged
th3-br41n merged 1 commit into
mainfrom
polish/sync-recentdays-textfield
Jul 13, 2026
Merged

Settings → Sync: 'recent days' number field rides the shared TextField face#155
th3-br41n merged 1 commit into
mainfrom
polish/sync-recentdays-textfield

Conversation

@th3-br41n

Copy link
Copy Markdown
Contributor

What

The selective-sync "keep the last N days" field was a hand-rolled <input type="number"> with its own 5rem width + border + radius + surface — so its box drifted from every other control in Settings (the exact thing the control-face ratchet exists to stop).

Now that <TextField> forwards min/max/step (#154 — the reason this field couldn't use the primitive before), route it through <TextField size=Sm min={1} max={3650}>. The .sync-section__number host keeps only the 5rem width + right-aligned digits; the box (height / border / surface) comes from .bs-input.

Why it's the clean one to migrate first

This closes the loop I built over the last three PRs end-to-end:

primitive gap found (#152 ratchet) → primitive fixed (#154 min/max) → consumer migrated → baseline shrinks (10 → 9).

The control-face ratchet's stale-baseline check requires the file be dropped from control-faces-baseline.json in the same PR, so the two can't drift.

Verified: control-faces green (9 baselined, sync no longer offends), css-tokens green, typecheck:packages clean, sync-section suite 7/7.

Scope note: the other baselined Settings offenders are either plain-text inputs (pure migration — I'm holding those for a live-shell pass so I can eyeball the polish) or type="time" inputs that should route through the shared date/time cell, not a raw input. This one is safe to do blind: it's a number field on an obscure advanced setting, and the standard face can't look worse than a bespoke 5rem box.

🤖 Generated with Claude Code

…xtField face

The selective-sync "keep the last N days" field was a hand-rolled
`<input type=number>` with its own 5rem width, border, radius, and surface — so
its box drifted from every other control in Settings. Now that `<TextField>`
forwards `min`/`max`/`step` (the reason it couldn't use the primitive before),
route it through `<TextField size=Sm>`; the `.sync-section__number` host keeps
only the 5rem width + right-aligned digits, and the box comes from `.bs-input`.

Drops it from the control-face baseline (10 → 9) — the ratchet now proves the
full loop: primitive gap → primitive fix → consumer migrated → baseline shrinks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@th3-br41n th3-br41n merged commit 086a7d2 into main Jul 13, 2026
1 of 3 checks passed
@th3-br41n th3-br41n deleted the polish/sync-recentdays-textfield branch July 13, 2026 14:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant