{"version":3,"file":"jiotranslate-web.production.umd.cjs","sources":["../../core/dist/jiotranslate.esm.js","../src/package/constants.ts","../src/package/tools/isSSR.ts","../src/package/observers/general/DomHelper.ts","../src/package/observers/general/ElementMeta.ts","../src/package/observers/general/helpers.ts","../src/package/observers/general/ElementHighlighter.ts","../src/package/observers/general/MouseEventHandler.ts","../src/package/observers/general/ElementRegistry.ts","../src/package/observers/general/ElementStore.ts","../src/package/observers/general/NodeHandler.ts","../src/package/observers/general/GeneralObserver.ts","../../../node_modules/.pnpm/fast-text-encoding@1.0.6/node_modules/fast-text-encoding/text.min.js","../src/package/observers/invisible/secret.ts","../src/package/observers/invisible/ValueMemory.ts","../src/package/observers/invisible/InvisibleWrapper.ts","../src/package/InvisibleObserver.ts","../src/package/observers/text/helpers.ts","../src/package/observers/text/TextWrapper.ts","../src/package/TextObserver.ts","../src/package/ObserverPlugin.ts","../src/package/tools/decodeApiKey.ts","../src/package/DevBackend.ts","../src/package/tools/extension.ts","../src/package/BrowserExtensionPlugin/constants.ts","../src/package/BrowserExtensionPlugin/loadInContextLib.ts","../src/package/BrowserExtensionPlugin/BrowserExtensionPlugin.ts","../src/package/LanguageStorage.ts","../src/package/LanguageDetector.ts","../src/package/BackendFetch.ts","../src/package/JioTranslate.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 `JioTranslate: You need to specify ${stringifiedOptions} option`;\n}\nfunction isObject(item) {\n    return typeof item === 'object' && !Array.isArray(item) && item !== null;\n}\nfunction getFallback(value) {\n    if (typeof value === 'string') {\n        return [value];\n    }\n    if (Array.isArray(value)) {\n        return value;\n    }\n    return undefined;\n}\nfunction getFallbackArray(value) {\n    return getFallback(value) || [];\n}\nfunction getFallbackFromStruct(language, fallbackLanguage) {\n    if (isObject(fallbackLanguage)) {\n        return getFallbackArray(fallbackLanguage === null || fallbackLanguage === void 0 ? void 0 : fallbackLanguage[language]);\n    }\n    else {\n        return getFallbackArray(fallbackLanguage);\n    }\n}\nfunction unique(arr) {\n    return Array.from(new Set(arr));\n}\nfunction sanitizeUrl(url) {\n    return url ? url.replace(/\\/+$/, '') : url;\n}\nfunction getErrorMessage(error) {\n    if (typeof error === 'string') {\n        return error;\n    }\n    else if (typeof (error === null || error === void 0 ? void 0 : error.message) === 'string') {\n        return error.message;\n    }\n}\nconst defaultFetchFunction = (input, options) => fetch(input, options);\nfunction headersInitToRecord(headersInit) {\n    return Object.fromEntries(new Headers(headersInit).entries());\n}\nconst createFetchFunction = (fetchFn = defaultFetchFunction) => {\n    return (input, init) => {\n        let headers = headersInitToRecord(init === null || init === void 0 ? void 0 : init.headers);\n        if (headers['x-api-key']) {\n            headers = Object.assign({ 'x-JioTranslate-sdk-type': 'JS', 'x-JioTranslate-sdk-version': 'prerelease' }, headers);\n        }\n        return fetchFn(input, Object.assign(Object.assign({}, init), { headers }));\n    };\n};\n\nfunction EventEmitter(isActive) {\n    let handlers = [];\n    return Object.freeze({\n        listen(handler) {\n            const handlerWrapper = (e) => {\n                handler(e);\n            };\n            handlers.push(handlerWrapper);\n            return {\n                unsubscribe() {\n                    handlers = handlers.filter((i) => handlerWrapper !== i);\n                },\n            };\n        },\n        emit(data) {\n            if (isActive()) {\n                handlers.forEach((handler) => handler({ value: data }));\n            }\n        },\n    });\n}\n\nfunction EventEmitterSelective(isActive, getFallbackNs, getDefaultNs) {\n    const listeners = new Set();\n    const partialListeners = new Set();\n    function callHandlers(ns) {\n        // everything is implicitly subscribed to fallbacks\n        // as it can always fall through to it\n        const fallbackNamespaces = new Set(getFallbackNs());\n        partialListeners.forEach((handler) => {\n            const nsMatches = ns === undefined ||\n                (ns === null || ns === void 0 ? void 0 : ns.findIndex((ns) => fallbackNamespaces.has(ns) || handler.namespaces.has(ns))) !== -1;\n            if (nsMatches) {\n                handler.fn({ value: undefined });\n            }\n        });\n    }\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        listeners.forEach((handler) => {\n            handler({ value: undefined });\n        });\n        let namespaces = new Set();\n        queueCopy.forEach((ns) => {\n            if (ns === undefined) {\n                // when no ns specified, it affects all namespaces\n                namespaces = undefined;\n            }\n            else if (namespaces !== undefined) {\n                ns.forEach((ns) => namespaces.add(ns));\n            }\n        });\n        const namespacesArray = namespaces\n            ? Array.from(namespaces.keys())\n            : undefined;\n        callHandlers(namespacesArray);\n    }\n    return Object.freeze({\n        emit(ns, delayed) {\n            if (isActive()) {\n                queue.push(ns);\n                if (!delayed) {\n                    solveQueue();\n                }\n                else {\n                    setTimeout(solveQueue, 0);\n                }\n            }\n        },\n        listen(handler) {\n            listeners.add(handler);\n            const result = {\n                unsubscribe: () => {\n                    listeners.delete(handler);\n                },\n            };\n            return result;\n        },\n        listenSome(handler) {\n            const handlerWrapper = {\n                fn: (e) => {\n                    handler(e);\n                },\n                namespaces: new Set(),\n            };\n            partialListeners.add(handlerWrapper);\n            const result = {\n                unsubscribe: () => {\n                    partialListeners.delete(handlerWrapper);\n                },\n                subscribeNs: (ns) => {\n                    getFallbackArray(ns).forEach((val) => handlerWrapper.namespaces.add(val));\n                    if (ns === undefined) {\n                        // subscribing to default ns\n                        handlerWrapper.namespaces.add(getDefaultNs());\n                    }\n                    return result;\n                },\n            };\n            return result;\n        },\n    });\n}\n\nfunction Events(getFallbackNs, getDefaultNs) {\n    let emitterActive = true;\n    function isActive() {\n        return emitterActive;\n    }\n    const self = Object.freeze({\n        onPendingLanguageChange: EventEmitter(isActive),\n        onLanguageChange: EventEmitter(isActive),\n        onLoadingChange: EventEmitter(isActive),\n        onFetchingChange: EventEmitter(isActive),\n        onInitialLoaded: EventEmitter(isActive),\n        onRunningChange: EventEmitter(isActive),\n        onCacheChange: EventEmitter(isActive),\n        onUpdate: EventEmitterSelective(isActive, getFallbackNs, getDefaultNs),\n        onPermanentChange: EventEmitter(isActive),\n        onError: EventEmitter(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(() => self.onUpdate.emit());\n    self.onLanguageChange.listen(() => self.onUpdate.emit());\n    self.onCacheChange.listen(({ value }) => self.onUpdate.emit([value.namespace], true));\n    return self;\n}\n\nclass RecordFetchError extends Error {\n    constructor(descriptor, cause, isDev = false) {\n        const { language, namespace } = descriptor;\n        super(`JioTranslate: Failed to fetch record for \"${language}\"${namespace && ` and \"${namespace}\"`}`);\n        this.cause = cause;\n        this.isDev = isDev;\n        this.name = 'RecordFetchError';\n        this.language = language;\n        this.namespace = namespace;\n    }\n}\nclass LanguageDetectorError extends Error {\n    constructor(message, cause) {\n        super(message);\n        this.cause = cause;\n        this.name = 'LanguageDetectorError';\n    }\n}\nclass LanguageStorageError extends Error {\n    constructor(message, cause) {\n        super(message);\n        this.cause = cause;\n        this.name = 'LanguageStorageError';\n    }\n}\n\nconst flattenTranslations = (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            flattenTranslations(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 decodeCacheKey = (key) => {\n    const [firstPart, ...rest] = key.split(':');\n    // if namespaces contains \":\" it won't get lost\n    const secondPart = rest.join(':');\n    return { language: firstPart, namespace: secondPart || '' };\n};\nconst encodeCacheKey = ({ language, namespace, }) => {\n    if (namespace) {\n        return `${language}:${namespace}`;\n    }\n    else {\n        return language;\n    }\n};\n\nfunction Cache(events, backendGetRecord, backendGetDevRecord, withDefaultNs, isInitialLoading, fetchingObserver, loadingObserver) {\n    const asyncRequests = new Map();\n    const cache = new Map();\n    let staticData = {};\n    let version = 0;\n    function addRecordInternal(descriptor, data, recordVersion) {\n        const cacheKey = encodeCacheKey(descriptor);\n        cache.set(cacheKey, {\n            data: flattenTranslations(data),\n            version: recordVersion,\n        });\n        events.onCacheChange.emit(descriptor);\n    }\n    /**\n     * Fetches production data\n     */\n    async function fetchProd(keyObject) {\n        let dataOrPromise = undefined;\n        const staticDataValue = staticData[encodeCacheKey(keyObject)];\n        if (typeof staticDataValue === 'function') {\n            dataOrPromise = staticDataValue();\n        }\n        if (!dataOrPromise) {\n            dataOrPromise = backendGetRecord(keyObject);\n        }\n        if (isPromise(dataOrPromise)) {\n            return dataOrPromise === null || dataOrPromise === void 0 ? void 0 : dataOrPromise.catch((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        }\n        else {\n            return dataOrPromise;\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 (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, value, 0);\n                        }\n                    }\n                });\n            }\n        },\n        invalidate() {\n            asyncRequests.clear();\n            version += 1;\n        },\n        addRecord(descriptor, data) {\n            addRecordInternal(descriptor, 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            var _a;\n            return (_a = cache.get(encodeCacheKey(withDefaultNs(descriptor)))) === null || _a === void 0 ? void 0 : _a.data;\n        },\n        getTranslation(descriptor, key) {\n            var _a;\n            return (_a = cache.get(encodeCacheKey(descriptor))) === null || _a === void 0 ? void 0 : _a.data.get(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\n                        .get(encodeCacheKey({ language, namespace }))) === null || _a === void 0 ? void 0 : _a.data.get(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\n                        .get(encodeCacheKey({ language, namespace }))) === null || _a === void 0 ? void 0 : _a.data.get(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            record === null || record === void 0 ? void 0 : record.set(key, value);\n            events.onCacheChange.emit(Object.assign(Object.assign({}, descriptor), { key }));\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            return Boolean(isInitialLoading() ||\n                Array.from(asyncRequests.keys()).find((key) => {\n                    const descriptor = decodeCacheKey(key);\n                    return ((!namespaces.length ||\n                        namespaces.includes(descriptor.namespace)) &&\n                        !self.exists({\n                            namespace: descriptor.namespace,\n                            language: language,\n                        }));\n                }));\n        },\n        async loadRecords(descriptors, isDev) {\n            const withPromises = descriptors.map((descriptor) => {\n                const keyObject = withDefaultNs(descriptor);\n                const cacheKey = encodeCacheKey(keyObject);\n                const existingPromise = asyncRequests.get(cacheKey);\n                if (existingPromise) {\n                    return {\n                        new: false,\n                        promise: existingPromise,\n                        keyObject,\n                        cacheKey,\n                    };\n                }\n                const dataPromise = fetchData(keyObject, isDev) || Promise.resolve(undefined);\n                asyncRequests.set(cacheKey, dataPromise);\n                return {\n                    new: true,\n                    promise: dataPromise,\n                    keyObject,\n                    cacheKey,\n                };\n            });\n            fetchingObserver.notify();\n            loadingObserver.notify();\n            const results = await Promise.all(withPromises.map((val) => val.promise));\n            withPromises.forEach((value, i) => {\n                const promiseChanged = asyncRequests.get(value.cacheKey) !== value.promise;\n                // if promise has changed in between, it means cache been invalidated or\n                // new data are being fetched\n                if (value.new && !promiseChanged) {\n                    asyncRequests.delete(value.cacheKey);\n                    const data = results[i];\n                    if (data) {\n                        self.addRecord(value.keyObject, data);\n                    }\n                    else if (!self.getRecord(value.keyObject)) {\n                        // if no data exist, put empty object\n                        self.addRecord(value.keyObject, {});\n                    }\n                }\n            });\n            fetchingObserver.notify();\n            loadingObserver.notify();\n            return withPromises.map((val) => self.getRecord(val.keyObject));\n        },\n        getAllRecords() {\n            const entries = Array.from(cache.entries());\n            return entries.map(([key, entry]) => {\n                return Object.assign(Object.assign({}, decodeCacheKey(key)), { data: entry.data });\n            });\n        },\n    });\n    return self;\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\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: '%-%jiotranslate:',\n    inputSuffix: '%-%',\n    passToParent: ['option', 'optgroup'],\n    fullKeyEncode: false,\n};\n\nconst DEFAULT_FORMAT_ERROR = 'invalid';\nconst DEFAULT_API_URL = 'https://localization-platform.sit.translate.jio/projects';\nconst DEFAULT_MISSING_TRANSLATION = ({ key, }) => key;\nconst defaultValues = {\n    defaultNs: '',\n    observerOptions: defaultObserverOptions,\n    observerType: 'invisible',\n    onFormatError: DEFAULT_FORMAT_ERROR,\n    apiUrl: DEFAULT_API_URL,\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('JioTranslate: 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('JioTranslate: 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(jioTranslateInstance, 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(jioTranslateInstance, pluginTools);\n    }\n    const self = Object.freeze({\n        addPlugin,\n        findPositions: findPositions,\n        run() {\n            var _a, _b;\n            const { apiKey, apiUrl, projectId, observerOptions, tagNewKeys } = getInitialOptions();\n            instances.ui = (_a = plugins.ui) === null || _a === void 0 ? void 0 : _a.call(plugins, {\n                apiKey: apiKey,\n                apiUrl: apiUrl,\n                projectId,\n                highlight: self.highlight,\n                changeTranslation,\n                findPositions,\n                onPermanentChange: (data) => events.onPermanentChange.emit(data),\n                tagNewKeys,\n            });\n            (_b = instances.observer) === null || _b === void 0 ? void 0 : _b.run({\n                mouseHighlight: true,\n                options: observerOptions,\n                translate,\n                onClick,\n                getTranslation,\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('JioTranslate: Failed to store language', e), () => { var _a; return (_a = instances.languageStorage) === null || _a === void 0 ? void 0 : _a.setLanguage(language, getCommonProps()); });\n        },\n        getDevBackend() {\n            return instances.devBackend;\n        },\n        getBackendRecord: (async ({ language, namespace }) => {\n            for (const backend of instances.backends) {\n                const data = await backend.getRecord(Object.assign({ language,\n                    namespace }, getCommonProps()));\n                if (data !== undefined) {\n                    return data;\n                }\n            }\n            return undefined;\n        }),\n        getBackendDevRecord: (async ({ language, namespace }) => {\n            var _a;\n            const { apiKey, apiUrl, projectId } = getInitialOptions();\n            return (_a = instances.devBackend) === null || _a === void 0 ? void 0 : _a.getRecord(Object.assign({ apiKey,\n                apiUrl,\n                projectId,\n                language,\n                namespace }, getCommonProps()));\n        }),\n        getLanguageDetector() {\n            return instances.languageDetector;\n        },\n        retranslate() {\n            var _a;\n            (_a = instances.observer) === null || _a === void 0 ? void 0 : _a.retranslate();\n        },\n        highlight: ((key, ns) => {\n            var _a, _b;\n            return ((_b = (_a = instances.observer) === null || _a === void 0 ? void 0 : _a.highlight) === null || _b === void 0 ? void 0 : _b.call(_a, key, ns)) || { unhighlight() { } };\n        }),\n        unwrap(text) {\n            var _a;\n            if (instances.observer) {\n                return (_a = instances.observer) === null || _a === void 0 ? void 0 : _a.unwrap(text);\n            }\n            return { text, keys: [] };\n        },\n        wrap(params) {\n            var _a;\n            if (instances.observer) {\n                return (_a = instances.observer) === null || _a === void 0 ? void 0 : _a.wrap(params);\n            }\n            return params.translation;\n        },\n        hasDevBackend() {\n            return Boolean(self.getDevBackend());\n        },\n        formatTranslation(_a) {\n            var _b;\n            var { formatEnabled } = _a, props = __rest(_a, [\"formatEnabled\"]);\n            const { key, translation, defaultValue, noWrap, params, ns, orEmpty } = props;\n            const formattableTranslation = translation !== null && translation !== void 0 ? translation : defaultValue;\n            let translationMissingResult = '';\n            if (translation === undefined || translation === null) {\n                // called when translation is missing\n                // return value is used when 'defaultValue' and 'orEmpty' are not defined\n                translationMissingResult =\n                    getInitialOptions().onTranslationMissing(props);\n            }\n            let result = formattableTranslation !== null && formattableTranslation !== void 0 ? formattableTranslation : (orEmpty ? '' : translationMissingResult);\n            const language = getLanguage();\n            const isFormatEnabled = formatEnabled || !((_b = instances.observer) === null || _b === void 0 ? void 0 : _b.outputNotFormattable);\n            const wrap = (result) => {\n                if (instances.observer && !noWrap) {\n                    return instances.observer.wrap({\n                        key,\n                        translation: result,\n                        defaultValue,\n                        params,\n                        ns,\n                    });\n                }\n                return result;\n            };\n            result = wrap(result);\n            try {\n                if (formattableTranslation && language && isFormatEnabled) {\n                    for (const formatter of instances.formatters) {\n                        result = formatter.format({\n                            translation: result,\n                            language,\n                            params,\n                        });\n                    }\n                }\n                if (instances.finalFormatter &&\n                    formattableTranslation &&\n                    language &&\n                    isFormatEnabled) {\n                    result = instances.finalFormatter.format({\n                        translation: result,\n                        language,\n                        params,\n                    });\n                }\n            }\n            catch (e) {\n                // eslint-disable-next-line no-console\n                console.error(e);\n                const errorMessage = getErrorMessage(e) || DEFAULT_FORMAT_ERROR;\n                const onFormatError = getInitialOptions().onFormatError;\n                const formatErrorType = typeof onFormatError;\n                if (formatErrorType === 'string') {\n                    result = onFormatError;\n                }\n                else if (formatErrorType === 'function') {\n                    result = onFormatError(errorMessage, props);\n                }\n                else {\n                    result = DEFAULT_FORMAT_ERROR;\n                }\n                // wrap error message, so it's detectable\n                result = wrap(result);\n            }\n            return result;\n        },\n    });\n    return self;\n}\n\nconst ValueObserver = (initialValue, valueGetter, handler) => {\n    let previousValue = initialValue;\n    return Object.freeze({\n        init(value) {\n            previousValue = value;\n        },\n        notify() {\n            const value = valueGetter();\n            if (previousValue !== value) {\n                handler(value);\n            }\n            previousValue = value;\n        },\n    });\n};\n\nfunction State(onLanguageChange, onPendingLanguageChange, onRunningChange) {\n    let state = initState();\n    let devCredentials = undefined;\n    const self = Object.freeze({\n        init(options) {\n            state = initState(options, state);\n        },\n        isRunning() {\n            return state.isRunning;\n        },\n        setRunning(value) {\n            if (state.isRunning !== value) {\n                state.isRunning = value;\n                onRunningChange.emit(value);\n            }\n        },\n        isInitialLoading() {\n            return state.isInitialLoading;\n        },\n        setInitialLoading(value) {\n            state.isInitialLoading = value;\n        },\n        getLanguage() {\n            return state.language || state.initialOptions.language;\n        },\n        setLanguage(language) {\n            if (state.language !== language) {\n                state.language = language;\n                onLanguageChange.emit(language);\n            }\n        },\n        getPendingLanguage() {\n            return state.pendingLanguage || self.getLanguage();\n        },\n        setPendingLanguage(language) {\n            if (state.pendingLanguage !== language) {\n                state.pendingLanguage = language;\n                onPendingLanguageChange.emit(language);\n            }\n        },\n        getInitialOptions() {\n            return Object.assign(Object.assign({}, state.initialOptions), devCredentials);\n        },\n        addActiveNs(ns) {\n            const namespaces = getFallbackArray(ns);\n            namespaces.forEach((namespace) => {\n                const value = state.activeNamespaces.get(namespace);\n                if (value !== undefined) {\n                    state.activeNamespaces.set(namespace, value + 1);\n                }\n                else {\n                    state.activeNamespaces.set(namespace, 1);\n                }\n            });\n        },\n        removeActiveNs(ns) {\n            const namespaces = getFallbackArray(ns);\n            namespaces.forEach((namespace) => {\n                const value = state.activeNamespaces.get(namespace);\n                if (value !== undefined && value > 1) {\n                    state.activeNamespaces.set(namespace, value - 1);\n                }\n                else {\n                    state.activeNamespaces.delete(namespace);\n                }\n            });\n        },\n        getRequiredNamespaces() {\n            return unique([\n                ...(state.initialOptions.ns || [state.initialOptions.defaultNs]),\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        getDefaultNs(ns) {\n            return ns === undefined ? state.initialOptions.defaultNs : 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        withDefaultNs(descriptor) {\n            return {\n                namespace: descriptor.namespace === undefined\n                    ? self.getInitialOptions().defaultNs\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 (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(getFallbackNs, getDefaultNs);\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 [...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 [\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 getRequiredRecords(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                if (!cache.exists({ language, namespace }, true)) {\n                    result.push({ language, namespace });\n                }\n            });\n        });\n        return result;\n    }\n    function loadRequiredRecords(lang, ns) {\n        const descriptors = getRequiredRecords(lang, ns);\n        if (descriptors.length) {\n            return valueOrPromise(self.loadRecords(descriptors), () => { });\n        }\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            // fail if there is no language\n            return loadRequiredRecords();\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, getRequiredRecords: getRequiredRecords, async changeLanguage(language) {\n            if (state.getPendingLanguage() === language &&\n                state.getLanguage() === language) {\n                return;\n            }\n            state.setPendingLanguage(language);\n            if (state.isRunning()) {\n                await loadRequiredRecords(language);\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 loadRequiredRecords(undefined, ns);\n            }\n        },\n        loadRecords(descriptors) {\n            return cache.loadRecords(descriptors, self.isDev());\n        },\n        async loadRecord(descriptor) {\n            return (await self.loadRecords([descriptor]))[0];\n        },\n        isLoading(ns) {\n            return cache.isLoading(state.getLanguage(), ns);\n        },\n        isLoaded(ns) {\n            const language = state.getLanguage();\n            if (!language) {\n                return false;\n            }\n            const languages = state.getFallbackLangs(language);\n            const namespaces = getRequiredNamespaces(ns);\n            const result = [];\n            languages.forEach((language) => {\n                namespaces.forEach((namespace) => {\n                    if (!cache.exists({ language, namespace })) {\n                        result.push({ language, namespace });\n                    }\n                });\n            });\n            return result.length === 0;\n        }, t: ((...args) => {\n            // @ts-ignore\n            const params = getTranslateProps(...args);\n            const translation = getTranslation(params);\n            return pluginService.formatTranslation(Object.assign(Object.assign({}, params), { translation }));\n        }), isDev() {\n            return Boolean(state.getInitialOptions().apiKey && state.getInitialOptions().apiUrl);\n        },\n        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 createJioTranslate(options) {\n    const controller = Controller({\n        options,\n    });\n    if (controller.isDev()) {\n        // override existing data in DevMode\n        controller.invalidate();\n    }\n    // restarts jiotranslate while applying callback\n    function withRestart(callback) {\n        const wasRunning = controller.isRunning();\n        wasRunning && controller.stop();\n        callback();\n        // invalidate cache when jiotranslate 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 jiotranslate events.\n         */\n        on: controller.on,\n        /**\n         * Listen for specific namespaces changes.\n         *\n         * ```\n         * const sub = jiotranslate.onUpdate(handler)\n         *\n         * // subscribe to selected namespace\n         * sub.subscribeNs(['common'])\n         *\n         * // unsubscribe\n         * sub.unsubscribe()\n         * ```\n         */\n        onNsUpdate: controller.onUpdate.listenSome,\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 jiotranslate is running, loads required data.\n         */\n        addActiveNs: controller.addActiveNs,\n        /**\n         * Remove namespace(s) from active namespaces.\n         *\n         * jiotranslate 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         * 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         *\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 records needed for instance to be `loaded`\n         */\n        getRequiredRecords: controller.getRequiredRecords,\n        /**\n         * @return `true` if jiotranslate 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 jiotranslate 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 jiotranslate is fetching some translations.\n         */\n        isFetching: controller.isFetching,\n        /**\n         * @return `true` if jiotranslate 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 jiotranslate 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 jiotranslate options.\n         */\n        getInitialOptions: controller.getInitialOptions,\n        /**\n         * jiotranslate is in dev mode if `DevTools` plugin is used and `apiKey` + `apiUrl` are specified.\n         * @return `true` if jiotranslate 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, jiotranslate stops and runs again.\n         */\n        overrideCredentials(credentials) {\n            withRestart(() => controller.overrideCredentials(credentials));\n        },\n        /**\n         * Add jiotranslate plugin after initialization.\n         *\n         * When called in running state, jiotranslate 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, jiotranslate 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 * jiotranslate chainable constructor.\n *\n * Usage:\n * ```\n * const jiotranslate = JioTranslate().use(...).init(...)\n * ```\n */\nconst JioTranslateCore = () => {\n    const state = {\n        plugins: [],\n        options: {},\n    };\n    const jiotranslateChain = Object.freeze({\n        use(plugin) {\n            state.plugins.push(plugin);\n            return jiotranslateChain;\n        },\n        updateDefaults(options) {\n            state.options = combineOptions(state.options, options);\n            return jiotranslateChain;\n        },\n        init(options) {\n            const jiotranslate = createJioTranslate(combineOptions(state.options, options));\n            state.plugins.forEach(jiotranslate.addPlugin);\n            return jiotranslate;\n        },\n    });\n    return jiotranslateChain;\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        if (code === ERROR_PARAM_EMPTY) {\n            error = 'Empty parameter';\n        }\n        else if (code === ERROR_UNEXPECTED_CHAR) {\n            error = 'Unexpected character';\n        }\n        else {\n            error = 'Unexpected end';\n        }\n        super(`JioTranslate parser: ${error} at ${index} in \"${text}\"`);\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 = () => (jioTranslate, tools) => {\n    tools.setFinalFormatter(createFormatSimple());\n    return jioTranslate;\n};\n\nexport { FormatSimple, JioTranslateCore, LanguageDetectorError, LanguageStorageError, RecordFetchError, createFetchFunction, getFallback, getFallbackArray, getTranslateProps };\n//# sourceMappingURL=jiotranslate.esm.js.map\n","// needs to be same as in @jiotranslate/core-beta package\nexport const DEVTOOLS_ID = '__jiotranslate_dev_tools';\n\nexport const DEVTOOLS_Z_INDEX = 2147483000;\n\nexport const CHROME_EXTENSION_LINK =\n  'https://chrome.google.com/webstore/detail/tolgee-tools/hacnbapajkkfohnonhbmegojnddagfnj';\n\nexport const PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY =\n  '__jiotranslate_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-jiotranslate-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-jiotranslate-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 = '_jiotranslate';\nexport const TOLGEE_HIGHLIGHTER_CLASS = '_jiotranslate-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 '@jiotranslate/core-beta';\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 '@jiotranslate/core-beta';\nimport type { ElementMeta, NodeMeta, JioTranslateElement } from '../../types';\n\nexport function initElementMeta(element: JioTranslateElement): 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, JioTranslateElement } 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: JioTranslateElement,\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: JioTranslateElement,\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: JioTranslateElement, elementMeta: ElementMeta) {\n      initHighlightFunction(element, elementMeta);\n      initUnhighlightFunction(element, elementMeta);\n    },\n  });\n}\n","import { ModifierKey, ObserverOptionsInternal } from '@jiotranslate/core-beta';\nimport { JioTranslateElement } 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: JioTranslateElement) => void;\n  options: ObserverOptionsInternal;\n  onPushTranslations: any;\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  onPushTranslations,\n}: Props) {\n  const keysDown = new Set<ModifierKey>();\n  let highlighted: JioTranslateElement | 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: JioTranslateElement | 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: JioTranslateElement | undefined;\n    if (position && areKeysDown()) {\n      const elements =\n        documentOrShadowRoot.elementsFromPoint(position.x, position.y) || [];\n\n      newHighlighted = getClosestJioTranslateElement(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    checkIfPushTranslationsKeysDown(e);\n  }\n  function checkIfPushTranslationsKeysDown(event: KeyboardEvent) {\n    if (event.altKey && event.shiftKey && event.key.toLowerCase() === 'j') {\n      onPushTranslations();\n      event.preventDefault(); // Prevent default browser behavior, if any.\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 getClosestJioTranslateElement(\n    elements: Element[]\n  ): JioTranslateElement | undefined {\n    for (const element of elements) {\n      const result = findAncestor(element, (el) =>\n        elementStore.get(el as JioTranslateElement)\n      ) as JioTranslateElement | 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 {\n  NsFallback,\n  getFallback,\n  ObserverOptionsInternal,\n} from '@jiotranslate/core-beta';\nimport { KeyAndParams, TranslationOnClick } from '@jiotranslate/core-beta';\nimport {\n  TOLGEE_RESTRICT_ATTRIBUTE,\n  TOLGEE_ATTRIBUTE_NAME,\n  TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE,\n} from '../../constants';\nimport { ElementMeta, NodeMeta, JioTranslateElement } 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  getTranslation: any,\n  initialOptions: any\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    onPushTranslations: () => {\n      const keysToPush = [];\n      elementStore.forEachElement((element, meta) => {\n        const keysAndDefaults = getKeysAndDefaults(meta);\n        keysAndDefaults.forEach((keysObj) => {\n          if (keysObj.key.length && !getTranslation(keysObj)) {\n            keysToPush.push({\n              name: keysObj.key,\n\n              translations: {\n                en: keysObj.key,\n              },\n            });\n          }\n        });\n      });\n      fetch(initialOptions?.apiUrl + '/v2/projects/keys/import', {\n        method: 'POST',\n        headers: {\n          'content-type': 'application/json',\n          Accept: '*/*',\n          'x-api-key': initialOptions?.apiKey,\n          'x-JioTranslate-sdk-type': 'JS',\n          'x-JioTranslate-sdk-version': 'prerelease',\n        },\n        body: JSON.stringify({ keys: keysToPush }),\n      })\n        .then((response) => response.json())\n        .then((data) => {\n          console.log('Translation key created successfully:', data);\n        })\n        .catch((error) => {\n          console.error('Error creating translation key:', error);\n        });\n    },\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: JioTranslateElement, 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 JioTranslateElement = element as JioTranslateElement;\n      let elementMeta = elementStore.get(JioTranslateElement);\n      if (!elementMeta) {\n        elementMeta = initElementMeta(JioTranslateElement);\n        elementStore.set(JioTranslateElement, elementMeta);\n        JioTranslateElement.setAttribute(TOLGEE_ATTRIBUTE_NAME, 'true');\n      }\n      elementMeta.nodes.set(node, nodeMeta);\n      elementHighlighter.initHighlighter(JioTranslateElement, 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 { JioTranslateElement, ElementMeta } from '../../types';\n\nexport type RegistredElementsMap = Map<JioTranslateElement, ElementMeta>;\n\nexport function ElementStore() {\n  const registredElements: RegistredElementsMap = new Map();\n\n  return Object.freeze({\n    set(el: JioTranslateElement, meta: ElementMeta) {\n      registredElements.set(el, meta);\n    },\n\n    get(el: JioTranslateElement | undefined) {\n      return el && registredElements.get(el);\n    },\n\n    remove(el: JioTranslateElement) {\n      return registredElements.delete(el);\n    },\n\n    forEachElement(\n      callback: (el: JioTranslateElement, meta: ElementMeta) => void\n    ) {\n      registredElements.forEach((value, key) => callback(key, value));\n    },\n  });\n}\n\nexport type ElementStoreType = ReturnType<typeof ElementStore>;\n","import {\n  ObserverOptionsInternal,\n  WrapperMiddleware,\n} from '@jiotranslate/core-beta';\n\nexport function NodeHandler(\n  options: ObserverOptionsInternal,\n  wrapper: WrapperMiddleware,\n  dynamicScanningEnabled: boolean\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        if (dynamicScanningEnabled) {\n          return wrapper.translationPresentForText(node as Text)\n            ? [node as Text]\n            : [];\n        } else {\n          return wrapper.testTextNode(node as Text) ? [node as Text] : [];\n        }\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 '@jiotranslate/core-beta';\n\nimport { TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE } from '../../constants';\nimport { isSSR } from '../../tools/isSSR';\nimport { ElementMeta, JioTranslateElement } 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(initialOptions) {\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    getTranslation,\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(\n      options,\n      wrapper,\n      initialOptions?.dynamicScanningEnable\n    );\n    const elementRegistry = ElementRegistry(\n      options,\n      elementStore,\n      onClick,\n      getTranslation,\n      initialOptions\n    );\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          if (textNode.nodeValue != text) {\n            setNodeText(textNode, text);\n          }\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      props.options.highlightColor = '#8F005D';\n      props.options.highlightKeys = ['Alt', 'Shift'];\n      instance = createRunningInstance(props);\n    },\n\n    stop() {\n      instance?.stop();\n    },\n\n    forEachElement(\n      callback: (el: JioTranslateElement, meta: ElementMeta) => void\n    ) {\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  'gu'\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\nexport function stringToCodePoints(text: string) {\n  const result: number[] = [];\n  for (const codePoint of text) {\n    result.push(codePoint.codePointAt(0)!);\n  }\n  return result;\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 '@jiotranslate/core-beta';\n\nimport {\n  decodeFromText,\n  encodeMessage,\n  INVISIBLE_CHARACTERS,\n  removeSecrets,\n  stringToCodePoints,\n} from './secret';\nimport { ValueMemory } from './ValueMemory';\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 getMessage(message: string) {\n    if (message.length <= 4) {\n      const [valueCode] = stringToCodePoints(message);\n      return keyMemory.numberToValue(valueCode);\n    } else {\n      return message;\n    }\n  }\n\n  return Object.freeze({\n    unwrap(text: string): Unwrapped {\n      const keysAndParams = [] as KeyAndParams[];\n      const messages = decodeFromText(text);\n\n      messages.forEach((encodedValue: string) => {\n        const message = getMessage(encodedValue);\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      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 = encodeMessage(encodedValue);\n      } else {\n        const encodedValue = encodeValue({ key, ns, defaultValue });\n        const code = keyMemory.valueToNumber(encodedValue);\n        invisibleMark = encodeMessage(String.fromCodePoint(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 {\n  ObserverMiddleware,\n  ObserverRunProps,\n} from '@jiotranslate/core-beta';\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 '@jiotranslate/core-beta';\nimport { isCharEscaped } from './helpers';\n\ntype Props = {\n  inputPrefix: string;\n  inputSuffix: string;\n  translate: (params: TranslatePropsInternal) => string;\n  getTranslation: any;\n  dynamicScanningEnabled: boolean;\n};\n\nexport function TextWrapper({\n  inputPrefix,\n  inputSuffix,\n  translate,\n  getTranslation,\n  dynamicScanningEnabled,\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(/[,:|\\\\]/gs, '\\\\$&');\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\n      if (dynamicScanningEnabled) {\n        const translated = getTranslatedWithMetadata(text);\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 = translated.translated;\n      } else {\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      if (dynamicScanningEnabled) {\n        return /\\S/.test(textNode.textContent) ?? false;\n      }\n      return (\n        (textNode.textContent?.includes(inputPrefix) &&\n          textNode.textContent?.includes(inputSuffix)) ??\n        false\n      );\n    },\n    translationPresentForText(textNode: Text) {\n      if (!getTranslation({ key: textNode.textContent })) {\n        return false;\n      }\n      return /\\S/.test(textNode.textContent) ?? false;\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 {\n  ObserverMiddleware,\n  ObserverRunProps,\n} from '@jiotranslate/core-beta';\nimport { GeneralObserver } from './observers/general/GeneralObserver';\nimport { setNodeText } from './observers/general/helpers';\nimport { TextWrapper } from './observers/text/TextWrapper';\n\nexport const TextObserver =\n  (initialOptions): ObserverMiddleware =>\n  () => {\n    const observer = GeneralObserver(initialOptions);\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          getTranslation: props.getTranslation,\n          dynamicScanningEnabled: initialOptions?.dynamicScanningEnable,\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 { InvisibleObserver } from './InvisibleObserver';\nimport { JioTranslatePlugin } from '@jiotranslate/core-beta';\nimport { TextObserver } from './TextObserver';\n\nexport const ObserverPlugin =\n  (): JioTranslatePlugin => (jioTranslate, tools) => {\n    if (jioTranslate.getInitialOptions().observerType === 'text') {\n      tools.setObserver(TextObserver(jioTranslate.getInitialOptions()));\n    } else {\n      tools.setObserver(InvisibleObserver());\n    }\n    return jioTranslate;\n  };\n","const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\nfunction readChar(char: string) {\n  const idx = alphabet.indexOf(char);\n\n  if (idx === -1) {\n    throw new Error('Invalid character found: ' + char);\n  }\n\n  return idx;\n}\n\nfunction arrayBufferToString(buffer: any) {\n  const bufView = new Uint8Array(buffer);\n  const length = bufView.length;\n  let result = '';\n  let addition = Math.pow(2, 16) - 1;\n\n  for (let i = 0; i < length; i += addition) {\n    if (i + addition > length) {\n      addition = length - i;\n    }\n    result += String.fromCharCode.apply(\n      null,\n      // @ts-ignore\n      bufView.subarray(i, i + addition)\n    );\n  }\n\n  return result;\n}\n\nfunction base32Decode(input: string) {\n  input = input.toUpperCase();\n\n  const length = input.length;\n\n  let bits = 0;\n  let value = 0;\n\n  let index = 0;\n  const output = new Uint8Array(((length * 5) / 8) | 0);\n\n  for (let i = 0; i < length; i++) {\n    value = (value << 5) | readChar(input[i]);\n    bits += 5;\n\n    if (bits >= 8) {\n      output[index++] = (value >>> (bits - 8)) & 255;\n      bits -= 8;\n    }\n  }\n\n  return arrayBufferToString(output.buffer);\n}\n\nexport function getProjectIdFromApiKey(\n  key: string | undefined\n): number | undefined {\n  if (!key) {\n    return undefined;\n  }\n  try {\n    const [prefix, rest] = key.split('_');\n    if (prefix === 'tgpak') {\n      const [projectId] = base32Decode(rest).split('_');\n      return Number(projectId);\n    }\n  } catch {\n    // eslint-disable-next-line no-console\n    console.warn(\"Tolgee: Api key can't be parsed\");\n  }\n  return undefined;\n}\n\nexport function getApiKeyType(key: string | undefined) {\n  if (!key) {\n    return undefined;\n  }\n  const [prefix] = key.split('_');\n  if (prefix === 'tgpak') {\n    return 'tgpak';\n  } else if (prefix === 'tgpat') {\n    return 'tgpat';\n  }\n\n  return 'legacy';\n}\n","import { BackendDevMiddleware } from '@jiotranslate/core-beta';\nimport { getApiKeyType, getProjectIdFromApiKey } from './tools/decodeApiKey';\nimport { JioTranslatePlugin } from '@jiotranslate/core-beta';\nfunction createDevBackend(): BackendDevMiddleware {\n  return {\n    getRecord({ apiUrl, apiKey, language, namespace, projectId, fetch }) {\n      const pId = getProjectIdFromApiKey(apiKey) ?? projectId;\n      let url =\n        pId !== undefined\n          ? `${apiUrl}/v2/projects/${pId}/translations/${language}`\n          : `${apiUrl}/v2/projects/translations/${language}`;\n\n      if (namespace) {\n        url += `?ns=${namespace}`;\n      }\n\n      if (getApiKeyType(apiKey) === 'tgpat' && projectId === undefined) {\n        throw new Error(\"You need to specify 'projectId' when using PAT key\");\n      }\n      return fetch(url, {\n        headers: {\n          'X-API-Key': apiKey || '',\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 = (): JioTranslatePlugin => (jiotranslate, tools) => {\n  tools.setDevBackend(createDevBackend());\n  return jiotranslate;\n};\n","type Props = {\n  message: string;\n  recievingMessage: string[];\n  data?: any;\n  attempts?: number;\n  timeout?: number;\n};\n\nexport function listen<T = any>(type: string[], callback: (data?: T) => any) {\n  const handler = (e: MessageEvent) => {\n    if (type.includes(e.data?.type)) {\n      callback(e.data?.data);\n    }\n  };\n  window.addEventListener('message', handler, false);\n  return {\n    unsubscribe() {\n      window.removeEventListener('message', handler);\n    },\n  };\n}\n\nexport function sendAndRecieve<T>({\n  message,\n  recievingMessage,\n  data,\n  attempts = 1,\n  timeout = 300,\n}: Props) {\n  let cancelled = false;\n  const makeAttempt = () =>\n    new Promise<T>((resolve, reject) => {\n      const listener = listen(recievingMessage, handler);\n      window.postMessage({ type: message, data }, window.origin);\n      const timer = setTimeout(expire, timeout);\n\n      function handler(data: any) {\n        clearTimeout(timer);\n        removeEventListener();\n        resolve(data);\n      }\n      function removeEventListener() {\n        listener.unsubscribe();\n      }\n      function expire() {\n        removeEventListener();\n        reject();\n      }\n    });\n\n  const getData = async (): Promise<T> => {\n    for (let i = 0; i < attempts; i++) {\n      if (cancelled) {\n        return new Promise<T>(() => {});\n      }\n      try {\n        const result = await makeAttempt();\n        return result;\n      } catch (e) {\n        continue;\n      }\n    }\n    if (!cancelled) {\n      throw `Didn't recieve ${recievingMessage.join(' or ')} in time.`;\n    }\n    return new Promise<T>(() => {});\n  };\n\n  return {\n    cancel() {\n      cancelled = true;\n    },\n    promise: getData(),\n  };\n}\n\nexport function takeScreenshot(): Promise<string> {\n  return sendAndRecieve({\n    message: 'TOLGEE_TAKE_SCREENSHOT',\n    recievingMessage: ['TOLGEE_SCREENSHOT_TAKEN'],\n    timeout: 3000,\n  }).promise as Promise<string>;\n}\n\nexport async function detectExtension(): Promise<boolean> {\n  try {\n    await sendAndRecieve({\n      message: 'TOLGEE_PING',\n      recievingMessage: ['TOLGEE_PONG'],\n      attempts: 2,\n    }).promise;\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport type LibConfig = {\n  uiPresent: boolean;\n  uiVersion?: string;\n  mode: 'production' | 'development';\n  config: {\n    apiUrl: string;\n    apiKey: string;\n  };\n};\n\nexport function Handshaker() {\n  let cancelLast: undefined | (() => void) = undefined;\n  async function update(data: LibConfig): Promise<boolean> {\n    cancelLast?.();\n    const { cancel, promise } = sendAndRecieve<boolean>({\n      message: 'TOLGEE_READY',\n      recievingMessage: ['TOLGEE_PLUGIN_READY', 'TOLGEE_PLUGIN_UPDATED'],\n      data,\n      attempts: 4,\n    });\n    cancelLast = cancel;\n    return promise;\n  }\n  return {\n    update,\n  };\n}\n","export const IN_CONTEXT_FILE = 'tolgee-in-context-tools.umd.min.js';\nexport const IN_CONTEXT_UMD_NAME = '@tolgee/in-context-tools';\nexport const IN_CONTEXT_EXPORT_NAME = 'InContextTools';\n","import type { InContextTools } from '../InContextTools';\nimport {\n  IN_CONTEXT_FILE,\n  IN_CONTEXT_UMD_NAME,\n  IN_CONTEXT_EXPORT_NAME,\n} from './constants';\n\nconst CDN_URL = 'https://cdn.jsdelivr.net/npm';\n\nfunction injectScript(src: string) {\n  return new Promise<void>((resolve, reject) => {\n    const script = document.createElement('script');\n    script.src = src;\n    script.addEventListener('load', () => resolve());\n    script.addEventListener('error', (e) => reject(e.error));\n    document.head.appendChild(script);\n  });\n}\n\nlet injectPromise = null as any as Promise<typeof InContextTools>;\n\nexport function loadInContextLib(version: string) {\n  if (!injectPromise) {\n    injectPromise = injectScript(\n      `${CDN_URL}/@tolgee/web@${version}/dist/${IN_CONTEXT_FILE}`\n    ).then(() => {\n      // @ts-ignore\n      return window[IN_CONTEXT_UMD_NAME][IN_CONTEXT_EXPORT_NAME];\n    });\n  }\n  return injectPromise;\n}\n","import type { JioTranslatePlugin } from '@jiotranslate/core-beta';\nimport { Handshaker } from '../tools/extension';\nimport { loadInContextLib } from './loadInContextLib';\n\nexport const API_KEY_LOCAL_STORAGE = '__tolgee_apiKey';\nexport const API_URL_LOCAL_STORAGE = '__tolgee_apiUrl';\n\nfunction getCredentials() {\n  const apiKey = sessionStorage.getItem(API_KEY_LOCAL_STORAGE) || undefined;\n  const apiUrl = sessionStorage.getItem(API_URL_LOCAL_STORAGE) || undefined;\n\n  if (!apiKey || !apiUrl) {\n    return undefined;\n  }\n\n  return {\n    apiKey,\n    apiUrl,\n  };\n}\n\nfunction clearSessionStorage() {\n  sessionStorage.removeItem(API_KEY_LOCAL_STORAGE);\n  sessionStorage.removeItem(API_URL_LOCAL_STORAGE);\n}\n\nfunction onDocumentReady(callback: () => void) {\n  // in case the document is already rendered\n  if (document.readyState !== 'loading') {\n    Promise.resolve().then(() => {\n      callback();\n    });\n  }\n  // modern browsers\n  else if (document.addEventListener) {\n    document.addEventListener('DOMContentLoaded', callback);\n  }\n}\n\nexport type BrowserExtensionProps = {\n  noReload?: boolean;\n};\n\nlet BrowserExtensionPlugin: () => JioTranslatePlugin = () => (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 = (): JioTranslatePlugin => (tolgee) => {\n    const handshaker = Handshaker();\n    const getConfig = () =>\n      ({\n        // prevent extension downloading ui library\n        uiPresent: true,\n        uiVersion: undefined,\n        // tolgee mode\n        mode: tolgee.isDev() ? 'development' : 'production',\n        // pass credentials\n        config: {\n          apiUrl: tolgee.getInitialOptions().apiUrl || '',\n          apiKey: tolgee.getInitialOptions().apiKey || '',\n        },\n      }) as const;\n\n    const getJioTranslatePlugin = async (): Promise<JioTranslatePlugin> => {\n      const InContextTools = await loadInContextLib(\n        process.env.TOLGEE_UI_VERSION || 'prerelease'\n      );\n      return (tolgee) => {\n        const credentials = getCredentials()!;\n        tolgee.addPlugin(InContextTools({ credentials }));\n        return tolgee;\n      };\n    };\n\n    tolgee.on('running', ({ value: isRunning }) => {\n      if (isRunning) {\n        onDocumentReady(() => {\n          handshaker.update(getConfig()).catch(clearSessionStorage);\n        });\n      }\n    });\n\n    const credentials = getCredentials();\n    if (credentials) {\n      getJioTranslatePlugin()\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 } from '@jiotranslate/core-beta';\nimport { throwIfSSR } from './tools/isSSR';\nimport { JioTranslatePlugin } from '@jiotranslate/core-beta';\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 =\n  (): JioTranslatePlugin => (jioTranslate, tools) => {\n    tools.setLanguageStorage(createLanguageStorage());\n    return jioTranslate;\n  };\n","import type { LanguageDetectorMiddleware } from '@jiotranslate/core-beta';\nimport { throwIfSSR } from './tools/isSSR';\nimport { JioTranslatePlugin } from '@jiotranslate/core-beta';\nexport function createLanguageDetector(): LanguageDetectorMiddleware {\n  return {\n    getLanguage({ availableLanguages }) {\n      throwIfSSR('LanguageDetector');\n      const preferred = window.navigator.language;\n      const exactMatch = availableLanguages.find((l) => l === preferred);\n      if (exactMatch) {\n        return exactMatch;\n      }\n\n      const getTwoLetters = (fullTag: string) =>\n        fullTag.replace(/^(.+?)(-.*)?$/, '$1');\n\n      const preferredTwoLetter = getTwoLetters(window.navigator.language);\n      const twoLetterMatch = availableLanguages.find(\n        (l) => getTwoLetters(l) === preferredTwoLetter\n      );\n      if (twoLetterMatch) {\n        return twoLetterMatch;\n      }\n      return undefined;\n    },\n  };\n}\n\nexport const LanguageDetector =\n  (): JioTranslatePlugin => (jioTranslate, tools) => {\n    tools.setLanguageDetector(createLanguageDetector());\n    return jioTranslate;\n  };\n","import type {\n  BackendMiddleware,\n  JioTranslatePlugin,\n} from '@jiotranslate/core-beta';\nimport { GetPath, BackendOptions } from './types';\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};\n\nfunction createBackendFetch(\n  options?: Partial<BackendOptions>\n): BackendMiddleware {\n  const { prefix, getPath, getData, headers, ...fetchOptions }: BackendOptions =\n    {\n      ...DEFAULT_OPTIONS,\n      ...options,\n      headers: {\n        ...DEFAULT_OPTIONS.headers,\n        ...options?.headers,\n      },\n    };\n  return {\n    getRecord({ namespace, language, fetch }) {\n      const path = getPath({\n        namespace,\n        language,\n        prefix,\n      });\n      return fetch(path, { headers, ...fetchOptions }).then((r) => {\n        if (!r.ok) {\n          throw new Error(`${r.url} ${r.status}`);\n        }\n        return getData(r);\n      });\n    },\n  };\n}\n\nexport const BackendFetch =\n  (options?: Partial<BackendOptions>): JioTranslatePlugin =>\n  (jiotranslate, tools) => {\n    tools.addBackend(createBackendFetch(options));\n    return jiotranslate;\n  };\n","import { JioTranslateChainer, JioTranslateCore } from '@jiotranslate/core-beta';\nimport { BrowserExtensionPlugin } from './BrowserExtensionPlugin/BrowserExtensionPlugin';\n\nexport function JioTranslate(): JioTranslateChainer {\n  return JioTranslateCore().use(BrowserExtensionPlugin());\n}\n","import { JioTranslateInstance } from '@jiotranslate/core-beta';\n\nexport const DevTools = () => (jiotranslate: JioTranslateInstance) =>\n  jiotranslate;\nexport * from './typedIndex';\nexport {\n  PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY,\n  DEVTOOLS_ID,\n} from './constants';\n"],"names":["ns","self","_a","formatter","result","options","language","JioTranslateElement","global","this","fetch","data","BrowserExtensionPlugin","tolgee","credentials"],"mappings":"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","x_google_ignoreList":[12]}