diff --git a/packages/svelte-ux/src/lib/components/settings.ts b/packages/svelte-ux/src/lib/components/settings.ts index f65e63ee6..bf912f321 100644 --- a/packages/svelte-ux/src/lib/components/settings.ts +++ b/packages/svelte-ux/src/lib/components/settings.ts @@ -27,6 +27,13 @@ export type SettingsInput = { dark?: string[]; }; currentTheme?: ThemeStore; + + /** The existing locale store, if calling settings when there is already an existing `Settings` object */ + locale?: LocaleStore; + /** The existing locale store, if calling settings when there is already an existing `Settings` object */ + localeSettings?: Readable; + /** The existing locale store, if calling settings when there is already an existing `Settings` object */ + format?: Readable; }; export interface Settings extends Omit { @@ -41,17 +48,14 @@ export interface Settings extends Omit const settingsKey = Symbol(); -export function settings(settings: SettingsInput): Settings { - let lightThemes = settings.themes?.light ?? ['light']; - let darkThemes = settings.themes?.dark ?? ['dark']; - - let currentTheme = - // In some cases, `settings` is called again from inside a component. Don't create a new theme store in this case. - settings.currentTheme ?? - createThemeStore({ - light: lightThemes, - dark: darkThemes, - }); +function createLocaleStores(settings: SettingsInput) { + if (settings.locale && settings.localeSettings && settings.format) { + return { + locale: settings.locale, + localeSettings: settings.localeSettings, + format: settings.format, + }; + } let allLocales = getAllKnownLocales(settings.localeFormats); @@ -68,6 +72,27 @@ export function settings(settings: SettingsInput): Settings { }; }); + return { + locale, + localeSettings, + format: derived(localeSettings, buildFormatters), + }; +} + +export function settings(settings: SettingsInput): Settings { + let lightThemes = settings.themes?.light ?? ['light']; + let darkThemes = settings.themes?.dark ?? ['dark']; + + let currentTheme = + // In some cases, `settings` is called again from inside a component. Don't create a new theme store in this case. + settings.currentTheme ?? + createThemeStore({ + light: lightThemes, + dark: darkThemes, + }); + + let localeStores = createLocaleStores(settings); + return setContext(settingsKey, { ...settings, themes: { @@ -75,9 +100,7 @@ export function settings(settings: SettingsInput): Settings { dark: darkThemes, }, currentTheme, - locale, - localeSettings, - format: derived(localeSettings, buildFormatters), + ...localeStores, }); }