import { createLang, type LangNode, type SupportedLocale, type LangInstance } from './lib'; export type { LangNode, SupportedLocale, LangInstance }; /** * Reactive wrapper around lang for Svelte 5. * * Mirrors the lang instance but overrides `getLocale` and `t` to touch * a `$state` variable, so any `$derived` / `$effect` that calls them * re-evaluates when the locale changes. */ export function createLangs( schema: S, defaultLocale?: SupportedLocale, fallbackChain?: SupportedLocale[] ) { const lang = createLang(schema, defaultLocale, fallbackChain); let _locale = $state(lang.getLocale()); let _schemaVersion = $state(0); lang.onLocaleChange((locale) => { _locale = locale; }); lang.onSchemaChange(() => { _schemaVersion++; }); return { t(path: string, params?: Record, locale?: SupportedLocale): string { void _locale; void _schemaVersion; return lang.t(path, params, locale); }, ts(value: any, locale?: SupportedLocale): string { void _locale; void _schemaVersion; return lang.ts(value, locale); }, getLocale(): SupportedLocale { return _locale; }, setLocale(locale: SupportedLocale): void { lang.setLocale(locale); }, extend(namespace: string, module: LangNode): void { lang.extend(namespace, module); }, register(namespace: NS, module: M) { return lang.register(namespace, module); }, onLocaleChange(fn: (locale: SupportedLocale) => void): () => void { return lang.onLocaleChange(fn); }, onSchemaChange(fn: () => void): () => void { return lang.onSchemaChange(fn); }, setLogger(logger: any): void { lang.setLogger(logger); }, dispose(): void { lang.dispose(); }, __dispose: lang.__dispose } as unknown as LangInstance; }