Title: Add a "Chat text size" setting (Small / Default / Large) to Appearance by DragonnZhang · Pull Request #65 · modelstudioai/openwork · GitHub
Open Graph Title: Add a "Chat text size" setting (Small / Default / Large) to Appearance by DragonnZhang · Pull Request #65 · modelstudioai/openwork
X Title: Add a "Chat text size" setting (Small / Default / Large) to Appearance by DragonnZhang · Pull Request #65 · modelstudioai/openwork
Description: What & why Adds a "Chat text size" segmented control to Settings → Appearance → Interface (below "Reduce motion") with Small / Default / Large. It scales the conversation transcript's typography without resizing the rest of the app — the sidebar, top bar, composer, and icons keep their native size. This is distinct from the OS-level window zoom already wired to the View menu (webContents.setZoomFactor), which scales the entire UI and is a transient window zoom rather than a persisted appearance preference. A text-size control that scales only the reading text is a recurring, unmet ask in comparable desktop clients (Claude Desktop's "Chat font" + anthropics/claude-code #50543 / #48887; ChatGPT desktop font-size requests). Closes #64 How it works Renderer-only, no qwen-code backend involvement — mirrors the merged ReduceMotionContext idiom: ChatTextSizeProvider (context/ChatTextSizeContext.tsx) persists the choice in localStorage (craft-chat-text-size) and reflects it onto as data-chat-text-size="small|medium|large". Wired in main.tsx. Global CSS (index.css) maps that attribute to a --chat-font-scale custom property (0.9 / 1 / 1.15). The transcript container in ChatDisplay.tsx carries a .chat-text-scope class with font-size: calc(1em * var(--chat-font-scale)). Because it is em-relative, Default (medium) is exactly neutral — no visual change for existing users — and only the conversation's body copy scales up/down. SettingsSegmentedControl gained an optional testId prop (adds data-testid on the group and data-value on each option) so the control can be targeted independently of its localized label. 5 new i18n keys added across all 7 locales. Verification All checks were run against the branch and compared to a clean main baseline: Check Result bun run typecheck:all Zero delta — identical 11 pre-existing tsc errors (all in files this PR doesn't touch); none reference any changed file bun test Zero delta — the 56 pre-existing failing-test lines are byte-identical between main and this branch bun run lint:i18n:parity ✅ i18n parity OK (6 locales, 1549 keys each) bun run electron:build:renderer ✅ builds successfully (contains all of this PR's code) bun run electron:build:main ⚠️ fails identically on main and this branch — pre-existing broken libsignal/@whiskeysockets/baileys install in the WhatsApp worker, unrelated to this renderer-only change CDP assertion e2e/assertions/chat-text-size.assert.ts drives the real control over CDP and asserts, at each of Default → Large → Small → Default: the selected segment's aria-checked, data-chat-text-size on , the resolved --chat-font-scale (1 / 1.15 / 0.9), the persisted localStorage value, and the computed font-size of a probe element carrying the real .chat-text-scope class — asserting the Large/Default ratio ≈ 1.15 and Small/Default ≈ 0.9 (a real pixel-level effect, not just an attribute flip). The assertion could not be executed in this environment: launching Electron requires downloading the Electron runtime binary, and that host is blocked by the sandbox's egress policy (HTTP 403) — the same infrastructure limitation documented on the merged #51. xvfb is present; only the binary fetch is blocked. The assertion is written to run under the existing bun run e2e harness once an environment with the Electron binary is available. Scope Frontend only: apps/electron (renderer) + packages/shared locale JSON. No backend / runtime changes. Generated by Claude Code
Open Graph Description: What & why Adds a "Chat text size" segmented control to Settings → Appearance → Interface (below "Reduce motion") with Small / Default / Large. It scales the conversation tr...
X Description: What & why Adds a "Chat text size" segmented control to Settings → Appearance → Interface (below "Reduce motion") with Small / Default / Large. It scales...
Opengraph URL: https://github.com/modelstudioai/openwork/pull/65
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:ef3f42d1-373d-f2b8-aae1-4c2a8951878c |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | C2FA:1F28A:2696E9:3614EE:6A546D23 |
| html-safe-nonce | 657867685a601e6f218d566f94b99d72dd9b2d87be59396ece034c3a1e754f51 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDMkZBOjFGMjhBOjI2OTZFOTozNjE0RUU6NkE1NDZEMjMiLCJ2aXNpdG9yX2lkIjoiODEzMTg1NDI5NDE4ODMyMjA4MyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | b29fd67591c2255f15849492b897aed746edb990698d65937f360b0e2f8b0a0c |
| hovercard-subject-tag | pull_request:4003292752 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/modelstudioai/openwork/pull/65/files |
| twitter:image | https://avatars.githubusercontent.com/u/52599892?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/52599892?s=400&v=4 |
| og:image:alt | What & why Adds a "Chat text size" segmented control to Settings → Appearance → Interface (below "Reduce motion") with Small / Default / Large. It scales the conversation tr... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/modelstudioai/openwork git https://github.com/modelstudioai/openwork.git |
| octolytics-dimension-user_id | 283556804 |
| octolytics-dimension-user_login | modelstudioai |
| octolytics-dimension-repository_id | 1256697754 |
| octolytics-dimension-repository_nwo | modelstudioai/openwork |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1256697754 |
| octolytics-dimension-repository_network_root_nwo | modelstudioai/openwork |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 6d28624802c2f7d9500239dd6870ed7031b7353b |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width