From ceebb5dda6448ba00513e801cdb111841ab5043f Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Fri, 13 Feb 2026 23:29:50 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(zitare):=20add=20settings=20st?= =?UTF-8?q?ore=20and=20i18n=20updates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/zitare/apps/web/src/app.css | 1 + .../apps/web/src/lib/i18n/locales/de.json | 13 ++- .../apps/web/src/lib/i18n/locales/en.json | 13 ++- .../web/src/lib/stores/settings.svelte.ts | 96 +++++++++++++++++++ 4 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 apps/zitare/apps/web/src/lib/stores/settings.svelte.ts diff --git a/apps/zitare/apps/web/src/app.css b/apps/zitare/apps/web/src/app.css index 7b30f351a..4b7fdf2cc 100644 --- a/apps/zitare/apps/web/src/app.css +++ b/apps/zitare/apps/web/src/app.css @@ -8,6 +8,7 @@ @source "../../../../packages/shared-theme-ui/src"; @source "../../../../packages/shared-theme-ui/src/components"; @source "../../../../packages/shared-theme-ui/src/pages"; +@source "../../../../packages/shared-stores/src"; /* Quote-specific styles */ .quote-text { diff --git a/apps/zitare/apps/web/src/lib/i18n/locales/de.json b/apps/zitare/apps/web/src/lib/i18n/locales/de.json index 8dd3365c0..ec7ccd8ce 100644 --- a/apps/zitare/apps/web/src/lib/i18n/locales/de.json +++ b/apps/zitare/apps/web/src/lib/i18n/locales/de.json @@ -5,12 +5,17 @@ }, "nav": { "home": "Heute", + "today": "Heute", "categories": "Kategorien", "favorites": "Favoriten", "lists": "Listen", "search": "Suche", "settings": "Einstellungen", - "feedback": "Feedback" + "feedback": "Feedback", + "menu": "MenĂ¼", + "allThemes": "Alle Themes", + "showNav": "Navigation anzeigen", + "hideNav": "Navigation ausblenden" }, "home": { "dailyQuote": "Zitat des Tages", @@ -50,7 +55,11 @@ "title": "Suche", "placeholder": "Zitat oder Autor suchen...", "noResults": "Keine Ergebnisse", - "results": "{count} Ergebnisse" + "results": "{count} Ergebnisse", + "searching": "Suche...", + "create": "Erstellen", + "createList": "als Liste erstellen", + "createListDescription": "Neue Liste mit diesem Namen erstellen" }, "auth": { "login": "Anmelden", diff --git a/apps/zitare/apps/web/src/lib/i18n/locales/en.json b/apps/zitare/apps/web/src/lib/i18n/locales/en.json index 670eeaa78..cb003296c 100644 --- a/apps/zitare/apps/web/src/lib/i18n/locales/en.json +++ b/apps/zitare/apps/web/src/lib/i18n/locales/en.json @@ -5,12 +5,17 @@ }, "nav": { "home": "Today", + "today": "Today", "categories": "Categories", "favorites": "Favorites", "lists": "Lists", "search": "Search", "settings": "Settings", - "feedback": "Feedback" + "feedback": "Feedback", + "menu": "Menu", + "allThemes": "All Themes", + "showNav": "Show navigation", + "hideNav": "Hide navigation" }, "home": { "dailyQuote": "Quote of the Day", @@ -50,7 +55,11 @@ "title": "Search", "placeholder": "Search quotes or authors...", "noResults": "No results", - "results": "{count} results" + "results": "{count} results", + "searching": "Searching...", + "create": "Create", + "createList": "create as list", + "createListDescription": "Create a new list with this name" }, "auth": { "login": "Sign In", diff --git a/apps/zitare/apps/web/src/lib/stores/settings.svelte.ts b/apps/zitare/apps/web/src/lib/stores/settings.svelte.ts new file mode 100644 index 000000000..def1c2cd7 --- /dev/null +++ b/apps/zitare/apps/web/src/lib/stores/settings.svelte.ts @@ -0,0 +1,96 @@ +/** + * Settings Store - Manages user preferences for the Zitare app + * Uses @manacore/shared-stores createAppSettingsStore factory + */ + +import { createAppSettingsStore } from '@manacore/shared-stores'; + +export interface ZitareAppSettings extends Record { + // View & Display + showQuoteOfTheDay: boolean; + autoRefreshDaily: boolean; + compactMode: boolean; + + // Quote Display + showCategory: boolean; + showSource: boolean; + fontSizeMultiplier: number; + + // Immersive Mode + immersiveModeEnabled: boolean; + + // Navigation UI + pillNavCollapsed: boolean; +} + +const DEFAULT_SETTINGS: ZitareAppSettings = { + // View & Display + showQuoteOfTheDay: true, + autoRefreshDaily: true, + compactMode: false, + + // Quote Display + showCategory: true, + showSource: true, + fontSizeMultiplier: 1, + + // Immersive Mode + immersiveModeEnabled: false, + + // Navigation UI + pillNavCollapsed: true, +}; + +// Create base store using factory +const baseStore = createAppSettingsStore('zitare-settings', DEFAULT_SETTINGS); + +// Export with convenience getters +export const zitareSettings = { + // Base store methods + get settings() { + return baseStore.settings; + }, + initialize: baseStore.initialize, + set: baseStore.set, + update: baseStore.update, + reset: baseStore.reset, + getDefaults: baseStore.getDefaults, + toggleImmersiveMode: baseStore.toggleImmersiveMode, + + // Convenience getters + get showQuoteOfTheDay() { + return baseStore.settings.showQuoteOfTheDay; + }, + get autoRefreshDaily() { + return baseStore.settings.autoRefreshDaily; + }, + get compactMode() { + return baseStore.settings.compactMode; + }, + get showCategory() { + return baseStore.settings.showCategory; + }, + get showSource() { + return baseStore.settings.showSource; + }, + get fontSizeMultiplier() { + return baseStore.settings.fontSizeMultiplier; + }, + get immersiveModeEnabled() { + return baseStore.settings.immersiveModeEnabled; + }, + get pillNavCollapsed() { + return baseStore.settings.pillNavCollapsed; + }, + + // Toggle methods + togglePillNav() { + baseStore.update({ pillNavCollapsed: !baseStore.settings.pillNavCollapsed }); + }, + showPillNav() { + baseStore.update({ pillNavCollapsed: false }); + }, + hidePillNav() { + baseStore.update({ pillNavCollapsed: true }); + }, +};