import { HttpOptions, HttpHeadersOption, HttpConfig, HttpRequestStatus } from '@ogs-gmbh/ngx-http';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpClient } from '@angular/common/http';
import { Observable, Subject } from 'rxjs';
import * as i0 from '@angular/core';
import { PipeTransform, InjectionToken, ValueProvider, FactoryProvider, EnvironmentProviders, ClassProvider, ModuleWithProviders } from '@angular/core';
import * as i1 from '@angular/common';

/**
 * Strategies for collecting translations in the application, so that they don't have to be fetched multiple times.
 * @remarks Each option describes which {@link LocaleConfig} should be collected.
 * @deprecated Use {@link CollectingStrategy} instead. It'll be removed in upcoming releases.
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare enum CollectingStrategies {
    /**
     * Collect every translation, regardless of the current {@link LocaleConfig}
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    ALL = "all",
    /**
     * Collect only translations of the current locale
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    CURRENT = "current"
}
/**
 * Strategies for collecting translations in the application, so that they don't have to be fetched multiple times.
 * @remarks Each option describes which {@link LocaleConfig} should be collected.
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare enum CollectingStrategy {
    /**
     * Collect every translation, regardless of the current locale
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    ALL = "all",
    /**
     * Collect only translations of the current locale
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    CURRENT = "current"
}

/**
 * Strategies for preloading translations
 * @remarks Each option describes when the preload should happen.
 * @category NG config
 * @deprecated Use {@link PreloadingStrategy} instead. It'll be removed in upcoming releases.
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare enum PreloadingStrategies {
    /**
     * Preload translations during application initialization
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    INITIALIZATION = "initialization",
    /**
     * Preload translations during application runtime
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    RUNTIME = "runtime"
}
/**
 * Strategies for preloading translations
 * @remarks Each option describes when the preload should happen.
 * @category NG config
 *
 * @since 2.0.0
 * @author Simon Kovtyk
 */
declare enum PreloadingStrategy {
    /**
     * Preload translations during application initialization
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    INITIALIZATION = "initialization",
    /**
     * Preload translations during application runtime
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    RUNTIME = "runtime"
}

/**
 * Snapshot of the {@link ScopeNotDefinedError} properties for serialization purposes
 * @category Types
 *
 * @since 2.0.0
 * @author Simon Kovtyk
 */
type ScopeNotDefinedStateSnapshot = {
    /**
     * Indicates whether the default scope is not defined
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    isDefaultScope: boolean;
    /**
     * Name of the scope that is not defined
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    scope?: string;
    /**
     * {@link LocaleConfig} of the scope that is not defined in the translations
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    locale?: LocaleConfig;
};
/**
 * Error thrown when a scope is not defined
 * @category Errors
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class ScopeNotDefinedError extends Error {
    readonly name: string;
    constructor(snapshot: ScopeNotDefinedStateSnapshot);
}

/**
 * Snapshot of the {@link LocaleNotDefinedError} properties for serialization purposes.
 * @category Types
 *
 * @since 2.0.0
 * @author Simon Kovtyk
 */
type LocaleNotDefinedStateSnapshot = {
    /**
     * {@link LocaleConfig}, that is not defined
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    locale: LocaleConfig;
};
/**
 * Error thrown when a requested {@link LocaleConfig} is not defined
 * @category Errors
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class LocaleNotDefinedError extends Error {
    readonly name: string;
    constructor(locale: LocaleConfig);
}

/**
 * Snapshot of the translation that is not defined
 * @category Types
 *
 * @since 2.0.0
 * @author Simon Kovtyk
 */
type TranslationNotDefinedStateSnapshot = {
    /**
     * Token for which the translation is not defined in the translations
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    token: string;
    /**
     * Value of the translation that is not defined in the translations
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    value?: string;
    /**
     * Scope of the translation that is not defined in the translations
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    scope?: ReadonlyArray<string | null> | string | null;
    /**
     * {@link LocaleConfig} of the translation that is not defined in the translations
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    locale?: LocaleConfig;
};
/**
 * Error thrown when a translation for a given token is not defined
 * @category Errors
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class TranslationNotDefinedError extends Error {
    name: string;
    constructor(snapshot: TranslationNotDefinedStateSnapshot);
}

/**
 * Snapshot of the {@link SourceLocaleNotDefinedError} properties for serialization purposes
 * @category Types
 *
 * @since 2.0.0
 * @author Simon Kovtyk
 */
type SourceLocaleNotDefinedStateSnapshot = {
    /**
     * {@link LocaleConfig} of the source locale that is not defined in the translation configuration
     *
     * @since 2.0.0
     * @author Simon Kovtyk
     */
    locale?: LocaleConfig;
};
/**
 * Error thrown when a {@link LocaleConfig} as source locale is not defined
 * @category Errors
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class SourceLocaleNotDefinedError extends Error {
    readonly name: string;
    constructor(snapshot?: SourceLocaleNotDefinedStateSnapshot);
}

/**
 * Interceptor to add the current locale language header to HTTP requests.
 * @remarks Adds a `language` header with `value` of the current {@link LocaleConfig} to each outgoing HTTP request.
 * @category NG interceptors
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class TranslationInterceptor implements HttpInterceptor {
    private readonly _translationStoreService;
    intercept(httpRequest: Readonly<HttpRequest<unknown>>, httpHandler: Readonly<HttpHandler>): Observable<HttpEvent<unknown>>;
    static ɵfac: i0.ɵɵFactoryDeclaration<TranslationInterceptor, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TranslationInterceptor>;
}

/**
 * Core pipe to translate content inside an Angular Template
 * @category NG pipes
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class TranslationPipe implements PipeTransform {
    private readonly _translationSnapshot$;
    private readonly _destroyRef;
    private _lastValue;
    private readonly _translationService;
    private readonly _changeDetectorRef;
    private readonly _translationScopeToken;
    private readonly _translationConfig;
    constructor();
    /**
     * Transforms a token into its translated value
     *
     * @param value - The possible fallback value, if no translation was found. Check the `fallback` parameter
     * @param token - The token to be translated
     * @param scope - Optional scope(s) to narrow down the translation search
     * @param shouldFallback - Optional flag to determine if it should fallback to the source locale when no translation was found. If not provided, {@link TranslationNotDefinedError} will be thrown instead.
     * @returns The translated token or the fallback value
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    transform(value: string, token: string, scope?: Readonly<Array<string | null> | string | null>, shouldFallback?: boolean): string;
    private _resolveScope;
    private _updateLastValue;
    static ɵfac: i0.ɵɵFactoryDeclaration<TranslationPipe, never>;
    static ɵpipe: i0.ɵɵPipeDeclaration<TranslationPipe, "translate", true>;
}

/**
 * Core service as abstraction layer for HTTP handling
 * @category NG services
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class TranslationHttpService {
    private readonly _translationHttpConfig;
    private readonly _translationConfig;
    private readonly _translationHttpOptions;
    /**
     * Gets translations with the provided `HttpClient` reference.
     *
     * @param httpClientRef - The `HttpClient` reference to use for the request.
     * @param scopeName - The scope name(s) for the translations.
     * @param httpOptions - Optional `HttpOptions` to customize the request.
     * @returns An `Observable` of the requested translations.
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getWithRef$<T>(httpClientRef: Readonly<HttpClient>, scopeName: ReadonlyArray<string | null> | string | null, httpOptions?: HttpOptions<never, HttpHeadersOption, never>): Observable<T>;
    static ɵfac: i0.ɵɵFactoryDeclaration<TranslationHttpService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TranslationHttpService>;
}

/**
 * Scoped file, that represents a translation set for a specific scope
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type ScopedFile = Readonly<Record<string, string>>;
/**
 * Multi Scoped file, that represents multiple translation sets for a specific scopes
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type MultiScopedFile = Readonly<Record<string, ScopedFile>>;
/**
 * Parsed multi scoped file
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type ParsedMultiScopedFile = {
    /**
     * Scope name
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly scopeName: string | null;
    /**
     * Scoped file content
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly file: ScopedFile;
};
/**
 * Parsed multi scoped files
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type ParsedMultiScopedFiles = ParsedMultiScopedFile[];
/**
 * Loaded scope
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type LoadedScope = {
    readonly scope: string | null;
    file: ScopedFile;
};
/**
 * Loaded scope array
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type LoadedScopes = LoadedScope[];
/**
 * Locale loaded scopes
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type LocaleLoadedScopes = Record<string, LoadedScopes>;
/**
 * Notifier scopes (storage)
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type NotifierScope = {
    /**
     * Scope name
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly scope: string | null;
    /**
     * Subject notifiers for the scope
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    notifiers: Array<Subject<ScopedFile>> | null;
};
/**
 * Notifier scopes array
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type NotifierScopes = NotifierScope[];
/**
 * Multi scope based notifier scope
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type MultiScopeBasedNotifierScope = ReadonlyArray<Subject<ScopedFile>> | null;
/**
 * Mutli scope based notifier scopes
 * @category Types
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type MultiScopeBasedNotifierScopes = Record<string, MultiScopeBasedNotifierScope> & {
    /**
     * Notifiers, that provide a set of scoped files
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    notifiers?: ReadonlyArray<Subject<ScopedFile>> | null | undefined;
};

/**
 * Description of a locale, your app should support
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type LocaleConfig = {
    /**
     * The locale value, e.g. "en", "de" or "fr"
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly value: string;
    /**
     * The locale name, e.g. "English", "Deutsch" or "Français"
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly name?: string;
    /**
     * Marks the locale as source locale. A source locale is the locacle, used in your source code.
     * @remarks Only one locale should be marked as source locale
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly isSource?: boolean;
};
/**
 * Specific translation configuration
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type SpecificTranslateConfig = {
    /**
     * The locales in Form of {@link LocaleConfig}, your app should support
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly locales: LocaleConfig[];
    /**
     * The timeout for HTTP requests in millisecond
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly timeout?: number | undefined;
    /**
     * Overrides the global scope, which should be used as default scope when no scope is provided. Default is `null`.
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly defaultScope?: string | undefined;
    /**
     * Fallback to source locale translations, when a translation is missing in the current locale. Default is `false`.
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly fallbackToSourceLocale?: boolean | undefined;
    /**
     * Configuration for storing locale and translations in the browser storage
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly storageConfig?: {
        /**
         * The {@link CollectingStrategy} to use for collecting translations to store in the browser storage
         * @readonly
         *
         * @since 1.0.0
         * @author Simon Kovtyk
         */
        readonly collectingStrategy?: CollectingStrategy | undefined;
        /**
         * Configuration for storing the current locale in the browser storage
         * @readonly
         *
         * @since 1.0.0
         * @author Simon Kovtyk
         */
        readonly locale?: {
            /**
             * The key to use for storing the current locale
             * @readonly
             *
             * @since 1.0.0
             * @author Simon Kovtyk
             */
            readonly key?: string | undefined;
            /**
             * The storage type to use for storing the current locale (e.g. `localeStorage` or `sessionStorage`)
             * @readonly
             *
             * @since 1.0.0
             * @author Simon Kovtyk
             */
            readonly type?: Storage | undefined;
            /**
             * Wether to store the current locale in the browser storage or not. Default is `false`.
             * @readonly
             *
             * @since 1.0.0
             * @author Simon Kovtyk
             */
            readonly store?: boolean | undefined;
        } | undefined;
        /**
         * Configuration for storing the translations in the browser storage
         * @readonly
         *
         * @since 1.0.0
         * @author Simon Kovtyk
         */
        readonly translations?: {
            /**
             * The key to use for storing the translations
             * @readonly
             *
             * @since 1.0.0
             * @author Simon Kovtyk
             */
            readonly key?: string | undefined;
            /**
             * The storage type to use for storing the translations (e.g. `localeStorage` or `sessionStorage`)
             * @readonly
             *
             * @since 1.0.0
             * @author Simon Kovtyk
             */
            readonly type?: Storage | undefined;
            /**
             * Wether to store the translations in the browser storage or not. Default is `false`.
             * @readonly
             *
             * @since 1.0.0
             * @author Simon Kovtyk
             */
            readonly store?: boolean | undefined;
        } | undefined;
    } | undefined;
};
/**
 * Configuration
 * @readonly
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type TranslateConfig = {
    /**
     * Configuration for HTTP requests
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly http: {
        /**
         * The HTTP configuration
         * @readonly
         *
         * @since 1.0.0
         * @author Simon Kovtyk
         */
        config: HttpConfig;
        /**
         * Additional HTTP options (e.g. headers), which will be merged with other HTTP options
         * @readonly
         *
         * @since 1.0.0
         * @author Simon Kovtyk
         */
        options?: HttpOptions<never, HttpHeadersOption, never>;
    };
    /**
     * Translation-related configuration
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly translate: SpecificTranslateConfig;
};

/**
 * Core service as abstraction layer for translaton storage and state management
 * @category NG services
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class TranslationStoreService {
    private _loadedScopes;
    private _notifierScopes;
    private readonly _translationConfig;
    private readonly _locale;
    private readonly _locale$;
    private readonly _storageAttributes;
    constructor();
    /**
     * Get the current {@link LocaleConfig}
     *
     * @returns The current {@link LocaleConfig}
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getCurrentLocale(): LocaleConfig;
    /**
     * Get an `Observable` of the current {@link LocaleConfig}
     *
     * @returns An `Observable` of the current {@link LocaleConfig}
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getLocale$(): Observable<LocaleConfig>;
    /**
     * Set the current {@link LocaleConfig}
     *
     * @param locale - The locale to set
     * @throws {@link LocaleNotDefinedError} if the provided locale is not defined
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    setLocale(locale: LocaleConfig): void;
    /**
     * Get all defined locales
     *
     * @returns An `Array` of all defined locales
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getLocales(): LocaleConfig[];
    /**
     * Set a scoped file
     *
     * @param scopeName - The name of the scope
     * @param file - The scoped file to set
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    setScopedFile(scopeName: string | null, file: ScopedFile): void;
    /**
     * Get a scoped file
     *
     * @param scopeName - The name of the scope, the {@link ScopedFile} belongs to
     * @returns if found {@link ScopedFile}, otherwise `undefined`
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getScopedFile(scopeName: string | null): ScopedFile | undefined;
    /**
     * Check if a scoped file exists
     *
     * @param scopeName - The name of the scope, the {@link ScopedFile} belongs to
     * @returns `true` if found, otherwise `false`
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    hasScopedFile(scopeName: string | null): boolean;
    /**
     * Check if scoped files exist
     *
     * @param scopeNames - An `Array` of scope names, the ScopedFiles belong to
     * @returns `true` if all could be found, otherwise `false`
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    hasScopedFiles(scopeNames: ReadonlyArray<string | null>): boolean;
    /**
     * Check if a scope exists
     *
     * @param scopeName - The name of the scope
     * @returns `true` if found, otherwise `false`
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    isScopeExisting(scopeName: string | null): boolean;
    /**
     * Check which scopes exist
     *
     * @param scopeNames - An `Array` of scope names, that should be checked
     * @returns An `Array` of existing scope names
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getExistingScopes(scopeNames: ReadonlyArray<string | null>): Array<string | null>;
    /**
     * Check if scope name is in notifier scopes
     *
     * @param scopeName - The name of the scope
     * @returns `true` if found, otherwise `false`
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    isScopeNameInNotifierScopes(scopeName: string | null): boolean;
    /**
     * Check if scope names are in notifier scopes
     *
     * @param scopeNames - An `Array` of scope names, that should be checked
     * @returns `true` if all are found, otherwise `false`
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    areScopeNamesInNotifierScopes(scopeNames: ReadonlyArray<string | null>): boolean;
    /**
     * Check which scope names are in notifier scopes
     *
     * @param scopeNames - An `Array` of scope names, that should be checked
     * @returns An `Array` of existing scope names
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getExistingNotifierScopes(scopeNames: ReadonlyArray<string | null>): Array<string | null>;
    /**
     * Get {@link NotifierScope} by scope name
     *
     * @param scopeName - The name of the scope
     * @returns if found {@link NotifierScope}, otherwise `undefined`
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getNotiferScope(scopeName: string | null): NotifierScope | undefined;
    /**
     * Get {@link NotifierScopes} by scope names
     *
     * @param scopeNames - An `Array` of scope names
     * @returns if found {@link NotifierScopes}, otherwise `undefined`
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getNotifierScopes(scopeNames: ReadonlyArray<string | null>): NotifierScopes | undefined;
    /**
     * Add a notifier scope
     *
     * @param notifierScope - The notifier scope to add
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    addNotifierScope(notifierScope: Readonly<NotifierScope>): void;
    /**
     * Add multiple notifier scopes
     *
     * @param notifierScopes - The notifier scopes to add
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    addNotifierScopes(notifierScopes: NotifierScopes): void;
    /**
     * Add a notifier to a notifier scope
     *
     * @param scopeName - The name of the scope
     * @param notifier - The notifier to add
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    addNotifierToNotifierScope(scopeName: string | null, notifier: Subject<ScopedFile>): void;
    /**
     * Remove a notifier scope
     *
     * @param scopeName - The name of the scope
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    removeNotifierScope(scopeName: string | null): void;
    /**
     * Get the source {@link LocaleConfig}
     *
     * @returns if defined {@link LocaleConfig}, otherwise `undefined`
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    getSourceLocale(): LocaleConfig | undefined;
    private _checkIfLocaleExists;
    private _checkIfLocaleIsSourceLocale;
    private _setStorageValue;
    private _getStorageValue;
    private _getScopeByScopeName;
    private _getScopeByScopeNames;
    private _appendScope;
    static ɵfac: i0.ɵɵFactoryDeclaration<TranslationStoreService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TranslationStoreService>;
}

/**
 * Core service for translation handling
 * @category NG services
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class TranslationService {
    private readonly _httpClient;
    private readonly _translationConfig;
    private readonly _translationStoreService;
    private readonly _translationHttpService;
    private readonly _isHttpLoading;
    private readonly _isHttpLoading$;
    /**
     * An `Observable`, that will emit only when a HTTP-Request is made
     * @returns An `Observable` with the `HttpRequestStatus` if HTTP is currently under use. Otherwise an `Observable` with null inside.
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    isHttpLoading$(): Observable<HttpRequestStatus | null>;
    /**
     * Preload multiple translations with references
     * @param httpClient - The `HttpClient`, that'll be used
     * @param translationStoreService - The {@link TranslationStoreService}, that'll be used
     * @param translationHttpService - The {@link TranslationHttpService}, that'll be used
     * @param _locale - The {@link LocaleConfig}, that should be preloaded
     * @param scopeName - The scope name for the lookup of the translation
     * @param httpOptions - Additional HTTP Options for the request
     * @returns An `Observable` to handle the status
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    _preloadWithRef$(httpClient: Readonly<HttpClient>, translationStoreService: Readonly<TranslationStoreService>, translationHttpService: Readonly<TranslationHttpService>, _locale: LocaleConfig, scopeName: ReadonlyArray<string | null> | string | null, httpOptions?: HttpOptions<never, HttpHeadersOption, never>): Observable<void>;
    /**
     * Translates a token by the locale reactive
     * @param token - The token to resolve the translation
     * @param value - The default value of the translation
     * @param scopeName - A scope name to resolve the lookup
     * @param httpOptions - Additional HTTP Options for the request
     * @returns An `Observable` with the current translation as `string`
     *
     * @remarks
     * If the {@link LocaleConfig}, a new translation based on the new locale will be emitted.
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    translateTokenByLocale$(token: string, value: string, scopeName?: ReadonlyArray<string | null> | string | null, httpOptions?: HttpOptions<never, HttpHeadersOption, never>): Observable<string>;
    /**
     * Translates a token by the current locale
     * @param token - The token to resolve the translation
     * @param value - The default value of the translation
     * @param scopeName - A scope name to resolve the lookup
     * @param httpOptions - Additional HTTP Options for the request
     * @returns An `Observable` with the current translation as `string`
     *
     * @remarks
     * If the {@link LocaleConfig}, no new translation will be emitted.
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    translateTokenByCurrentLocale$(token: string, value: string, scopeName?: ReadonlyArray<string | null> | string | null, httpOptions?: HttpOptions<never, HttpHeadersOption, never>): Observable<string>;
    /**
     * Preload translations by locale
     * @param httpClient - The `HttpClient`, that'll be used
     * @param translationStoreService - The {@link TranslationStoreService}, that'll be used
     * @param translationHttpService - The {@link TranslationHttpService}, that'll be used
     * @param scopeName - The scope name for the lookup of the translation
     * @param httpOptions - Additional HTTP Options for the request
     * @returns An `Observable` to handle the status
     *
     * @remarks
     * If the {@link LocaleConfig} changes, the scope will be preloaded again.
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    preloadByLocale(httpClient: Readonly<HttpClient>, translationStoreService: Readonly<TranslationStoreService>, translationHttpService: Readonly<TranslationHttpService>, scopeName: string | null | ReadonlyArray<string | null>, httpOptions?: HttpOptions<never, HttpHeadersOption, never>): Observable<void>;
    /**
     * Preload translations by locale
     * @param httpClient - The `HttpClient`, that'll be used
     * @param translationStoreService - The {@link TranslationStoreService}, that'll be used
     * @param translationHttpService - The {@link TranslationHttpService}, that'll be used
     * @param scopeName - The scope name for the lookup of the translation
     * @param httpOptions - Additional HTTP Options for the request
     * @returns An `Observable` to handle the status
     *
     * @remarks
     * If the {@link LocaleConfig} changes, no new preloading will be made.
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    preloadByCurrentLocale(httpClient: Readonly<HttpClient>, translationStoreService: Readonly<TranslationStoreService>, translationHttpService: Readonly<TranslationHttpService>, scopeName: string | null | ReadonlyArray<string | null>, httpOptions?: HttpOptions<never, HttpHeadersOption, never>): Observable<void>;
    private _resolveScope;
    private _translateBySourceLocale;
    private _translateByStore;
    private _getScopedFileByNotifier;
    private _getScopedFileByAddingNotifier;
    private _getScopedFileByHttpWithRef$;
    private _translateWithRef$;
    static ɵfac: i0.ɵɵFactoryDeclaration<TranslationService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TranslationService>;
}

/**
 * Injection token for {@link SpecificTranslateConfig}
 * @readonly
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare const TRANSLATION_CONFIG_TOKEN: InjectionToken<SpecificTranslateConfig>;

/**
 * Injection token that holds a translation scope
 * @readonly
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare const TRANSLATION_SCOPE_TOKEN: InjectionToken<string>;

/**
 * Injection token for translation preloading
 * @readonly
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare const TRANSLATION_PRELOAD_TOKEN: InjectionToken<string>;

/**
 * Represents a localizable Translation with all required properties
 * @category Types
 *
 * @since 1.4.0
 * @author Ian Wenneckers
 */
type TranslationSnapshot = {
    /**
     * Value, that gets piped
     *
     * @remarks Will be used as possible fallback value.
     *
     * @since 1.4.0
     * @author Ian Wenneckers
     */
    value: string;
    /**
     * Token, that was used to translate the value
     *
     * @since 1.4.0
     * @author Ian Wenneckers
     */
    token: string;
    /**
     * Scope, that was searched for `token`
     *
     * @since 1.4.0
     * @author Ian Wenneckers
     */
    scope?: Readonly<string | Array<string | null> | null> | undefined;
    /**
     * Flag, that enables fallbacks to `value`
     *
     * @since 1.4.0
     * @author Ian Wenneckers
     */
    shouldFallback?: boolean | undefined;
};

/**
 * Provide a translation scope
 *
 * @param scope - The translation scope to provide
 * @returns A `ValueProvider` for the translation scope
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare const provideTranslationScope: (scope: string) => ValueProvider;

/**
 * Base provider type for translation preloading
 * @readonly
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type TranslationBaseProvider = {
    /**
     * {@link PreloadingStrategy} to use
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly preloadingStrategy: PreloadingStrategy;
    /**
     * Additional HTTP options for translation preloading requests (e.g. headers)
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly httpOptions?: HttpOptions<never, HttpHeadersOption, never> | undefined;
};
/**
 * Provider type for translation preloading with HTTP scopes
 * @readonly
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
type TranslationPreloadProvider = TranslationBaseProvider & {
    /**
     * Translation scopes to preload
     * @readonly
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    readonly scopes: Array<string | null> | string | null;
};

/**
 * Provide translation preloading based on the specified {@link PreloadingStrategy}
 *
 * @param preloadProvider - The {@link TranslationPreloadProvider} configuration
 * @returns A `FactoryProvider` for translation preloading
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare const provideTranslationPreload: (preloadProvider: Readonly<TranslationPreloadProvider>) => FactoryProvider | EnvironmentProviders;
/**
 * Provide reactive translation preloading based on the specified {@link PreloadingStrategy}
 *
 * @param preloadProvider - The {@link TranslationPreloadProvider} configuration
 * @returns A `FactoryProvider` for reactive translation preloading
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare const provideTranslationPreloadReactive: (preloadProvider: Readonly<TranslationPreloadProvider>) => FactoryProvider | EnvironmentProviders;

/**
 * Provides a translation configuration
 *
 * @param translationConfig - The {@link SpecificTranslateConfig} configuration to provide
 * @returns A `ValueProvider` for the translation configuration
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare const provideTranslationConfig: (translationConfig: Readonly<SpecificTranslateConfig>) => ValueProvider;

/**
 * Provide the translation HTTP interceptor
 *
 * @returns A `ClassProvider` for the `TranslationInterceptor`
 * @category NG config
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare const provideTranslationInterceptor: () => ClassProvider;

/**
 * Translation Module, that bundles all translation related functionality
 * @category NG modules
 *
 * @since 1.0.0
 * @author Simon Kovtyk
 */
declare class TranslationModule {
    /**
     * Configure the Translation Module with the specified configuration
     * @param translateConfig - The {@link TranslateConfig}
     * @returns A `ModuleWithProviders` for the {@link TranslationModule} with the provided configuration
     *
     * @since 1.0.0
     * @author Simon Kovtyk
     */
    static forRoot(translateConfig: Readonly<TranslateConfig>): ModuleWithProviders<TranslationModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<TranslationModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<TranslationModule, never, [typeof i1.CommonModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<TranslationModule>;
}

export { CollectingStrategies, CollectingStrategy, LocaleNotDefinedError, PreloadingStrategies, PreloadingStrategy, ScopeNotDefinedError, SourceLocaleNotDefinedError, TRANSLATION_CONFIG_TOKEN, TRANSLATION_PRELOAD_TOKEN, TRANSLATION_SCOPE_TOKEN, TranslationHttpService, TranslationInterceptor, TranslationModule, TranslationNotDefinedError, TranslationPipe, TranslationService, TranslationStoreService, provideTranslationConfig, provideTranslationInterceptor, provideTranslationPreload, provideTranslationPreloadReactive, provideTranslationScope };
export type { LoadedScope, LoadedScopes, LocaleConfig, LocaleLoadedScopes, LocaleNotDefinedStateSnapshot, MultiScopeBasedNotifierScope, MultiScopeBasedNotifierScopes, MultiScopedFile, NotifierScope, NotifierScopes, ParsedMultiScopedFile, ParsedMultiScopedFiles, ScopeNotDefinedStateSnapshot, ScopedFile, SourceLocaleNotDefinedStateSnapshot, SpecificTranslateConfig, TranslateConfig, TranslationBaseProvider, TranslationNotDefinedStateSnapshot, TranslationPreloadProvider, TranslationSnapshot };
