{"version":3,"file":"o3r-localization.mjs","sources":["../../src/annotations/localization.ts","../../src/core/localization-configuration.ts","../../src/core/translate-message-format-lazy-compiler.ts","../../src/stores/localization-override/localization-override.actions.ts","../../src/stores/localization-override/localization-override.reducer.ts","../../src/stores/localization-override/localization-override.state.ts","../../src/stores/localization-override/localization-override-module.ts","../../src/stores/localization-override/localization-override.selectors.ts","../../src/stores/localization-override/localization-override.sync.ts","../../src/tools/localization-token.ts","../../src/tools/localization-service.ts","../../src/tools/localization-translate-directive.ts","../../src/tools/localization-translate-pipe.ts","../../src/tools/localized-currency-pipe.ts","../../src/tools/localized-date-pipe.ts","../../src/tools/localized-decimal-pipe.ts","../../src/tools/text-direction-service.ts","../../src/tools/text-directionality.ts","../../src/tools/localization-module.ts","../../src/tools/translations-loader.ts","../../src/tools/localization-provider.ts","../../src/devkit/localization-devtools.ts","../../src/devkit/localization-devtools-token.ts","../../src/devkit/localization-devtools-console-service.ts","../../src/devkit/localization-devtools-message-service.ts","../../src/devkit/localization-devtools-module.ts","../../src/o3r-localization.ts"],"sourcesContent":["import {\n  deepFill,\n  immutablePrimitive,\n  otterComponentInfoPropertyName,\n} from '@o3r/core';\n\n/**\n * Decorator to pass localization url\n * @param _url\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- decorator should start with a capital letter\nexport function Localization(_url: string) {\n  return (target: any, key: string) => {\n    const privateField = _url || `_${key}`;\n    const privateValue = target[key];\n\n    if (delete target[key]) {\n      Object.defineProperty(target, key, {\n        get: function (this: any) {\n          return this[privateField];\n        },\n        set: function (this: any, value: Record<string, unknown>) {\n          const currentField = this[privateField] || privateValue;\n          this[privateField] = typeof currentField === 'undefined' ? immutablePrimitive(value) : deepFill(currentField, value);\n          if (this[otterComponentInfoPropertyName]) {\n            this[otterComponentInfoPropertyName].translations = this[privateField];\n          }\n        },\n        enumerable: true,\n        configurable: true\n      });\n    }\n  };\n}\n","/**\n * Describes configuration for LocalizationModule\n */\nexport interface LocalizationConfiguration {\n  /** List of available languages */\n  supportedLocales: string[];\n  /** Application display language */\n  language?: string;\n  /** Url to fetch translation bundles from */\n  endPointUrl: string;\n  /** Prefix endPoinrUrl with dynamicContentPath provided by DynamicContentPath */\n  useDynamicContent: boolean;\n  /** List of RTL language codes */\n  rtlLanguages: string[];\n  /**\n   * Fallback language map of resource in case translation in language does not exist.\n   * translate to unsupported language will try to map to supportedLocales from below property.\n   * @example\n   * ```typescript\n   * {\n   *   supportedLocales: ['en-GB', 'en-US', 'fr-FR'],\n   *   fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}\n   * }\n   * // translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR,\n   * // translate to en-NZ -> fallback to en-GB, translate to en -> fallback to en-GB.\n   * ```\n   */\n  fallbackLocalesMap?: {\n    [supportedLocale: string]: string;\n  };\n  /** Fallback language of resource in case translation in language does not exist */\n  fallbackLanguage: string;\n  /** Path relative to published folder where webpack will copy translation bundles */\n  bundlesOutputPath: string;\n  /** Debug mode switch */\n  debugMode: boolean;\n  /** Query parameters for fetching the localization resources */\n  queryParams?: { [key: string]: string };\n  /** Fetch options object as per https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters */\n  fetchOptions?: RequestInit;\n  /** Enable the ability to switch the translations on and off at runtime. */\n  enableTranslationDeactivation: boolean;\n  /**\n   * Merge the translations from DynamicContentPath with the local translations\n   * Warning: Enable this option will download two localization bundles and can delay the display of the text on application first page\n   * @default false\n   */\n  mergeWithLocalTranslations: boolean;\n}\n\n/**\n * Default configuration for LocalizationModule\n */\nexport const DEFAULT_LOCALIZATION_CONFIGURATION: Readonly<LocalizationConfiguration> = {\n  supportedLocales: [],\n  endPointUrl: '',\n  useDynamicContent: false,\n  rtlLanguages: ['ar', 'he'],\n  fallbackLanguage: 'en',\n  bundlesOutputPath: '',\n  debugMode: false,\n  enableTranslationDeactivation: false,\n  mergeWithLocalTranslations: false\n} as const;\n","import {\n  inject,\n  Injectable,\n  InjectionToken,\n} from '@angular/core';\nimport {\n  TranslateCompiler,\n} from '@ngx-translate/core';\nimport {\n  IntlMessageFormat,\n  Options,\n} from 'intl-messageformat';\n\n/**\n * Options for Lazy Message Format compiler\n */\nexport interface LazyMessageFormatConfig extends Options {\n  /**\n   * Enables compiled translation caching\n   * @default true\n   */\n  enableCache?: boolean;\n\n  /**\n   * Enables HTML in translation\n   * @default true\n   */\n  ignoreTag?: boolean;\n}\n\n/**\n * Message format configuration default value\n */\nexport const lazyMessageDefaultConfig: Readonly<LazyMessageFormatConfig> = {\n  enableCache: true,\n  ignoreTag: true\n} as const;\n\n/** Message Format configuration Token */\nexport const MESSAGE_FORMAT_CONFIG = new InjectionToken<LazyMessageFormatConfig>('Message Format configuration');\n\n/**\n * This compiler expects ICU syntax and compiles the expressions with messageformat.js\n * Compare to ngx-translate-messageformat-compiler package, the compilation of the translation is done only on demand\n */\n@Injectable()\nexport class TranslateMessageFormatLazyCompiler extends TranslateCompiler {\n  /** Configuration */\n  private readonly config: LazyMessageFormatConfig;\n\n  /** Cache of compiled translations */\n  private cache: { [x: string]: IntlMessageFormat } = {};\n\n  constructor() {\n    const config = inject<LazyMessageFormatConfig>(MESSAGE_FORMAT_CONFIG, { optional: true });\n\n    super();\n\n    this.config = config ? { ...lazyMessageDefaultConfig, ...config } : lazyMessageDefaultConfig;\n  }\n\n  /**\n   * Clear the cache of the compiled translations\n   */\n  public clearCache() {\n    this.cache = {};\n  }\n\n  /** @inheritDoc */\n  public compile(value: string, lang: string): (params: any) => string {\n    return (params: any) => (new IntlMessageFormat(value, lang, undefined, this.config).format(params) as string);\n  }\n\n  /** @inheritDoc */\n  public compileTranslations(translations: { [x: string]: any }, lang: string) {\n    type CompiledTranslationMap = { [key in keyof typeof translations]: (params: any) => string };\n\n    const compilingStrategy = this.config.enableCache\n      ? (acc: CompiledTranslationMap, key: string) => {\n        acc[key] = (params: any) => {\n          const cached = this.cache[`${lang}_${key}`];\n          if (cached) {\n            return cached.format(params) as string;\n          }\n\n          const newCachedItem = new IntlMessageFormat(translations[key], lang, undefined, this.config);\n          this.cache[`${lang}_${key}`] = newCachedItem;\n          return newCachedItem.format(params) as string;\n        };\n        return acc;\n      }\n\n      : (acc: CompiledTranslationMap, key: string) => {\n        acc[key] = (params: any) => new IntlMessageFormat(translations[key], lang, undefined, this.config).format(params) as string;\n        return acc;\n      };\n\n    return Object.keys(translations).reduce<CompiledTranslationMap>((acc, key) => compilingStrategy(acc, key), {});\n  }\n}\n","import {\n  createAction,\n  props,\n} from '@ngrx/store';\nimport {\n  SetStateActionPayload,\n} from '@o3r/core';\nimport {\n  LocalizationOverrideState,\n} from './localization-override.state';\n\n/** Actions */\nconst ACTION_SET = '[LocalizationOverride] set';\n\n/**\n * Clear all overrides and fill the store with the payload\n */\nexport const setLocalizationOverride = createAction(ACTION_SET, props<SetStateActionPayload<LocalizationOverrideState>>());\n","import {\n  ActionCreator,\n  createReducer,\n  on,\n  ReducerTypes,\n} from '@ngrx/store';\nimport * as actions from './localization-override.actions';\nimport {\n  LocalizationOverrideState,\n} from './localization-override.state';\n\n/**\n * LocalizationOverride Store initial value\n */\nexport const localizationOverrideInitialState: LocalizationOverrideState = { localizationOverrides: {} };\n\n/**\n *  List of basic actions for LocalizationOverride Store\n */\nexport const localizationOverrideReducerFeatures: ReducerTypes<LocalizationOverrideState, ActionCreator[]>[] = [\n  on(actions.setLocalizationOverride, (_state, payload) => ({ ...payload.state }))\n];\n\n/**\n * LocalizationOverride Store reducer\n */\nexport const localizationOverrideReducer = createReducer(\n  localizationOverrideInitialState,\n  ...localizationOverrideReducerFeatures\n);\n","/**\n * LocalizationOverride store state\n */\nexport interface LocalizationOverrideState {\n  /** Mapping of initial localization keys to the one they are replaced with */\n  localizationOverrides: Record<string, string>;\n}\n\n/**\n * Name of the LocalizationOverride Store\n */\nexport const LOCALIZATION_OVERRIDE_STORE_NAME = 'localizationOverride';\n\n/**\n * LocalizationOverride Store Interface\n */\nexport interface LocalizationOverrideStore {\n  /** LocalizationOverride state */\n  [LOCALIZATION_OVERRIDE_STORE_NAME]: LocalizationOverrideState;\n}\n","import {\n  InjectionToken,\n  ModuleWithProviders,\n  NgModule,\n} from '@angular/core';\nimport {\n  Action,\n  ActionReducer,\n  StoreModule,\n} from '@ngrx/store';\nimport {\n  localizationOverrideReducer,\n} from './localization-override.reducer';\nimport {\n  LOCALIZATION_OVERRIDE_STORE_NAME,\n  LocalizationOverrideState,\n} from './localization-override.state';\n\n/** Token of the LocalizationOverride reducer */\nexport const LOCALIZATION_OVERRIDE_REDUCER_TOKEN = new InjectionToken<ActionReducer<LocalizationOverrideState, Action>>('Feature LocalizationOverride Reducer');\n\n/** Provide default reducer for LocalizationOverride store */\nexport function getDefaultLocalizationOverrideReducer() {\n  return localizationOverrideReducer;\n}\n\n@NgModule({\n  imports: [\n    StoreModule.forFeature(LOCALIZATION_OVERRIDE_STORE_NAME, LOCALIZATION_OVERRIDE_REDUCER_TOKEN)\n  ],\n  providers: [\n    { provide: LOCALIZATION_OVERRIDE_REDUCER_TOKEN, useFactory: getDefaultLocalizationOverrideReducer }\n  ]\n})\nexport class LocalizationOverrideStoreModule {\n  public static forRoot<T extends LocalizationOverrideState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<LocalizationOverrideStoreModule> {\n    return {\n      ngModule: LocalizationOverrideStoreModule,\n      providers: [\n        { provide: LOCALIZATION_OVERRIDE_REDUCER_TOKEN, useFactory: reducerFactory }\n      ]\n    };\n  }\n}\n","import {\n  createFeatureSelector,\n  createSelector,\n} from '@ngrx/store';\nimport {\n  LOCALIZATION_OVERRIDE_STORE_NAME,\n  LocalizationOverrideState,\n} from './localization-override.state';\n\n/** Select LocalizationOverride State */\nexport const selectLocalizationOverrideState = createFeatureSelector<LocalizationOverrideState>(LOCALIZATION_OVERRIDE_STORE_NAME);\n\n/** Select all localization override map */\nexport const selectLocalizationOverride = createSelector(selectLocalizationOverrideState, (state) => state?.localizationOverrides || {});\n","import {\n  Serializer,\n} from '@o3r/core';\nimport {\n  localizationOverrideInitialState,\n} from './localization-override.reducer';\nimport {\n  LocalizationOverrideState,\n} from './localization-override.state';\n\nexport const localizationOverrideStorageDeserializer = (rawObject: any) => {\n  if (!rawObject) {\n    return localizationOverrideInitialState;\n  }\n  return rawObject;\n};\n\nexport const localizationOverrideStorageSync: Serializer<LocalizationOverrideState> = {\n  deserialize: localizationOverrideStorageDeserializer\n};\n","import {\n  InjectionToken,\n} from '@angular/core';\nimport {\n  LocalizationConfiguration,\n} from '../core';\n\n/** Localization Configuration Token */\nexport const LOCALIZATION_CONFIGURATION_TOKEN = new InjectionToken<LocalizationConfiguration>('Localization Configuration injection token');\n","import {\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  select,\n  Store,\n} from '@ngrx/store';\nimport {\n  TranslateService,\n} from '@ngx-translate/core';\nimport {\n  LoggerService,\n} from '@o3r/logger';\nimport {\n  BehaviorSubject,\n  combineLatest,\n  firstValueFrom,\n  Observable,\n  of,\n} from 'rxjs';\nimport {\n  distinctUntilChanged,\n  map,\n  shareReplay,\n  startWith,\n  switchMap,\n} from 'rxjs/operators';\nimport {\n  LocalizationConfiguration,\n} from '../core/localization-configuration';\nimport {\n  LocalizationOverrideStore,\n  selectLocalizationOverride,\n} from '../stores/index';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\n\n/**\n * Service which is wrapping the configuration logic of TranslateService from ngx-translate\n * Any application willing to use localization just needs to inject LocalizationService\n * in the root component and call its configure() method.\n */\n@Injectable()\nexport class LocalizationService {\n  private readonly translateService = inject(TranslateService);\n  private readonly logger = inject(LoggerService);\n  private readonly configuration = inject<LocalizationConfiguration>(LOCALIZATION_CONFIGURATION_TOKEN);\n  private readonly store = inject<Store<LocalizationOverrideStore>>(Store, { optional: true });\n\n  private readonly localeSplitIdentifier: string = '-';\n\n  /**\n   * Internal subject that we use to track changes between keys only and translation mode\n   */\n  private readonly _showKeys$ = new BehaviorSubject(false);\n\n  /**\n   * Map of localization keys to replace a key to another\n   */\n  private readonly keyMapping$?: Observable<Record<string, any>>;\n\n  /**\n   * _showKeys$ exposed as an Observable\n   */\n  public showKeys$ = this._showKeys$.asObservable();\n\n  constructor() {\n    void this.configure();\n    if (this.store) {\n      this.keyMapping$ = this.store.pipe(\n        select(selectLocalizationOverride)\n      );\n    }\n  }\n\n  /**\n   * This will handle the fallback language hierarchy to find out fallback language.\n   * supportedLocales language has highest priority, next priority goes to fallbackLocalesMap and default would be\n   * fallbackLanguage.\n   * @param language Selected language.\n   * @returns selected language if supported, fallback language otherwise.\n   */\n  private checkFallbackLocalesMap<T extends string | undefined>(language: T) {\n    if (language && !this.configuration.supportedLocales.includes(language)) {\n      const closestSupportedLanguageCode = this.getFirstClosestSupportedLanguageCode(language);\n      const fallbackForLanguage = this.getFallbackMapLangCode(language);\n      const fallbackStrategyDebug = (fallbackForLanguage && ' associated fallback language ')\n        || (closestSupportedLanguageCode && ' closest supported language ')\n        || (this.configuration.fallbackLanguage && ' configured default language ');\n      const fallbackLang = fallbackForLanguage || closestSupportedLanguageCode || this.configuration.fallbackLanguage || language;\n      if (language !== fallbackLang) {\n        this.logger.debug(`Non supported languages ${language} will fallback to ${fallbackStrategyDebug} ${fallbackLang}`);\n      }\n      return fallbackLang;\n    } else if (!language) {\n      this.logger.debug('Language is not defined');\n    }\n    return language;\n  }\n\n  /**\n   * This function checks if fallback language can be provided from fallbackLocalesMap.\n   * supportedLocales: ['en-GB', 'en-US', 'fr-FR'], fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}\n   * translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR\n   * translate to en-NZ -> fallback to en-GB\n   * @param language Selected language.\n   * @returns Fallback language if available, undefined otherwise.\n   */\n  private getFallbackMapLangCode(language: string): string | undefined {\n    const fallbackLocalesMap = this.configuration.fallbackLocalesMap;\n    const [locale] = language.split(this.localeSplitIdentifier);\n\n    return fallbackLocalesMap && (fallbackLocalesMap[language] || fallbackLocalesMap[locale]);\n  }\n\n  /**\n   * This function checks if closest supported language available incase of selected language is not\n   * supported language.\n   * supportedLocales: ['en-GB', 'en-US', 'fr-FR']\n   * translate to en-CA -> fallback to en-GB\n   * @param language Selected language.\n   * @returns Closest supported language if available, undefined otherwise.\n   */\n  private getFirstClosestSupportedLanguageCode(language: string): string | undefined {\n    const [locale] = language.split(this.localeSplitIdentifier);\n    const firstClosestRegx = new RegExp(`^${locale}${this.localeSplitIdentifier}?`, 'i');\n\n    return this.configuration.supportedLocales.find((supportedLang) => firstClosestRegx.test(supportedLang));\n  }\n\n  /**\n   * Returns a stream of translated values of a key which updates whenever the language changes.\n   * @param translationKey Key to translate\n   * @param interpolateParams Object to use in translation binding\n   * @returns A stream of the translated key\n   */\n  private getTranslationStream(translationKey: string, interpolateParams?: object) {\n    const translation$ = this.translateService.onTranslationChange.pipe(\n      startWith(undefined),\n      switchMap(() => this.translateService.stream(translationKey, interpolateParams)),\n      map((value) => this.configuration.debugMode ? `${translationKey} - ${value}` : value),\n      distinctUntilChanged()\n    );\n\n    if (!this.configuration.enableTranslationDeactivation) {\n      return translation$;\n    }\n\n    return combineLatest([\n      translation$,\n      this.showKeys$\n    ]).pipe(\n      map(([value, showKeys]) => showKeys ? translationKey : value)\n    );\n  }\n\n  /**\n   * Configures TranslateService and registers locales. This method is called from the application level.\n   */\n  public async configure() {\n    const language = this.checkFallbackLocalesMap(this.configuration.language || this.configuration.fallbackLanguage);\n    this.translateService.addLangs(this.configuration.supportedLocales);\n    this.translateService.setDefaultLang(language);\n    await firstValueFrom(this.useLanguage(language));\n  }\n\n  /**\n   * Is the translation deactivation enabled\n   */\n  public isTranslationDeactivationEnabled() {\n    return this.configuration.enableTranslationDeactivation;\n  }\n\n  /**\n   * Wrapper to call the ngx-translate service TranslateService method getLangs().\n   */\n  public getLanguages() {\n    return this.translateService.getLangs();\n  }\n\n  /**\n   * Wrapper to call the ngx-translate service TranslateService method use(language).\n   * @param language\n   */\n  public useLanguage(language: string): Observable<any> {\n    language = this.checkFallbackLocalesMap(language);\n    return this.translateService.use(language);\n  }\n\n  /**\n   * Wrapper to get the ngx-translate service TranslateService currentLang.\n   */\n  public getCurrentLanguage() {\n    return this.translateService.currentLang;\n  }\n\n  /**\n   * Get the instance of the ngx-translate TranslateService used by LocalizationService.\n   */\n  public getTranslateService() {\n    return this.translateService;\n  }\n\n  /**\n   * Toggle the ShowKeys mode between active and inactive.\n   * @param value if specified, set the ShowKeys mode to value. If not specified, toggle the ShowKeys mode.\n   */\n  public toggleShowKeys(value?: boolean) {\n    if (!this.configuration.enableTranslationDeactivation) {\n      throw new Error('Translation deactivation is not enabled. Please set the LocalizationConfiguration property \"enableTranslationDeactivation\" accordingly.');\n    }\n    const newValue = value === undefined ? !this.showKeys : value;\n    this._showKeys$.next(newValue);\n  }\n\n  /**\n   * Return the current value of debug show/hide translation keys.\n   */\n  public get showKeys() {\n    return this._showKeys$.value;\n  }\n\n  /**\n   * Get an observable of translation key after global mapping\n   * @param requestedKey Original translation key\n   */\n  public getKey(requestedKey: string) {\n    return this.keyMapping$\n      ? this.keyMapping$.pipe(\n        map((keyMapping) => keyMapping?.[requestedKey] || requestedKey),\n        distinctUntilChanged()\n      )\n      : of(requestedKey);\n  }\n\n  /**\n   * Returns a stream of translated values of a key which updates whenever the language changes.\n   * @param key Key to translate\n   * @param interpolateParams Object to use in translation binding\n   * @returns A stream of the translated key\n   */\n  public translate(key: string, interpolateParams?: object) {\n    return this.getKey(key).pipe(\n      switchMap((translationKey) => this.getTranslationStream(translationKey, interpolateParams)),\n      shareReplay({ refCount: true, bufferSize: 1 })\n    );\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  inject,\n  Input,\n  OnDestroy,\n} from '@angular/core';\nimport {\n  TranslateDirective,\n  TranslateService,\n} from '@ngx-translate/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LocalizationService,\n} from './localization-service';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\n/**\n * TranslateDirective class adding debug functionality\n */\n@Directive({\n  selector: '[translate],[ngx-translate]',\n  standalone: false\n})\nexport class LocalizationTranslateDirective extends TranslateDirective implements OnDestroy {\n  private readonly localizationService = inject(LocalizationService);\n  private readonly localizationConfig = inject<LocalizationConfiguration>(LOCALIZATION_CONFIGURATION_TOKEN);\n\n  /**\n   * Internal subscription to the LocalizationService showKeys mode changes\n   */\n  private readonly onShowKeysChange?: Subscription;\n\n  /**\n   * Should we display keys instead of translations\n   */\n  private showKeys = false;\n\n  /**\n   * Internal subscription to the LocalizationService key mapping\n   */\n  private onKeyChange?: Subscription;\n\n  /** @inheritdoc */\n  @Input()\n  public set translate(key: string) {\n    if (key && key !== this.key) {\n      if (this.onKeyChange) {\n        this.onKeyChange.unsubscribe();\n      }\n      this.onKeyChange = this.localizationService.getKey(key).subscribe((newKey) => {\n        this.key = newKey;\n        this.checkNodes();\n      });\n    }\n  }\n\n  constructor() {\n    const translateService = inject(TranslateService);\n    const element = inject(ElementRef);\n    const ref = inject(ChangeDetectorRef);\n\n    super(translateService, element, ref);\n    const localizationService = this.localizationService;\n    const localizationConfig = this.localizationConfig;\n\n    if (localizationConfig.enableTranslationDeactivation) {\n      this.onShowKeysChange = localizationService.showKeys$.subscribe((showKeys) => {\n        this.showKeys = showKeys;\n        this.checkNodes(true);\n      });\n    }\n  }\n\n  /**\n   * Overriding parent's setContent to plug debugging feature\n   * @param node\n   * @param content\n   */\n  public setContent(node: any, content: string): void {\n    const key = node.originalContent;\n    const newContent = this.showKeys ? key : (this.localizationConfig.debugMode && key ? `${key as string} - ${content}` : content);\n    if (typeof node.textContent !== 'undefined' && node.textContent !== null) {\n      node.textContent = newContent;\n    } else {\n      node.data = newContent;\n    }\n  }\n\n  public ngOnDestroy() {\n    super.ngOnDestroy();\n    if (this.onShowKeysChange) {\n      this.onShowKeysChange.unsubscribe();\n    }\n    if (this.onKeyChange) {\n      this.onKeyChange?.unsubscribe();\n    }\n  }\n}\n","import {\n  ChangeDetectorRef,\n  inject,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport {\n  TranslatePipe,\n  TranslateService,\n} from '@ngx-translate/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LocalizationService,\n} from './localization-service';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\n\n/**\n * TranslatePipe class adding debug functionality\n */\n@Pipe({\n  name: 'o3rTranslate',\n  pure: false,\n  standalone: false\n})\nexport class O3rLocalizationTranslatePipe extends TranslatePipe implements PipeTransform, OnDestroy {\n  /** Localization service instance */\n  protected readonly localizationService = inject(LocalizationService);\n  /** Change detector service instance */\n  protected readonly changeDetector = inject(ChangeDetectorRef);\n  /** Localization config token */\n  protected readonly localizationConfig: LocalizationConfiguration = inject(LOCALIZATION_CONFIGURATION_TOKEN);\n  /**\n   * Internal subscription to the LocalizationService showKeys mode changes\n   */\n  protected readonly onShowKeysChange?: Subscription;\n\n  /**\n   * Internal subscription to the LocalizationService key mapping\n   */\n  protected onKeyChange?: Subscription;\n\n  /**\n   * Should we display keys instead of translations\n   */\n  protected showKeys = false;\n\n  /** last key queried */\n  protected lastQueryKey?: string;\n\n  /** last key resolved */\n  protected lastResolvedKey?: string;\n\n  constructor() {\n    super(inject(TranslateService), inject(ChangeDetectorRef));\n    if (this.localizationConfig.enableTranslationDeactivation) {\n      this.onShowKeysChange = this.localizationService.showKeys$.subscribe((showKeys) => {\n        this.showKeys = showKeys;\n        this.changeDetector.markForCheck();\n      });\n    }\n  }\n\n  /**\n   * Calls original transform method and eventually outputs the key if debugMode (in LocalizationConfiguration) is enabled\n   * @inheritdoc\n   */\n  public transform(query: string, ...args: any[]): any {\n    if (this.showKeys) {\n      return query;\n    }\n\n    if (query !== this.lastQueryKey) {\n      this.lastQueryKey = query;\n      if (this.onKeyChange) {\n        this.onKeyChange.unsubscribe();\n      }\n      this.onKeyChange = this.localizationService.getKey(query).subscribe((key) => {\n        this.lastResolvedKey = key;\n        this.changeDetector.markForCheck();\n      });\n    }\n\n    if (this.lastResolvedKey) {\n      const value = super.transform(this.lastResolvedKey, ...args);\n\n      if (this.localizationConfig.debugMode) {\n        return `${this.lastResolvedKey} - ${value as string}`;\n      }\n\n      return value;\n    }\n\n    return this.value;\n  }\n\n  public ngOnDestroy() {\n    super.ngOnDestroy();\n    if (this.onShowKeysChange) {\n      this.onShowKeysChange.unsubscribe();\n    }\n    if (this.onKeyChange) {\n      this.onKeyChange.unsubscribe();\n    }\n  }\n}\n","import {\n  CurrencyPipe,\n} from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  inject,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationService,\n} from './localization-service';\n\n/**\n * Native angular CurrencyPipe taking the current lang into consideration\n */\n@Pipe({\n  name: 'currency',\n  pure: false,\n  standalone: false\n})\nexport class LocalizedCurrencyPipe extends CurrencyPipe implements OnDestroy, PipeTransform {\n  private readonly onLangChange: Subscription;\n  private readonly localizationService = inject(LocalizationService);\n  private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n  constructor() {\n    super(inject(LocalizationService).getCurrentLanguage());\n    this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n      this.changeDetectorRef.markForCheck()\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public transform(value: number | string, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null;\n  public transform(value: null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): null;\n  public transform(\n    // eslint-disable-next-line @typescript-eslint/unified-signatures -- Expose same signatures as angular CurrencyPipe\n    value: number | string | null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null;\n  public transform(\n    value: number | string | null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null {\n    return super.transform(value, currencyCode, display, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n  }\n\n  public ngOnDestroy(): void {\n    this.onLangChange.unsubscribe();\n  }\n}\n","import {\n  DatePipe,\n} from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  inject,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationService,\n} from './localization-service';\n\n/**\n * Native angular DatePipe taking the current lang into consideration\n */\n@Pipe({\n  name: 'date',\n  pure: false,\n  standalone: false\n})\nexport class LocalizedDatePipe extends DatePipe implements OnDestroy, PipeTransform {\n  private readonly onLangChange: Subscription;\n  private readonly localizationService = inject(LocalizationService);\n  private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n  constructor() {\n    super(inject(LocalizationService).getCurrentLanguage());\n    this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n      this.changeDetectorRef.markForCheck()\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string\n    | null;\n  public transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null;\n  public transform(\n    value: Date | string | number | null | undefined, format?: string, timezone?: string,\n    locale?: string): string | null;\n  public transform(\n    value: Date | string | number | null | undefined, format = 'mediumDate', timezone?: string,\n    locale?: string): string | null {\n    return this.localizationService.showKeys ? format : super.transform(value, format, timezone, locale || this.localizationService.getCurrentLanguage());\n  }\n\n  public ngOnDestroy(): void {\n    this.onLangChange.unsubscribe();\n  }\n}\n","import {\n  DecimalPipe,\n} from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  inject,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationService,\n} from './localization-service';\n\n/**\n * Native angular DecimalPipe taking the current lang into consideration\n */\n@Pipe({\n  name: 'decimal',\n  pure: false,\n  standalone: false\n})\nexport class LocalizedDecimalPipe extends DecimalPipe implements OnDestroy, PipeTransform {\n  private readonly onLangChange: Subscription;\n  private readonly localizationService = inject(LocalizationService);\n  private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n  constructor() {\n    super(inject(LocalizationService).getCurrentLanguage());\n    this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n      this.changeDetectorRef.markForCheck()\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public transform(value: number | string, digitsInfo?: string, locale?: string): string | null;\n  public transform(value: null | undefined, digitsInfo?: string, locale?: string): null;\n  public transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string): string | null {\n    return super.transform(value, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n  }\n\n  public ngOnDestroy(): void {\n    this.onLangChange.unsubscribe();\n  }\n}\n","import {\n  Directionality,\n} from '@angular/cdk/bidi';\nimport {\n  inject,\n  Injectable,\n  Renderer2,\n  RendererFactory2,\n} from '@angular/core';\nimport {\n  LangChangeEvent,\n  TranslateService,\n} from '@ngx-translate/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\n\n/**\n * Service for handling the text direction based on the LocalizationConfiguration\n */\n@Injectable()\nexport class TextDirectionService {\n  private readonly translateService = inject(TranslateService);\n  private readonly configuration = inject<LocalizationConfiguration>(LOCALIZATION_CONFIGURATION_TOKEN);\n  private readonly rendererFactory = inject(RendererFactory2);\n  private readonly directionality = inject(Directionality);\n\n  private subscription?: Subscription;\n  private readonly renderer: Renderer2;\n\n  constructor() {\n    this.renderer = this.rendererFactory.createRenderer(null, null);\n  }\n\n  /**\n   * Updates the dir attribute on body HTML tag.\n   * @returns a subscription that updates the dir attribute\n   */\n  public onLangChangeSubscription() {\n    if (this.subscription && !this.subscription.closed) {\n      return this.subscription;\n    }\n    this.subscription = this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {\n      const direction = this.configuration.rtlLanguages.includes(event.lang.split('-')[0]) ? 'rtl' : 'ltr';\n      this.renderer.setAttribute(document.body, 'dir', direction);\n      this.directionality.change.emit(direction);\n    });\n    return this.subscription;\n  }\n}\n","import {\n  DIR_DOCUMENT,\n  Direction,\n  Directionality,\n} from '@angular/cdk/bidi';\nimport {\n  inject,\n  Injectable,\n  OnDestroy,\n} from '@angular/core';\nimport {\n  startWith,\n} from 'rxjs/operators';\n\n/**\n * @deprecated The value of Directionality is no longer readonly and can be updated, this class will be removed in v16\n */\n@Injectable()\nexport class TextDirectionality extends Directionality implements OnDestroy {\n  public get value(): Direction {\n    return this._value;\n  }\n\n  public set value(value: Direction) {\n    this._value = value;\n  }\n\n  /**\n   * The current 'ltr' or 'rtl' value.\n   * @override\n   */\n  private _value: Direction = 'ltr';\n\n  constructor() {\n    super(inject(DIR_DOCUMENT, { optional: true }));\n    this.change\n      .pipe(startWith(this._value))\n      .subscribe((value: Direction) => this._value = value);\n  }\n\n  public ngOnDestroy() {\n    this.change.complete();\n  }\n}\n","import {\n  BidiModule,\n  Directionality,\n} from '@angular/cdk/bidi';\nimport {\n  CommonModule,\n  CurrencyPipe,\n  DatePipe,\n  DecimalPipe,\n} from '@angular/common';\nimport {\n  InjectionToken,\n  LOCALE_ID,\n  ModuleWithProviders,\n  NgModule,\n  Optional,\n} from '@angular/core';\nimport {\n  TranslateModule,\n} from '@ngx-translate/core';\nimport {\n  DEFAULT_LOCALIZATION_CONFIGURATION,\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LocalizationService,\n} from './localization-service';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\nimport {\n  LocalizationTranslateDirective,\n} from './localization-translate-directive';\nimport {\n  O3rLocalizationTranslatePipe,\n} from './localization-translate-pipe';\nimport {\n  LocalizedCurrencyPipe,\n} from './localized-currency-pipe';\nimport {\n  LocalizedDatePipe,\n} from './localized-date-pipe';\nimport {\n  LocalizedDecimalPipe,\n} from './localized-decimal-pipe';\nimport {\n  TextDirectionService,\n} from './text-direction-service';\nimport {\n  TextDirectionality,\n} from './text-directionality';\n\n/**\n * creates LocalizationConfiguration, which is used if the application\n * @param configuration Localization configuration\n */\nexport function createLocalizationConfiguration(configuration?: Partial<LocalizationConfiguration>): LocalizationConfiguration {\n  return {\n    ...DEFAULT_LOCALIZATION_CONFIGURATION,\n    ...configuration\n  };\n}\n\n/**\n * Factory to inject the LOCALE_ID token with the current language into Angular context\n * @param localizationService Localization service\n */\nexport function localeIdNgBridge(localizationService: LocalizationService) {\n  return localizationService.getCurrentLanguage();\n}\n\n/** Custom Localization Configuration Token to override default localization configuration */\nexport const CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN = new InjectionToken<Partial<LocalizationConfiguration>>('Partial Localization configuration');\n\n@NgModule({\n  declarations: [O3rLocalizationTranslatePipe, LocalizationTranslateDirective, LocalizedDatePipe, LocalizedDecimalPipe, LocalizedCurrencyPipe],\n  imports: [TranslateModule, BidiModule, CommonModule],\n  exports: [TranslateModule, O3rLocalizationTranslatePipe, LocalizationTranslateDirective, LocalizedDatePipe, LocalizedDecimalPipe, LocalizedCurrencyPipe],\n  providers: [\n    { provide: LOCALIZATION_CONFIGURATION_TOKEN, useFactory: createLocalizationConfiguration, deps: [[new Optional(), CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN]] },\n    { provide: LOCALE_ID, useFactory: localeIdNgBridge, deps: [LocalizationService] },\n    { provide: Directionality, useClass: TextDirectionality },\n    { provide: DatePipe, useClass: LocalizedDatePipe },\n    { provide: DecimalPipe, useClass: LocalizedDecimalPipe },\n    { provide: CurrencyPipe, useClass: LocalizedCurrencyPipe },\n    TextDirectionService\n  ]\n})\nexport class LocalizationModule {\n  /**\n   * forRoot method should be called only once from the application index.ts\n   * It will do several things:\n   * - provide the configuration for the whole application\n   * - register all locales specified in the LocalizationConfiguration\n   * - configure TranslateService\n   * - inject LOCALE_ID token\n   * @param configuration LocalizationConfiguration\n   */\n  public static forRoot(\n    configuration?: () => Partial<LocalizationConfiguration>\n  ): ModuleWithProviders<LocalizationModule> {\n    return {\n      ngModule: LocalizationModule,\n      providers: [\n        LocalizationService,\n        ...(configuration\n          ? [{\n            provide: CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN,\n            useFactory: configuration\n          }]\n          : [])\n      ]\n    };\n  }\n}\n","import {\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  TranslateLoader,\n} from '@ngx-translate/core';\nimport {\n  DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n  LoggerService,\n} from '@o3r/logger';\nimport {\n  combineLatest,\n  from,\n  Observable,\n  of,\n} from 'rxjs';\nimport {\n  catchError,\n  map,\n  switchMap,\n} from 'rxjs/operators';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\n\nconst JSON_EXT = '.json';\n\n/**\n * This class is responsible for loading translation bundles from remote or local endpoints depending on the LocalizationConfiguration.\n * Fallback mechanism ensures that if a bundle in some language cannot be fetched remotely\n * we try to fetch the same language bundle locally (bundles stored inside the application)\n * and finally load the fallback language bundle (if all previous fetches failed)\n */\n@Injectable()\nexport class TranslationsLoader implements TranslateLoader {\n  private readonly localizationConfiguration: LocalizationConfiguration = inject(LOCALIZATION_CONFIGURATION_TOKEN);\n  private readonly logger? = inject(LoggerService, { optional: true });\n  private readonly dynamicContentService? = inject(DynamicContentService, { optional: true });\n\n  /**\n   * Download a language bundle file\n   * @param  url Url to the bundle file\n   */\n  private downloadLanguageBundle$(url: string) {\n    const queryParams = this.localizationConfiguration.queryParams;\n\n    let queryString = '';\n    if (queryParams) {\n      queryString = '?' + Object.keys(queryParams).map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(queryParams[key])).join('&');\n    }\n    return from(fetch(url + queryString, this.localizationConfiguration.fetchOptions)).pipe(\n      switchMap((response) => from(response.json()))\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public getTranslation(lang: string): Observable<any> {\n    const fallback = this.localizationConfiguration.fallbackLanguage;\n    let localizationPath$ = of(this.localizationConfiguration.endPointUrl);\n\n    if (this.localizationConfiguration.useDynamicContent) {\n      if (!this.dynamicContentService) {\n        throw new Error('Dynamic Content is not available. Please verify you have provided the DynamicContent in your application');\n      }\n      localizationPath$ = this.dynamicContentService.getContentPathStream(this.localizationConfiguration.endPointUrl);\n    }\n\n    return localizationPath$.pipe(\n      switchMap((localizationPath: string) => {\n        if (localizationPath) {\n          const localizationBundle$ = this.downloadLanguageBundle$(localizationPath + lang + JSON_EXT);\n\n          if (this.localizationConfiguration.mergeWithLocalTranslations) {\n            return combineLatest([\n              localizationBundle$.pipe(catchError(() => of({}))),\n              this.getTranslationFromLocal(lang, fallback).pipe(\n                map((translations) => {\n                  Object.keys(translations).forEach((key) => translations[key] = `[local] ${translations[key] as string}`);\n                  return translations;\n                })\n              )\n            ]).pipe(map(([dynamicTranslations, localTranslations]) => ({ ...localTranslations, ...dynamicTranslations })));\n          }\n\n          /*\n          * if endPointUrl is specified by the configuration then:\n          *   1. try to load lang from endPointUrl\n          *   2. if 1 fails then try to load from the app (local file)\n          */\n          return localizationBundle$.pipe(\n            catchError(() => {\n              this.logger?.warn(`Failed to load the localization resource from ${localizationPath + lang + JSON_EXT}, trying from the application resources`);\n              return this.getTranslationFromLocal(lang, fallback);\n            })\n          );\n        }\n        /*\n        * else if endPointUrl NOT specified by then configuration then:\n        *   1. try to load from the app (local file)\n        */\n        this.logger?.warn('No localization endpoint specified, localization fetch from application resources');\n        return this.getTranslationFromLocal(lang, fallback);\n      })\n    );\n  }\n\n  /**\n   *\n   *Fetches localization bundles from published folder (internal to application)\n   *\n   *1. try to load lang from local\n   *2. if 1 fails try to load fallback lang but only if it's different from lang in 1\n   * @param lang - language of the bundle\n   * @param fallbackLanguage - fallback language in case bundle in language not found\n   */\n  public getTranslationFromLocal(lang: string, fallbackLanguage: string): Observable<any> {\n    const pathPrefix: string = this.localizationConfiguration.bundlesOutputPath;\n    return this.downloadLanguageBundle$(pathPrefix + lang + JSON_EXT).pipe(\n      catchError(() => {\n        if (lang === fallbackLanguage) {\n          this.logger?.warn(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}.`);\n          return of({});\n        } else {\n          this.logger?.warn(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}. Application will fallback to ${fallbackLanguage}`);\n          return this.downloadLanguageBundle$(pathPrefix + fallbackLanguage + JSON_EXT).pipe(\n            catchError(() => of({}))\n          );\n        }\n      })\n    );\n  }\n}\n","import {\n  FactoryProvider,\n  Injector,\n  Optional,\n} from '@angular/core';\nimport {\n  TranslateLoader,\n} from '@ngx-translate/core';\nimport {\n  DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n  LoggerService,\n} from '@o3r/logger';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\nimport {\n  TranslationsLoader,\n} from './translations-loader';\n\n/**\n * Creates a loader of translations bundles based on the configuration\n * (endPointUrl and language determine which bundle we load and where do we fetch it from)\n * @param localizationConfiguration\n * @param logger service to handle the log of warning and errors\n * @param dynamicContentService (optional)\n */\nexport function createTranslateLoader(localizationConfiguration: LocalizationConfiguration, logger?: LoggerService, dynamicContentService?: DynamicContentService) {\n  const injector = Injector.create({\n    providers: [\n      { provide: LOCALIZATION_CONFIGURATION_TOKEN, useValue: localizationConfiguration },\n      { provide: LoggerService, useValue: logger },\n      { provide: DynamicContentService, useValue: dynamicContentService },\n      {\n        provide: TranslationsLoader,\n        deps: [[LoggerService, new Optional()], [DynamicContentService, new Optional()], LOCALIZATION_CONFIGURATION_TOKEN]\n      }\n    ]\n  });\n  return injector.get(TranslationsLoader);\n}\n\n/**\n * TranslateLoader provider, using framework's TranslationsLoader class\n */\nexport const translateLoaderProvider: Readonly<FactoryProvider> = {\n  provide: TranslateLoader,\n  useFactory: createTranslateLoader,\n  deps: [LOCALIZATION_CONFIGURATION_TOKEN, [new Optional(), LoggerService], [new Optional(), DynamicContentService]]\n} as const;\n","import {\n  ApplicationRef,\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  TranslateCompiler,\n} from '@ngx-translate/core';\nimport {\n  lastValueFrom,\n  Subscription,\n} from 'rxjs';\nimport type {\n  TranslateMessageFormatLazyCompiler,\n} from '../core';\nimport {\n  LocalizationService,\n} from '../tools';\n\n@Injectable()\nexport class OtterLocalizationDevtools {\n  private readonly localizationService = inject(LocalizationService);\n  private readonly translateCompiler = inject(TranslateCompiler);\n  private readonly appRef = inject(ApplicationRef);\n\n  /**\n   * Is the translation deactivation enabled\n   */\n  public isTranslationDeactivationEnabled() {\n    return this.localizationService.isTranslationDeactivationEnabled();\n  }\n\n  /**\n   * Show localization keys\n   * @param value value enforced by the DevTools extension\n   */\n  public showLocalizationKeys(value?: boolean): void {\n    this.localizationService.toggleShowKeys(value);\n    this.appRef.tick();\n  }\n\n  /**\n   * Returns the current language\n   */\n  public getCurrentLanguage() {\n    return this.localizationService.getCurrentLanguage();\n  }\n\n  /**\n   * Setup a listener on language change\n   * @param fn called when the language is changed in the app\n   */\n  public onLanguageChange(fn: (language: string) => any): Subscription {\n    return this.localizationService\n      .getTranslateService()\n      .onLangChange\n      .subscribe(({ lang }) => {\n        fn(lang);\n      });\n  }\n\n  /**\n   * Switch the current language to the specified value\n   * @param language new language to switch to\n   */\n  public async switchLanguage(language: string | undefined) {\n    if (!language) {\n      return;\n    }\n    await lastValueFrom(this.localizationService.useLanguage(language));\n    this.appRef.tick();\n  }\n\n  /**\n   * Updates the specified localization key/values for the current language.\n   *\n   * Recommendation: To be used with a small number of keys to update to avoid performance issues.\n   * @param keyValues key/values to update\n   * @param language if not provided, the current language value\n   */\n  public updateLocalizationKeys(keyValues: { [key: string]: string }, language?: string): void | Promise<void> {\n    const lang = language || this.getCurrentLanguage();\n    const translateService = this.localizationService.getTranslateService();\n    Object.entries(keyValues).forEach(([key, value]) => {\n      translateService.set(key, value, lang);\n    });\n    this.appRef.tick();\n  }\n\n  /**\n   * Reload a language from the language file\n   * @see https://github.com/ngx-translate/core/blob/master/packages/core/lib/translate.service.ts#L490\n   * @param language language to reload\n   */\n  public async reloadLocalizationKeys(language?: string) {\n    const lang = language || this.getCurrentLanguage();\n    if ((this.translateCompiler as TranslateMessageFormatLazyCompiler).clearCache) {\n      (this.translateCompiler as TranslateMessageFormatLazyCompiler).clearCache();\n    }\n    const initialLocs = await lastValueFrom(\n      this.localizationService\n        .getTranslateService()\n        .reloadLang(lang)\n    );\n    this.localizationService.getTranslateService().setTranslation(\n      language || this.getCurrentLanguage(),\n      initialLocs\n    );\n    this.appRef.tick();\n  }\n}\n","import {\n  InjectionToken,\n} from '@angular/core';\nimport {\n  LocalizationDevtoolsServiceOptions,\n} from './localization-devkit-interface';\n\nexport const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS: Readonly<LocalizationDevtoolsServiceOptions> = {\n  isActivatedOnBootstrap: false,\n  isActivatedOnBootstrapWhenCMSContext: true,\n  metadataFilePath: './metadata/localisation.metadata.json'\n} as const;\n\nexport const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS = new InjectionToken<LocalizationDevtoolsServiceOptions>('Otter Localization Devtools options');\n","/* eslint-disable no-console -- This is the purpose of this service */\nimport {\n  inject,\n  Injectable,\n} from '@angular/core';\nimport type {\n  ContextualizationDataset,\n  DevtoolsServiceInterface,\n  WindowWithDevtools,\n} from '@o3r/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationContextualizationDevtools,\n  LocalizationDevtoolsServiceOptions,\n} from './localization-devkit-interface';\nimport {\n  OtterLocalizationDevtools,\n} from './localization-devtools';\nimport {\n  OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n  OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n} from './localization-devtools-token';\n\n@Injectable()\nexport class LocalizationDevtoolsConsoleService implements DevtoolsServiceInterface, LocalizationContextualizationDevtools {\n  /** Name of the Window property to access to the devtools */\n  public static readonly windowModuleName = 'localization';\n\n  private readonly localizationDevtools = inject(OtterLocalizationDevtools);\n  private readonly options = inject<LocalizationDevtoolsServiceOptions>(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, { optional: true }) ?? OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS;\n\n  constructor() {\n    if (\n      this.options.isActivatedOnBootstrap\n      || (\n        this.options.isActivatedOnBootstrapWhenCMSContext\n        && (document.body.dataset as ContextualizationDataset).cmscontext === 'true'\n      )\n    ) {\n      this.activate();\n    }\n  }\n\n  /** @inheritDoc */\n  public activate() {\n    const windowWithDevtools: WindowWithDevtools = window;\n\n    windowWithDevtools._OTTER_DEVTOOLS_ ||= {};\n\n    windowWithDevtools._OTTER_DEVTOOLS_[LocalizationDevtoolsConsoleService.windowModuleName] = this;\n\n    console.info(`Otter localization Devtools is now accessible via the _OTTER_DEVTOOLS_.${LocalizationDevtoolsConsoleService.windowModuleName} variable`);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public isTranslationDeactivationEnabled(): boolean | Promise<boolean> {\n    return this.localizationDevtools.isTranslationDeactivationEnabled();\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public showLocalizationKeys(value?: boolean): void | Promise<void> {\n    this.localizationDevtools.showLocalizationKeys(value);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public getCurrentLanguage(): string | Promise<string> {\n    const currentLanguage = this.localizationDevtools.getCurrentLanguage();\n    return currentLanguage;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public async switchLanguage(language: string): Promise<{ previous: string; requested: string; current: string }> {\n    const previous = this.localizationDevtools.getCurrentLanguage();\n    await this.localizationDevtools.switchLanguage(language);\n    const current = this.localizationDevtools.getCurrentLanguage();\n    return {\n      requested: language,\n      previous,\n      current\n    };\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public onLanguageChange(fn: (language: string) => any): Subscription {\n    return this.localizationDevtools.onLanguageChange(fn);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public updateLocalizationKeys(keyValues: { [key: string]: string }, language?: string): void | Promise<void> {\n    return this.localizationDevtools.updateLocalizationKeys(keyValues, language);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public reloadLocalizationKeys(language?: string) {\n    return this.localizationDevtools.reloadLocalizationKeys(language);\n  }\n}\n","import {\n  DestroyRef,\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n  filterMessageContent,\n  sendOtterMessage,\n} from '@o3r/core';\nimport {\n  LoggerService,\n} from '@o3r/logger';\nimport {\n  firstValueFrom,\n  fromEvent,\n} from 'rxjs';\nimport {\n  LocalizationService,\n} from '../tools';\nimport {\n  type AvailableLocalizationMessageContents,\n  LocalizationDevtoolsServiceOptions,\n  type LocalizationMessageDataTypes,\n} from './localization-devkit-interface';\nimport {\n  OtterLocalizationDevtools,\n} from './localization-devtools';\nimport {\n  OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n  OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n} from './localization-devtools-token';\n\nconst isLocalizationMessage = (message: any): message is AvailableLocalizationMessageContents => {\n  return message && (\n    message.dataType === 'displayLocalizationKeys'\n    || message.dataType === 'languages'\n    || message.dataType === 'switchLanguage'\n    || message.dataType === 'localizations'\n    || message.dataType === 'updateLocalization'\n    || message.dataType === 'requestMessages'\n    || message.dataType === 'connect'\n    || message.dataType === 'reloadLocalizationKeys'\n    || message.dataType === 'isTranslationDeactivationEnabled'\n    || message.dataType === 'getTranslationValuesContentMessage'\n  );\n};\n\n@Injectable()\nexport class LocalizationDevtoolsMessageService {\n  private readonly logger = inject(LoggerService);\n  private readonly localizationDevTools = inject(OtterLocalizationDevtools);\n  private readonly localizationService = inject(LocalizationService);\n  private readonly options = inject<LocalizationDevtoolsServiceOptions>(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, { optional: true }) ?? OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS;\n\n  private readonly sendMessage = sendOtterMessage<AvailableLocalizationMessageContents>;\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor() {\n    this.options = {\n      ...OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n      ...this.options\n    };\n    if (this.options.isActivatedOnBootstrap) {\n      this.activate();\n    }\n  }\n\n  private async sendLocalizationsMetadata() {\n    const metadata = await (await fetch(this.options.metadataFilePath)).json();\n    this.sendMessage('localizations', {\n      localizations: metadata\n    });\n  }\n\n  /**\n   * Function to trigger a re-send a requested messages to the Otter Chrome DevTools extension\n   * @param only restricted list of messages to re-send\n   */\n  private async handleReEmitRequest(only?: LocalizationMessageDataTypes[]) {\n    if (!only || only.includes('localizations')) {\n      void this.sendLocalizationsMetadata();\n    }\n    if (!only || only.includes('switchLanguage')) {\n      this.sendMessage('switchLanguage', { language: this.localizationDevTools.getCurrentLanguage() });\n    }\n    if (!only || only.includes('languages')) {\n      this.sendMessage('languages', { languages: this.localizationService.getLanguages() });\n    }\n    if (!only || only.includes('getTranslationValuesContentMessage')) {\n      this.sendMessage('getTranslationValuesContentMessage', {\n        translations: await firstValueFrom(this.localizationService.getTranslateService().getTranslation(this.localizationService.getCurrentLanguage()))\n      });\n    }\n    if (!only || only.includes('isTranslationDeactivationEnabled')) {\n      this.sendMessage('isTranslationDeactivationEnabled', { enabled: this.localizationService.isTranslationDeactivationEnabled() });\n    }\n  }\n\n  /**\n   * Function to handle the incoming messages from Otter Chrome DevTools extension\n   * @param message Message coming from the Otter Chrome DevTools extension\n   */\n  private handleEvents(message: AvailableLocalizationMessageContents) {\n    this.logger.debug('Message handling by the localization service', message);\n\n    switch (message.dataType) {\n      case 'connect': {\n        this.connectPlugin();\n        break;\n      }\n      case 'displayLocalizationKeys': {\n        this.localizationDevTools.showLocalizationKeys(message.toggle);\n        break;\n      }\n      case 'requestMessages': {\n        void this.handleReEmitRequest(message.only);\n        break;\n      }\n      case 'switchLanguage': {\n        void this.localizationDevTools.switchLanguage(message.language);\n        break;\n      }\n      case 'updateLocalization': {\n        void this.localizationDevTools.updateLocalizationKeys({\n          [message.key]: message.value\n        }, message.lang);\n        break;\n      }\n      case 'reloadLocalizationKeys': {\n        void this.localizationDevTools.reloadLocalizationKeys(message.lang);\n        break;\n      }\n      default: {\n        this.logger.warn('Message ignored by the localization service', message);\n      }\n    }\n  }\n\n  /**\n   * Function to connect the plugin to the Otter Chrome DevTools extension\n   */\n  private connectPlugin() {\n    this.logger.debug('Otter DevTools is plugged to localization service of the application');\n  }\n\n  /** @inheritDoc */\n  public activate() {\n    fromEvent(window, 'message').pipe(\n      takeUntilDestroyed(this.destroyRef),\n      filterMessageContent(isLocalizationMessage)\n    ).subscribe((e) => this.handleEvents(e));\n  }\n}\n","import {\n  ModuleWithProviders,\n  NgModule,\n} from '@angular/core';\nimport {\n  LocalizationModule,\n} from '../tools/index';\nimport type {\n  LocalizationDevtoolsServiceOptions,\n} from './localization-devkit-interface';\nimport {\n  OtterLocalizationDevtools,\n} from './localization-devtools';\nimport {\n  LocalizationDevtoolsConsoleService,\n} from './localization-devtools-console-service';\nimport {\n  LocalizationDevtoolsMessageService,\n} from './localization-devtools-message-service';\nimport {\n  OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n  OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n} from './localization-devtools-token';\n\n@NgModule({\n  imports: [\n    LocalizationModule\n  ],\n  providers: [\n    { provide: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, useValue: OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS },\n    LocalizationDevtoolsMessageService,\n    LocalizationDevtoolsConsoleService,\n    OtterLocalizationDevtools\n  ]\n})\nexport class LocalizationDevtoolsModule {\n  /**\n   * Initialize Otter Devtools\n   * @param options\n   */\n  public static instrument(options: Partial<LocalizationDevtoolsServiceOptions>): ModuleWithProviders<LocalizationDevtoolsModule> {\n    return {\n      ngModule: LocalizationDevtoolsModule,\n      providers: [\n        { provide: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, useValue: { ...OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, ...options }, multi: false },\n        LocalizationDevtoolsMessageService,\n        LocalizationDevtoolsConsoleService,\n        OtterLocalizationDevtools\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["actions.setLocalizationOverride"],"mappings":"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"}