Skip to content

feat(ui): add browser-local Control UI text size setting#81487

Merged
BunsDev merged 2 commits into
mainfrom
meow/control-ui-text-scale
May 14, 2026
Merged

feat(ui): add browser-local Control UI text size setting#81487
BunsDev merged 2 commits into
mainfrom
meow/control-ui-text-scale

Conversation

@BunsDev

@BunsDev BunsDev commented May 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds a browser-local textScale setting with bounded stops (90%, 100%, 110%, 125%, 140%) persisted in Control UI settings.
  • Exposes Text size controls in both Appearance and Quick Settings.
  • Applies scale variables to chat message text, thinking text, composer text, chat sidebars, and tool-card text while keeping text inputs at least 16px to avoid mobile Safari focus zoom.
  • Documents the setting and adds the changelog entry.

Fixes #8547.

Triage / duplicates

Security / bug check

  • The new value is numeric and normalized to fixed enum stops before use or persistence.
  • No gateway config schema or server-side typography policy is added.
  • No user-provided CSS, HTML, URL, or script content is introduced.
  • Auth tokens remain session-only; this only extends browser-local UI preferences.

Verification

  • pnpm docs:list
  • git diff --check
  • pnpm format:docs:check
  • pnpm exec oxfmt --check --threads=1 ui/src/ui/storage.ts ui/src/ui/app-settings.ts ui/src/ui/app.ts ui/src/ui/app-view-state.ts ui/src/ui/app-render.ts ui/src/ui/views/config.ts ui/src/ui/views/config-quick.ts ui/src/ui/storage.node.test.ts ui/src/ui/app-settings.test.ts ui/src/ui/views/config-quick.test.ts ui/src/ui/views/config.browser.test.ts ui/src/ui/app-render.assistant-avatar.test.ts ui/src/styles/base.css ui/src/styles/chat/layout.css ui/src/styles/chat/sidebar.css ui/src/styles/chat/text.css ui/src/styles/chat/text.test.ts ui/src/styles/chat/tool-cards.css ui/src/styles/config.css ui/src/styles/chat/layout.test.ts
  • pnpm test ui/src/ui/app-settings.test.ts ui/src/ui/storage.node.test.ts ui/src/ui/views/config-quick.test.ts ui/src/ui/views/config.browser.test.ts ui/src/styles/chat/layout.test.ts ui/src/styles/chat/text.test.ts (passed: 95 files, 974 tests)
  • Blacksmith Testbox pnpm check:changed: https://github.com/openclaw/openclaw/actions/runs/25815015219
    • Passed: conflict markers, changelog attributions, extension wildcard guards, duplicate coverage, dependency pin guard, core typecheck.
    • Known gap: core test typecheck fails in untouched src/plugins/registry.runtime-config.test.ts on current head (PluginRuntime mock shape and missing configSchema in fixture). No changed files are implicated.

Local environment note

This worktree did not have node_modules; pnpm install was retried and blocked by the repo minimumReleaseAge guard for recently published packages (@pierre/[email protected], then [email protected]). I did not bypass that guard. Local focused tests used the canonical checkout's existing dependency tree; Testbox provided the clean CI-style dependency environment for broad changed checks.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: web-ui App: web-ui size: M maintainer Maintainer-authored PR labels May 13, 2026
@clawsweeper

clawsweeper Bot commented May 13, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

Summary
The PR adds a browser-local textScale Control UI setting, Appearance and Quick Settings controls, CSS text-scale variables for chat/sidebar/tool-card surfaces, tests, docs, and a changelog entry.

Reproducibility: not applicable. this is a feature PR, not a bug reproduction. Current-main source inspection and the linked issue discussion give a high-confidence absence check for the requested Control UI text-size setting.

Real behavior proof
Not applicable: Not applicable because this is a MEMBER, maintainer-labeled PR; the external-contributor real-behavior-proof gate does not apply.

Next step before merge
Protected maintainer-labeled MEMBER PR with no narrow automated repair finding; maintainer review and CI gating are the next action.

Security
Cleared: The diff is limited to numeric enum-normalized browser-local UI settings, CSS, docs, tests, and changelog text, with no concrete security or supply-chain concern found.

Review details

Best possible solution:

Land the bounded browser-local text-scale setting after normal maintainer review and green relevant checks, keeping server-side gateway typography config out unless explicitly requested.

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

Not applicable: this is a feature PR, not a bug reproduction. Current-main source inspection and the linked issue discussion give a high-confidence absence check for the requested Control UI text-size setting.

Is this the best way to solve the issue?

Yes, as a PR direction: the browser-local UiSettings plus bounded CSS-variable approach matches the latest member guidance and avoids a new gateway config contract. Final merge should still wait for maintainer review and clean relevant checks.

What I checked:

  • live_pr_state: Live PR API data shows this PR is open, authored by BunsDev with author association MEMBER, labeled maintainer, and based on current main c3e5d85ce1df7bd65c733053bf5e388f684bcc41; protected-label policy keeps it open for explicit maintainer handling. (e38851b99644)
  • feature_diff_storage: The PR patch adds bounded text scale stops, a TextScaleStop type, normalization, default loading, and normalized persistence in Control UI settings. (ui/src/ui/storage.ts:40, e38851b99644)
  • feature_diff_rendering: The PR patch wires textScale and setTextScale through app rendering into full Appearance and Quick Settings controls. (ui/src/ui/views/config.ts:98, e38851b99644)
  • feature_diff_css: The PR patch defines --control-ui-text-scale and derived text-size variables, then applies them to chat message/thinking text, composer inputs, sidebars, and tool-card text while keeping composer text-entry size at least 16px. (ui/src/styles/base.css:85, e38851b99644)
  • linked_issue_context: The linked feature request discussion includes a MEMBER comment recommending exactly a browser-local Control UI text-scale setting in UiSettings, exposed in Appearance and Quick Settings, with bounded CSS variables and no first-pass gateway config contract.
  • current_main_absence: Current main still has UiSettings fields for gateway/session/theme/chat/sidebar/nav/roundness/custom-theme/locale but no text-size/text-scale setting before this PR. (ui/src/ui/storage.ts:53, c3e5d85ce1df)

Likely related people:

  • BunsDev: Prior merged GitHub file history shows BunsDev-authored browser-local Control UI settings, Appearance, Quick Settings, docs, and chat styling work on the same surfaces; BunsDev also provided the latest member guidance on the linked feature request. (role: recent Control UI settings and Appearance contributor; confidence: high; commits: 14249827928e, e3ad82d86df0, ead8be96fdd6; files: ui/src/ui/views/config-quick.ts, ui/src/ui/views/config.ts, ui/src/ui/storage.ts)
  • steipete: Local blame for the central current-main UI settings/rendering/style files resolves through a Peter Steinberger commit, and broader Control UI history includes repeated adjacent UI and docs work. (role: recent current-main file-history and adjacent Control UI contributor; confidence: medium; commits: 96c0309db94d, dfa80e1e5d06, 20a7dd8a8053; files: ui/src/ui/storage.ts, ui/src/ui/views/config.ts, ui/src/ui/views/config-quick.ts)
  • vincentkoc: Related iOS Safari focus-zoom discussion and PR history route adjacent webchat/input behavior through Vincent Koc, which matters because this PR intentionally preserves the 16px composer threshold while leaving the narrower input-zoom issue separate. (role: adjacent webchat and iOS focus-zoom follow-up contributor; confidence: medium; commits: 6b6dcafcee9c, 67dd20d13dd6, 41275270ddca; files: ui/src/styles/chat/layout.css, ui/src/styles/components.css, ui/src/styles/config.css)

Remaining risk / open question:

  • Live PR head checks are not fully green; broad failures should be resolved or explicitly accepted before merge.
  • No live browser/mobile Safari recording was inspected in this read-only pass; the code preserves the composer input threshold, while broader form-input iOS behavior remains tracked separately.

Codex review notes: model gpt-5.5, reasoning high; reviewed against c3e5d85ce1df.

@BunsDev

BunsDev commented May 14, 2026

Copy link
Copy Markdown
Contributor Author

Merge verification for PR #81487 on exact head c175170c00af3e9015b8770af8c406a26448c2bb.

Local proof:

git fetch origin main meow/control-ui-text-scale
git merge --ff-only origin/meow/control-ui-text-scale
git diff --check origin/main...HEAD

Result: git diff --check origin/main...HEAD passed. The effective PR diff is still limited to the 22 Control UI text-scale files, docs, tests, and changelog.

GitHub proof:

Known proof gap: I did not rerun local Vitest after the remote branch was refreshed because this worktree has no node_modules; the exact-head GitHub CI run covered the focused UI lane and broader required gates.

@BunsDev
BunsDev merged commit 52370c5 into main May 14, 2026
87 checks passed
@BunsDev
BunsDev deleted the meow/control-ui-text-scale branch May 14, 2026 00:18
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 docs Improvements or additions to documentation maintainer Maintainer-authored PR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature Request: Font Size Configuration for Web UI

1 participant