{"version":3,"file":"ngx-transloco-markup.mjs","sources":["../../../lib/src/utils/has-property.ts","../../../lib/src/models/external-link.model.ts","../../../lib/src/transpilers/block-transpiler.ts","../../../lib/src/translation-markup-renderer-factory.ts","../../../lib/src/transpilers/bold-text-transpiler.ts","../../../lib/src/transpilers/contextual-link-block-transpiler.ts","../../../lib/src/transpilers/substitution-transpiler.ts","../../../lib/src/transpilers/contextual-link-substitution-transpiler.ts","../../../lib/src/transpilers/italic-text-transpiler.ts","../../../lib/src/utils/provider-binding.ts","../../../lib/src/link-renderer.model.ts","../../../lib/src/utils/array.ts","../../../lib/src/transpilers/link-transpiler.ts","../../../lib/src/transpilers/string-interpolation-transpiler.ts","../../../lib/src/transpilers/contextual-link-transpiler-factory.ts","../../../lib/src/default-link-renderers.ts","../../../lib/src/translation-markup-transpiler.token.ts","../../../lib/src/default-transloco-markup-transpilers.ts","../../../lib/src/inherit-transpilers.ts","../../../lib/src/string-interpolation-transpiler.token.ts","../../../lib/src/utils/iterable.ts","../../../lib/src/translation-markup-transpiler.model.ts","../../../lib/src/utils/predicates.ts","../../../lib/src/create-translation-markup-renderer.ts","../../../lib/src/utils/observe-property.ts","../../../lib/src/transpilers/string-literal-transpiler.ts","../../../lib/src/transloco-markup.component.ts","../../../lib/src/transloco-markup.module.ts","../../../lib/ngx-transloco-markup.ts"],"sourcesContent":["export function hasProperty<S, T extends string>(subject: S, key: T): subject is S & { [k in T]: unknown } {\n    return typeof subject === 'object' && subject !== null && key in subject;\n}\n","import { hasProperty } from '../utils/has-property';\n\n/**\n * Model used to describe a link that references a resource outside the application.\n */\nexport interface ExternalLink {\n\n    /** Url of the resource. */\n    url: string;\n\n    /** Browser target in wich the link should be opened. */\n    target?: string;\n}\n\n/**\n * Checks whether the specified value conforms to the `ExternalLink` interface.\n *\n * @param   value Value that is to be checked.\n * @returns       `true` if the specified value conforms to the `ExternalLink` interface, `false` if not.\n */\nexport function isExternalLinkObject(value: unknown): value is ExternalLink {\n    return (\n        typeof value === 'object' &&\n        value !== null &&\n        hasProperty(value, 'url') && typeof value.url === 'string' &&\n        (!hasProperty(value, 'target') || value.target === undefined || value.target === null || typeof value.target === 'string')\n    );\n}\n","import { TranslationMarkupRenderer } from '../translation-markup-renderer.model';\nimport {\n  TokenizeResult, TranslationMarkupTranspiler, TranslationMarkupTranspilerContext, TranspileResult,\n} from '../translation-markup-transpiler.model';\n\n/**\n * Base class for transpilers that can transpile contents of a block that is bounded by specific start and end tokens.\n */\nexport abstract class BlockTranspiler implements TranslationMarkupTranspiler {\n    /**\n     * Creates a new `BlockTranspiler` for the specified boundary tokens.\n     */\n    constructor(\n        /** String that defines the start token for the block. */\n        private readonly blockStartToken: string,\n\n        /** String that defines the end token for the block. */\n        private readonly blockEndToken: string,\n    ) {}\n\n    /** @inheritdoc */\n    public tokenize(translation: string, offset: number): TokenizeResult | undefined {\n        function recognize(token: string): TokenizeResult | undefined {\n            return (\n                translation.substring(offset, offset + token.length) === token\n                ? { nextOffset: offset + token.length, token: new BlockBoundary(token) }\n                : undefined\n            );\n        }\n\n        return recognize(this.blockStartToken) ?? recognize(this.blockEndToken);\n    }\n\n    /** @inheritdoc */\n    public transpile(start: number, context: TranslationMarkupTranspilerContext): TranspileResult | undefined {\n        const nextToken = context.tokens[start];\n\n        if (!this.isStartTag(nextToken)) {\n            return undefined;\n        }\n\n        const { nextOffset, renderers } = context.transpileUntil(start + 1, (token) => this.isEndTag(token));\n\n        return {\n            nextOffset: Math.min(nextOffset + 1, context.tokens.length),\n            renderer: this.createRenderer(renderers),\n        };\n    }\n\n    /**\n     * Creates the block rendering function for the given transpiled contents of the block.\n     *\n     * @param   childRenderers Contents of the block that was transpiled to a sequence of child renderers.\n     * @returns                A renderer that combines the given child renderers, representing the contents of the block, into a single\n     *                         rendering function.\n     */\n    protected abstract createRenderer(childRenderers: TranslationMarkupRenderer[]): TranslationMarkupRenderer;\n\n    /**\n     * Checks whether the specified token represents the start boundary of a block that can be transpiled.\n     *\n     * @param   token Token which is to be checked.\n     * @returns       `true` if the token is a start boundary of the block.\n     */\n    private isStartTag(token: unknown): token is BlockBoundary {\n        return token instanceof BlockBoundary && token.token === this.blockStartToken;\n    }\n\n    /**\n     * Checks whether the specified token represents the end boundary of a block that can be transpiled.\n     *\n     * @param   token Token which is to be checked.\n     * @returns       `true` if the token is a end boundary of the block.\n     */\n    private isEndTag(token: unknown): token is BlockBoundary {\n        return token instanceof BlockBoundary && token.token === this.blockEndToken;\n    }\n}\n\n/**\n * Class used for representing the boundary tokens of a block.\n */\nexport class BlockBoundary {\n    constructor(public readonly token: string) {}\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { HashMap } from '@jsverse/transloco';\n\nimport { TranslationMarkupRenderer } from './translation-markup-renderer.model';\n\n/**\n * Factory used for creating different types of `TranslationMarkupRenderer` instances.\n */\n@Injectable({ providedIn: 'root' })\nexport class TranslationMarkupRendererFactory {\n    /** Document instance used by the renderers to create the actual DOM nodes. */\n    private readonly document: Document;\n\n    /**\n     * Creates a new `TranslationMarkupRendererFactory` instance.\n     *\n     * @param document Document instance used by the renderers to create the actual DOM nodes.\n     */\n    constructor(\n        @Inject(DOCUMENT) document: any, // eslint-disable-line @typescript-eslint/no-explicit-any\n    ) {\n        this.document = document; // eslint-disable-line @typescript-eslint/no-unsafe-assignment\n    }\n\n    /**\n     * Creates a markup renderer to render text. This can be either a static text or on that dynamically resolved based on the translation\n     * parameters.\n     *\n     * @param   text Text that is to be rendered or a function that returns the text to be rendered based on the translation parameters.\n     * @returns      A `TranslationMarkupRenderer` that renders the specified text.\n     */\n    public createTextRenderer(text: string | ((translationParameters: HashMap) => string)): TranslationMarkupRenderer {\n        const document = this.document;\n\n        return function renderText(translationParameters: HashMap): Node {\n            return document.createTextNode(typeof text === 'string' ? text : text(translationParameters));\n        };\n    }\n\n    /**\n     * Creates a markup renderer that renders an HTML element with the specified tag and (optionally) attaches the content rendered by the\n     * given child markup renderers.\n     *\n     * @param   elementTag     Tag of the HTML element that is be created by the renderer.\n     * @param   childRenderers An optional sequence of child markup renderers, which will be used to render the contents of the element.\n     * @returns                A `TranslationMarkupRenderer` that renders the specified HTML element and optional content generated by the\n     *                         given sequence of child renderers.\n     */\n    public createElementRenderer<K extends keyof HTMLElementTagNameMap>(\n        elementTag: K,\n        childRenderers?: TranslationMarkupRenderer[],\n    ): TranslationMarkupRenderer<HTMLElementTagNameMap[K]>;\n    public createElementRenderer(elementTag: string, childRenderers?: TranslationMarkupRenderer[]): TranslationMarkupRenderer<HTMLElement>;\n    public createElementRenderer(elementTag: string, childRenderers?: TranslationMarkupRenderer[]): TranslationMarkupRenderer<HTMLElement> {\n        const document = this.document;\n\n        return function renderElement(translationParameters: HashMap): HTMLElement {\n            const element = document.createElement(elementTag);\n\n            for (const renderChild of childRenderers ?? []) {\n                element.appendChild(renderChild(translationParameters));\n            }\n\n            return element;\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { TranslationMarkupRendererFactory } from '../translation-markup-renderer-factory';\nimport { TranslationMarkupRenderer } from '../translation-markup-renderer.model';\n\nimport { BlockTranspiler } from './block-transpiler';\n\n/**\n * Transpiler that parses bold tags (`[b]...[/b]`) and creates a renderer that wraps the content in an HTML bold element (`<b>...</b>`).\n */\n@Injectable()\nexport class BoldTextTranspiler extends BlockTranspiler {\n    /**\n     * Creates a `BoldTextTranspiler` instance that uses the specified renderer factory.\n     */\n    constructor(\n        /** Renderer factory which will be used for creating the HTML bold element renderer. */\n        private readonly rendererFactory: TranslationMarkupRendererFactory,\n    ) {\n        super('[b]', '[/b]');\n    }\n\n    /** @inheritdoc */\n    protected createRenderer(childRenderers: TranslationMarkupRenderer[]): TranslationMarkupRenderer {\n        return this.rendererFactory.createElementRenderer('b', childRenderers);\n    }\n}\n","import { HashMap } from '@jsverse/transloco';\n\nimport { LinkRenderer } from '../link-renderer.model';\nimport { ResolveLinkSpecification } from '../models/resolve-link-specification.model';\nimport { TranslationMarkupRendererFactory } from '../translation-markup-renderer-factory';\nimport { TranslationMarkupRenderer } from '../translation-markup-renderer.model';\n\nimport { BlockTranspiler } from './block-transpiler';\n\n/**\n * Transpiler for named (special start and end token) link blocks. This can be used instead of the more generic `LinkTranspiler` to create\n * context specific link block transpilers.\n */\nexport class ContextualLinkBlockTranspiler extends BlockTranspiler {\n    /**\n     * Creates a new `NamedLinkBlockTranspiler` for the specified start and end token.\n     */\n    constructor(\n        /** Token that defined the start of the link. */\n        linkStartToken: string,\n\n        /** Token that defined the end of the link. */\n        linkEndToken: string,\n\n        /** Object that specifies how to resolve the link. */\n        private readonly resolveLinkSpecification: ResolveLinkSpecification,\n\n        /** Renderer factory used to create the renderer for the HTML anchor element that will be substituted in place of the token. */\n        private readonly rendererFactory: TranslationMarkupRendererFactory,\n\n        /** Set of link renderers that are used to apply the link model from the translation parameter to the anchor element. */\n        private readonly linkRenderers: LinkRenderer<unknown>[],\n    ) {\n        super(linkStartToken, linkEndToken);\n    }\n\n    /** @inheritdoc */\n    public createRenderer(childRenderers: TranslationMarkupRenderer[]): TranslationMarkupRenderer {\n        const anchorRenderer = this.rendererFactory.createElementRenderer('a', childRenderers);\n\n        // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n        const findLinkRenderer = (link: unknown) => this.linkRenderers.find((linkRenderer) => linkRenderer.supports(link));\n\n        const resolveLinkSpecification = this.resolveLinkSpecification;\n\n        return function namedLinkRenderer(translationParameters: HashMap): HTMLAnchorElement {\n            const anchorElement = anchorRenderer(translationParameters);\n\n            const link: unknown = (\n                'static' in resolveLinkSpecification ? resolveLinkSpecification.static :\n                'parameterKey' in resolveLinkSpecification ? translationParameters[resolveLinkSpecification.parameterKey] :\n                resolveLinkSpecification.resolve(translationParameters)\n            );\n\n            const linkRenderer = findLinkRenderer(link);\n\n            if (linkRenderer) {\n                linkRenderer.render(link, anchorElement);\n            }\n\n            return anchorElement;\n        };\n    }\n}\n","import { TranslationMarkupRenderer } from '../translation-markup-renderer.model';\nimport {\n  TokenizeResult, TranslationMarkupTranspiler, TranslationMarkupTranspilerContext, TranspileResult,\n} from '../translation-markup-transpiler.model';\n\n/**\n * Transpiler that substitutes a fixed token. A subclass is responsible for rendering the actual markup that will be used instead of the\n * token. This is done by providing an implementation for the abstract `createRenderer` function.\n */\nexport abstract class SubstitutionTranspiler implements TranslationMarkupTranspiler {\n    /** Object that holds the value of lazily initialized property. */\n    private readonly deferred: { renderer?: TranslationMarkupRenderer } = {};\n\n    /**\n     * Creates a new `SubstitutionTranspiler` for the specified substitution token.\n     */\n    constructor(\n        /** String representing the token that will be substituted with the output of the resulting renderer. */\n        private readonly substitutionToken: string,\n    ) {}\n\n    /** @inheritdoc */\n    public tokenize(translation: string, offset: number): TokenizeResult | undefined {\n        if (translation.startsWith(this.substitutionToken, offset)) {\n            return {\n                nextOffset: offset + this.substitutionToken.length,\n                token: new SubstitutionToken(this.substitutionToken),\n            };\n        }\n\n        return undefined;\n    }\n\n    /** @inheritdoc */\n    public transpile(offset: number, { tokens }: TranslationMarkupTranspilerContext): TranspileResult | undefined {\n        const nextToken = tokens[offset];\n\n        if (!(nextToken instanceof SubstitutionToken) || nextToken.token !== this.substitutionToken) {\n            return undefined;\n        }\n\n        return {\n            nextOffset: offset + 1,\n            renderer: this.renderer,\n        };\n    }\n\n    /**\n     * Creates the renderer responsible for generating the markup that will be substituted in place of the substitution token.\n     */\n    protected abstract createRenderer(): TranslationMarkupRenderer;\n\n    /** Cached value of the result of the `createRenderer` function. */\n    private get renderer(): TranslationMarkupRenderer {\n        return this.deferred.renderer ?? (this.deferred.renderer = this.createRenderer());\n    }\n}\n\n/**\n * Class for representing tokens that are to be replaced with the output of a specific markup renderer.\n */\nexport class SubstitutionToken {\n    /**\n     *  Creates a new `SubstitutionToken` instance for the specified token.\n     */\n    constructor(public readonly token: string) {}\n}\n","import { HashMap } from '@jsverse/transloco';\n\nimport { LinkRenderer } from '../link-renderer.model';\nimport { ResolveLinkSpecification } from '../models/resolve-link-specification.model';\nimport { TranslationMarkupRendererFactory } from '../translation-markup-renderer-factory';\nimport { TranslationMarkupRenderer } from '../translation-markup-renderer.model';\n\nimport { SubstitutionTranspiler } from './substitution-transpiler';\n\n/**\n * Configuration options for the `ContextualLinkSubstitutionTranspiler`.\n */\nexport interface ContextualLinkSubstitutionTranspilerOptions {\n    /**\n     * Property that defines how to resolve the label text of the link that is to be rendered. The label can be resolved in three different\n     * ways:\n     *\n     * - A static label: `{ static: 'label text' }`\n     * - A value stored in the translation parameters: `{ parameterKey: 'nameOfTheParameterContainingTheLabelText' }`\n     * - A dynamically resolved label using a function that receives the translation parameters as input:\n     *   `{ resolve: (params) => params.foo + '-' + params.bar + '-' + Date.now() }`\n     */\n    label: { static: string } | { parameterKey: string } | { resolve(translationParams: HashMap): string };\n\n    /**\n     * A resolver for the link model specifiying the target location. The link model can be resolved in the same three ways as the label:\n     *\n     * - A static link: `{ static: { url: 'https://example.com/', target: '_self' } }`\n     * - A link stored in the translation parameters: `{ parameterKey: 'targetLink' }`\n     * - A dynamically resolved link using a function that receives the translation parameters as input:\n     *   `{ resolve: (params) => 'https://petstore.com/' + params.petType }`\n     */\n    link: ResolveLinkSpecification;\n}\n\n/**\n * A substitution transpiler that replaces a specific token with a link. This transpiler is quite useful for defining tokens that are only\n * valid within a specific context (i.e. a limited set of translation entries).\n */\nexport class ContextualLinkSubstitutionTranspiler extends SubstitutionTranspiler {\n    /**\n     * Creates a new `ContextualLinkSubstitutionTranspiler` for the specified token and which uses the provided options.\n     */\n    constructor(\n        /** The token which will be substituted with a link. */\n        token: string,\n\n        /** Options that define how to resolve the label text and link model. */\n        private readonly options: ContextualLinkSubstitutionTranspilerOptions,\n\n        /** Renderer factory used to create the renderer for the HTML anchor element that will be substituted in place of the token. */\n        private readonly rendererFactory: TranslationMarkupRendererFactory,\n\n        /** Set of link renderers that are used to apply the link model from the translation parameter to the anchor element. */\n        private readonly linkRenderers: LinkRenderer<unknown>[],\n    ) {\n        super(token);\n    }\n\n    /** @inheritdoc */\n    protected createRenderer(): TranslationMarkupRenderer {\n\n        const labelRenderer = this.rendererFactory.createTextRenderer((() => {\n            const { label } = this.options;\n\n            if ('static' in label) {\n                return label.static;\n            }\n\n            if ('resolve' in label) {\n                return label.resolve; // eslint-disable-line @typescript-eslint/unbound-method\n            }\n\n            return (translationParams: HashMap) => String(translationParams[label.parameterKey] || '');\n        })());\n\n        const anchorRenderer = this.rendererFactory.createElementRenderer('a', [labelRenderer]);\n\n        const options = this.options;\n\n        // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n        const findLinkRenderer = (link: unknown) => this.linkRenderers.find((linkRenderer) => linkRenderer.supports(link));\n\n        return function renderSubstitutionLink(translationParameters: HashMap): HTMLAnchorElement {\n            const anchorElement = anchorRenderer(translationParameters);\n\n            const link: unknown = (\n                'static' in options.link ? options.link.static :\n                'parameterKey' in options.link ? translationParameters[options.link.parameterKey] :\n                options.link.resolve(translationParameters)\n            );\n\n            const linkRenderer = findLinkRenderer(link);\n\n            if (linkRenderer) {\n                linkRenderer.render(link, anchorElement);\n            }\n\n            return anchorElement;\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { TranslationMarkupRendererFactory } from '../translation-markup-renderer-factory';\nimport { TranslationMarkupRenderer } from '../translation-markup-renderer.model';\n\nimport { BlockTranspiler } from './block-transpiler';\n\n/**\n * Transpiler that parses italic tags (`[i]...[/i]`) and creates a renderer that wraps the content in an HTML italic element (`<i>...</i>`).\n */\n@Injectable()\nexport class ItalicTextTranspiler extends BlockTranspiler {\n    /**\n     * Creates an `ItalicTextTranspiler` instance that uses the specified renderer factory.\n     */\n    constructor(\n        /** Renderer factory which will be used for creating the HTML italic element renderer. */\n        private readonly rendererFactory: TranslationMarkupRendererFactory,\n    ) {\n        super('[i]', '[/i]');\n    }\n\n    /** @inheritdoc */\n    protected createRenderer(childRenderers: TranslationMarkupRenderer[]): TranslationMarkupRenderer {\n        return this.rendererFactory.createElementRenderer('i', childRenderers);\n    }\n}\n","import { Inject, Optional, Provider, ProviderToken, SkipSelf, Type } from '@angular/core';\n\n/** Definition (without token binding) for providers that will create a singleton instance of the specified class for injection. */\nexport type UnboundTypeProvider<T> = Type<T>;\n\n/** Definition (without token binding) for providers that use the specified value for injection. */\nexport interface UnboundValueProvider<T> {\n    /** The value to inject. */\n    useValue: T;\n}\n\n/** Definition (without token binding) for providers that instantiate a specific class for injection. */\nexport interface UnboundClassProvider<T> {\n    /** Class to instantiate when being injected for a specific token. */\n    useClass: Type<T>;\n}\n\n/** Definition (without token binding) for providers that reference another token to use for injection. */\nexport interface UnboundExistingProvider<T> {\n    /** Existing token to return (equivalent to `injector.get(useExisting)`). */\n    useExisting: ProviderToken<T>;\n}\n\n/** Definition (without token binding) for providers that use a factory function to create injection values. */\nexport interface UnboundFactoryProvider<T> {\n    /**\n     * A function to invoke to create a value when this provider is injected for a specific token. The function is invoked with resolved\n     * values of tokens in the `deps` field.\n     */\n    useFactory: (...deps: any[]) => T; // eslint-disable-line @typescript-eslint/no-explicit-any, @typescript-eslint/method-signature-style\n\n    /**\n     * A list of tokens which need to be resolved by the injector. The list of values is then used as arguments to the `useFactory`\n     * function.\n     */\n    deps?: unknown[];\n}\n\n/**\n * Definition (without token binding) for providers that use the value directly for injection.\n *\n * This is the same as wrapping the value in an object with a `useValue` property that contains the value that is to be injected.\n */\n export type UnboundDirectValueProvider<T> = T;\n\n/**\n * Typesafe representation for provider definitions which are not bound to a specific token (i.e. a definition wihtout `provide` property).\n */\nexport type UnboundProvider<T> =\n    | UnboundTypeProvider<T>\n    | UnboundValueProvider<T>\n    | UnboundClassProvider<T>\n    | UnboundExistingProvider<T>\n    | UnboundFactoryProvider<T>\n    | UnboundDirectValueProvider<T>;\n\n/** Converts the parameters of a function into a tuple of tokens that resolve to the type of the parameters. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InjectionDependencies<T extends (...args: any) => any> = T extends (...args: infer P) => any\n    ? { [K in keyof P]: ProviderToken<P[K]> | [...(Optional | SkipSelf)[], ProviderToken<P[K]> | Inject] }\n    : never;\n\n/**\n * Creates an `UnboundValueProvider` for the specified value.\n *\n * @param value The value to inject.\n */\nexport function useValue<T>(value: T): UnboundValueProvider<T> {\n    return { useValue: value };\n}\n\n/**\n * Creates an `UnboundClassProvider` for the specified class.\n *\n * @param providerClass Class to instantiate when being injected for a specific token.\n */\nexport function useClass<T>(providerClass: Type<T>): UnboundClassProvider<T> {\n    return { useClass: providerClass };\n}\n\n/**\n * Creates an `UnboundExistingProvider` for the specified `ProviderToken`.\n *\n * @param providerToken Existing token to return (equivalent to `injector.get(useExisting)`).\n */\nexport function useExisting<T>(providerToken: ProviderToken<T>): UnboundExistingProvider<T> {\n    return { useExisting: providerToken };\n}\n\n/**\n * Creates an `UnboundFactoryProvider` based on the return type of the specified factory function.\n *\n * The usage of the `useFactory` function is preferred over manually creating an `UnboundFactoryProvider` object literal, because this\n * function will enforce type safe constraints on the dependencies (parameters of the factory function).\n *\n * @param factoryFunction A function to invoke to create a value for this `token`. The function is invoked with resolved values of the\n *                        specified dependencies (`ProviderToken`s)\n * @param dependencies    List of `token`s to be resolved by the injector. These values are then used as arguments for the factory function.\n */\nexport function useFactory<F extends (...args: any) => any>( // eslint-disable-line @typescript-eslint/no-explicit-any\n    factoryFunction: F,\n    ...dependencies: InjectionDependencies<F>\n): UnboundFactoryProvider<ReturnType<F>> {\n    return {\n        useFactory: factoryFunction,\n        deps: dependencies,\n    };\n}\n\n/** Extra binding options for the `bindProvider` function. */\nexport interface BindProviderOptions<U> {\n    /** Whether the provider should be contribute to a \"multi-provider\" (resulting an array of instances when injected). */\n    multi?: boolean;\n\n    /** Default provider definition to use when the provider definition passed to the `bindProvider` function is `undefined`. */\n    default?: UnboundProvider<U>;\n}\n\n/**\n * Binds the given provider definition to the specified token and returns a `Provider` entry that can be used in the providers list of\n * Angular module definitions.\n *\n * @param token           Token which for which the provider is to be defined.\n * @param unboundProvider Definition of a provider which should be bound to the specified token.\n * @param options         Optional extra binding options.\n */\n// eslint-disable-next-line complexity\nexport function bindProvider<T, U extends T>(\n    token: ProviderToken<T>,\n    unboundProvider: UnboundProvider<U> | undefined,\n    options: BindProviderOptions<U> = {},\n): Provider {\n    return (\n        unboundProvider ? (\n            (typeof unboundProvider === 'function') ?\n                [\n                    unboundProvider,\n                    {\n                        provide: token,\n                        useExisting: unboundProvider,\n                        multi: options.multi,\n                    },\n                ] :\n            (typeof unboundProvider === 'object' && 'useValue' in unboundProvider) ?\n                {\n                    provide: token,\n                    useValue: unboundProvider.useValue,\n                    multi: options.multi,\n                } :\n            (typeof unboundProvider === 'object' && 'useClass' in unboundProvider) ?\n                {\n                    provide: token,\n                    useClass: unboundProvider.useClass,\n                    multi: options.multi,\n                } :\n            (typeof unboundProvider === 'object' && 'useExisting' in unboundProvider) ?\n                {\n                    provide: token,\n                    useExisting: unboundProvider.useExisting,\n                    multi: options.multi,\n                } :\n            (typeof unboundProvider === 'object' && 'useFactory' in unboundProvider) ?\n                {\n                    provide: token,\n                    useFactory: unboundProvider.useFactory,\n                    deps: unboundProvider.deps,\n                    multi: options.multi,\n                } :\n                {\n                    provide: token,\n                    useFactory: () => unboundProvider as T,\n                    multi: options.multi,\n                }\n        ) :\n        options.default ? (\n            (typeof options.default === 'function') ?\n                [\n                    options.default,\n                    {\n                        provide: token,\n                        useExisting: options.default,\n                        multi: options.multi,\n                    },\n                ] :\n            (typeof options.default === 'object' && 'useValue' in options.default) ?\n                {\n                    provide: token,\n                    useValue: options.default.useValue,\n                    multi: options.multi,\n                } :\n            (typeof options.default === 'object' && 'useClass' in options.default) ?\n                {\n                    provide: token,\n                    useClass: options.default.useClass,\n                    multi: options.multi,\n                } :\n            (typeof options.default === 'object' && 'useExisting' in options.default) ?\n                {\n                    provide: token,\n                    useExisting: options.default.useExisting,\n                    multi: options.multi,\n                } :\n            (typeof options.default === 'object' && 'useFactory' in options.default) ?\n                {\n                    provide: token,\n                    useFactory: options.default.useFactory,\n                    deps: options.default.deps,\n                    multi: options.multi,\n                } :\n                {\n                    provide: token,\n                    useFactory: () => options.default as T,\n                    multi: options.multi,\n                }\n        ) :\n        []\n    );\n}\n","import { Provider } from '@angular/core';\n\nimport { UnboundProvider, bindProvider } from './utils/provider-binding';\n\n/**\n * Interface for objects that can render a link. Note that this is abstract class instead of an interface so the class itself can be used as\n * token for injection of the link renderers.\n */\nexport abstract class LinkRenderer<T> {\n    /**\n     * Checks whether the link renderer supports the specified link.\n     *\n     * @param   link Link value for which is to be checked if the renderer supports it.\n     * @returns      `true` if the specified link is supported and it safe to be used as argument for the `render` function, `false` if the\n     *               link is not supported by the renderer.\n     */\n    public abstract supports(link: unknown): link is T;\n\n    /**\n     * Renders the given link to the specified target element.\n     *\n     * @param link          Link that is to be rendered.\n     * @param targetElement Target anchor element to which the link should be rendered.\n     */\n    public abstract render(link: T, targetElement: HTMLAnchorElement): void;\n}\n\n/**\n * Creates a provider definition for the specified link renderer. The resulting `Provider` object can be used to make the renderer available\n * within a module or component injector scope.\n *\n * @param linkRenderer Specification of the link renderer for which the provider definition is to be created.\n */\nexport function provideLinkRenderer<T>(linkRenderer: UnboundProvider<LinkRenderer<T>>): Provider {\n    return bindProvider(LinkRenderer, linkRenderer, { multi: true });\n}\n","export type ScalarOrArray<T> = T | T[];\n\n/**\n * Wraps the specified value in an array unless the value already is an array.\n *\n * @param   value Value that is to be wrapped in an array.\n * @returns       If the specified value is an array the specified value is returned as is, otherwise it will be wrapped in array,\n *                containing just the value.\n */\nexport function asArray<T>(value: ScalarOrArray<T>): T[] {\n    return Array.isArray(value) ? value : [value];\n}\n\n/**\n * A recursive array data structure, where a value can either be a scalar value or an array where each element itself is also a recursive\n * array data structure.\n */\nexport type RecursiveArray<T> = T | RecursiveArray<T>[];\n\n/**\n * Flattens a recursive array (of arbitrary depth) into a one dimensional array. If the specified value is just a scalar value, then it will\n * be wrapped in an array containing only that value.\n *\n * @param   value Value which is to be converted to a flattened array.\n * @returns       A one dimensional array containing all elements from the recursive array.\n */\nexport function asFlatArray<T>(value: RecursiveArray<T>): T[] {\n    return Array.isArray(value)\n        ? value.reduce<T[]>((partialResult, element) => partialResult.concat(asFlatArray(element)), [])\n        : [value];\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { HashMap } from '@jsverse/transloco';\n\nimport { LinkRenderer } from '../link-renderer.model';\nimport { TranslationMarkupRendererFactory } from '../translation-markup-renderer-factory';\nimport { TranslationMarkupRenderer } from '../translation-markup-renderer.model';\nimport {\n  TokenizeResult, TranslationMarkupTranspiler, TranslationMarkupTranspilerContext, TranspileResult,\n} from '../translation-markup-transpiler.model';\nimport { asArray } from '../utils/array';\n\n/**\n * A transpiler that can be used to parse links in a translation value and convert those to a renderer that generates an HTML anchor\n * element. Supports the following syntax: `[link:parameterKey]...[/link]`, where `parameterKey` should be substituted with the actual key\n * of the parameter that stores the target link. Contents between the opening and closing tags will be recursively transpiled.\n */\n@Injectable()\nexport class LinkTranspiler implements TranslationMarkupTranspiler {\n    /** Set of link renderers that are used to apply the link model from the translation parameter to the anchor element. */\n    private readonly linkRenderers: LinkRenderer<unknown>[];\n\n    /**\n     * Creates a new `LinkTranspiler` that uses the specified renderer factory for creating the HTML anchor element (`<a>`) and which\n     * delegates the rendering of link models to the given set of link renderers.\n     */\n    constructor(\n        /** Renderer factory which will be used for creating the HTML anchor element renderer. */\n        private readonly rendererFactory: TranslationMarkupRendererFactory,\n\n        /** Set of link renderers that are used to apply the link model from the translation parameter to the anchor element. */\n        @Inject(LinkRenderer) @Optional() linkRenderers: LinkRenderer<unknown> | LinkRenderer<unknown>[] | null,\n    ) {\n        this.linkRenderers = !linkRenderers ? [] : asArray(linkRenderers);\n    }\n\n    /** @inheritdoc */\n    public tokenize(translation: string, offset: number): TokenizeResult | undefined {\n\n        if (translation.startsWith(LINK_END_TOKEN, offset)) {\n            return {\n                nextOffset: offset + LINK_END_TOKEN.length,\n                token: LINK_END,\n            };\n        }\n\n        if (!translation.startsWith(LINK_START_TOKEN, offset)) {\n            return undefined;\n        }\n\n        const end = translation.indexOf(']', offset + LINK_START_TOKEN.length);\n\n        if (end < 0) {\n            return undefined;\n        }\n\n        const parameterKey = translation.substring(offset + LINK_START_TOKEN.length, end);\n\n        return {\n            nextOffset: end + 1,\n            token: new LinkStart(parameterKey),\n        };\n    }\n\n    /** @inheritdoc */\n    public transpile(start: number, context: TranslationMarkupTranspilerContext): TranspileResult | undefined {\n        const nextToken = context.tokens[start];\n\n        if (!(nextToken instanceof LinkStart)) {\n            return undefined;\n        }\n\n        const { nextOffset, renderers } = context.transpileUntil(start + 1, (token) => token === LINK_END);\n\n        return {\n            nextOffset: Math.min(nextOffset + 1, context.tokens.length),\n            renderer: this.createRenderer(nextToken.parameterKey, renderers),\n        };\n    }\n\n    /**\n     * Creates a renderer that generates an HTML anchor tag and applies the link model stored in the specified translation parameter.\n     *\n     * @param   parameterKey   Key that identifies the translation parameter containing the link model.\n     * @param   childRenderers Transpiled content of the link.\n     * @returns                A markup renderer that creates an HTML representation of the link.\n     */\n    protected createRenderer(parameterKey: string, childRenderers: TranslationMarkupRenderer[]): TranslationMarkupRenderer {\n        const anchorRenderer = this.rendererFactory.createElementRenderer('a', childRenderers);\n\n        // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n        const findLinkRenderer = (link: unknown) => this.linkRenderers.find((linkRenderer) => linkRenderer.supports(link));\n\n        function renderLink(translationParameters: HashMap): HTMLAnchorElement {\n            const anchorElement = anchorRenderer(translationParameters);\n\n            const link: unknown = translationParameters[parameterKey];\n\n            const linkRenderer = findLinkRenderer(link);\n\n            if (linkRenderer) {\n                linkRenderer.render(link, anchorElement);\n            }\n\n            return anchorElement;\n        }\n\n        return renderLink;\n    }\n}\n\n/** Prefix of a link start token. */\nconst LINK_START_TOKEN = '[link:';\n\n/** String that defines the end tag of a link. */\nconst LINK_END_TOKEN = '[/link]';\n\n/** Token that represents the closing tag of a link. */\nexport const LINK_END = new (class LinkEnd {})(); // eslint-disable-line @typescript-eslint/no-extraneous-class\n\n/**\n * Class used for modeling the link start tokens.\n */\nexport class LinkStart {\n    /**\n     * Creates a new `LinkStart` that references the specified parameter.\n     */\n    constructor(\n        /** Key of the parameter which stores the link model. */\n        public readonly parameterKey: string,\n    ) {}\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\nimport { TRANSLOCO_TRANSPILER, TranslocoTranspiler } from '@jsverse/transloco';\n\nimport { TranslationMarkupRendererFactory } from '../translation-markup-renderer-factory';\nimport {\n  TokenizeResult, TranslationMarkupTranspiler, TranslationMarkupTranspilerContext, TranspileResult,\n} from '../translation-markup-transpiler.model';\n\n/**\n * Interface for objects that can detect interpolation expressions.\n */\nexport interface InterpolationExpressionMatcher {\n\n    /**\n     * Checks whether an interpolation expression is found in the given string at the specified offset.\n     *\n     * @param   source String where the interpolation expression might be found.\n     * @param   offset Position within the string which should be checked for the presence of an interpolation expression.\n     * @returns        Length of the interpolation expression in number of characters or `undefined` if no expression was found.\n     */\n    matchExpression(source: string, offset: number): number | undefined;\n\n}\n\n/**\n * Interpolation expression matcher for the default syntax of Transloco interpolation expressions: `{{...}}`.\n *\n * @param   translationValue String where the interpolation expression might be found.\n * @param   offset           Position within the string which should be checked for the presence of an interpolation expression.\n * @returns                  The length of the interpolation expression in number of characters or `undefined` if none was found.\n */\nexport function defaultTranslationInterpolationExpressionMatcher(translationValue: string, offset: number): number | undefined {\n    if (!translationValue.startsWith('{{', offset)) {\n        return undefined;\n    }\n\n    const expressionEnd = translationValue.indexOf('}}', offset);\n\n    return expressionEnd >= 2 ? expressionEnd + 2 - offset : undefined;\n}\n\n/**\n * Factory function for the `defaultTranslationInterpolationExpressionMatcher`. Used for the `TRANSLATION_INTERPOLATION_EXPRESSION_MATCHER`\n * injection token.\n */\nexport function defaultTranslationInterpolationExpressionMatcherFactory(): InterpolationExpressionMatcher {\n    return { matchExpression: defaultTranslationInterpolationExpressionMatcher };\n}\n\n/**\n * Injection token that is used for defining the provider for the `InterpolationExpressionMatcher`, which is needed by the\n * `StringInterpolationTranspiler`.\n */\nexport const TRANSLATION_INTERPOLATION_EXPRESSION_MATCHER = new InjectionToken<InterpolationExpressionMatcher>(\n    'TRANSLATION_INTERPOLATION_EXPRESSION_MATCHER',\n    {\n        providedIn: 'root',\n        factory: defaultTranslationInterpolationExpressionMatcherFactory,\n    },\n);\n\n/**\n * Markup transpiler that supports interpolation expressions, and which creates a renderer that expands the expression to string using the\n * `TranslocoTranspiler`. Since the `TranslocoTranspiler` can be overridden with a custom implementation that uses a different syntax this\n * class uses a (configurable) `InterpolationExpressionMatcher`. This expression matcher can be overridden with a different implementation\n * that supports the syntax of a custom `TranslocoTranspiler`.\n */\n@Injectable({ providedIn: 'root' })\nexport class StringInterpolationTranspiler implements TranslationMarkupTranspiler {\n    /**\n     * Creates a new `StringInterpolationTranspiler` that uses the specified renderer factory, Transloco transpiler and expression matcher.\n     */\n    constructor(\n        /** Renderer factory which will be used for rendering the text nodes containing the result of interpolation expressions. */\n        private readonly rendererFactory: TranslationMarkupRendererFactory,\n\n        /** The Transloco transpiler that will be used for evaluating interpolation expressions. */\n        @Inject(TRANSLOCO_TRANSPILER) private readonly translocoTranspiler: TranslocoTranspiler,\n\n        /** Matcher that can find interpolation expressions in a translation value which are supported by the Transloco transpiler. */\n        @Inject(TRANSLATION_INTERPOLATION_EXPRESSION_MATCHER) private readonly expressionMatcher: InterpolationExpressionMatcher,\n    ) {}\n\n    /** @inheritdoc */\n    public tokenize(translation: string, offset: number): TokenizeResult | undefined {\n        const expressionLength = this.expressionMatcher.matchExpression(translation, offset);\n\n        if (!expressionLength) {\n            return undefined;\n        }\n\n        return {\n            nextOffset: offset + expressionLength,\n            token: new StringInterpolationSegment(translation.substring(offset, offset + expressionLength)),\n        };\n    }\n\n    /** @inheritdoc */\n    public transpile(offset: number, { tokens, translation }: TranslationMarkupTranspilerContext): TranspileResult | undefined {\n        const nextToken = tokens[offset];\n\n        if (!(nextToken instanceof StringInterpolationSegment)) {\n            return undefined;\n        }\n\n        const { interpolationExpression } = nextToken;\n\n        return {\n            nextOffset: offset + 1,\n            renderer: this.rendererFactory.createTextRenderer(\n                (translationParameters) => String(this.translocoTranspiler.transpile({\n                    value: interpolationExpression,\n                    params: translationParameters,\n                    translation,\n                    key: '???',\n                })),\n            ),\n        };\n    }\n}\n\n/**\n * Token class for interpolation expressions.\n */\nexport class StringInterpolationSegment {\n    /**\n     *  Creates a new `StringInterpolationSegment` for the specified expression.\n     */\n    constructor(public readonly interpolationExpression: string) {}\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport { LinkRenderer } from '../link-renderer.model';\nimport { ResolveLinkSpecification } from '../models/resolve-link-specification.model';\nimport { TranslationMarkupRendererFactory } from '../translation-markup-renderer-factory';\nimport { asArray } from '../utils/array';\n\nimport { ContextualLinkBlockTranspiler } from './contextual-link-block-transpiler';\nimport {\n  ContextualLinkSubstitutionTranspiler, ContextualLinkSubstitutionTranspilerOptions,\n} from './contextual-link-substitution-transpiler';\n\n/**\n * Injectable factory service that provides convenience functions for easily creating contextual link transpiler instances.\n */\n@Injectable({ providedIn: 'root' })\nexport class ContextualLinkTranspilerFactory {\n    /** Set of link renderers that are used to apply the link model from the translation parameter to the anchor element. */\n    private readonly linkRenderers: LinkRenderer<unknown>[];\n\n    /**\n     * Creates a new `ContextualLinkTranspilerFactory` that uses the specified renderer factory and link renderers for the creation of\n     * `ContextualLinkBlockTranspiler` and `ContextualLinkSubstitutionTranspiler` instances.\n     */\n    constructor(\n        /** Renderer factory used to create the renderer for the HTML anchor element that will be substituted in place of the token. */\n        private readonly rendererFactory: TranslationMarkupRendererFactory,\n\n        /** Set of link renderers that are used to apply the link model from the translation parameter to the anchor element. */\n        @Inject(LinkRenderer) @Optional() linkRenderers: LinkRenderer<unknown> | LinkRenderer<unknown>[] | null,\n    ) {\n        this.linkRenderers = !linkRenderers ? [] : asArray(linkRenderers);\n    }\n\n    /**\n     * Creates a `ContextualLinkBlockTranspiler` that resolves the link based on the specified parameter key. The start and end tokens are\n     * also based on the parameter key, which are equal to `[parameterKey]` and `[/parameterKey]`.\n     *\n     * @param   parameterKey Key of the translation parameter which holds the `link` model.\n     * @returns              The `ContextualLinkSubstitutionTranspiler` that was created.\n     */\n    public createBlockTranspiler(parameterKey: string): ContextualLinkBlockTranspiler;\n\n    /**\n     * Creates a `ContextualLinkSubstitutionTranspiler` for the specified tokens and link specification resolver.\n     *\n     * @param   startToken               Token that defined the start of the link.\n     * @param   endToken                 Token that defined end start of the link.\n     * @param   resolveLinkSpecification Object that specifies how to resolve the link.\n     * @returns                          The `ContextualLinkBlockTranspiler` that was created.\n     */\n    public createBlockTranspiler(\n        startToken: string,\n        endToken: string,\n        resolveLinkSpecification: ResolveLinkSpecification,\n    ): ContextualLinkBlockTranspiler;\n\n    // Unified implementation of the `createBlockTranspiler` function signatures above.\n    public createBlockTranspiler(\n        parameterKeyOrStartToken: string,\n        endToken?: string,\n        resolveLinkSpecification?: ResolveLinkSpecification,\n    ): ContextualLinkBlockTranspiler {\n        if (endToken === undefined || resolveLinkSpecification === undefined) {\n            const parameterKey = parameterKeyOrStartToken;\n\n            return this.createBlockTranspiler(`[${parameterKey}]`, `[/${parameterKey}]`, { parameterKey });\n        }\n\n        const startToken = parameterKeyOrStartToken;\n\n        return new ContextualLinkBlockTranspiler(startToken, endToken, resolveLinkSpecification, this.rendererFactory, this.linkRenderers);\n    }\n\n    /**\n     * Creates a `ContextualLinkSubstitutionTranspiler` that resolves the label and link based on the specified parameter key. The\n     * translation parameter value is expected to have a `label` and `link` property. The substitution token is equal to the parameter key\n     * wrapped between square brackets: `[parameterKey]`.\n     *\n     * @param   parameterKey Key of the translation parameter which holds the `label` and `link` subproperties.\n     * @returns              The `ContextualLinkSubstitutionTranspiler` that was created.\n     */\n    public createSubstitutionTranspiler(parameterKey: string): ContextualLinkSubstitutionTranspiler;\n\n    /**\n     * Creates a `ContextualLinkSubstitutionTranspiler` for the specified substitution token and given options.\n     *\n     * @param   token   The token which will be substituted with a link.\n     * @param   options Options that define how to resolve the label text and link model.\n     * @returns         The `ContextualLinkSubstitutionTranspiler` that was created.\n     */\n    public createSubstitutionTranspiler(\n        token: string,\n        options: ContextualLinkSubstitutionTranspilerOptions,\n    ): ContextualLinkSubstitutionTranspiler;\n\n    // Unified implementation of the `createSubstitutionTranspiler` function signatures above.\n    public createSubstitutionTranspiler(\n        parameterKeyOrToken: string,\n        options?: ContextualLinkSubstitutionTranspilerOptions,\n    ): ContextualLinkSubstitutionTranspiler {\n        if (options === undefined) {\n            return this.createSubstitutionTranspiler(`[${parameterKeyOrToken}]`, {\n                /* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return */\n                label: { resolve: (params) => params[parameterKeyOrToken].label },\n                link: { resolve: (params) => params[parameterKeyOrToken].link },\n                /* eslint-enable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return */\n            });\n        }\n\n        return new ContextualLinkSubstitutionTranspiler(parameterKeyOrToken, options, this.rendererFactory, this.linkRenderers);\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { LinkRenderer } from './link-renderer.model';\nimport { ExternalLink, isExternalLinkObject } from './models/external-link.model';\n\n/**\n * Link renderer for string values, where the value is interpreted as the URL to an external resource. The renderer will set the browser\n * target for the link to `_blank` (a new window/tab).\n */\n@Injectable()\nexport class StringLinkRenderer extends LinkRenderer<string> {\n    /** @inheritdoc */\n    public supports(link: unknown): link is string {\n        return typeof link === 'string';\n    }\n\n    /** @inheritdoc */\n    public render(link: string, targetElement: HTMLAnchorElement): void {\n        targetElement.href = link;\n        targetElement.target = '_blank';\n    }\n}\n\n/**\n * Link renderer that supports rendering of `ExternalLink` objects.\n */\n@Injectable()\nexport class ExternalLinkObjectLinkRenderer extends LinkRenderer<ExternalLink> {\n    /** @inheritdoc */\n    public supports(link: unknown): link is ExternalLink {\n        return isExternalLinkObject(link);\n    }\n\n    /** @inheritdoc */\n    public render(link: ExternalLink, targetElement: HTMLAnchorElement): void {\n        targetElement.href = link.url;\n\n        if (typeof link.target === 'string') {\n            targetElement.target = link.target;\n        }\n    }\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\nimport { TranslationMarkupTranspiler } from './translation-markup-transpiler.model';\nimport { RecursiveArray } from './utils/array';\nimport { UnboundProvider, bindProvider } from './utils/provider-binding';\n\n/** Token used to define the `TranslationMarkupTranspiler` providers that should be available for injection. */\nexport const TRANSLATION_MARKUP_TRANSPILER =\n    new InjectionToken<RecursiveArray<TranslationMarkupTranspiler>>('TRANSLATION_MARKUP_TRANSPILER');\n\n/**\n * Creates a provider definition for the specified markup transpiler. The resulting `Provider` object can be used to make the transpiler\n * available within a module or component injector scope.\n *\n * @param transpiler Specification of the markup transpiler for which the provider definition is to be created.\n */\nexport function provideTranslationMarkupTranspiler(transpiler: UnboundProvider<TranslationMarkupTranspiler>): Provider {\n    return bindProvider(TRANSLATION_MARKUP_TRANSPILER, transpiler, { multi: true });\n}\n","import { Provider } from '@angular/core';\n\nimport { ExternalLinkObjectLinkRenderer, StringLinkRenderer } from './default-link-renderers';\nimport { provideLinkRenderer } from './link-renderer.model';\nimport { provideTranslationMarkupTranspiler } from './translation-markup-transpiler.token';\nimport { BoldTextTranspiler } from './transpilers/bold-text-transpiler';\nimport { ItalicTextTranspiler } from './transpilers/italic-text-transpiler';\nimport { LinkTranspiler } from './transpilers/link-transpiler';\n\n/**\n * Factory function for the default set of markup transpilers. Can be included in the providers array of an `@NgModule` or `@Component`\n * decorated class.\n *\n * @returns A `Provider` array for the default Transloco markup transpilers.\n */\nexport function defaultTranslocoMarkupTranspilers(): Provider[] {\n    return [\n        provideTranslationMarkupTranspiler(BoldTextTranspiler),\n        provideTranslationMarkupTranspiler(ItalicTextTranspiler),\n        provideTranslationMarkupTranspiler(LinkTranspiler),\n        provideLinkRenderer(StringLinkRenderer),\n        provideLinkRenderer(ExternalLinkObjectLinkRenderer),\n    ];\n}\n","import { FactoryProvider, SkipSelf } from '@angular/core';\n\nimport { TranslationMarkupTranspiler } from './translation-markup-transpiler.model';\nimport { TRANSLATION_MARKUP_TRANSPILER } from './translation-markup-transpiler.token';\nimport { RecursiveArray } from './utils/array';\n\n/**\n * Returns a provider that makes transpilers from a parent injector available in the child injector. This is needed if you define\n * additional translation markup transpilers that are scoped to a specific module or component. Doing so will override the transpilers from\n * the parent injector. Including the provider from the `inheritTranslationMarkupTranspilers` function will make those transpilers also\n * available.\n */\nexport function inheritTranslationMarkupTranspilers(): FactoryProvider {\n    return {\n        provide: TRANSLATION_MARKUP_TRANSPILER,\n        useFactory: (transpilers: RecursiveArray<TranslationMarkupTranspiler>) => transpilers,\n        deps: [[SkipSelf, TRANSLATION_MARKUP_TRANSPILER]],\n        multi: true,\n    };\n}\n","import { InjectionToken, inject } from '@angular/core';\n\nimport { TranslationMarkupTranspiler } from './translation-markup-transpiler.model';\nimport { StringInterpolationTranspiler } from './transpilers/string-interpolation-transpiler';\n\n/** Injection token for defining the provider to resolve the transpiler used for string interpolation expressions. */\nexport const STRING_INTERPOLATION_TRANSPILER = new InjectionToken<TranslationMarkupTranspiler>(\n    'STRING_INTERPOLATION_TRANSPILER',\n    {\n        providedIn: 'root',\n        factory: () => inject(StringInterpolationTranspiler),\n    },\n);\n","/**\n * Selects the first projected value that matches the specified predicate. In case no matching value can be found, `undefined` will be\n * returned.\n *\n * @param   iterable Iterable that produces the values that will be projected.\n * @param   project  Mapping function that is applied to values from the iterable.\n * @param   match    Predicate function that determines whether the projected value should be returned by this function.\n * @returns          First project value from the iterable that matches the specified predicate or `undefined` no such value was found.\n */\nexport function selectFirstWhere<T, U>(iterable: Iterable<T>, project: (value: T) => U, match: (value: U) => boolean): U | undefined {\n    for (const value of iterable) {\n        const projectedValue = project(value);\n\n        if (match(projectedValue)) {\n            return projectedValue;\n        }\n    }\n\n    return undefined;\n}\n","import { Translation } from '@jsverse/transloco';\n\nimport { TranslationMarkupRenderer } from './translation-markup-renderer.model';\nimport { selectFirstWhere } from './utils/iterable';\n\n/**\n * Interface for objects that can transpile translation values (including markup tokens) to a translation renderer.\n */\nexport interface TranslationMarkupTranspiler {\n\n    /**\n     * Attempts to recognize a token at the specified position for the given translation value. If a supported token is found, then the\n     * token is returned in an arbitrary representation that suits the transpiler, including the offset at which the tokenization process\n     * should continue. When no supported token is found `undefined` is returned.\n     *\n     * @param   translation Translation value that is to be tokenized.\n     * @param   offset      Position where the token should be recognized\n     * @returns             An object containing the token and next tokenization offset or `undefined` when no token is recognized.\n     */\n    tokenize(translation: string, offset: number): TokenizeResult | undefined;\n\n    /**\n     * Transpiles the token sequence (from the given context) starting at the specified offset. If the transpiler can parse the token\n     * sequence it returns a `TranslationMarkupRenderer` and the offset of the next unparsed token. In case the transpiler is unable to\n     * parse the token sequence at the specified offset `undefined` will be returned as result.\n     *\n     * @param   offset  Position within the token sequence where the transpilation should be performed.\n     * @param   context Context that contains the token sequence that is to be transpiled and recursive transpilation support.\n     * @returns         An object containing the offset of the next unparsed token and the `TranslationMarkupRenderer` that was created, or\n     *                  `undefined` if the transpiler is unable to parse the token sequence.\n     */\n    transpile(offset: number, context: TranslationMarkupTranspilerContext): TranspileResult | undefined;\n}\n\n/**\n * Description of a successful tokenization result.\n */\nexport interface TokenizeResult {\n\n    /** Offset at which the tokenization process should continue. */\n    nextOffset: number;\n\n    /** Token that was recognized. */\n    token: unknown;\n}\n\n/**\n * Description of a successful transpilation result.\n */\nexport interface TranspileResult {\n    /** Offset at which the transpilation process should continue. */\n    nextOffset: number;\n\n    /** Renderer that was created as result of the parsed translation value tokens. */\n    renderer: TranslationMarkupRenderer;\n}\n\n/**\n * Outcome of multiple transpile calls executed sequentially over (part of) a token sequence.\n */\nexport interface SequentialTranspilationResult {\n\n    /** Offset at which the transpilation process should continue. */\n    nextOffset: number;\n\n    /** Renderers that were created as result of the parsed translation value tokens. */\n    renderers: TranslationMarkupRenderer[];\n}\n\n/**\n * Context used during the transpilation process.\n */\nexport class TranslationMarkupTranspilerContext {\n    /**\n     * Creates a new transpiler context for the specified token sequence and transpilers.\n     */\n    constructor(\n        /** Sequence of tokens representing the translation value that should be transpiled. */\n        public readonly tokens: unknown[],\n\n        /** Translation dictionary containing the translation that is transpiled. */\n        public readonly translation: Translation,\n\n        /** Transpilers which are to be used to parse and convert the token sequence. */\n        private readonly transpilers: TranslationMarkupTranspiler[],\n    ) {}\n\n    /**\n     * Attempts to transpile the token sequence at the specified offset. This is done by finding the first transpiler from the set of\n     * available transpilers that can successfully parse the token sequence.\n     *\n     * @param   offset Position within the token sequence where the transpilation should be performed.\n     * @returns        Transpilation result of the first transpiler in the transpiler set that can parse the token sequence at the specified\n     *                 offset. `undefined` is returned if none if the transpilers can transpile the token sequence.\n     */\n    public transpile(offset: number): TranspileResult | undefined {\n        return selectFirstWhere(\n            this.transpilers,\n            (transpiler) => transpiler.transpile(offset, this),\n            (result) => result !== undefined && result.nextOffset !== offset,\n        );\n    }\n\n    /**\n     * Starts a sequential transpilation process that continues transpiling the token sequence until the end has been reached or when the\n     * given `stopTranspiling` function returns `true`. The result is an object that contains the offset where the transpilation ended and\n     * an array of the markup renderer functions that were created by the transpilers.\n     *\n     * @param   startOffset     Position within the token sequence where the transpilation process should be started.\n     * @param   stopTranspiling Function that tells whether the sequential transpilation should stop at the specified offet and token at\n     *                          that offset in the token sequence. The function must return `true` if the transpilation should stop.\n     * @returns                 An object that describes the result of the sequential transpilation process: an array of the created\n     *                          translation markup renderers (`renderers` property) and the offset where the process stopped (`nextOffset`).\n     */\n    public transpileUntil(\n        startOffset: number,\n        stopTranspiling: (token: unknown, offset: number) => boolean,\n    ): SequentialTranspilationResult {\n        let offset = startOffset;\n\n        const renderers: TranslationMarkupRenderer[] = [];\n\n        while (offset < this.tokens.length && !stopTranspiling(this.tokens[offset], offset)) {\n\n            const transpileResult = this.transpile(offset);\n\n            if (transpileResult) {\n                renderers.push(transpileResult.renderer);\n                offset = transpileResult.nextOffset;\n            } else {\n                offset++;\n            }\n        }\n\n        return {\n            renderers,\n            nextOffset: offset,\n        };\n    }\n}\n","/**\n * Checks whether the specified value is not exactly equal to `undefined`.\n *\n * @param   value Value which is to be checked.\n * @returns       `true` if the specified value is not exactly equal to `undefined` or `true` if it is.\n */\nexport function notUndefined<T>(value: T | undefined): value is T {\n    return value !== undefined;\n}\n","import { HashMap, Translation } from '@jsverse/transloco';\n\nimport { TranslationMarkupRenderer } from './translation-markup-renderer.model';\nimport { TranslationMarkupTranspiler, TranslationMarkupTranspilerContext } from './translation-markup-transpiler.model';\nimport { selectFirstWhere } from './utils/iterable';\nimport { notUndefined } from './utils/predicates';\n\n/**\n * Creates a translation markup rendering function for the specified translation value.\n *\n * @param   translationValue Translation value containing markup tokens that is to be converted to a rendering function.\n * @param   transpilers      Ordered set of transpiler that are available for the conversion.\n * @param   translation      Translation dictionary containing the translation value.\n * @returns                  A rendering function that can render the translation given translation parameter to a specified target element.\n */\nexport function createTranslationMarkupRenderer(\n    translationValue: string,\n    transpilers: TranslationMarkupTranspiler[],\n    translation: Translation,\n): (target: Element, translationParameters: HashMap) => void {\n    const tokens = tokenize(translationValue, transpilers);\n    const renderers = transpile(tokens, transpilers, translation);\n\n    return function renderTranslation(target: Element, translationParams: HashMap): void {\n        while (target.lastChild) {\n            target.removeChild(target.lastChild);\n        }\n\n        for (const render of renderers) {\n            target.appendChild(render(translationParams));\n        }\n    };\n}\n\n/**\n * Converts the given translation value into a sequence of tokens that can be parsed by the specified transpilers. Note that the order of\n * the transpilers is used to resolve conflicts when two or more transpilers can recognize a token at a specific location within the\n * translation value. Tokens are generated based on the first transpiler that is able to create token at a certain offset.\n *\n * @param   translationValue Translation value that is to be tokenized.\n * @param   transpilers      Ordered set transpilers used to convert the translation value into tokens.\n * @returns                  A sequence of tokens which can be parsed by the given transpilers and converted into markup renderers.\n */\nexport function tokenize(translationValue: string, transpilers: TranslationMarkupTranspiler[]): unknown[] {\n    const tokens: unknown[] = [];\n    let offset = 0;\n\n    while (offset < translationValue.length) {\n        // eslint-disable-next-line @typescript-eslint/no-loop-func\n        const tokenizeResult = selectFirstWhere(transpilers, (transpiler) => transpiler.tokenize(translationValue, offset), notUndefined);\n\n        if (tokenizeResult) {\n            offset = tokenizeResult.nextOffset;\n            tokens.push(tokenizeResult.token);\n        } else {\n            offset++;\n        }\n    }\n\n    return tokens;\n}\n\n/**\n * Transpiles the given sequence of tokens using the provded transpilers into a `TranslationMarkupRenderer`.\n *\n * @param   tokens      Token sequence that is to be transpiled.\n * @param   transpilers Transpilers which are to be used to parse and convert the token sequence.\n * @param   translation Translation dictionary containing the translation value that is represented by the given tokens.\n * @returns             A `TranslationMarkupRenderer` that was constructed by the transpilers from the token sequence.\n */\nexport function transpile(\n    tokens: unknown[],\n    transpilers: TranslationMarkupTranspiler[],\n    translation: Translation,\n): TranslationMarkupRenderer[] {\n    const transpilerContext = new TranslationMarkupTranspilerContext(tokens, translation, transpilers);\n\n    return transpilerContext.transpileUntil(0, () => false).renderers;\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Observes the specified property and returns a stream that emits all values which are assigned to the property. When subscribing to the\n * resulting stream it will always first emit the current value of the property, followed by all new values that are assigned to it.\n *\n * @param   target Object containing the property.\n * @param   key    Key of the property that is to be observed.\n * @returns        A stream of all values that are assigned to the specified property, starting with the current value of the property.\n */\nexport function observeProperty<T, K extends keyof T>(target: T, key: K): Observable<T[K]> {\n\n    interface GetAccessorWithValueStream {\n        (): T[K];\n        __value$?: Observable<T[K]>;\n    }\n\n    const propertyDescriptor = getPropertyDescriptor(target, key);\n\n    const originalGetAccessor: GetAccessorWithValueStream | undefined =\n        propertyDescriptor?.get; // eslint-disable-line @typescript-eslint/unbound-method\n\n    // If the specified property is already observed return the value stream that was previously created for this property.\n    if (originalGetAccessor?.__value$) {\n        return originalGetAccessor.__value$;\n    }\n\n    const originalSetAccessor = propertyDescriptor?.set; // eslint-disable-line @typescript-eslint/unbound-method\n\n    const subject = new BehaviorSubject<T[K]>(target[key]);\n    const value$ = subject.asObservable();\n\n    const newGetAccessor: GetAccessorWithValueStream = originalGetAccessor\n        ? () => originalGetAccessor.call(target)\n        : () => subject.getValue();\n\n    newGetAccessor.__value$ = value$;\n\n    Object.defineProperty(target, key, {\n        get: newGetAccessor,\n        set(newValue: T[K]): void {\n\n            if (originalSetAccessor !== undefined) {\n                originalSetAccessor.call(target, newValue);\n            }\n\n            const nextValue = originalGetAccessor ? originalGetAccessor.call(target) : newValue;\n\n            if (nextValue !== subject.getValue()) {\n                subject.next(nextValue);\n            }\n        },\n    });\n\n    return value$;\n}\n\n/**\n * Finds the property descriptor for the property `key` in the specified target. In contrast to `Object.getOwnPropertyDescriptor` this\n * function will descent the prototype hierarchy of the specified target to find the property descriptor, making it suitable for properties\n * that are define through accessor functions on classes.\n *\n * @param target Object that containing the property.\n * @param key    Key of the property whose descriptor is to be retrieved.\n * @returns      The descriptor for the specified property or `undefined` if no such property exists on the target object.\n */\nfunction getPropertyDescriptor(target: unknown, key: PropertyKey): PropertyDescriptor | undefined {\n    if (target === null || target === undefined) {\n        return undefined;\n    }\n\n    const descriptor = Object.getOwnPropertyDescriptor(target, key);\n\n    return descriptor ?? getPropertyDescriptor(Object.getPrototypeOf(target), key);\n}\n","import { Injectable } from '@angular/core';\n\nimport { TranslationMarkupRendererFactory } from '../translation-markup-renderer-factory';\nimport {\n  TokenizeResult, TranslationMarkupTranspiler, TranslationMarkupTranspilerContext, TranspileResult,\n} from '../translation-markup-transpiler.model';\n\n/**\n * Transpiler used to capture literal translation texts. This transpiler will always be used as the last transpiler during the tokenization\n * and transpilation process, so it can catch any character that would otherwise not be transpiled.\n */\n@Injectable({ providedIn: 'root' })\nexport class StringLiteralTranspiler implements TranslationMarkupTranspiler {\n    /**\n     * Creates a new `StringLiteralTranspiler` that uses the specified renderer factory.\n     */\n    constructor(\n        /** Renderer factory used for creating the renderer that renders the literal string text in a text node. */\n        private readonly rendererFactory: TranslationMarkupRendererFactory,\n    ) {}\n\n    /** @inheritdoc */\n    public tokenize(translation: string, offset: number): TokenizeResult | undefined {\n        return {\n            nextOffset: offset + 1,\n            token: translation.charAt(offset),\n        };\n    }\n\n    /** @inheritdoc */\n    public transpile(start: number, { tokens }: TranslationMarkupTranspilerContext): TranspileResult | undefined {\n        let end = start;\n\n        while (end < tokens.length && typeof tokens[end] === 'string') {\n            end++;\n        }\n\n        if (end === start) {\n            return undefined;\n        }\n\n        const stringLiteral = tokens.slice(start, end).join('');\n\n        return {\n            nextOffset: end,\n            renderer: this.rendererFactory.createTextRenderer(stringLiteral),\n        };\n    }\n}\n","import {\n  ChangeDetectionStrategy, Component, ElementRef, Inject, Input, OnDestroy, OnInit, Optional, ViewEncapsulation,\n} from '@angular/core';\nimport {\n  HashMap, InlineLoader, TRANSLOCO_LANG, TRANSLOCO_MISSING_HANDLER, TRANSLOCO_SCOPE, Translation, TranslocoMissingHandler, TranslocoScope,\n  TranslocoService, getPipeValue,\n} from '@jsverse/transloco';\nimport {\n  EMPTY, Observable, Subscription, combineLatest, concat, distinctUntilChanged, first, map, of, shareReplay, skip, switchMap,\n} from 'rxjs';\n\nimport { createTranslationMarkupRenderer } from './create-translation-markup-renderer';\nimport { STRING_INTERPOLATION_TRANSPILER } from './string-interpolation-transpiler.token';\nimport { TranslationMarkupTranspiler } from './translation-markup-transpiler.model';\nimport { TRANSLATION_MARKUP_TRANSPILER } from './translation-markup-transpiler.token';\nimport { StringLiteralTranspiler } from './transpilers/string-literal-transpiler';\nimport { RecursiveArray, ScalarOrArray, asArray, asFlatArray } from './utils/array';\nimport { selectFirstWhere } from './utils/iterable';\nimport { observeProperty } from './utils/observe-property';\nimport { notUndefined } from './utils/predicates';\n\n/* eslint-disable @angular-eslint/no-input-rename, @angular-eslint/component-selector, @angular-eslint/use-component-view-encapsulation */\n\n/**\n * Component that supports rendering of translations including HTML markup.\n */\n@Component({\n    selector: 'transloco',\n    template: '',\n    styles: [':host { display: inline; }'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true,\n})\nexport class TranslocoMarkupComponent implements OnInit, OnDestroy {\n    /**\n     * Key of the translation text that needs to be displayed. If no value is specified, then the value of the `content` property will be\n     * used as the translation value. When that property is also unspecified, this component will render an empty element. */\n    @Input('key') public translationKey?: string;\n\n    /** Translated text to display. Note that this property will be ignored if a `translationKey` is specified. */\n    @Input() public content?: string;\n\n    /** Optional object that contains the values to be used for parameterized translation texts. */\n    @Input('params') public translationParameters?: HashMap;\n\n    /** Language in which the text is the displayed. Overrides the provided language and language set using the translation service. */\n    @Input('lang') public inlineLanguage?: string;\n\n    /** Optional translation scope. */\n    @Input('scope') public inlineScope?: string;\n\n    /** Transpilers used to parse and render translation texts with markup. Merged with the provided transpilers. */\n    @Input('transpilers') public inlineTranspilers?: ScalarOrArray<TranslationMarkupTranspiler>;\n\n    /** Whether the inline transpilers should be merged with the provided ones. If set to `false` only the inline transpilers are used. */\n    @Input() public mergeTranspilers?: boolean;\n\n    /** Root subscription to which all subscriptions are added that depend on the life cycle of the component instance. */\n    private readonly subscriptions = new Subscription();\n\n    /**\n     * Creates a new `TranslocoMarkupComponent` instance.\n     */\n    constructor(\n        /** Reference to the element which serves as the host for the component instance. */\n        private readonly hostElement: ElementRef<HTMLElement>,\n\n        /** `TranslocoService` instance that is to be used for loading translations and obtaining the Transloco configuration. */\n        private readonly translocoService: TranslocoService,\n\n        /** Handler used for translation keys for which no translation value is defined in the active language. */\n        @Inject(TRANSLOCO_MISSING_HANDLER) private readonly missingHandler: TranslocoMissingHandler,\n\n        /** Translation scope that is provided via the module/component injectors. */\n        @Optional() @Inject(TRANSLOCO_SCOPE) private readonly providedScope: ScalarOrArray<TranslocoScope> | null,\n\n        /** Language that is provided via the module/component injectors. */\n        @Optional() @Inject(TRANSLOCO_LANG) private readonly providedLanguage: string | null,\n\n        /** Markup transpilers provided via the module/component injectors. */\n        @Optional() @Inject(TRANSLATION_MARKUP_TRANSPILER)\n        private readonly providedTranspilers: RecursiveArray<TranslationMarkupTranspiler> | null,\n\n        /** Transpiler that is used for expanding string interpolation expressions. */\n        @Inject(STRING_INTERPOLATION_TRANSPILER) private readonly stringInterpolationTranspiler: TranslationMarkupTranspiler,\n\n        /** Transpiler used for rendering all unprocessed tokens in the translation values as literal text. */\n        private readonly stringLiteralTranspiler: StringLiteralTranspiler,\n    ) {}\n\n    /**\n     * Initializes the component. When this method is called it starts listening for input property changes on the component and language\n     * changes from the `TranslocoService`. This results in a stream containing the rendering function, which is executed for every change\n     * to render the translation text including markup to the host element of the component instance.\n     */\n    public ngOnInit(): void {\n        const translationKey$ = observeProperty(this as TranslocoMarkupComponent, 'translationKey');\n        const content$ = observeProperty(this as TranslocoMarkupComponent, 'content');\n        const translationParameters$ = observeProperty(this as TranslocoMarkupComponent, 'translationParameters');\n        const inlineLanguage$ = observeProperty(this as TranslocoMarkupComponent, 'inlineLanguage');\n        const inlineScope$ = observeProperty(this as TranslocoMarkupComponent, 'inlineScope');\n        const inlineTranspilers$ = observeProperty(this as TranslocoMarkupComponent, 'inlineTranspilers');\n        const mergeTranspilers$ = observeProperty(this as TranslocoMarkupComponent, 'mergeTranspilers').pipe(\n            map((mergeTranspilers) => mergeTranspilers !== false),\n        );\n\n        // Create the language$ stream that defines which in what language the translation text should be displayed.\n        const langChanges$ = this.translocoService.langChanges$;\n\n        const activeLanguage$ = this.translocoService.config.reRenderOnLangChange ? langChanges$ : langChanges$.pipe(\n            first(),\n            shareReplay({ bufferSize: 1, refCount: true }),\n        );\n\n        const language$ = resolveLanguage(inlineLanguage$, of(this.providedLanguage ?? undefined), activeLanguage$);\n\n        // Create the scope$ stream that emits an array of scopes to be used for resolving the translation text.\n        const scopes$ = inlineScope$.pipe(\n            map((inlineScope) => inlineScope ? inlineScope : this.providedScope),\n            distinctUntilChanged(),\n            map((scope) => Array.isArray(scope) ? scope : [scope ? scope : undefined]),\n        );\n\n        // Using the language$ and scope$ stream obtain the translation$ stream that emits the translation dictionary to use.\n        const translation$ = combineLatest([language$, scopes$]).pipe(\n            switchMap(([language, scopes]) =>\n                combineLatest(scopes.map((scope) => {\n                    const scopeName = getScopeName(scope);\n                    const path = getLanguagePath(language, scopeName);\n                    const inlineLoader = getScopeInlineLoader(scope);\n\n                    return this.translocoService._loadDependencies(path, inlineLoader);\n                })).pipe(\n                    map(() => this.translocoService.getTranslation(language)),\n                ),\n            ),\n        );\n\n        // Define the translationValue$ stream that emits the (unparsed) translation text that is to be displayed.\n        const translationValue$ = combineLatest([translationKey$, content$, translation$]).pipe(\n            map(([key, content, translation]) => {\n                if (key === undefined) {\n                    return { value: content ?? '', translation };\n                }\n\n                const useFallbackTranslation = this.translocoService.config.missingHandler.useFallbackTranslation;\n                const firstFallbackLanguage = asArray(this.translocoService.config.fallbackLang ?? [])[0];\n                const fallbackTranslation =\n                    useFallbackTranslation && firstFallbackLanguage ? [this.translocoService.getTranslation(firstFallbackLanguage)] : [];\n\n                return this.getTranslationValue(key, [translation, ...fallbackTranslation]);\n            }),\n        );\n\n        // Create the transpilers$ stream based on the inline providers, the provided providers and the merge transpilers setting.\n        const transpilers$ = combineLatest([inlineTranspilers$, mergeTranspilers$]).pipe(\n            map(([inlineTranspilers, mergeTranspilers]) => [\n                ...(inlineTranspilers ? asArray(inlineTranspilers) : []),\n                ...(this.providedTranspilers && (!inlineTranspilers || mergeTranspilers) ? asFlatArray(this.providedTranspilers) : []),\n                this.stringInterpolationTranspiler,\n                this.stringLiteralTranspiler,\n            ]),\n        );\n\n        // Finally we can create the render$ stream that emits the rendering function based on the translation text and the tranpilers.\n        const render$ = combineLatest([translationValue$, transpilers$]).pipe(\n            map(([{ translation, value }, transpilers]) => createTranslationMarkupRenderer(value, transpilers, translation)),\n        );\n\n        // By combining the render$ and translationParameters$ stream the component can render the translation whenever something changes.\n        this.subscriptions.add(combineLatest([render$, translationParameters$]).subscribe(\n            ([render, translationParameters]) => render(this.hostElement.nativeElement, translationParameters ?? {}),\n        ));\n    }\n\n    /**\n     * Called when the component is destroyed. Will cleanup any active subscriptions.\n     */\n    public ngOnDestroy(): void {\n        this.subscriptions.unsubscribe();\n    }\n\n    /**\n     * Determines the translation value for the specified `key` and `translations`. Will return the first value of a translation which\n     * contains the specified key. If no such translation exists, the `TranslocoMissingHandler` is used to obtain a value. For translations\n     * where the value is an empty string the `TranslocoMissingHandler` is also used to determine if such values are allowed. If so, the\n     * function will also return an empty string as translation value. When empty values are not allowed these will be considered as a\n     * missing translation value for the tested translation.\n     *\n     * @param   key          Key for which the translation value is to be retrieved.\n     * @param   translations Set of translations which are to be checked for the translation value identified by `key` parameter.\n     * @returns              An object that defines the translation value and the translation dictionary containing the value.\n     */\n    private getTranslationValue(key: string, translations: Translation[]): { value: string; translation: Translation } {\n        const allowEmptyValues = this.translocoService.config.missingHandler.allowEmpty;\n\n        // Find the first translation containing the specified translation key and obtain the translation value.\n        const result = selectFirstWhere(\n            translations,\n            (translation) => {\n                const value: unknown = translation[key];\n\n                if (value === undefined || value === '' && !allowEmptyValues) {\n                    return undefined;\n                }\n\n                return { value: String(value), translation };\n            },\n            notUndefined,\n        );\n\n        // Return the result or invoke the missing handler if no translation value was found in the specified translations.\n        return result ?? {\n            value: String(this.missingHandler.handle(\n                key,\n                {\n                    activeLang: this.translocoService.getActiveLang(),\n                    ...this.translocoService.config,\n                },\n            )),\n            translation: translations[0] ?? {},\n        };\n    }\n}\n\n/**\n * Determines which language should be active given a sequence of streaming language specifiers. The active languages is resolved based on\n * the order of the language specifiers where the first non `undefined` language is emitted. If that language specifier does not specify a\n * static language (e.g. `'en|static'`), any changes from the downstream language specifiers will be allowed to 'override' the active\n * language.\n *\n * @param   languageSpecifiers An array of language specifier streams.\n * @returns                    An observable that emits the active language based in the language specifiers.\n */\nfunction resolveLanguage(...languageSpecifiers: Observable<string | undefined>[]): Observable<string> {\n    return languageSpecifiers.reduceRight<Observable<string>>(\n        (downstreamLanguage$, languageSpecifier$) => languageSpecifier$.pipe(switchMap((languageSpecifier) => {\n            if (languageSpecifier === undefined) {\n                return downstreamLanguage$;\n            }\n\n            const [isStatic, language] = getPipeValue(languageSpecifier, 'static');\n\n            return concat(\n                of(language),\n                isStatic ? EMPTY : downstreamLanguage$.pipe(skip(1)),\n            );\n        })),\n        of(''),\n    ).pipe(distinctUntilChanged());\n}\n\n/**\n * Retrieves the name of the specified Transloco scope.\n *\n * @param   scope Scope for which the name is to be returned.\n * @returns       Name of the specified scope or `undefined` if the scope itself is `undefined`.\n */\nfunction getScopeName(scope: TranslocoScope): string | undefined {\n    return typeof scope === 'object' ? scope.scope : scope;\n}\n/**\n * Determines the language path for the specified language and (optional) scope.\n *\n * @param  language Language identifier.\n * @param  scope    Scope name (optional).\n * @return          Language path.\n */\nfunction getLanguagePath(language: string, scope?: string): string {\n    return scope ? `${scope}/${language}` : language;\n}\n\n/**\n * Determines the `InlineLoader` for the specified scope (if it is defined).\n *\n * @param   scope Scope for which the `InlineLoader` is to be determined.\n * @returns       Inline loader for the specified scope or `undefined` if the scope does not define one.\n */\nfunction getScopeInlineLoader(scope: TranslocoScope): InlineLoader | undefined {\n    return typeof scope === 'object' ? scope.loader : undefined;\n}\n","import { NgModule } from '@angular/core';\n\nimport { TranslocoMarkupComponent } from './transloco-markup.component';\n\n/**\n * Module which exports the `<transloco>` markup component.\n */\n@NgModule({\n    imports: [TranslocoMarkupComponent],\n    exports: [TranslocoMarkupComponent],\n})\nexport class TranslocoMarkupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TranslationMarkupRendererFactory","i2.StringLiteralTranspiler"],"mappings":"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"}