Skip to content

fix(ui): uniform control heights across settings clusters#106898

Merged
steipete merged 1 commit into
mainfrom
claude/settings-polish-pass
Jul 13, 2026
Merged

fix(ui): uniform control heights across settings clusters#106898
steipete merged 1 commit into
mainfrom
claude/settings-polish-pass

Conversation

@steipete

Copy link
Copy Markdown
Contributor

What Problem This Solves

Second polish pass on the settings design language (#106470): controls sitting in the same row or toolbar had mixed heights — text inputs rendered 41px, default buttons 38px, small buttons 33px, icon buttons 30–36px, segmented switches 33px — and eight selects (cron filter popover, model-provider default/fallback pickers, usage session sort) still rendered with the generic .field baseline instead of the design-language control style.

Why This Change Was Made

A DOM audit script measured every control cluster across all 22 settings routes and flagged each cluster whose controls differed by >2px, plus every native-styled form control. Fixes, all at the design-language layer:

  • New --settings-control-height: 32px token; buttons, inputs, selects, and segmented switches inside .settings-row__control, .settings-section__actions, and the cron toolbar all share it. Icon buttons become 32px squares.
  • Segmented switches keep their 2px track inset with buttons filling the inner height (min-height so many-option enums can still wrap).
  • The eight remaining native selects adopt .settings-select.
  • Row control clusters wrap only at mobile widths where they have a definite width — Chromium sizes wrappable shrink-to-fit flex containers to their widest item, which would collapse multi-control clusters on desktop (documented in the stylesheet).

User Impact

Every settings row and toolbar now shows one flush control height; the cron filter popover, model-provider pickers, and usage sort match the rest of the design language. CSS + class-only changes, no behavior changes.

Evidence

Surface Before After
Connection (input + reveal button) before after
Automations toolbar before after
Model provider pickers before after
  • Audit script re-run post-fix: zero height mismatches across all 22 routes (remaining flags are descendant-styled false positives).
  • node scripts/run-vitest.mjs on touched pages (cron, model-providers, usage): 13 files / 129 tests green.
  • Codex autoreview (gpt-5.6-sol, xhigh) on the branch diff: clean, no findings.
  • Visually verified on Connection, Automations, Plugins, Devices, Model Providers, General, Sessions against the mock gateway.

Inputs (41px), buttons (30-38px), and segmented switches (33px) sat at
mixed heights inside the same settings rows and toolbars. All controls
in settings clusters now share --settings-control-height (32px), and
the eight remaining native selects (cron filter popover, model-provider
default/fallback pickers, usage session sort) adopt .settings-select.
Row control clusters wrap only at mobile widths where they have a
definite width (Chromium collapses wrappable shrink-to-fit flex
containers to their widest item).
@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui size: S maintainer Maintainer-authored PR labels Jul 13, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fabca8342d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<label class="field">
<span>${t("modelProviders.add.provider")}</span>
<select
class="settings-select"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep add-provider fields at one height

When the Add provider form is open, this select sits in .model-providers__add-form beside the API-key <input> and Save button, but the new settings-select rule forces the select to --settings-control-height (32px) while the neighboring .field input still keeps the generic 38px height from components.css. That leaves this grid row with the same mixed-height controls this change is trying to eliminate; either size the adjacent input/button through the settings-control rules too or leave this select on the generic field baseline.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. labels Jul 13, 2026
@clawsweeper

clawsweeper Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 13, 2026, 7:39 PM ET / 23:39 UTC.

Summary
Standardizes settings-cluster controls at 32px, applies the settings select style to eight remaining selects, and adjusts responsive wrapping for settings rows and the cron toolbar.

PR surface: Source +60. Total +60 across 6 files.

Reproducibility: not applicable. as a functional bug reproduction: the uneven heights are directly demonstrated by the supplied before images and DOM audit measurements rather than a broken runtime workflow.

Review metrics: none identified.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Risk before merge

  • [P1] The branch is behind current main, and the full required check set was still in progress in the supplied snapshot; refresh review against the final merge result and require the UI checks to finish before landing.

Maintainer options:

  1. Decide the mitigation before merge
    Land the single-token, class-only styling follow-up after the final merge-base refresh and UI checks confirm the representative desktop and mobile settings clusters remain aligned and usable.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • [P2] No concrete repair is identified; the remaining action is routine protected-label maintainer review and completion of the final merge checks.

Security
Cleared: The diff is limited to local CSS and existing element class attributes and introduces no dependency, secret, permission, network, artifact-download, or code-execution change.

Review details

Best possible solution:

Land the single-token, class-only styling follow-up after the final merge-base refresh and UI checks confirm the representative desktop and mobile settings clusters remain aligned and usable.

Do we have a high-confidence way to reproduce the issue?

Not applicable as a functional bug reproduction: the uneven heights are directly demonstrated by the supplied before images and DOM audit measurements rather than a broken runtime workflow.

Is this the best way to solve the issue?

Yes. Centralizing the height in the existing settings design-language stylesheet and applying the existing select class is narrower and less drift-prone than page-specific sizing overrides.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 9e2a6b126900.

Label changes

Label changes:

  • add P3: This is low-risk visual consistency and responsive-layout polish with no reported functional behavior change.
  • add proof: sufficient: Contributor real behavior proof is sufficient. Paired before/after screenshots directly show the visual correction on three representative settings surfaces, supplemented by a 22-route DOM audit and stated visual checks across seven pages.
  • add proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Paired before/after screenshots directly show the visual correction on three representative settings surfaces, supplemented by a 22-route DOM audit and stated visual checks across seven pages.
  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): Paired before/after screenshots directly show the visual correction on three representative settings surfaces, supplemented by a 22-route DOM audit and stated visual checks across seven pages.

Label justifications:

  • P3: This is low-risk visual consistency and responsive-layout polish with no reported functional behavior change.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): Paired before/after screenshots directly show the visual correction on three representative settings surfaces, supplemented by a 22-route DOM audit and stated visual checks across seven pages.
  • proof: sufficient: Contributor real behavior proof is sufficient. Paired before/after screenshots directly show the visual correction on three representative settings surfaces, supplemented by a 22-route DOM audit and stated visual checks across seven pages.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Paired before/after screenshots directly show the visual correction on three representative settings surfaces, supplemented by a 22-route DOM audit and stated visual checks across seven pages.
Evidence reviewed

PR surface:

Source +60. Total +60 across 6 files.

View PR surface stats
Area Files Added Removed Net
Source 6 62 2 +60
Tests 0 0 0 0
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 6 62 2 +60

What I checked:

  • Focused styling change: The branch changes CSS and element classes only: it introduces one settings control-height token, aligns clustered buttons, inputs, selects, icon buttons, and segmented controls, and leaves event handlers and stored state unchanged. (ui/src/styles/settings.css:1, fabca8342dd6)
  • Select migration: Eight existing selects across cron filters, model-provider controls, and usage sorting adopt the already-supported settings-select design-language class without changing their values, disabled state, or change handlers. (ui/src/pages/cron/view.ts:558, fabca8342dd6)
  • Real visual proof: The PR body provides paired before/after images for Connection, Automations, and Model Providers, reports visual checks on seven settings surfaces, and records a post-fix 22-route DOM height audit with no remaining mismatches. (fabca8342dd6)
  • Focused validation: The contributor reports 129 passing tests across 13 touched-page test files, and GitHub's Real behavior proof and security-fast checks completed successfully; the broader required checks were still running in the supplied snapshot. (fabca8342dd6)
  • Feature provenance: The settings design language being refined was introduced by the merged foundational PR refactor(ui): unified settings design language across all Control UI settings surfaces #106470 at merge commit 2ac723282c84286ad3f38aabbd2e70699aafb3c3; this branch is a small follow-up rather than duplicate implementation. (ui/src/styles/settings.css:1, 2ac723282c84)
  • Protected maintainer handling: The live item context includes the protected maintainer label, so ClawSweeper policy requires the PR to remain open for explicit maintainer handling even though the patch appears correct. (fabca8342dd6)

Likely related people:

  • steipete: Authored the merged settings design-language implementation and the current follow-up, making this the strongest available history signal for the affected UI surface. (role: feature introducer and recent area contributor; confidence: high; commits: 2ac723282c84, fabca8342dd6; files: ui/src/styles/settings.css, ui/src/styles/cron.css, ui/src/pages/cron/view.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@steipete
steipete merged commit 345083a into main Jul 13, 2026
134 of 148 checks passed
@steipete
steipete deleted the claude/settings-polish-pass branch July 13, 2026 23:42
wm0018 pushed a commit to wm0018/openclaw that referenced this pull request Jul 14, 2026
…aw#106898)

Inputs (41px), buttons (30-38px), and segmented switches (33px) sat at
mixed heights inside the same settings rows and toolbars. All controls
in settings clusters now share --settings-control-height (32px), and
the eight remaining native selects (cron filter popover, model-provider
default/fallback pickers, usage session sort) adopt .settings-select.
Row control clusters wrap only at mobile widths where they have a
definite width (Chromium collapses wrappable shrink-to-fit flex
containers to their widest item).
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 14, 2026
…aw#106898)

Inputs (41px), buttons (30-38px), and segmented switches (33px) sat at
mixed heights inside the same settings rows and toolbars. All controls
in settings clusters now share --settings-control-height (32px), and
the eight remaining native selects (cron filter popover, model-provider
default/fallback pickers, usage session sort) adopt .settings-select.
Row control clusters wrap only at mobile widths where they have a
definite width (Chromium collapses wrappable shrink-to-fit flex
containers to their widest item).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui maintainer Maintainer-authored PR P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant