import { Translation, OtterMessageContent, ConnectContentMessage, RequestMessagesContentMessage, MessageDataTypes, DevtoolsCommonOptions, ContextualizationDevtoolsCommonOptions, DevtoolsServiceInterface, SetStateActionPayload, Serializer } from '@o3r/core';
export { Translation } from '@o3r/core';
import * as i0 from '@angular/core';
import { InjectionToken, PipeTransform, OnDestroy, ChangeDetectorRef, ModuleWithProviders, FactoryProvider } from '@angular/core';
import * as i6 from '@ngx-translate/core';
import { TranslateCompiler, TranslateService, TranslatePipe, TranslateDirective, TranslateLoader } from '@ngx-translate/core';
import { Options } from 'intl-messageformat';
import { Subscription, Observable } from 'rxjs';
import * as i8 from '@angular/common';
import { DatePipe, DecimalPipe, CurrencyPipe } from '@angular/common';
import * as i7 from '@angular/cdk/bidi';
import { Directionality, Direction } from '@angular/cdk/bidi';
import * as _ngrx_store from '@ngrx/store';
import { ActionReducer, Action, ReducerTypes, ActionCreator } from '@ngrx/store';
import { DynamicContentService } from '@o3r/dynamic-content';
import { LoggerService } from '@o3r/logger';

/**
 * Decorator to pass localization url
 * @param _url
 */
declare function Localization(_url: string): (target: any, key: string) => void;

/** Object mapping of a localized string */
interface JSONLocalization {
    /** The key of the localized string. */
    key: string;
    /** The description of the key used to give some context to the translators. */
    description: string;
    /** True means that the key will be mapped to a dictionary in the CMS. */
    dictionary: boolean;
    /** True means that the value has to be overriden in the CMS. */
    referenceData: boolean;
    /** Tags used to filter/categorize localization strings */
    tags?: string[];
    /** The default value for EN language. It is mandatory if dictionary is set to false. */
    value?: string;
    /** Reference to another key. */
    ref?: string;
}
/** Localization Metadata file structure */
type LocalizationMetadata = JSONLocalization[];

/**
 * Describes configuration for LocalizationModule
 */
interface LocalizationConfiguration {
    /** List of available languages */
    supportedLocales: string[];
    /** Application display language */
    language?: string;
    /** Url to fetch translation bundles from */
    endPointUrl: string;
    /** Prefix endPoinrUrl with dynamicContentPath provided by DynamicContentPath */
    useDynamicContent: boolean;
    /** List of RTL language codes */
    rtlLanguages: string[];
    /**
     * Fallback language map of resource in case translation in language does not exist.
     * translate to unsupported language will try to map to supportedLocales from below property.
     * @example
     * ```typescript
     * {
     *   supportedLocales: ['en-GB', 'en-US', 'fr-FR'],
     *   fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}
     * }
     * // translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR,
     * // translate to en-NZ -> fallback to en-GB, translate to en -> fallback to en-GB.
     * ```
     */
    fallbackLocalesMap?: {
        [supportedLocale: string]: string;
    };
    /** Fallback language of resource in case translation in language does not exist */
    fallbackLanguage: string;
    /** Path relative to published folder where webpack will copy translation bundles */
    bundlesOutputPath: string;
    /** Debug mode switch */
    debugMode: boolean;
    /** Query parameters for fetching the localization resources */
    queryParams?: {
        [key: string]: string;
    };
    /** Fetch options object as per https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters */
    fetchOptions?: RequestInit;
    /** Enable the ability to switch the translations on and off at runtime. */
    enableTranslationDeactivation: boolean;
    /**
     * Merge the translations from DynamicContentPath with the local translations
     * Warning: Enable this option will download two localization bundles and can delay the display of the text on application first page
     * @default false
     */
    mergeWithLocalTranslations: boolean;
}
/**
 * Default configuration for LocalizationModule
 */
declare const DEFAULT_LOCALIZATION_CONFIGURATION: Readonly<LocalizationConfiguration>;

/**
 * Translatable item
 */
interface Translatable<T extends Translation> {
    /**
     * translations map
     */
    translations: T;
}

/**
 * Options for Lazy Message Format compiler
 */
interface LazyMessageFormatConfig extends Options {
    /**
     * Enables compiled translation caching
     * @default true
     */
    enableCache?: boolean;
    /**
     * Enables HTML in translation
     * @default true
     */
    ignoreTag?: boolean;
}
/**
 * Message format configuration default value
 */
declare const lazyMessageDefaultConfig: Readonly<LazyMessageFormatConfig>;
/** Message Format configuration Token */
declare const MESSAGE_FORMAT_CONFIG: InjectionToken<LazyMessageFormatConfig>;
/**
 * This compiler expects ICU syntax and compiles the expressions with messageformat.js
 * Compare to ngx-translate-messageformat-compiler package, the compilation of the translation is done only on demand
 */
declare class TranslateMessageFormatLazyCompiler extends TranslateCompiler {
    /** Configuration */
    private readonly config;
    /** Cache of compiled translations */
    private cache;
    constructor();
    /**
     * Clear the cache of the compiled translations
     */
    clearCache(): void;
    /** @inheritDoc */
    compile(value: string, lang: string): (params: any) => string;
    /** @inheritDoc */
    compileTranslations(translations: {
        [x: string]: any;
    }, lang: string): {
        [x: string]: (params: any) => string;
    };
    static ɵfac: i0.ɵɵFactoryDeclaration<TranslateMessageFormatLazyCompiler, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TranslateMessageFormatLazyCompiler>;
}

interface LocalizationDevtoolsServiceOptions extends DevtoolsCommonOptions, ContextualizationDevtoolsCommonOptions {
    metadataFilePath: string;
}
/** Localizations message content */
interface LocalizationsContentMessage extends OtterMessageContent<'localizations'> {
    /** Localizations metadata */
    localizations: LocalizationMetadata;
}
/** Languages message content */
interface LanguagesContentMessage extends OtterMessageContent<'languages'> {
    /** Languages available */
    languages: string[];
}
/** Switch languages message content */
interface SwitchLanguageContentMessage extends OtterMessageContent<'switchLanguage'> {
    /** Language */
    language: string;
}
/** Display localization key message content */
interface DisplayLocalizationKeysContentMessage extends OtterMessageContent<'displayLocalizationKeys'> {
    /** Toggle the display of the localization keys */
    toggle?: boolean;
}
/** Update localization message content */
interface UpdateLocalizationContentMessage extends OtterMessageContent<'updateLocalization'> {
    /** Localization key */
    key: string;
    /** Localization value */
    value: string;
    /** Lang */
    lang?: string;
}
/** Reload localization Keys message content */
interface ReloadLocalizationKeysContentMessage extends OtterMessageContent<'reloadLocalizationKeys'> {
    /** Lang */
    lang?: string;
}
interface IsTranslationDeactivationEnabledContentMessage extends OtterMessageContent<'isTranslationDeactivationEnabled'> {
    enabled: boolean;
}
interface GetTranslationValuesContentMessage extends OtterMessageContent<'getTranslationValuesContentMessage'> {
    translations: {
        [localizationKey: string]: string;
    };
}
type LocalizationMessageContents = LanguagesContentMessage | ReloadLocalizationKeysContentMessage | SwitchLanguageContentMessage | LocalizationsContentMessage | DisplayLocalizationKeysContentMessage | UpdateLocalizationContentMessage | IsTranslationDeactivationEnabledContentMessage | GetTranslationValuesContentMessage;
/** List of possible DataTypes for Localization messages */
type LocalizationMessageDataTypes = MessageDataTypes<LocalizationMessageContents>;
/** List of all messages for Localization purpose */
type AvailableLocalizationMessageContents = LocalizationMessageContents | ConnectContentMessage | RequestMessagesContentMessage<LocalizationMessageDataTypes>;
/**
 * Contextualization devtools exposed for localization in CMS integration
 */
interface LocalizationContextualizationDevtools {
    /**
     * Is the translation deactivation enabled
     */
    isTranslationDeactivationEnabled(): boolean | Promise<boolean>;
    /**
     * Show localization keys
     * @param value value enforced by the DevTools extension
     */
    showLocalizationKeys: (value?: boolean) => void | Promise<void>;
    /**
     * Returns the current language
     */
    getCurrentLanguage: () => string | Promise<string>;
    /**
     * Switch the current language to the specified value
     * @param language new language to switch to
     */
    switchLanguage: (language: string) => Promise<{
        previous: string;
        requested: string;
        current: string;
    }>;
    /**
     * Setup a listener on language change
     * @param fn called when the language is changed in the app
     */
    onLanguageChange: (fn: (language: string) => any) => Subscription;
    /**
     * Updates the specified localization key/values for the current language
     * @param keyValues key/values to update
     * @param language if not provided, the current language value
     */
    updateLocalizationKeys: (keyValues: {
        [key: string]: string;
    }, language?: string) => void | Promise<void>;
    /**
     * Reload a language from the language file
     * @see https://github.com/ngx-translate/core/blob/master/packages/core/lib/translate.service.ts#L490
     * @param language language to reload
     */
    reloadLocalizationKeys: (language?: string) => Promise<void>;
}

declare class OtterLocalizationDevtools {
    private readonly localizationService;
    private readonly translateCompiler;
    private readonly appRef;
    /**
     * Is the translation deactivation enabled
     */
    isTranslationDeactivationEnabled(): boolean;
    /**
     * Show localization keys
     * @param value value enforced by the DevTools extension
     */
    showLocalizationKeys(value?: boolean): void;
    /**
     * Returns the current language
     */
    getCurrentLanguage(): string;
    /**
     * Setup a listener on language change
     * @param fn called when the language is changed in the app
     */
    onLanguageChange(fn: (language: string) => any): Subscription;
    /**
     * Switch the current language to the specified value
     * @param language new language to switch to
     */
    switchLanguage(language: string | undefined): Promise<void>;
    /**
     * Updates the specified localization key/values for the current language.
     *
     * Recommendation: To be used with a small number of keys to update to avoid performance issues.
     * @param keyValues key/values to update
     * @param language if not provided, the current language value
     */
    updateLocalizationKeys(keyValues: {
        [key: string]: string;
    }, language?: string): void | Promise<void>;
    /**
     * Reload a language from the language file
     * @see https://github.com/ngx-translate/core/blob/master/packages/core/lib/translate.service.ts#L490
     * @param language language to reload
     */
    reloadLocalizationKeys(language?: string): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<OtterLocalizationDevtools, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<OtterLocalizationDevtools>;
}

declare class LocalizationDevtoolsConsoleService implements DevtoolsServiceInterface, LocalizationContextualizationDevtools {
    /** Name of the Window property to access to the devtools */
    static readonly windowModuleName = "localization";
    private readonly localizationDevtools;
    private readonly options;
    constructor();
    /** @inheritDoc */
    activate(): void;
    /**
     * @inheritdoc
     */
    isTranslationDeactivationEnabled(): boolean | Promise<boolean>;
    /**
     * @inheritdoc
     */
    showLocalizationKeys(value?: boolean): void | Promise<void>;
    /**
     * @inheritdoc
     */
    getCurrentLanguage(): string | Promise<string>;
    /**
     * @inheritdoc
     */
    switchLanguage(language: string): Promise<{
        previous: string;
        requested: string;
        current: string;
    }>;
    /**
     * @inheritdoc
     */
    onLanguageChange(fn: (language: string) => any): Subscription;
    /**
     * @inheritdoc
     */
    updateLocalizationKeys(keyValues: {
        [key: string]: string;
    }, language?: string): void | Promise<void>;
    /**
     * @inheritdoc
     */
    reloadLocalizationKeys(language?: string): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationDevtoolsConsoleService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<LocalizationDevtoolsConsoleService>;
}

declare class LocalizationDevtoolsMessageService {
    private readonly logger;
    private readonly localizationDevTools;
    private readonly localizationService;
    private readonly options;
    private readonly sendMessage;
    private readonly destroyRef;
    constructor();
    private sendLocalizationsMetadata;
    /**
     * Function to trigger a re-send a requested messages to the Otter Chrome DevTools extension
     * @param only restricted list of messages to re-send
     */
    private handleReEmitRequest;
    /**
     * Function to handle the incoming messages from Otter Chrome DevTools extension
     * @param message Message coming from the Otter Chrome DevTools extension
     */
    private handleEvents;
    /**
     * Function to connect the plugin to the Otter Chrome DevTools extension
     */
    private connectPlugin;
    /** @inheritDoc */
    activate(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationDevtoolsMessageService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<LocalizationDevtoolsMessageService>;
}

/**
 * Service which is wrapping the configuration logic of TranslateService from ngx-translate
 * Any application willing to use localization just needs to inject LocalizationService
 * in the root component and call its configure() method.
 */
declare class LocalizationService {
    private readonly translateService;
    private readonly logger;
    private readonly configuration;
    private readonly store;
    private readonly localeSplitIdentifier;
    /**
     * Internal subject that we use to track changes between keys only and translation mode
     */
    private readonly _showKeys$;
    /**
     * Map of localization keys to replace a key to another
     */
    private readonly keyMapping$?;
    /**
     * _showKeys$ exposed as an Observable
     */
    showKeys$: Observable<boolean>;
    constructor();
    /**
     * This will handle the fallback language hierarchy to find out fallback language.
     * supportedLocales language has highest priority, next priority goes to fallbackLocalesMap and default would be
     * fallbackLanguage.
     * @param language Selected language.
     * @returns selected language if supported, fallback language otherwise.
     */
    private checkFallbackLocalesMap;
    /**
     * This function checks if fallback language can be provided from fallbackLocalesMap.
     * supportedLocales: ['en-GB', 'en-US', 'fr-FR'], fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}
     * translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR
     * translate to en-NZ -> fallback to en-GB
     * @param language Selected language.
     * @returns Fallback language if available, undefined otherwise.
     */
    private getFallbackMapLangCode;
    /**
     * This function checks if closest supported language available incase of selected language is not
     * supported language.
     * supportedLocales: ['en-GB', 'en-US', 'fr-FR']
     * translate to en-CA -> fallback to en-GB
     * @param language Selected language.
     * @returns Closest supported language if available, undefined otherwise.
     */
    private getFirstClosestSupportedLanguageCode;
    /**
     * Returns a stream of translated values of a key which updates whenever the language changes.
     * @param translationKey Key to translate
     * @param interpolateParams Object to use in translation binding
     * @returns A stream of the translated key
     */
    private getTranslationStream;
    /**
     * Configures TranslateService and registers locales. This method is called from the application level.
     */
    configure(): Promise<void>;
    /**
     * Is the translation deactivation enabled
     */
    isTranslationDeactivationEnabled(): boolean;
    /**
     * Wrapper to call the ngx-translate service TranslateService method getLangs().
     */
    getLanguages(): string[];
    /**
     * Wrapper to call the ngx-translate service TranslateService method use(language).
     * @param language
     */
    useLanguage(language: string): Observable<any>;
    /**
     * Wrapper to get the ngx-translate service TranslateService currentLang.
     */
    getCurrentLanguage(): string;
    /**
     * Get the instance of the ngx-translate TranslateService used by LocalizationService.
     */
    getTranslateService(): TranslateService;
    /**
     * Toggle the ShowKeys mode between active and inactive.
     * @param value if specified, set the ShowKeys mode to value. If not specified, toggle the ShowKeys mode.
     */
    toggleShowKeys(value?: boolean): void;
    /**
     * Return the current value of debug show/hide translation keys.
     */
    get showKeys(): boolean;
    /**
     * Get an observable of translation key after global mapping
     * @param requestedKey Original translation key
     */
    getKey(requestedKey: string): Observable<any>;
    /**
     * Returns a stream of translated values of a key which updates whenever the language changes.
     * @param key Key to translate
     * @param interpolateParams Object to use in translation binding
     * @returns A stream of the translated key
     */
    translate(key: string, interpolateParams?: object): Observable<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<LocalizationService>;
}

/**
 * TranslatePipe class adding debug functionality
 */
declare class O3rLocalizationTranslatePipe extends TranslatePipe implements PipeTransform, OnDestroy {
    /** Localization service instance */
    protected readonly localizationService: LocalizationService;
    /** Change detector service instance */
    protected readonly changeDetector: ChangeDetectorRef;
    /** Localization config token */
    protected readonly localizationConfig: LocalizationConfiguration;
    /**
     * Internal subscription to the LocalizationService showKeys mode changes
     */
    protected readonly onShowKeysChange?: Subscription;
    /**
     * Internal subscription to the LocalizationService key mapping
     */
    protected onKeyChange?: Subscription;
    /**
     * Should we display keys instead of translations
     */
    protected showKeys: boolean;
    /** last key queried */
    protected lastQueryKey?: string;
    /** last key resolved */
    protected lastResolvedKey?: string;
    constructor();
    /**
     * Calls original transform method and eventually outputs the key if debugMode (in LocalizationConfiguration) is enabled
     * @inheritdoc
     */
    transform(query: string, ...args: any[]): any;
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<O3rLocalizationTranslatePipe, never>;
    static ɵpipe: i0.ɵɵPipeDeclaration<O3rLocalizationTranslatePipe, "o3rTranslate", false>;
}

/**
 * TranslateDirective class adding debug functionality
 */
declare class LocalizationTranslateDirective extends TranslateDirective implements OnDestroy {
    private readonly localizationService;
    private readonly localizationConfig;
    /**
     * Internal subscription to the LocalizationService showKeys mode changes
     */
    private readonly onShowKeysChange?;
    /**
     * Should we display keys instead of translations
     */
    private showKeys;
    /**
     * Internal subscription to the LocalizationService key mapping
     */
    private onKeyChange?;
    /** @inheritdoc */
    set translate(key: string);
    constructor();
    /**
     * Overriding parent's setContent to plug debugging feature
     * @param node
     * @param content
     */
    setContent(node: any, content: string): void;
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationTranslateDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<LocalizationTranslateDirective, "[translate],[ngx-translate]", never, { "translate": { "alias": "translate"; "required": false; }; }, {}, never, never, false, never>;
}

/**
 * Native angular DatePipe taking the current lang into consideration
 */
declare class LocalizedDatePipe extends DatePipe implements OnDestroy, PipeTransform {
    private readonly onLangChange;
    private readonly localizationService;
    private readonly changeDetectorRef;
    constructor();
    /**
     * @inheritdoc
     */
    transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string | null;
    transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null;
    transform(value: Date | string | number | null | undefined, format?: string, timezone?: string, locale?: string): string | null;
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizedDatePipe, never>;
    static ɵpipe: i0.ɵɵPipeDeclaration<LocalizedDatePipe, "date", false>;
}

/**
 * Native angular DecimalPipe taking the current lang into consideration
 */
declare class LocalizedDecimalPipe extends DecimalPipe implements OnDestroy, PipeTransform {
    private readonly onLangChange;
    private readonly localizationService;
    private readonly changeDetectorRef;
    constructor();
    /**
     * @inheritdoc
     */
    transform(value: number | string, digitsInfo?: string, locale?: string): string | null;
    transform(value: null | undefined, digitsInfo?: string, locale?: string): null;
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizedDecimalPipe, never>;
    static ɵpipe: i0.ɵɵPipeDeclaration<LocalizedDecimalPipe, "decimal", false>;
}

/**
 * Native angular CurrencyPipe taking the current lang into consideration
 */
declare class LocalizedCurrencyPipe extends CurrencyPipe implements OnDestroy, PipeTransform {
    private readonly onLangChange;
    private readonly localizationService;
    private readonly changeDetectorRef;
    constructor();
    /**
     * @inheritdoc
     */
    transform(value: number | string, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null;
    transform(value: null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): null;
    transform(value: number | string | null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null;
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizedCurrencyPipe, never>;
    static ɵpipe: i0.ɵɵPipeDeclaration<LocalizedCurrencyPipe, "currency", false>;
}

/**
 * creates LocalizationConfiguration, which is used if the application
 * @param configuration Localization configuration
 */
declare function createLocalizationConfiguration(configuration?: Partial<LocalizationConfiguration>): LocalizationConfiguration;
/**
 * Factory to inject the LOCALE_ID token with the current language into Angular context
 * @param localizationService Localization service
 */
declare function localeIdNgBridge(localizationService: LocalizationService): string;
/** Custom Localization Configuration Token to override default localization configuration */
declare const CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN: InjectionToken<Partial<LocalizationConfiguration>>;
declare class LocalizationModule {
    /**
     * forRoot method should be called only once from the application index.ts
     * It will do several things:
     * - provide the configuration for the whole application
     * - register all locales specified in the LocalizationConfiguration
     * - configure TranslateService
     * - inject LOCALE_ID token
     * @param configuration LocalizationConfiguration
     */
    static forRoot(configuration?: () => Partial<LocalizationConfiguration>): ModuleWithProviders<LocalizationModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<LocalizationModule, [typeof O3rLocalizationTranslatePipe, typeof LocalizationTranslateDirective, typeof LocalizedDatePipe, typeof LocalizedDecimalPipe, typeof LocalizedCurrencyPipe], [typeof i6.TranslateModule, typeof i7.BidiModule, typeof i8.CommonModule], [typeof i6.TranslateModule, typeof O3rLocalizationTranslatePipe, typeof LocalizationTranslateDirective, typeof LocalizedDatePipe, typeof LocalizedDecimalPipe, typeof LocalizedCurrencyPipe]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<LocalizationModule>;
}

declare class LocalizationDevtoolsModule {
    /**
     * Initialize Otter Devtools
     * @param options
     */
    static instrument(options: Partial<LocalizationDevtoolsServiceOptions>): ModuleWithProviders<LocalizationDevtoolsModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationDevtoolsModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<LocalizationDevtoolsModule, never, [typeof LocalizationModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<LocalizationDevtoolsModule>;
}

declare const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS: Readonly<LocalizationDevtoolsServiceOptions>;
declare const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS: InjectionToken<LocalizationDevtoolsServiceOptions>;

/**
 * LocalizationOverride store state
 */
interface LocalizationOverrideState {
    /** Mapping of initial localization keys to the one they are replaced with */
    localizationOverrides: Record<string, string>;
}
/**
 * Name of the LocalizationOverride Store
 */
declare const LOCALIZATION_OVERRIDE_STORE_NAME = "localizationOverride";
/**
 * LocalizationOverride Store Interface
 */
interface LocalizationOverrideStore {
    /** LocalizationOverride state */
    [LOCALIZATION_OVERRIDE_STORE_NAME]: LocalizationOverrideState;
}

/**
 * Clear all overrides and fill the store with the payload
 */
declare const setLocalizationOverride: _ngrx_store.ActionCreator<"[LocalizationOverride] set", (props: SetStateActionPayload<LocalizationOverrideState>) => SetStateActionPayload<LocalizationOverrideState> & _ngrx_store.Action<"[LocalizationOverride] set">>;

/** Token of the LocalizationOverride reducer */
declare const LOCALIZATION_OVERRIDE_REDUCER_TOKEN: InjectionToken<ActionReducer<LocalizationOverrideState, Action<string>>>;
/** Provide default reducer for LocalizationOverride store */
declare function getDefaultLocalizationOverrideReducer(): ActionReducer<LocalizationOverrideState, Action<string>>;
declare class LocalizationOverrideStoreModule {
    static forRoot<T extends LocalizationOverrideState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<LocalizationOverrideStoreModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationOverrideStoreModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<LocalizationOverrideStoreModule, never, [typeof _ngrx_store.StoreFeatureModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<LocalizationOverrideStoreModule>;
}

/**
 * LocalizationOverride Store initial value
 */
declare const localizationOverrideInitialState: LocalizationOverrideState;
/**
 *  List of basic actions for LocalizationOverride Store
 */
declare const localizationOverrideReducerFeatures: ReducerTypes<LocalizationOverrideState, ActionCreator[]>[];
/**
 * LocalizationOverride Store reducer
 */
declare const localizationOverrideReducer: _ngrx_store.ActionReducer<LocalizationOverrideState, _ngrx_store.Action<string>>;

/** Select LocalizationOverride State */
declare const selectLocalizationOverrideState: _ngrx_store.MemoizedSelector<object, LocalizationOverrideState, _ngrx_store.DefaultProjectorFn<LocalizationOverrideState>>;
/** Select all localization override map */
declare const selectLocalizationOverride: _ngrx_store.MemoizedSelector<object, Record<string, string>, (s1: LocalizationOverrideState) => Record<string, string>>;

declare const localizationOverrideStorageDeserializer: (rawObject: any) => any;
declare const localizationOverrideStorageSync: Serializer<LocalizationOverrideState>;

/**
 * This class is responsible for loading translation bundles from remote or local endpoints depending on the LocalizationConfiguration.
 * Fallback mechanism ensures that if a bundle in some language cannot be fetched remotely
 * we try to fetch the same language bundle locally (bundles stored inside the application)
 * and finally load the fallback language bundle (if all previous fetches failed)
 */
declare class TranslationsLoader implements TranslateLoader {
    private readonly localizationConfiguration;
    private readonly logger?;
    private readonly dynamicContentService?;
    /**
     * Download a language bundle file
     * @param  url Url to the bundle file
     */
    private downloadLanguageBundle$;
    /**
     * @inheritdoc
     */
    getTranslation(lang: string): Observable<any>;
    /**
     *
     *Fetches localization bundles from published folder (internal to application)
     *
     *1. try to load lang from local
     *2. if 1 fails try to load fallback lang but only if it's different from lang in 1
     * @param lang - language of the bundle
     * @param fallbackLanguage - fallback language in case bundle in language not found
     */
    getTranslationFromLocal(lang: string, fallbackLanguage: string): Observable<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<TranslationsLoader, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TranslationsLoader>;
}

/**
 * Creates a loader of translations bundles based on the configuration
 * (endPointUrl and language determine which bundle we load and where do we fetch it from)
 * @param localizationConfiguration
 * @param logger service to handle the log of warning and errors
 * @param dynamicContentService (optional)
 */
declare function createTranslateLoader(localizationConfiguration: LocalizationConfiguration, logger?: LoggerService, dynamicContentService?: DynamicContentService): TranslationsLoader;
/**
 * TranslateLoader provider, using framework's TranslationsLoader class
 */
declare const translateLoaderProvider: Readonly<FactoryProvider>;

/** Localization Configuration Token */
declare const LOCALIZATION_CONFIGURATION_TOKEN: InjectionToken<LocalizationConfiguration>;

/**
 * Service for handling the text direction based on the LocalizationConfiguration
 */
declare class TextDirectionService {
    private readonly translateService;
    private readonly configuration;
    private readonly rendererFactory;
    private readonly directionality;
    private subscription?;
    private readonly renderer;
    constructor();
    /**
     * Updates the dir attribute on body HTML tag.
     * @returns a subscription that updates the dir attribute
     */
    onLangChangeSubscription(): Subscription;
    static ɵfac: i0.ɵɵFactoryDeclaration<TextDirectionService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TextDirectionService>;
}

/**
 * @deprecated The value of Directionality is no longer readonly and can be updated, this class will be removed in v16
 */
declare class TextDirectionality extends Directionality implements OnDestroy {
    get value(): Direction;
    set value(value: Direction);
    /**
     * The current 'ltr' or 'rtl' value.
     * @override
     */
    private _value;
    constructor();
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<TextDirectionality, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TextDirectionality>;
}

export { CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN, DEFAULT_LOCALIZATION_CONFIGURATION, LOCALIZATION_CONFIGURATION_TOKEN, LOCALIZATION_OVERRIDE_REDUCER_TOKEN, LOCALIZATION_OVERRIDE_STORE_NAME, Localization, LocalizationDevtoolsConsoleService, LocalizationDevtoolsMessageService, LocalizationDevtoolsModule, LocalizationModule, LocalizationOverrideStoreModule, LocalizationService, LocalizationTranslateDirective, LocalizedCurrencyPipe, LocalizedDatePipe, LocalizedDecimalPipe, MESSAGE_FORMAT_CONFIG, O3rLocalizationTranslatePipe, OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, OtterLocalizationDevtools, TextDirectionService, TextDirectionality, TranslateMessageFormatLazyCompiler, TranslationsLoader, createLocalizationConfiguration, createTranslateLoader, getDefaultLocalizationOverrideReducer, lazyMessageDefaultConfig, localeIdNgBridge, localizationOverrideInitialState, localizationOverrideReducer, localizationOverrideReducerFeatures, localizationOverrideStorageDeserializer, localizationOverrideStorageSync, selectLocalizationOverride, selectLocalizationOverrideState, setLocalizationOverride, translateLoaderProvider };
export type { AvailableLocalizationMessageContents, DisplayLocalizationKeysContentMessage, GetTranslationValuesContentMessage, IsTranslationDeactivationEnabledContentMessage, JSONLocalization, LanguagesContentMessage, LazyMessageFormatConfig, LocalizationConfiguration, LocalizationContextualizationDevtools, LocalizationDevtoolsServiceOptions, LocalizationMessageDataTypes, LocalizationMetadata, LocalizationOverrideState, LocalizationOverrideStore, LocalizationsContentMessage, ReloadLocalizationKeysContentMessage, SwitchLanguageContentMessage, Translatable, UpdateLocalizationContentMessage };
//# sourceMappingURL=o3r-localization.d.ts.map
