{"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/url.ts","../src/package/ui/client/HttpError.ts","../src/package/tools/extensionProtocol.ts","../src/package/tools/extensionRpc.ts","../src/package/tools/apiTransport.ts","../src/package/tools/decodeApiKey.ts","../src/package/tools/auth.ts","../src/package/DevBackend.ts","../src/package/tools/extension.ts","../src/package/tools/sessionStorageKeys.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 sdkHeaders = () => ({\n    'x-tolgee-sdk-type': 'JS',\n    'x-tolgee-sdk-version': \"7.2.1\",\n});\nconst createFetchFunction = (fetchFn = defaultFetchFunction) => {\n    return (input, init) => {\n        let headers = headersInitToRecord(init === null || init === void 0 ? void 0 : init.headers);\n        // Key off the Tolgee-proprietary x-api-key only — this shared wrapper also fronts BackendFetch, which forwards a\n        // user's Authorization header to a third-party CDN that must not receive these headers.\n        if (headers['x-api-key']) {\n            headers = Object.assign(Object.assign({}, sdkHeaders()), headers);\n        }\n        return fetchFn(input, Object.assign(Object.assign({}, init), { headers }));\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\nconst EventEmitter = (type, isActive) => {\n    const handlers = new Set();\n    return {\n        listen(handler) {\n            const handlerWrapper = (e) => {\n                handler(e);\n            };\n            handlers.add(handlerWrapper);\n            return {\n                unsubscribe() {\n                    handlers.delete(handlerWrapper);\n                },\n            };\n        },\n        emit(data) {\n            if (isActive()) {\n                // snapshot, so subscriptions changed by a handler don't affect this emit\n                Array.from(handlers).forEach((handler) => handler({ type: type, value: data }));\n            }\n        },\n    };\n};\n\nfunction EventEmitterCombined(isActive) {\n    const handlers = new Set();\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        // snapshot, so subscriptions changed by a handler don't affect this emit\n        Array.from(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.add(handlerWrapper);\n            return {\n                unsubscribe() {\n                    handlers.delete(handlerWrapper);\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\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, transport, apiUrl, projectId, branch, observerOptions, tagNewKeys, filterTag, } = getInitialOptions();\n            instances.ui = (_a = plugins.ui) === null || _a === void 0 ? void 0 : _a.call(plugins, {\n                apiKey,\n                transport,\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, transport, apiUrl, projectId, branch, filterTag } = getInitialOptions();\n            if ((!apiKey && !transport) || !apiUrl || !self.hasDevBackend()) {\n                return undefined;\n            }\n            return (_a = instances.devBackend) === null || _a === void 0 ? void 0 : _a.getRecord(Object.assign({ apiKey,\n                transport,\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            const merged = Object.assign(Object.assign({}, state.initialOptions), devCredentials);\n            if (devCredentials &&\n                (devCredentials.apiKey || devCredentials.transport)) {\n                merged.apiKey = devCredentials.apiKey;\n                merged.transport = devCredentials.transport;\n            }\n            return merged;\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            const options = state.getInitialOptions();\n            return Boolean((options.apiKey || options.transport) && options.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 `apiUrl` plus a credential (`apiKey`, or the browser extension's transport) 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, encodeCacheKey, getFallback, getFallbackArray, getTranslateProps, sdkHeaders };\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\n// Cross-repo wire value: the chrome-plugin content script matches this exact string. Changing it breaks that match.\nexport const OPEN_PLUGIN_MESSAGE = 'TOLGEE_OPEN_PLUGIN';\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","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 { components } from './apiSchema.generated';\n\ntype ErrorResponseTypedCode =\n  components['schemas']['ErrorResponseTyped']['code'];\n\ntype ErrorCustomStatus =\n  | 'fetch_error'\n  | 'api_url_not_specified'\n  | 'api_key_not_specified'\n  | 'project_id_not_specified'\n  | 'api_url_not_valid'\n  | 'permissions_not_sufficient_to_edit'\n  | 'extension_session_missing'\n  | 'extension_request_too_large'\n  | 'extension_editing_off'\n  // Emitted by the platform's OAuth2AccessTokenResolver (tolgee-platform#3893). Staged here as custom codes until\n  // that PR merges and `npm run schema` is re-run against it, at which point these two belong in\n  // ErrorResponseTypedCode instead and this pair should be deleted.\n  | 'invalid_oauth_token'\n  | 'oauth_token_expired';\n\nexport type ErrorStatusCode = ErrorResponseTypedCode | ErrorCustomStatus;\n\nfunction getErrorMessage(code: ErrorStatusCode, status?: number | undefined) {\n  if (status) {\n    return `${status}: ${code}`;\n  }\n  return code;\n}\n\nexport class HttpError extends Error {\n  constructor(\n    public code: ErrorStatusCode,\n    public status?: number,\n    public params?: string[]\n  ) {\n    super(getErrorMessage(code, status));\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, HttpError.prototype);\n  }\n}\n\n// The transport an extension-connected page runs (proxyTransport, built by the app's own bundle) can throw an\n// HttpError from a different bundle than the one rendering the dialog (the CDN in-context-tools UMD): `instanceof`\n// then fails even though the object is shaped exactly like this class, so callers duck-type on `code` instead.\nexport function isHttpError(error: unknown): error is HttpError {\n  return (\n    error instanceof Error &&\n    typeof (error as { code?: unknown }).code === 'string'\n  );\n}\n","// Mirror of the browser extension's src/protocol.ts (tolgee/chrome-plugin): the two repos release independently, so\n// every value here has to stay compatible with what shipped extensions do.\n\n// Reported in TOLGEE_READY: this SDK sends its Tolgee API requests through the extension.\nexport const EXTENSION_PROTOCOL_VERSION = 2;\n\n// Must stay above the extension's PROXY_BUDGET_MS: the worker's refresh-and-retry could otherwise still be in\n// flight when this timer gives up.\nexport const EXTENSION_REQUEST_TIMEOUT_MS = 35_000;\n\nexport type ExtensionErrorKind =\n  | 'no_session'\n  | 'not_allowed'\n  | 'too_large'\n  | 'network'\n  | 'timeout'\n  | 'unavailable';\n\nexport type ProxyFormEntry =\n  | { name: string; value: string }\n  | { name: string; file: { name: string; type: string; base64: string } };\n\nexport type ProxyBody =\n  | { kind: 'none' }\n  | { kind: 'json'; text: string }\n  | { kind: 'form'; entries: ProxyFormEntry[] };\n\nexport const TOLGEE_API_REQUEST = 'TOLGEE_API_REQUEST';\nexport const TOLGEE_API_RESPONSE = 'TOLGEE_API_RESPONSE';\nexport const TOLGEE_SCREENSHOT_UPLOAD = 'TOLGEE_SCREENSHOT_UPLOAD';\nexport const TOLGEE_SCREENSHOT_UPLOADED = 'TOLGEE_SCREENSHOT_UPLOADED';\nexport const TOLGEE_SCREENSHOT_CAPTURED = 'TOLGEE_SCREENSHOT_CAPTURED';\nexport const TOLGEE_PROXY_PING = 'TOLGEE_PROXY_PING';\nexport const TOLGEE_PROXY_PONG = 'TOLGEE_PROXY_PONG';\n\nexport type ExtensionSessionKind = 'oauth' | 'apiKey';\n\nexport function isExtensionSessionKind(\n  value: string | null | undefined\n): value is ExtensionSessionKind {\n  return value === 'oauth' || value === 'apiKey';\n}\n","import {\n  EXTENSION_REQUEST_TIMEOUT_MS,\n  ExtensionErrorKind,\n  TOLGEE_PROXY_PING,\n  TOLGEE_PROXY_PONG,\n  TOLGEE_SCREENSHOT_CAPTURED,\n  TOLGEE_SCREENSHOT_UPLOAD,\n  TOLGEE_SCREENSHOT_UPLOADED,\n} from './extensionProtocol';\n\nexport class ExtensionRpcError extends Error {\n  constructor(\n    public kind: ExtensionErrorKind,\n    message: string\n  ) {\n    super(message);\n    this.name = 'ExtensionRpcError';\n    Object.setPrototypeOf(this, ExtensionRpcError.prototype);\n  }\n}\n\nexport type ExtensionApiResponse = {\n  status: number;\n  statusText: string;\n  headers: Record<string, string | null>;\n  body: string;\n};\n\ntype ExtensionReply = {\n  id: string;\n  response?: ExtensionApiResponse;\n  error?: { kind: ExtensionErrorKind; message: string };\n};\n\nexport type ScreenshotUploadReply = {\n  response: ExtensionApiResponse;\n  width: number;\n  height: number;\n};\n\ntype Pending = {\n  replyType: string;\n  progressType?: string;\n  onProgress?: () => void;\n  resolve: (reply: any) => void;\n  reject: (error: Error) => void;\n  timer: ReturnType<typeof setTimeout>;\n};\n\n// The relay is a content script injected at document_start, so it answers within milliseconds when the extension\n// is there at all; a tab still marked signed in after the extension was removed must not wait the request timeout.\nexport const RELAY_DISCOVERY_TIMEOUT_MS = 3_000;\nconst RELAY_PING_INTERVAL_MS = 200;\n\nlet counter = 0;\nconst pending = new Map<string, Pending>();\nlet listening = false;\nlet relayReady: Promise<void> | undefined;\nlet onRelayPong: (() => void) | undefined;\n\ntype RequestProps = {\n  type: string;\n  replyType: string;\n  payload?: Record<string, unknown>;\n  timeoutMs?: number;\n  progressType?: string;\n  onProgress?: () => void;\n};\n\nexport async function requestFromExtension<T extends ExtensionReply>({\n  type,\n  replyType,\n  payload,\n  timeoutMs = EXTENSION_REQUEST_TIMEOUT_MS,\n  progressType,\n  onProgress,\n}: RequestProps): Promise<T> {\n  ensureListener();\n  const deadline = Date.now() + timeoutMs;\n  await awaitRelay(Math.min(deadline, Date.now() + RELAY_DISCOVERY_TIMEOUT_MS));\n  const remaining = deadline - Date.now();\n  if (remaining <= 0) {\n    throw noAnswerInTime(type);\n  }\n  const id = nextId();\n  return new Promise<T>((resolve, reject) => {\n    const timer = setTimeout(() => {\n      pending.delete(id);\n      forgetRelay();\n      reject(noAnswerInTime(type));\n    }, remaining);\n    pending.set(id, {\n      replyType,\n      progressType,\n      onProgress,\n      resolve,\n      reject,\n      timer,\n    });\n    window.postMessage({ type, data: { id, ...payload } }, window.origin);\n  });\n}\n\n/**\n * Asks the extension to capture the tab and upload the image itself. `onCaptured` fires as soon as the capture is\n * done, before the upload finishes, so the page can put itself back the way it was.\n */\nexport function uploadScreenshotViaExtension(\n  onCaptured: () => void\n): Promise<ScreenshotUploadReply> {\n  return requestFromExtension<ExtensionReply & ScreenshotUploadReply>({\n    type: TOLGEE_SCREENSHOT_UPLOAD,\n    replyType: TOLGEE_SCREENSHOT_UPLOADED,\n    progressType: TOLGEE_SCREENSHOT_CAPTURED,\n    onProgress: onCaptured,\n  });\n}\n\nconst noAnswerInTime = (type: string) =>\n  new ExtensionRpcError(\n    'unavailable',\n    `the Tolgee browser extension did not answer ${type} in time`\n  );\n\n// crypto.randomUUID is missing on non-secure origins (an http:// dev host), so the id is built by hand.\nconst nextId = () => `${Date.now()}-${counter++}-${Math.random()}`;\n\nfunction ensureListener() {\n  if (listening) {\n    return;\n  }\n  listening = true;\n  window.addEventListener('message', (event: MessageEvent) => {\n    if (event.source !== window || event.origin !== window.location.origin) {\n      return;\n    }\n    const type = event.data?.type;\n    if (type === TOLGEE_PROXY_PONG) {\n      onRelayPong?.();\n      return;\n    }\n    const data = event.data?.data as ExtensionReply | undefined;\n    if (typeof data?.id !== 'string') {\n      return;\n    }\n    const entry = pending.get(data.id);\n    if (!entry) {\n      return;\n    }\n    if (type === entry.progressType) {\n      entry.onProgress?.();\n      return;\n    }\n    if (type !== entry.replyType) {\n      return;\n    }\n    pending.delete(data.id);\n    clearTimeout(entry.timer);\n    if (data.error) {\n      entry.reject(new ExtensionRpcError(data.error.kind, data.error.message));\n    } else {\n      entry.resolve(data);\n    }\n  });\n}\n\n// window.postMessage has no queue, so the first request could leave before the extension's relay is listening; the\n// idempotent ping is repeated until it answers.\nfunction awaitRelay(deadline: number): Promise<void> {\n  if (!relayReady) {\n    relayReady = new Promise<void>((resolve, reject) => {\n      const ping = () =>\n        window.postMessage({ type: TOLGEE_PROXY_PING }, window.origin);\n      const giveUp = () => {\n        clearInterval(timer);\n        forgetRelay();\n        onRelayPong = undefined;\n        reject(\n          new ExtensionRpcError(\n            'unavailable',\n            'the Tolgee browser extension did not answer'\n          )\n        );\n      };\n      const timer = setInterval(() => {\n        if (Date.now() > deadline) {\n          giveUp();\n          return;\n        }\n        ping();\n      }, RELAY_PING_INTERVAL_MS);\n      onRelayPong = () => {\n        clearInterval(timer);\n        resolve();\n      };\n      ping();\n    });\n  }\n  return relayReady;\n}\n\nfunction forgetRelay() {\n  relayReady = undefined;\n}\n","import type {\n  DevApiRequest,\n  DevApiResponse,\n  DevApiTransport,\n  FetchFn,\n} from '@tolgee/core';\nimport { createUrl } from './url';\nimport { HttpError, isHttpError } from '../ui/client/HttpError';\nimport {\n  ExtensionApiResponse,\n  ExtensionRpcError,\n  requestFromExtension,\n} from './extensionRpc';\nimport {\n  ProxyBody,\n  ProxyFormEntry,\n  TOLGEE_API_REQUEST,\n  TOLGEE_API_RESPONSE,\n} from './extensionProtocol';\n\ntype DirectProps = {\n  apiUrl: string;\n  fetch: FetchFn;\n  authHeader: Record<string, string>;\n};\n\nexport function directTransport({\n  apiUrl,\n  fetch,\n  authHeader,\n}: DirectProps): DevApiTransport {\n  return (request) =>\n    fetch(createUrl(apiUrl, request.path).toString(), {\n      method: request.method,\n      headers: { ...request.headers, ...authHeader },\n      body: request.body,\n      // @ts-ignore - tell next.js to not use cache\n      next: { revalidate: 0 },\n    });\n}\n\nexport function proxyTransport(): DevApiTransport {\n  return async (request) => {\n    const body = await encodeBody(request.body);\n    let reply: { response?: ExtensionApiResponse };\n    try {\n      reply = await requestFromExtension({\n        type: TOLGEE_API_REQUEST,\n        replyType: TOLGEE_API_RESPONSE,\n        payload: {\n          path: request.path,\n          method: request.method,\n          headers: request.headers,\n          body,\n        },\n      });\n    } catch (e) {\n      throw httpErrorFromExtension(e);\n    }\n    if (!reply.response) {\n      throw new HttpError('fetch_error');\n    }\n    return toResponseLike(reply.response);\n  };\n}\n\nexport async function encodeBody(\n  body: DevApiRequest['body']\n): Promise<ProxyBody> {\n  if (body === undefined) {\n    return { kind: 'none' };\n  }\n  if (typeof body === 'string') {\n    return { kind: 'json', text: body };\n  }\n  const entries: Promise<ProxyFormEntry>[] = [];\n  body.forEach((value, name) => {\n    if (typeof value === 'string') {\n      entries.push(Promise.resolve({ name, value }));\n      return;\n    }\n    entries.push(\n      blobToBase64(value).then((base64) => ({\n        name,\n        file: { name: value.name || 'blob', type: value.type, base64 },\n      }))\n    );\n  });\n  return { kind: 'form', entries: await Promise.all(entries) };\n}\n\nconst blobToBase64 = (blob: Blob) =>\n  new Promise<string>((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () =>\n      resolve(String(reader.result).replace(/^data:[^,]*,/, ''));\n    reader.onerror = () => reject(reader.error);\n    reader.readAsDataURL(blob);\n  });\n\nexport function toResponseLike(response: ExtensionApiResponse): DevApiResponse {\n  const headers = Object.fromEntries(\n    Object.entries(response.headers ?? {}).map(([name, value]) => [\n      name.toLowerCase(),\n      value,\n    ])\n  );\n  return {\n    ok: response.status >= 200 && response.status < 300,\n    status: response.status,\n    statusText: response.statusText,\n    headers: { get: (name) => headers[name.toLowerCase()] ?? null },\n    text: () => Promise.resolve(response.body),\n    json: async () => JSON.parse(response.body),\n  };\n}\n\nexport function httpErrorFromExtension(e: unknown): HttpError {\n  if (isHttpError(e)) {\n    return e;\n  }\n  if (e instanceof ExtensionRpcError) {\n    switch (e.kind) {\n      case 'no_session':\n        return new HttpError('extension_session_missing', 401);\n      case 'too_large':\n        return new HttpError('extension_request_too_large');\n      default:\n        // eslint-disable-next-line no-console\n        console.warn(\n          `Tolgee: the browser extension did not serve the request (${e.kind}): ${e.message}`\n        );\n        return new HttpError('fetch_error');\n    }\n  }\n  return new HttpError('fetch_error');\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 /^\\d+$/.test(projectId) ? Number(projectId) : undefined;\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","import { DevApiTransport, sdkHeaders } from '@tolgee/core';\nimport { getApiKeyType, getProjectIdFromApiKey } from './decodeApiKey';\n\nexport type LiveCredentials = {\n  apiKey?: string;\n  projectId?: number | string;\n  transport?: DevApiTransport;\n};\n\nexport type ResolvedLiveCredential = {\n  authHeader: Record<string, string>;\n  viaExtension: boolean;\n  hasCredential: boolean;\n  projectId: number | string | undefined;\n  requiresExplicitProject: boolean;\n};\n\nexport function resolveLiveCredential(\n  credentials: LiveCredentials\n): ResolvedLiveCredential {\n  const { apiKey, projectId, transport } = credentials;\n  if (transport) {\n    return {\n      authHeader: {},\n      viaExtension: true,\n      hasCredential: true,\n      projectId,\n      requiresExplicitProject: true,\n    };\n  }\n  return {\n    authHeader: buildAuthHeader(apiKey),\n    viaExtension: false,\n    hasCredential: Boolean(apiKey),\n    projectId: getProjectIdFromApiKey(apiKey) ?? projectId,\n    requiresExplicitProject: getApiKeyType(apiKey) === 'tgpat',\n  };\n}\n\nexport function buildAuthHeader(\n  apiKey: string | undefined\n): Record<string, string> {\n  return apiKey ? { 'X-API-Key': apiKey } : {};\n}\n\n// createFetchFunction (@tolgee/core) adds these on a direct request already; a request routed through the\n// extension's transport bypasses that wrapper, so they have to be added here instead.\nexport function extensionSdkHeaders(\n  viaExtension: boolean\n): Record<string, string> {\n  return viaExtension ? sdkHeaders() : {};\n}\n","import { BackendDevMiddleware, TolgeePlugin } from '@tolgee/core';\nimport { directTransport } from './tools/apiTransport';\nimport { extensionSdkHeaders, resolveLiveCredential } from './tools/auth';\n\nfunction createDevBackend(): BackendDevMiddleware {\n  return {\n    getRecord({\n      apiUrl,\n      apiKey,\n      transport,\n      projectId,\n      branch,\n      language,\n      namespace,\n      filterTag,\n      fetch,\n    }) {\n      const {\n        authHeader,\n        viaExtension,\n        projectId: resolvedProjectId,\n        requiresExplicitProject,\n      } = resolveLiveCredential({ apiKey, projectId, transport });\n      if (requiresExplicitProject && resolvedProjectId === undefined) {\n        throw new Error(\n          \"You need to specify 'projectId' when using a PAT key or connecting through the Tolgee browser extension\"\n        );\n      }\n\n      const path =\n        resolvedProjectId !== undefined\n          ? `/v2/projects/${resolvedProjectId}/translations/${language}`\n          : `/v2/projects/translations/${language}`;\n      const query = new URLSearchParams();\n      if (branch) {\n        query.append('branch', branch);\n      }\n      if (namespace) {\n        query.append('ns', namespace);\n      }\n      filterTag?.forEach((tag) => {\n        query.append('filterTag', tag);\n      });\n      const search = query.toString();\n\n      const send =\n        transport ??\n        directTransport({ apiUrl: apiUrl ?? '', fetch, authHeader });\n      return send({\n        path: search ? `${path}?${search}` : path,\n        method: 'GET',\n        headers: {\n          ...extensionSdkHeaders(viaExtension),\n          'Content-Type': 'application/json',\n        },\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","import { OPEN_PLUGIN_MESSAGE } from '../constants';\n\ntype 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 function openPlugin(): void {\n  window.postMessage({ type: OPEN_PLUGIN_MESSAGE }, window.origin);\n}\n\nexport type ExtensionInfo = { protocolVersion?: number };\n\nexport async function pingExtension(): Promise<ExtensionInfo | undefined> {\n  try {\n    const payload = await sendAndRecieve<ExtensionInfo | undefined>({\n      message: 'TOLGEE_PING',\n      recievingMessage: ['TOLGEE_PONG'],\n      attempts: 2,\n    }).promise;\n    return payload ?? {};\n  } catch {\n    return undefined;\n  }\n}\n\nexport async function detectExtension(): Promise<boolean> {\n  return (await pingExtension()) !== undefined;\n}\n\nexport type LibConfig = {\n  uiPresent: boolean;\n  uiVersion?: string;\n  protocolVersion?: number;\n  mode: 'production' | 'development';\n  config: {\n    apiUrl: string;\n    apiKey: string;\n    projectId?: number | 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","// The page slots the browser extension writes and this SDK reads. Mirror of the extension's src/sessionStorageKeys.ts\n// (tolgee/chrome-plugin): the two repos release independently, so every name here has to stay the one shipped\n// extensions write.\n\n// Reserved for the browser extension: no SDK code may store anything in sessionStorage under this prefix, or it\n// will be silently wiped on every handshake failure (see clearSessionStorage in BrowserExtensionPlugin.ts).\nexport const TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX = '__tolgee_';\n\nexport const API_KEY_SESSION_STORAGE = `${TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX}apiKey`;\nexport const API_URL_SESSION_STORAGE = `${TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX}apiUrl`;\nexport const BRANCH_SESSION_STORAGE = `${TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX}branch`;\nexport const PROJECT_ID_SESSION_STORAGE = `${TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX}projectId`;\nexport const EXTENSION_SESSION_STORAGE = `${TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX}session`;\n// 'off' while the user has switched in-context editing off for this page in the extension's popup.\nexport const EDITING_SESSION_STORAGE = `${TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX}editing`;\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 { isSSR } from '../tools/isSSR';\nimport {\n  IN_CONTEXT_FILE,\n  IN_CONTEXT_UMD_NAME,\n  IN_CONTEXT_EXPORT_NAME,\n} from './constants';\n\ndeclare global {\n  interface Window {\n    __TOLGEE_IN_CONTEXT_URL__?: string;\n  }\n}\n\nconst CDN_URL = 'https://cdn.jsdelivr.net/npm';\n\nlet injectPromise = null as any as Promise<typeof InContextTools>;\n\nexport function loadInContextLib(version: string) {\n  if (!injectPromise) {\n    injectPromise = injectScript(inContextLibSrc(version)).then(() => {\n      // @ts-ignore\n      return window[IN_CONTEXT_UMD_NAME][IN_CONTEXT_EXPORT_NAME];\n    });\n  }\n  return injectPromise;\n}\n\nexport function inContextLibSrc(version: string): string {\n  return (\n    trustedOverrideUrl() ||\n    `${CDN_URL}/@tolgee/web@${version}/dist/${IN_CONTEXT_FILE}`\n  );\n}\n\nexport function trustedOverrideUrl(): string | undefined {\n  if (isSSR()) {\n    return undefined;\n  }\n  const override = window.__TOLGEE_IN_CONTEXT_URL__;\n  return isTrustedInContextUrl(override, window.location)\n    ? override\n    : undefined;\n}\n\ntype LocationLike = { origin: string; hostname: string; href: string };\n\nconst isDevHost = (hostname: string) =>\n  hostname === 'localhost' ||\n  hostname === '127.0.0.1' ||\n  hostname === '::1' ||\n  hostname === '[::1]';\n\n// The injected UMD runs with the page's session/OAuth token, so a cross-origin override would be an arbitrary-script\n// load.\nexport function isTrustedInContextUrl(\n  override: string | undefined,\n  location: LocationLike\n): boolean {\n  if (!override || !isDevHost(location.hostname)) {\n    return false;\n  }\n  try {\n    const url = new URL(override, location.href);\n    return url.origin === location.origin || isDevHost(url.hostname);\n  } catch {\n    return false;\n  }\n}\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","import type { DevCredentials, TolgeePlugin } from '@tolgee/core';\nimport { Handshaker } from '../tools/extension';\nimport {\n  EXTENSION_PROTOCOL_VERSION,\n  isExtensionSessionKind,\n} from '../tools/extensionProtocol';\nimport { resolveLiveCredential } from '../tools/auth';\nimport { proxyTransport } from '../tools/apiTransport';\nimport {\n  API_KEY_SESSION_STORAGE,\n  API_URL_SESSION_STORAGE,\n  BRANCH_SESSION_STORAGE,\n  EXTENSION_SESSION_STORAGE,\n  PROJECT_ID_SESSION_STORAGE,\n  TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX,\n} from '../tools/sessionStorageKeys';\nimport { loadInContextLib } from './loadInContextLib';\n\n/** This package's own version, substituted at build time (vite.config.ts) and by the jest config for tests. */\ndeclare const __TOLGEE_VERSION__: string;\n\nfunction getCredentials(): DevCredentials {\n  const apiKey = sessionStorage.getItem(API_KEY_SESSION_STORAGE) || undefined;\n  const apiUrl = sessionStorage.getItem(API_URL_SESSION_STORAGE) || undefined;\n  const branch = sessionStorage.getItem(BRANCH_SESSION_STORAGE) || undefined;\n  const projectId =\n    sessionStorage.getItem(PROJECT_ID_SESSION_STORAGE) || undefined;\n  const viaExtension = isExtensionSessionKind(\n    sessionStorage.getItem(EXTENSION_SESSION_STORAGE)\n  );\n\n  if (!apiUrl) {\n    return undefined;\n  }\n  const common = {\n    apiUrl,\n    ...(projectId !== undefined ? { projectId } : {}),\n    ...(branch !== undefined ? { branch } : {}),\n  };\n  if (apiKey) {\n    return { ...common, apiKey };\n  }\n  if (viaExtension && projectId) {\n    return { ...common, transport: proxyTransport() };\n  }\n  return undefined;\n}\n\n// See TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX in sessionStorageKeys.ts for why this sweeps by prefix.\nexport function clearSessionStorage() {\n  const keysToRemove: string[] = [];\n  for (let i = 0; i < sessionStorage.length; i++) {\n    const key = sessionStorage.key(i);\n    if (key?.startsWith(TOLGEE_EXTENSION_SESSION_STORAGE_PREFIX)) {\n      keysToRemove.push(key);\n    }\n  }\n  keysToRemove.forEach((key) => sessionStorage.removeItem(key));\n}\n\nfunction warnIfProjectIdMissing(tolgee: Parameters<TolgeePlugin>[0]) {\n  if (!tolgee.isDev()) {\n    return;\n  }\n  const { requiresExplicitProject, projectId } = resolveLiveCredential(\n    tolgee.getInitialOptions()\n  );\n  if (requiresExplicitProject && projectId === undefined) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      'Tolgee: `projectId` is missing from the SDK configuration. It is required when authenticating with a PAT ' +\n        'or connecting through the Tolgee browser extension. ' +\n        'See https://docs.tolgee.io/js-sdk/api/core_package/options#projectid'\n    );\n  }\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      const options = tolgee.getInitialOptions();\n      return {\n        // prevent extension downloading ui library\n        uiPresent: true,\n        uiVersion: undefined,\n        protocolVersion: EXTENSION_PROTOCOL_VERSION,\n        // tolgee mode\n        mode: tolgee.isDev() ? 'development' : 'production',\n        // pass credentials\n        config: {\n          apiUrl: options.apiUrl || '',\n          apiKey: options.transport ? '' : options.apiKey || '',\n          projectId: options.projectId,\n          branch: options.branch,\n        },\n      } as const;\n    };\n\n    const getTolgeePlugin = async (): Promise<TolgeePlugin> => {\n      const InContextTools = await loadInContextLib(__TOLGEE_VERSION__);\n      return (tolgee) => {\n        const credentials = getCredentials()!;\n        tolgee.addPlugin(InContextTools({ credentials }));\n        return tolgee;\n      };\n    };\n\n    warnIfProjectIdMissing(tolgee);\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":["getErrorMessage","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]}