Skip to content

fix(web): unify control sizing across settings pages - #9281

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/unify-settings-form-sizing
Sep 2, 2026
Merged

fix(web): unify control sizing across settings pages#9281
juliusmarminge merged 1 commit into
mainfrom
t3code/unify-settings-form-sizing

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Sep 2, 2026

Copy link
Copy Markdown
Member

Problem

Settings rows mixed control heights freely: selects at 32px, inputs at 30px, buttons at 24/28/32px plus hand-pinned h-5/h-7/h-8 overrides, model pickers fixed at 28px, and the Keybindings page on its own compact scale. Integrations had three selects at one height and two at another; Project settings had five different heights in one column. Nothing in SettingsRow constrained the control slot, so every call site picked its own size.

Fix

Every settings surface now follows three tiers, documented above SettingsRow in settingsLayout.tsx:

  • Row controlssize="sm" (Button, Select, Input, NumberField) or icon-sm. Every primitive's sm lands on the same 28px desktop / 32px mobile box, which is also where the model/traits pickers already sit.
  • Section header actions and buttons inside list items, cards, toolbarsxs / icon-xs.
  • Inline affordances (reset arrows, info tooltips, table-cell buttons, list reorder arrows) stay icon-micro.
  • Dialog footers keep the app-wide default button size; the two settings dialogs that deviated were brought in line.

Small primitive changes: Switch gains a size="sm" variant that replaces the ad-hoc --thumb-size overrides (models list, branch toolbar), ServerUpdateAction gains a size prop, and FontFamilyPicker reuses selectTriggerVariants instead of a hand-copied trigger. The Keybindings when-clause expression builder stays on compact since it is a dense mono editor that was already internally consistent.

Before / after

General
general

Project settings
project

Integrations (three selects at one height, two at another → one)
integrations

Providers (instance card config fields)
providers

Source control
source-control

Appearance
appearance

Keybindings, Connections, Archive, mobile

keybindings
connections
archived
general-mobile

Verification

  • Lint and typecheck on apps/web; ServerUpdateAction.test.tsx passes.
  • Browser pass over every settings route and project settings at 1440px and 390px against a snapshot of real data (screenshots above).

Built with Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Visual and sizing-only changes across settings and shared UI primitives; no auth, data, or business-logic behavior changes.

Overview
Standardizes settings UI control heights by applying a documented three-tier sizing scheme (sm in row controls, xs/icon-xs in headers and list actions, icon-micro for tiny inline affordances) across settings routes and related surfaces.

Primitive and shared helpers: Switch adds size="sm" (replacing ad-hoc --thumb-size classes). ServerUpdateAction accepts a size prop (default xs; Connections passes sm for the primary server row). settingsLayout exports SETTINGS_PICKER_TRIGGER_CLASSNAME so model/traits pickers align with sm row controls. FontFamilyPicker uses selectTriggerVariants({ size: "sm" }) instead of duplicated trigger styles.

Call-site cleanup: Widespread migration from compact inputs/buttons/selects to sm, icon-micro toolbar buttons to icon-xs, and removal of manual h-5/h-7/h-8 overrides where size covers it. Keybindings moves most controls to sm/icon-xs while keeping dense editor behavior. Dialog footers in add-provider flow drop forced size="sm" to use default button sizing.

Reviewed by Cursor Bugbot for commit e71a6a0. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Unify control sizing to small across web settings pages

  • Standardizes inputs, selects, switches, and buttons across all settings panels to use shared small sizing variants, replacing a mix of compact, micro, and custom per-component classes
  • Adds a size prop (default default, sm) to the Switch component in switch.tsx with responsive thumb-size CSS variables and a data-size attribute
  • Adds a shared SETTINGS_PICKER_TRIGGER_CLASSNAME constant in settingsLayout.tsx and replaces duplicated picker trigger class strings in ProjectSettingsPanel, GeneralSettingsPanel, and SourceControlWritingSettings
  • Adds an optional button size prop to ServerUpdateAction (defaulting to xs) so settings callers can request small
  • Risk: Switch default size is unchanged, but any out-of-tree or un-updated consumers passing thumb-size class overrides directly may no longer match the new responsive CSS variables; the ServerUpdateAction default remains xs so existing callers are unaffected
📊 Macroscope summarized e71a6a0. 20 files reviewed, 1 issue evaluated, 0 issues filtered, 1 comment posted

🗂️ Filtered Issues

Settings rows mixed control heights freely: selects at 32px, inputs at
30px, buttons at 24/28/32px plus hand-pinned h-5/h-7/h-8 overrides, and
the Keybindings page on its own compact scale. Integrations alone had
three selects at one height and two at another.

Every settings surface now follows three tiers: row controls use
size="sm" (Button, Select, Input, NumberField) or icon-sm; section header
actions and buttons inside list items, cards and toolbars use xs/icon-xs;
inline affordances like reset arrows stay icon-micro. Dialog footers keep
the app-wide default. The tiers are documented above SettingsRow.

Switch gains a size="sm" variant replacing the ad-hoc --thumb-size
overrides, ServerUpdateAction gains a size prop, and FontFamilyPicker
reuses selectTriggerVariants instead of a hand-copied trigger.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Sep 2, 2026
Comment thread apps/web/src/components/settings/SettingsPanels.tsx
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.4 KiB 13.2 KiB −203 B (−1.5%) 15.1 KiB
Codex Thread snapshot wire 6.9 KiB 6.9 KiB +3 B (+0.0%) 7.3 KiB
Codex Live turn WebSocket wire 6.6 KiB 6.4 KiB −206 B (−3.1%) 7.8 KiB
Codex Live turn WebSocket decoded 57.0 KiB 55.5 KiB −1.5 KiB (−2.6%) 66.4 KiB
Codex Live turn messages 10 8 −2 (−20.0%) 21
Claude Total thread wire 13.2 KiB 13.3 KiB +170 B (+1.3%) 15.1 KiB
Claude Thread snapshot wire 6.9 KiB 6.9 KiB +6 B (+0.1%) 7.3 KiB
Claude Live turn WebSocket wire 6.3 KiB 6.4 KiB +164 B (+2.6%) 7.8 KiB
Claude Live turn WebSocket decoded 55.5 KiB 56.4 KiB +928 B (+1.6%) 66.4 KiB
Claude Live turn messages 8 10 +2 (+25.0%) 21

Baseline: 535557b · PR result: e71a6a0 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 109.4 KiB
  • Claude decoded thread snapshot: 110.1 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@macroscopeapp

macroscopeapp Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at e71a6a0

Macroscope's review found this PR approvable — This is a presentation-only pass that standardizes control dimensions across existing settings screens without changing settings behavior, persistence, navigation, or backend actions. The shared component additions preserve existing defaults and introduce no new capability or sensitive configuration.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge
juliusmarminge merged commit b59b7d0 into main Sep 2, 2026
23 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/unify-settings-form-sizing branch September 2, 2026 22:56
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in pingdotgg/t3code#7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in pingdotgg/t3code#7272
* feat(web): add opt-in panel animations by @maria-rcks in pingdotgg/t3code#8830
* feat(projects): automatically pull clean default branches by @maria-rcks in pingdotgg/t3code#9277
* fix(web): show pull request state icons in tabs by @flamboh in pingdotgg/t3code#9112
* feat(providers): add context compaction across harnesses by @maria-rcks in pingdotgg/t3code#8808
* feat(web): add proactive panels by @maria-rcks in pingdotgg/t3code#9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in pingdotgg/t3code#9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in pingdotgg/t3code#9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in pingdotgg/t3code#9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in pingdotgg/t3code#9280
* fix(cursor): honor auto and full access modes by @maria-rcks in pingdotgg/t3code#9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in pingdotgg/t3code#9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in pingdotgg/t3code#9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in pingdotgg/t3code#9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in pingdotgg/t3code#9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in pingdotgg/t3code#9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in pingdotgg/t3code#9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in pingdotgg/t3code#9297


**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1261...v0.0.39-nightly.20260903.1262

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1262
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant