{"version":3,"file":"sixbell-telco-sdk-utils-translation.mjs","sources":["../../../projects/sdk/utils/translation/src/constants.ts","../../../projects/sdk/utils/translation/src/translation-dom/translation-dom.service.ts","../../../projects/sdk/utils/translation/src/translation-storage/translation-storage.service.ts","../../../projects/sdk/utils/translation/src/translation.service.ts","../../../projects/sdk/utils/translation/src/providers/translation.provider.ts","../../../projects/sdk/utils/translation/public-api.ts","../../../projects/sdk/utils/translation/sixbell-telco-sdk-utils-translation.ts"],"sourcesContent":["/**\n * Translation Constants and Injection Tokens\n * Centralized configuration values and DI tokens following Single Responsibility Principle\n */\n\nimport { LanguageDefinition, TranslationConfig, TranslationLocaleConfig } from './models/translation';\n\n/**\n * Default base language - always available unless explicitly excluded\n * This is the foundational language that comes with the SDK\n */\nexport const DEFAULT_BASE_LANGUAGE = 'en' as const;\n\n/**\n * List of default languages available out of the box\n */\nexport const DEFAULT_LANGUAGES_LIST = ['en', 'es', 'pt'] as const;\n\n/**\n * Type-safe default language codes for IDE IntelliSense\n */\nexport const DEFAULT_LANGUAGE_CODES = DEFAULT_LANGUAGES_LIST;\n\n/**\n * Type representing valid default language codes\n */\nexport type DefaultLanguageCode = (typeof DEFAULT_LANGUAGE_CODES)[number];\n\n/**\n * LocalStorage namespace to prevent collisions with other apps\n */\nexport const TRANSLATION_STORAGE_NAMESPACE = 'translation:' as const;\n\n/**\n * LocalStorage key for persisting selected language\n */\nexport const TRANSLATION_STORAGE_LANGUAGE_KEY = 'selectedLanguage' as const;\n\n/**\n * Default translation file paths\n */\nexport const DEFAULT_TRANSLATION_PATHS = ['/assets/i18n/'] as const;\n\n/**\n * HTML attribute name for setting the active language on document element\n */\nexport const LANGUAGE_ATTRIBUTE_NAME = 'lang' as const;\n\n/**\n * Translation-specific IndexedDB database name for resource caching\n */\nexport const TRANSLATION_INDEXED_DB_NAME = 'sixbell-translation' as const;\n\n/**\n * Schema version for runtime translation configuration payloads.\n * Bump this when the JSON structure changes in a breaking way.\n */\nexport const TRANSLATION_SCHEMA_VERSION = '3' as const;\n\nexport const DEFAULT_LANGUAGES: readonly LanguageDefinition[] = [\n\t{ code: 'en', name: 'English' },\n\t{ code: 'es', name: 'Español' },\n\t{ code: 'pt', name: 'Português' },\n] as const;\n\nexport const DEFAULT_LANGUAGE_CODE = 'en' as const;\n\nexport const DEFAULT_TRANSLATION_LOCALE = 'en' as const;\n\nexport const DEFAULT_TRANSLATION_LANGUAGE_TO_LOCALE = {\n\ten: 'en',\n\tes: 'es',\n\tpt: 'pt',\n} as const;\n\nexport const DEFAULT_TRANSLATION_LOCALE_CONFIG: TranslationLocaleConfig = {\n\tdefaultLocale: DEFAULT_TRANSLATION_LOCALE,\n\tlanguageToLocale: { ...DEFAULT_TRANSLATION_LANGUAGE_TO_LOCALE },\n};\n\nexport const FALLBACK_RUNTIME_TRANSLATION_CONFIG: TranslationConfig = {\n\tmeta: {\n\t\tversion: 'fallback',\n\t\tupdatedAt: new Date().toISOString(),\n\t\thash: 'fallback-hash',\n\t\tschemaVersion: TRANSLATION_SCHEMA_VERSION,\n\t},\n\tadditionalLanguages: [],\n\tdefaultLang: DEFAULT_LANGUAGE_CODE,\n\ttranslationPaths: [...DEFAULT_TRANSLATION_PATHS],\n\tlocale: {\n\t\tdefaultLocale: DEFAULT_TRANSLATION_LOCALE_CONFIG.defaultLocale,\n\t\tlanguageToLocale: { ...(DEFAULT_TRANSLATION_LOCALE_CONFIG.languageToLocale ?? {}) },\n\t},\n};\n","/**\n * Translation DOM Service\n * Handles DOM operations related to language/localization\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { LANGUAGE_ATTRIBUTE_NAME } from '../constants';\n\n/**\n * Service responsible for DOM manipulation related to language/localization\n * Decouples DOM operations from business logic\n */\n@Injectable({ providedIn: 'root' })\nexport class TranslationDomService {\n\tprivate readonly renderer: Renderer2;\n\tprivate readonly rendererFactory = inject(RendererFactory2);\n\tprivate readonly document = inject(DOCUMENT);\n\n\tconstructor() {\n\t\tthis.renderer = this.rendererFactory.createRenderer(null, null);\n\t}\n\n\t/**\n\t * Sets the language on the document element\n\t * Updates the HTML lang attribute for accessibility and SEO\n\t * @param language - Language code (e.g., 'en', 'es', 'pt')\n\t */\n\tsetDocumentLanguage(language: string): void {\n\t\tif (!language) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst htmlElement = this.document.documentElement;\n\t\tif (htmlElement) {\n\t\t\tthis.renderer.setAttribute(htmlElement, LANGUAGE_ATTRIBUTE_NAME, language);\n\t\t}\n\t}\n\n\t/**\n\t * Gets the current language from the document element\n\t * Reads the HTML lang attribute\n\t * @returns Current language code or empty string if not set\n\t */\n\tgetDocumentLanguage(): string {\n\t\tconst htmlElement = this.document.documentElement;\n\t\tif (!htmlElement) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn htmlElement.getAttribute(LANGUAGE_ATTRIBUTE_NAME) || '';\n\t}\n}\n","/**\n * Translation Storage Service\n * Handles persistent language preferences using localStorage\n */\n\nimport { inject, Injectable } from '@angular/core';\nimport { LoggerService } from '@sixbell-telco/sdk/utils/logger';\nimport { TRANSLATION_STORAGE_LANGUAGE_KEY, TRANSLATION_STORAGE_NAMESPACE } from '../constants';\n\n/**\n * Helper function to check if localStorage is available\n * Returns false in SSR or when storage is disabled\n */\nfunction hasLocalStorage(): boolean {\n\ttry {\n\t\tif (typeof window === 'undefined' || typeof localStorage === 'undefined') {\n\t\t\treturn false;\n\t\t}\n\t\t// Try to access localStorage to catch any errors\n\t\tlocalStorage.getItem('test');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Service for managing language preferences in local storage\n * Provides safe access to localStorage with error handling\n * Works gracefully in non-browser environments (SSR)\n */\n@Injectable({ providedIn: 'root' })\nexport class TranslationStorageService {\n\tprivate readonly logger = inject(LoggerService);\n\t/**\n\t * Retrieves the saved language preference from localStorage\n\t * Returns null if no saved preference or storage unavailable\n\t * @returns Saved language code or null\n\t */\n\tgetSavedLanguage(): string | null {\n\t\ttry {\n\t\t\tif (!hasLocalStorage()) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst key = this.getStorageKey(TRANSLATION_STORAGE_LANGUAGE_KEY);\n\t\t\treturn localStorage.getItem(key);\n\t\t} catch (error) {\n\t\t\tthis.logger.error('Failed to retrieve saved language', error as Error, {\n\t\t\t\tcomponent: 'TranslationStorageService',\n\t\t\t\taction: 'getSavedLanguage',\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Saves the current language preference to localStorage\n\t * Fails silently if storage is unavailable\n\t * @param language - Language code to save\n\t */\n\tsaveLanguage(language: string): void {\n\t\ttry {\n\t\t\tif (!hasLocalStorage()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst key = this.getStorageKey(TRANSLATION_STORAGE_LANGUAGE_KEY);\n\t\t\tlocalStorage.setItem(key, language);\n\t\t} catch (error) {\n\t\t\tthis.logger.error('Failed to save language', error as Error, {\n\t\t\t\tcomponent: 'TranslationStorageService',\n\t\t\t\taction: 'saveLanguage',\n\t\t\t\tlanguage,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Clears all saved language preferences from localStorage\n\t * Useful for resetting to defaults\n\t */\n\tclear(): void {\n\t\ttry {\n\t\t\tif (!hasLocalStorage()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst key = this.getStorageKey(TRANSLATION_STORAGE_LANGUAGE_KEY);\n\t\t\tlocalStorage.removeItem(key);\n\t\t} catch (error) {\n\t\t\tthis.logger.error('Failed to clear storage', error as Error, {\n\t\t\t\tcomponent: 'TranslationStorageService',\n\t\t\t\taction: 'clear',\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Constructs a namespaced storage key to avoid collisions\n\t * @param key - The base storage key\n\t * @returns Namespaced key (e.g., \"translation:selectedLanguage\")\n\t */\n\tprivate getStorageKey(key: string): string {\n\t\treturn `${TRANSLATION_STORAGE_NAMESPACE}${key}`;\n\t}\n}\n","/**\n * Translation Service\n * Main service for handling language selection, translation loading, and management\n * Mirrors ThemeService - config via DI token + multi-path loading\n */\n\nimport { computed, DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport {\n\tMissingTranslationHandler,\n\tMissingTranslationHandlerParams,\n\tTranslateLoader,\n\tTranslateService,\n\tTranslationObject,\n} from '@ngx-translate/core';\nimport { LoggerService } from '@sixbell-telco/sdk/utils/logger';\nimport { RuntimeConfigLoader, RuntimeConfigLoadResult, RuntimeHttpClient, RuntimeUpdateEvent } from '@sixbell-telco/sdk/utils/runtime-config';\nimport { firstValueFrom, from } from 'rxjs';\nimport {\n\tDEFAULT_LANGUAGE_CODE,\n\tDEFAULT_LANGUAGES,\n\tDEFAULT_TRANSLATION_LOCALE_CONFIG,\n\tDEFAULT_TRANSLATION_PATHS,\n\tTRANSLATION_SCHEMA_VERSION,\n} from './constants';\nimport { LanguageDefinition, TranslationConfig, TranslationLocaleConfig, TranslationStateConfig } from './models/translation';\nimport { TranslationDomService } from './translation-dom/translation-dom.service';\nimport { TranslationStorageService } from './translation-storage/translation-storage.service';\n\nfunction resolveTranslationLocaleConfig(config?: TranslationLocaleConfig): TranslationLocaleConfig {\n\treturn {\n\t\tdefaultLocale: config?.defaultLocale ?? DEFAULT_TRANSLATION_LOCALE_CONFIG.defaultLocale,\n\t\tlanguageToLocale: {\n\t\t\t...(DEFAULT_TRANSLATION_LOCALE_CONFIG.languageToLocale ?? {}),\n\t\t\t...(config?.languageToLocale ?? {}),\n\t\t},\n\t};\n}\n\nexport function createLanguage(config: LanguageDefinition): LanguageDefinition {\n\treturn {\n\t\tcode: config.code,\n\t\tname: config.name,\n\t};\n}\n\nexport function extendDefaultLanguages(additionalLanguages: LanguageDefinition[]): LanguageDefinition[] {\n\treturn [...DEFAULT_LANGUAGES, ...additionalLanguages];\n}\n\nexport class PlaceholderMissingTranslationHandler implements MissingTranslationHandler {\n\thandle(params: MissingTranslationHandlerParams): string {\n\t\treturn params.key;\n\t}\n}\n\n@Injectable({ providedIn: 'root' })\nexport class TranslationService {\n\tprivate readonly translate = inject(TranslateService);\n\tprivate readonly storageService = inject(TranslationStorageService);\n\tprivate readonly domService = inject(TranslationDomService);\n\tprivate readonly logger = inject(LoggerService);\n\tprivate readonly destroyRef = inject(DestroyRef);\n\n\tprivate initialized = false;\n\tprivate currentTranslationPaths: string[] = [...DEFAULT_TRANSLATION_PATHS];\n\tprivate translationHttpClient: RuntimeHttpClient | null = null;\n\tprivate hasAppliedInitialLanguage = false;\n\tprivate isUsingFallbackConfig = false;\n\tprivate prefetchLanguages = true;\n\tprivate isApplyingRuntimeConfig = false;\n\tprivate runtimeHash: string | null = null;\n\tprivate runtimeLoader?: RuntimeConfigLoader<TranslationConfig>;\n\tprivate runtimeMeta?: RuntimeConfigLoadResult<TranslationConfig>['meta'];\n\tprivate pendingUpdatedLanguages = new Set<string>();\n\tprivate bootstrapValidated = false;\n\tprivate readonly translationTick = signal(0);\n\tprivate readonly localeConfig = signal<TranslationLocaleConfig>({\n\t\tdefaultLocale: DEFAULT_TRANSLATION_LOCALE_CONFIG.defaultLocale,\n\t\tlanguageToLocale: { ...(DEFAULT_TRANSLATION_LOCALE_CONFIG.languageToLocale ?? {}) },\n\t});\n\tpublic readonly updateAvailable = signal(false);\n\tpublic readonly lastRefreshFailed = signal(false);\n\n\tprivate config: TranslationStateConfig = {\n\t\tavailableLanguages: [...DEFAULT_LANGUAGES],\n\t\tdefaultLanguage: DEFAULT_LANGUAGE_CODE,\n\t};\n\n\tpublic readonly currentLanguage = signal<string>(DEFAULT_LANGUAGE_CODE);\n\tpublic readonly currentLocale = computed(() => this.resolveLocale(this.currentLanguage()));\n\tpublic readonly onLanguageChange$ = this.translate.onLangChange;\n\tpublic readonly onLanguageChange = signal<number>(0);\n\tpublic readonly ready = signal(false);\n\tpublic readonly changes = computed(() => this.translationTick());\n\n\tconstructor() {\n\t\tthis.currentLanguage.set(this.getCurrentLanguage());\n\t}\n\n\tpublic configure(config: TranslationConfig): void {\n\t\tthis.logger.debug('configure - starting', {\n\t\t\tcomponent: 'TranslationService',\n\t\t\taction: 'configure',\n\t\t\tconfigProvidedPaths: config.translationPaths,\n\t\t\tconfigDefaultLang: config.defaultLang,\n\t\t\tconfigAdditionalLanguages: config.additionalLanguages?.length,\n\t\t\tconfigExcludedLanguages: config.excludeLanguages,\n\t\t\tconfigLocale: config.locale,\n\t\t});\n\n\t\tthis.localeConfig.set(resolveTranslationLocaleConfig(config.locale));\n\n\t\tlet availableLanguages: LanguageDefinition[] = [...DEFAULT_LANGUAGES];\n\n\t\tif (config.additionalLanguages) {\n\t\t\tavailableLanguages = [...availableLanguages, ...config.additionalLanguages];\n\t\t}\n\n\t\tif (config.excludeLanguages) {\n\t\t\tavailableLanguages = availableLanguages.filter((lang) => !config.excludeLanguages?.includes(lang.code));\n\t\t}\n\n\t\tconst defaultLang = config.defaultLang || DEFAULT_LANGUAGE_CODE;\n\n\t\tconst newPaths = (config.translationPaths || DEFAULT_TRANSLATION_PATHS) as string[];\n\t\tif (JSON.stringify(newPaths) !== JSON.stringify(this.currentTranslationPaths)) {\n\t\t\tthis.currentTranslationPaths = newPaths;\n\t\t\tthis.logger.debug('Translation paths updated', {\n\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\taction: 'configure',\n\t\t\t\tnewPaths,\n\t\t\t});\n\t\t\tconst targetLang = this.getCurrentLanguage();\n\t\t\tconst preloadPromises = this.currentTranslationPaths.map((path) => {\n\t\t\t\tconst normalized = path.endsWith('/') ? path : `${path}/`;\n\t\t\t\tconst url = `${normalized}${targetLang}.json`;\n\t\t\t\treturn this.fetchTranslation(url)\n\t\t\t\t\t.then(() => undefined)\n\t\t\t\t\t.catch(() => undefined);\n\t\t\t});\n\t\t\tPromise.all(preloadPromises).then(() => {\n\t\t\t\tthis.translate.reloadLang(targetLang);\n\t\t\t});\n\t\t}\n\n\t\tthis.config = {\n\t\t\tavailableLanguages,\n\t\t\tdefaultLanguage: defaultLang,\n\t\t};\n\n\t\tconst availableCodes = this.config.availableLanguages.map((lang) => lang.code);\n\t\tif (!availableCodes.includes(this.config.defaultLanguage)) {\n\t\t\tthis.logger.warn('Default language not available in configured languages', {\n\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\taction: 'configure',\n\t\t\t\tdefaultLang: this.config.defaultLanguage,\n\t\t\t\tavailableCodes,\n\t\t\t});\n\t\t\tthis.config.defaultLanguage = availableCodes[0] || DEFAULT_LANGUAGE_CODE;\n\t\t}\n\n\t\tthis.logger.debug('Configuration complete', {\n\t\t\tcomponent: 'TranslationService',\n\t\t\taction: 'configure',\n\t\t\tfinalDefaultLang: this.config.defaultLanguage,\n\t\t\tavailableLangCodes: availableCodes,\n\t\t});\n\n\t\tthis.resolveStoredLanguage();\n\n\t\tif (this.initialized) {\n\t\t\t// This is a runtime config update (not initial construction)\n\t\t\t// Keep current language resolved from storage unless we're doing a fresh init\n\t\t\tif (!this.isApplyingRuntimeConfig) {\n\t\t\t\tthis.currentLanguage.set(this.config.defaultLanguage);\n\t\t\t\tthis.initializeFromStorage();\n\t\t\t}\n\t\t\t// Mark that we've applied the initial language so init() can apply it on next call\n\t\t\tthis.hasAppliedInitialLanguage = true;\n\t\t} else {\n\t\t\tthis.initialized = true;\n\t\t\t// IMPORTANT: Do NOT call applyLanguage() here during construction!\n\t\t\t// This causes circular dependency because ngx-translate tries to use\n\t\t\t// the loader during provider setup phase. Instead, applyLanguage()\n\t\t\t// will be deferred until setRuntimeConfig() is called.\n\t\t}\n\t}\n\n\tprivate resolveStoredLanguage(): void {\n\t\tconst availableCodes = this.config.availableLanguages.map((lang) => lang.code);\n\t\tconst savedLanguage = this.storageService.getSavedLanguage();\n\t\tif (savedLanguage && availableCodes.includes(savedLanguage)) {\n\t\t\tthis.currentLanguage.set(savedLanguage);\n\t\t\treturn;\n\t\t}\n\t\tif (savedLanguage && !this.isUsingFallbackConfig) {\n\t\t\tthis.storageService.clear();\n\t\t}\n\t\tthis.currentLanguage.set(this.config.defaultLanguage);\n\t}\n\n\tpublic async setRuntimeConfig(config: TranslationConfig): Promise<void> {\n\t\tthis.ready.set(false);\n\t\tthis.logger.debug('setRuntimeConfig - starting', {\n\t\t\tcomponent: 'TranslationService',\n\t\t\taction: 'setRuntimeConfig',\n\t\t\tconfigPath: config.translationPaths,\n\t\t});\n\n\t\t// Update configuration (this will update currentLanguage signal and restore from storage)\n\t\tthis.isApplyingRuntimeConfig = true;\n\t\tthis.configure(config);\n\n\t\t// Apply language now that runtime config has loaded\n\t\t// This saves to storage with the correct default from config file\n\t\tconst targetLang = this.currentLanguage();\n\t\tawait firstValueFrom(this.translate.reloadLang(targetLang));\n\t\tthis.applyLanguage();\n\n\t\tawait this.loadSelectedLanguage();\n\t\tif (this.prefetchLanguages) {\n\t\t\tthis.prefetchRemainingLanguages();\n\t\t}\n\t\tthis.isApplyingRuntimeConfig = false;\n\n\t\tthis.translationTick.update((value) => value + 1);\n\t\tthis.logger.debug('setRuntimeConfig - complete', {\n\t\t\tcomponent: 'TranslationService',\n\t\t\taction: 'setRuntimeConfig',\n\t\t\tcurrentLanguage: this.getCurrentLanguage(),\n\t\t});\n\t}\n\n\tpublic enablePrefetch(enable: boolean): void {\n\t\tthis.prefetchLanguages = enable;\n\t}\n\n\tprivate async loadSelectedLanguage(): Promise<void> {\n\t\tconst targetLang = this.currentLanguage();\n\t\tawait this.loadLanguageResources(targetLang);\n\t}\n\n\tprivate prefetchRemainingLanguages(): void {\n\t\tconst currentLang = this.currentLanguage();\n\t\tconst remaining = this.getAvailableLanguagesConfig()\n\t\t\t.map((lang) => lang.code)\n\t\t\t.filter((code) => code !== currentLang);\n\t\tfor (const lang of remaining) {\n\t\t\tthis.loadLanguageResources(lang).catch(() => undefined);\n\t\t}\n\t}\n\n\tprivate async loadLanguageResources(lang: string): Promise<void> {\n\t\tconst loadPromises = this.currentTranslationPaths.map((path) => {\n\t\t\tconst normalized = path.endsWith('/') ? path : `${path}/`;\n\t\t\tconst url = `${normalized}${lang}.json`;\n\t\t\treturn this.fetchTranslation(url);\n\t\t});\n\t\tawait Promise.allSettled(loadPromises);\n\t}\n\n\tprivate queueUpdatedLanguage(lang?: string): void {\n\t\tif (!lang) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pendingUpdatedLanguages.add(lang);\n\t}\n\n\tprivate async reloadLanguages(languages: string[]): Promise<void> {\n\t\tconst unique = Array.from(new Set(languages)).filter(Boolean);\n\t\tif (!unique.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst available = new Set(this.getAvailableLanguageCodes());\n\t\tawait Promise.all(\n\t\t\tunique.filter((lang) => available.has(lang)).map((lang) => firstValueFrom(this.translate.reloadLang(lang)).catch(() => undefined)),\n\t\t);\n\t}\n\n\tpublic async refreshInactiveLanguages(): Promise<void> {\n\t\tconst current = this.currentLanguage();\n\t\tconst nonActive = this.getAvailableLanguageCodes().filter((lang) => lang !== current);\n\t\tawait this.reloadLanguages(nonActive);\n\t}\n\n\tprivate async validateBootstrapCache(): Promise<void> {\n\t\tif (this.bootstrapValidated) {\n\t\t\treturn;\n\t\t}\n\t\tthis.bootstrapValidated = true;\n\t\tconst runtimeLoader = this.runtimeLoader;\n\t\tif (!runtimeLoader || !this.runtimeHash || this.isUsingFallbackConfig) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.runtimeMeta?.schemaVersion && this.runtimeMeta.schemaVersion !== TRANSLATION_SCHEMA_VERSION) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst check = await runtimeLoader.checkForUpdates(this.runtimeHash);\n\t\t\tif (!check.updated) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst result = await runtimeLoader.refresh();\n\t\t\tthis.isUsingFallbackConfig = result.source === 'fallback';\n\t\t\tthis.runtimeHash = result.hash;\n\t\t\tthis.runtimeMeta = result.meta;\n\t\t\tthis.updateAvailable.set(false);\n\t\t\tawait this.setRuntimeConfig(result.data);\n\t\t\tthis.ready.set(true);\n\t\t\tconst current = this.currentLanguage();\n\t\t\tawait this.reloadLanguages([current]);\n\t\t\tvoid this.refreshInactiveLanguages();\n\t\t} catch (error) {\n\t\t\tthis.logger.warn('Translation bootstrap validation failed', {\n\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\taction: 'validateBootstrapCache',\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\t}\n\tprivate initializeFromStorage(): void {\n\t\ttry {\n\t\t\tif (this.isApplyingRuntimeConfig) {\n\t\t\t\tthis.logger.debug('Skipping storage restore during runtime config apply', {\n\t\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\t\taction: 'initializeFromStorage',\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst saved = this.storageService.getSavedLanguage();\n\t\t\tconst availableCodes = this.config.availableLanguages.map((l) => l.code);\n\n\t\t\tif (saved && availableCodes.includes(saved)) {\n\t\t\t\tthis.logger.debug('Restoring saved language', {\n\t\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\t\taction: 'initializeFromStorage',\n\t\t\t\t\tsavedLanguage: saved,\n\t\t\t\t});\n\t\t\t\tthis.currentLanguage.set(saved);\n\t\t\t}\n\n\t\t\tthis.applyLanguage();\n\t\t} catch (error) {\n\t\t\tthis.logger.error('Error initializing from storage', error as Error, {\n\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\taction: 'initializeFromStorage',\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate applyLanguage(): void {\n\t\tconst targetLang = this.currentLanguage();\n\t\tthis.translate.setFallbackLang(this.config.defaultLanguage);\n\t\tthis.translate.use(targetLang);\n\t\tthis.domService.setDocumentLanguage(targetLang);\n\n\t\t// Always save to storage - keeps state consistent from the start\n\t\t// This mirrors theme service behavior: saves defaults on init,\n\t\t// then saves user preferences when they change language\n\t\tthis.storageService.saveLanguage(targetLang);\n\t}\n\n\tsetLanguage(lang: string): void {\n\t\tif (lang) {\n\t\t\tconst availableCodes = this.config.availableLanguages.map((l) => l.code);\n\t\t\tif (!availableCodes.includes(lang)) {\n\t\t\t\tthis.logger.warn('Language not available, using default', {\n\t\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\t\taction: 'setLanguage',\n\t\t\t\t\trequestedLang: lang,\n\t\t\t\t\tdefaultLang: this.config.defaultLanguage,\n\t\t\t\t\tavailableCodes,\n\t\t\t\t});\n\t\t\t\tlang = this.config.defaultLanguage;\n\t\t\t}\n\n\t\t\tthis.logger.debug('setLanguage', {\n\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\taction: 'setLanguage',\n\t\t\t\tlanguage: lang,\n\t\t\t});\n\n\t\t\tthis.currentLanguage.set(lang);\n\t\t\tthis.applyLanguage();\n\t\t}\n\t}\n\n\tgetCurrentLanguage(): string {\n\t\tconst saved = this.storageService.getSavedLanguage();\n\t\tconst availableCodes = this.config.availableLanguages.map((l) => l.code);\n\n\t\treturn saved && availableCodes.includes(saved) ? saved : this.config.defaultLanguage;\n\t}\n\n\tgetCurrentLocale(): string {\n\t\treturn this.currentLocale();\n\t}\n\n\tgetLocaleConfig(): TranslationLocaleConfig {\n\t\treturn this.localeConfig();\n\t}\n\n\tresolveLocale(language?: string | null): string {\n\t\tconst localeConfig = this.localeConfig();\n\t\tconst normalizedLanguage = language?.trim();\n\t\tif (normalizedLanguage) {\n\t\t\tconst mappedLocale = localeConfig.languageToLocale?.[normalizedLanguage];\n\t\t\tif (mappedLocale) {\n\t\t\t\treturn mappedLocale;\n\t\t\t}\n\n\t\t\treturn normalizedLanguage;\n\t\t}\n\n\t\treturn localeConfig.defaultLocale ?? DEFAULT_TRANSLATION_LOCALE_CONFIG.defaultLocale ?? DEFAULT_LANGUAGE_CODE;\n\t}\n\n\tgetAvailableLanguages(): string[] {\n\t\treturn [...this.translate.getLangs()];\n\t}\n\n\tgetDefaultLanguage(): string {\n\t\treturn this.config.defaultLanguage;\n\t}\n\n\tinstant(key: string, params?: object | undefined): string {\n\t\tconst result = params ? this.translate.instant(key, params) : this.translate.instant(key);\n\n\t\tif (result === key) {\n\t\t\tconst currentLang = this.getCurrentLanguage();\n\t\t\tthis.logger.warn('Translation key not found', {\n\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\taction: 'instant',\n\t\t\t\tkey,\n\t\t\t\tcurrentLanguage: currentLang,\n\t\t\t\thasParams: !!params,\n\t\t\t\tavailableLanguages: this.translate.getLangs(),\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tget(key: string, params?: object | undefined) {\n\t\tif (params) {\n\t\t\treturn this.translate.get(key, params);\n\t\t}\n\n\t\treturn this.translate.get(key);\n\t}\n\n\tstream(key: string, params?: object | undefined) {\n\t\tif (params) {\n\t\t\treturn this.translate.stream(key, params);\n\t\t}\n\n\t\treturn this.translate.stream(key);\n\t}\n\n\tgetAvailableLanguagesConfig(): LanguageDefinition[] {\n\t\treturn this.config.availableLanguages;\n\t}\n\n\tgetAvailableLanguageCodes(): string[] {\n\t\treturn this.config.availableLanguages.map((lang) => lang.code);\n\t}\n\n\tgetLanguageByCode(code: string): LanguageDefinition | undefined {\n\t\treturn this.config.availableLanguages.find((lang) => lang.code === code);\n\t}\n\n\tgetLanguageDisplayName(code: string): string {\n\t\tconst language = this.getLanguageByCode(code);\n\t\treturn language ? language.name : code.toUpperCase();\n\t}\n\n\tgetLocalizedLanguageName(code: string): string {\n\t\tconst translationKey = `sdk.language.languages.${code}`;\n\t\tconst translatedName = this.translate.instant(translationKey);\n\n\t\tif (translatedName && translatedName !== translationKey) {\n\t\t\treturn translatedName;\n\t\t}\n\n\t\tconst language = this.getLanguageByCode(code);\n\t\treturn language ? language.name : code.toUpperCase();\n\t}\n\n\tpublic isReady() {\n\t\treturn this.ready.asReadonly();\n\t}\n\n\tpublic async waitForTranslations(timeoutMs = 10000): Promise<void> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (this.ready()) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst startTime = Date.now();\n\t\t\tconst checkInterval = setInterval(() => {\n\t\t\t\tif (this.ready()) {\n\t\t\t\t\tclearInterval(checkInterval);\n\t\t\t\t\tresolve();\n\t\t\t\t} else if (Date.now() - startTime > timeoutMs) {\n\t\t\t\t\tclearInterval(checkInterval);\n\t\t\t\t\tthis.logger.warn('waitForTranslations timeout', {\n\t\t\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\t\t\taction: 'waitForTranslations',\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t\tisReady: this.ready(),\n\t\t\t\t\t});\n\t\t\t\t\tthis.ready.set(true);\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}, 50);\n\t\t});\n\t}\n\n\tpublic init(): void {\n\t\tthis.getAvailableLanguagesConfig();\n\n\t\t// IMPORTANT: Do NOT apply the language here on first init!\n\t\t// The runtime config hasn't loaded yet, so we'd save the hardcoded default to storage.\n\t\t// Instead, applyLanguage() will be called from setRuntimeConfig() after config loads.\n\t\tif (this.hasAppliedInitialLanguage) {\n\t\t\tthis.applyLanguage();\n\t\t}\n\n\t\tconst subscription = this.translate.onLangChange.subscribe({\n\t\t\tnext: (event: { lang: string }) => {\n\t\t\t\tthis.currentLanguage.set(event.lang);\n\t\t\t\tthis.onLanguageChange.update((val) => val + 1);\n\t\t\t\tthis.translationTick.update((value) => value + 1);\n\t\t\t\tthis.ready.set(true);\n\t\t\t\tthis.logger.debug('Translations ready - language loaded', {\n\t\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\t\taction: 'init - onLangChange',\n\t\t\t\t\tready: true,\n\t\t\t\t\tlanguage: event.lang,\n\t\t\t\t});\n\t\t\t},\n\t\t\terror: (err: unknown) => {\n\t\t\t\tthis.logger.error('Error loading translations', err as Error, {\n\t\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\t\taction: 'init - onLangChange',\n\t\t\t\t});\n\t\t\t\tthis.ready.set(true);\n\t\t\t},\n\t\t});\n\t\tthis.destroyRef.onDestroy(() => {\n\t\t\tsubscription.unsubscribe();\n\t\t});\n\t}\n\n\tpublic async applyRuntimeConfig(\n\t\tresult: RuntimeConfigLoadResult<TranslationConfig>,\n\t\tloader?: RuntimeConfigLoader<TranslationConfig>,\n\t): Promise<void> {\n\t\tif (loader) {\n\t\t\tthis.runtimeLoader = loader;\n\t\t}\n\t\tthis.isUsingFallbackConfig = result.source === 'fallback';\n\t\tthis.runtimeHash = result.hash;\n\t\tthis.runtimeMeta = result.meta;\n\t\tthis.updateAvailable.set(false);\n\t\tawait this.setRuntimeConfig(result.data);\n\t\tthis.ready.set(true);\n\t\tif (result.source === 'cache') {\n\t\t\tvoid this.validateBootstrapCache();\n\t\t}\n\t}\n\n\tpublic setRuntimeLoader(loader: RuntimeConfigLoader<TranslationConfig>, hash?: string): void {\n\t\tthis.runtimeLoader = loader;\n\t\tthis.runtimeHash = hash ?? null;\n\t\tthis.updateAvailable.set(false);\n\t\tthis.lastRefreshFailed.set(false);\n\t}\n\n\tpublic async checkForTranslationUpdates(loader: RuntimeConfigLoader<TranslationConfig>, event?: RuntimeUpdateEvent): Promise<void> {\n\t\tthis.runtimeLoader = loader;\n\t\tif (event?.resource && event.resource !== 'translation' && event.resource !== 'both') {\n\t\t\treturn;\n\t\t}\n\t\tconst eventHash = event?.hash;\n\t\tconst eventLang = event && 'lang' in event ? event.lang : undefined;\n\t\tif (eventHash) {\n\t\t\tif (eventHash === this.runtimeHash) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.queueUpdatedLanguage(eventLang);\n\t\t\tif (!this.updateAvailable()) {\n\t\t\t\tthis.updateAvailable.set(true);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst currentHash = this.runtimeHash;\n\t\tif (currentHash) {\n\t\t\tconst check = await loader.checkForUpdates(currentHash);\n\t\t\tif (check.updated && !this.updateAvailable()) {\n\t\t\t\tthis.updateAvailable.set(true);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (!this.updateAvailable()) {\n\t\t\tthis.updateAvailable.set(true);\n\t\t}\n\t}\n\n\tpublic async refreshTranslation(loader?: RuntimeConfigLoader<TranslationConfig>): Promise<void> {\n\t\tconst runtimeLoader = loader ?? this.runtimeLoader;\n\t\tif (!runtimeLoader) {\n\t\t\tthis.logger.warn('Translation refresh requested without runtime loader', {\n\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\taction: 'refreshTranslation',\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst result = await runtimeLoader.refresh();\n\t\t\tawait this.applyRuntimeConfig(result, runtimeLoader);\n\t\t\tconst pendingLanguages = Array.from(this.pendingUpdatedLanguages);\n\t\t\tthis.pendingUpdatedLanguages.clear();\n\t\t\tconst current = this.currentLanguage();\n\t\t\tif (pendingLanguages.length > 0) {\n\t\t\t\tawait this.reloadLanguages(pendingLanguages.filter((lang) => lang !== current));\n\t\t\t}\n\t\t\tthis.updateAvailable.set(false);\n\t\t\tthis.lastRefreshFailed.set(false);\n\t\t} catch (error) {\n\t\t\tthis.lastRefreshFailed.set(true);\n\t\t\tthis.logger.error('Translation refresh failed', error as Error, {\n\t\t\t\tcomponent: 'TranslationService',\n\t\t\t\taction: 'refreshTranslation',\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic withTranslationsReady<T>(fn: () => T): T | undefined {\n\t\tthis.changes();\n\t\tif (!this.ready()) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn fn();\n\t}\n\n\tprivate getOrCreateHttpClient(): RuntimeHttpClient {\n\t\tif (!this.translationHttpClient) {\n\t\t\tthis.translationHttpClient = new RuntimeHttpClient({\n\t\t\t\tretries: 2,\n\t\t\t\tretryDelayMs: 400,\n\t\t\t\ttimeoutMs: 6000,\n\t\t\t});\n\t\t}\n\t\treturn this.translationHttpClient;\n\t}\n\n\tprivate async fetchTranslation(url: string): Promise<TranslationObject> {\n\t\ttry {\n\t\t\tconst response = await this.getOrCreateHttpClient().fetch(url, { cache: 'no-store' });\n\t\t\treturn (await response.json()) as TranslationObject;\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tpublic createTranslateLoader(): TranslateLoader {\n\t\tconst suffix = '.json';\n\n\t\treturn {\n\t\t\tgetTranslation: (lang: string) => {\n\t\t\t\tthis.logger.debug('TranslateLoader.getTranslation called', {\n\t\t\t\t\tlanguage: lang,\n\t\t\t\t\tpathsToUse: this.currentTranslationPaths,\n\t\t\t\t});\n\n\t\t\t\tconst pathsToUse = this.currentTranslationPaths;\n\t\t\t\tif (pathsToUse.length === 0) {\n\t\t\t\t\tthis.logger.warn('No translation paths configured', { language: lang });\n\t\t\t\t\treturn from(Promise.resolve({} as TranslationObject));\n\t\t\t\t}\n\n\t\t\t\tconst loadPromises = pathsToUse.map((path) => {\n\t\t\t\t\tconst url = `${path.endsWith('/') ? path : `${path}/`}${lang}${suffix}`;\n\t\t\t\t\treturn this.fetchTranslation(url);\n\t\t\t\t});\n\n\t\t\t\treturn from(\n\t\t\t\t\tPromise.all(loadPromises).then((results) => {\n\t\t\t\t\t\tconst merged = results.reduce<TranslationObject>((acc, result) => {\n\t\t\t\t\t\t\treturn this.deepMergeTranslations(acc, result ?? {});\n\t\t\t\t\t\t}, {});\n\n\t\t\t\t\t\tthis.logger.debug('Translations loaded and merged', {\n\t\t\t\t\t\t\tlanguage: lang,\n\t\t\t\t\t\t\tfilesLoaded: results.length,\n\t\t\t\t\t\t\ttotalKeys: Object.keys(merged).length,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn merged;\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate isTranslationObject(value: unknown): value is TranslationObject {\n\t\treturn typeof value === 'object' && value !== null && !Array.isArray(value);\n\t}\n\n\tprivate deepMergeTranslations(target: TranslationObject, source: TranslationObject): TranslationObject {\n\t\tconst result: TranslationObject = { ...target };\n\n\t\tfor (const key in source) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\t\tconst sourceValue = source[key];\n\t\t\t\tconst targetValue = result[key];\n\n\t\t\t\tif (this.isTranslationObject(sourceValue) && this.isTranslationObject(targetValue)) {\n\t\t\t\t\tresult[key] = this.deepMergeTranslations(targetValue, sourceValue);\n\t\t\t\t} else {\n\t\t\t\t\tresult[key] = sourceValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","import {\n\tEnvironmentProviders,\n\tinject,\n\tInjectable,\n\tInjector,\n\tmakeEnvironmentProviders,\n\tprovideAppInitializer,\n\trunInInjectionContext,\n} from '@angular/core';\nimport {\n\tprovideMissingTranslationHandler,\n\tprovideTranslateLoader,\n\tprovideTranslateService,\n\tTranslateLoader,\n\tTranslationObject,\n} from '@ngx-translate/core';\nimport { LoggerService } from '@sixbell-telco/sdk/utils/logger';\nimport { RuntimeConfigLoader, RuntimeConfigStore, RuntimeUpdateAdapter } from '@sixbell-telco/sdk/utils/runtime-config';\nimport type { Observable } from 'rxjs';\nimport { FALLBACK_RUNTIME_TRANSLATION_CONFIG, TRANSLATION_SCHEMA_VERSION } from '../constants';\nimport { TranslationConfig } from '../models/translation';\nimport { PlaceholderMissingTranslationHandler, TranslationService } from '../translation.service';\nimport { RuntimeTranslationProviderOptions } from './translation.provider.types';\n\n// ============================================================\n// CUSTOM LOADER - Deferred injection pattern\n// ============================================================\n\n/**\n * Custom TranslateLoader that defers injection of TranslationService.\n *\n * This loader is instantiated by ngx-translate when first needed.\n * By deferring the inject() call until getTranslation is called,\n * we avoid circular dependency issues during DI setup.\n *\n * Key: DO NOT use providedIn: 'root' - let ngx-translate manage the lifecycle.\n */\n@Injectable()\nexport class RuntimeTranslationCustomLoader implements TranslateLoader {\n\tprivate readonly injector = inject(Injector);\n\n\tgetTranslation(lang: string): Observable<TranslationObject> {\n\t\t// Use runInInjectionContext to safely inject TranslationService\n\t\t// even when called outside the normal DI context\n\t\treturn runInInjectionContext(this.injector, () => {\n\t\t\tconst translationService = inject(TranslationService);\n\t\t\treturn translationService.createTranslateLoader().getTranslation(lang);\n\t\t});\n\t}\n}\n\n// ============================================================\n// RUNTIME PROVIDER - WITH NGXTRANSLATE SETUP\n// ============================================================\n\n/**\n * Configuration options for the runtime translation provider (like themes).\n *\n * @property appId - Optional namespace to avoid cache collisions across MFEs\n * @property sse - Optional SSE config for runtime update checks (disabled by default)\n * @property updateStream - Optional Observable for runtime update checks (disabled by default)\n *\n * @example\n * ```typescript\n * // Default mode\n * provideRuntimeTranslation('/assets/config/translation-config.json')\n *\n * // SSE updates (optional)\n * provideRuntimeTranslation('/assets/config/translation-config.json', {\n *   sse: { url: '/api/updates' }\n * })\n * ```\n */\n\n/**\n * Build runtime translation loader options with defaults\n */\n/**\n * Provide Translation service with configuration loaded from a JSON file at runtime (like themes).\n *\n * This is the ONLY provider that sets up ngx-translate. It:\n * - Loads translation configuration from a JSON file\n * - Sets up ngx-translate with custom loader that loads from multiple paths\n * - Supports hot-reload on navigation\n * - Supports offline scenarios with caching\n *\n * @param configPath - Path to translation configuration JSON file\n * @param options - Optional loader configuration\n * @returns Environment providers\n *\n * @example\n * ```typescript\n * bootstrapApplication(AppComponent, [\n *   provideRuntimeTranslation('/assets/translation/translation-config.json')\n * ]);\n * ```\n */\nexport function provideRuntimeTranslation(configPath: string, options?: RuntimeTranslationProviderOptions): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t// NOW provide ngx-translate - TranslationService will be injected when needed\n\t\t// Do NOT provide TranslationService directly since it's providedIn: 'root'\n\t\tprovideTranslateService({\n\t\t\tloader: provideTranslateLoader(RuntimeTranslationCustomLoader),\n\t\t\tmissingTranslationHandler: provideMissingTranslationHandler(PlaceholderMissingTranslationHandler),\n\t\t}),\n\t\t// Load runtime config and initialize service\n\t\tprovideAppInitializer(() => {\n\t\t\tconst translationService = inject(TranslationService);\n\t\t\tconst logger = inject(LoggerService);\n\t\t\tconst store = new RuntimeConfigStore<TranslationConfig>('translation-runtime-config', options?.appId);\n\t\t\tconst loader = new RuntimeConfigLoader<TranslationConfig>(configPath, {\n\t\t\t\tfallbackData: FALLBACK_RUNTIME_TRANSLATION_CONFIG,\n\t\t\t\tschemaVersion: TRANSLATION_SCHEMA_VERSION,\n\t\t\t\tresource: 'translation',\n\t\t\t\tstore,\n\t\t\t\tlogger,\n\t\t\t\tparser: async (response: Response) => (await response.json()) as TranslationConfig,\n\t\t\t\tappId: options?.appId,\n\t\t\t});\n\t\t\tconst updateAdapter = new RuntimeUpdateAdapter(async (event) => {\n\t\t\t\tif (event.resource && event.resource !== 'translation' && event.resource !== 'both') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait translationService.checkForTranslationUpdates(loader, event);\n\t\t\t});\n\n\t\t\tif (options?.sse) {\n\t\t\t\tupdateAdapter.connectSse(options.sse.url, {\n\t\t\t\t\tresource: 'translation',\n\t\t\t\t\twithCredentials: options.sse.withCredentials,\n\t\t\t\t\teventType: options.sse.eventType,\n\t\t\t\t\ttransform: options.sse.transform,\n\t\t\t\t\tlogger,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (options?.updateStream) {\n\t\t\t\tupdateAdapter.connectStream(options.updateStream);\n\t\t\t}\n\n\t\t\treturn (async () => {\n\t\t\t\tlet result = await loader.loadLatest();\n\t\t\t\tif (result.source === 'cache') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst check = await loader.checkForUpdates(result.hash);\n\t\t\t\t\t\tif (check.updated) {\n\t\t\t\t\t\t\tresult = await loader.refresh();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlogger.warn('Translation config bootstrap validation failed', {\n\t\t\t\t\t\t\tcomponent: 'TranslationProvider',\n\t\t\t\t\t\t\taction: 'bootstrapValidation',\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!result.meta.schemaVersion) {\n\t\t\t\t\tthrow new Error('Translation config schemaVersion missing');\n\t\t\t\t}\n\t\t\t\tif (result.meta.schemaVersion !== TRANSLATION_SCHEMA_VERSION) {\n\t\t\t\t\tthrow new Error('Translation config schemaVersion mismatch');\n\t\t\t\t}\n\t\t\t\tawait translationService.applyRuntimeConfig(result, loader);\n\t\t\t\ttranslationService.setRuntimeLoader(loader, result.hash);\n\t\t\t\ttranslationService.init();\n\t\t\t})();\n\t\t}),\n\t]);\n}\n","// Export main translation service and types\nexport * from './src/translation.service';\n\n// Export translation models and types (except DefaultLanguageCode which is re-exported from service)\nexport type { LanguageDefinition, TranslationConfig, TranslationLocaleConfig, TranslationStateConfig } from './src/models/translation';\n\n// Export translation constants (avoid re-exporting DefaultLanguageCode to prevent ambiguity)\nexport {\n\tDEFAULT_BASE_LANGUAGE,\n\tDEFAULT_LANGUAGES_LIST,\n\tDEFAULT_LANGUAGE_CODES,\n\tFALLBACK_RUNTIME_TRANSLATION_CONFIG,\n\tLANGUAGE_ATTRIBUTE_NAME,\n\tTRANSLATION_SCHEMA_VERSION,\n\tTRANSLATION_STORAGE_LANGUAGE_KEY,\n\tTRANSLATION_STORAGE_NAMESPACE,\n} from './src/constants';\n\n// Export providers for bootstrapping\nexport { provideRuntimeTranslation } from './src/providers/translation.provider';\nexport type { RuntimeTranslationProviderOptions } from './src/providers/translation.provider.types';\n\n// Export specialized services (for advanced use)\nexport { TranslationDomService } from './src/translation-dom/translation-dom.service';\nexport { TranslationStorageService } from './src/translation-storage/translation-storage.service';\n\n// Re-export useful ngx-translate components and services for convenience\nexport * from '@ngx-translate/core';\n\n// Re-export the HTTP loader for advanced use cases\nexport * from '@ngx-translate/http-loader';\n\nexport * from 'ngx-translate-multi-http-loader';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}