{"version":3,"file":"tolgee-web.production.umd.cjs","sources":["../../core/dist/tolgee.esm.js","../src/package/constants.ts","../src/package/tools/isSSR.ts","../src/package/observers/general/DomHelper.ts","../src/package/observers/general/ElementMeta.ts","../src/package/observers/general/helpers.ts","../src/package/observers/general/ElementHighlighter.ts","../src/package/observers/general/MouseEventHandler.ts","../src/package/observers/general/ElementRegistry.ts","../src/package/observers/general/ElementStore.ts","../src/package/observers/general/NodeHandler.ts","../src/package/observers/general/GeneralObserver.ts","../../../node_modules/.pnpm/fast-text-encoding@1.0.6/node_modules/fast-text-encoding/text.min.js","../src/package/observers/invisible/secret.ts","../src/package/observers/invisible/ValueMemory.ts","../src/package/observers/invisible/InvisibleWrapper.ts","../src/package/InvisibleObserver.ts","../src/package/observers/text/helpers.ts","../src/package/observers/text/TextWrapper.ts","../src/package/TextObserver.ts","../src/package/ObserverPlugin.ts","../src/package/tools/decodeApiKey.ts","../src/package/tools/url.ts","../src/package/DevBackend.ts","../src/package/tools/extension.ts","../src/package/BrowserExtensionPlugin/constants.ts","../src/package/BrowserExtensionPlugin/loadInContextLib.ts","../src/package/BrowserExtensionPlugin/BrowserExtensionPlugin.ts","../src/package/LanguageStorage.ts","../src/package/LanguageDetector.ts","../src/package/tools/getHeaderLanguages.ts","../src/package/tools/detectLanguageFromHeaders.ts","../src/package/BackendFetch.ts","../src/package/Tolgee.ts","../src/package/entry-production.ts"],"sourcesContent":["function isPromise(value) {\n    return Boolean(value && typeof value.then === 'function');\n}\nfunction valueOrPromise(value, callback) {\n    if (isPromise(value)) {\n        return Promise.resolve(value).then(callback);\n    }\n    else {\n        return callback(value);\n    }\n}\nfunction handleRegularOrAsyncErr(onError, createError, callback) {\n    function handle(e) {\n        const error = createError(e);\n        onError.emit(error);\n        // eslint-disable-next-line no-console\n        console.error(error);\n        throw error;\n    }\n    try {\n        const result = callback();\n        if (isPromise(result)) {\n            return result.catch(handle);\n        }\n        return result;\n    }\n    catch (e) {\n        handle(e);\n    }\n}\nfunction missingOptionError(option) {\n    const options = (Array.isArray(option) ? option : [option]).map((val) => `'${val}'`);\n    const lastPart = options.slice(-2).join(' or ');\n    const firstPart = options.slice(0, -2);\n    const stringifiedOptions = [...firstPart, lastPart].join(', ');\n    return `Tolgee: You need to specify ${stringifiedOptions} option`;\n}\nfunction isObject(item) {\n    return typeof item === 'object' && !Array.isArray(item) && item !== null;\n}\nfunction getFallback(value) {\n    if (typeof value === 'string') {\n        return [value];\n    }\n    if (Array.isArray(value)) {\n        return value;\n    }\n    return undefined;\n}\nfunction getFallbackArray(value) {\n    return getFallback(value) || [];\n}\nfunction getFallbackFromStruct(language, fallbackLanguage) {\n    if (isObject(fallbackLanguage)) {\n        return getFallbackArray(fallbackLanguage === null || fallbackLanguage === void 0 ? void 0 : fallbackLanguage[language]);\n    }\n    else {\n        return getFallbackArray(fallbackLanguage);\n    }\n}\nfunction unique(arr) {\n    return Array.from(new Set(arr));\n}\nfunction sanitizeUrl(url) {\n    return url ? url.replace(/\\/+$/, '') : url;\n}\nfunction getErrorMessage(error) {\n    if (typeof error === 'string') {\n        return error;\n    }\n    else if (typeof (error === null || error === void 0 ? void 0 : error.message) === 'string') {\n        return error.message;\n    }\n}\nconst defaultFetchFunction = (input, options) => fetch(input, options);\nfunction headersInitToRecord(headersInit) {\n    return Object.fromEntries(new Headers(headersInit).entries());\n}\nconst createFetchFunction = (fetchFn = defaultFetchFunction) => {\n    return (input, init) => {\n        let headers = headersInitToRecord(init === null || init === void 0 ? void 0 : init.headers);\n        if (headers['x-api-key']) {\n            headers = Object.assign({ 'x-tolgee-sdk-type': 'JS', 'x-tolgee-sdk-version': 'prerelease' }, headers);\n        }\n        return fetchFn(input, Object.assign(Object.assign({}, init), { headers }));\n    };\n};\n\nconst EventEmitter = (type, isActive) => {\n    let handlers = [];\n    return {\n        listen(handler) {\n            const handlerWrapper = (e) => {\n                handler(e);\n            };\n            handlers.push(handlerWrapper);\n            return {\n                unsubscribe() {\n                    handlers = handlers.filter((i) => handlerWrapper !== i);\n                },\n            };\n        },\n        emit(data) {\n            if (isActive()) {\n                handlers.forEach((handler) => handler({ type: type, value: data }));\n            }\n        },\n    };\n};\n\nfunction EventEmitterCombined(isActive) {\n    let handlers = [];\n    let queue = [];\n    // merge events in queue into one event\n    function solveQueue() {\n        if (queue.length === 0) {\n            return;\n        }\n        const queueCopy = queue;\n        queue = [];\n        handlers.forEach((handler) => {\n            handler(queueCopy);\n        });\n    }\n    return Object.freeze({\n        listen(handler) {\n            const handlerWrapper = (events) => {\n                handler(events);\n            };\n            handlers.push(handlerWrapper);\n            return {\n                unsubscribe() {\n                    handlers = handlers.filter((i) => handlerWrapper !== i);\n                },\n            };\n        },\n        emit(e, delayed) {\n            if (isActive()) {\n                if (isActive()) {\n                    queue.push(e);\n                    if (!delayed) {\n                        solveQueue();\n                    }\n                    else {\n                        setTimeout(solveQueue, 0);\n                    }\n                }\n            }\n        },\n    });\n}\n\nfunction Events() {\n    let emitterActive = true;\n    function isActive() {\n        return emitterActive;\n    }\n    const self = Object.freeze({\n        onPendingLanguageChange: EventEmitter('pendingLanguage', isActive),\n        onLanguageChange: EventEmitter('language', isActive),\n        onLoadingChange: EventEmitter('loading', isActive),\n        onFetchingChange: EventEmitter('fetching', isActive),\n        onInitialLoaded: EventEmitter('initialLoad', isActive),\n        onRunningChange: EventEmitter('running', isActive),\n        onCacheChange: EventEmitter('cache', isActive),\n        onPermanentChange: EventEmitter('permanentChange', isActive),\n        onError: EventEmitter('error', isActive),\n        onUpdate: EventEmitterCombined(isActive),\n        setEmitterActive(active) {\n            emitterActive = active;\n        },\n        on: ((event, handler) => {\n            switch (event) {\n                case 'pendingLanguage':\n                    return self.onPendingLanguageChange.listen(handler);\n                case 'language':\n                    return self.onLanguageChange.listen(handler);\n                case 'loading':\n                    return self.onLoadingChange.listen(handler);\n                case 'fetching':\n                    return self.onFetchingChange.listen(handler);\n                case 'initialLoad':\n                    return self.onInitialLoaded.listen(handler);\n                case 'running':\n                    return self.onRunningChange.listen(handler);\n                case 'cache':\n                    return self.onCacheChange.listen(handler);\n                case 'update':\n                    return self.onUpdate.listen(handler);\n                case 'permanentChange':\n                    return self.onPermanentChange.listen(handler);\n                case 'error':\n                    return self.onError.listen(handler);\n            }\n        }),\n    });\n    self.onInitialLoaded.listen((e) => self.onUpdate.emit(e, false));\n    self.onLanguageChange.listen((e) => self.onUpdate.emit(e, false));\n    self.onCacheChange.listen((e) => self.onUpdate.emit(e, true));\n    return self;\n}\n\nclass RecordFetchError extends Error {\n    constructor(descriptor, cause, isDev = false) {\n        const { language, namespace } = descriptor;\n        super(`Tolgee: Failed to fetch record for \"${language}\"${namespace && ` and \"${namespace}\"`}`);\n        this.cause = cause;\n        this.isDev = isDev;\n        this.name = 'RecordFetchError';\n        this.language = language;\n        this.namespace = namespace;\n    }\n}\nclass LanguageDetectorError extends Error {\n    constructor(message, cause) {\n        super(message);\n        this.cause = cause;\n        this.name = 'LanguageDetectorError';\n    }\n}\nclass LanguageStorageError extends Error {\n    constructor(message, cause) {\n        super(message);\n        this.cause = cause;\n        this.name = 'LanguageStorageError';\n    }\n}\n\nconst flattenTranslationsToMap = (data) => {\n    const result = new Map();\n    Object.entries(data).forEach(([key, value]) => {\n        // ignore empty values\n        if (value === undefined || value === null) {\n            return;\n        }\n        if (typeof value === 'object') {\n            flattenTranslationsToMap(value).forEach((flatValue, flatKey) => {\n                result.set(key + '.' + flatKey, flatValue);\n            });\n            return;\n        }\n        result.set(key, value);\n    });\n    return result;\n};\nconst flattenTranslations = (data) => {\n    return Object.fromEntries(flattenTranslationsToMap(data).entries());\n};\nconst decodeCacheKey = (key) => {\n    const [firstPart, ...rest] = key.split(':');\n    // if namespaces contains \":\" it won't get lost\n    const secondPart = rest.join(':');\n    return { language: firstPart, namespace: secondPart || '' };\n};\nconst encodeCacheKey = ({ language, namespace, }) => {\n    if (namespace) {\n        return `${language}:${namespace}`;\n    }\n    else {\n        return language;\n    }\n};\n\nfunction Cache(events, backendGetRecord, backendGetDevRecord, withDefaultNs, isInitialLoading, fetchingObserver, loadingObserver) {\n    const asyncRequests = new Map();\n    const cache = new Map();\n    let staticData = {};\n    let version = 0;\n    function addRecordInternal(descriptor, data, recordVersion) {\n        const cacheKey = encodeCacheKey(descriptor);\n        cache.set(cacheKey, {\n            data: flattenTranslations(data),\n            version: recordVersion,\n        });\n        events.onCacheChange.emit(decodeCacheKey(cacheKey));\n    }\n    /**\n     * Fetches production data\n     */\n    async function fetchProd(keyObject) {\n        function handleError(e) {\n            const error = new RecordFetchError(keyObject, e);\n            events.onError.emit(error);\n            // eslint-disable-next-line no-console\n            console.error(error);\n            throw error;\n        }\n        const dataFromBackend = backendGetRecord(keyObject);\n        if (isPromise(dataFromBackend)) {\n            const result = await dataFromBackend.catch(handleError);\n            if (result !== undefined) {\n                return result;\n            }\n        }\n        const staticDataValue = staticData[encodeCacheKey(keyObject)];\n        if (typeof staticDataValue === 'function') {\n            try {\n                return await staticDataValue();\n            }\n            catch (e) {\n                handleError(e);\n            }\n        }\n        else {\n            return staticDataValue;\n        }\n    }\n    async function fetchData(keyObject, isDev) {\n        let result = undefined;\n        if (isDev) {\n            try {\n                result = await backendGetDevRecord(keyObject);\n            }\n            catch (e) {\n                const error = new RecordFetchError(keyObject, e, true);\n                events.onError.emit(error);\n                // eslint-disable-next-line no-console\n                console.warn(error);\n            }\n        }\n        if (!result) {\n            result = await fetchProd(keyObject);\n        }\n        return result;\n    }\n    const self = Object.freeze({\n        addStaticData(data) {\n            if (Array.isArray(data)) {\n                for (const record of data) {\n                    const key = encodeCacheKey(record);\n                    const existing = cache.get(key);\n                    if (!existing || existing.version === 0) {\n                        addRecordInternal(record, flattenTranslations(record.data), 0);\n                    }\n                }\n            }\n            else if (data) {\n                staticData = Object.assign(Object.assign({}, staticData), data);\n                Object.entries(data).forEach(([key, value]) => {\n                    if (typeof value !== 'function') {\n                        const descriptor = decodeCacheKey(key);\n                        const existing = cache.get(key);\n                        if (!existing || existing.version === 0) {\n                            addRecordInternal(descriptor, flattenTranslations(value), 0);\n                        }\n                    }\n                });\n            }\n        },\n        invalidate() {\n            asyncRequests.clear();\n            version += 1;\n        },\n        addRecord(descriptor, data) {\n            addRecordInternal(descriptor, flattenTranslations(data), version);\n        },\n        exists(descriptor, strict = false) {\n            const record = cache.get(encodeCacheKey(descriptor));\n            if (record && strict) {\n                return record.version === version;\n            }\n            return Boolean(record);\n        },\n        getRecord(descriptor) {\n            const descriptorWithNs = withDefaultNs(descriptor);\n            const cacheKey = encodeCacheKey(descriptorWithNs);\n            const cacheRecord = cache.get(cacheKey);\n            if (!cacheRecord) {\n                return undefined;\n            }\n            return Object.assign(Object.assign({}, descriptorWithNs), { cacheKey, data: cacheRecord.data });\n        },\n        getAllRecords() {\n            const entries = Array.from(cache.entries());\n            return entries.map(([key]) => self.getRecord(decodeCacheKey(key)));\n        },\n        getTranslation(descriptor, key) {\n            var _a;\n            return (_a = cache.get(encodeCacheKey(descriptor))) === null || _a === void 0 ? void 0 : _a.data[key];\n        },\n        getTranslationNs(namespaces, languages, key) {\n            var _a;\n            for (const namespace of namespaces) {\n                for (const language of languages) {\n                    const value = (_a = cache.get(encodeCacheKey({ language, namespace }))) === null || _a === void 0 ? void 0 : _a.data[key];\n                    if (value !== undefined && value !== null) {\n                        return [namespace];\n                    }\n                }\n            }\n            return unique(namespaces);\n        },\n        getTranslationFallback(namespaces, languages, key) {\n            var _a;\n            for (const namespace of namespaces) {\n                for (const language of languages) {\n                    const value = (_a = cache.get(encodeCacheKey({ language, namespace }))) === null || _a === void 0 ? void 0 : _a.data[key];\n                    if (value !== undefined && value !== null) {\n                        return value;\n                    }\n                }\n            }\n            return undefined;\n        },\n        changeTranslation(descriptor, key, value) {\n            var _a;\n            const record = (_a = cache.get(encodeCacheKey(descriptor))) === null || _a === void 0 ? void 0 : _a.data;\n            if (record) {\n                record[key] = value;\n                events.onCacheChange.emit(Object.assign(Object.assign({}, descriptor), { key }));\n            }\n        },\n        isFetching(ns) {\n            if (isInitialLoading()) {\n                return true;\n            }\n            if (ns === undefined) {\n                return asyncRequests.size > 0;\n            }\n            const namespaces = getFallbackArray(ns);\n            return Boolean(Array.from(asyncRequests.keys()).find((key) => namespaces.includes(decodeCacheKey(key).namespace)));\n        },\n        isLoading(language, ns) {\n            const namespaces = getFallbackArray(ns);\n            if (isInitialLoading()) {\n                return true;\n            }\n            const pendingCacheKeys = Array.from(asyncRequests.keys());\n            return Boolean(pendingCacheKeys.find((key) => {\n                const descriptor = decodeCacheKey(key);\n                return ((!namespaces.length || namespaces.includes(descriptor.namespace)) &&\n                    !self.exists({\n                        namespace: descriptor.namespace,\n                        language: language,\n                    }));\n            }));\n        },\n        async loadRecords(descriptors, options) {\n            const withPromises = descriptors.map((descriptor) => {\n                const keyObject = withDefaultNs(descriptor);\n                const cacheKey = encodeCacheKey(keyObject);\n                if (options === null || options === void 0 ? void 0 : options.useCache) {\n                    const exists = self.exists(keyObject, true);\n                    if (exists) {\n                        return Object.assign(Object.assign({}, keyObject), { new: false, cacheKey, data: self.getRecord(keyObject).data });\n                    }\n                }\n                const existingPromise = asyncRequests.get(cacheKey);\n                if (existingPromise) {\n                    return Object.assign(Object.assign({}, keyObject), { new: false, promise: existingPromise, cacheKey });\n                }\n                const dataPromise = fetchData(keyObject, !(options === null || options === void 0 ? void 0 : options.noDev)) || Promise.resolve(undefined);\n                asyncRequests.set(cacheKey, dataPromise);\n                return Object.assign(Object.assign({}, keyObject), { new: true, promise: dataPromise, cacheKey });\n            });\n            fetchingObserver.notify();\n            loadingObserver.notify();\n            const promisesToWait = withPromises\n                .map((val) => val.promise)\n                .filter(Boolean);\n            const fetchedData = await Promise.all(promisesToWait);\n            withPromises.forEach((value) => {\n                var _a;\n                if (value.promise) {\n                    value.data = flattenTranslations((_a = fetchedData[0]) !== null && _a !== void 0 ? _a : {});\n                    fetchedData.shift();\n                }\n                // if promise has changed in between, it means cache been invalidated or\n                // new data are being fetched\n                const promiseChanged = asyncRequests.get(value.cacheKey) !== value.promise;\n                if (value.new && !promiseChanged) {\n                    asyncRequests.delete(value.cacheKey);\n                    if (value.data) {\n                        self.addRecord(value, value.data);\n                    }\n                    else if (!self.getRecord(value)) {\n                        // if no data exist, put empty object\n                        // so we know we don't have to fetch again\n                        self.addRecord(value, {});\n                    }\n                }\n            });\n            fetchingObserver.notify();\n            loadingObserver.notify();\n            return withPromises.map((val) => {\n                var _a;\n                return ({\n                    language: val.language,\n                    namespace: val.namespace,\n                    data: (_a = val.data) !== null && _a !== void 0 ? _a : {},\n                    cacheKey: val.cacheKey,\n                });\n            });\n        },\n    });\n    return self;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\n\nconst defaultObserverOptions = {\n    tagAttributes: {\n        textarea: ['placeholder'],\n        input: ['value', 'placeholder'],\n        img: ['alt'],\n        '*': ['aria-label', 'title'],\n    },\n    restrictedElements: ['script', 'style'],\n    highlightKeys: ['Alt'],\n    highlightColor: 'rgb(255, 0, 0)',\n    highlightWidth: 5,\n    inputPrefix: '%-%tolgee:',\n    inputSuffix: '%-%',\n    passToParent: ['option', 'optgroup'],\n    fullKeyEncode: false,\n};\n\nconst DEFAULT_FORMAT_ERROR = 'invalid';\nconst DEFAULT_API_URL = 'https://app.tolgee.io';\nconst DEFAULT_MISSING_TRANSLATION = ({ key, }) => key;\nconst defaultValues = {\n    observerOptions: defaultObserverOptions,\n    observerType: 'invisible',\n    onFormatError: DEFAULT_FORMAT_ERROR,\n    apiUrl: DEFAULT_API_URL,\n    autoLoadRequiredData: true,\n    fetch: createFetchFunction(),\n    onTranslationMissing: DEFAULT_MISSING_TRANSLATION,\n};\nconst combineOptions = (...states) => {\n    let result = {};\n    states.forEach((state) => {\n        result = Object.assign(Object.assign(Object.assign({}, result), state), { observerOptions: Object.assign(Object.assign({}, result.observerOptions), state === null || state === void 0 ? void 0 : state.observerOptions) });\n    });\n    return result;\n};\nfunction initState(options, previousState) {\n    const initialOptions = combineOptions(defaultValues, previousState === null || previousState === void 0 ? void 0 : previousState.initialOptions, options);\n    // remove extra '/' from url end\n    initialOptions.apiUrl = sanitizeUrl(initialOptions.apiUrl);\n    if (options === null || options === void 0 ? void 0 : options.fetch) {\n        initialOptions.fetch = createFetchFunction(options.fetch);\n    }\n    return {\n        initialOptions,\n        activeNamespaces: (previousState === null || previousState === void 0 ? void 0 : previousState.activeNamespaces) || new Map(),\n        language: previousState === null || previousState === void 0 ? void 0 : previousState.language,\n        pendingLanguage: previousState === null || previousState === void 0 ? void 0 : previousState.language,\n        isInitialLoading: false,\n        isRunning: false,\n    };\n}\n\nfunction Plugins(getLanguage, getInitialOptions, getAvailableLanguages, getFallbackNamespaces, getTranslationNs, getTranslation, changeTranslation, events) {\n    const plugins = {\n        ui: undefined,\n    };\n    const instances = {\n        formatters: [],\n        finalFormatter: undefined,\n        observer: undefined,\n        devBackend: undefined,\n        backends: [],\n        ui: undefined,\n        languageDetector: undefined,\n        languageStorage: undefined,\n    };\n    const onClick = async ({ keysAndDefaults, target }) => {\n        var _a;\n        const withNs = keysAndDefaults.map(({ key, ns, defaultValue }) => {\n            return {\n                key,\n                defaultValue,\n                fallbackNamespaces: getFallbackNamespaces(ns),\n                namespace: getTranslationNs({ key, ns })[0],\n                translation: getTranslation({\n                    key,\n                    ns,\n                }),\n            };\n        });\n        (_a = instances.ui) === null || _a === void 0 ? void 0 : _a.handleElementClick(withNs, target);\n    };\n    const findPositions = (key, ns) => {\n        var _a;\n        return ((_a = instances.observer) === null || _a === void 0 ? void 0 : _a.findPositions(key, ns)) || [];\n    };\n    function translate(props) {\n        const translation = getTranslation({\n            key: props.key,\n            ns: props.ns,\n        });\n        return self.formatTranslation(Object.assign(Object.assign({}, props), { translation, formatEnabled: true }));\n    }\n    function getCommonProps() {\n        return { fetch: getInitialOptions().fetch };\n    }\n    function setObserver(observer) {\n        instances.observer = observer === null || observer === void 0 ? void 0 : observer();\n    }\n    function hasObserver() {\n        return Boolean(instances.observer);\n    }\n    function addFormatter(formatter) {\n        if (formatter) {\n            instances.formatters.push(formatter);\n        }\n    }\n    function setFinalFormatter(formatter) {\n        instances.finalFormatter = formatter;\n    }\n    function setUi(ui) {\n        plugins.ui = ui;\n    }\n    function hasUi() {\n        return Boolean(plugins.ui);\n    }\n    function setLanguageStorage(storage) {\n        instances.languageStorage = storage;\n    }\n    function setLanguageDetector(detector) {\n        instances.languageDetector = detector;\n    }\n    function storageLoadLanguage() {\n        return handleRegularOrAsyncErr(events.onError, (e) => new LanguageStorageError('Tolgee: Failed to load language', e), () => { var _a; return (_a = instances.languageStorage) === null || _a === void 0 ? void 0 : _a.getLanguage(getCommonProps()); });\n    }\n    function detectLanguage() {\n        if (!instances.languageDetector) {\n            return undefined;\n        }\n        const availableLanguages = getAvailableLanguages();\n        return handleRegularOrAsyncErr(events.onError, (e) => new LanguageDetectorError('Tolgee: Failed to detect language', e), () => {\n            var _a;\n            return (_a = instances.languageDetector) === null || _a === void 0 ? void 0 : _a.getLanguage(Object.assign({ availableLanguages }, getCommonProps()));\n        });\n    }\n    function addBackend(backend) {\n        if (backend) {\n            instances.backends.push(backend);\n        }\n    }\n    function setDevBackend(backend) {\n        instances.devBackend = backend;\n    }\n    function addPlugin(tolgeeInstance, plugin) {\n        const pluginTools = Object.freeze({\n            setFinalFormatter,\n            addFormatter,\n            setObserver,\n            hasObserver,\n            setUi,\n            hasUi,\n            setDevBackend,\n            addBackend,\n            setLanguageDetector,\n            setLanguageStorage,\n        });\n        plugin(tolgeeInstance, pluginTools);\n    }\n    const self = Object.freeze({\n        addPlugin,\n        findPositions: findPositions,\n        run() {\n            var _a, _b;\n            const { apiKey, apiUrl, projectId, branch, observerOptions, tagNewKeys, filterTag, } = getInitialOptions();\n            instances.ui = (_a = plugins.ui) === null || _a === void 0 ? void 0 : _a.call(plugins, {\n                apiKey: apiKey,\n                apiUrl: apiUrl,\n                projectId,\n                branch,\n                highlight: self.highlight,\n                changeTranslation,\n                findPositions,\n                onPermanentChange: (data) => events.onPermanentChange.emit(data),\n                tagNewKeys,\n                filterTag,\n            });\n            (_b = instances.observer) === null || _b === void 0 ? void 0 : _b.run({\n                mouseHighlight: Boolean(instances.ui),\n                options: observerOptions,\n                translate,\n                onClick,\n            });\n        },\n        stop() {\n            var _a;\n            instances.ui = undefined;\n            (_a = instances.observer) === null || _a === void 0 ? void 0 : _a.stop();\n        },\n        getLanguageStorage() {\n            return instances.languageStorage;\n        },\n        getInitialLanguage() {\n            const availableLanguages = getAvailableLanguages();\n            const languageOrPromise = storageLoadLanguage();\n            return valueOrPromise(languageOrPromise, (language) => {\n                if ((!availableLanguages || availableLanguages.includes(language)) &&\n                    language) {\n                    return language;\n                }\n                return detectLanguage();\n            });\n        },\n        setStoredLanguage(language) {\n            return handleRegularOrAsyncErr(events.onError, (e) => new LanguageStorageError('Tolgee: Failed to store language', e), () => { var _a; return (_a = instances.languageStorage) === null || _a === void 0 ? void 0 : _a.setLanguage(language, getCommonProps()); });\n        },\n        getDevBackend() {\n            return instances.devBackend;\n        },\n        getBackendRecord: (async ({ language, namespace }) => {\n            for (const backend of instances.backends) {\n                const data = await backend.getRecord(Object.assign({ language,\n                    namespace }, getCommonProps()));\n                if (data !== undefined) {\n                    return data;\n                }\n            }\n            return undefined;\n        }),\n        getBackendDevRecord: (async ({ language, namespace }) => {\n            var _a;\n            const { apiKey, apiUrl, projectId, branch, filterTag } = getInitialOptions();\n            if (!apiKey || !apiUrl || !self.hasDevBackend()) {\n                return undefined;\n            }\n            return (_a = instances.devBackend) === null || _a === void 0 ? void 0 : _a.getRecord(Object.assign({ apiKey,\n                apiUrl,\n                projectId,\n                branch,\n                language,\n                namespace,\n                filterTag }, getCommonProps()));\n        }),\n        getLanguageDetector() {\n            return instances.languageDetector;\n        },\n        retranslate() {\n            var _a;\n            (_a = instances.observer) === null || _a === void 0 ? void 0 : _a.retranslate();\n        },\n        highlight: ((key, ns) => {\n            var _a, _b;\n            return ((_b = (_a = instances.observer) === null || _a === void 0 ? void 0 : _a.highlight) === null || _b === void 0 ? void 0 : _b.call(_a, key, ns)) || { unhighlight() { } };\n        }),\n        unwrap(text) {\n            var _a;\n            if (instances.observer) {\n                return (_a = instances.observer) === null || _a === void 0 ? void 0 : _a.unwrap(text);\n            }\n            return { text, keys: [] };\n        },\n        wrap(params) {\n            var _a;\n            if (instances.observer) {\n                return (_a = instances.observer) === null || _a === void 0 ? void 0 : _a.wrap(params);\n            }\n            return params.translation;\n        },\n        hasDevBackend() {\n            return Boolean(self.getDevBackend());\n        },\n        formatTranslation(_a) {\n            var _b;\n            var { formatEnabled } = _a, props = __rest(_a, [\"formatEnabled\"]);\n            const { key, translation, defaultValue, noWrap, params, ns, orEmpty } = props;\n            const formattableTranslation = translation !== null && translation !== void 0 ? translation : defaultValue;\n            let translationMissingResult = '';\n            if (translation === undefined || translation === null) {\n                // called when translation is missing\n                // return value is used when 'defaultValue' and 'orEmpty' are not defined\n                translationMissingResult =\n                    getInitialOptions().onTranslationMissing(props);\n            }\n            let result = formattableTranslation !== null && formattableTranslation !== void 0 ? formattableTranslation : (orEmpty ? '' : translationMissingResult);\n            const language = getLanguage();\n            const isFormatEnabled = formatEnabled || !((_b = instances.observer) === null || _b === void 0 ? void 0 : _b.outputNotFormattable);\n            const wrap = (result) => {\n                if (instances.observer && !noWrap) {\n                    return instances.observer.wrap({\n                        key,\n                        translation: result,\n                        defaultValue,\n                        params,\n                        ns,\n                    });\n                }\n                return result;\n            };\n            result = wrap(result);\n            try {\n                if (formattableTranslation && language && isFormatEnabled) {\n                    for (const formatter of instances.formatters) {\n                        result = formatter.format({\n                            translation: result,\n                            language,\n                            params,\n                        });\n                    }\n                }\n                if (instances.finalFormatter &&\n                    formattableTranslation &&\n                    language &&\n                    isFormatEnabled) {\n                    result = instances.finalFormatter.format({\n                        translation: result,\n                        language,\n                        params,\n                    });\n                }\n            }\n            catch (e) {\n                // eslint-disable-next-line no-console\n                console.error(e);\n                const errorMessage = getErrorMessage(e) || DEFAULT_FORMAT_ERROR;\n                const onFormatError = getInitialOptions().onFormatError;\n                const formatErrorType = typeof onFormatError;\n                if (formatErrorType === 'string') {\n                    result = onFormatError;\n                }\n                else if (formatErrorType === 'function') {\n                    result = onFormatError(errorMessage, props);\n                }\n                else {\n                    result = DEFAULT_FORMAT_ERROR;\n                }\n                // wrap error message, so it's detectable\n                result = wrap(result);\n            }\n            return result;\n        },\n    });\n    return self;\n}\n\nconst ValueObserver = (initialValue, valueGetter, handler) => {\n    let previousValue = initialValue;\n    return Object.freeze({\n        init(value) {\n            previousValue = value;\n        },\n        notify() {\n            const value = valueGetter();\n            if (previousValue !== value) {\n                handler(value);\n            }\n            previousValue = value;\n        },\n    });\n};\n\nfunction State(onLanguageChange, onPendingLanguageChange, onRunningChange) {\n    let state = initState();\n    let devCredentials = undefined;\n    const self = Object.freeze({\n        init(options) {\n            state = initState(options, state);\n        },\n        isRunning() {\n            return state.isRunning;\n        },\n        setRunning(value) {\n            if (state.isRunning !== value) {\n                state.isRunning = value;\n                onRunningChange.emit(value);\n            }\n        },\n        isInitialLoading() {\n            return state.isInitialLoading;\n        },\n        setInitialLoading(value) {\n            state.isInitialLoading = value;\n        },\n        getLanguage() {\n            return state.language || state.initialOptions.language;\n        },\n        setLanguage(language) {\n            if (state.language !== language) {\n                state.language = language;\n                onLanguageChange.emit(language);\n            }\n        },\n        getPendingLanguage() {\n            return state.pendingLanguage || self.getLanguage();\n        },\n        setPendingLanguage(language) {\n            if (state.pendingLanguage !== language) {\n                state.pendingLanguage = language;\n                onPendingLanguageChange.emit(language);\n            }\n        },\n        getInitialOptions() {\n            return Object.assign(Object.assign({}, state.initialOptions), devCredentials);\n        },\n        addActiveNs(ns) {\n            const namespaces = getFallbackArray(ns);\n            namespaces.forEach((namespace) => {\n                const value = state.activeNamespaces.get(namespace);\n                if (value !== undefined) {\n                    state.activeNamespaces.set(namespace, value + 1);\n                }\n                else {\n                    state.activeNamespaces.set(namespace, 1);\n                }\n            });\n        },\n        removeActiveNs(ns) {\n            const namespaces = getFallbackArray(ns);\n            namespaces.forEach((namespace) => {\n                const value = state.activeNamespaces.get(namespace);\n                if (value !== undefined && value > 1) {\n                    state.activeNamespaces.set(namespace, value - 1);\n                }\n                else {\n                    state.activeNamespaces.delete(namespace);\n                }\n            });\n        },\n        getRequiredNamespaces() {\n            return unique([\n                self.getDefaultNs(),\n                ...(state.initialOptions.ns || []),\n                ...getFallbackArray(state.initialOptions.fallbackNs),\n                ...state.activeNamespaces.keys(),\n            ]);\n        },\n        getFallbackLangs(lang) {\n            const language = lang || self.getLanguage();\n            if (!language) {\n                return [];\n            }\n            return unique([\n                language,\n                ...getFallbackFromStruct(language, state.initialOptions.fallbackLanguage),\n            ]);\n        },\n        getFallbackNs() {\n            return getFallbackArray(state.initialOptions.fallbackNs);\n        },\n        getNs() {\n            var _a, _b;\n            return ((_a = state.initialOptions.ns) === null || _a === void 0 ? void 0 : _a.length)\n                ? state.initialOptions.ns\n                : [(_b = state.initialOptions.defaultNs) !== null && _b !== void 0 ? _b : ''];\n        },\n        getDefaultNs(ns) {\n            var _a, _b, _c;\n            return ns === undefined\n                ? (_c = (_a = state.initialOptions.defaultNs) !== null && _a !== void 0 ? _a : (_b = state.initialOptions.ns) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : ''\n                : ns;\n        },\n        getAvailableLanguages() {\n            if (state.initialOptions.availableLanguages) {\n                return state.initialOptions.availableLanguages;\n            }\n            else if (state.initialOptions.staticData) {\n                const languagesFromStaticData = Object.keys(state.initialOptions.staticData).map((key) => decodeCacheKey(key).language);\n                return Array.from(new Set(languagesFromStaticData));\n            }\n        },\n        getAvailableNs() {\n            return state.initialOptions.availableNs;\n        },\n        withDefaultNs(descriptor) {\n            return {\n                namespace: descriptor.namespace === undefined\n                    ? self.getDefaultNs()\n                    : descriptor.namespace,\n                language: descriptor.language,\n            };\n        },\n        overrideCredentials(credentials) {\n            if (credentials) {\n                devCredentials = Object.assign(Object.assign({}, credentials), { apiUrl: sanitizeUrl(credentials.apiUrl) });\n            }\n            else {\n                devCredentials = undefined;\n            }\n        },\n    });\n    return self;\n}\n\nfunction parseCombinedOptions(_a) {\n    var { ns, noWrap, orEmpty, params, language } = _a, rest = __rest(_a, [\"ns\", \"noWrap\", \"orEmpty\", \"params\", \"language\"]);\n    const options = {\n        ns: ns,\n        noWrap: noWrap,\n        orEmpty: orEmpty,\n        language: language,\n    };\n    return Object.assign(Object.assign({}, options), { params: Object.assign({}, rest) });\n}\nconst getTranslateProps = (keyOrProps, ...params) => {\n    let result = {};\n    let options;\n    if (keyOrProps != null && typeof keyOrProps === 'object') {\n        result = keyOrProps;\n    }\n    else {\n        result.key = keyOrProps;\n        if (typeof params[0] === 'string') {\n            result.defaultValue = params[0];\n            options = params[1];\n        }\n        else if (typeof params[0] === 'object') {\n            options = params[0];\n        }\n    }\n    if (options) {\n        result = Object.assign(Object.assign({}, parseCombinedOptions(options)), result);\n    }\n    return result;\n};\n\nfunction Controller({ options }) {\n    const events = Events();\n    const fetchingObserver = ValueObserver(false, () => cache.isFetching(), events.onFetchingChange.emit);\n    const loadingObserver = ValueObserver(false, () => self.isLoading(), events.onLoadingChange.emit);\n    const state = State(events.onLanguageChange, events.onPendingLanguageChange, events.onRunningChange);\n    const pluginService = Plugins(state.getLanguage, state.getInitialOptions, state.getAvailableLanguages, getDefaultAndFallbackNs, getTranslationNs, getTranslation, changeTranslation, events);\n    const cache = Cache(events, pluginService.getBackendRecord, pluginService.getBackendDevRecord, state.withDefaultNs, state.isInitialLoading, fetchingObserver, loadingObserver);\n    if (options) {\n        init(options);\n    }\n    let runPromise;\n    events.onUpdate.listen(() => {\n        if (state.isRunning()) {\n            pluginService.retranslate();\n        }\n    });\n    function getFallbackNs() {\n        return state.getFallbackNs();\n    }\n    function getDefaultNs(ns) {\n        return state.getDefaultNs(ns);\n    }\n    // gets all namespaces where translation could be located\n    // takes (ns|default, fallback ns)\n    function getDefaultAndFallbackNs(ns) {\n        return unique([...getFallbackArray(getDefaultNs(ns)), ...getFallbackNs()]);\n    }\n    // gets all namespaces which need to be loaded\n    // takes (ns|default, initial ns, fallback ns, active ns)\n    function getRequiredNamespaces(ns) {\n        return unique([\n            ...getFallbackArray(ns !== null && ns !== void 0 ? ns : getDefaultNs()),\n            ...state.getRequiredNamespaces(),\n        ]);\n    }\n    function changeTranslation(descriptor, key, value) {\n        const keyObject = state.withDefaultNs(descriptor);\n        const previousValue = cache.getTranslation(keyObject, key);\n        cache.changeTranslation(keyObject, key, value);\n        return {\n            revert() {\n                cache.changeTranslation(keyObject, key, previousValue);\n            },\n        };\n    }\n    function init(options) {\n        state.init(options);\n        cache.addStaticData(state.getInitialOptions().staticData);\n    }\n    function getRequiredDescriptors(lang, ns) {\n        const languages = state.getFallbackLangs(lang);\n        const namespaces = getRequiredNamespaces(ns);\n        const result = [];\n        languages.forEach((language) => {\n            namespaces.forEach((namespace) => {\n                result.push({ language, namespace });\n            });\n        });\n        return result;\n    }\n    function getMissingDescriptors(lang, ns) {\n        return getRequiredDescriptors(lang, ns).filter((descriptor) => !cache.exists(descriptor, true));\n    }\n    function getMatrixRecords(options) {\n        let languages = [];\n        let namespaces = [];\n        if (Array.isArray(options.languages)) {\n            languages = options.languages;\n        }\n        else if (options.languages === 'all') {\n            const availableLanguages = self.getAvailableLanguages();\n            if (!availableLanguages) {\n                throw new Error(missingOptionError('availableLanguages'));\n            }\n            languages = availableLanguages;\n        }\n        if (Array.isArray(options.namespaces)) {\n            namespaces = options.namespaces;\n        }\n        else if (options.namespaces === 'all') {\n            const availableNs = self.getAvailableNs();\n            if (!availableNs) {\n                throw new Error(missingOptionError('availableNs'));\n            }\n            namespaces = availableNs;\n        }\n        const records = [];\n        languages.forEach((language) => {\n            namespaces.forEach((namespace) => {\n                records.push({ language, namespace });\n            });\n        });\n        return records;\n    }\n    function getTranslationNs({ key, ns }) {\n        const languages = state.getFallbackLangs();\n        const namespaces = getDefaultAndFallbackNs(ns !== null && ns !== void 0 ? ns : undefined);\n        return cache.getTranslationNs(namespaces, languages, key);\n    }\n    function getTranslation({ key, ns, language }) {\n        const namespaces = getDefaultAndFallbackNs(ns !== null && ns !== void 0 ? ns : undefined);\n        const languages = state.getFallbackLangs(language);\n        return cache.getTranslationFallback(namespaces, languages, key);\n    }\n    function loadInitial() {\n        const data = valueOrPromise(initializeLanguage(), () => {\n            const missingDescriptors = getMissingDescriptors();\n            if (missingDescriptors.length &&\n                state.getInitialOptions().autoLoadRequiredData) {\n                return cache.loadRecords(missingDescriptors, { useCache: true });\n            }\n        });\n        if (isPromise(data)) {\n            state.setInitialLoading(true);\n            fetchingObserver.notify();\n            loadingObserver.notify();\n            return Promise.resolve(data).then(() => {\n                state.setInitialLoading(false);\n                fetchingObserver.notify();\n                loadingObserver.notify();\n                events.onInitialLoaded.emit();\n            });\n        }\n        else {\n            events.onInitialLoaded.emit();\n        }\n    }\n    function initializeLanguage() {\n        const existingLanguage = state.getLanguage();\n        if (existingLanguage) {\n            return;\n        }\n        const languageOrPromise = pluginService.getInitialLanguage();\n        return valueOrPromise(languageOrPromise, (lang) => {\n            const language = lang ||\n                state.getInitialOptions().defaultLanguage;\n            language && state.setLanguage(language);\n        });\n    }\n    function checkCorrectConfiguration() {\n        const languageComputable = pluginService.getLanguageDetector() || pluginService.getLanguageStorage();\n        if (languageComputable) {\n            const availableLanguages = state.getAvailableLanguages();\n            if (!availableLanguages) {\n                throw new Error(missingOptionError('availableLanguages'));\n            }\n        }\n        if (!state.getLanguage() && !state.getInitialOptions().defaultLanguage) {\n            throw new Error(missingOptionError(['defaultLanguage', 'language']));\n        }\n    }\n    const self = Object.freeze(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, events), state), pluginService), cache), { init: init, getTranslation: getTranslation, changeTranslation: changeTranslation, getTranslationNs: getTranslationNs, getDefaultAndFallbackNs: getDefaultAndFallbackNs, findPositions: pluginService.findPositions, getRequiredDescriptors: getRequiredDescriptors, async changeLanguage(language) {\n            if (state.getPendingLanguage() === language &&\n                state.getLanguage() === language) {\n                return;\n            }\n            state.setPendingLanguage(language);\n            if (state.isRunning() && state.getInitialOptions().autoLoadRequiredData) {\n                await cache.loadRecords(getRequiredDescriptors(language), {\n                    useCache: true,\n                });\n            }\n            if (language === state.getPendingLanguage()) {\n                // there might be parallel language change\n                // we only want to apply latest\n                state.setLanguage(language);\n                await pluginService.setStoredLanguage(language);\n            }\n        },\n        async addActiveNs(ns, forget) {\n            if (!forget) {\n                state.addActiveNs(ns);\n            }\n            if (state.isRunning()) {\n                await cache.loadRecords(getRequiredDescriptors(undefined, ns), {\n                    useCache: true,\n                });\n            }\n        },\n        async loadRecord(descriptor, options) {\n            var _a;\n            return (_a = (await self.loadRecords([descriptor], options))[0]) === null || _a === void 0 ? void 0 : _a.data;\n        },\n        isLoading(ns) {\n            return cache.isLoading(state.getLanguage(), ns);\n        },\n        isLoaded(ns) {\n            const language = state.getLanguage();\n            if (!language) {\n                return false;\n            }\n            const languages = state.getFallbackLangs(language);\n            const namespaces = getRequiredNamespaces(ns);\n            const result = [];\n            languages.forEach((language) => {\n                namespaces.forEach((namespace) => {\n                    if (!cache.exists({ language, namespace })) {\n                        result.push({ language, namespace });\n                    }\n                });\n            });\n            return result.length === 0;\n        }, t: ((...args) => {\n            // @ts-ignore\n            const params = getTranslateProps(...args);\n            const translation = getTranslation(params);\n            return pluginService.formatTranslation(Object.assign(Object.assign({}, params), { translation }));\n        }), isDev() {\n            return Boolean(state.getInitialOptions().apiKey && state.getInitialOptions().apiUrl);\n        },\n        async loadRequired(options) {\n            if (!(options === null || options === void 0 ? void 0 : options.language)) {\n                await initializeLanguage();\n            }\n            const requiredRecords = getRequiredDescriptors(options === null || options === void 0 ? void 0 : options.language);\n            return self.loadRecords(requiredRecords, options);\n        },\n        async loadMatrix(options) {\n            const records = getMatrixRecords(options);\n            return self.loadRecords(records, options);\n        },\n        run() {\n            checkCorrectConfiguration();\n            if (!state.isRunning()) {\n                state.setRunning(true);\n                pluginService.run();\n                runPromise = loadInitial();\n            }\n            return Promise.resolve(runPromise);\n        },\n        stop() {\n            if (state.isRunning()) {\n                pluginService.stop();\n                state.setRunning(false);\n            }\n        } }));\n    return self;\n}\n\nfunction createTolgee(options) {\n    const controller = Controller({\n        options,\n    });\n    if (controller.isDev()) {\n        // override existing data in DevMode\n        controller.invalidate();\n    }\n    // restarts tolgee while applying callback\n    function withRestart(callback) {\n        const wasRunning = controller.isRunning();\n        wasRunning && controller.stop();\n        callback();\n        // invalidate cache when tolgee configuration is updated/plugin added in DevMode\n        controller.isDev() && controller.invalidate();\n        wasRunning && controller.run();\n    }\n    const self = Object.freeze({\n        /**\n         * Listen to tolgee events.\n         */\n        on: controller.on,\n        /**\n         * Turn off/on events emitting. Is on by default.\n         */\n        setEmitterActive: controller.setEmitterActive,\n        /**\n         * @return current language if set.\n         */\n        getLanguage: controller.getLanguage,\n        /**\n         * `pendingLanguage` represents language which is currently being loaded.\n         * @return current `pendingLanguage` if set.\n         */\n        getPendingLanguage: controller.getPendingLanguage,\n        /**\n         * Change current language.\n         * - if not running sets `pendingLanguage`, `language` to the new value\n         * - if running sets `pendingLanguage` to the value, fetches necessary data and then changes `language`\n         *\n         * @return Promise which is resolved when `language` is changed.\n         */\n        changeLanguage: controller.changeLanguage,\n        /**\n         * Temporarily change translation in cache.\n         * @return object with revert method.\n         */\n        changeTranslation: controller.changeTranslation,\n        /**\n         * Adds namespace(s) list of active namespaces. And if tolgee is running, loads required data.\n         */\n        addActiveNs: controller.addActiveNs,\n        /**\n         * Remove namespace(s) from active namespaces.\n         *\n         * Tolgee internally counts how many times was each active namespace added,\n         * so this method will remove namespace only if the counter goes down to 0.\n         */\n        removeActiveNs: controller.removeActiveNs,\n        /**\n         * Load records which would be loaded by `run` function\n         *\n         * You can provide language if not previously set on tolgee instance\n         */\n        loadRequired: controller.loadRequired,\n        /**\n         * Load records in matrix (languages x namespaces)\n         */\n        loadMatrix: controller.loadMatrix,\n        /**\n         * Manually load multiple records from `Backend` (or `DevBackend` when in dev mode)\n         *\n         * It loads data together and adds them to cache in one operation, to prevent partly loaded state.\n         */\n        loadRecords: controller.loadRecords,\n        /**\n         * Manually load record from `Backend` (or `DevBackend` when in dev mode)\n         */\n        loadRecord: controller.loadRecord,\n        /**\n         * Prefill static data\n         */\n        addStaticData: controller.addStaticData,\n        /**\n         * Get record from cache.\n         */\n        getRecord: controller.getRecord,\n        /**\n         * Get all records from cache.\n         */\n        getAllRecords: controller.getAllRecords,\n        /**\n         * @param ns optional list of namespaces that you are interested in\n         * @return `true` if there are data that need to be fetched.\n         */\n        isLoaded: controller.isLoaded,\n        /**\n         * Returns descriptors of records needed for instance to be `loaded`\n         */\n        getRequiredDescriptors: controller.getRequiredDescriptors,\n        /**\n         * @return `true` if tolgee is loading initial data (triggered by `run`).\n         */\n        isInitialLoading: controller.isInitialLoading,\n        /**\n         * @param ns optional list of namespaces that you are interested in\n         * @return `true` if tolgee is loading some translations for the first time.\n         */\n        isLoading: controller.isLoading,\n        /**\n         * @param ns optional list of namespaces that you are interested in\n         * @return `true` if tolgee is fetching some translations.\n         */\n        isFetching: controller.isFetching,\n        /**\n         * @return `true` if tolgee is running.\n         */\n        isRunning: controller.isRunning,\n        /**\n         * Changes internal state to running: true and loads initial files.\n         * Runs runnable plugins mainly Observer if present.\n         */\n        run: controller.run,\n        /**\n         * Changes internal state to running: false and stops runnable plugins.\n         */\n        stop: controller.stop,\n        /**\n         * Returns translated and formatted key.\n         * If Observer is present and tolgee is running, wraps result to be identifiable in the DOM.\n         */\n        t: controller.t,\n        /**\n         * Highlight keys that match selection.\n         */\n        highlight: controller.highlight,\n        /**\n         * Find positions of keys in the DOM.\n         */\n        findPositions: controller.findPositions,\n        /**\n         * @return current Tolgee options.\n         */\n        getInitialOptions: controller.getInitialOptions,\n        /**\n         * Tolgee is in dev mode if `DevTools` plugin is used and `apiKey` + `apiUrl` are specified.\n         * @return `true` if tolgee is in dev mode.\n         */\n        isDev: controller.isDev,\n        /**\n         * Wraps translation if there is `Observer` plugin\n         */\n        wrap: controller.wrap,\n        /**\n         * Unwrap translation\n         */\n        unwrap: controller.unwrap,\n        /**\n         * Override creadentials passed on initialization.\n         *\n         * When called in running state, tolgee stops and runs again.\n         */\n        overrideCredentials(credentials) {\n            withRestart(() => controller.overrideCredentials(credentials));\n        },\n        /**\n         * Add tolgee plugin after initialization.\n         *\n         * When called in running state, tolgee stops and runs again.\n         */\n        addPlugin(plugin) {\n            if (plugin) {\n                withRestart(() => controller.addPlugin(self, plugin));\n            }\n        },\n        /**\n         * Updates options after instance creation. Extends existing options,\n         * so it only changes the fields, that are listed.\n         *\n         * When called in running state, tolgee stops and runs again.\n         */\n        updateOptions(options) {\n            if (options) {\n                withRestart(() => controller.init(options));\n            }\n        },\n    });\n    return self;\n}\n/**\n * Tolgee chainable constructor.\n *\n * Usage:\n * ```\n * const tolgee = Tolgee().use(...).init(...)\n * ```\n */\nconst TolgeeCore = () => {\n    const state = {\n        plugins: [],\n        options: {},\n    };\n    const tolgeeChain = Object.freeze({\n        use(plugin) {\n            state.plugins.push(plugin);\n            return tolgeeChain;\n        },\n        updateDefaults(options) {\n            state.options = combineOptions(state.options, options);\n            return tolgeeChain;\n        },\n        init(options) {\n            const tolgee = createTolgee(combineOptions(state.options, options));\n            state.plugins.forEach(tolgee.addPlugin);\n            return tolgee;\n        },\n    });\n    return tolgeeChain;\n};\n\nconst ERROR_PARAM_EMPTY = 0, ERROR_UNEXPECTED_CHAR = 1, ERROR_UNEXPECTED_END = 2;\nclass FormatError extends Error {\n    constructor(code, index, text) {\n        let error;\n        let hint = '';\n        if (code === ERROR_PARAM_EMPTY) {\n            error = 'Empty parameter';\n        }\n        else if (code === ERROR_UNEXPECTED_CHAR) {\n            error = 'Unexpected character';\n            hint = 'Did you forget to use FormatIcu to render ICU message syntax?';\n        }\n        else {\n            error = 'Unexpected end';\n        }\n        super(`Tolgee parser: ${error} at ${index} in \"${text}\"` +\n            (hint ? '\\n' + hint : ''));\n        this.code = code;\n        this.index = index;\n    }\n}\n\nfunction isWhitespace(ch) {\n    return /\\s/.test(ch);\n}\nconst STATE_TEXT = 0, STATE_ESCAPE_MAYBE = 1, STATE_ESCAPE = 2, STATE_PARAM = 3, STATE_PARAM_AFTER = 4;\nconst END_STATES = new Set([\n    STATE_ESCAPE,\n    STATE_ESCAPE_MAYBE,\n    STATE_TEXT,\n]);\nconst CHAR_ESCAPE = \"'\";\nconst ESCAPABLE = new Set(['{', '}', CHAR_ESCAPE]);\nconst isAllowedInParam = (char) => {\n    return /[0-9a-zA-Z_]/.test(char);\n};\nfunction formatParser(translation) {\n    let state = STATE_TEXT;\n    let text = '';\n    let param = '';\n    let ch = '';\n    const texts = [];\n    const params = [];\n    let i = 0;\n    function parsingError(code) {\n        throw new FormatError(code, i, translation);\n    }\n    const addText = () => {\n        texts.push(text);\n        text = '';\n    };\n    const addParamChar = () => {\n        if (!isAllowedInParam(ch)) {\n            parsingError(ERROR_UNEXPECTED_CHAR);\n        }\n        param += ch;\n    };\n    const addParam = () => {\n        if (param === '') {\n            parsingError(ERROR_PARAM_EMPTY);\n        }\n        params.push(param);\n        param = '';\n    };\n    for (i = 0; i < translation.length; i++) {\n        ch = translation[i];\n        switch (state) {\n            case STATE_TEXT:\n                if (ch === CHAR_ESCAPE) {\n                    text += ch;\n                    state = STATE_ESCAPE_MAYBE;\n                }\n                else if (ch === '{') {\n                    addText();\n                    state = STATE_PARAM;\n                }\n                else {\n                    text += ch;\n                    state = STATE_TEXT;\n                }\n                break;\n            case STATE_ESCAPE_MAYBE:\n                if (ESCAPABLE.has(ch)) {\n                    text = text.slice(0, -1) + ch;\n                    state = STATE_ESCAPE;\n                }\n                else {\n                    text += ch;\n                    state = STATE_TEXT;\n                }\n                break;\n            case STATE_ESCAPE:\n                if (ch === CHAR_ESCAPE) {\n                    state = STATE_TEXT;\n                }\n                else {\n                    text += ch;\n                    state = STATE_ESCAPE;\n                }\n                break;\n            case STATE_PARAM:\n                if (ch === '}') {\n                    addParam();\n                    state = STATE_TEXT;\n                }\n                else if (!isWhitespace(ch)) {\n                    addParamChar();\n                    state = STATE_PARAM;\n                }\n                else if (param !== '') {\n                    addParam();\n                    state = STATE_PARAM_AFTER;\n                }\n                break;\n            case STATE_PARAM_AFTER:\n                if (ch == '}') {\n                    state = STATE_TEXT;\n                }\n                else if (isWhitespace(ch)) {\n                    state = STATE_PARAM_AFTER;\n                }\n                else {\n                    parsingError(ERROR_UNEXPECTED_CHAR);\n                }\n        }\n    }\n    if (!END_STATES.has(state)) {\n        parsingError(ERROR_UNEXPECTED_END);\n    }\n    addText();\n    return [texts, params];\n}\n\nfunction formatter(translation, params) {\n    const [texts, pars] = formatParser(translation);\n    const result = [texts[0]];\n    for (let i = 1; i < texts.length; i++) {\n        const parameter = params === null || params === void 0 ? void 0 : params[pars[i - 1]];\n        if (parameter === undefined) {\n            throw new Error(`Missing parameter \"${pars[i - 1]}\" in \"${translation}\"`);\n        }\n        result.push(String(parameter));\n        result.push(texts[i]);\n    }\n    return result.join('');\n}\n\nfunction createFormatSimple() {\n    return {\n        format: ({ translation, params }) => formatter(translation, params),\n    };\n}\nconst FormatSimple = () => (tolgee, tools) => {\n    tools.setFinalFormatter(createFormatSimple());\n    return tolgee;\n};\n\nexport { FormatSimple, LanguageDetectorError, LanguageStorageError, RecordFetchError, TolgeeCore, createFetchFunction, getFallback, getFallbackArray, getTranslateProps };\n//# sourceMappingURL=tolgee.esm.js.map\n","// needs to be same as in @tolgee/core package\nexport const DEVTOOLS_ID = '__tolgee_dev_tools';\n\nexport const DEVTOOLS_Z_INDEX = 2147483000;\n\nexport const CHROME_EXTENSION_LINK =\n  'https://chrome.google.com/webstore/detail/tolgee-tools/hacnbapajkkfohnonhbmegojnddagfnj';\n\nexport const PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY =\n  '__tolgee_preferredLanguages';\n\nexport const MAX_LANGUAGES_SELECTED = 5;\n\n/**\n * Use this if you want to indicate to tolgee that element contains key\n */\nexport const TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE = 'data-tolgee-key-only';\n/**\n * Use this attribute if you want tolgee Observer to not touch part of the DOM\n */\nexport const TOLGEE_RESTRICT_ATTRIBUTE = 'data-tolgee-restricted';\n/**\n * This attribute is present on elements that have been registred by tolgee and are clickable for in-context\n */\nexport const TOLGEE_ATTRIBUTE_NAME = '_tolgee';\nexport const TOLGEE_HIGHLIGHTER_CLASS = '_tolgee-highlighter';\n","export function isSSR() {\n  return typeof globalThis.window?.document?.createElement === 'undefined';\n}\n\nexport function throwIfSSR(origin: string) {\n  if (isSSR()) {\n    throw new Error(`${origin}: Can't run on the server`);\n  }\n}\n","import { ObserverOptions } from '@tolgee/core';\n\nexport function DomHelper(options: ObserverOptions) {\n  function getParentElement(node: Node): Element | undefined {\n    if (node.parentElement) {\n      return node.parentElement;\n    }\n    if ((node as Attr).ownerElement) {\n      return (node as Attr).ownerElement || undefined;\n    }\n  }\n\n  const self = Object.freeze({\n    getSuitableParent(node: Node): Element {\n      const domParent = getParentElement(node);\n\n      if (domParent === undefined) {\n        // eslint-disable-next-line no-console\n        console.error(node);\n        throw new Error('No suitable parent found for node above.');\n      }\n\n      if (!options.passToParent) {\n        return domParent;\n      }\n\n      if (Array.isArray(options.passToParent)) {\n        const tagNameEquals = (elementTagName: string) =>\n          domParent.tagName.toLowerCase() === elementTagName.toLowerCase();\n        if (options.passToParent.findIndex(tagNameEquals) === -1) {\n          return domParent;\n        }\n      }\n\n      if (typeof options.passToParent === 'function') {\n        if (!options.passToParent(domParent)) {\n          return domParent;\n        }\n      }\n\n      return self.getSuitableParent(domParent);\n    },\n  });\n\n  return self;\n}\n","import type { KeyAndParams } from '@tolgee/core';\nimport type { ElementMeta, NodeMeta, TolgeeElement } from '../../types';\n\nexport function initElementMeta(element: TolgeeElement): ElementMeta {\n  return {\n    element,\n    nodes: new Map(),\n  };\n}\n\nexport function initNodeMeta(\n  oldTextContent: string,\n  keys: KeyAndParams[]\n): NodeMeta {\n  return {\n    oldTextContent,\n    keys,\n  };\n}\n","import { KeyDescriptorInternal } from '../../types';\n\nexport function getNodeText(node: Node) {\n  return node.textContent;\n}\n\nexport function setNodeText(node: Node, text: string) {\n  node.textContent = text;\n}\n\nexport function compareDescriptors(\n  descriptor: KeyDescriptorInternal,\n  criteria: KeyDescriptorInternal\n) {\n  const keyMatches =\n    descriptor.key === undefined ||\n    criteria.key === undefined ||\n    criteria.key === descriptor.key;\n  const nsMatches =\n    descriptor.ns === undefined ||\n    criteria.ns === undefined ||\n    descriptor.ns?.findIndex((ns) => criteria.ns?.includes(ns)) !== -1;\n\n  return keyMatches && nsMatches;\n}\n\nexport function elementClickable(el: HTMLElement) {\n  while (el) {\n    if (el.getAttribute('disabled') !== null) {\n      return false;\n    }\n    el = el.parentElement;\n  }\n  return true;\n}\n","import { TOLGEE_HIGHLIGHTER_CLASS } from '../../constants';\nimport { ElementMeta, TolgeeElement } from '../../types';\nimport { elementClickable } from './helpers';\n\nconst HIGHLIGHTER_BASE_STYLE: Partial<CSSStyleDeclaration> = {\n  position: 'fixed',\n  boxSizing: 'content-box',\n  zIndex: String(Number.MAX_SAFE_INTEGER),\n  contain: 'layout',\n  display: 'block',\n  borderStyle: 'solid',\n  borderRadius: '4px',\n};\n\ntype Props = {\n  highlightColor: string;\n  highlightWidth: number;\n};\n\nexport function ElementHighlighter({ highlightColor, highlightWidth }: Props) {\n  function initHighlightFunction(\n    element: TolgeeElement,\n    elementMeta: ElementMeta\n  ) {\n    elementMeta.highlight = () => {\n      if (!element.isConnected) {\n        return;\n      }\n      const clickable = elementClickable(element);\n      let highlightEl = elementMeta.highlightEl;\n      if (!highlightEl) {\n        highlightEl = document.createElement('div');\n        highlightEl.classList.add(TOLGEE_HIGHLIGHTER_CLASS);\n        Object.entries(HIGHLIGHTER_BASE_STYLE).forEach(([key, value]) => {\n          // @ts-ignore\n          highlightEl!.style[key] = value;\n        });\n        highlightEl.style.borderColor = highlightColor;\n\n        elementMeta.highlightEl = highlightEl;\n        document.body.appendChild(highlightEl);\n      }\n\n      const shape = element.getBoundingClientRect();\n\n      highlightEl.style.pointerEvents = clickable ? 'none' : 'auto';\n      highlightEl.style.borderWidth = highlightWidth + 'px';\n      highlightEl.style.top = shape.top - highlightWidth + 'px';\n      highlightEl.style.left = shape.left - highlightWidth + 'px';\n      highlightEl.style.width = shape.width + 'px';\n      highlightEl.style.height = shape.height + 'px';\n    };\n  }\n\n  function initUnhighlightFunction(\n    element: TolgeeElement,\n    elementMeta: ElementMeta\n  ) {\n    elementMeta.unhighlight = () => {\n      elementMeta.highlightEl?.remove();\n      elementMeta.highlightEl = undefined;\n    };\n  }\n\n  return Object.freeze({\n    initHighlighter(element: TolgeeElement, elementMeta: ElementMeta) {\n      initHighlightFunction(element, elementMeta);\n      initUnhighlightFunction(element, elementMeta);\n    },\n  });\n}\n","import { ModifierKey, ObserverOptionsInternal } from '@tolgee/core';\nimport { TolgeeElement } from '../../types';\nimport { DEVTOOLS_ID } from '../../constants';\nimport { ElementStoreType } from './ElementStore';\n\nconst eCapture = {\n  capture: true,\n};\n\nconst ePassive = {\n  capture: true,\n  passive: true,\n};\n\ntype Coordinates = {\n  x: number;\n  y: number;\n};\n\ntype Props = {\n  highlightKeys: ModifierKey[];\n  elementStore: ElementStoreType;\n  onClick: (el: TolgeeElement) => void;\n  options: ObserverOptionsInternal;\n};\n\nconst MODIFIER_MAP = new Map<\n  ModifierKey,\n  'ctrlKey' | 'altKey' | 'metaKey' | 'shiftKey'\n>([\n  ['Control', 'ctrlKey'],\n  ['Alt', 'altKey'],\n  ['Meta', 'metaKey'],\n  ['Shift', 'shiftKey'],\n]);\n\nexport function MouseEventHandler({\n  highlightKeys,\n  elementStore,\n  onClick,\n  options,\n}: Props) {\n  const keysDown = new Set<ModifierKey>();\n  let highlighted: TolgeeElement | undefined;\n  let cursorPosition: Coordinates | undefined;\n  let subscribedEvents: [\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | AddEventListenerOptions,\n  ][] = [];\n\n  const documentOrShadowRoot = (options.targetElement?.getRootNode() ||\n    document) as unknown as ShadowRoot;\n\n  const targetDocument = options.targetElement?.ownerDocument || document;\n\n  function highlight(el: TolgeeElement | undefined) {\n    if (highlighted !== el) {\n      unhighlight();\n      const meta = elementStore.get(el);\n      if (meta) {\n        meta.preventClean = true;\n        meta.highlight?.();\n        highlighted = el;\n      }\n    }\n  }\n\n  function unhighlight() {\n    const meta = elementStore.get(highlighted);\n    if (meta) {\n      meta.preventClean = false;\n      meta.unhighlight?.();\n      highlighted = undefined;\n    }\n  }\n\n  function updateHighlight() {\n    const position = cursorPosition;\n\n    let newHighlighted: TolgeeElement | undefined;\n    if (position && areKeysDown()) {\n      const elements =\n        documentOrShadowRoot.elementsFromPoint(position.x, position.y) || [];\n\n      newHighlighted = getClosestTolgeeElement(elements);\n    }\n    highlight(newHighlighted);\n  }\n\n  function updateCursorPosition(position: Coordinates) {\n    cursorPosition = position;\n    updateHighlight();\n  }\n\n  function updateModifiers(e: MouseEvent | KeyboardEvent) {\n    for (const [modifier, modifierProperty] of MODIFIER_MAP.entries()) {\n      if (keysDown.has(modifier) && !e[modifierProperty]) {\n        keysDown.delete(modifier);\n      } else if (!keysDown.has(modifier) && e[modifierProperty]) {\n        keysDown.add(modifier);\n      }\n    }\n  }\n\n  function blockEvents(e: MouseEvent) {\n    updateModifiers(e);\n    if (areKeysDown() && !isInUiDialog(e.target as Element)) {\n      e.stopPropagation();\n      e.preventDefault();\n    }\n  }\n\n  function onMouseMove(e: MouseEvent) {\n    updateModifiers(e);\n    updateCursorPosition({ x: e.clientX, y: e.clientY });\n  }\n\n  function onKeyDown(e: KeyboardEvent) {\n    updateModifiers(e);\n    updateHighlight();\n  }\n\n  function onKeyUp(e: KeyboardEvent) {\n    updateModifiers(e);\n    updateHighlight();\n  }\n\n  function onScroll() {\n    const meta = elementStore.get(highlighted);\n    meta?.highlight?.();\n  }\n\n  function handleClick(e: MouseEvent) {\n    blockEvents(e);\n    updateModifiers(e);\n    updateCursorPosition({ x: e.clientX, y: e.clientY });\n    if (areKeysDown() && highlighted) {\n      onClick(highlighted);\n      unhighlight();\n    }\n  }\n\n  function subscribe<K extends keyof DocumentEventMap>(\n    type: K,\n    listener: (ev: DocumentEventMap[K]) => any,\n    options?: boolean | AddEventListenerOptions\n  ) {\n    targetDocument.addEventListener(type, listener, options);\n    subscribedEvents.push([type, listener as any, options]);\n  }\n\n  function initEventListeners() {\n    subscribe('keydown', onKeyDown, eCapture);\n    subscribe('keyup', onKeyUp, eCapture);\n    subscribe('mousemove', onMouseMove, ePassive);\n\n    subscribe('scroll', onScroll, ePassive);\n    subscribe('click', handleClick, eCapture);\n\n    subscribe('mouseenter', blockEvents, eCapture);\n    subscribe('mouseover', blockEvents, eCapture);\n    subscribe('mouseout', blockEvents, eCapture);\n    subscribe('mouseleave', blockEvents, eCapture);\n    subscribe('mousedown', blockEvents, eCapture);\n    subscribe('mouseup', blockEvents, eCapture);\n  }\n\n  function removeEventListeners() {\n    for (const params of subscribedEvents) {\n      targetDocument.removeEventListener(...params);\n    }\n    subscribedEvents = [];\n  }\n\n  function isInUiDialog(element: Element) {\n    return Boolean(findAncestor(element, (el) => el.id === DEVTOOLS_ID));\n  }\n\n  function getClosestTolgeeElement(\n    elements: Element[]\n  ): TolgeeElement | undefined {\n    for (const element of elements) {\n      const result = findAncestor(element, (el) =>\n        elementStore.get(el as TolgeeElement)\n      ) as TolgeeElement | undefined | null;\n\n      if (result !== undefined) {\n        return result || undefined;\n      }\n    }\n  }\n\n  function findAncestor(\n    element: Element,\n    func: (el: Element) => any\n  ): Element | undefined | null {\n    if (element.id === DEVTOOLS_ID) {\n      return null;\n    }\n    if (func(element)) {\n      return element;\n    }\n    if (element?.parentElement) {\n      return findAncestor(element.parentElement, func);\n    }\n    return undefined;\n  }\n\n  function areKeysDown() {\n    for (const key of highlightKeys) {\n      if (!keysDown.has(key)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  return Object.freeze({\n    stop() {\n      removeEventListeners();\n    },\n\n    run() {\n      initEventListeners();\n    },\n  });\n}\n","import { NsFallback, getFallback, ObserverOptionsInternal } from '@tolgee/core';\nimport { KeyAndParams, TranslationOnClick } from '@tolgee/core';\nimport {\n  TOLGEE_RESTRICT_ATTRIBUTE,\n  TOLGEE_ATTRIBUTE_NAME,\n  TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE,\n} from '../../constants';\nimport { ElementMeta, NodeMeta, TolgeeElement } from '../../types';\n\nimport { ElementHighlighter } from './ElementHighlighter';\nimport { initElementMeta } from './ElementMeta';\nimport { ElementStoreType } from './ElementStore';\nimport { compareDescriptors } from './helpers';\nimport { MouseEventHandler } from './MouseEventHandler';\n\nexport function ElementRegistry(\n  options: ObserverOptionsInternal,\n  elementStore: ElementStoreType,\n  onClick: TranslationOnClick\n) {\n  const elementHighlighter = ElementHighlighter({\n    highlightColor: options.highlightColor,\n    highlightWidth: options.highlightWidth,\n  });\n  const eventHandler = MouseEventHandler({\n    highlightKeys: options.highlightKeys,\n    elementStore,\n    onClick(el) {\n      const meta = elementStore.get(el)!;\n      onClick({\n        target: el as HTMLElement,\n        keysAndDefaults: getKeysAndDefaults(meta),\n      });\n    },\n    options,\n  });\n\n  function isRestricted(element: Element) {\n    const restrictedElements = options.restrictedElements;\n    return (\n      restrictedElements.indexOf(element.tagName.toLowerCase()) !== -1 ||\n      element.closest(`[${TOLGEE_RESTRICT_ATTRIBUTE}]`) !== null\n    );\n  }\n\n  function cleanElementInactiveNodes(\n    meta: ElementMeta,\n    removedNodes: Set<Node>\n  ) {\n    for (const [key] of meta.nodes) {\n      if (removedNodes.has(key)) {\n        meta.nodes.delete(key);\n      }\n    }\n  }\n\n  function cleanElement(element: TolgeeElement, meta: ElementMeta) {\n    if (meta.highlightEl) {\n      meta.unhighlight?.();\n    }\n    element.removeAttribute(TOLGEE_ATTRIBUTE_NAME);\n    elementStore.remove(element);\n  }\n\n  function getKeyOptions(meta: ElementMeta): KeyAndParams[] {\n    const nodes = Array.from(meta.nodes.values());\n    return nodes.reduce(\n      (acc, curr) => [\n        ...acc,\n        ...curr.keys.map((k) => ({\n          key: k.key,\n          defaultValue: k.defaultValue,\n          ns: k.ns,\n        })),\n      ],\n      [] as KeyAndParams[]\n    );\n  }\n\n  function getKeysAndDefaults(meta: ElementMeta): KeyAndParams[] {\n    return getKeyOptions(meta);\n  }\n\n  return Object.freeze({\n    isRestricted: isRestricted,\n    register(element: Element, node: Node, nodeMeta: NodeMeta) {\n      if (isRestricted(element)) {\n        return;\n      }\n      const tolgeeElement = element as TolgeeElement;\n      let elementMeta = elementStore.get(tolgeeElement);\n      if (!elementMeta) {\n        elementMeta = initElementMeta(tolgeeElement);\n        elementStore.set(tolgeeElement, elementMeta);\n        tolgeeElement.setAttribute(TOLGEE_ATTRIBUTE_NAME, 'true');\n      }\n      elementMeta.nodes.set(node, nodeMeta);\n      elementHighlighter.initHighlighter(tolgeeElement, elementMeta);\n    },\n\n    forEachElement: elementStore.forEachElement,\n\n    cleanupLingeringKeyAttributes() {\n      elementStore.forEachElement((element, meta) => {\n        if (meta.preventClean) {\n          return;\n        }\n        for (const [node] of meta.nodes) {\n          if (node.nodeType === Node.ATTRIBUTE_NODE) {\n            const attr = node as Attr;\n            if (\n              attr.name === TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE &&\n              attr.ownerElement === null\n            ) {\n              meta.nodes.delete(attr);\n            }\n          }\n        }\n        if (meta.nodes.size === 0) {\n          cleanElement(element, meta);\n        }\n      });\n    },\n\n    cleanupRemovedNodes(removedNodes: Set<Node>) {\n      elementStore.forEachElement((element, meta) => {\n        if (meta.preventClean) {\n          return;\n        }\n        if (!removedNodes.has(element)) {\n          cleanElementInactiveNodes(meta, removedNodes);\n        }\n        if (removedNodes.has(element) || meta.nodes.size === 0) {\n          cleanElement(element, meta);\n        }\n      });\n    },\n\n    findAll(key?: string, ns?: NsFallback) {\n      const result: ElementMeta[] = [];\n      elementStore.forEachElement((_, meta) => {\n        for (const nodeMeta of meta.nodes.values()) {\n          const fits = nodeMeta.keys.find((val) =>\n            compareDescriptors(\n              { key, ns: getFallback(ns) },\n              { key: val.key, ns: getFallback(val.ns) }\n            )\n          );\n          if (fits) {\n            result.push(meta);\n            break;\n          }\n        }\n      });\n      return result;\n    },\n\n    run(mouseHighlight: boolean) {\n      if (mouseHighlight) {\n        eventHandler.run();\n      }\n    },\n\n    stop() {\n      eventHandler.stop();\n      elementStore.forEachElement((_, meta) => {\n        if (meta.highlightEl) {\n          meta.unhighlight?.();\n        }\n      });\n    },\n  });\n}\n\nexport type ElementRegistryInstance = ReturnType<typeof ElementRegistry>;\n","import { TolgeeElement, ElementMeta } from '../../types';\n\nexport type RegistredElementsMap = Map<TolgeeElement, ElementMeta>;\n\nexport function ElementStore() {\n  const registredElements: RegistredElementsMap = new Map();\n\n  return Object.freeze({\n    set(el: TolgeeElement, meta: ElementMeta) {\n      registredElements.set(el, meta);\n    },\n\n    get(el: TolgeeElement | undefined) {\n      return el && registredElements.get(el);\n    },\n\n    remove(el: TolgeeElement) {\n      return registredElements.delete(el);\n    },\n\n    forEachElement(callback: (el: TolgeeElement, meta: ElementMeta) => void) {\n      registredElements.forEach((value, key) => callback(key, value));\n    },\n  });\n}\n\nexport type ElementStoreType = ReturnType<typeof ElementStore>;\n","import { ObserverOptionsInternal, WrapperMiddleware } from '@tolgee/core';\n\nexport function NodeHandler(\n  options: ObserverOptionsInternal,\n  wrapper: WrapperMiddleware\n) {\n  const self = Object.freeze({\n    handleAttributes(node: Node, includeChild = true) {\n      const result: Attr[] = [];\n\n      const tagAttributes = Object.fromEntries(\n        Object.entries(options.tagAttributes).map(([tag, attributes]) => [\n          tag.toUpperCase(),\n          attributes,\n        ])\n      ) as Record<string, string[]>;\n\n      if (node.nodeType === Node.ELEMENT_NODE) {\n        const element = node as Element;\n        let attributes = tagAttributes[element.tagName.toUpperCase()] ?? [];\n        if ('*' in tagAttributes) {\n          attributes = attributes.concat(tagAttributes['*']);\n        }\n        result.push(\n          ...(attributes\n            .filter((attrName) => element.hasAttribute(attrName))\n            .map((attrName) => element.getAttributeNode(attrName))\n            .filter((attrNode) =>\n              wrapper.testAttribute(attrNode as Attr)\n            ) as Attr[])\n        );\n      }\n\n      if (includeChild) {\n        const walker = document.createTreeWalker(\n          node,\n          NodeFilter.SHOW_ELEMENT,\n          (f) =>\n            tagAttributes[(f as Element).tagName.toUpperCase()]?.some((t) =>\n              (f as Element).hasAttribute(t)\n            ) || tagAttributes['*']?.some((t) => (f as Element).hasAttribute(t))\n              ? NodeFilter.FILTER_ACCEPT\n              : NodeFilter.FILTER_SKIP\n        );\n        while (walker.nextNode()) {\n          const element = walker.currentNode as Element;\n          let attributes = tagAttributes[element.tagName.toUpperCase()] ?? [];\n          if ('*' in tagAttributes) {\n            attributes = attributes.concat(tagAttributes['*']);\n          }\n          result.push(\n            ...(attributes\n              .filter((attrName) => element.hasAttribute(attrName))\n              .map((attrName) => element.getAttributeNode(attrName))\n              .filter((attrNode) =>\n                wrapper.testAttribute(attrNode as Attr)\n              ) as Attr[])\n          );\n        }\n      }\n\n      return result;\n    },\n\n    handleChildList(node: Node[]) {\n      const result: (Attr | Text)[] = [];\n      result.push(...node.flatMap((n) => self.handleAttributes(n, true)));\n      result.push(...node.flatMap((n) => self.handleText(n)));\n      // wrappedHandler(node);\n      return result;\n    },\n\n    handleText(node: Node) {\n      if (node.nodeType === Node.TEXT_NODE) {\n        return wrapper.testTextNode(node as Text) ? [node as Text] : [];\n      }\n\n      const nodes = [];\n\n      const walker = document.createTreeWalker(\n        node,\n        NodeFilter.SHOW_TEXT,\n        (f) =>\n          wrapper.testTextNode(f as Text)\n            ? NodeFilter.FILTER_ACCEPT\n            : NodeFilter.FILTER_SKIP\n      );\n      while (walker.nextNode()) {\n        nodes.push(walker.currentNode);\n      }\n\n      return nodes as Text[];\n    },\n  });\n\n  return self;\n}\n\nexport type NodeHandlerInstance = ReturnType<typeof NodeHandler>;\n","import {\n  NsFallback,\n  ObserverRunProps,\n  Unwrapped,\n  WrapperMiddleware,\n  WrapperWrapProps,\n  KeyPosition,\n  getFallback,\n} from '@tolgee/core';\n\nimport { TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE } from '../../constants';\nimport { isSSR } from '../../tools/isSSR';\nimport { ElementMeta, TolgeeElement } from '../../types';\nimport { DomHelper } from './DomHelper';\nimport { initNodeMeta } from './ElementMeta';\nimport { ElementRegistry, ElementRegistryInstance } from './ElementRegistry';\nimport { ElementStore } from './ElementStore';\nimport { compareDescriptors, getNodeText, setNodeText } from './helpers';\nimport { NodeHandler } from './NodeHandler';\n\ntype RunningInstance = {\n  stop: () => void;\n  elementRegistry?: ElementRegistryInstance;\n  wrapper: WrapperMiddleware;\n};\n\ntype RunProps = ObserverRunProps & {\n  wrapper: WrapperMiddleware;\n};\n\nexport function GeneralObserver() {\n  let isObserving = false;\n  let instance: RunningInstance | undefined;\n\n  const elementStore = ElementStore();\n\n  function createRunningInstance({\n    mouseHighlight,\n    options,\n    wrapper,\n    onClick,\n  }: RunProps): RunningInstance | undefined {\n    if (isSSR()) {\n      return {\n        stop() {\n          isObserving = false;\n        },\n        wrapper,\n      };\n    }\n    const domHelper = DomHelper(options);\n    const nodeHandler = NodeHandler(options, wrapper);\n    const elementRegistry = ElementRegistry(options, elementStore, onClick);\n\n    function handleNodes(nodes: Array<Text | Attr>) {\n      for (const textNode of nodes) {\n        const parent = textNode.parentElement;\n\n        if (parent && elementRegistry.isRestricted(parent)) {\n          continue;\n        }\n\n        const oldTextContent = getNodeText(textNode);\n\n        const result = oldTextContent ? wrapper.unwrap(oldTextContent) : null;\n        if (result) {\n          const { text, keys } = result;\n          setNodeText(textNode, text);\n          const nodeMeta = initNodeMeta(oldTextContent!, keys);\n          const parentElement = domHelper.getSuitableParent(textNode);\n          elementRegistry.register(parentElement, textNode, nodeMeta);\n        }\n      }\n    }\n\n    function handleKeyAttributeAttr(attr: Attr) {\n      const parentElement = domHelper.getSuitableParent(attr);\n      elementRegistry.register(parentElement, attr, {\n        oldTextContent: '',\n        keys: [{ key: getNodeText(attr)! }],\n        keyAttributeOnly: true,\n      });\n    }\n\n    function handleKeyAttribute(node: Node, includeChild: boolean) {\n      if (node.nodeType === Node.ATTRIBUTE_NODE) {\n        const attr = node as Attr;\n        if (attr.name === TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE) {\n          handleKeyAttributeAttr(attr);\n          return;\n        }\n      }\n\n      if (node.nodeType === Node.ELEMENT_NODE) {\n        const element = node as Element;\n        const attr = element.getAttributeNode(\n          TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE\n        ) as Attr;\n        if (attr) {\n          handleKeyAttributeAttr(attr);\n        }\n      }\n\n      if (!includeChild) {\n        return;\n      }\n\n      const walker = document.createTreeWalker(\n        node,\n        NodeFilter.SHOW_ELEMENT,\n        (e) =>\n          (e as Element).hasAttribute(TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE)\n            ? NodeFilter.FILTER_ACCEPT\n            : NodeFilter.FILTER_SKIP\n      );\n      while (walker.nextNode()) {\n        const attr = (walker.currentNode as Element).getAttributeNode(\n          TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE\n        ) as Node;\n        handleKeyAttributeAttr(attr as Attr);\n      }\n    }\n\n    const observer = new MutationObserver((mutationsList: MutationRecord[]) => {\n      if (!isObserving) {\n        return;\n      }\n\n      const removedNodes = mutationsList\n        .filter((m) => m.type === 'childList')\n        .flatMap((m) => Array.from(m.removedNodes));\n      const removedNodesSet = new Set(removedNodes);\n\n      for (const node of removedNodes) {\n        if (node.nodeType === Node.ELEMENT_NODE) {\n          for (let i = 0; i < (node as Element).attributes.length; i++) {\n            removedNodesSet.add((node as Element).attributes[i]);\n          }\n        }\n\n        const treeWalker = document.createTreeWalker(\n          node,\n          NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT\n        );\n        while (treeWalker.nextNode()) {\n          const currentNode = treeWalker.currentNode;\n          if (currentNode.nodeType === Node.ELEMENT_NODE) {\n            const element = currentNode as Element;\n            for (let i = 0; i < element.attributes.length; i++) {\n              removedNodesSet.add(element.attributes[i]);\n            }\n          }\n          removedNodesSet.add(currentNode);\n        }\n      }\n\n      if (removedNodesSet.size > 0) {\n        elementRegistry.cleanupRemovedNodes(removedNodesSet);\n      }\n\n      if (\n        mutationsList.some(\n          (m) =>\n            m.type === 'attributes' &&\n            m.attributeName === TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE\n        )\n      ) {\n        elementRegistry.cleanupLingeringKeyAttributes();\n      }\n\n      const result: Set<Attr | Text> = new Set();\n      for (const mutation of mutationsList) {\n        switch (mutation.type) {\n          case 'characterData':\n            nodeHandler\n              .handleText(mutation.target)\n              .forEach((t) => result.add(t));\n            break;\n\n          case 'childList':\n            handleKeyAttribute(mutation.target, true);\n            if (mutation.addedNodes.length > 0) {\n              nodeHandler\n                .handleChildList(Array.from(mutation.addedNodes))\n                .forEach((t) => result.add(t));\n            }\n            if (mutation.removedNodes.length > 0) {\n              nodeHandler\n                .handleChildList(Array.from(mutation.removedNodes))\n                .forEach((t) => result.delete(t));\n            }\n            break;\n\n          case 'attributes':\n            if (mutation.attributeName === TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE) {\n              handleKeyAttribute(mutation.target, false);\n            }\n            nodeHandler\n              .handleAttributes(mutation.target, false)\n              .forEach((t) => result.add(t));\n            break;\n        }\n      }\n      handleNodes([...result]);\n    });\n\n    const targetElement = options.targetElement || document;\n    isObserving = true;\n    elementRegistry.run(mouseHighlight);\n\n    // initially go through all elements\n    handleKeyAttribute(targetElement, true);\n    handleNodes(nodeHandler.handleChildList([targetElement]));\n\n    const monitorAttributeList = new Set<string>();\n    monitorAttributeList.add(TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE);\n    Object.values(options.tagAttributes).forEach((attrs) =>\n      attrs.forEach((attr) => monitorAttributeList.add(attr.toLowerCase()))\n    );\n\n    // then observe for changes\n    observer.observe(targetElement, {\n      attributes: true,\n      attributeFilter: [...monitorAttributeList],\n      childList: true,\n      subtree: true,\n      characterData: true,\n    });\n\n    return {\n      stop() {\n        isObserving = false;\n        elementRegistry.stop();\n        observer.disconnect();\n      },\n      elementRegistry,\n      wrapper,\n    };\n  }\n\n  const self = Object.freeze({\n    run(props: RunProps) {\n      instance = createRunningInstance(props);\n    },\n\n    stop() {\n      instance?.stop();\n    },\n\n    forEachElement(callback: (el: TolgeeElement, meta: ElementMeta) => void) {\n      instance?.elementRegistry?.forEachElement?.(callback);\n    },\n\n    highlight(key?: string, ns?: NsFallback) {\n      const elements = instance?.elementRegistry?.findAll(key, ns) || [];\n      elements.forEach((el) => el.highlight?.());\n      return {\n        unhighlight() {\n          elements.forEach((el) => el.unhighlight?.());\n        },\n      };\n    },\n\n    findPositions(key?: string, ns?: NsFallback) {\n      const elements = instance?.elementRegistry?.findAll(key, ns) || [];\n      const result: KeyPosition[] = [];\n      // sort elements by their position in the dom\n      elements.sort((a, b) => {\n        if (\n          a.element.compareDocumentPosition(b.element) &\n          Node.DOCUMENT_POSITION_FOLLOWING\n        ) {\n          return -1;\n        } else {\n          return 1;\n        }\n      });\n      elements.forEach((meta) => {\n        const shape = meta.element.getBoundingClientRect();\n        meta.nodes.forEach((node) => {\n          node.keys.forEach((val) => {\n            if (\n              compareDescriptors(\n                { key, ns: getFallback(ns) },\n                { key: val.key, ns: getFallback(val.ns) }\n              )\n            )\n              result.push({\n                position: {\n                  x: shape.x,\n                  y: shape.y,\n                  width: shape.width,\n                  height: shape.height,\n                },\n                keyName: val.key,\n                keyNamespace: val.ns || '',\n              });\n          });\n        });\n      });\n      return result;\n    },\n\n    unwrap(text: string): Unwrapped {\n      if (instance) {\n        return instance.wrapper.unwrap(text);\n      }\n      return {\n        text,\n        keys: [],\n      };\n    },\n\n    wrap(props: WrapperWrapProps): string {\n      if (instance) {\n        return instance.wrapper.wrap(props);\n      }\n      return props.translation || '';\n    },\n  });\n\n  return self;\n}\n\nexport type GeneralObserverType = ReturnType<typeof GeneralObserver>;\n","(function(scope) {'use strict';\nfunction B(r,e){var f;return r instanceof Buffer?f=r:f=Buffer.from(r.buffer,r.byteOffset,r.byteLength),f.toString(e)}var w=function(r){return Buffer.from(r)};function h(r){for(var e=0,f=Math.min(256*256,r.length+1),n=new Uint16Array(f),i=[],o=0;;){var t=e<r.length;if(!t||o>=f-1){var s=n.subarray(0,o),m=s;if(i.push(String.fromCharCode.apply(null,m)),!t)return i.join(\"\");r=r.subarray(e),e=0,o=0}var a=r[e++];if((a&128)===0)n[o++]=a;else if((a&224)===192){var d=r[e++]&63;n[o++]=(a&31)<<6|d}else if((a&240)===224){var d=r[e++]&63,l=r[e++]&63;n[o++]=(a&31)<<12|d<<6|l}else if((a&248)===240){var d=r[e++]&63,l=r[e++]&63,R=r[e++]&63,c=(a&7)<<18|d<<12|l<<6|R;c>65535&&(c-=65536,n[o++]=c>>>10&1023|55296,c=56320|c&1023),n[o++]=c}}}function F(r){for(var e=0,f=r.length,n=0,i=Math.max(32,f+(f>>>1)+7),o=new Uint8Array(i>>>3<<3);e<f;){var t=r.charCodeAt(e++);if(t>=55296&&t<=56319){if(e<f){var s=r.charCodeAt(e);(s&64512)===56320&&(++e,t=((t&1023)<<10)+(s&1023)+65536)}if(t>=55296&&t<=56319)continue}if(n+4>o.length){i+=8,i*=1+e/r.length*2,i=i>>>3<<3;var m=new Uint8Array(i);m.set(o),o=m}if((t&4294967168)===0){o[n++]=t;continue}else if((t&4294965248)===0)o[n++]=t>>>6&31|192;else if((t&4294901760)===0)o[n++]=t>>>12&15|224,o[n++]=t>>>6&63|128;else if((t&4292870144)===0)o[n++]=t>>>18&7|240,o[n++]=t>>>12&63|128,o[n++]=t>>>6&63|128;else continue;o[n++]=t&63|128}return o.slice?o.slice(0,n):o.subarray(0,n)}var u=\"Failed to \",p=function(r,e,f){if(r)throw new Error(\"\".concat(u).concat(e,\": the '\").concat(f,\"' option is unsupported.\"))};var x=typeof Buffer==\"function\"&&Buffer.from;var A=x?w:F;function v(){this.encoding=\"utf-8\"}v.prototype.encode=function(r,e){return p(e&&e.stream,\"encode\",\"stream\"),A(r)};function U(r){var e;try{var f=new Blob([r],{type:\"text/plain;charset=UTF-8\"});e=URL.createObjectURL(f);var n=new XMLHttpRequest;return n.open(\"GET\",e,!1),n.send(),n.responseText}finally{e&&URL.revokeObjectURL(e)}}var O=!x&&typeof Blob==\"function\"&&typeof URL==\"function\"&&typeof URL.createObjectURL==\"function\",S=[\"utf-8\",\"utf8\",\"unicode-1-1-utf-8\"],T=h;x?T=B:O&&(T=function(r){try{return U(r)}catch(e){return h(r)}});var y=\"construct 'TextDecoder'\",E=\"\".concat(u,\" \").concat(y,\": the \");function g(r,e){p(e&&e.fatal,y,\"fatal\"),r=r||\"utf-8\";var f;if(x?f=Buffer.isEncoding(r):f=S.indexOf(r.toLowerCase())!==-1,!f)throw new RangeError(\"\".concat(E,\" encoding label provided ('\").concat(r,\"') is invalid.\"));this.encoding=r,this.fatal=!1,this.ignoreBOM=!1}g.prototype.decode=function(r,e){p(e&&e.stream,\"decode\",\"stream\");var f;return r instanceof Uint8Array?f=r:r.buffer instanceof ArrayBuffer?f=new Uint8Array(r.buffer):f=new Uint8Array(r),T(f,this.encoding)};scope.TextEncoder=scope.TextEncoder||v;scope.TextDecoder=scope.TextDecoder||g;\n}(typeof window !== 'undefined' ? window : (typeof global !== 'undefined' ? global : this)));\n","// @ts-ignore\nimport * as FastTextEncoding from 'fast-text-encoding';\n// make sure it's not treeshaken\n// eslint-disable-next-line no-console\nconsole.assert?.(FastTextEncoding);\n\nexport const INVISIBLE_CHARACTERS = ['\\u200C', '\\u200D'];\n\nexport const INVISIBLE_REGEX = RegExp(\n  `([${INVISIBLE_CHARACTERS.join('')}]{9})+`,\n  'g'\n);\n\nfunction toBytes(text: string) {\n  return Array.from(new TextEncoder().encode(text));\n}\n\nfunction fromBytes(bytes: Iterable<number>) {\n  return new TextDecoder().decode(new Uint8Array(bytes));\n}\n\nfunction padToWholeBytes(binary: string) {\n  const needsToAdd = 8 - binary.length;\n  return '0'.repeat(needsToAdd) + binary;\n}\n\nexport function encodeMessage(text: string) {\n  const bytes = toBytes(text).map(Number);\n  const binary = bytes\n    .map((byte) => padToWholeBytes(byte.toString(2)) + '0')\n    .join('');\n\n  const result = Array.from(binary)\n    .map((b) => INVISIBLE_CHARACTERS[Number(b)])\n    .join('');\n\n  return result;\n}\n\nfunction decodeMessage(message: string) {\n  const binary = Array.from(message)\n    .map((character) => {\n      return INVISIBLE_CHARACTERS.indexOf(character);\n    })\n    .map(String)\n    .join('');\n\n  const textBytes = binary.match(/(.{9})/g);\n  const codes = Uint8Array.from(\n    textBytes?.map((byte) => parseInt(byte.slice(0, 8), 2)) || []\n  );\n  return fromBytes(codes);\n}\n\nexport function decodeFromText(text: string) {\n  const invisibleMessages = text\n    .match(INVISIBLE_REGEX)\n    ?.filter((m) => m.length > 8);\n  return invisibleMessages?.map(decodeMessage) || [];\n}\n\nexport function removeSecrets(text: string) {\n  return text.replace(INVISIBLE_REGEX, '');\n}\n","export function ValueMemory() {\n  const values: string[] = [];\n\n  return Object.freeze({\n    valueToNumber(key: string) {\n      let index = values.indexOf(key);\n      if (index === -1) {\n        index = values.length;\n        values.push(key);\n      }\n      return index;\n    },\n\n    numberToValue(num: number) {\n      return values[num];\n    },\n  });\n}\n\nexport type ValueMemoryInstance = ReturnType<typeof ValueMemory>;\n","import type {\n  KeyAndParams,\n  Unwrapped,\n  WrapperMiddleware,\n  TranslatePropsInternal,\n} from '@tolgee/core';\n\nimport {\n  decodeFromText,\n  encodeMessage,\n  INVISIBLE_CHARACTERS,\n  removeSecrets,\n} from './secret';\nimport { ValueMemory } from './ValueMemory';\n\n/**\n * LF character to separate messages (when they are right next to each other)\n *\n * We can use the fact that `\\n` characters get escaped inside the JSON strings and we don't need them with numbers\n * so we can safely use newlines to separate strings\n *\n * WARNING: don't encode formatted json like this (because then there are newlines):\n * {\n *   \"a\": \"b\"\n * }\n * this is correct:\n * {\"a\":\"b\"}\n */\nexport const MESSAGE_END = '\\x0A';\n\ntype EncodeValue = {\n  // key\n  k: string;\n  // namespaces\n  n: string | undefined;\n  // default value\n  d: string | undefined;\n};\n\ntype Props = {\n  fullKeyEncode: boolean;\n};\n\nexport function InvisibleWrapper({ fullKeyEncode }: Props): WrapperMiddleware {\n  const keyMemory = ValueMemory();\n\n  function encodeValue(data: TranslatePropsInternal) {\n    const value: EncodeValue = {\n      k: data.key,\n      n: data.ns || undefined,\n      d: data.defaultValue,\n    };\n    return JSON.stringify(value);\n  }\n\n  function decodeValue(value: string): EncodeValue | undefined {\n    try {\n      return JSON.parse(value || '{}') as EncodeValue;\n    } catch (e) {\n      // eslint-disable-next-line no-console\n      console.error(e);\n      return undefined;\n    }\n  }\n\n  function retrieveMessages(text: string) {\n    return text\n      .split(MESSAGE_END)\n      .filter((m) => m.length)\n      .map((message) => {\n        if (message[0] === '{') {\n          // there is a json inside - the full key is included, not just number `fullKeyEncode`\n          return message;\n        } else {\n          const valueCode = Number(message);\n          return keyMemory.numberToValue(valueCode);\n        }\n      });\n  }\n\n  function encodeWithSeparator(message: string) {\n    return encodeMessage(message + MESSAGE_END);\n  }\n\n  return Object.freeze({\n    unwrap(text: string): Unwrapped {\n      const keysAndParams = [] as KeyAndParams[];\n      const texts = decodeFromText(text);\n      texts.forEach((encodedValue: string) => {\n        const messages = retrieveMessages(encodedValue);\n        messages.forEach((message) => {\n          const decodedVal = decodeValue(message);\n          if (decodedVal) {\n            const { k: key, d: defaultValue, n: ns } = decodedVal;\n            keysAndParams.push({\n              key,\n              defaultValue,\n              ns,\n            });\n          }\n        });\n      });\n\n      const result = removeSecrets(text);\n\n      return { text: result, keys: keysAndParams };\n    },\n\n    wrap({ key, defaultValue, translation, ns }) {\n      let invisibleMark: string;\n      if (fullKeyEncode) {\n        // don't include default value, as that might be very long when encoded\n        const encodedValue = encodeValue({ key, ns });\n        invisibleMark = encodeWithSeparator(encodedValue);\n      } else {\n        const encodedValue = encodeValue({ key, ns, defaultValue });\n        const code = keyMemory.valueToNumber(encodedValue);\n        invisibleMark = encodeWithSeparator(String(code));\n      }\n\n      const value = translation || '';\n\n      return typeof value === 'string' ? value + invisibleMark : value;\n    },\n\n    testTextNode(textNode: Text) {\n      return (\n        (textNode.textContent?.includes(\n          `${INVISIBLE_CHARACTERS[0]}${INVISIBLE_CHARACTERS[0]}`\n        ) ||\n          textNode.textContent?.includes(\n            `${INVISIBLE_CHARACTERS[1]}${INVISIBLE_CHARACTERS[0]}`\n          )) ??\n        false\n      );\n    },\n\n    testAttribute(attribute: Attr) {\n      return (\n        attribute.value.includes(\n          `${INVISIBLE_CHARACTERS[0]}${INVISIBLE_CHARACTERS[0]}`\n        ) ||\n        attribute.value.includes(\n          `${INVISIBLE_CHARACTERS[1]}${INVISIBLE_CHARACTERS[0]}`\n        )\n      );\n    },\n  });\n}\n","import type { ObserverMiddleware, ObserverRunProps } from '@tolgee/core';\nimport { GeneralObserver } from './observers/general/GeneralObserver';\nimport { InvisibleWrapper } from './observers/invisible/InvisibleWrapper';\n\nexport const InvisibleObserver = (): ObserverMiddleware => () => {\n  const observer = GeneralObserver();\n\n  const self = Object.freeze({\n    ...observer,\n    run(props: ObserverRunProps) {\n      const wrapper = InvisibleWrapper({\n        fullKeyEncode: props.options.fullKeyEncode,\n      });\n      observer.run({ ...props, wrapper });\n    },\n    retranslate() {},\n    outputNotFormattable: false,\n  });\n  return self;\n};\n","export function splitOnNonEscapedDelimiter(\n  string: string,\n  delimiter: string\n): string[] {\n  const result = [];\n  let actual = '';\n  let escaped = false;\n  for (let i = 0; i < string.length; i++) {\n    const char = string[i];\n    if (char === '\\\\' && !escaped) {\n      escaped = true;\n      continue;\n    }\n    if (escaped) {\n      escaped = false;\n      actual += char;\n      continue;\n    }\n    if (char === delimiter) {\n      result.push(actual);\n      actual = '';\n      continue;\n    }\n    actual += char;\n  }\n  result.push(actual);\n  return result;\n}\n\nexport function isCharEscaped(position: number, fullString: string) {\n  let escapeCharsCount = 0;\n  while (position > -1 && fullString[position - 1] === '\\\\') {\n    escapeCharsCount++;\n    position--;\n  }\n  return escapeCharsCount % 2 == 1;\n}\n\nexport function removeEscapes(string: string) {\n  let result = '';\n  let escaped = false;\n  for (let i = 0; i < string.length; i++) {\n    const char = string[i];\n    if (char === '\\\\' && !escaped) {\n      escaped = true;\n      continue;\n    }\n    if (escaped) {\n      escaped = false;\n      result += char;\n      continue;\n    }\n    result += char;\n  }\n  return result;\n}\n","import type {\n  KeyAndParams,\n  TranslatePropsInternal,\n  WrapperMiddleware,\n} from '@tolgee/core';\nimport { isCharEscaped } from './helpers';\n\ntype Props = {\n  inputPrefix: string;\n  inputSuffix: string;\n  translate: (params: TranslatePropsInternal) => string;\n};\n\nexport function TextWrapper({\n  inputPrefix,\n  inputSuffix,\n  translate,\n}: Props): WrapperMiddleware {\n  function getRawUnWrapRegex(): string {\n    const escapedPrefix = escapeForRegExp(inputPrefix);\n    const escapedSuffix = escapeForRegExp(inputSuffix);\n    return `(\\\\\\\\?)(${escapedPrefix}(.*?)${escapedSuffix})`;\n  }\n\n  function parseUnwrapped(unwrappedString: string): KeyAndParams {\n    let escaped = false;\n    let actual = '';\n    let paramName = '';\n    let readingState:\n      | 'KEY'\n      | 'DEFAULT_VALUE'\n      | 'PARAM_NAME'\n      | 'PARAM_VALUE'\n      | 'NAMESPACE' = 'KEY';\n\n    const result = {\n      key: '',\n      ns: undefined as string | undefined,\n      params: {},\n      defaultValue: undefined as string | undefined,\n    } as KeyAndParams;\n\n    const addNamespace = (ns: string) => {\n      result.ns = ns;\n    };\n\n    for (const char of unwrappedString) {\n      if (char === '\\\\' && !escaped) {\n        escaped = true;\n        continue;\n      }\n      if (escaped) {\n        escaped = false;\n        actual += char;\n        continue;\n      }\n      if (readingState === 'KEY' && char === ',') {\n        readingState = 'DEFAULT_VALUE';\n        result.key = actual;\n        actual = '';\n        continue;\n      }\n      if (readingState === 'KEY' && char === '|') {\n        readingState = 'NAMESPACE';\n        result.key = actual;\n        actual = '';\n        continue;\n      }\n      if (readingState === 'NAMESPACE' && char === ',') {\n        readingState = 'DEFAULT_VALUE';\n        addNamespace(actual);\n        actual = '';\n        continue;\n      }\n      if (readingState === 'KEY' && char === ':') {\n        readingState = 'PARAM_NAME';\n        result.key = actual;\n        actual = '';\n        continue;\n      }\n\n      if (readingState === 'DEFAULT_VALUE' && char === ':') {\n        readingState = 'PARAM_NAME';\n        result.defaultValue = actual;\n        actual = '';\n        continue;\n      }\n\n      if (readingState === 'PARAM_NAME' && char === ':') {\n        readingState = 'PARAM_VALUE';\n        paramName = actual;\n        actual = '';\n        continue;\n      }\n\n      if (readingState === 'PARAM_VALUE' && char === ',') {\n        readingState = 'PARAM_NAME';\n        result.params![paramName] = actual;\n        actual = '';\n        continue;\n      }\n      actual += char;\n    }\n\n    if (readingState === 'KEY') {\n      result.key = actual;\n    }\n\n    if (readingState === 'DEFAULT_VALUE') {\n      result.defaultValue = actual;\n    }\n\n    if (readingState === 'PARAM_VALUE') {\n      result.params![paramName] = actual;\n    }\n\n    if (readingState === 'NAMESPACE') {\n      addNamespace(actual);\n    }\n\n    return result;\n  }\n\n  function getTranslatedWithMetadata(text: string) {\n    const { key, params, defaultValue, ns } = parseUnwrapped(text);\n    const translated = translate({\n      key,\n      params,\n      defaultValue,\n      ns,\n      noWrap: true,\n    });\n    return { translated, key, params, defaultValue, ns };\n  }\n\n  function escapeForRegExp(string: string) {\n    return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n  }\n\n  function escapeParam(param: any) {\n    if (typeof param === 'string') {\n      return param.replace(/[,:|\\\\]/g, '\\\\$&');\n    }\n    if (typeof param === 'number' || typeof param === 'bigint') {\n      return param.toString();\n    }\n    // eslint-disable-next-line no-console\n    console.warn(\n      `Parameters of type \"${typeof param}\" are not supported in \"text\" wrapper mode.`\n    );\n    return param;\n  }\n\n  return Object.freeze({\n    wrap({ key, params, defaultValue, ns }): string {\n      let paramString = Object.entries(params || {})\n        .map(\n          ([name, value]) =>\n            `${escapeParam(name)}:${escapeParam(value as string)}`\n        )\n        .join(',');\n      paramString = paramString.length ? `:${paramString}` : '';\n\n      const defaultString =\n        defaultValue !== undefined ? `,${escapeParam(defaultValue)}` : '';\n\n      const nsArray = typeof ns === 'string' ? [ns] : ns;\n\n      const namespaces = nsArray?.length\n        ? `|${nsArray.map((ns) => escapeParam(ns)).join('|')}`\n        : '';\n\n      return `${inputPrefix}${escapeParam(\n        key\n      )}${namespaces}${defaultString}${paramString}${inputSuffix}`;\n    },\n\n    unwrap(text: string) {\n      const matchRegexp = new RegExp(getRawUnWrapRegex(), 'gs');\n\n      const keysAndParams: KeyAndParams[] = [];\n\n      let matched = false;\n\n      let match;\n      let start = 0;\n      let result = '';\n      while ((match = matchRegexp.exec(text)) !== null) {\n        let pre = match[1] as string;\n        const [fullMatch, _, wrapped, unwrapped] = match as unknown as [\n          string,\n          string,\n          string,\n          string,\n        ];\n        const { index, input } = match;\n        result += input.substr(start, index - start);\n        start = index + fullMatch.length;\n        if (pre === '\\\\') {\n          if (!isCharEscaped(index, text)) {\n            result += wrapped;\n            continue;\n          }\n          pre = '';\n        }\n        const translated = getTranslatedWithMetadata(unwrapped);\n        keysAndParams.push({\n          key: translated.key,\n          params: translated.params,\n          defaultValue: translated.defaultValue,\n          ns: translated.ns,\n        });\n        matched = true;\n        result += pre + translated.translated;\n      }\n\n      result += text.substring(start);\n\n      if (matched) {\n        return { text: result, keys: keysAndParams };\n      }\n\n      return { text: text, keys: [] };\n    },\n\n    testTextNode(textNode: Text) {\n      return (\n        (textNode.textContent?.includes(inputPrefix) &&\n          textNode.textContent?.includes(inputSuffix)) ??\n        false\n      );\n    },\n\n    testAttribute(attribute: Attr) {\n      return (\n        attribute.value.includes(inputPrefix) &&\n        attribute.value.includes(inputSuffix)\n      );\n    },\n  });\n}\n","import type { ObserverMiddleware, ObserverRunProps } from '@tolgee/core';\nimport { GeneralObserver } from './observers/general/GeneralObserver';\nimport { setNodeText } from './observers/general/helpers';\nimport { TextWrapper } from './observers/text/TextWrapper';\n\nexport const TextObserver = (): ObserverMiddleware => () => {\n  const observer = GeneralObserver();\n\n  const self = Object.freeze({\n    ...observer,\n\n    run(props: ObserverRunProps) {\n      const wrapper = TextWrapper({\n        inputPrefix: props.options.inputPrefix,\n        inputSuffix: props.options.inputSuffix,\n        translate: props.translate,\n      });\n      observer.run({ ...props, wrapper });\n    },\n\n    retranslate() {\n      observer.forEachElement((_, elMeta) => {\n        for (const [node, nodeMeta] of elMeta.nodes.entries()) {\n          if (nodeMeta.keyAttributeOnly) {\n            return;\n          }\n          const result = observer.unwrap(nodeMeta.oldTextContent);\n          if (result) {\n            setNodeText(node, result.text);\n          }\n        }\n      });\n    },\n\n    outputNotFormattable: true,\n  });\n  return self;\n};\n","import { TolgeePlugin } from '@tolgee/core';\nimport { InvisibleObserver } from './InvisibleObserver';\nimport { TextObserver } from './TextObserver';\n\nexport const ObserverPlugin = (): TolgeePlugin => (tolgee, tools) => {\n  if (tolgee.getInitialOptions().observerType === 'text') {\n    tools.setObserver(TextObserver());\n  } else {\n    tools.setObserver(InvisibleObserver());\n  }\n  return tolgee;\n};\n","const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\nfunction readChar(char: string) {\n  const idx = alphabet.indexOf(char);\n\n  if (idx === -1) {\n    throw new Error('Invalid character found: ' + char);\n  }\n\n  return idx;\n}\n\nfunction arrayBufferToString(buffer: any) {\n  const bufView = new Uint8Array(buffer);\n  const length = bufView.length;\n  let result = '';\n  let addition = Math.pow(2, 16) - 1;\n\n  for (let i = 0; i < length; i += addition) {\n    if (i + addition > length) {\n      addition = length - i;\n    }\n    result += String.fromCharCode.apply(\n      null,\n      // @ts-ignore\n      bufView.subarray(i, i + addition)\n    );\n  }\n\n  return result;\n}\n\nfunction base32Decode(input: string) {\n  input = input.toUpperCase();\n\n  const length = input.length;\n\n  let bits = 0;\n  let value = 0;\n\n  let index = 0;\n  const output = new Uint8Array(((length * 5) / 8) | 0);\n\n  for (let i = 0; i < length; i++) {\n    value = (value << 5) | readChar(input[i]);\n    bits += 5;\n\n    if (bits >= 8) {\n      output[index++] = (value >>> (bits - 8)) & 255;\n      bits -= 8;\n    }\n  }\n\n  return arrayBufferToString(output.buffer);\n}\n\nexport function getProjectIdFromApiKey(\n  key: string | undefined\n): number | undefined {\n  if (!key) {\n    return undefined;\n  }\n  try {\n    const [prefix, rest] = key.split('_');\n    if (prefix === 'tgpak') {\n      const [projectId] = base32Decode(rest).split('_');\n      return Number(projectId);\n    }\n  } catch {\n    // eslint-disable-next-line no-console\n    console.warn(\"Tolgee: Api key can't be parsed\");\n  }\n  return undefined;\n}\n\nexport function getApiKeyType(key: string | undefined) {\n  if (!key) {\n    return undefined;\n  }\n  const [prefix] = key.split('_');\n  if (prefix === 'tgpak') {\n    return 'tgpak';\n  } else if (prefix === 'tgpat') {\n    return 'tgpat';\n  }\n\n  return 'legacy';\n}\n","function composeUrl(base: string, path: string): string {\n  // Ensure the base URL does not end with a slash\n  base = base.replace(/\\/+$/, '');\n  // Ensure the path does not start with a slash\n  path = path.replace(/^\\/+/, '');\n  // Combine the two parts with a single slash in between\n  return `${base}/${path}`;\n}\n\nexport function joinUrls(...parts: string[]): string {\n  let result = parts[0];\n  parts.slice(1).forEach((part) => {\n    result = composeUrl(result, part);\n  });\n  return result;\n}\n\nexport function createUrl(...parts: string[]): URL {\n  const url = joinUrls(...parts);\n\n  try {\n    const base =\n      typeof window === 'undefined' ? undefined : window.location.origin;\n    return new URL(url, base);\n  } catch {\n    // there might be a weird value in `base`\n    // https://github.com/tolgee/tolgee-js/issues/3458\n    return new URL(url);\n  }\n}\n","import { BackendDevMiddleware, TolgeePlugin } from '@tolgee/core';\nimport { getApiKeyType, getProjectIdFromApiKey } from './tools/decodeApiKey';\nimport { createUrl } from './tools/url';\n\nfunction createDevBackend(): BackendDevMiddleware {\n  return {\n    getRecord({\n      apiUrl,\n      apiKey,\n      projectId,\n      branch,\n      language,\n      namespace,\n      filterTag,\n      fetch,\n    }) {\n      const pId = getProjectIdFromApiKey(apiKey) ?? projectId;\n      let url: URL;\n      if (pId !== undefined) {\n        url = createUrl(apiUrl, `/v2/projects/${pId}/translations/${language}`);\n      } else {\n        url = createUrl(apiUrl, `/v2/projects/translations/${language}`);\n      }\n\n      if (branch) {\n        url.searchParams.append('branch', branch);\n      }\n      if (namespace) {\n        url.searchParams.append('ns', namespace);\n      }\n      filterTag?.forEach((tag) => {\n        url.searchParams.append('filterTag', tag);\n      });\n\n      if (getApiKeyType(apiKey) === 'tgpat' && projectId === undefined) {\n        throw new Error(\"You need to specify 'projectId' when using PAT key\");\n      }\n\n      return fetch(url.toString(), {\n        headers: {\n          'X-API-Key': apiKey || '',\n          'Content-Type': 'application/json',\n        },\n        // @ts-ignore - tell next.js to not use cache\n        next: { revalidate: 0 },\n      }).then((r) => {\n        if (r.ok) {\n          return r.json().then((data) => data[language]);\n        } else {\n          throw new Error(r.statusText);\n        }\n      });\n    },\n  };\n}\n\nexport const DevBackend = (): TolgeePlugin => (tolgee, tools) => {\n  tools.setDevBackend(createDevBackend());\n  return tolgee;\n};\n","type Props = {\n  message: string;\n  recievingMessage: string[];\n  data?: any;\n  attempts?: number;\n  timeout?: number;\n};\n\nexport function listen<T = any>(type: string[], callback: (data?: T) => any) {\n  const handler = (e: MessageEvent) => {\n    if (type.includes(e.data?.type)) {\n      callback(e.data?.data);\n    }\n  };\n  window.addEventListener('message', handler, false);\n  return {\n    unsubscribe() {\n      window.removeEventListener('message', handler);\n    },\n  };\n}\n\nexport function sendAndRecieve<T>({\n  message,\n  recievingMessage,\n  data,\n  attempts = 1,\n  timeout = 300,\n}: Props) {\n  let cancelled = false;\n  const makeAttempt = () =>\n    new Promise<T>((resolve, reject) => {\n      const listener = listen(recievingMessage, handler);\n      window.postMessage({ type: message, data }, window.origin);\n      const timer = setTimeout(expire, timeout);\n\n      function handler(data: any) {\n        clearTimeout(timer);\n        removeEventListener();\n        resolve(data);\n      }\n      function removeEventListener() {\n        listener.unsubscribe();\n      }\n      function expire() {\n        removeEventListener();\n        reject();\n      }\n    });\n\n  const getData = async (): Promise<T> => {\n    for (let i = 0; i < attempts; i++) {\n      if (cancelled) {\n        return new Promise<T>(() => {});\n      }\n      try {\n        const result = await makeAttempt();\n        return result;\n      } catch (e) {\n        continue;\n      }\n    }\n    if (!cancelled) {\n      throw `Didn't recieve ${recievingMessage.join(' or ')} in time.`;\n    }\n    return new Promise<T>(() => {});\n  };\n\n  return {\n    cancel() {\n      cancelled = true;\n    },\n    promise: getData(),\n  };\n}\n\nexport function takeScreenshot(): Promise<string> {\n  return sendAndRecieve({\n    message: 'TOLGEE_TAKE_SCREENSHOT',\n    recievingMessage: ['TOLGEE_SCREENSHOT_TAKEN'],\n    timeout: 3000,\n  }).promise as Promise<string>;\n}\n\nexport async function detectExtension(): Promise<boolean> {\n  try {\n    await sendAndRecieve({\n      message: 'TOLGEE_PING',\n      recievingMessage: ['TOLGEE_PONG'],\n      attempts: 2,\n    }).promise;\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport type LibConfig = {\n  uiPresent: boolean;\n  uiVersion?: string;\n  mode: 'production' | 'development';\n  config: {\n    apiUrl: string;\n    apiKey: string;\n    branch?: string;\n  };\n};\n\nexport function Handshaker() {\n  let cancelLast: undefined | (() => void) = undefined;\n  async function update(data: LibConfig): Promise<boolean> {\n    cancelLast?.();\n    const { cancel, promise } = sendAndRecieve<boolean>({\n      message: 'TOLGEE_READY',\n      recievingMessage: ['TOLGEE_PLUGIN_READY', 'TOLGEE_PLUGIN_UPDATED'],\n      data,\n      attempts: 4,\n    });\n    cancelLast = cancel;\n    return promise;\n  }\n  return {\n    update,\n  };\n}\n","export const IN_CONTEXT_FILE = 'tolgee-in-context-tools.umd.min.js';\nexport const IN_CONTEXT_UMD_NAME = '@tolgee/in-context-tools';\nexport const IN_CONTEXT_EXPORT_NAME = 'InContextTools';\n","import type { InContextTools } from '../InContextTools';\nimport {\n  IN_CONTEXT_FILE,\n  IN_CONTEXT_UMD_NAME,\n  IN_CONTEXT_EXPORT_NAME,\n} from './constants';\n\nconst CDN_URL = 'https://cdn.jsdelivr.net/npm';\n\nfunction injectScript(src: string) {\n  return new Promise<void>((resolve, reject) => {\n    const script = document.createElement('script');\n    script.src = src;\n    script.addEventListener('load', () => resolve());\n    script.addEventListener('error', (e) => reject(e.error));\n    document.head.appendChild(script);\n  });\n}\n\nlet injectPromise = null as any as Promise<typeof InContextTools>;\n\nexport function loadInContextLib(version: string) {\n  if (!injectPromise) {\n    injectPromise = injectScript(\n      `${CDN_URL}/@tolgee/web@${version}/dist/${IN_CONTEXT_FILE}`\n    ).then(() => {\n      // @ts-ignore\n      return window[IN_CONTEXT_UMD_NAME][IN_CONTEXT_EXPORT_NAME];\n    });\n  }\n  return injectPromise;\n}\n","import type { TolgeePlugin } from '@tolgee/core';\nimport { Handshaker } from '../tools/extension';\nimport { loadInContextLib } from './loadInContextLib';\n\nexport const API_KEY_LOCAL_STORAGE = '__tolgee_apiKey';\nexport const API_URL_LOCAL_STORAGE = '__tolgee_apiUrl';\nexport const BRANCH_LOCAL_STORAGE = '__tolgee_branch';\n\nfunction getCredentials() {\n  const apiKey = sessionStorage.getItem(API_KEY_LOCAL_STORAGE) || undefined;\n  const apiUrl = sessionStorage.getItem(API_URL_LOCAL_STORAGE) || undefined;\n  const branch = sessionStorage.getItem(BRANCH_LOCAL_STORAGE) || undefined;\n\n  if (!apiKey || !apiUrl) {\n    return undefined;\n  }\n\n  return {\n    apiKey,\n    apiUrl,\n    ...(branch !== undefined ? { branch } : {}),\n  };\n}\n\nfunction clearSessionStorage() {\n  sessionStorage.removeItem(API_KEY_LOCAL_STORAGE);\n  sessionStorage.removeItem(API_URL_LOCAL_STORAGE);\n  sessionStorage.removeItem(BRANCH_LOCAL_STORAGE);\n}\n\nfunction onDocumentReady(callback: () => void) {\n  // in case the document is already rendered\n  if (document.readyState !== 'loading') {\n    Promise.resolve().then(() => {\n      callback();\n    });\n  }\n  // modern browsers\n  else if (document.addEventListener) {\n    document.addEventListener('DOMContentLoaded', callback);\n  }\n}\n\nexport type BrowserExtensionProps = {\n  noReload?: boolean;\n};\n\nlet BrowserExtensionPlugin: () => TolgeePlugin = () => (tolgee) => tolgee;\n\nconst sessionStorageAvailable = () => {\n  if (typeof window === 'undefined') {\n    return false;\n  }\n  try {\n    return typeof sessionStorage !== 'undefined' && sessionStorage;\n  } catch (err) {\n    // eslint-disable-next-line no-console\n    console.error('sessionStorage not available', err);\n    return false;\n  }\n};\n\nif (sessionStorageAvailable()) {\n  BrowserExtensionPlugin = (): TolgeePlugin => (tolgee) => {\n    const handshaker = Handshaker();\n    const getConfig = () =>\n      ({\n        // prevent extension downloading ui library\n        uiPresent: true,\n        uiVersion: undefined,\n        // tolgee mode\n        mode: tolgee.isDev() ? 'development' : 'production',\n        // pass credentials\n        config: {\n          apiUrl: tolgee.getInitialOptions().apiUrl || '',\n          apiKey: tolgee.getInitialOptions().apiKey || '',\n          branch: tolgee.getInitialOptions().branch,\n        },\n      }) as const;\n\n    const getTolgeePlugin = async (): Promise<TolgeePlugin> => {\n      const InContextTools = await loadInContextLib(\n        process.env.TOLGEE_UI_VERSION || 'prerelease'\n      );\n      return (tolgee) => {\n        const credentials = getCredentials()!;\n        tolgee.addPlugin(InContextTools({ credentials }));\n        return tolgee;\n      };\n    };\n\n    tolgee.on('running', ({ value: isRunning }) => {\n      if (isRunning) {\n        onDocumentReady(() => {\n          handshaker.update(getConfig()).catch(clearSessionStorage);\n        });\n      }\n    });\n\n    const credentials = getCredentials();\n    if (credentials) {\n      getTolgeePlugin()\n        .then((plugin) => {\n          tolgee.addPlugin(plugin);\n        })\n        .catch((e) => {\n          // eslint-disable-next-line no-console\n          console.error('Tolgee: Failed to load in-context tools');\n          // eslint-disable-next-line no-console\n          console.error(e);\n        });\n    }\n\n    return tolgee;\n  };\n}\n\nexport { BrowserExtensionPlugin };\n","import type { LanguageStorageMiddleware, TolgeePlugin } from '@tolgee/core';\nimport { throwIfSSR } from './tools/isSSR';\n\nconst CURRENT_LANGUAGE_LOCAL_STORAGE_KEY = '__tolgee_currentLanguage';\n\nexport function createLanguageStorage(): LanguageStorageMiddleware {\n  return {\n    getLanguage() {\n      throwIfSSR('LanguageStorage');\n      const storedLanguage = localStorage.getItem(\n        CURRENT_LANGUAGE_LOCAL_STORAGE_KEY\n      );\n\n      return storedLanguage || undefined;\n    },\n\n    setLanguage(language: string) {\n      throwIfSSR('LanguageStorage');\n      localStorage.setItem(CURRENT_LANGUAGE_LOCAL_STORAGE_KEY, language);\n    },\n  };\n}\n\nexport const LanguageStorage = (): TolgeePlugin => (tolgee, tools) => {\n  tools.setLanguageStorage(createLanguageStorage());\n  return tolgee;\n};\n","import type { LanguageDetectorMiddleware, TolgeePlugin } from '@tolgee/core';\nimport { throwIfSSR } from './tools/isSSR';\n\nexport function detectLanguage(language: string, availableLanguages: string[]) {\n  const exactMatch = availableLanguages.find((l) => l === language);\n  if (exactMatch) {\n    return exactMatch;\n  }\n\n  const getTwoLetters = (fullTag: string) =>\n    fullTag.replace(/^(.+?)(-.*)?$/, '$1');\n\n  const preferredTwoLetter = getTwoLetters(language);\n  const twoLetterMatch = availableLanguages.find(\n    (l) => getTwoLetters(l) === preferredTwoLetter\n  );\n  if (twoLetterMatch) {\n    return twoLetterMatch;\n  }\n  return undefined;\n}\n\nexport function createLanguageDetector(): LanguageDetectorMiddleware {\n  return {\n    getLanguage({ availableLanguages }) {\n      throwIfSSR('LanguageDetector');\n      const preferred = window.navigator.language;\n      return detectLanguage(preferred, availableLanguages);\n    },\n  };\n}\n\nexport const LanguageDetector = (): TolgeePlugin => (tolgee, tools) => {\n  tools.setLanguageDetector(createLanguageDetector());\n  return tolgee;\n};\n","export function getHeaderLanguages(headers: Headers) {\n  const acceptLanguageHeader = headers.get('Accept-Language');\n  if (!acceptLanguageHeader) {\n    return [];\n  }\n  // Split the header into locales based on commas\n  const locales = acceptLanguageHeader.split(',').map((locale) => {\n    // Remove whitespace and split by ';' to get only the locale part\n    const [localePart] = locale.trim().split(';');\n    return localePart;\n  });\n\n  // Filter out any empty strings and return the unique locales\n  return [...new Set(locales.filter((locale) => locale && locale !== '*'))];\n}\n","import { detectLanguage } from '../LanguageDetector';\nimport { getHeaderLanguages } from './getHeaderLanguages';\n\nexport const detectLanguageFromHeaders = (\n  headers: Headers,\n  availableLanguages: string[]\n) => {\n  const languages = getHeaderLanguages(headers);\n  return languages[0] && detectLanguage(languages[0], availableLanguages);\n};\n","import type { BackendMiddleware, FetchFn, TolgeePlugin } from '@tolgee/core';\nimport { GetPath, BackendOptions } from './types';\n\nconst fetchWithTimeout = (\n  fetch: FetchFn,\n  url: string,\n  ms: number | undefined,\n  { signal, ...options }: RequestInit\n) => {\n  const controller = new AbortController();\n  return new Promise<Response>((_resolve, _reject) => {\n    const promise = fetch(url, { signal: controller.signal, ...options });\n    let done = false;\n    function resolve(data) {\n      !done && _resolve(data);\n      done = true;\n    }\n    function reject(data) {\n      !done && _reject(data);\n      done = true;\n    }\n    function rejectWithTimout() {\n      const error = new Error(`TIMEOUT: ${url}`);\n      controller.abort(error);\n      reject(error);\n    }\n    if (signal) {\n      signal.addEventListener('abort', rejectWithTimout);\n    }\n    if (ms !== undefined) {\n      const timeout = setTimeout(rejectWithTimout, ms);\n      promise.finally(() => clearTimeout(timeout)).catch(() => {});\n    }\n    promise.catch(reject).then(resolve);\n  });\n};\n\nfunction trimSlashes(path: string) {\n  if (path.endsWith('/')) {\n    return path.slice(0, -1);\n  }\n  return path;\n}\n\nconst defaultGetPath: GetPath = ({ namespace, language, prefix }) => {\n  if (namespace) {\n    return `${trimSlashes(prefix)}/${namespace}/${language}.json`;\n  } else {\n    return `${trimSlashes(prefix)}/${language}.json`;\n  }\n};\n\nfunction defaultGetData(r: Response) {\n  return r.json();\n}\n\nconst DEFAULT_OPTIONS = {\n  prefix: '/i18n',\n  getPath: defaultGetPath,\n  getData: defaultGetData,\n  headers: {\n    Accept: 'application/json',\n  },\n  timeout: undefined,\n  fallbackOnFail: false,\n};\n\nexport function createBackendFetch(\n  options?: Partial<BackendOptions>\n): BackendMiddleware {\n  const {\n    prefix,\n    getPath,\n    getData,\n    headers,\n    timeout,\n    fallbackOnFail,\n    ...fetchOptions\n  }: BackendOptions = {\n    ...DEFAULT_OPTIONS,\n    ...options,\n    headers: {\n      ...DEFAULT_OPTIONS.headers,\n      ...options?.headers,\n    },\n  };\n  return {\n    async getRecord({ namespace, language, fetch }) {\n      const path = getPath({\n        namespace,\n        language,\n        prefix,\n      });\n\n      try {\n        const r = await fetchWithTimeout(fetch, path, timeout, {\n          headers,\n          ...fetchOptions,\n        });\n        if (!r.ok) {\n          throw new Error(`${r.url} ${r.status}`);\n        }\n        return await getData(r);\n      } catch (e) {\n        if (fallbackOnFail) {\n          return undefined;\n        } else {\n          throw e;\n        }\n      }\n    },\n  };\n}\n\nexport const BackendFetch =\n  (options?: Partial<BackendOptions>): TolgeePlugin =>\n  (tolgee, tools) => {\n    tools.addBackend(createBackendFetch(options));\n    return tolgee;\n  };\n","import { TolgeeCore, TolgeeChainer } from '@tolgee/core';\nimport { BrowserExtensionPlugin } from './BrowserExtensionPlugin/BrowserExtensionPlugin';\n\nexport function Tolgee(): TolgeeChainer {\n  return TolgeeCore().use(BrowserExtensionPlugin());\n}\n","import { TolgeeInstance } from '@tolgee/core';\n\nexport const DevTools = () => (tolgee: TolgeeInstance) => tolgee;\nexport * from './typedIndex';\nexport {\n  PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY,\n  DEVTOOLS_ID,\n} from './constants';\n"],"names":["self","_a","formatter","detectLanguage","result","options","language","_b","global","this","ns","fetch","data","BrowserExtensionPlugin","tolgee","credentials"],"mappings":"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","x_google_ignoreList":[12]}