feat(appearance): font size setting with Small/Default/Large toggle (closes #833)
* feat(appearance): font size setting with Small/Default/Large toggle Add a font size preference to the Appearance settings pane. Three options (12px/14px/16px) follow the same three-button visual pattern as the Theme picker. Closes #833. - static/style.css: :root[data-font-size=small|large] CSS overrides - static/index.html: boot script applies from localStorage before CSS renders (no FOUC); fontSizePickerGrid HTML in Appearance pane - static/boot.js: _applyFontSize(), _pickFontSize(), _syncFontSizePicker() - static/panels.js: loadSettingsPanel syncs picker on open; _revertSettingsPreview restores on discard - static/i18n.js: settings_label_font_size + font_size_{small,default,large} keys in all 6 locales (en, ru, es, de, zh, zh-Hant) - tests/test_font_size_setting.py: 14 new tests * fix(ui): remove duplicate font-size picker + correct CHANGELOG issue ref Two small fixes on the font size feature: 1. Duplicate HTML IDs — the picker block was injected into BOTH settingsPaneAppearance (correct, next to Theme/Skin) AND settingsPanePreferences (accidental copy-paste). Duplicate IDs #fontSizePickerGrid and #settingsFontSize violate HTML spec and break the _syncFontSizePicker visual sync which reads via document.querySelectorAll('#fontSizePickerGrid .font-size-pick-btn') — only the first grid would update its highlight, leaving the second stale. $('settingsFontSize') via getElementById also always returns the first match, so the second hidden input never reflected the user's choice. Removed the Preferences-pane copy. The Appearance-pane copy is the one the PR description describes and is the correct home for it (next to Theme and Skin). 2. CHANGELOG trailer said `Closes #830.` but #830 is the session-search autocomplete PR — this feature closes #833. Fixed. Added two regression tests: - test_font_size_picker_not_duplicated: asserts each ID appears exactly once in index.html. - test_font_size_picker_lives_in_appearance_pane: asserts the picker sits inside settingsPaneAppearance and not any other pane. Full suite: 1754 passed, 0 failures. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: nesquena-hermes <nesquena-hermes@users.noreply.github.com> Co-authored-by: Nathan Esquenazi <nesquena@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -192,6 +192,10 @@ const LOCALES = {
|
||||
settings_label_send_key: 'Send Key',
|
||||
settings_label_theme: 'Theme',
|
||||
settings_label_skin: 'Skin',
|
||||
settings_label_font_size: 'Font size',
|
||||
font_size_small: 'Small',
|
||||
font_size_default: 'Default',
|
||||
font_size_large: 'Large',
|
||||
settings_label_language: 'Language',
|
||||
settings_label_token_usage: 'Show token usage',
|
||||
settings_label_sidebar_density: 'Sidebar density',
|
||||
@@ -575,6 +579,10 @@ const LOCALES = {
|
||||
model_search_placeholder: 'Поиск моделей…',
|
||||
reference_only_label: 'Только справка',
|
||||
settings_label_skin: 'Скин',
|
||||
settings_label_font_size: 'Размер шрифта',
|
||||
font_size_small: 'Маленький',
|
||||
font_size_default: 'Стандарт',
|
||||
font_size_large: 'Большой',
|
||||
workspace_empty_dir: 'Это рабочее пространство пусто.',
|
||||
workspace_empty_no_path: 'Рабочее пространство не выбрано. Настройте его в Настройки → Рабочее пространство.',
|
||||
available_personalities: 'Доступные личности:',
|
||||
@@ -1084,6 +1092,10 @@ const LOCALES = {
|
||||
settings_label_send_key: 'Tecla de envío',
|
||||
settings_label_theme: 'Tema',
|
||||
settings_label_skin: 'Piel',
|
||||
settings_label_font_size: 'Tamaño de fuente',
|
||||
font_size_small: 'Pequeño',
|
||||
font_size_default: 'Por defecto',
|
||||
font_size_large: 'Grande',
|
||||
settings_label_language: 'Idioma',
|
||||
settings_label_token_usage: 'Mostrar uso de tokens',
|
||||
settings_label_sidebar_density: 'Densidad de la barra lateral',
|
||||
@@ -1516,6 +1528,10 @@ const LOCALES = {
|
||||
settings_label_send_key: 'Sende-Taste',
|
||||
settings_label_theme: 'Theme',
|
||||
settings_label_skin: 'Skin',
|
||||
settings_label_font_size: 'Font size',
|
||||
font_size_small: 'Small',
|
||||
font_size_default: 'Default',
|
||||
font_size_large: 'Large',
|
||||
settings_label_language: 'Sprache',
|
||||
settings_label_token_usage: 'Token-Verbrauch anzeigen',
|
||||
settings_label_sidebar_density: 'Seitenleistendichte',
|
||||
@@ -1749,6 +1765,10 @@ const LOCALES = {
|
||||
settings_label_send_key: '\u53d1\u9001\u5feb\u6377\u952e',
|
||||
settings_label_theme: '\u4e3b\u9898',
|
||||
settings_label_skin: '\u76ae\u80a4',
|
||||
settings_label_font_size: '\u5b57\u4f53\u5927\u5c0f',
|
||||
font_size_small: '\u5c0f',
|
||||
font_size_default: '\u9ed8\u8ba4',
|
||||
font_size_large: '\u5927',
|
||||
settings_label_language: '\u8bed\u8a00',
|
||||
settings_label_token_usage: '\u663e\u793a token \u7528\u91cf',
|
||||
settings_label_sidebar_density: '侧边栏密度',
|
||||
@@ -2165,6 +2185,10 @@ const LOCALES = {
|
||||
settings_label_send_key: '\u767c\u9001\u5feb\u6377\u9375',
|
||||
settings_label_theme: '\u4e3b\u984c',
|
||||
settings_label_skin: '\u76ae\u819a',
|
||||
settings_label_font_size: '\u5b57\u9ad4\u5927\u5c0f',
|
||||
font_size_small: '\u5c0f',
|
||||
font_size_default: '\u9810\u8a2d',
|
||||
font_size_large: '\u5927',
|
||||
settings_label_language: '\u8a9d\u8a00',
|
||||
settings_label_token_usage: '\u986f\u793a token \u7528\u91cf',
|
||||
settings_label_sidebar_density: '側邊欄密度',
|
||||
|
||||
Reference in New Issue
Block a user