@mmstack/translate 21.1.14 → 21.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +232 -165
- package/fesm2022/mmstack-translate.mjs +85 -22
- package/fesm2022/mmstack-translate.mjs.map +1 -1
- package/package.json +1 -1
- package/types/mmstack-translate.d.ts +24 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmstack-translate.mjs","sources":["../../../../packages/translate/src/lib/delim.ts","../../../../packages/translate/src/lib/compile.ts","../../../../packages/translate/src/lib/create-namespace.ts","../../../../packages/translate/src/lib/path-param.ts","../../../../packages/translate/src/lib/translation-store.ts","../../../../packages/translate/src/lib/format/provide-defaults.ts","../../../../packages/translate/src/lib/format/unwrap.ts","../../../../packages/translate/src/lib/format/date.ts","../../../../packages/translate/src/lib/format/display-name.ts","../../../../packages/translate/src/lib/format/list.ts","../../../../packages/translate/src/lib/format/numeric.ts","../../../../packages/translate/src/lib/format/relative-time.ts","../../../../packages/translate/src/lib/format/injection.ts","../../../../packages/translate/src/lib/resovler-locale.ts","../../../../packages/translate/src/lib/register-namespace.ts","../../../../packages/translate/src/lib/route-helpers.ts","../../../../packages/translate/src/lib/testing/provide-mock-translations.ts","../../../../packages/translate/src/lib/translate.ts","../../../../packages/translate/src/lib/translator.ts","../../../../packages/translate/src/lib/with-params.ts","../../../../packages/translate/src/mmstack-translate.ts"],"sourcesContent":["const KEY_DELIM = '::MMT_DELIM::';\n\nexport function prependDelim(prefix: string, key: string): string {\n return `${prefix}${KEY_DELIM}${key}`;\n}\n\nexport function replaceWithDelim(str: string, repl = '.'): string {\n return str.replaceAll(repl, KEY_DELIM);\n}\n","import { prependDelim } from './delim';\nimport type {\n inferTranslationParamMap,\n inferTranslationShape,\n} from './parameterize.type';\nimport type { UnknownStringKeyObject } from './string-key-object.type';\n\nconst INTERNAL_SYMBOL = Symbol.for('mmstack-translate-internal');\n\ntype InternalSymbol = typeof INTERNAL_SYMBOL;\n\nexport type CompiledTranslation<\n T extends UnknownStringKeyObject,\n TNS extends string,\n TLocale extends string = string,\n> = {\n flat: Record<string, string>;\n locale?: TLocale;\n namespace: TNS;\n [INTERNAL_SYMBOL]: {\n shape: inferTranslationShape<T>;\n map: inferTranslationParamMap<TNS, T>;\n };\n};\n\nexport type mergeTranslationMaps<\n TMain extends CompiledTranslation<UnknownStringKeyObject, string>,\n TOther extends CompiledTranslation<UnknownStringKeyObject, string>,\n> = Omit<TMain, InternalSymbol> & {\n [INTERNAL_SYMBOL]: {\n shape: inferCompiledTranslationShape<TMain>;\n map: inferCompiledTranslationMap<TOther> &\n inferCompiledTranslationMap<TMain>;\n };\n};\n\nexport type inferCompiledTranslationNamespace<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n> = T['namespace'];\n\nexport type inferCompiledTranslationShape<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n> = T[InternalSymbol]['shape'];\n\nexport type inferCompiledTranslationMap<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n> = T[InternalSymbol]['map'];\n\nfunction isTranslationObject(t: unknown): t is UnknownStringKeyObject {\n return typeof t === 'object' && t !== null;\n}\n\nfunction flattenTranslation<T extends UnknownStringKeyObject>(obj: T) {\n return Object.entries(obj).reduce(\n (acc, [key, value]) => {\n if (typeof value === 'string') {\n acc[key] = value;\n } else if (isTranslationObject(value)) {\n Object.entries(flattenTranslation(value)).forEach(\n ([nestedKey, nestedValue]) => {\n acc[prependDelim(key, nestedKey)] = nestedValue;\n },\n );\n }\n\n return acc;\n },\n {} as Record<string, string>,\n );\n}\n\nexport function compileTranslation<\n T extends UnknownStringKeyObject,\n TNS extends string,\n TLocale extends string = string,\n>(\n translation: T,\n ns: TNS,\n locale?: TLocale,\n): CompiledTranslation<T, TNS, TLocale> {\n type $Shape = inferTranslationShape<T>;\n type $Map = inferTranslationParamMap<TNS, T>;\n\n return {\n locale,\n flat: flattenTranslation(translation),\n namespace: ns,\n [INTERNAL_SYMBOL]: {\n shape: {} as $Shape,\n map: {} as $Map,\n },\n };\n}\n","import {\n type CompiledTranslation,\n compileTranslation,\n type inferCompiledTranslationShape,\n type mergeTranslationMaps,\n} from './compile';\nimport { type UnknownStringKeyObject } from './string-key-object.type';\n\ntype TranslationNamespace<\n TNS extends string,\n T extends CompiledTranslation<UnknownStringKeyObject, TNS>,\n TShape extends UnknownStringKeyObject,\n> = {\n translation: T;\n createTranslation: <TLocale extends string>(\n locale: TLocale,\n translation: TShape,\n ) => CompiledTranslation<TShape, TNS, TLocale>;\n createMergedNamespace: <\n TOtherNS extends string,\n const TOther extends UnknownStringKeyObject,\n TOtherCompiled extends CompiledTranslation<TOther, TOtherNS>,\n >(\n ns: TOtherNS,\n translation: TOther,\n ) => TranslationNamespace<\n TOtherNS,\n mergeTranslationMaps<TOtherCompiled, T>,\n inferCompiledTranslationShape<TOtherCompiled>\n >;\n};\n\nexport function createNamespace<\n const T extends UnknownStringKeyObject,\n TNS extends string,\n>(ns: TNS, translation: T) {\n const compiled = compileTranslation<T, TNS>(translation, ns);\n\n type TCompiled = typeof compiled;\n type TShape = inferCompiledTranslationShape<typeof compiled>;\n\n const namespace: TranslationNamespace<TNS, TCompiled, TShape> = {\n translation: compiled,\n createTranslation: <TLocale extends string>(\n locale: TLocale,\n translation: TShape,\n ) => {\n return compileTranslation(translation, ns, locale);\n },\n createMergedNamespace: <\n TOther extends UnknownStringKeyObject,\n TOtherNS extends string,\n TOtherCompiled extends CompiledTranslation<TOther, TOtherNS> =\n CompiledTranslation<TOther, TOtherNS>,\n >(\n otherNs: TOtherNS,\n otherTranslation: TOther,\n ) => {\n return createNamespace(otherNs, otherTranslation) as TranslationNamespace<\n TOtherNS,\n mergeTranslationMaps<TOtherCompiled, TCompiled>,\n inferCompiledTranslationShape<TOtherCompiled>\n > as unknown as any;\n },\n };\n\n return namespace;\n}\n","import { computed, inject, type Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, type ParamMap, Router } from '@angular/router';\n\nexport function pathParam(\n key: string | (() => string),\n route = inject(ActivatedRoute),\n): Signal<string | null> {\n const keySignal =\n typeof key === 'string' ? computed(() => key) : computed(key);\n\n const routerOptions = inject(Router)['options'];\n\n if (\n routerOptions &&\n typeof routerOptions === 'object' &&\n routerOptions.paramsInheritanceStrategy === 'always'\n ) {\n const params = toSignal(route.paramMap, {\n initialValue: route.snapshot.paramMap,\n });\n\n return computed(() => params().get(keySignal()));\n }\n\n const paramMapSignals: Signal<ParamMap>[] = [];\n let currentRoute: ActivatedRoute | null = route;\n\n const isStatic = typeof key === 'string';\n\n while (currentRoute) {\n const initial = currentRoute.snapshot.paramMap;\n paramMapSignals.push(\n toSignal(currentRoute.paramMap, {\n initialValue: initial,\n }),\n );\n\n // For static keys, stop once we find the param, will find first in computed for loop already so basically noop for for loop\n if (isStatic && initial.has(key as string)) break;\n\n currentRoute = currentRoute.parent;\n }\n\n return computed(() => {\n const paramKey = keySignal();\n\n for (const map of paramMapSignals) {\n const v = map().get(paramKey);\n if (v) return v;\n }\n\n return null;\n });\n}\n","import {\n computed,\n effect,\n inject,\n Injectable,\n InjectionToken,\n isDevMode,\n LOCALE_ID,\n type Provider,\n resource,\n type Signal,\n signal,\n untracked,\n type WritableSignal,\n} from '@angular/core';\nimport { createIntl, createIntlCache, type IntlConfig } from '@formatjs/intl';\nimport { type CompiledTranslation } from './compile';\nimport { prependDelim } from './delim';\nimport { pathParam } from './path-param';\nimport { type UnknownStringKeyObject } from './string-key-object.type';\n\ntype BaseConfig = Omit<IntlConfig, 'locale' | 'messages'> & {\n /** Checks next locale is in provided array before switching locales */\n supportedLocales?: string[];\n /** Preloads the default locale ensuring sync fallback, not necessary for most cases as it will lazily load automatically when needed */\n preloadDefaultLocale?: boolean;\n};\n\ntype RouteBasedConfig = BaseConfig & {\n /** Auto-resolution when using a locale parameter via angular router */\n localeParamName?: string;\n localeStorage?: never;\n};\n\ntype LocaleStorage = {\n /** Called once on init to restore the last selected locale. Return `null` if nothing is stored. Values not in `supportedLocales` are ignored. */\n read: () => string | null;\n /** Called whenever the active locale changes. Fires once on init with the resolved initial value. */\n write: (locale: string) => void;\n};\n\ntype DynamicConfig = BaseConfig & {\n /** Custom storage mechanism for last set locale, it will be read on init & set the locale to the last value if it is still valid */\n localeStorage?: LocaleStorage;\n localeParamName?: never;\n};\n\ntype Config = RouteBasedConfig | DynamicConfig;\n\nconst CONFIG_TOKEN = new InjectionToken<Config>('mmstack-intl-config');\n\nexport function provideIntlConfig(config: Config): Provider[] {\n const providers: Provider[] = [\n {\n useFactory: (localeId: string) => {\n const next = {\n ...config,\n };\n\n const defaultLocale =\n config.defaultLocale ?? config.supportedLocales?.at(0) ?? localeId;\n\n if (\n next.supportedLocales &&\n !next.supportedLocales.includes(defaultLocale)\n ) {\n next.supportedLocales = [...next.supportedLocales, defaultLocale];\n }\n\n return next;\n },\n deps: [LOCALE_ID],\n provide: CONFIG_TOKEN,\n },\n ];\n\n const defaultLocale = config.defaultLocale ?? config.supportedLocales?.at(0);\n\n if (!defaultLocale) return providers;\n\n providers.push({\n provide: LOCALE_ID,\n useValue: defaultLocale,\n });\n\n return providers;\n}\n\nexport function injectIntlConfig() {\n return inject(CONFIG_TOKEN, { optional: true }) ?? undefined;\n}\n\nexport function injectDefaultLocale() {\n return injectIntlConfig()?.defaultLocale ?? inject(LOCALE_ID) ?? 'en-US';\n}\n\nexport function injectSupportedLocales() {\n return injectIntlConfig()?.supportedLocales ?? [injectDefaultLocale()];\n}\n\n/**\n * @internal\n * the actual locale signal used to store the current locale string\n */\nconst STORE_LOCALE = signal('en-US');\n\n/**\n * @internal\n * @deprecated will be removed when ng23 drops\n */\nexport function readLocaleUnsafe() {\n return STORE_LOCALE();\n}\n\nexport function injectLocaleInternal() {\n return STORE_LOCALE;\n}\n\nfunction proxyToGlobalSignleton(\n src: WritableSignal<string>,\n): WritableSignal<string> {\n const originalSet = src.set;\n\n src.set = (next) => {\n originalSet(next);\n STORE_LOCALE.set(next);\n };\n\n src.update = (updater) => {\n src.set(updater(untracked(src)));\n };\n\n return src;\n}\n\nfunction isDynamicConfig(\n cfg?: Config,\n): cfg is DynamicConfig & { localeStorage: LocaleStorage } {\n return !!cfg && 'localeStorage' in cfg && !!cfg.localeStorage;\n}\n\nfunction initLocale(src: WritableSignal<string>) {\n const config = injectIntlConfig();\n const defaultValue = injectDefaultLocale();\n\n if (!isDynamicConfig(config)) {\n src.set(defaultValue);\n return src;\n }\n\n let next: string | null = null;\n try {\n const stored = config.localeStorage.read();\n\n if (\n stored !== null &&\n (!config.supportedLocales || config.supportedLocales.includes(stored))\n ) {\n next = stored;\n }\n } catch (e) {\n if (isDevMode())\n console.error(\n '[Translate] Failed to read stored locale from localeStorage',\n e,\n );\n }\n\n src.set(next ?? defaultValue);\n effect(() => {\n try {\n config.localeStorage.write(src());\n } catch (e) {\n if (isDevMode())\n console.error('[Translate] Failed to write locale to localeStorage', e);\n }\n });\n\n return src;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslationStore {\n private readonly simpleKeyMap = new Map<string, Signal<string>>();\n private readonly cache = createIntlCache();\n private readonly config = injectIntlConfig();\n readonly loadQueue = signal<string[]>([]);\n readonly locale: WritableSignal<string>;\n private readonly defaultLocale = injectDefaultLocale();\n private readonly translations = signal<\n Record<string, Record<string, string>>\n >({\n [this.defaultLocale]: {},\n });\n private attemptedFallbackLoad = false;\n\n private readonly onDemandLoaders = new Map<\n string,\n Record<\n string,\n () => Promise<CompiledTranslation<UnknownStringKeyObject, string>>\n >\n >();\n\n private readonly nonMessageConfig = computed(() => ({\n ...this.config,\n locale: this.locale(),\n }));\n\n private readonly messages = computed(\n () =>\n this.translations()[this.locale()] ??\n this.translations()[this.defaultLocale] ??\n {},\n );\n\n readonly dynamicLocaleLoader = resource({\n params: computed(() => this.loadQueue().at(0) ?? null),\n loader: async ({ params: newLocale, abortSignal }) => {\n if (!newLocale) return;\n\n const currentTranslations = untracked(this.translations);\n\n const loadPromises: Promise<{\n namespace: string;\n flat: Record<string, string>;\n } | null>[] = [];\n\n for (const [namespace, loaders] of this.onDemandLoaders.entries()) {\n const loader = loaders[newLocale];\n if (loader) {\n const hasNamespaceForLocale =\n currentTranslations[newLocale] &&\n Object.keys(currentTranslations[newLocale]).some((key) =>\n key.startsWith(`${prependDelim(namespace, '').slice(0, -1)}`),\n );\n\n if (!hasNamespaceForLocale) {\n loadPromises.push(\n loader()\n .then((translation) => {\n if (abortSignal.aborted) return null;\n return {\n namespace: translation.namespace,\n flat: translation.flat,\n };\n })\n .catch((err) => {\n if (isDevMode()) {\n console.error(\n '[Translate] Failed to load',\n namespace,\n newLocale,\n err,\n );\n }\n\n return null;\n }),\n );\n }\n }\n }\n\n return Promise.all(loadPromises)\n .then((res) => res.filter((r) => r !== null))\n .then((res) => ({\n locales: res,\n locale: newLocale,\n }));\n },\n });\n\n readonly intl = computed(() =>\n createIntl(\n {\n ...this.nonMessageConfig(),\n messages: this.messages(),\n },\n this.cache,\n ),\n );\n\n constructor() {\n this.locale = proxyToGlobalSignleton(initLocale(signal('en-US')));\n const paramName = this.config?.localeParamName;\n if (paramName) {\n const param = pathParam(paramName);\n\n effect(() => {\n const loc = param();\n if (\n !loc ||\n loc === untracked(this.locale) ||\n untracked(this.loadQueue).includes(loc)\n )\n return;\n if (this.hasLocaleLoaders(loc)) this.locale.set(loc);\n else this.loadQueue.update((q) => [...q, loc]);\n });\n }\n\n effect(() => {\n if (\n // should never be in error state, but best to check in case something throws\n this.dynamicLocaleLoader.error() ||\n this.dynamicLocaleLoader.isLoading()\n )\n return;\n const dynamicLocales = this.dynamicLocaleLoader.value();\n\n if (!dynamicLocales) return;\n\n // Register loaded translations\n for (const locale of dynamicLocales.locales) {\n this.register(locale.namespace, {\n [dynamicLocales.locale]: locale.flat,\n });\n }\n\n const hasTranslations =\n dynamicLocales.locales.length > 0 ||\n this.translations()[dynamicLocales.locale];\n\n if (hasTranslations) {\n this.loadQueue.update((q) =>\n q.filter((l) => l !== dynamicLocales.locale),\n );\n this.locale.set(dynamicLocales.locale);\n }\n });\n }\n\n buildSimpleKeySignal(key: string) {\n const found = this.simpleKeyMap.get(key);\n if (found) return found;\n\n const sig = computed(() => this.formatMessageInternal(key));\n this.simpleKeyMap.set(key, sig);\n return sig;\n }\n\n formatMessage(key: string, values?: Record<string, string | number>) {\n if (values === undefined) return this.buildSimpleKeySignal(key)();\n\n return this.formatMessageInternal(key, values);\n }\n\n private formatMessageInternal(\n key: string,\n values?: Record<string, string | number>,\n ) {\n const message =\n this.translations()[this.locale()]?.[key] ??\n this.translations()[this.defaultLocale]?.[key] ??\n '';\n\n if (!message) {\n if (this.attemptedFallbackLoad) return '';\n\n this.attemptedFallbackLoad = true;\n untracked(() => {\n if (!this.loadQueue().includes(this.defaultLocale))\n this.loadQueue.update((q) => [...q, this.defaultLocale]);\n });\n return '';\n }\n\n return this.intl().formatMessage(\n { id: key, defaultMessage: message },\n values,\n );\n }\n\n register(\n namespace: string,\n flat: Partial<Record<string, Record<string, string>>>,\n ) {\n this.translations.update((cur) => {\n return Object.entries(flat).reduce(\n (acc, [locale, translation]) => {\n const localeTranslation = acc[locale] ?? {};\n\n const withNS = Object.entries(translation ?? {}).reduce(\n (acc, [key, value]) => {\n acc[prependDelim(namespace, key)] = value;\n return acc;\n },\n {} as Record<string, string>,\n );\n\n acc[locale] = {\n ...localeTranslation,\n ...withNS,\n };\n\n return acc;\n },\n { ...cur },\n );\n });\n }\n\n registerOnDemandLoaders(\n namespace: string,\n loaders: Record<string, () => Promise<any>>,\n ) {\n this.onDemandLoaders.set(namespace, loaders);\n }\n\n hasLocaleLoaders(locale: string): boolean {\n return Array.from(this.onDemandLoaders.values()).some(\n (loaders) => loaders[locale],\n );\n }\n}\n\nexport function injectIntl() {\n return inject(TranslationStore).intl;\n}\n\n/**\n * Inject a dynamic locale signal that supports runtime language switching.\n *\n * @returns A writable signal with the current locale and loading state.\n * Only allows switching to locales that have registered loaders.\n *\n * @example\n * ```typescript\n * const locale = injectDynamicLocale();\n *\n * // Switch language (triggers automatic translation loading)\n * locale.set('sl-SI');\n *\n * // Check loading state\n * if (locale.isLoading()) {\n * // Show spinner\n * }\n * ```\n */\nexport function injectDynamicLocale(): WritableSignal<string> & {\n isLoading: Signal<boolean>;\n} {\n const store = inject(TranslationStore);\n const supportedLocales = injectIntlConfig()?.supportedLocales;\n\n const source = computed(() => store.locale()) as WritableSignal<string> & {\n isLoading: Signal<boolean>;\n };\n\n const inSupportedLocales =\n supportedLocales === undefined\n ? () => true\n : (locale: string) => supportedLocales.includes(locale);\n\n const set = (value: string) => {\n if (\n value === untracked(source) ||\n untracked(store.loadQueue).includes(value)\n )\n return;\n\n if (!inSupportedLocales(value)) {\n if (isDevMode())\n console.warn(\n `[Translate] Locale \"${value}\" is not in supportedLocales, switch prevented. Available options are:`,\n supportedLocales,\n );\n\n return;\n }\n\n if (isDevMode() && !store.hasLocaleLoaders(value))\n console.warn(\n `[Translate] No loaders registered for locale \"${value}\". Switching to this locale will have no effect.`,\n );\n\n store.loadQueue.update((q) => [...q, value]);\n };\n\n source.set = set;\n source.update = (updater: (value: string) => string) => {\n const next = updater(untracked(source));\n source.set(next);\n };\n source.asReadonly = () => source;\n\n source.isLoading = store.dynamicLocaleLoader.isLoading;\n\n return source;\n}\n\n/**\n * Power-user escape hatch for adding translations imperatively (e.g. content\n * loaded from a remote API after bootstrap). Returns a function that registers\n * a flat per-locale map of keys under a given namespace\n *\n * Pair with {@link injectUnsafeT} to read the added keys without compile-time\n * constraints.\n *\n * @example\n * ```ts\n * const addTranslations = injectAddTranslations();\n * addTranslations('remote', {\n * 'en-US': { greeting: 'Hi {name}' },\n * 'sl-SI': { greeting: 'Zdravo {name}' },\n * });\n * ```\n */\nexport function injectAddTranslations() {\n const store = inject(TranslationStore);\n const supportedLocales = injectIntlConfig()?.supportedLocales;\n const supportedLocalesSet = supportedLocales\n ? new Set(supportedLocales)\n : null;\n\n const validate = supportedLocalesSet\n ? (translations: Record<string, Record<string, string>>) => {\n const clean: Record<string, Record<string, string>> = {};\n const invalidLocales: string[] = [];\n\n for (const [locale, translation] of Object.entries(translations)) {\n if (!supportedLocalesSet.has(locale)) {\n invalidLocales.push(locale);\n continue;\n }\n clean[locale] = translation;\n }\n\n if (isDevMode() && invalidLocales.length > 0)\n console.warn(\n `[Translate] Attempted to add translations for unsupported locales: ${invalidLocales.join(', ')}. These translations were ignored. Supported locales are: ${(supportedLocales ?? []).join(', ')}.`,\n );\n\n return clean;\n }\n : (translations: Record<string, Record<string, string>>) => translations;\n\n return (ns: string, translations: Record<string, Record<string, string>>) => {\n store.register(ns, validate(translations));\n };\n}\n","import {\n computed,\n inject,\n InjectionToken,\n isSignal,\n type Provider,\n type Signal,\n} from '@angular/core';\nimport { injectDynamicLocale } from '../translation-store';\n\nfunction equalLocale(a: { locale: string }, b: { locale: string }): boolean {\n return a.locale === b.locale;\n}\n\nexport function createFormatterProvider<T extends { locale: string }>(\n formatterName: string,\n libraryDefaults: Omit<T, 'locale'>,\n nonLocaleEqual: (a: Omit<T, 'locale'>, b: Omit<T, 'locale'>) => boolean,\n) {\n const token = new InjectionToken(\n `@mmstack/translate:format-${formatterName}-config`,\n {\n factory: (): Signal<T> => {\n const loc = injectDynamicLocale();\n return computed(\n () =>\n ({\n ...libraryDefaults,\n locale: loc(),\n }) as T,\n { equal: equalLocale },\n );\n },\n },\n );\n\n const provider = (\n valueOrFn:\n | Omit<Partial<T>, 'locale'>\n | (() => Omit<Partial<T>, 'locale'> | Signal<Omit<Partial<T>, 'locale'>>),\n ): Provider => {\n const fnProvider =\n typeof valueOrFn === 'function'\n ? (valueOrFn as () =>\n | Omit<Partial<T>, 'locale'>\n | Signal<Omit<Partial<T>, 'locale'>>)\n : () => valueOrFn;\n\n return {\n provide: token,\n useFactory: () => {\n const loc = injectDynamicLocale();\n\n const providedDefaultsOrSignal = fnProvider();\n\n if (isSignal(providedDefaultsOrSignal))\n return computed(\n () =>\n ({\n ...libraryDefaults,\n ...providedDefaultsOrSignal(),\n locale: loc(),\n }) as T,\n {\n equal: (a, b) => equalLocale(a, b) && nonLocaleEqual(a, b),\n },\n );\n\n const defaults = {\n ...libraryDefaults,\n ...providedDefaultsOrSignal,\n };\n\n return computed(\n () =>\n ({\n ...defaults,\n locale: loc(),\n }) as T,\n {\n equal: equalLocale,\n },\n );\n },\n };\n };\n\n const injectFn = (): Signal<T> => inject(token as any);\n\n return [provider, injectFn] as const;\n}\n\nexport type inferProvideParameter<\n T extends ReturnType<typeof createFormatterProvider>[0],\n> = Parameters<T>[0];\n","import { isSignal, type Signal } from '@angular/core';\n\nexport function unwrap<T>(value: T | Signal<T>): T {\n return isSignal(value) ? value() : value;\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\nconst FORMAT_PRESETS = {\n short: { dateStyle: 'short', timeStyle: 'short' },\n medium: { dateStyle: 'medium', timeStyle: 'medium' },\n long: { dateStyle: 'long', timeStyle: 'long' },\n full: { dateStyle: 'full', timeStyle: 'full' },\n\n shortDate: { dateStyle: 'short' },\n mediumDate: { dateStyle: 'medium' },\n longDate: { dateStyle: 'long' },\n fullDate: { dateStyle: 'full' },\n\n shortTime: { timeStyle: 'short' },\n mediumTime: { timeStyle: 'medium' },\n longTime: { timeStyle: 'long' },\n fullTime: { timeStyle: 'full' },\n} satisfies Record<string, Intl.DateTimeFormatOptions>;\n\ntype DateFormat = keyof typeof FORMAT_PRESETS;\n\n/**\n * Supported date inputs\n */\nexport type SupportedDateInput = Date | string | number | null | undefined;\n\n/**\n * Options for formatting a date\n */\nexport type FormatDateOptions = {\n /**\n * Timezone to use for formatting\n */\n tz?: string;\n /**\n * Format to use for formatting\n * @default 'medium'\n */\n format?: DateFormat | Intl.DateTimeFormatOptions;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omiting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatDateOptions = Omit<FormatDateOptions, 'locale'> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nfunction validDateOrNull(\n date: Date | string | number | null | undefined,\n): Date | null {\n if (date == null) return null;\n\n const d = date instanceof Date ? date : new Date(date);\n return isNaN(d.getTime()) ? null : d;\n}\n\nconst cache = new Map<string, Intl.DateTimeFormat>();\n\nfunction getFormatter(\n locale: string,\n format: DateFormat | Intl.DateTimeFormatOptions,\n timeZone?: string,\n): Intl.DateTimeFormat {\n const cacheKey = `${locale}|${typeof format === 'string' ? format : JSON.stringify(format)}|${timeZone ?? ''}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.DateTimeFormat(locale, {\n ...(typeof format === 'string' ? FORMAT_PRESETS[format] : format),\n timeZone,\n });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\n/**\n * @example formatDate(this.date, this.locale)\n */\nexport function formatDate(\n date: SupportedDateInput | Signal<SupportedDateInput>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatDate(this.date, { locale: 'sl-SI', format: 'shortDate' })\n */\nexport function formatDate(\n date: SupportedDateInput | Signal<SupportedDateInput>,\n opt: FormatDateOptions | Signal<FormatDateOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatDate()` instead, or pass locale explicitly.\n * @example formatDate(this.date)\n */\nexport function formatDate(\n date: SupportedDateInput | Signal<SupportedDateInput>,\n opt?: UnsafeFormatDateOptions | Signal<UnsafeFormatDateOptions>,\n): string;\n\nexport function formatDate(\n date: SupportedDateInput | Signal<SupportedDateInput>,\n optOrLocale?:\n | FormatDateOptions\n | Signal<FormatDateOptions>\n | string\n | Signal<string>\n | UnsafeFormatDateOptions\n | Signal<UnsafeFormatDateOptions>,\n): string {\n const validDate = validDateOrNull(unwrap(date));\n if (validDate === null) return '';\n\n const unwrappedArgs = unwrap(optOrLocale);\n let locale: string;\n let format: DateFormat | Intl.DateTimeFormatOptions = 'medium';\n let tz: string | undefined;\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (unwrappedArgs && typeof unwrappedArgs === 'object') {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n format = unwrappedArgs.format ?? 'medium';\n tz = unwrappedArgs.tz;\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(locale, format, tz).format(validDate);\n}\n\nconst [provideFormatDateDefaults, injectFormatDateOptions] =\n createFormatterProvider<FormatDateOptions>(\n 'date',\n {\n format: 'medium',\n },\n (a, b) => {\n if (a.tz !== b.tz) return false;\n\n if (a.format === b.format) return true;\n\n return JSON.stringify(a.format) === JSON.stringify(b.format);\n },\n );\n\n/**\n * Provide application-wide defaults for date formatting presets and timezones.\n * @example provideFormatDateDefaults({ format: 'shortDate'})\n */\nexport { provideFormatDateDefaults };\n\n/**\n * Inject a context-safe date formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatDate = injectFormatDate();\n * readonly displayDate = computed(() => formatDate(this.date()));\n */\nexport function injectFormatDate() {\n const defaults = injectFormatDateOptions();\n\n return (\n date: SupportedDateInput | Signal<SupportedDateInput>,\n optOrLocale?:\n | Partial<FormatDateOptions>\n | Signal<Partial<FormatDateOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatDate(date, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatDate(date, opt);\n };\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\nconst cache = new Map<string, Intl.DisplayNames>();\n\n/**\n * Options for formatting a display name\n */\nexport type FormatDisplayNameOptions = {\n /**\n * The display style for the result set\n * @default 'long'\n */\n style?: Intl.RelativeTimeFormatStyle;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omiting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatDisplayNameOptions = Omit<\n FormatDisplayNameOptions,\n 'locale'\n> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nfunction getFormatter(\n locale: string,\n type: Intl.DisplayNamesType,\n style: Intl.RelativeTimeFormatStyle,\n): Intl.DisplayNames {\n const cacheKey = `${locale}|${type}|${style}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.DisplayNames(locale, {\n type,\n style,\n });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\ntype SupportedCode = string | null | undefined;\n\n/**\n * @example formatDisplayName(this.value, 'region', this.locale)\n */\nexport function formatDisplayName(\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatDisplayName(this.value, 'region', {locale: 'en-US', style: 'long'})\n */\nexport function formatDisplayName(\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n opt: FormatDisplayNameOptions | Signal<FormatDisplayNameOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatDisplayName()` instead, or pass locale explicitly.\n * @example formatDisplayName(this.value)\n */\nexport function formatDisplayName(\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n opt?: UnsafeFormatDisplayNameOptions | Signal<UnsafeFormatDisplayNameOptions>,\n): string;\n\n/**\n * Format a display name using the current or provided locale\n *\n * @param value - The code to format\n * @param type - The type of display name to format\n * @param opt - Options for formatting\n * @returns Formatted display name string\n */\nexport function formatDisplayName(\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n localeOrOpt?:\n | FormatDisplayNameOptions\n | Signal<FormatDisplayNameOptions>\n | string\n | Signal<string>\n | UnsafeFormatDisplayNameOptions\n | Signal<UnsafeFormatDisplayNameOptions>,\n) {\n const unwrappedValue = unwrap(value);\n if (!unwrappedValue?.trim()) return '';\n\n const unwrappedType = unwrap(type);\n const unwrapped = unwrap(localeOrOpt);\n\n const locale =\n typeof unwrapped === 'string'\n ? unwrapped\n : (unwrapped?.locale ?? readLocaleUnsafe());\n\n const opt = typeof unwrapped === 'object' ? unwrapped : undefined;\n\n return (\n getFormatter(locale, unwrappedType, opt?.style ?? 'long').of(\n unwrappedValue,\n ) ?? ''\n );\n}\n\nconst [provideFormatDisplayNameDefaults, injectFormatDisplayNameDefaults] =\n createFormatterProvider<FormatDisplayNameOptions>(\n 'displayName',\n {\n style: 'long',\n },\n (a, b) => a.style === b.style,\n );\n\n/**\n * Provide application-wide defaults for display name formatting presets and timezones.\n * @example provideFormatDisplayNameDefaults({ style: 'long'})\n */\nexport { provideFormatDisplayNameDefaults };\n\n/**\n * Inject a context-safe date formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatDisplayName = injectFormatDisplayName();\n * readonly region = computed(() => formatDisplayName('US', 'region'));\n */\nexport function injectFormatDisplayName() {\n const defaults = injectFormatDisplayNameDefaults();\n\n return (\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n localeOrOpt?:\n | FormatDisplayNameOptions\n | Signal<FormatDisplayNameOptions>\n | string\n | Signal<string>,\n ): string => {\n if (!localeOrOpt) return formatDisplayName(value, type, defaults());\n\n const unwrapped = unwrap(localeOrOpt);\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults, ...unwrapped }\n : {\n ...defaults,\n locale: unwrapped,\n };\n\n return formatDisplayName(value, type, opt);\n };\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\ntype ListType = 'conjunction' | 'disjunction' | 'unit';\ntype ListStyle = 'long' | 'short' | 'narrow';\n\nexport type SupportedListInput = string[] | null | undefined;\n\nconst cache = new Map<string, Intl.ListFormat>();\n\n/**\n * Options for formatting a list\n */\nexport type FormatListOptions = {\n /**\n * The type of list to format\n * @default 'conjunction'\n */\n type?: ListType;\n /**\n * The style of list to format\n * @default 'long'\n */\n style?: ListStyle;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omiting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatListOptions = Omit<FormatListOptions, 'locale'> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nconst EMPTY_ARRAY: string[] = [];\n\nfunction unwrapList(\n value: SupportedListInput | Signal<SupportedListInput>,\n): string[] {\n const unwrapped = unwrap(value);\n return Array.isArray(unwrapped) ? unwrapped : EMPTY_ARRAY;\n}\n\nfunction getFormatter(\n locale: string,\n type: ListType,\n style: ListStyle,\n): Intl.ListFormat {\n const cacheKey = `${locale}|${type}|${style}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.ListFormat(locale, { type, style });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\n/**\n * @example formatList(this.items, this.locale)\n */\nexport function formatList(\n value: SupportedListInput | Signal<SupportedListInput>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatList(this.items, { locale: 'sl-SI', type: 'disjunction' })\n */\nexport function formatList(\n value: SupportedListInput | Signal<SupportedListInput>,\n opt: FormatListOptions | Signal<FormatListOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatList()` instead, or pass locale explicitly.\n * @example formatList(this.items)\n */\nexport function formatList(\n value: SupportedListInput | Signal<SupportedListInput>,\n opt?: UnsafeFormatListOptions | Signal<UnsafeFormatListOptions>,\n): string;\n\nexport function formatList(\n value: SupportedListInput | Signal<SupportedListInput>,\n optOrLocale?:\n | FormatListOptions\n | Signal<FormatListOptions>\n | string\n | Signal<string>\n | UnsafeFormatListOptions\n | Signal<UnsafeFormatListOptions>,\n): string {\n const unwrappedValue = unwrapList(value);\n if (unwrappedValue.length === 0) return '';\n\n const unwrappedArgs = unwrap(optOrLocale);\n let locale: string;\n let type: ListType = 'conjunction';\n let style: ListStyle = 'long';\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (unwrappedArgs && typeof unwrappedArgs === 'object') {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n type = unwrappedArgs.type ?? 'conjunction';\n style = unwrappedArgs.style ?? 'long';\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(locale, type, style).format(unwrappedValue);\n}\n\nconst [provideFormatListDefaults, injectFormatListOptions] =\n createFormatterProvider<FormatListOptions>(\n 'list',\n {\n type: 'conjunction',\n style: 'long',\n },\n (a, b) => a.type === b.type && a.style === b.style,\n );\n\n/**\n * Provide application-wide defaults for list formatting presets.\n * @example provideFormatListDefaults({ type: 'disjunction' })\n */\nexport { provideFormatListDefaults };\n\n/**\n * Inject a context-safe list formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatList = injectFormatList();\n * readonly displayList = computed(() => formatList(this.items()));\n */\nexport function injectFormatList() {\n const defaults = injectFormatListOptions();\n\n return (\n value: SupportedListInput | Signal<SupportedListInput>,\n optOrLocale?:\n | Partial<FormatListOptions>\n | Signal<Partial<FormatListOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatList(value, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatList(value, opt);\n };\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\ntype NumberNotation = 'standard' | 'scientific' | 'engineering' | 'compact';\n\ntype SupportedNumberValue = number | null | undefined;\n\nconst cache = new Map<string, Intl.NumberFormat>();\n\nfunction unwrapValue(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n fallbackToZero = false,\n): number | null {\n const unwrapped = unwrap(value);\n\n if (unwrapped === null || unwrapped === undefined || isNaN(unwrapped))\n return fallbackToZero ? 0 : null;\n\n return unwrapped;\n}\n\n/**\n * Options for formatting a number\n */\nexport type FormatNumberOptions = {\n /**\n * The notation to use for formatting\n * @default 'standard'\n */\n notation?: NumberNotation;\n /**\n * Minimum number of fraction digits to use\n */\n minFractionDigits?: number;\n /**\n * Maximum number of fraction digits to use\n */\n maxFractionDigits?: number;\n /**\n * Whether to use grouping\n * @default true\n */\n useGrouping?: boolean;\n /**\n * If the number is not a valid number, return formatted 0. By default formatter returns an empty string\n * @default false\n */\n fallbackToZero?: boolean;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omiting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatNumberOptions = Omit<FormatNumberOptions, 'locale'> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nfunction getFormatter(\n locale: string,\n minFractionDigits: number | undefined,\n maxFractionDigits: number | undefined,\n useGrouping?: boolean,\n notation?: NumberNotation,\n currency?: string,\n display?: CurrencyDisplay,\n style?: 'currency' | 'percent',\n): Intl.NumberFormat {\n const cacheKey = `${locale}|${notation ?? 'standard'}|${minFractionDigits}|${maxFractionDigits}|${useGrouping ?? true}|${currency ?? 'none'}|${display ?? 'none'}|${style ?? 'decimal'}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, {\n style,\n notation,\n minimumFractionDigits: minFractionDigits,\n maximumFractionDigits: maxFractionDigits,\n useGrouping,\n currency,\n currencyDisplay: display,\n });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\n/**\n * @example formatNumber(this.value, this.locale)\n */\nexport function formatNumber(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatNumber(this.value, { locale: 'de-DE', notation: 'compact' })\n */\nexport function formatNumber(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n opt: FormatNumberOptions | Signal<FormatNumberOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatNumber()` instead, or pass locale explicitly.\n * @example formatNumber(this.value)\n */\nexport function formatNumber(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n opt?: UnsafeFormatNumberOptions | Signal<UnsafeFormatNumberOptions>,\n): string;\n\nexport function formatNumber(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n optOrLocale?:\n | FormatNumberOptions\n | Signal<FormatNumberOptions>\n | string\n | Signal<string>\n | UnsafeFormatNumberOptions\n | Signal<UnsafeFormatNumberOptions>,\n): string {\n const unwrappedArgs = unwrap(optOrLocale);\n const isOpt = unwrappedArgs != null && typeof unwrappedArgs === 'object';\n const fallbackToZero = isOpt ? unwrappedArgs.fallbackToZero : undefined;\n const unwrappedNumber = unwrapValue(value, fallbackToZero);\n\n if (unwrappedNumber === null) return '';\n\n let locale: string;\n let notation: NumberNotation | undefined;\n let minFractionDigits: number | undefined;\n let maxFractionDigits: number | undefined;\n let useGrouping = true;\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (isOpt) {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n notation = unwrappedArgs.notation ?? 'standard';\n minFractionDigits = unwrappedArgs.minFractionDigits;\n maxFractionDigits = unwrappedArgs.maxFractionDigits;\n useGrouping = unwrappedArgs.useGrouping ?? true;\n } else {\n locale = readLocaleUnsafe();\n notation = 'standard';\n }\n\n return getFormatter(\n locale,\n minFractionDigits,\n maxFractionDigits,\n useGrouping,\n notation,\n ).format(unwrappedNumber);\n}\n\nconst [provideFormatNumberDefaults, injectFormatNumberOptions] =\n createFormatterProvider<FormatNumberOptions>(\n 'number',\n {\n notation: 'standard',\n useGrouping: true,\n },\n (a, b) =>\n a.notation === b.notation &&\n a.minFractionDigits === b.minFractionDigits &&\n a.maxFractionDigits === b.maxFractionDigits &&\n a.useGrouping === b.useGrouping &&\n a.fallbackToZero === b.fallbackToZero,\n );\n\n/**\n * Provide application-wide defaults for number formatting presets.\n * @example provideFormatNumberDefaults({ notation: 'compact' })\n */\nexport { provideFormatNumberDefaults };\n\n/**\n * Inject a context-safe number formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatNumber = injectFormatNumber();\n * readonly display = computed(() => formatNumber(this.value()));\n */\nexport function injectFormatNumber() {\n const defaults = injectFormatNumberOptions();\n\n return (\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n optOrLocale?:\n | Partial<FormatNumberOptions>\n | Signal<Partial<FormatNumberOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatNumber(value, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatNumber(value, opt);\n };\n}\n\n/**\n * Options for formatting a percentage value\n */\nexport type FormatPercentOptions = {\n /**\n * Minimum number of fraction digits to use\n */\n minFractionDigits?: number;\n /**\n * Maximum number of fraction digits to use\n */\n maxFractionDigits?: number;\n /**\n * If the number is not a valid number, return formatted 0. By default formatter returns an empty string\n * @default false\n */\n fallbackToZero?: boolean;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omiting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatPercentOptions = Omit<\n FormatPercentOptions,\n 'locale'\n> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\n/**\n * @example formatPercent(this.value, this.locale)\n */\nexport function formatPercent(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatPercent(this.value, { locale: 'de-DE', maxFractionDigits: 2 })\n */\nexport function formatPercent(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n opt: FormatPercentOptions | Signal<FormatPercentOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatPercent()` instead, or pass locale explicitly.\n * @example formatPercent(this.value)\n */\nexport function formatPercent(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n opt?: UnsafeFormatPercentOptions | Signal<UnsafeFormatPercentOptions>,\n): string;\n\nexport function formatPercent(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n optOrLocale?:\n | FormatPercentOptions\n | Signal<FormatPercentOptions>\n | string\n | Signal<string>\n | UnsafeFormatPercentOptions\n | Signal<UnsafeFormatPercentOptions>,\n): string {\n const unwrappedArgs = unwrap(optOrLocale);\n const isOpt = unwrappedArgs != null && typeof unwrappedArgs === 'object';\n const fallbackToZero = isOpt ? unwrappedArgs.fallbackToZero : undefined;\n const unwrappedNumber = unwrapValue(value, fallbackToZero);\n\n if (unwrappedNumber === null) return '';\n\n let locale: string;\n let minFractionDigits: number | undefined;\n let maxFractionDigits: number | undefined;\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (isOpt) {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n minFractionDigits = unwrappedArgs.minFractionDigits;\n maxFractionDigits = unwrappedArgs.maxFractionDigits;\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(\n locale,\n minFractionDigits,\n maxFractionDigits,\n undefined,\n undefined,\n undefined,\n undefined,\n 'percent',\n ).format(unwrappedNumber);\n}\n\nconst [provideFormatPercentDefaults, injectFormatPercentOptions] =\n createFormatterProvider<FormatPercentOptions>(\n 'percent',\n {},\n (a, b) =>\n a.minFractionDigits === b.minFractionDigits &&\n a.maxFractionDigits === b.maxFractionDigits &&\n a.fallbackToZero === b.fallbackToZero,\n );\n\n/**\n * Provide application-wide defaults for percent formatting presets.\n * @example provideFormatPercentDefaults({ maxFractionDigits: 1 })\n */\nexport { provideFormatPercentDefaults };\n\n/**\n * Inject a context-safe percent formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n */\nexport function injectFormatPercent() {\n const defaults = injectFormatPercentOptions();\n\n return (\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n optOrLocale?:\n | Partial<FormatPercentOptions>\n | Signal<Partial<FormatPercentOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatPercent(value, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatPercent(value, opt);\n };\n}\n\ntype CurrencyDisplay = 'symbol' | 'narrowSymbol' | 'code' | 'name';\n\n/**\n * Options for formatting a currency\n */\nexport type FormatCurrencyOptions = {\n /**\n * The display type for the currency format\n * @default 'symbol'\n */\n display?: CurrencyDisplay;\n /**\n * If the number is not a valid number, return formatted 0. By default formatter returns an empty string\n * @default false\n */\n fallbackToZero?: boolean;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omiting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatCurrencyOptions = Omit<\n FormatCurrencyOptions,\n 'locale'\n> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\n/**\n * @example formatCurrency(this.value, 'USD', this.locale)\n */\nexport function formatCurrency(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatCurrency(this.value, 'EUR', { locale: 'de-DE', display: 'code' })\n */\nexport function formatCurrency(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n opt: FormatCurrencyOptions | Signal<FormatCurrencyOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatCurrency()` instead, or pass locale explicitly.\n * @example formatCurrency(this.value, 'USD')\n */\nexport function formatCurrency(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n opt?: UnsafeFormatCurrencyOptions | Signal<UnsafeFormatCurrencyOptions>,\n): string;\n\nexport function formatCurrency(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n optOrLocale?:\n | FormatCurrencyOptions\n | Signal<FormatCurrencyOptions>\n | string\n | Signal<string>\n | UnsafeFormatCurrencyOptions\n | Signal<UnsafeFormatCurrencyOptions>,\n): string {\n const unwrappedArgs = unwrap(optOrLocale);\n const isOpt = unwrappedArgs != null && typeof unwrappedArgs === 'object';\n const fallbackToZero = isOpt ? unwrappedArgs.fallbackToZero : undefined;\n const unwrappedValue = unwrapValue(value, fallbackToZero);\n\n if (unwrappedValue === null) return '';\n\n let locale: string;\n let display: CurrencyDisplay = 'symbol';\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (isOpt) {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n display = unwrappedArgs.display ?? 'symbol';\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(\n locale,\n undefined,\n undefined,\n undefined,\n undefined,\n unwrap(currency),\n display,\n 'currency',\n ).format(unwrappedValue);\n}\n\nconst [provideFormatCurrencyDefaults, injectFormatCurrencyOptions] =\n createFormatterProvider<FormatCurrencyOptions>(\n 'currency',\n {\n display: 'symbol',\n },\n (a, b) =>\n a.display === b.display && a.fallbackToZero === b.fallbackToZero,\n );\n\n/**\n * Provide application-wide defaults for currency formatting presets.\n * @example provideFormatCurrencyDefaults({ display: 'code' })\n */\nexport { provideFormatCurrencyDefaults };\n\n/**\n * Inject a context-safe currency formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n */\nexport function injectFormatCurrency() {\n const defaults = injectFormatCurrencyOptions();\n\n return (\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n optOrLocale?:\n | Partial<FormatCurrencyOptions>\n | Signal<Partial<FormatCurrencyOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatCurrency(value, currency, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatCurrency(value, currency, opt);\n };\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\nconst cache = new Map<string, Intl.RelativeTimeFormat>();\n\n/**\n * Options for formatting a relative time value\n */\nexport type FormatRelativeTimeOptions = {\n /**\n * The length of the internationalized message.\n * @default 'long'\n */\n style?: Intl.RelativeTimeFormatStyle;\n /**\n * Controls whether to use numeric values in the output.\n * @default 'always'\n */\n numeric?: Intl.RelativeTimeFormatNumeric;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omiting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatRelativeTimeOptions = Omit<\n FormatRelativeTimeOptions,\n 'locale'\n> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nfunction getFormatter(\n locale: string,\n style: Intl.RelativeTimeFormatStyle,\n numeric: Intl.RelativeTimeFormatNumeric,\n): Intl.RelativeTimeFormat {\n const cacheKey = `${locale}|${style}|${numeric}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.RelativeTimeFormat(locale, { style, numeric });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\nexport type RelativeTimeUnit = Intl.RelativeTimeFormatUnit;\n\ntype SupportedRelativeTimeInput = number | null | undefined;\n\n/**\n * @example formatRelativeTime(this.value, this.unit, this.locale)\n */\nexport function formatRelativeTime(\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatRelativeTime(this.value, 'day', { locale: 'sl-SI', numeric: 'auto' })\n */\nexport function formatRelativeTime(\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n opt: FormatRelativeTimeOptions | Signal<FormatRelativeTimeOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatRelativeTime()` instead, or pass locale explicitly.\n * @example formatRelativeTime(this.value, 'day')\n */\nexport function formatRelativeTime(\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n opt?:\n | UnsafeFormatRelativeTimeOptions\n | Signal<UnsafeFormatRelativeTimeOptions>,\n): string;\n\nexport function formatRelativeTime(\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n optOrLocale?:\n | FormatRelativeTimeOptions\n | Signal<FormatRelativeTimeOptions>\n | string\n | Signal<string>\n | UnsafeFormatRelativeTimeOptions\n | Signal<UnsafeFormatRelativeTimeOptions>,\n): string {\n const unwrappedValue = unwrap(value);\n if (\n unwrappedValue === null ||\n unwrappedValue === undefined ||\n isNaN(unwrappedValue)\n )\n return '';\n\n const unwrappedUnit = unwrap(unit);\n if (!unwrappedUnit) return '';\n\n const unwrappedArgs = unwrap(optOrLocale);\n let locale: string;\n let style: Intl.RelativeTimeFormatStyle = 'long';\n let numeric: Intl.RelativeTimeFormatNumeric = 'always';\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (unwrappedArgs && typeof unwrappedArgs === 'object') {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n style = unwrappedArgs.style ?? 'long';\n numeric = unwrappedArgs.numeric ?? 'always';\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(locale, style, numeric).format(\n unwrappedValue,\n unwrappedUnit,\n );\n}\n\nconst [provideFormatRelativeTimeDefaults, injectFormatRelativeTimeOptions] =\n createFormatterProvider<FormatRelativeTimeOptions>(\n 'relativeTime',\n {\n style: 'long',\n numeric: 'always',\n },\n (a, b) => a.style === b.style && a.numeric === b.numeric,\n );\n\n/**\n * Provide application-wide defaults for relative time formatting presets.\n * @example provideFormatRelativeTimeDefaults({ numeric: 'auto' })\n */\nexport { provideFormatRelativeTimeDefaults };\n\n/**\n * Inject a context-safe relative time formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatRelativeTime = injectFormatRelativeTime();\n * readonly relativeAge = computed(() => formatRelativeTime(this.delta(), 'day'));\n */\nexport function injectFormatRelativeTime() {\n const defaults = injectFormatRelativeTimeOptions();\n\n return (\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n optOrLocale?:\n | Partial<FormatRelativeTimeOptions>\n | Signal<Partial<FormatRelativeTimeOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatRelativeTime(value, unit, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatRelativeTime(value, unit, opt);\n };\n}\n","import type { Provider } from '@angular/core';\nimport { injectFormatDate, provideFormatDateDefaults } from './date';\nimport {\n injectFormatDisplayName,\n provideFormatDisplayNameDefaults,\n} from './display-name';\nimport { injectFormatList, provideFormatListDefaults } from './list';\nimport {\n injectFormatCurrency,\n injectFormatNumber,\n injectFormatPercent,\n provideFormatCurrencyDefaults,\n provideFormatNumberDefaults,\n provideFormatPercentDefaults,\n} from './numeric';\nimport type { inferProvideParameter } from './provide-defaults';\nimport {\n injectFormatRelativeTime,\n provideFormatRelativeTimeDefaults,\n} from './relative-time';\n\ntype FormatDefaults = {\n date?: inferProvideParameter<typeof provideFormatDateDefaults>;\n displayName?: inferProvideParameter<typeof provideFormatDisplayNameDefaults>;\n list?: inferProvideParameter<typeof provideFormatListDefaults>;\n relativeTime?: inferProvideParameter<\n typeof provideFormatRelativeTimeDefaults\n >;\n number?: inferProvideParameter<typeof provideFormatNumberDefaults>;\n percent?: inferProvideParameter<typeof provideFormatPercentDefaults>;\n currency?: inferProvideParameter<typeof provideFormatCurrencyDefaults>;\n};\n\nexport function provideFormatDefaults(cfg: FormatDefaults): Provider[] {\n const providers: Provider[] = [];\n if (cfg.date) providers.push(provideFormatDateDefaults(cfg.date));\n if (cfg.displayName)\n providers.push(provideFormatDisplayNameDefaults(cfg.displayName));\n if (cfg.list) providers.push(provideFormatListDefaults(cfg.list));\n if (cfg.relativeTime)\n providers.push(provideFormatRelativeTimeDefaults(cfg.relativeTime));\n if (cfg.number) providers.push(provideFormatNumberDefaults(cfg.number));\n if (cfg.percent) providers.push(provideFormatPercentDefaults(cfg.percent));\n if (cfg.currency) providers.push(provideFormatCurrencyDefaults(cfg.currency));\n\n return providers;\n}\n\nexport function injectFormatters() {\n return {\n date: injectFormatDate(),\n displayName: injectFormatDisplayName(),\n list: injectFormatList(),\n relativeTime: injectFormatRelativeTime(),\n number: injectFormatNumber(),\n percent: injectFormatPercent(),\n currency: injectFormatCurrency(),\n };\n}\n","import { inject, untracked } from '@angular/core';\nimport { type ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { injectIntlConfig, TranslationStore } from './translation-store';\n\nexport function injectResolveParamLocale(snapshot: ActivatedRouteSnapshot) {\n let locale: string | null = null;\n\n const paramName = injectIntlConfig()?.localeParamName;\n\n const routerConfig = inject(Router)['options'];\n\n const alwaysInheritParams =\n typeof routerConfig === 'object' &&\n !!routerConfig &&\n routerConfig.paramsInheritanceStrategy === 'always';\n\n if (paramName) {\n locale = snapshot.paramMap.get(paramName);\n\n if (!locale && !alwaysInheritParams) {\n let currentRoute: ActivatedRouteSnapshot | null = snapshot;\n while (currentRoute && !locale) {\n locale = currentRoute.paramMap.get('locale');\n currentRoute = currentRoute.parent;\n }\n }\n }\n\n if (!locale) {\n locale = untracked(inject(TranslationStore).locale);\n }\n\n return locale;\n}\n","import {\n computed,\n inject,\n Injectable,\n isDevMode,\n isSignal,\n untracked,\n type Signal,\n} from '@angular/core';\nimport { type ResolveFn } from '@angular/router';\nimport {\n compileTranslation,\n type CompiledTranslation,\n type inferCompiledTranslationMap,\n type inferCompiledTranslationNamespace,\n} from './compile';\nimport { replaceWithDelim } from './delim';\nimport { injectResolveParamLocale } from './resovler-locale';\nimport {\n type AnyStringRecord,\n type UnknownStringKeyObject,\n} from './string-key-object.type';\nimport {\n injectDefaultLocale,\n injectIntlConfig,\n TranslationStore,\n} from './translation-store';\n\nfunction createEqualsRecord<T extends AnyStringRecord>(keys: (keyof T)[] = []) {\n let keyMatcher: (a: T, b: T) => boolean;\n\n if (keys.length === 0) {\n keyMatcher = () => true;\n } else if (keys.length === 1) {\n const key = keys[0];\n keyMatcher = (a, b) => a[key] === b[key];\n } else {\n keyMatcher = (a, b) => {\n return keys.every((k) => a[k] === b[k]);\n };\n }\n\n return (a?: T, b?: T): boolean => {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return keyMatcher(a, b);\n };\n}\n\ntype TFunction<TMap extends AnyStringRecord> = <\n TKey extends keyof TMap & string,\n>(\n key: TKey,\n ...args: TMap[TKey] extends void ? [] : [TMap[TKey]]\n) => string;\n\ntype SignalTFunction<TMap extends AnyStringRecord> = <\n TKey extends keyof TMap & string,\n>(\n key: TKey,\n ...args: TMap[TKey] extends void ? [] : [() => TMap[TKey]]\n) => Signal<string>;\n\ntype TFunctionWithSignalConstructor<\n TMap extends AnyStringRecord,\n TFN extends TFunction<TMap>,\n> = TFN & {\n asSignal: SignalTFunction<TMap>;\n};\n\nexport function addSignalFn<\n TMap extends AnyStringRecord,\n TFn extends TFunction<TMap>,\n>(\n fn: TFn,\n store: TranslationStore,\n keyMap: Map<string, string>,\n): TFunctionWithSignalConstructor<TMap, TFn> {\n const withSig = fn as TFunctionWithSignalConstructor<TMap, TFn>;\n\n const asSignal = <TKey extends keyof TMap & string>(\n key: TKey,\n variables?: () => AnyStringRecord,\n ): Signal<string> => {\n const stringKey = key as string;\n\n let flatPath = keyMap.get(stringKey);\n\n if (flatPath === undefined) {\n flatPath = replaceWithDelim(stringKey);\n keyMap.set(stringKey, flatPath);\n }\n\n if (variables === undefined) return store.buildSimpleKeySignal(flatPath);\n\n const varsFn = variables;\n const varsSignal = isSignal(varsFn)\n ? varsFn\n : computed(() => varsFn(), {\n equal: createEqualsRecord(Object.keys(varsFn())),\n });\n\n return computed(() => store.formatMessage(flatPath, varsSignal()));\n };\n\n withSig.asSignal = asSignal as unknown as TFunctionWithSignalConstructor<\n TMap,\n TFn\n >['asSignal'];\n\n return withSig;\n}\n\nexport function createT<TMap extends AnyStringRecord>(\n store: TranslationStore,\n keyMap = new Map<string, string>(),\n): TFunction<TMap> {\n const fn = <TKey extends keyof TMap & string>(\n key: TKey,\n variables?: AnyStringRecord,\n ): string => {\n const stringKey = key as string;\n\n let k = keyMap.get(stringKey);\n\n if (k === undefined) {\n k = replaceWithDelim(stringKey);\n keyMap.set(stringKey, k);\n }\n\n return store.formatMessage(k, variables);\n };\n\n return fn as unknown as TFunction<TMap>;\n}\n\nexport function registerNamespace<\n TDefault extends CompiledTranslation<UnknownStringKeyObject, string>,\n>(\n defaultTranslation: () => Promise<TDefault>,\n other: Record<\n string,\n () => Promise<\n CompiledTranslation<\n UnknownStringKeyObject,\n inferCompiledTranslationNamespace<TDefault>,\n string\n >\n >\n >,\n) {\n type $Map = inferCompiledTranslationMap<TDefault>;\n type $BaseTFN = TFunction<$Map>;\n type $TFN = TFunctionWithSignalConstructor<$Map, $BaseTFN>;\n\n const keyMap = new Map<string, string>();\n\n const injectT = (): $TFN => {\n const store = inject(TranslationStore);\n\n return addSignalFn(createT(store, keyMap), store, keyMap);\n };\n\n let defaultTranslationLoaded = false;\n const resolver: ResolveFn<void> = async (snapshot) => {\n const store = inject(TranslationStore);\n\n const locale = injectResolveParamLocale(snapshot);\n\n const defaultLocale = injectDefaultLocale();\n const shouldPreloadDefault =\n injectIntlConfig()?.preloadDefaultLocale ?? false;\n\n const tPromise = other[locale] as (typeof other)[string] | undefined;\n\n const promise = tPromise ?? defaultTranslation;\n if (!promise && isDevMode()) {\n return console.warn(`No translation found for locale: ${locale}`);\n }\n\n if (promise === defaultTranslation && defaultTranslationLoaded) return;\n\n try {\n const promises = [promise()];\n\n if (\n shouldPreloadDefault &&\n !defaultTranslationLoaded &&\n promise !== defaultTranslation\n )\n promises.push(defaultTranslation());\n\n const translations = await Promise.allSettled(promises);\n\n const fullfilled = translations.map((t) =>\n t.status === 'fulfilled' ? t.value : null,\n );\n\n if (fullfilled.at(0) === null && fullfilled.at(1) === null)\n throw new Error('Failed to load translations');\n\n const [t, defaultT] = fullfilled;\n\n const ns = t?.namespace ?? defaultT?.namespace;\n if (!ns) throw new Error('No namespace found in translation');\n\n if (isDevMode() && t && t.locale !== locale && t.locale)\n console.warn(`Expected locale to be ${locale} but got ${t.locale}`);\n\n store.registerOnDemandLoaders(ns, {\n ...other,\n [defaultLocale]: defaultTranslation,\n });\n\n const toRegister: Record<string, Record<string, string>> = {};\n if (t) toRegister[locale] = t.flat;\n if (defaultT) toRegister[defaultLocale] = defaultT.flat;\n\n store.register(ns, toRegister);\n\n if (promise === defaultTranslation || defaultT)\n defaultTranslationLoaded = true;\n } catch {\n if (isDevMode()) {\n console.warn(`Failed to load translation for locale: ${locale}`);\n }\n } finally {\n if (locale !== untracked(store.locale)) store.locale.set(locale);\n }\n };\n\n return {\n injectNamespaceT: injectT,\n resolveNamespaceTranslation: resolver,\n };\n}\n\ntype UntypedTFunction<TNS extends string> = {\n (key: `${TNS}.${string}`, args?: Record<string, string>): string;\n asSignal: (\n key: `${TNS}.${string}`,\n args?: () => Record<string, string>,\n ) => Signal<string>;\n};\n\n/**\n * Registers a type-unsafe namespace, meant for remote loading of unknown key-value pairs using mmstack/translate infrastructure\n * The resolver & t function work the same as they would with typed namespaces, but without type safety\n */\nexport function registerRemoteNamespace<TNS extends string>(\n ns: TNS,\n defaultTranslation: () => Promise<Record<string, string>>,\n other: Record<string, () => Promise<Record<string, string>>>,\n) {\n const keyMap = new Map<string, string>();\n\n const injectT = (): UntypedTFunction<TNS> => {\n const store = inject(TranslationStore);\n\n return addSignalFn(\n createT(store, keyMap),\n store,\n keyMap,\n ) as UntypedTFunction<TNS>;\n };\n\n let defaultTranslationLoaded = false;\n const resolver: ResolveFn<void> = async (snapshot) => {\n const store = inject(TranslationStore);\n\n const locale = injectResolveParamLocale(snapshot);\n\n const defaultLocale = injectDefaultLocale();\n const shouldPreloadDefault =\n injectIntlConfig()?.preloadDefaultLocale ?? false;\n\n const tPromise = other[locale] as (typeof other)[string] | undefined;\n\n const promise = tPromise ?? defaultTranslation;\n\n if (!promise && isDevMode()) {\n return console.warn(`No translation found for locale: ${locale}`);\n }\n\n if (promise === defaultTranslation && defaultTranslationLoaded) return;\n\n try {\n const promises = [promise()];\n\n if (\n shouldPreloadDefault &&\n !defaultTranslationLoaded &&\n promise !== defaultTranslation\n )\n promises.push(defaultTranslation());\n\n const translations = await Promise.allSettled(promises);\n\n const fullfilled = translations.map((t) =>\n t.status === 'fulfilled' ? t.value : null,\n );\n\n if (fullfilled.at(0) === null && fullfilled.at(1) === null)\n throw new Error('Failed to load translations');\n\n const [baseT, baseDefaultT] = fullfilled;\n\n const t = baseT ? compileTranslation(baseT, ns, locale) : null;\n const defaultT = baseDefaultT\n ? compileTranslation(baseDefaultT, ns, defaultLocale)\n : null;\n\n if (isDevMode() && t && t.locale !== locale && t.locale)\n console.warn(`Expected locale to be ${locale} but got ${t.locale}`);\n\n store.registerOnDemandLoaders(ns, {\n ...other,\n [defaultLocale]: defaultTranslation,\n });\n\n const toRegister: Record<string, Record<string, string>> = {};\n if (t) toRegister[locale] = t.flat;\n if (defaultT) toRegister[defaultLocale] = defaultT.flat;\n\n store.register(ns, toRegister);\n\n if (promise === defaultTranslation || defaultT)\n defaultTranslationLoaded = true;\n } catch {\n if (isDevMode()) {\n console.warn(`Failed to load translation for locale: ${locale}`);\n }\n } finally {\n if (locale !== untracked(store.locale)) store.locale.set(locale);\n }\n };\n\n return {\n injectNamespaceT: injectT,\n resolveNamespaceTranslation: resolver,\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UnsafeTKeyMap {\n readonly map = new Map<string, string>();\n}\n\n/**\n * Power-user escape hatch that returns a fully untyped translation function.\n * Intended for use alongside {@link injectAddTranslations} when translations\n * are added imperatively (e.g. from a remote API), or for cross-namespace\n * lookups where the typed API would be impractical.\n *\n * @example\n * ```ts\n * const t = injectUnsafeT();\n * t('any.namespace.key', { name: 'Alice', count: 3 });\n * const sig = t.asSignal('any.namespace.key', () => ({ name: name() }));\n * ```\n */\nexport function injectUnsafeT() {\n const store = inject(TranslationStore);\n const map = inject(UnsafeTKeyMap).map;\n\n const fn = (\n key: string,\n params?: Record<string, string | number>,\n ): string => {\n let k = map.get(key);\n\n if (k === undefined) {\n k = replaceWithDelim(key);\n map.set(key, k);\n }\n\n return store.formatMessage(k, params);\n };\n\n fn.asSignal = (\n key: string,\n params?: () => Record<string, string | number>,\n ): Signal<string> => {\n let k = map.get(key);\n\n if (k === undefined) {\n k = replaceWithDelim(key);\n map.set(key, k);\n }\n\n if (!params) return store.buildSimpleKeySignal(k);\n\n const paramsSignal = isSignal(params)\n ? params\n : computed(() => params(), {\n equal: createEqualsRecord(Object.keys(params())),\n });\n\n return computed(() => store.formatMessage(k, paramsSignal()));\n };\n\n return fn;\n}\n","import { inject } from '@angular/core';\nimport {\n Router,\n type CanMatchFn,\n type Route,\n type UrlSegment,\n} from '@angular/router';\nimport {\n injectDefaultLocale,\n injectSupportedLocales,\n} from './translation-store';\n\n/**\n * Guard that validates the locale parameter against supported locales.\n * Redirects to default locale if the locale is invalid.\n *\n * @param prefixSegments Optional array of path segments preceding the locale segment.\n * if (you wanted to match /app/:locale/... you would pass ['app'] here) & the function would match the second parameter + redirect accordingly\n *\n * @example\n * ```typescript\n * {\n * path: ':locale',\n * canMatch: [canMatchLocale()],\n * children: [...]\n * }\n * ```\n */\nexport function canMatchLocale(prefixSegments: string[] = []): CanMatchFn {\n return (_route: Route, segments: UrlSegment[]) => {\n const supportedLocales = injectSupportedLocales();\n\n const locale = segments.at(prefixSegments.length)?.path;\n\n if (!locale || !supportedLocales.includes(locale))\n return inject(Router).createUrlTree([\n ...prefixSegments,\n injectDefaultLocale(),\n ]);\n\n return true;\n };\n}\n","import { type Provider, signal } from '@angular/core';\nimport { createIntl, createIntlCache, type IntlShape } from '@formatjs/intl';\nimport { compileTranslation } from '../compile';\nimport { type UnknownStringKeyObject } from '../string-key-object.type';\nimport { TranslationStore } from '../translation-store';\n\n/**\n * Options designed to feed into the mock translations function.\n */\nexport interface MockTranslationOptions {\n /**\n * If provided, allows overriding the default behavior of simply echoing translation keys back.\n * Format: Record of namespace -> (Translation shape similar to what you pass to `createNamespace`)\n *\n * Example:\n * ```ts\n * {\n * home: { title: 'Mocked Title' },\n * auth: { error: 'Mocked Error' }\n * }\n * ```\n */\n translations?: Record<string, UnknownStringKeyObject>;\n\n /**\n * When true, uses `@formatjs/intl` to process ICU message syntax (e.g. `{name}`, plurals, selects).\n * This gives you real variable interpolation in your test assertions.\n *\n * @default false — values are ignored and the raw message string is returned.\n *\n * @example\n * ```ts\n * provideMockTranslations({\n * translations: { home: { greet: 'Hello {name}' } },\n * formatValues: true,\n * })\n * // t('home.greet', { name: 'Alice' }) → 'Hello Alice'\n * ```\n */\n formatValues?: boolean;\n\n /**\n * The locale to use when `formatValues` is true.\n * @default 'en-US'\n */\n locale?: string;\n}\n\n/**\n * Provides an isolated mock `TranslationStore` usable across testing modules that use components\n * depending on `@mmstack/translate` APIs (like `Translate` directive, `Translator` pipe, or `injectNamespaceT`).\n *\n * This provider intercepts all translation logic, bypassing chunk loaders and Intl.\n * When a custom configuration isn't provided, formatMessage simply echoes the translation key, using dots `.`.\n *\n * ### Usage\n * ```typescript\n * TestBed.configureTestingModule({\n * providers: [provideMockTranslations()]\n * });\n * ```\n */\nexport function provideMockTranslations(\n options?: MockTranslationOptions,\n): Provider[] {\n // We compile the mock strings to flat delimiters just like the internal compile module.\n const mappedMocks: Record<string, string> = {};\n\n if (options?.translations) {\n for (const [namespace, translationObj] of Object.entries(\n options.translations,\n )) {\n const compiled = compileTranslation(translationObj, namespace);\n\n for (const [key, val] of Object.entries(compiled.flat)) {\n // e.g. from 'home::MMT_DELIM::title'\n const fullKey = `${namespace}::MMT_DELIM::${key}`;\n mappedMocks[fullKey] = val;\n }\n }\n }\n\n const locale = options?.locale ?? 'en-US';\n\n let intl: IntlShape | undefined;\n\n if (options?.formatValues) {\n intl = createIntl({ locale, messages: mappedMocks }, createIntlCache());\n }\n\n return [\n {\n provide: TranslationStore,\n useValue: {\n locale: signal(locale),\n formatMessage: (\n key: string,\n values?: Record<string, string | number>,\n ) => {\n const message = mappedMocks[key];\n\n if (!message) {\n // Fallback to echoing the key back in dot notation (more readable for unit assertions).\n return key.replaceAll('::MMT_DELIM::', '.');\n }\n\n if (intl) {\n return intl.formatMessage(\n { id: key, defaultMessage: message },\n values,\n );\n }\n\n return message;\n },\n hasLocaleLoaders: () => false,\n register: () => {\n // noop\n },\n registerOnDemandLoaders: () => {\n // noop\n },\n dynamicLocaleLoader: {\n isLoading: signal(false),\n value: signal(null),\n error: signal(null),\n },\n loadQueue: signal([]),\n },\n },\n ];\n}\n","import {\n afterRenderEffect,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n Renderer2,\n} from '@angular/core';\nimport {\n type CompiledTranslation,\n type inferCompiledTranslationMap,\n} from './compile';\nimport { createT } from './register-namespace';\nimport { type UnknownStringKeyObject } from './string-key-object.type';\nimport { TranslationStore } from './translation-store';\n\nfunction compareObjects(\n a?: Record<string, string>,\n b?: Record<string, string>,\n): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every((key) => a[key] === b[key]);\n}\n\n@Directive()\nexport abstract class Translate<\n TInput extends string,\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n TMap extends inferCompiledTranslationMap<T> = inferCompiledTranslationMap<T>,\n TKey extends TInput & keyof TMap & string = TInput & keyof TMap & string,\n> {\n private readonly t = createT(inject(TranslationStore));\n\n readonly translate =\n input.required<\n TMap[TKey] extends void\n ? TKey | [key: TKey]\n : [key: TKey, vars: TMap[TKey]]\n >();\n\n constructor() {\n const inputs = computed(() => this.translate(), {\n equal: (a, b) => {\n if (a === b) return true;\n if (typeof a === 'string' || typeof b === 'string') return false;\n if (a[0] !== b[0]) return false;\n return compareObjects(\n a[1] as Record<string, string>,\n b[1] as Record<string, string>,\n );\n },\n });\n\n const translation = computed(() => {\n const inp = inputs();\n return typeof inp === 'string'\n ? this.t(inp)\n : this.t(inp[0], inp[1] as Record<string, string>);\n });\n\n const renderer = inject(Renderer2);\n const el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n afterRenderEffect({\n write: () => {\n renderer.setProperty(el.nativeElement, 'textContent', translation());\n },\n });\n }\n}\n","import { ChangeDetectorRef, effect, inject } from '@angular/core';\nimport {\n type CompiledTranslation,\n type inferCompiledTranslationMap,\n} from './compile';\nimport { createT } from './register-namespace';\nimport {\n type AnyStringRecord,\n type UnknownStringKeyObject,\n} from './string-key-object.type';\nimport { TranslationStore } from './translation-store';\n\ntype TransformTFn<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n TMap extends inferCompiledTranslationMap<T>,\n> = <TKey extends keyof TMap & string>(\n key: TKey,\n ...args: TMap[TKey] extends void\n ? [locale?: string]\n : [TMap[TKey], locale?: string]\n) => string;\n\nfunction createTransformFn<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n TMap extends inferCompiledTranslationMap<T>,\n>(): TransformTFn<T, TMap> {\n const store = inject(TranslationStore);\n const t = createT<TMap>(store);\n\n const fn = <TKey extends keyof TMap & string>(\n key: TKey,\n variablesOrLocale?: string | AnyStringRecord,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _?: string, // maybeLocale\n ): string => {\n const vars =\n typeof variablesOrLocale === 'string' ? undefined : variablesOrLocale;\n\n return (t as (key: TKey, vars?: AnyStringRecord) => string)(key, vars);\n };\n\n return fn as unknown as TransformTFn<T, TMap>;\n}\n\nexport abstract class Translator<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n TMap extends inferCompiledTranslationMap<T> = inferCompiledTranslationMap<T>,\n> {\n constructor() {\n const cdr = inject(ChangeDetectorRef);\n const locale = inject(TranslationStore).locale;\n\n effect(() => {\n locale();\n cdr.markForCheck();\n });\n }\n\n transform = createTransformFn<T, TMap>();\n}\n","import type { WithParams } from './parameterize.type';\n\n/**\n * Power-user escape hatch for ICU messages whose parameters can't be inferred\n * from the message string — typically variables nested inside `plural` /\n * `select` / `selectordinal` arms, which the type-level extractor skips.\n *\n * Declared params are merged with auto-extracted ones; on key conflict, the\n * declared params win. Non-default locales for a key wrapped with `withParams`\n * may be plain strings — they don't need to repeat the wrapper.\n *\n * @example\n * ```ts\n * const ns = createNamespace('quote', {\n * // auto-extracts `count`; `name` is declared explicitly because it\n * // lives inside the plural arms and can't be inferred\n * stats: withParams<{ name: string }>(\n * '{count, plural, one {1 quote from {name}} other {# quotes from {name}}}',\n * ),\n * });\n *\n * // t inferred as: (key, { count: number; name: string }) => string\n * t('quote.stats', { count: 3, name: 'Alice' });\n * ```\n */\nexport function withParams<\n const P extends Record<string, unknown>,\n const S extends string = string,\n>(message: S): WithParams<P, S> {\n return message as unknown as WithParams<P, S>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["cache","getFormatter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mmstack-translate.mjs","sources":["../../../../packages/translate/src/lib/delim.ts","../../../../packages/translate/src/lib/compile.ts","../../../../packages/translate/src/lib/create-namespace.ts","../../../../packages/translate/src/lib/path-param.ts","../../../../packages/translate/src/lib/translation-store.ts","../../../../packages/translate/src/lib/format/provide-defaults.ts","../../../../packages/translate/src/lib/format/unwrap.ts","../../../../packages/translate/src/lib/format/date.ts","../../../../packages/translate/src/lib/format/display-name.ts","../../../../packages/translate/src/lib/format/list.ts","../../../../packages/translate/src/lib/format/numeric.ts","../../../../packages/translate/src/lib/format/relative-time.ts","../../../../packages/translate/src/lib/format/injection.ts","../../../../packages/translate/src/lib/resolver-locale.ts","../../../../packages/translate/src/lib/register-namespace.ts","../../../../packages/translate/src/lib/route-helpers.ts","../../../../packages/translate/src/lib/testing/provide-mock-translations.ts","../../../../packages/translate/src/lib/translate.ts","../../../../packages/translate/src/lib/translator.ts","../../../../packages/translate/src/lib/with-params.ts","../../../../packages/translate/src/mmstack-translate.ts"],"sourcesContent":["const KEY_DELIM = '::MMT_DELIM::';\n\nexport function prependDelim(prefix: string, key: string): string {\n return `${prefix}${KEY_DELIM}${key}`;\n}\n\nexport function replaceWithDelim(str: string, repl = '.'): string {\n return str.replaceAll(repl, KEY_DELIM);\n}\n","import { prependDelim } from './delim';\nimport type {\n inferTranslationParamMap,\n inferTranslationShape,\n} from './parameterize.type';\nimport type { UnknownStringKeyObject } from './string-key-object.type';\n\nconst INTERNAL_SYMBOL = Symbol.for('mmstack-translate-internal');\n\ntype InternalSymbol = typeof INTERNAL_SYMBOL;\n\nexport type CompiledTranslation<\n T extends UnknownStringKeyObject,\n TNS extends string,\n TLocale extends string = string,\n> = {\n flat: Record<string, string>;\n locale?: TLocale;\n namespace: TNS;\n [INTERNAL_SYMBOL]: {\n shape: inferTranslationShape<T>;\n map: inferTranslationParamMap<TNS, T>;\n };\n};\n\nexport type mergeTranslationMaps<\n TMain extends CompiledTranslation<UnknownStringKeyObject, string>,\n TOther extends CompiledTranslation<UnknownStringKeyObject, string>,\n> = Omit<TMain, InternalSymbol> & {\n [INTERNAL_SYMBOL]: {\n shape: inferCompiledTranslationShape<TMain>;\n map: inferCompiledTranslationMap<TOther> &\n inferCompiledTranslationMap<TMain>;\n };\n};\n\nexport type inferCompiledTranslationNamespace<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n> = T['namespace'];\n\nexport type inferCompiledTranslationShape<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n> = T[InternalSymbol]['shape'];\n\nexport type inferCompiledTranslationMap<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n> = T[InternalSymbol]['map'];\n\nfunction isTranslationObject(t: unknown): t is UnknownStringKeyObject {\n return typeof t === 'object' && t !== null;\n}\n\nfunction flattenTranslation<T extends UnknownStringKeyObject>(obj: T) {\n return Object.entries(obj).reduce(\n (acc, [key, value]) => {\n if (typeof value === 'string') {\n acc[key] = value;\n } else if (isTranslationObject(value)) {\n Object.entries(flattenTranslation(value)).forEach(\n ([nestedKey, nestedValue]) => {\n acc[prependDelim(key, nestedKey)] = nestedValue;\n },\n );\n }\n\n return acc;\n },\n {} as Record<string, string>,\n );\n}\n\nexport function compileTranslation<\n T extends UnknownStringKeyObject,\n TNS extends string,\n TLocale extends string = string,\n>(\n translation: T,\n ns: TNS,\n locale?: TLocale,\n): CompiledTranslation<T, TNS, TLocale> {\n type $Shape = inferTranslationShape<T>;\n type $Map = inferTranslationParamMap<TNS, T>;\n\n return {\n locale,\n flat: flattenTranslation(translation),\n namespace: ns,\n [INTERNAL_SYMBOL]: {\n shape: {} as $Shape,\n map: {} as $Map,\n },\n };\n}\n","import {\n type CompiledTranslation,\n compileTranslation,\n type inferCompiledTranslationShape,\n type mergeTranslationMaps,\n} from './compile';\nimport { type UnknownStringKeyObject } from './string-key-object.type';\n\ntype TranslationNamespace<\n TNS extends string,\n T extends CompiledTranslation<UnknownStringKeyObject, TNS>,\n TShape extends UnknownStringKeyObject,\n> = {\n translation: T;\n createTranslation: <TLocale extends string>(\n locale: TLocale,\n translation: TShape,\n ) => CompiledTranslation<TShape, TNS, TLocale>;\n createMergedNamespace: <\n TOtherNS extends string,\n const TOther extends UnknownStringKeyObject,\n TOtherCompiled extends CompiledTranslation<TOther, TOtherNS>,\n >(\n ns: TOtherNS,\n translation: TOther,\n ) => TranslationNamespace<\n TOtherNS,\n mergeTranslationMaps<TOtherCompiled, T>,\n inferCompiledTranslationShape<TOtherCompiled>\n >;\n};\n\nexport function createNamespace<\n const T extends UnknownStringKeyObject,\n TNS extends string,\n>(ns: TNS, translation: T) {\n const compiled = compileTranslation<T, TNS>(translation, ns);\n\n type TCompiled = typeof compiled;\n type TShape = inferCompiledTranslationShape<typeof compiled>;\n\n const namespace: TranslationNamespace<TNS, TCompiled, TShape> = {\n translation: compiled,\n createTranslation: <TLocale extends string>(\n locale: TLocale,\n translation: TShape,\n ) => {\n return compileTranslation(translation, ns, locale);\n },\n createMergedNamespace: <\n TOther extends UnknownStringKeyObject,\n TOtherNS extends string,\n TOtherCompiled extends CompiledTranslation<TOther, TOtherNS> =\n CompiledTranslation<TOther, TOtherNS>,\n >(\n otherNs: TOtherNS,\n otherTranslation: TOther,\n ) => {\n return createNamespace(otherNs, otherTranslation) as TranslationNamespace<\n TOtherNS,\n mergeTranslationMaps<TOtherCompiled, TCompiled>,\n inferCompiledTranslationShape<TOtherCompiled>\n > as unknown as any;\n },\n };\n\n return namespace;\n}\n","import { computed, inject, type Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, type ParamMap, Router } from '@angular/router';\n\n/**\n * Dynamic path parameter signal, that allows resolution even when paramsInheritenceStrategy isnt always\n * This helper depends on an internal\n */\nexport function pathParam(\n key: string | (() => string),\n route = inject(ActivatedRoute),\n): Signal<string | null> {\n const keySignal =\n typeof key === 'string' ? computed(() => key) : computed(key);\n\n const routerOptions = inject(Router)['options'];\n\n if (\n routerOptions &&\n typeof routerOptions === 'object' &&\n routerOptions.paramsInheritanceStrategy === 'always'\n ) {\n const params = toSignal(route.paramMap, {\n initialValue: route.snapshot.paramMap,\n });\n\n return computed(() => params().get(keySignal()));\n }\n\n const paramMapSignals: Signal<ParamMap>[] = [];\n let currentRoute: ActivatedRoute | null = route;\n\n const isStatic = typeof key === 'string';\n\n while (currentRoute) {\n const initial = currentRoute.snapshot.paramMap;\n paramMapSignals.push(\n toSignal(currentRoute.paramMap, {\n initialValue: initial,\n }),\n );\n\n // For static keys, stop once we find the param, will find first in computed for loop already so basically noop for for loop\n if (isStatic && initial.has(key as string)) break;\n\n currentRoute = currentRoute.parent;\n }\n\n return computed(() => {\n const paramKey = keySignal();\n\n for (const map of paramMapSignals) {\n const v = map().get(paramKey);\n if (v) return v;\n }\n\n return null;\n });\n}\n","import {\n computed,\n effect,\n inject,\n Injectable,\n InjectionToken,\n isDevMode,\n LOCALE_ID,\n type Provider,\n resource,\n type Signal,\n signal,\n untracked,\n type WritableSignal,\n} from '@angular/core';\nimport { createIntl, createIntlCache, type IntlConfig } from '@formatjs/intl';\nimport { type CompiledTranslation } from './compile';\nimport { prependDelim } from './delim';\nimport { pathParam } from './path-param';\nimport { type UnknownStringKeyObject } from './string-key-object.type';\n\ntype BaseConfig = Omit<IntlConfig, 'locale' | 'messages'> & {\n /** Checks next locale is in provided array before switching locales */\n supportedLocales?: string[];\n /** Preloads the default locale ensuring sync fallback, not necessary for most cases as it will lazily load automatically when needed */\n preloadDefaultLocale?: boolean;\n};\n\ntype RouteBasedConfig = BaseConfig & {\n /** Auto-resolution when using a locale parameter via angular router */\n localeParamName?: string;\n localeStorage?: never;\n};\n\ntype LocaleStorage = {\n /** Called once on init to restore the last selected locale. Return `null` if nothing is stored. Values not in `supportedLocales` are ignored. */\n read: () => string | null;\n /** Called whenever the active locale changes. Fires once on init with the resolved initial value. */\n write: (locale: string) => void;\n};\n\ntype DynamicConfig = BaseConfig & {\n /** Custom storage mechanism for last set locale, it will be read on init & set the locale to the last value if it is still valid */\n localeStorage?: LocaleStorage;\n localeParamName?: never;\n};\n\ntype Config = RouteBasedConfig | DynamicConfig;\n\nconst CONFIG_TOKEN = new InjectionToken<Config>('mmstack-intl-config');\n\nexport function provideIntlConfig(config: Config): Provider[] {\n const providers: Provider[] = [\n {\n useFactory: (localeId: string) => {\n const next = {\n ...config,\n };\n\n const defaultLocale =\n config.defaultLocale ?? config.supportedLocales?.at(0) ?? localeId;\n\n if (\n next.supportedLocales &&\n !next.supportedLocales.includes(defaultLocale)\n ) {\n next.supportedLocales = [...next.supportedLocales, defaultLocale];\n }\n\n return next;\n },\n deps: [LOCALE_ID],\n provide: CONFIG_TOKEN,\n },\n ];\n\n const defaultLocale = config.defaultLocale ?? config.supportedLocales?.at(0);\n\n if (!defaultLocale) return providers;\n\n providers.push({\n provide: LOCALE_ID,\n useValue: defaultLocale,\n });\n\n return providers;\n}\n\nexport function injectIntlConfig() {\n return inject(CONFIG_TOKEN, { optional: true }) ?? undefined;\n}\n\nexport function injectDefaultLocale() {\n return injectIntlConfig()?.defaultLocale ?? inject(LOCALE_ID) ?? 'en-US';\n}\n\nexport function injectSupportedLocales() {\n return injectIntlConfig()?.supportedLocales ?? [injectDefaultLocale()];\n}\n\n/**\n * @internal\n * the actual locale signal used to store the current locale string\n */\nconst STORE_LOCALE = signal('en-US');\n\n/**\n * @internal\n * @deprecated will be removed when ng23 drops\n */\nexport function readLocaleUnsafe() {\n return STORE_LOCALE();\n}\n\nexport function injectLocaleInternal() {\n return STORE_LOCALE;\n}\n\nfunction proxyToGlobalSingleton(\n src: WritableSignal<string>,\n): WritableSignal<string> {\n const originalSet = src.set;\n\n src.set = (next) => {\n originalSet(next);\n STORE_LOCALE.set(next);\n };\n\n src.update = (updater) => {\n src.set(updater(untracked(src)));\n };\n\n return src;\n}\n\nfunction isDynamicConfig(\n cfg?: Config,\n): cfg is DynamicConfig & { localeStorage: LocaleStorage } {\n return !!cfg && 'localeStorage' in cfg && !!cfg.localeStorage;\n}\n\nfunction initLocale(src: WritableSignal<string>) {\n const config = injectIntlConfig();\n const defaultValue = injectDefaultLocale();\n\n if (!isDynamicConfig(config)) {\n src.set(defaultValue);\n return src;\n }\n\n let next: string | null = null;\n try {\n const stored = config.localeStorage.read();\n\n if (\n stored !== null &&\n (!config.supportedLocales || config.supportedLocales.includes(stored))\n ) {\n next = stored;\n }\n } catch (e) {\n if (isDevMode())\n console.error(\n '[Translate] Failed to read stored locale from localeStorage',\n e,\n );\n }\n\n src.set(next ?? defaultValue);\n effect(() => {\n try {\n config.localeStorage.write(src());\n } catch (e) {\n if (isDevMode())\n console.error('[Translate] Failed to write locale to localeStorage', e);\n }\n });\n\n return src;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslationStore {\n private readonly simpleKeyMap = new Map<string, Signal<string>>();\n private readonly cache = createIntlCache();\n private readonly config = injectIntlConfig();\n readonly loadQueue = signal<string[]>([]);\n readonly locale: WritableSignal<string>;\n private readonly defaultLocale = injectDefaultLocale();\n private readonly translations = signal<\n Record<string, Record<string, string>>\n >({\n [this.defaultLocale]: {},\n });\n private attemptedFallbackLoad = false;\n\n private readonly onDemandLoaders = new Map<\n string,\n Record<\n string,\n () => Promise<CompiledTranslation<UnknownStringKeyObject, string>>\n >\n >();\n\n private readonly nonMessageConfig = computed(() => ({\n ...this.config,\n locale: this.locale(),\n }));\n\n private readonly messages = computed(\n () =>\n this.translations()[this.locale()] ??\n this.translations()[this.defaultLocale] ??\n {},\n );\n\n readonly dynamicLocaleLoader = resource({\n params: computed(() => this.loadQueue().at(0) ?? null),\n loader: async ({ params: newLocale, abortSignal }) => {\n if (!newLocale) return;\n\n const currentTranslations = untracked(this.translations);\n\n const loadPromises: Promise<{\n namespace: string;\n flat: Record<string, string>;\n } | null>[] = [];\n\n for (const [namespace, loaders] of this.onDemandLoaders.entries()) {\n const loader = loaders[newLocale];\n if (loader) {\n const hasNamespaceForLocale =\n currentTranslations[newLocale] &&\n Object.keys(currentTranslations[newLocale]).some((key) =>\n key.startsWith(`${prependDelim(namespace, '').slice(0, -1)}`),\n );\n\n if (!hasNamespaceForLocale) {\n loadPromises.push(\n loader()\n .then((translation) => {\n if (abortSignal.aborted) return null;\n return {\n namespace: translation.namespace,\n flat: translation.flat,\n };\n })\n .catch((err) => {\n if (isDevMode()) {\n console.error(\n '[Translate] Failed to load',\n namespace,\n newLocale,\n err,\n );\n }\n\n return null;\n }),\n );\n }\n }\n }\n\n return Promise.all(loadPromises)\n .then((res) => res.filter((r) => r !== null))\n .then((res) => ({\n locales: res,\n locale: newLocale,\n }));\n },\n });\n\n readonly intl = computed(() =>\n createIntl(\n {\n ...this.nonMessageConfig(),\n messages: this.messages(),\n },\n this.cache,\n ),\n );\n\n constructor() {\n this.locale = proxyToGlobalSingleton(initLocale(signal('en-US')));\n const paramName = this.config?.localeParamName;\n if (paramName) {\n const param = pathParam(paramName);\n\n effect(() => {\n const loc = param();\n if (\n !loc ||\n loc === untracked(this.locale) ||\n untracked(this.loadQueue).includes(loc)\n )\n return;\n if (this.hasLocaleLoaders(loc)) this.locale.set(loc);\n else this.loadQueue.update((q) => [...q, loc]);\n });\n }\n\n effect(() => {\n if (\n // should never be in error state, but best to check in case something throws\n this.dynamicLocaleLoader.error() ||\n this.dynamicLocaleLoader.isLoading()\n )\n return;\n const dynamicLocales = this.dynamicLocaleLoader.value();\n\n if (!dynamicLocales) return;\n\n // Register loaded translations\n for (const locale of dynamicLocales.locales) {\n this.register(locale.namespace, {\n [dynamicLocales.locale]: locale.flat,\n });\n }\n\n const hasTranslations =\n dynamicLocales.locales.length > 0 ||\n this.translations()[dynamicLocales.locale];\n\n if (hasTranslations) {\n this.loadQueue.update((q) =>\n q.filter((l) => l !== dynamicLocales.locale),\n );\n this.locale.set(dynamicLocales.locale);\n }\n });\n }\n\n buildSimpleKeySignal(key: string) {\n const found = this.simpleKeyMap.get(key);\n if (found) return found;\n\n const sig = computed(() => this.formatMessageInternal(key));\n this.simpleKeyMap.set(key, sig);\n return sig;\n }\n\n formatMessage(key: string, values?: Record<string, string | number>) {\n if (values === undefined) return this.buildSimpleKeySignal(key)();\n\n return this.formatMessageInternal(key, values);\n }\n\n private formatMessageInternal(\n key: string,\n values?: Record<string, string | number>,\n ) {\n const message =\n this.translations()[this.locale()]?.[key] ??\n this.translations()[this.defaultLocale]?.[key] ??\n '';\n\n if (!message) {\n if (this.attemptedFallbackLoad) return '';\n\n this.attemptedFallbackLoad = true;\n untracked(() => {\n if (!this.loadQueue().includes(this.defaultLocale))\n this.loadQueue.update((q) => [...q, this.defaultLocale]);\n });\n return '';\n }\n\n return this.intl().formatMessage(\n { id: key, defaultMessage: message },\n values,\n );\n }\n\n register(\n namespace: string,\n flat: Partial<Record<string, Record<string, string>>>,\n ) {\n this.translations.update((cur) => {\n return Object.entries(flat).reduce(\n (acc, [locale, translation]) => {\n const localeTranslation = acc[locale] ?? {};\n\n const withNS = Object.entries(translation ?? {}).reduce(\n (acc, [key, value]) => {\n acc[prependDelim(namespace, key)] = value;\n return acc;\n },\n {} as Record<string, string>,\n );\n\n acc[locale] = {\n ...localeTranslation,\n ...withNS,\n };\n\n return acc;\n },\n { ...cur },\n );\n });\n }\n\n registerOnDemandLoaders(\n namespace: string,\n loaders: Record<string, () => Promise<any>>,\n ) {\n this.onDemandLoaders.set(namespace, loaders);\n }\n\n hasLocaleLoaders(locale: string): boolean {\n return Array.from(this.onDemandLoaders.values()).some(\n (loaders) => loaders[locale],\n );\n }\n}\n\nexport function injectIntl() {\n return inject(TranslationStore).intl;\n}\n\n/**\n * Inject a dynamic locale signal that supports runtime language switching.\n *\n * @returns A writable signal with the current locale and loading state.\n * Only allows switching to locales that have registered loaders.\n *\n * @example\n * ```typescript\n * const locale = injectDynamicLocale();\n *\n * // Switch language (triggers automatic translation loading)\n * locale.set('sl-SI');\n *\n * // Check loading state\n * if (locale.isLoading()) {\n * // Show spinner\n * }\n * ```\n */\nexport function injectDynamicLocale(): WritableSignal<string> & {\n isLoading: Signal<boolean>;\n} {\n const store = inject(TranslationStore);\n const supportedLocales = injectIntlConfig()?.supportedLocales;\n\n const source = computed(() => store.locale()) as WritableSignal<string> & {\n isLoading: Signal<boolean>;\n };\n\n const inSupportedLocales =\n supportedLocales === undefined\n ? () => true\n : (locale: string) => supportedLocales.includes(locale);\n\n const set = (value: string) => {\n if (\n value === untracked(source) ||\n untracked(store.loadQueue).includes(value)\n )\n return;\n\n if (!inSupportedLocales(value)) {\n if (isDevMode())\n console.warn(\n `[Translate] Locale \"${value}\" is not in supportedLocales, switch prevented. Available options are:`,\n supportedLocales,\n );\n\n return;\n }\n\n if (isDevMode() && !store.hasLocaleLoaders(value))\n console.warn(\n `[Translate] No loaders registered for locale \"${value}\". Switching to this locale will have no effect.`,\n );\n\n store.loadQueue.update((q) => [...q, value]);\n };\n\n source.set = set;\n source.update = (updater: (value: string) => string) => {\n const next = updater(untracked(source));\n source.set(next);\n };\n source.asReadonly = () => source;\n\n source.isLoading = store.dynamicLocaleLoader.isLoading;\n\n return source;\n}\n\n/**\n * Power-user escape hatch for adding translations imperatively (e.g. content\n * loaded from a remote API after bootstrap). Returns a function that registers\n * a flat per-locale map of keys under a given namespace\n *\n * Pair with {@link injectUnsafeT} to read the added keys without compile-time\n * constraints.\n *\n * @example\n * ```ts\n * const addTranslations = injectAddTranslations();\n * addTranslations('remote', {\n * 'en-US': { greeting: 'Hi {name}' },\n * 'sl-SI': { greeting: 'Zdravo {name}' },\n * });\n * ```\n */\nexport function injectAddTranslations() {\n const store = inject(TranslationStore);\n const supportedLocales = injectIntlConfig()?.supportedLocales;\n const supportedLocalesSet = supportedLocales\n ? new Set(supportedLocales)\n : null;\n\n const validate = supportedLocalesSet\n ? (translations: Record<string, Record<string, string>>) => {\n const clean: Record<string, Record<string, string>> = {};\n const invalidLocales: string[] = [];\n\n for (const [locale, translation] of Object.entries(translations)) {\n if (!supportedLocalesSet.has(locale)) {\n invalidLocales.push(locale);\n continue;\n }\n clean[locale] = translation;\n }\n\n if (isDevMode() && invalidLocales.length > 0)\n console.warn(\n `[Translate] Attempted to add translations for unsupported locales: ${invalidLocales.join(', ')}. These translations were ignored. Supported locales are: ${(supportedLocales ?? []).join(', ')}.`,\n );\n\n return clean;\n }\n : (translations: Record<string, Record<string, string>>) => translations;\n\n return (ns: string, translations: Record<string, Record<string, string>>) => {\n store.register(ns, validate(translations));\n };\n}\n","import {\n computed,\n inject,\n InjectionToken,\n isSignal,\n type Provider,\n type Signal,\n} from '@angular/core';\nimport { injectDynamicLocale } from '../translation-store';\n\nfunction equalLocale(a: { locale: string }, b: { locale: string }): boolean {\n return a.locale === b.locale;\n}\n\nexport function createFormatterProvider<T extends { locale: string }>(\n formatterName: string,\n libraryDefaults: Omit<T, 'locale'>,\n nonLocaleEqual: (a: Omit<T, 'locale'>, b: Omit<T, 'locale'>) => boolean,\n) {\n const token = new InjectionToken(\n `@mmstack/translate:format-${formatterName}-config`,\n {\n factory: (): Signal<T> => {\n const loc = injectDynamicLocale();\n return computed(\n () =>\n ({\n ...libraryDefaults,\n locale: loc(),\n }) as T,\n { equal: equalLocale },\n );\n },\n },\n );\n\n const provider = (\n valueOrFn:\n | Omit<Partial<T>, 'locale'>\n | (() => Omit<Partial<T>, 'locale'> | Signal<Omit<Partial<T>, 'locale'>>),\n ): Provider => {\n const fnProvider =\n typeof valueOrFn === 'function'\n ? (valueOrFn as () =>\n | Omit<Partial<T>, 'locale'>\n | Signal<Omit<Partial<T>, 'locale'>>)\n : () => valueOrFn;\n\n return {\n provide: token,\n useFactory: () => {\n const loc = injectDynamicLocale();\n\n const providedDefaultsOrSignal = fnProvider();\n\n if (isSignal(providedDefaultsOrSignal))\n return computed(\n () =>\n ({\n ...libraryDefaults,\n ...providedDefaultsOrSignal(),\n locale: loc(),\n }) as T,\n {\n equal: (a, b) => equalLocale(a, b) && nonLocaleEqual(a, b),\n },\n );\n\n const defaults = {\n ...libraryDefaults,\n ...providedDefaultsOrSignal,\n };\n\n return computed(\n () =>\n ({\n ...defaults,\n locale: loc(),\n }) as T,\n {\n equal: equalLocale,\n },\n );\n },\n };\n };\n\n const injectFn = (): Signal<T> => inject(token as any);\n\n return [provider, injectFn] as const;\n}\n\nexport type inferProvideParameter<\n T extends ReturnType<typeof createFormatterProvider>[0],\n> = Parameters<T>[0];\n","import { isSignal, type Signal } from '@angular/core';\n\nexport function unwrap<T>(value: T | Signal<T>): T {\n return isSignal(value) ? value() : value;\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\nconst FORMAT_PRESETS = {\n short: { dateStyle: 'short', timeStyle: 'short' },\n medium: { dateStyle: 'medium', timeStyle: 'medium' },\n long: { dateStyle: 'long', timeStyle: 'long' },\n full: { dateStyle: 'full', timeStyle: 'full' },\n\n shortDate: { dateStyle: 'short' },\n mediumDate: { dateStyle: 'medium' },\n longDate: { dateStyle: 'long' },\n fullDate: { dateStyle: 'full' },\n\n shortTime: { timeStyle: 'short' },\n mediumTime: { timeStyle: 'medium' },\n longTime: { timeStyle: 'long' },\n fullTime: { timeStyle: 'full' },\n} satisfies Record<string, Intl.DateTimeFormatOptions>;\n\ntype DateFormat = keyof typeof FORMAT_PRESETS;\n\n/**\n * Supported date inputs\n */\nexport type SupportedDateInput = Date | string | number | null | undefined;\n\n/**\n * Options for formatting a date\n */\nexport type FormatDateOptions = {\n /**\n * Timezone to use for formatting\n */\n tz?: string;\n /**\n * Format to use for formatting\n * @default 'medium'\n */\n format?: DateFormat | Intl.DateTimeFormatOptions;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omitting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatDateOptions = Omit<FormatDateOptions, 'locale'> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nfunction validDateOrNull(\n date: Date | string | number | null | undefined,\n): Date | null {\n if (date == null) return null;\n\n const d = date instanceof Date ? date : new Date(date);\n return isNaN(d.getTime()) ? null : d;\n}\n\nconst cache = new Map<string, Intl.DateTimeFormat>();\n\nfunction getFormatter(\n locale: string,\n format: DateFormat | Intl.DateTimeFormatOptions,\n timeZone?: string,\n): Intl.DateTimeFormat {\n const cacheKey = `${locale}|${typeof format === 'string' ? format : JSON.stringify(format)}|${timeZone ?? ''}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.DateTimeFormat(locale, {\n ...(typeof format === 'string' ? FORMAT_PRESETS[format] : format),\n timeZone,\n });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\n/**\n * @example formatDate(this.date, this.locale)\n */\nexport function formatDate(\n date: SupportedDateInput | Signal<SupportedDateInput>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatDate(this.date, { locale: 'sl-SI', format: 'shortDate' })\n */\nexport function formatDate(\n date: SupportedDateInput | Signal<SupportedDateInput>,\n opt: FormatDateOptions | Signal<FormatDateOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatDate()` instead, or pass locale explicitly.\n * @example formatDate(this.date)\n */\nexport function formatDate(\n date: SupportedDateInput | Signal<SupportedDateInput>,\n opt?: UnsafeFormatDateOptions | Signal<UnsafeFormatDateOptions>,\n): string;\n\nexport function formatDate(\n date: SupportedDateInput | Signal<SupportedDateInput>,\n optOrLocale?:\n | FormatDateOptions\n | Signal<FormatDateOptions>\n | string\n | Signal<string>\n | UnsafeFormatDateOptions\n | Signal<UnsafeFormatDateOptions>,\n): string {\n const validDate = validDateOrNull(unwrap(date));\n if (validDate === null) return '';\n\n const unwrappedArgs = unwrap(optOrLocale);\n let locale: string;\n let format: DateFormat | Intl.DateTimeFormatOptions = 'medium';\n let tz: string | undefined;\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (unwrappedArgs && typeof unwrappedArgs === 'object') {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n format = unwrappedArgs.format ?? 'medium';\n tz = unwrappedArgs.tz;\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(locale, format, tz).format(validDate);\n}\n\nconst [provideFormatDateDefaults, injectFormatDateOptions] =\n createFormatterProvider<FormatDateOptions>(\n 'date',\n {\n format: 'medium',\n },\n (a, b) => {\n if (a.tz !== b.tz) return false;\n\n if (a.format === b.format) return true;\n\n return JSON.stringify(a.format) === JSON.stringify(b.format);\n },\n );\n\n/**\n * Provide application-wide defaults for date formatting presets and timezones.\n * @example provideFormatDateDefaults({ format: 'shortDate'})\n */\nexport { provideFormatDateDefaults };\n\n/**\n * Inject a context-safe date formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatDate = injectFormatDate();\n * readonly displayDate = computed(() => formatDate(this.date()));\n */\nexport function injectFormatDate() {\n const defaults = injectFormatDateOptions();\n\n return (\n date: SupportedDateInput | Signal<SupportedDateInput>,\n optOrLocale?:\n | Partial<FormatDateOptions>\n | Signal<Partial<FormatDateOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatDate(date, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatDate(date, opt);\n };\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\nconst cache = new Map<string, Intl.DisplayNames>();\n\n/**\n * Options for formatting a display name\n */\nexport type FormatDisplayNameOptions = {\n /**\n * The display style for the result set\n * @default 'long'\n */\n style?: Intl.RelativeTimeFormatStyle;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omitting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatDisplayNameOptions = Omit<\n FormatDisplayNameOptions,\n 'locale'\n> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nfunction getFormatter(\n locale: string,\n type: Intl.DisplayNamesType,\n style: Intl.RelativeTimeFormatStyle,\n): Intl.DisplayNames {\n const cacheKey = `${locale}|${type}|${style}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.DisplayNames(locale, {\n type,\n style,\n });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\ntype SupportedCode = string | null | undefined;\n\n/**\n * @example formatDisplayName(this.value, 'region', this.locale)\n */\nexport function formatDisplayName(\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatDisplayName(this.value, 'region', {locale: 'en-US', style: 'long'})\n */\nexport function formatDisplayName(\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n opt: FormatDisplayNameOptions | Signal<FormatDisplayNameOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatDisplayName()` instead, or pass locale explicitly.\n * @example formatDisplayName(this.value)\n */\nexport function formatDisplayName(\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n opt?: UnsafeFormatDisplayNameOptions | Signal<UnsafeFormatDisplayNameOptions>,\n): string;\n\n/**\n * Format a display name using the current or provided locale\n *\n * @param value - The code to format\n * @param type - The type of display name to format\n * @param opt - Options for formatting\n * @returns Formatted display name string\n */\nexport function formatDisplayName(\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n localeOrOpt?:\n | FormatDisplayNameOptions\n | Signal<FormatDisplayNameOptions>\n | string\n | Signal<string>\n | UnsafeFormatDisplayNameOptions\n | Signal<UnsafeFormatDisplayNameOptions>,\n) {\n const unwrappedValue = unwrap(value);\n if (!unwrappedValue?.trim()) return '';\n\n const unwrappedType = unwrap(type);\n const unwrapped = unwrap(localeOrOpt);\n\n const locale =\n typeof unwrapped === 'string'\n ? unwrapped\n : (unwrapped?.locale ?? readLocaleUnsafe());\n\n const opt = typeof unwrapped === 'object' ? unwrapped : undefined;\n\n return (\n getFormatter(locale, unwrappedType, opt?.style ?? 'long').of(\n unwrappedValue,\n ) ?? ''\n );\n}\n\nconst [provideFormatDisplayNameDefaults, injectFormatDisplayNameDefaults] =\n createFormatterProvider<FormatDisplayNameOptions>(\n 'displayName',\n {\n style: 'long',\n },\n (a, b) => a.style === b.style,\n );\n\n/**\n * Provide application-wide defaults for display name formatting presets and timezones.\n * @example provideFormatDisplayNameDefaults({ style: 'long'})\n */\nexport { provideFormatDisplayNameDefaults };\n\n/**\n * Inject a context-safe date formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatDisplayName = injectFormatDisplayName();\n * readonly region = computed(() => formatDisplayName('US', 'region'));\n */\nexport function injectFormatDisplayName() {\n const defaults = injectFormatDisplayNameDefaults();\n\n return (\n value: SupportedCode | Signal<SupportedCode>,\n type: Intl.DisplayNamesType | Signal<Intl.DisplayNamesType>,\n localeOrOpt?:\n | FormatDisplayNameOptions\n | Signal<FormatDisplayNameOptions>\n | string\n | Signal<string>,\n ): string => {\n if (!localeOrOpt) return formatDisplayName(value, type, defaults());\n\n const unwrapped = unwrap(localeOrOpt);\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatDisplayName(value, type, opt);\n };\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\ntype ListType = 'conjunction' | 'disjunction' | 'unit';\ntype ListStyle = 'long' | 'short' | 'narrow';\n\nexport type SupportedListInput = string[] | null | undefined;\n\nconst cache = new Map<string, Intl.ListFormat>();\n\n/**\n * Options for formatting a list\n */\nexport type FormatListOptions = {\n /**\n * The type of list to format\n * @default 'conjunction'\n */\n type?: ListType;\n /**\n * The style of list to format\n * @default 'long'\n */\n style?: ListStyle;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omitting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatListOptions = Omit<FormatListOptions, 'locale'> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nconst EMPTY_ARRAY: string[] = [];\n\nfunction unwrapList(\n value: SupportedListInput | Signal<SupportedListInput>,\n): string[] {\n const unwrapped = unwrap(value);\n return Array.isArray(unwrapped) ? unwrapped : EMPTY_ARRAY;\n}\n\nfunction getFormatter(\n locale: string,\n type: ListType,\n style: ListStyle,\n): Intl.ListFormat {\n const cacheKey = `${locale}|${type}|${style}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.ListFormat(locale, { type, style });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\n/**\n * @example formatList(this.items, this.locale)\n */\nexport function formatList(\n value: SupportedListInput | Signal<SupportedListInput>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatList(this.items, { locale: 'sl-SI', type: 'disjunction' })\n */\nexport function formatList(\n value: SupportedListInput | Signal<SupportedListInput>,\n opt: FormatListOptions | Signal<FormatListOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatList()` instead, or pass locale explicitly.\n * @example formatList(this.items)\n */\nexport function formatList(\n value: SupportedListInput | Signal<SupportedListInput>,\n opt?: UnsafeFormatListOptions | Signal<UnsafeFormatListOptions>,\n): string;\n\nexport function formatList(\n value: SupportedListInput | Signal<SupportedListInput>,\n optOrLocale?:\n | FormatListOptions\n | Signal<FormatListOptions>\n | string\n | Signal<string>\n | UnsafeFormatListOptions\n | Signal<UnsafeFormatListOptions>,\n): string {\n const unwrappedValue = unwrapList(value);\n if (unwrappedValue.length === 0) return '';\n\n const unwrappedArgs = unwrap(optOrLocale);\n let locale: string;\n let type: ListType = 'conjunction';\n let style: ListStyle = 'long';\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (unwrappedArgs && typeof unwrappedArgs === 'object') {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n type = unwrappedArgs.type ?? 'conjunction';\n style = unwrappedArgs.style ?? 'long';\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(locale, type, style).format(unwrappedValue);\n}\n\nconst [provideFormatListDefaults, injectFormatListOptions] =\n createFormatterProvider<FormatListOptions>(\n 'list',\n {\n type: 'conjunction',\n style: 'long',\n },\n (a, b) => a.type === b.type && a.style === b.style,\n );\n\n/**\n * Provide application-wide defaults for list formatting presets.\n * @example provideFormatListDefaults({ type: 'disjunction' })\n */\nexport { provideFormatListDefaults };\n\n/**\n * Inject a context-safe list formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatList = injectFormatList();\n * readonly displayList = computed(() => formatList(this.items()));\n */\nexport function injectFormatList() {\n const defaults = injectFormatListOptions();\n\n return (\n value: SupportedListInput | Signal<SupportedListInput>,\n optOrLocale?:\n | Partial<FormatListOptions>\n | Signal<Partial<FormatListOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatList(value, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatList(value, opt);\n };\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\ntype NumberNotation = 'standard' | 'scientific' | 'engineering' | 'compact';\n\ntype SupportedNumberValue = number | null | undefined;\n\nconst cache = new Map<string, Intl.NumberFormat>();\n\nfunction unwrapValue(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n fallbackToZero = false,\n): number | null {\n const unwrapped = unwrap(value);\n\n if (unwrapped === null || unwrapped === undefined || isNaN(unwrapped))\n return fallbackToZero ? 0 : null;\n\n return unwrapped;\n}\n\n/**\n * Options for formatting a number\n */\nexport type FormatNumberOptions = {\n /**\n * The notation to use for formatting\n * @default 'standard'\n */\n notation?: NumberNotation;\n /**\n * Minimum number of fraction digits to use\n */\n minFractionDigits?: number;\n /**\n * Maximum number of fraction digits to use\n */\n maxFractionDigits?: number;\n /**\n * Whether to use grouping\n * @default true\n */\n useGrouping?: boolean;\n /**\n * If the number is not a valid number, return formatted 0. By default formatter returns an empty string\n * @default false\n */\n fallbackToZero?: boolean;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omitting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatNumberOptions = Omit<FormatNumberOptions, 'locale'> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nfunction getFormatter(\n locale: string,\n minFractionDigits: number | undefined,\n maxFractionDigits: number | undefined,\n useGrouping?: boolean,\n notation?: NumberNotation,\n currency?: string,\n display?: CurrencyDisplay,\n style?: 'currency' | 'percent',\n): Intl.NumberFormat {\n const cacheKey = `${locale}|${notation ?? 'standard'}|${minFractionDigits}|${maxFractionDigits}|${useGrouping ?? true}|${currency ?? 'none'}|${display ?? 'none'}|${style ?? 'decimal'}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, {\n style,\n notation,\n minimumFractionDigits: minFractionDigits,\n maximumFractionDigits: maxFractionDigits,\n useGrouping,\n currency,\n currencyDisplay: display,\n });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\n/**\n * @example formatNumber(this.value, this.locale)\n */\nexport function formatNumber(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatNumber(this.value, { locale: 'de-DE', notation: 'compact' })\n */\nexport function formatNumber(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n opt: FormatNumberOptions | Signal<FormatNumberOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatNumber()` instead, or pass locale explicitly.\n * @example formatNumber(this.value)\n */\nexport function formatNumber(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n opt?: UnsafeFormatNumberOptions | Signal<UnsafeFormatNumberOptions>,\n): string;\n\nexport function formatNumber(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n optOrLocale?:\n | FormatNumberOptions\n | Signal<FormatNumberOptions>\n | string\n | Signal<string>\n | UnsafeFormatNumberOptions\n | Signal<UnsafeFormatNumberOptions>,\n): string {\n const unwrappedArgs = unwrap(optOrLocale);\n const isOpt = unwrappedArgs != null && typeof unwrappedArgs === 'object';\n const fallbackToZero = isOpt ? unwrappedArgs.fallbackToZero : undefined;\n const unwrappedNumber = unwrapValue(value, fallbackToZero);\n\n if (unwrappedNumber === null) return '';\n\n let locale: string;\n let notation: NumberNotation | undefined;\n let minFractionDigits: number | undefined;\n let maxFractionDigits: number | undefined;\n let useGrouping = true;\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (isOpt) {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n notation = unwrappedArgs.notation ?? 'standard';\n minFractionDigits = unwrappedArgs.minFractionDigits;\n maxFractionDigits = unwrappedArgs.maxFractionDigits;\n useGrouping = unwrappedArgs.useGrouping ?? true;\n } else {\n locale = readLocaleUnsafe();\n notation = 'standard';\n }\n\n return getFormatter(\n locale,\n minFractionDigits,\n maxFractionDigits,\n useGrouping,\n notation,\n ).format(unwrappedNumber);\n}\n\nconst [provideFormatNumberDefaults, injectFormatNumberOptions] =\n createFormatterProvider<FormatNumberOptions>(\n 'number',\n {\n notation: 'standard',\n useGrouping: true,\n },\n (a, b) =>\n a.notation === b.notation &&\n a.minFractionDigits === b.minFractionDigits &&\n a.maxFractionDigits === b.maxFractionDigits &&\n a.useGrouping === b.useGrouping &&\n a.fallbackToZero === b.fallbackToZero,\n );\n\n/**\n * Provide application-wide defaults for number formatting presets.\n * @example provideFormatNumberDefaults({ notation: 'compact' })\n */\nexport { provideFormatNumberDefaults };\n\n/**\n * Inject a context-safe number formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatNumber = injectFormatNumber();\n * readonly display = computed(() => formatNumber(this.value()));\n */\nexport function injectFormatNumber() {\n const defaults = injectFormatNumberOptions();\n\n return (\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n optOrLocale?:\n | Partial<FormatNumberOptions>\n | Signal<Partial<FormatNumberOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatNumber(value, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatNumber(value, opt);\n };\n}\n\n/**\n * Options for formatting a percentage value\n */\nexport type FormatPercentOptions = {\n /**\n * Minimum number of fraction digits to use\n */\n minFractionDigits?: number;\n /**\n * Maximum number of fraction digits to use\n */\n maxFractionDigits?: number;\n /**\n * If the number is not a valid number, return formatted 0. By default formatter returns an empty string\n * @default false\n */\n fallbackToZero?: boolean;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omitting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatPercentOptions = Omit<\n FormatPercentOptions,\n 'locale'\n> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\n/**\n * @example formatPercent(this.value, this.locale)\n */\nexport function formatPercent(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatPercent(this.value, { locale: 'de-DE', maxFractionDigits: 2 })\n */\nexport function formatPercent(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n opt: FormatPercentOptions | Signal<FormatPercentOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatPercent()` instead, or pass locale explicitly.\n * @example formatPercent(this.value)\n */\nexport function formatPercent(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n opt?: UnsafeFormatPercentOptions | Signal<UnsafeFormatPercentOptions>,\n): string;\n\nexport function formatPercent(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n optOrLocale?:\n | FormatPercentOptions\n | Signal<FormatPercentOptions>\n | string\n | Signal<string>\n | UnsafeFormatPercentOptions\n | Signal<UnsafeFormatPercentOptions>,\n): string {\n const unwrappedArgs = unwrap(optOrLocale);\n const isOpt = unwrappedArgs != null && typeof unwrappedArgs === 'object';\n const fallbackToZero = isOpt ? unwrappedArgs.fallbackToZero : undefined;\n const unwrappedNumber = unwrapValue(value, fallbackToZero);\n\n if (unwrappedNumber === null) return '';\n\n let locale: string;\n let minFractionDigits: number | undefined;\n let maxFractionDigits: number | undefined;\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (isOpt) {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n minFractionDigits = unwrappedArgs.minFractionDigits;\n maxFractionDigits = unwrappedArgs.maxFractionDigits;\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(\n locale,\n minFractionDigits,\n maxFractionDigits,\n undefined,\n undefined,\n undefined,\n undefined,\n 'percent',\n ).format(unwrappedNumber);\n}\n\nconst [provideFormatPercentDefaults, injectFormatPercentOptions] =\n createFormatterProvider<FormatPercentOptions>(\n 'percent',\n {},\n (a, b) =>\n a.minFractionDigits === b.minFractionDigits &&\n a.maxFractionDigits === b.maxFractionDigits &&\n a.fallbackToZero === b.fallbackToZero,\n );\n\n/**\n * Provide application-wide defaults for percent formatting presets.\n * @example provideFormatPercentDefaults({ maxFractionDigits: 1 })\n */\nexport { provideFormatPercentDefaults };\n\n/**\n * Inject a context-safe percent formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n */\nexport function injectFormatPercent() {\n const defaults = injectFormatPercentOptions();\n\n return (\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n optOrLocale?:\n | Partial<FormatPercentOptions>\n | Signal<Partial<FormatPercentOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatPercent(value, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatPercent(value, opt);\n };\n}\n\ntype CurrencyDisplay = 'symbol' | 'narrowSymbol' | 'code' | 'name';\n\n/**\n * Options for formatting a currency\n */\nexport type FormatCurrencyOptions = {\n /**\n * The display type for the currency format\n * @default 'symbol'\n */\n display?: CurrencyDisplay;\n /**\n * If the number is not a valid number, return formatted 0. By default formatter returns an empty string\n * @default false\n */\n fallbackToZero?: boolean;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omitting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatCurrencyOptions = Omit<\n FormatCurrencyOptions,\n 'locale'\n> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\n/**\n * @example formatCurrency(this.value, 'USD', this.locale)\n */\nexport function formatCurrency(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatCurrency(this.value, 'EUR', { locale: 'de-DE', display: 'code' })\n */\nexport function formatCurrency(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n opt: FormatCurrencyOptions | Signal<FormatCurrencyOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatCurrency()` instead, or pass locale explicitly.\n * @example formatCurrency(this.value, 'USD')\n */\nexport function formatCurrency(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n opt?: UnsafeFormatCurrencyOptions | Signal<UnsafeFormatCurrencyOptions>,\n): string;\n\nexport function formatCurrency(\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n optOrLocale?:\n | FormatCurrencyOptions\n | Signal<FormatCurrencyOptions>\n | string\n | Signal<string>\n | UnsafeFormatCurrencyOptions\n | Signal<UnsafeFormatCurrencyOptions>,\n): string {\n const unwrappedArgs = unwrap(optOrLocale);\n const isOpt = unwrappedArgs != null && typeof unwrappedArgs === 'object';\n const fallbackToZero = isOpt ? unwrappedArgs.fallbackToZero : undefined;\n const unwrappedValue = unwrapValue(value, fallbackToZero);\n\n if (unwrappedValue === null) return '';\n\n let locale: string;\n let display: CurrencyDisplay = 'symbol';\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (isOpt) {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n display = unwrappedArgs.display ?? 'symbol';\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(\n locale,\n undefined,\n undefined,\n undefined,\n undefined,\n unwrap(currency),\n display,\n 'currency',\n ).format(unwrappedValue);\n}\n\nconst [provideFormatCurrencyDefaults, injectFormatCurrencyOptions] =\n createFormatterProvider<FormatCurrencyOptions>(\n 'currency',\n {\n display: 'symbol',\n },\n (a, b) =>\n a.display === b.display && a.fallbackToZero === b.fallbackToZero,\n );\n\n/**\n * Provide application-wide defaults for currency formatting presets.\n * @example provideFormatCurrencyDefaults({ display: 'code' })\n */\nexport { provideFormatCurrencyDefaults };\n\n/**\n * Inject a context-safe currency formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n */\nexport function injectFormatCurrency() {\n const defaults = injectFormatCurrencyOptions();\n\n return (\n value: SupportedNumberValue | Signal<SupportedNumberValue>,\n currency: string | Signal<string>,\n optOrLocale?:\n | Partial<FormatCurrencyOptions>\n | Signal<Partial<FormatCurrencyOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatCurrency(value, currency, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatCurrency(value, currency, opt);\n };\n}\n","import { type Signal } from '@angular/core';\nimport { readLocaleUnsafe } from '../translation-store';\nimport { createFormatterProvider } from './provide-defaults';\nimport { unwrap } from './unwrap';\n\nconst cache = new Map<string, Intl.RelativeTimeFormat>();\n\n/**\n * Options for formatting a relative time value\n */\nexport type FormatRelativeTimeOptions = {\n /**\n * The length of the internationalized message.\n * @default 'long'\n */\n style?: Intl.RelativeTimeFormatStyle;\n /**\n * Controls whether to use numeric values in the output.\n * @default 'always'\n */\n numeric?: Intl.RelativeTimeFormatNumeric;\n /**\n * Locale to use for formatting\n */\n locale: string;\n};\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. Omitting the locale property forces a fallback to a process-level global singleton.\n */\nexport type UnsafeFormatRelativeTimeOptions = Omit<\n FormatRelativeTimeOptions,\n 'locale'\n> & {\n /** Optional locale string falling back to the legacy global signal */\n locale?: string;\n};\n\nfunction getFormatter(\n locale: string,\n style: Intl.RelativeTimeFormatStyle,\n numeric: Intl.RelativeTimeFormatNumeric,\n): Intl.RelativeTimeFormat {\n const cacheKey = `${locale}|${style}|${numeric}`;\n let formatter = cache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.RelativeTimeFormat(locale, { style, numeric });\n cache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\nexport type RelativeTimeUnit = Intl.RelativeTimeFormatUnit;\n\ntype SupportedRelativeTimeInput = number | null | undefined;\n\n/**\n * @example formatRelativeTime(this.value, this.unit, this.locale)\n */\nexport function formatRelativeTime(\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n locale: string | Signal<string>,\n): string;\n\n/**\n * @example formatRelativeTime(this.value, 'day', { locale: 'sl-SI', numeric: 'auto' })\n */\nexport function formatRelativeTime(\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n opt: FormatRelativeTimeOptions | Signal<FormatRelativeTimeOptions>,\n): string;\n\n/**\n * @deprecated UNSAFE FOR SSR/EDGE. This signature reads from a process-level global singleton, will be fully removed when Angular 23 drops\n * Use `injectFormatRelativeTime()` instead, or pass locale explicitly.\n * @example formatRelativeTime(this.value, 'day')\n */\nexport function formatRelativeTime(\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n opt?:\n | UnsafeFormatRelativeTimeOptions\n | Signal<UnsafeFormatRelativeTimeOptions>,\n): string;\n\nexport function formatRelativeTime(\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n optOrLocale?:\n | FormatRelativeTimeOptions\n | Signal<FormatRelativeTimeOptions>\n | string\n | Signal<string>\n | UnsafeFormatRelativeTimeOptions\n | Signal<UnsafeFormatRelativeTimeOptions>,\n): string {\n const unwrappedValue = unwrap(value);\n if (\n unwrappedValue === null ||\n unwrappedValue === undefined ||\n isNaN(unwrappedValue)\n )\n return '';\n\n const unwrappedUnit = unwrap(unit);\n if (!unwrappedUnit) return '';\n\n const unwrappedArgs = unwrap(optOrLocale);\n let locale: string;\n let style: Intl.RelativeTimeFormatStyle = 'long';\n let numeric: Intl.RelativeTimeFormatNumeric = 'always';\n\n if (typeof unwrappedArgs === 'string') {\n locale = unwrappedArgs;\n } else if (unwrappedArgs && typeof unwrappedArgs === 'object') {\n locale = unwrappedArgs.locale ?? readLocaleUnsafe();\n style = unwrappedArgs.style ?? 'long';\n numeric = unwrappedArgs.numeric ?? 'always';\n } else {\n locale = readLocaleUnsafe();\n }\n\n return getFormatter(locale, style, numeric).format(\n unwrappedValue,\n unwrappedUnit,\n );\n}\n\nconst [provideFormatRelativeTimeDefaults, injectFormatRelativeTimeOptions] =\n createFormatterProvider<FormatRelativeTimeOptions>(\n 'relativeTime',\n {\n style: 'long',\n numeric: 'always',\n },\n (a, b) => a.style === b.style && a.numeric === b.numeric,\n );\n\n/**\n * Provide application-wide defaults for relative time formatting presets.\n * @example provideFormatRelativeTimeDefaults({ numeric: 'auto' })\n */\nexport { provideFormatRelativeTimeDefaults };\n\n/**\n * Inject a context-safe relative time formatting function tied to the current injector.\n * Uses the libraries locale signal & provided default configuration to react to locale/config changes\n * @example\n * const formatRelativeTime = injectFormatRelativeTime();\n * readonly relativeAge = computed(() => formatRelativeTime(this.delta(), 'day'));\n */\nexport function injectFormatRelativeTime() {\n const defaults = injectFormatRelativeTimeOptions();\n\n return (\n value: SupportedRelativeTimeInput | Signal<SupportedRelativeTimeInput>,\n unit: RelativeTimeUnit | Signal<RelativeTimeUnit>,\n optOrLocale?:\n | Partial<FormatRelativeTimeOptions>\n | Signal<Partial<FormatRelativeTimeOptions>>\n | string\n | Signal<string>,\n ) => {\n if (!optOrLocale) return formatRelativeTime(value, unit, defaults());\n\n const unwrapped = unwrap(optOrLocale);\n\n const opt =\n typeof unwrapped === 'object'\n ? { ...defaults(), ...unwrapped }\n : {\n ...defaults(),\n locale: unwrapped,\n };\n\n return formatRelativeTime(value, unit, opt);\n };\n}\n","import type { Provider } from '@angular/core';\nimport { injectFormatDate, provideFormatDateDefaults } from './date';\nimport {\n injectFormatDisplayName,\n provideFormatDisplayNameDefaults,\n} from './display-name';\nimport { injectFormatList, provideFormatListDefaults } from './list';\nimport {\n injectFormatCurrency,\n injectFormatNumber,\n injectFormatPercent,\n provideFormatCurrencyDefaults,\n provideFormatNumberDefaults,\n provideFormatPercentDefaults,\n} from './numeric';\nimport type { inferProvideParameter } from './provide-defaults';\nimport {\n injectFormatRelativeTime,\n provideFormatRelativeTimeDefaults,\n} from './relative-time';\n\ntype FormatDefaults = {\n date?: inferProvideParameter<typeof provideFormatDateDefaults>;\n displayName?: inferProvideParameter<typeof provideFormatDisplayNameDefaults>;\n list?: inferProvideParameter<typeof provideFormatListDefaults>;\n relativeTime?: inferProvideParameter<\n typeof provideFormatRelativeTimeDefaults\n >;\n number?: inferProvideParameter<typeof provideFormatNumberDefaults>;\n percent?: inferProvideParameter<typeof provideFormatPercentDefaults>;\n currency?: inferProvideParameter<typeof provideFormatCurrencyDefaults>;\n};\n\nexport function provideFormatDefaults(cfg: FormatDefaults): Provider[] {\n const providers: Provider[] = [];\n if (cfg.date) providers.push(provideFormatDateDefaults(cfg.date));\n if (cfg.displayName)\n providers.push(provideFormatDisplayNameDefaults(cfg.displayName));\n if (cfg.list) providers.push(provideFormatListDefaults(cfg.list));\n if (cfg.relativeTime)\n providers.push(provideFormatRelativeTimeDefaults(cfg.relativeTime));\n if (cfg.number) providers.push(provideFormatNumberDefaults(cfg.number));\n if (cfg.percent) providers.push(provideFormatPercentDefaults(cfg.percent));\n if (cfg.currency) providers.push(provideFormatCurrencyDefaults(cfg.currency));\n\n return providers;\n}\n\nexport function injectFormatters() {\n return {\n date: injectFormatDate(),\n displayName: injectFormatDisplayName(),\n list: injectFormatList(),\n relativeTime: injectFormatRelativeTime(),\n number: injectFormatNumber(),\n percent: injectFormatPercent(),\n currency: injectFormatCurrency(),\n };\n}\n","import { inject, untracked } from '@angular/core';\nimport { type ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { injectIntlConfig, TranslationStore } from './translation-store';\n\n/**\n * @internal\n */\nexport function injectResolveParamLocale(snapshot: ActivatedRouteSnapshot) {\n let locale: string | null = null;\n\n const paramName = injectIntlConfig()?.localeParamName;\n\n const routerConfig = inject(Router)['options'];\n\n const alwaysInheritParams =\n typeof routerConfig === 'object' &&\n !!routerConfig &&\n routerConfig.paramsInheritanceStrategy === 'always';\n\n if (paramName) {\n locale = snapshot.paramMap.get(paramName);\n\n if (!locale && !alwaysInheritParams) {\n let currentRoute: ActivatedRouteSnapshot | null = snapshot;\n while (currentRoute && !locale) {\n locale = currentRoute.paramMap.get(paramName);\n currentRoute = currentRoute.parent;\n }\n }\n }\n\n if (!locale) {\n locale = untracked(inject(TranslationStore).locale);\n }\n\n return locale;\n}\n","import {\n computed,\n inject,\n Injectable,\n isDevMode,\n isSignal,\n untracked,\n type Signal,\n} from '@angular/core';\nimport { type ResolveFn } from '@angular/router';\nimport {\n compileTranslation,\n type CompiledTranslation,\n type inferCompiledTranslationMap,\n type inferCompiledTranslationNamespace,\n} from './compile';\nimport { replaceWithDelim } from './delim';\nimport { injectResolveParamLocale } from './resolver-locale';\nimport {\n type AnyStringRecord,\n type UnknownStringKeyObject,\n} from './string-key-object.type';\nimport {\n injectDefaultLocale,\n injectIntlConfig,\n TranslationStore,\n} from './translation-store';\n\nfunction createEqualsRecord<T extends AnyStringRecord>(keys: (keyof T)[] = []) {\n let keyMatcher: (a: T, b: T) => boolean;\n\n if (keys.length === 0) {\n keyMatcher = () => true;\n } else if (keys.length === 1) {\n const key = keys[0];\n keyMatcher = (a, b) => a[key] === b[key];\n } else {\n keyMatcher = (a, b) => {\n return keys.every((k) => a[k] === b[k]);\n };\n }\n\n return (a?: T, b?: T): boolean => {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return keyMatcher(a, b);\n };\n}\n\ntype TFunction<TMap extends AnyStringRecord> = <\n TKey extends keyof TMap & string,\n>(\n key: TKey,\n ...args: TMap[TKey] extends void ? [] : [TMap[TKey]]\n) => string;\n\ntype SignalTFunction<TMap extends AnyStringRecord> = <\n TKey extends keyof TMap & string,\n>(\n key: TKey,\n ...args: TMap[TKey] extends void ? [] : [() => TMap[TKey]]\n) => Signal<string>;\n\ntype TFunctionWithSignalConstructor<\n TMap extends AnyStringRecord,\n TFN extends TFunction<TMap>,\n> = TFN & {\n asSignal: SignalTFunction<TMap>;\n};\n\nexport function addSignalFn<\n TMap extends AnyStringRecord,\n TFn extends TFunction<TMap>,\n>(\n fn: TFn,\n store: TranslationStore,\n keyMap: Map<string, string>,\n): TFunctionWithSignalConstructor<TMap, TFn> {\n const withSig = fn as TFunctionWithSignalConstructor<TMap, TFn>;\n\n const asSignal = <TKey extends keyof TMap & string>(\n key: TKey,\n variables?: () => AnyStringRecord,\n ): Signal<string> => {\n const stringKey = key as string;\n\n let flatPath = keyMap.get(stringKey);\n\n if (flatPath === undefined) {\n flatPath = replaceWithDelim(stringKey);\n keyMap.set(stringKey, flatPath);\n }\n\n if (variables === undefined) return store.buildSimpleKeySignal(flatPath);\n\n const varsFn = variables;\n const varsSignal = isSignal(varsFn)\n ? varsFn\n : computed(() => varsFn(), {\n equal: createEqualsRecord(Object.keys(varsFn())),\n });\n\n return computed(() => store.formatMessage(flatPath, varsSignal()));\n };\n\n withSig.asSignal = asSignal as unknown as TFunctionWithSignalConstructor<\n TMap,\n TFn\n >['asSignal'];\n\n return withSig;\n}\n\nexport function createT<TMap extends AnyStringRecord>(\n store: TranslationStore,\n keyMap = new Map<string, string>(),\n): TFunction<TMap> {\n const fn = <TKey extends keyof TMap & string>(\n key: TKey,\n variables?: AnyStringRecord,\n ): string => {\n const stringKey = key as string;\n\n let k = keyMap.get(stringKey);\n\n if (k === undefined) {\n k = replaceWithDelim(stringKey);\n keyMap.set(stringKey, k);\n }\n\n return store.formatMessage(k, variables);\n };\n\n return fn as unknown as TFunction<TMap>;\n}\n\n/**\n * Shape accepted by a namespace loader: a direct `CompiledTranslation`, or an\n * ES-module-style object exposing one as `default` or `translation`. Lets\n * callers write `() => import('./quote.namespace')` instead of the more\n * verbose `() => import('./quote.namespace').then((m) => m.default)`.\n */\nexport type LoadedTranslation<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n> = T | { default: T } | { translation: T };\n\nfunction isCompiledTranslation(\n value: unknown,\n): value is CompiledTranslation<UnknownStringKeyObject, string> {\n return (\n !!value &&\n typeof value === 'object' &&\n 'flat' in value &&\n 'namespace' in value\n );\n}\n\n/**\n * @internal exported for unit testing\n *\n * Unwraps a loader result to a `CompiledTranslation`. Detection order:\n * 1. value is already a `CompiledTranslation` (has `flat` + `namespace`)\n * 2. value has a `default` export holding a `CompiledTranslation` (ESM default)\n * 3. value has a `translation` export holding a `CompiledTranslation` (named export)\n */\nexport function resolveTranslationModule<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n>(loaded: LoadedTranslation<T>): T {\n if (isCompiledTranslation(loaded)) return loaded as T;\n if (loaded && typeof loaded === 'object') {\n const def = (loaded as { default?: unknown }).default;\n if (isCompiledTranslation(def)) return def as T;\n const tr = (loaded as { translation?: unknown }).translation;\n if (isCompiledTranslation(tr)) return tr as T;\n }\n throw new Error(\n '[@mmstack/translate] Loader did not return a CompiledTranslation. Expected the value from `createNamespace` / `createTranslation`, or a module exporting one as `default` or `translation`.',\n );\n}\n\nexport function registerNamespace<\n TDefault extends CompiledTranslation<UnknownStringKeyObject, string>,\n>(\n defaultTranslation: () => Promise<LoadedTranslation<TDefault>>,\n other: Record<\n string,\n () => Promise<\n LoadedTranslation<\n CompiledTranslation<\n UnknownStringKeyObject,\n inferCompiledTranslationNamespace<TDefault>,\n string\n >\n >\n >\n >,\n) {\n type $Map = inferCompiledTranslationMap<TDefault>;\n type $BaseTFN = TFunction<$Map>;\n type $TFN = TFunctionWithSignalConstructor<$Map, $BaseTFN>;\n\n const keyMap = new Map<string, string>();\n\n // Pre-wrap loaders once so the rest of the pipeline — including the\n // dynamic-locale loader in `TranslationStore`, which reads `.namespace`\n // and `.flat` directly off the result — always sees a `CompiledTranslation`\n // regardless of which loader shape the caller used.\n const unwrappedDefault = (): Promise<TDefault> =>\n defaultTranslation().then(resolveTranslationModule);\n\n type LocaleLoader = () => Promise<\n CompiledTranslation<\n UnknownStringKeyObject,\n inferCompiledTranslationNamespace<TDefault>,\n string\n >\n >;\n const unwrappedOther: Record<string, LocaleLoader> = Object.fromEntries(\n Object.entries(other).map(([loc, loader]) => [\n loc,\n () => loader().then(resolveTranslationModule) as ReturnType<LocaleLoader>,\n ]),\n );\n\n const injectT = (): $TFN => {\n const store = inject(TranslationStore);\n\n return addSignalFn(createT(store, keyMap), store, keyMap);\n };\n\n // Tracks whether the default locale's translation has been loaded by any prior\n // resolver call. Captured in closure across navigations on purpose — concurrent\n // resolves may each see `false` and both queue a default preload; that's harmless\n // because `store.register` is idempotent (same payload overwrites with the same\n // value). Do not add locking here.\n let defaultTranslationLoaded = false;\n const resolver: ResolveFn<void> = async (snapshot) => {\n const store = inject(TranslationStore);\n\n const locale = injectResolveParamLocale(snapshot);\n\n const defaultLocale = injectDefaultLocale();\n const shouldPreloadDefault =\n injectIntlConfig()?.preloadDefaultLocale ?? false;\n\n const tPromise = unwrappedOther[locale] as LocaleLoader | undefined;\n\n const promise = tPromise ?? unwrappedDefault;\n if (!promise && isDevMode()) {\n return console.warn(`No translation found for locale: ${locale}`);\n }\n\n if (promise === unwrappedDefault && defaultTranslationLoaded) return;\n\n try {\n const promises = [promise()];\n\n if (\n shouldPreloadDefault &&\n !defaultTranslationLoaded &&\n promise !== unwrappedDefault\n )\n promises.push(unwrappedDefault());\n\n const translations = await Promise.allSettled(promises);\n\n const fulfilled = translations.map((t) =>\n t.status === 'fulfilled' ? t.value : null,\n );\n\n if (fulfilled.at(0) === null && fulfilled.at(1) === null)\n throw new Error('Failed to load translations');\n\n const [t, defaultT] = fulfilled;\n\n const ns = t?.namespace ?? defaultT?.namespace;\n if (!ns) throw new Error('No namespace found in translation');\n\n if (isDevMode() && t && t.locale !== locale && t.locale)\n console.warn(`Expected locale to be ${locale} but got ${t.locale}`);\n\n store.registerOnDemandLoaders(ns, {\n ...unwrappedOther,\n [defaultLocale]: unwrappedDefault,\n });\n\n const toRegister: Record<string, Record<string, string>> = {};\n if (t) toRegister[locale] = t.flat;\n if (defaultT) toRegister[defaultLocale] = defaultT.flat;\n\n store.register(ns, toRegister);\n\n if (promise === unwrappedDefault || defaultT)\n defaultTranslationLoaded = true;\n } catch {\n if (isDevMode()) {\n console.warn(`Failed to load translation for locale: ${locale}`);\n }\n } finally {\n if (locale !== untracked(store.locale)) store.locale.set(locale);\n }\n };\n\n return {\n injectNamespaceT: injectT,\n resolveNamespaceTranslation: resolver,\n };\n}\n\ntype UntypedTFunction<TNS extends string> = {\n (key: `${TNS}.${string}`, args?: Record<string, string>): string;\n asSignal: (\n key: `${TNS}.${string}`,\n args?: () => Record<string, string>,\n ) => Signal<string>;\n};\n\n/**\n * Registers a type-unsafe namespace, meant for remote loading of unknown key-value pairs using mmstack/translate infrastructure\n * The resolver & t function work the same as they would with typed namespaces, but without type safety\n */\nexport function registerRemoteNamespace<TNS extends string>(\n ns: TNS,\n defaultTranslation: () => Promise<Record<string, string>>,\n other: Record<string, () => Promise<Record<string, string>>>,\n) {\n const keyMap = new Map<string, string>();\n\n // The dynamic-locale loader in TranslationStore reads `.namespace` and `.flat`\n // off the loader result, so on-demand loaders must return CompiledTranslation.\n // Wrap the raw remote fetchers once here at registration time rather than every\n // resolver call.\n const compileLoader =\n <TLocale extends string>(\n loader: () => Promise<Record<string, string>>,\n locale: TLocale,\n ) =>\n () => loader().then((raw) => compileTranslation(raw, ns, locale));\n\n const compiledOther: Record<\n string,\n () => Promise<CompiledTranslation<UnknownStringKeyObject, TNS>>\n > = Object.fromEntries(\n Object.entries(other).map(([loc, loader]) => [\n loc,\n compileLoader(loader, loc),\n ]),\n );\n\n const injectT = (): UntypedTFunction<TNS> => {\n const store = inject(TranslationStore);\n\n return addSignalFn(\n createT(store, keyMap),\n store,\n keyMap,\n ) as UntypedTFunction<TNS>;\n };\n\n // See `defaultTranslationLoaded` in `registerNamespace` for rationale —\n // intentionally racy, safe via idempotent `store.register`.\n let defaultTranslationLoaded = false;\n const resolver: ResolveFn<void> = async (snapshot) => {\n const store = inject(TranslationStore);\n\n const locale = injectResolveParamLocale(snapshot);\n\n const defaultLocale = injectDefaultLocale();\n const shouldPreloadDefault =\n injectIntlConfig()?.preloadDefaultLocale ?? false;\n\n const tPromise = other[locale] as (typeof other)[string] | undefined;\n\n const promise = tPromise ?? defaultTranslation;\n\n if (!promise && isDevMode()) {\n return console.warn(`No translation found for locale: ${locale}`);\n }\n\n if (promise === defaultTranslation && defaultTranslationLoaded) return;\n\n try {\n const promises = [promise()];\n\n if (\n shouldPreloadDefault &&\n !defaultTranslationLoaded &&\n promise !== defaultTranslation\n )\n promises.push(defaultTranslation());\n\n const translations = await Promise.allSettled(promises);\n\n const fulfilled = translations.map((t) =>\n t.status === 'fulfilled' ? t.value : null,\n );\n\n if (fulfilled.at(0) === null && fulfilled.at(1) === null)\n throw new Error('Failed to load translations');\n\n const [baseT, baseDefaultT] = fulfilled;\n\n const t = baseT ? compileTranslation(baseT, ns, locale) : null;\n const defaultT = baseDefaultT\n ? compileTranslation(baseDefaultT, ns, defaultLocale)\n : null;\n\n if (isDevMode() && t && t.locale !== locale && t.locale)\n console.warn(`Expected locale to be ${locale} but got ${t.locale}`);\n\n store.registerOnDemandLoaders(ns, {\n ...compiledOther,\n [defaultLocale]: compileLoader(defaultTranslation, defaultLocale),\n });\n\n const toRegister: Record<string, Record<string, string>> = {};\n if (t) toRegister[locale] = t.flat;\n if (defaultT) toRegister[defaultLocale] = defaultT.flat;\n\n store.register(ns, toRegister);\n\n if (promise === defaultTranslation || defaultT)\n defaultTranslationLoaded = true;\n } catch {\n if (isDevMode()) {\n console.warn(`Failed to load translation for locale: ${locale}`);\n }\n } finally {\n if (locale !== untracked(store.locale)) store.locale.set(locale);\n }\n };\n\n return {\n injectNamespaceT: injectT,\n resolveNamespaceTranslation: resolver,\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UnsafeTKeyMap {\n readonly map = new Map<string, string>();\n}\n\n/**\n * Power-user escape hatch that returns a fully untyped translation function.\n * Intended for use alongside {@link injectAddTranslations} when translations\n * are added imperatively (e.g. from a remote API), or for cross-namespace\n * lookups where the typed API would be impractical.\n *\n * @example\n * ```ts\n * const t = injectUnsafeT();\n * t('any.namespace.key', { name: 'Alice', count: 3 });\n * const sig = t.asSignal('any.namespace.key', () => ({ name: name() }));\n * ```\n */\nexport function injectUnsafeT() {\n const store = inject(TranslationStore);\n const map = inject(UnsafeTKeyMap).map;\n\n const fn = (\n key: string,\n params?: Record<string, string | number>,\n ): string => {\n let k = map.get(key);\n\n if (k === undefined) {\n k = replaceWithDelim(key);\n map.set(key, k);\n }\n\n return store.formatMessage(k, params);\n };\n\n fn.asSignal = (\n key: string,\n params?: () => Record<string, string | number>,\n ): Signal<string> => {\n let k = map.get(key);\n\n if (k === undefined) {\n k = replaceWithDelim(key);\n map.set(key, k);\n }\n\n if (!params) return store.buildSimpleKeySignal(k);\n\n const paramsSignal = isSignal(params)\n ? params\n : computed(() => params(), {\n equal: createEqualsRecord(Object.keys(params())),\n });\n\n return computed(() => store.formatMessage(k, paramsSignal()));\n };\n\n return fn;\n}\n","import { inject } from '@angular/core';\nimport {\n Router,\n type CanMatchFn,\n type Route,\n type UrlSegment,\n} from '@angular/router';\nimport {\n injectDefaultLocale,\n injectSupportedLocales,\n} from './translation-store';\n\n/**\n * Guard that validates the locale parameter against supported locales.\n * Redirects to default locale if the locale is invalid.\n *\n * @param prefixSegments Optional array of path segments preceding the locale segment.\n * if (you wanted to match /app/:locale/... you would pass ['app'] here) & the function would match the second parameter + redirect accordingly\n *\n * @example\n * ```typescript\n * {\n * path: ':locale',\n * canMatch: [canMatchLocale()],\n * children: [...]\n * }\n * ```\n */\nexport function canMatchLocale(prefixSegments: string[] = []): CanMatchFn {\n return (_route: Route, segments: UrlSegment[]) => {\n const supportedLocales = injectSupportedLocales();\n\n const locale = segments.at(prefixSegments.length)?.path;\n\n if (!locale || !supportedLocales.includes(locale))\n return inject(Router).createUrlTree([\n ...prefixSegments,\n injectDefaultLocale(),\n ]);\n\n return true;\n };\n}\n","import { type Provider, signal } from '@angular/core';\nimport { createIntl, createIntlCache, type IntlShape } from '@formatjs/intl';\nimport { compileTranslation } from '../compile';\nimport { type UnknownStringKeyObject } from '../string-key-object.type';\nimport { TranslationStore } from '../translation-store';\n\n/**\n * Options designed to feed into the mock translations function.\n */\nexport interface MockTranslationOptions {\n /**\n * If provided, allows overriding the default behavior of simply echoing translation keys back.\n * Format: Record of namespace -> (Translation shape similar to what you pass to `createNamespace`)\n *\n * Example:\n * ```ts\n * {\n * home: { title: 'Mocked Title' },\n * auth: { error: 'Mocked Error' }\n * }\n * ```\n */\n translations?: Record<string, UnknownStringKeyObject>;\n\n /**\n * When true, uses `@formatjs/intl` to process ICU message syntax (e.g. `{name}`, plurals, selects).\n * This gives you real variable interpolation in your test assertions.\n *\n * @default false — values are ignored and the raw message string is returned.\n *\n * @example\n * ```ts\n * provideMockTranslations({\n * translations: { home: { greet: 'Hello {name}' } },\n * formatValues: true,\n * })\n * // t('home.greet', { name: 'Alice' }) → 'Hello Alice'\n * ```\n */\n formatValues?: boolean;\n\n /**\n * The locale to use when `formatValues` is true.\n * @default 'en-US'\n */\n locale?: string;\n}\n\n/**\n * Provides an isolated mock `TranslationStore` usable across testing modules that use components\n * depending on `@mmstack/translate` APIs (like `Translate` directive, `Translator` pipe, or `injectNamespaceT`).\n *\n * This provider intercepts all translation logic, bypassing chunk loaders and Intl.\n * When a custom configuration isn't provided, formatMessage simply echoes the translation key, using dots `.`.\n *\n * ### Usage\n * ```typescript\n * TestBed.configureTestingModule({\n * providers: [provideMockTranslations()]\n * });\n * ```\n */\nexport function provideMockTranslations(\n options?: MockTranslationOptions,\n): Provider[] {\n // We compile the mock strings to flat delimiters just like the internal compile module.\n const mappedMocks: Record<string, string> = {};\n\n if (options?.translations) {\n for (const [namespace, translationObj] of Object.entries(\n options.translations,\n )) {\n const compiled = compileTranslation(translationObj, namespace);\n\n for (const [key, val] of Object.entries(compiled.flat)) {\n // e.g. from 'home::MMT_DELIM::title'\n const fullKey = `${namespace}::MMT_DELIM::${key}`;\n mappedMocks[fullKey] = val;\n }\n }\n }\n\n const locale = options?.locale ?? 'en-US';\n\n let intl: IntlShape | undefined;\n\n if (options?.formatValues) {\n intl = createIntl({ locale, messages: mappedMocks }, createIntlCache());\n }\n\n return [\n {\n provide: TranslationStore,\n useValue: {\n locale: signal(locale),\n formatMessage: (\n key: string,\n values?: Record<string, string | number>,\n ) => {\n const message = mappedMocks[key];\n\n if (!message) {\n // Fallback to echoing the key back in dot notation (more readable for unit assertions).\n return key.replaceAll('::MMT_DELIM::', '.');\n }\n\n if (intl) {\n return intl.formatMessage(\n { id: key, defaultMessage: message },\n values,\n );\n }\n\n return message;\n },\n hasLocaleLoaders: () => false,\n register: () => {\n // noop\n },\n registerOnDemandLoaders: () => {\n // noop\n },\n dynamicLocaleLoader: {\n isLoading: signal(false),\n value: signal(null),\n error: signal(null),\n },\n loadQueue: signal([]),\n },\n },\n ];\n}\n","import {\n afterRenderEffect,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n Renderer2,\n} from '@angular/core';\nimport {\n type CompiledTranslation,\n type inferCompiledTranslationMap,\n} from './compile';\nimport { createT } from './register-namespace';\nimport { type UnknownStringKeyObject } from './string-key-object.type';\nimport { TranslationStore } from './translation-store';\n\nfunction compareObjects(\n a?: Record<string, string>,\n b?: Record<string, string>,\n): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every((key) => a[key] === b[key]);\n}\n\n@Directive()\nexport abstract class Translate<\n TInput extends string,\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n TMap extends inferCompiledTranslationMap<T> = inferCompiledTranslationMap<T>,\n TKey extends TInput & keyof TMap & string = TInput & keyof TMap & string,\n> {\n private readonly t = createT(inject(TranslationStore));\n\n readonly translate =\n input.required<\n TMap[TKey] extends void\n ? TKey | [key: TKey]\n : [key: TKey, vars: TMap[TKey]]\n >();\n\n constructor() {\n const inputs = computed(() => this.translate(), {\n equal: (a, b) => {\n if (a === b) return true;\n if (typeof a === 'string' || typeof b === 'string') return false;\n if (a[0] !== b[0]) return false;\n return compareObjects(\n a[1] as Record<string, string>,\n b[1] as Record<string, string>,\n );\n },\n });\n\n const translation = computed(() => {\n const inp = inputs();\n return typeof inp === 'string'\n ? this.t(inp)\n : this.t(inp[0], inp[1] as Record<string, string>);\n });\n\n const renderer = inject(Renderer2);\n const el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n afterRenderEffect({\n write: () => {\n renderer.setProperty(el.nativeElement, 'textContent', translation());\n },\n });\n }\n}\n","import { ChangeDetectorRef, effect, inject } from '@angular/core';\nimport {\n type CompiledTranslation,\n type inferCompiledTranslationMap,\n} from './compile';\nimport { createT } from './register-namespace';\nimport {\n type AnyStringRecord,\n type UnknownStringKeyObject,\n} from './string-key-object.type';\nimport { TranslationStore } from './translation-store';\n\ntype TransformTFn<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n TMap extends inferCompiledTranslationMap<T>,\n> = <TKey extends keyof TMap & string>(\n key: TKey,\n ...args: TMap[TKey] extends void\n ? [locale?: string]\n : [TMap[TKey], locale?: string]\n) => string;\n\nfunction createTransformFn<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n TMap extends inferCompiledTranslationMap<T>,\n>(): TransformTFn<T, TMap> {\n const store = inject(TranslationStore);\n const t = createT<TMap>(store);\n\n const fn = <TKey extends keyof TMap & string>(\n key: TKey,\n variablesOrLocale?: string | AnyStringRecord,\n // The locale argument is unused at runtime — the active locale comes from\n // `TranslationStore`. It exists on the signature so consumers can pass\n // `locale()` as a pipe argument (`'key' | translate : vars : locale()`)\n // to bust Angular's pure-pipe memoization on locale changes.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _?: string,\n ): string => {\n const vars =\n typeof variablesOrLocale === 'string' ? undefined : variablesOrLocale;\n\n return (t as (key: TKey, vars?: AnyStringRecord) => string)(key, vars);\n };\n\n return fn as unknown as TransformTFn<T, TMap>;\n}\n\nexport abstract class Translator<\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\n TMap extends inferCompiledTranslationMap<T> = inferCompiledTranslationMap<T>,\n> {\n constructor() {\n const cdr = inject(ChangeDetectorRef);\n const locale = inject(TranslationStore).locale;\n\n effect(() => {\n locale();\n cdr.markForCheck();\n });\n }\n\n transform = createTransformFn<T, TMap>();\n}\n","import type { WithParams } from './parameterize.type';\n\n/**\n * Power-user escape hatch for ICU messages whose parameters can't be inferred\n * from the message string — typically variables nested inside `plural` /\n * `select` / `selectordinal` arms, which the type-level extractor skips.\n *\n * Declared params are merged with auto-extracted ones; on key conflict, the\n * declared params win. Non-default locales for a key wrapped with `withParams`\n * may be plain strings — they don't need to repeat the wrapper.\n *\n * @example\n * ```ts\n * const ns = createNamespace('quote', {\n * // auto-extracts `count`; `name` is declared explicitly because it\n * // lives inside the plural arms and can't be inferred\n * stats: withParams<{ name: string }>(\n * '{count, plural, one {1 quote from {name}} other {# quotes from {name}}}',\n * ),\n * });\n *\n * // t inferred as: (key, { count: number; name: string }) => string\n * t('quote.stats', { count: 3, name: 'Alice' });\n * ```\n */\nexport function withParams<\n const P extends Record<string, unknown>,\n const S extends string = string,\n>(message: S): WithParams<P, S> {\n return message as unknown as WithParams<P, S>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["cache","getFormatter"],"mappings":"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"}
|