| author | |
| committer | |
| log | 5e828bf3de1c86d85afdd91a02cc4ca1a38d4aef |
| tree | a6c888f5c944d7e3c1a3001b4d3bc0436b2a2fb5 |
| parent | a21c0d724684fe3e1775014fa0dad14e483c8315 |
| signature | Signed by PGP key B5690EEEBB952194 |
2 files changed, 10 insertions(+), 17 deletions(-)
apps/mobile/src/lib/appearancePreferences.test.ts+6-13| ... | @@ -2,11 +2,7 @@ import { describe, expect, it } from "vite-plus/test"; | ... | @@ -2,11 +2,7 @@ import { describe, expect, it } from "vite-plus/test"; |
| 2 | 2 | ||
| 3 | import { | 3 | import { |
| 4 | DEFAULT_BASE_FONT_SIZE, | 4 | DEFAULT_BASE_FONT_SIZE, |
| 5 | deriveCodeFontSize, | ||
| 6 | deriveTerminalFontSize, | ||
| 7 | normalizeBaseFontSize, | 5 | normalizeBaseFontSize, |
| 8 | normalizeCodeFontSize, | ||
| 9 | normalizeCodeWordBreak, | ||
| 10 | resolveAppearance, | 6 | resolveAppearance, |
| 11 | resolveAppearancePreferences, | 7 | resolveAppearancePreferences, |
| 12 | resolveMarkdownFontSizes, | 8 | resolveMarkdownFontSizes, |
| ... | @@ -48,10 +44,8 @@ describe("appearancePreferences", () => { | ... | @@ -48,10 +44,8 @@ describe("appearancePreferences", () => { |
| 48 | expect(appearance.isCodeFontSizeCustom).toBe(false); | 44 | expect(appearance.isCodeFontSizeCustom).toBe(false); |
| 49 | 45 | ||
| 50 | const scaled = resolveAppearance(resolveAppearancePreferences({ baseFontSize: 22 })); | 46 | const scaled = resolveAppearance(resolveAppearancePreferences({ baseFontSize: 22 })); |
| 51 | expect(scaled.terminalFontSize).toBe(deriveTerminalFontSize(22)); | 47 | expect(scaled.terminalFontSize).toBe(14); |
| 52 | expect(scaled.codeFontSize).toBe(deriveCodeFontSize(22)); | 48 | expect(scaled.codeFontSize).toBe(17); |
| 53 | expect(scaled.terminalFontSize).toBeGreaterThan(10); | ||
| 54 | expect(scaled.codeFontSize).toBeGreaterThan(11); | ||
| 55 | }); | 49 | }); |
| 56 | 50 | ||
| 57 | it("applies explicit overrides over derived values", () => { | 51 | it("applies explicit overrides over derived values", () => { |
| ... | @@ -67,8 +61,8 @@ describe("appearancePreferences", () => { | ... | @@ -67,8 +61,8 @@ describe("appearancePreferences", () => { |
| 67 | it("clamps base and code font sizes", () => { | 61 | it("clamps base and code font sizes", () => { |
| 68 | expect(normalizeBaseFontSize(4)).toBe(11); | 62 | expect(normalizeBaseFontSize(4)).toBe(11); |
| 69 | expect(normalizeBaseFontSize(30)).toBe(22); | 63 | expect(normalizeBaseFontSize(30)).toBe(22); |
| 70 | expect(normalizeCodeFontSize(4)).toBe(8); | 64 | expect(resolveAppearancePreferences({ codeFontSize: 4 }).codeFontSize).toBe(8); |
| 71 | expect(normalizeCodeFontSize(30)).toBe(18); | 65 | expect(resolveAppearancePreferences({ codeFontSize: 30 }).codeFontSize).toBe(18); |
| 72 | }); | 66 | }); |
| 73 | 67 | ||
| 74 | it("steps terminal font size within bounds", () => { | 68 | it("steps terminal font size within bounds", () => { |
| ... | @@ -92,9 +86,8 @@ describe("appearancePreferences", () => { | ... | @@ -92,9 +86,8 @@ describe("appearancePreferences", () => { |
| 92 | }); | 86 | }); |
| 93 | }); | 87 | }); |
| 94 | 88 | ||
| 95 | it("defaults code word break to false", () => { | 89 | it("keeps explicit code word break enabled", () => { |
| 96 | expect(normalizeCodeWordBreak(undefined)).toBe(false); | 90 | expect(resolveAppearancePreferences({ codeWordBreak: true }).codeWordBreak).toBe(true); |
| 97 | expect(normalizeCodeWordBreak(true)).toBe(true); | ||
| 98 | }); | 91 | }); |
| 99 | 92 | ||
| 100 | it("returns the authored text scale at the 16pt default", () => { | 93 | it("returns the authored text scale at the 16pt default", () => { |
apps/mobile/src/lib/appearancePreferences.ts+4-4| ... | @@ -75,7 +75,7 @@ export function normalizeBaseFontSize(value: number | null | undefined): number | ... | @@ -75,7 +75,7 @@ export function normalizeBaseFontSize(value: number | null | undefined): number |
| 75 | return Math.min(MAX_BASE_FONT_SIZE, Math.max(MIN_BASE_FONT_SIZE, Math.round(value))); | 75 | return Math.min(MAX_BASE_FONT_SIZE, Math.max(MIN_BASE_FONT_SIZE, Math.round(value))); |
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | export function normalizeCodeFontSize(value: number | null | undefined): number { | 78 | function normalizeCodeFontSize(value: number | null | undefined): number { |
| 79 | if (typeof value !== "number" || !Number.isFinite(value)) { | 79 | if (typeof value !== "number" || !Number.isFinite(value)) { |
| 80 | return DEFAULT_CODE_FONT_SIZE; | 80 | return DEFAULT_CODE_FONT_SIZE; |
| 81 | } | 81 | } |
| ... | @@ -83,18 +83,18 @@ export function normalizeCodeFontSize(value: number | null | undefined): number | ... | @@ -83,18 +83,18 @@ export function normalizeCodeFontSize(value: number | null | undefined): number |
| 83 | return Math.min(MAX_CODE_FONT_SIZE, Math.max(MIN_CODE_FONT_SIZE, Math.round(value))); | 83 | return Math.min(MAX_CODE_FONT_SIZE, Math.max(MIN_CODE_FONT_SIZE, Math.round(value))); |
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | export function normalizeCodeWordBreak(value: boolean | null | undefined): boolean { | 86 | function normalizeCodeWordBreak(value: boolean | null | undefined): boolean { |
| 87 | return value === true; | 87 | return value === true; |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | /** Terminal size derived from base: 10.5pt at base 16, snapped to 0.5pt steps. */ | 90 | /** Terminal size derived from base: 10.5pt at base 16, snapped to 0.5pt steps. */ |
| 91 | export function deriveTerminalFontSize(baseFontSize: number): number { | 91 | function deriveTerminalFontSize(baseFontSize: number): number { |
| 92 | const scale = normalizeBaseFontSize(baseFontSize) / DEFAULT_BASE_FONT_SIZE; | 92 | const scale = normalizeBaseFontSize(baseFontSize) / DEFAULT_BASE_FONT_SIZE; |
| 93 | return normalizeTerminalFontSize(Math.round(DEFAULT_TERMINAL_FONT_SIZE * scale * 2) / 2); | 93 | return normalizeTerminalFontSize(Math.round(DEFAULT_TERMINAL_FONT_SIZE * scale * 2) / 2); |
| 94 | } | 94 | } |
| 95 | 95 | ||
| 96 | /** Code/diff size derived from base: 12pt at base 16. */ | 96 | /** Code/diff size derived from base: 12pt at base 16. */ |
| 97 | export function deriveCodeFontSize(baseFontSize: number): number { | 97 | function deriveCodeFontSize(baseFontSize: number): number { |
| 98 | const scale = normalizeBaseFontSize(baseFontSize) / DEFAULT_BASE_FONT_SIZE; | 98 | const scale = normalizeBaseFontSize(baseFontSize) / DEFAULT_BASE_FONT_SIZE; |
| 99 | return normalizeCodeFontSize(Math.round(DEFAULT_CODE_FONT_SIZE * scale)); | 99 | return normalizeCodeFontSize(Math.round(DEFAULT_CODE_FONT_SIZE * scale)); |
| 100 | } | 100 | } |