Skip to content

Commit 7069b2a

Browse files
committed
feat: Added adjustable font size and line height support for desktop and web.
Signed-off-by: Paolo Insogna <paolo@cowtech.it>
1 parent ca8f578 commit 7069b2a

51 files changed

Lines changed: 270 additions & 71794 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/app/src/components/settings-general.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Component, Show, createMemo, createResource, onMount, type JSX } from "
22
import { createStore } from "solid-js/store"
33
import { Button } from "@opencode-ai/ui/button"
44
import { Icon } from "@opencode-ai/ui/icon"
5+
import { NumberStepper } from "@opencode-ai/ui/number-stepper"
56
import { Select } from "@opencode-ai/ui/select"
67
import { Switch } from "@opencode-ai/ui/switch"
78
import { TextField } from "@opencode-ai/ui/text-field"
@@ -584,6 +585,38 @@ export const SettingsGeneral: Component = () => {
584585
/>
585586
</div>
586587
</SettingsRow>
588+
589+
<SettingsRow
590+
title={language.t("settings.general.row.fontSize.title")}
591+
description={language.t("settings.general.row.fontSize.description")}
592+
>
593+
<div data-action="settings-font-size">
594+
<NumberStepper
595+
value={settings.appearance.fontSize()}
596+
onChange={settings.appearance.setFontSize}
597+
min={10}
598+
max={24}
599+
step={1}
600+
format={(value) => value.toFixed(0)}
601+
/>
602+
</div>
603+
</SettingsRow>
604+
605+
<SettingsRow
606+
title={language.t("settings.general.row.lineHeight.title")}
607+
description={language.t("settings.general.row.lineHeight.description")}
608+
>
609+
<div data-action="settings-line-height">
610+
<NumberStepper
611+
value={settings.appearance.lineHeight()}
612+
onChange={settings.appearance.setLineHeight}
613+
min={1.2}
614+
max={4}
615+
step={0.1}
616+
format={(value) => value.toFixed(1)}
617+
/>
618+
</div>
619+
</SettingsRow>
587620
</SettingsList>
588621
</div>
589622
)

packages/app/src/context/settings.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export interface Settings {
3838
}
3939
appearance: {
4040
fontSize: number
41+
lineHeight: number
4142
mono: string
4243
sans: string
4344
terminal: string
@@ -123,6 +124,7 @@ const defaultSettings: Settings = {
123124
},
124125
appearance: {
125126
fontSize: 14,
127+
lineHeight: 1.6,
126128
mono: "",
127129
sans: "",
128130
terminal: "",
@@ -158,8 +160,22 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
158160
createEffect(() => {
159161
if (typeof document === "undefined") return
160162
const root = document.documentElement
163+
const fontSize = store.appearance?.fontSize ?? defaultSettings.appearance.fontSize
164+
const lineHeight = store.appearance?.lineHeight ?? defaultSettings.appearance.lineHeight
161165
root.style.setProperty("--font-family-mono", monoFontFamily(store.appearance?.mono))
162166
root.style.setProperty("--font-family-sans", sansFontFamily(store.appearance?.sans))
167+
root.style.setProperty("--font-size-base", `${fontSize}px`)
168+
root.style.setProperty("--font-size-x-small", `calc(${fontSize}px * 0.85)`)
169+
root.style.setProperty("--font-size-small", `calc(${fontSize}px * 0.9)`)
170+
root.style.setProperty("--font-size-large", `calc(${fontSize}px * 1.2)`)
171+
root.style.setProperty("--font-size-x-large", `calc(${fontSize}px * 1.4)`)
172+
root.style.setProperty("--font-size-mono", `${fontSize}px`)
173+
root.style.setProperty("--line-height-normal", `${lineHeight * 0.8125}`)
174+
root.style.setProperty("--line-height-large", `${lineHeight * 0.9375}`)
175+
root.style.setProperty("--line-height-x-large", `${lineHeight * 1.125}`)
176+
root.style.setProperty("--line-height-2x-large", `${lineHeight * 1.25}`)
177+
root.style.setProperty("--line-height-mono", `${lineHeight}`)
178+
root.style.setProperty("--line-height-mono-px", `${fontSize * lineHeight}px`)
163179
})
164180

165181
createEffect(() => {
@@ -248,6 +264,10 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
248264
setFontSize(value: number) {
249265
setStore("appearance", "fontSize", value)
250266
},
267+
lineHeight: withFallback(() => store.appearance?.lineHeight, defaultSettings.appearance.lineHeight),
268+
setLineHeight(value: number) {
269+
setStore("appearance", "lineHeight", value)
270+
},
251271
font: withFallback(() => store.appearance?.mono, defaultSettings.appearance.mono),
252272
setFont(value: string) {
253273
setStore("appearance", "mono", value.trim() ? value : "")

packages/app/src/i18n/ar.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,10 @@ export const dict = {
573573
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
574574
"settings.general.row.uiFont.title": "خط الواجهة",
575575
"settings.general.row.uiFont.description": "خصّص الخط المستخدم في الواجهة بأكملها",
576+
"settings.general.row.fontSize.title": "حجم الخط",
577+
"settings.general.row.fontSize.description": "خصّص حجم الخط الأساسي المستخدم في التطبيق بأكمله",
578+
"settings.general.row.lineHeight.title": "ارتفاع السطر",
579+
"settings.general.row.lineHeight.description": "خصّص ارتفاع السطر لنص وبرمجيات أكثر قابلية للقراءة",
576580
"settings.general.row.followup.title": "سلوك المتابعة",
577581
"settings.general.row.followup.description": "اختر ما إذا كانت طلبات المتابعة توجه فورًا أو تنتظر في قائمة انتظار",
578582
"settings.general.row.followup.option.queue": "قائمة انتظار",

packages/app/src/i18n/br.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,10 @@ export const dict = {
580580
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
581581
"settings.general.row.uiFont.title": "Fonte da interface",
582582
"settings.general.row.uiFont.description": "Personalize a fonte usada em toda a interface",
583+
"settings.general.row.fontSize.title": "Tamanho da fonte",
584+
"settings.general.row.fontSize.description": "Personalize o tamanho de fonte base usado em todo o app",
585+
"settings.general.row.lineHeight.title": "Altura da linha",
586+
"settings.general.row.lineHeight.description": "Personalize a altura da linha para texto e código legíveis",
583587
"settings.general.row.followup.title": "Comportamento de acompanhamento",
584588
"settings.general.row.followup.description":
585589
"Escolha se os prompts de acompanhamento orientam imediatamente ou esperam na fila",

packages/app/src/i18n/bs.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,10 @@ export const dict = {
645645
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
646646
"settings.general.row.uiFont.title": "UI font",
647647
"settings.general.row.uiFont.description": "Prilagodi font koji se koristi u cijelom interfejsu",
648+
"settings.general.row.fontSize.title": "Veličina fonta",
649+
"settings.general.row.fontSize.description": "Prilagodi osnovnu veličinu fonta koja se koristi u cijeloj aplikaciji",
650+
"settings.general.row.lineHeight.title": "Visina reda",
651+
"settings.general.row.lineHeight.description": "Prilagodi visinu reda za čitljiv tekst i kod",
648652
"settings.general.row.followup.title": "Ponašanje nadovezivanja",
649653
"settings.general.row.followup.description": "Odaberi da li upiti nadovezivanja usmjeravaju odmah ili čekaju u redu",
650654
"settings.general.row.followup.option.queue": "Red čekanja",

packages/app/src/i18n/da.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,10 @@ export const dict = {
640640
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
641641
"settings.general.row.uiFont.title": "UI-skrifttype",
642642
"settings.general.row.uiFont.description": "Tilpas skrifttypen, der bruges i hele brugerfladen",
643+
"settings.general.row.fontSize.title": "Skriftstørrelse",
644+
"settings.general.row.fontSize.description": "Tilpas den grundlæggende skriftstørrelse i hele appen",
645+
"settings.general.row.lineHeight.title": "Linjehøjde",
646+
"settings.general.row.lineHeight.description": "Tilpas linjehøjden for læsbar tekst og kode",
643647
"settings.general.row.followup.title": "Opfølgningsadfærd",
644648
"settings.general.row.followup.description": "Vælg om opfølgende forespørgsler skal styre straks eller vente i kø",
645649
"settings.general.row.followup.option.queue": "Kø",

packages/app/src/i18n/de.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,10 @@ export const dict = {
590590
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
591591
"settings.general.row.uiFont.title": "UI-Schriftart",
592592
"settings.general.row.uiFont.description": "Die im gesamten Interface verwendete Schriftart anpassen",
593+
"settings.general.row.fontSize.title": "Schriftgröße",
594+
"settings.general.row.fontSize.description": "Die im gesamten App verwendete Basisschriftgröße anpassen",
595+
"settings.general.row.lineHeight.title": "Zeilenhöhe",
596+
"settings.general.row.lineHeight.description": "Die Zeilenhöhe für gut lesbaren Text und Code anpassen",
593597
"settings.general.row.followup.title": "Verhalten bei Folgefragen",
594598
"settings.general.row.followup.description":
595599
"Wählen Sie, ob Folgefragen sofort steuern oder in einer Warteschlange warten",

packages/app/src/i18n/en.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,10 @@ export const dict = {
749749
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
750750
"settings.general.row.uiFont.title": "UI Font",
751751
"settings.general.row.uiFont.description": "Customise the font used throughout the interface",
752+
"settings.general.row.fontSize.title": "Font Size",
753+
"settings.general.row.fontSize.description": "Customise the base font size used throughout the app",
754+
"settings.general.row.lineHeight.title": "Line Height",
755+
"settings.general.row.lineHeight.description": "Customise line height for readable text and code",
752756
"settings.general.row.followup.title": "Follow-up behavior",
753757
"settings.general.row.followup.description": "Choose whether follow-up prompts steer immediately or wait in a queue",
754758
"settings.general.row.followup.option.queue": "Queue",

packages/app/src/i18n/es.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,10 @@ export const dict = {
648648
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
649649
"settings.general.row.uiFont.title": "Fuente de la interfaz",
650650
"settings.general.row.uiFont.description": "Personaliza la fuente usada en toda la interfaz",
651+
"settings.general.row.fontSize.title": "Tamaño de fuente",
652+
"settings.general.row.fontSize.description": "Personaliza el tamaño de fuente base usado en toda la app",
653+
"settings.general.row.lineHeight.title": "Altura de línea",
654+
"settings.general.row.lineHeight.description": "Personaliza la altura de línea para texto y código legibles",
651655
"settings.general.row.followup.title": "Comportamiento de seguimiento",
652656
"settings.general.row.followup.description":
653657
"Elige si los prompts de seguimiento se dirigen inmediatamente o esperan en una cola",

packages/app/src/i18n/fr.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,10 @@ export const dict = {
587587
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
588588
"settings.general.row.uiFont.title": "Police de l'interface",
589589
"settings.general.row.uiFont.description": "Personnaliser la police utilisée dans toute l'interface",
590+
"settings.general.row.fontSize.title": "Taille de police",
591+
"settings.general.row.fontSize.description": "Personnaliser la taille de police de base utilisée dans toute l'app",
592+
"settings.general.row.lineHeight.title": "Hauteur de ligne",
593+
"settings.general.row.lineHeight.description": "Personnaliser la hauteur de ligne pour un texte et du code lisibles",
590594
"settings.general.row.followup.title": "Comportement de suivi",
591595
"settings.general.row.followup.description":
592596
"Choisissez si les messages de suivi dirigent immédiatement ou attendent dans une file d'attente",

0 commit comments

Comments
 (0)