From 0ccad88dfdb955b9b144f996345f62cf7a08a2c5 Mon Sep 17 00:00:00 2001 From: Gigi Date: Sun, 5 Oct 2025 02:52:21 +0100 Subject: [PATCH] feat: add configurable reading font using Bunny Fonts - Add readingFont setting to UserSettings interface - Create fontLoader utility to load fonts from Bunny Fonts - Add font selector dropdown in settings with popular reading fonts - Use CSS variable --reading-font to apply font to reader content - Support fonts: Inter, Lora, Merriweather, Open Sans, Roboto, Source Serif 4, Crimson Text, Libre Baskerville, PT Serif - Fonts loaded from https://fonts.bunny.net/ (GDPR-friendly) --- src/components/Bookmarks.tsx | 7 ++++++ src/components/Settings.tsx | 21 ++++++++++++++++ src/index.css | 4 +++ src/services/settingsService.ts | 1 + src/utils/fontLoader.ts | 43 +++++++++++++++++++++++++++++++++ 5 files changed, 76 insertions(+) create mode 100644 src/utils/fontLoader.ts diff --git a/src/components/Bookmarks.tsx b/src/components/Bookmarks.tsx index 36d2a460..93778306 100644 --- a/src/components/Bookmarks.tsx +++ b/src/components/Bookmarks.tsx @@ -13,6 +13,7 @@ import { HighlightsPanel } from './HighlightsPanel' import { fetchReadableContent, ReadableContent } from '../services/readerService' import Settings from './Settings' import { UserSettings, loadSettings, saveSettings } from '../services/settingsService' +import { loadFont, getFontFamily } from '../utils/fontLoader' export type ViewMode = 'compact' | 'cards' | 'large' @@ -65,6 +66,12 @@ const Bookmarks: React.FC = ({ relayPool, onLogout }) => { if (settings.showUnderlines !== undefined) setShowUnderlines(settings.showUnderlines) if (settings.sidebarCollapsed !== undefined) setIsCollapsed(settings.sidebarCollapsed) if (settings.highlightsCollapsed !== undefined) setIsHighlightsCollapsed(settings.highlightsCollapsed) + if (settings.readingFont) { + loadFont(settings.readingFont) + // Apply font to content panel + const fontFamily = getFontFamily(settings.readingFont) + document.documentElement.style.setProperty('--reading-font', fontFamily) + } }, [settings]) const handleFetchBookmarks = async () => { diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx index fbee8cde..cecfa696 100644 --- a/src/components/Settings.tsx +++ b/src/components/Settings.tsx @@ -76,6 +76,27 @@ const Settings: React.FC = ({ settings, onSave, onClose, isSaving +
+ + +
+