@truconsent/consent-notice 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../node_modules/i18next/dist/esm/i18next.js","../node_modules/react-i18next/dist/es/utils.js","../node_modules/react-i18next/dist/es/unescape.js","../node_modules/react-i18next/dist/es/defaults.js","../node_modules/react-i18next/dist/es/i18nInstance.js","../node_modules/react-i18next/dist/es/initReactI18next.js","../node_modules/react-i18next/dist/es/context.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/react-i18next/dist/es/useTranslation.js","../node_modules/react-i18next/dist/es/I18nextProvider.js","../src/LanguageProvider.jsx","../src/ModernBannerHeader.jsx","../src/i18n.js","../src/CollapsibleDataSection.jsx","../src/ModernPurposeCard.jsx","../src/ModernBannerFooter.jsx","../src/ModernBannerActions.jsx","../src/BannerUI.jsx","../src/CookieBannerUI.jsx","../src/PreferencesModalUI.jsx","../src/HCaseWarningPopup.jsx","../src/TruConsentModal.jsx","../src/RightCenter.jsx","../src/TruConsent.jsx"],"sourcesContent":["const isString = obj => typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return '' + object;\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n if (!Object.prototype.hasOwnProperty.call(obj, k)) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nvar _entityMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = (obj, path, keySeparator = '.') => {\n if (!obj) return undefined;\n if (obj[path]) {\n if (!Object.prototype.hasOwnProperty.call(obj, path)) return undefined;\n return obj[path];\n }\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].indexOf(typeof next) > -1 && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code?.replace('_', '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n console?.[type]?.apply?.(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger, options = {}) {\n this.init(concreteLogger, options);\n }\n init(concreteLogger, options = {}) {\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log(...args) {\n return this.forward(args, 'log', '', true);\n }\n warn(...args) {\n return this.forward(args, 'warn', '', true);\n }\n error(...args) {\n return this.forward(args, 'error', '');\n }\n deprecate(...args) {\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n emit(event, ...args) {\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer.apply(observer, [event, ...args]);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data, options = {\n ns: ['translation'],\n defaultNS: 'translation'\n }) {\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key, options = {}) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.indexOf('.') > -1) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data?.[lng]?.[ns], key, keySeparator);\n }\n addResource(lng, ns, key, value, options = {\n silent: false\n }) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources, options = {\n silent: false\n }) {\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite, options = {\n silent: false,\n skipCopy: false\n }) {\n let path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n value = this.processors[processor]?.process(value, key, options, translator) ?? value;\n });\n return value;\n }\n};\n\nconst PATH_KEY = Symbol('i18next/PATH_KEY');\nfunction createProxy() {\n const state = [];\n const handler = Object.create(null);\n let proxy;\n handler.get = (target, key) => {\n proxy?.revoke?.();\n if (key === PATH_KEY) return state;\n state.push(key);\n proxy = Proxy.revocable(target, handler);\n return proxy.proxy;\n };\n return Proxy.revocable(Object.create(null), handler).proxy;\n}\nfunction keysFromSelector(selector, opts) {\n const {\n [PATH_KEY]: path\n } = selector(createProxy());\n return path.join(opts?.keySeparator ?? '.');\n}\n\nconst checkedLoadedFor = {};\nconst shouldHandleAsObject = res => !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\nclass Translator extends EventEmitter {\n constructor(services, options = {}) {\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key, o = {\n interpolation: {}\n }) {\n const opt = {\n ...o\n };\n if (key == null) return false;\n const resolved = this.resolve(key, opt);\n if (resolved?.res === undefined) return false;\n const isObject = shouldHandleAsObject(resolved.res);\n if (opt.returnObjects === false && isObject) {\n return false;\n }\n return true;\n }\n extractFromKey(key, opt) {\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n let namespaces = opt.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !opt.keySeparator && !this.options.userDefinedNsSeparator && !opt.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, o, lastKey) {\n let opt = typeof o === 'object' ? {\n ...o\n } : o;\n if (typeof opt !== 'object' && this.options.overloadTranslationOptionHandler) {\n opt = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof opt === 'object') opt = {\n ...opt\n };\n if (!opt) opt = {};\n if (keys == null) return '';\n if (typeof keys === 'function') keys = keysFromSelector(keys, {\n ...this.options,\n ...opt\n });\n if (!Array.isArray(keys)) keys = [String(keys)];\n const returnDetails = opt.returnDetails !== undefined ? opt.returnDetails : this.options.returnDetails;\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], opt);\n const namespace = namespaces[namespaces.length - 1];\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const lng = opt.lng || this.language;\n const appendNamespaceToCIMode = opt.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng?.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, opt);\n let res = resolved?.res;\n const resUsedKey = resolved?.usedKey || key;\n const resExactUsedKey = resolved?.exactUsedKey || key;\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = opt.joinArrays !== undefined ? opt.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const hasDefaultValue = Translator.hasDefaultValue(opt);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, opt) : '';\n const defaultValueSuffixOrdinalFallback = opt.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const defaultValue = needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] || opt[`defaultValue${defaultValueSuffix}`] || opt[`defaultValue${defaultValueSuffixOrdinalFallback}`] || opt.defaultValue;\n let resForObjHndl = res;\n if (handleAsObjectInI18nFormat && !res && hasDefaultValue) {\n resForObjHndl = defaultValue;\n }\n const handleAsObject = shouldHandleAsObject(resForObjHndl);\n const resType = Object.prototype.toString.apply(resForObjHndl);\n if (handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && noObject.indexOf(resType) < 0 && !(isString(joinArrays) && Array.isArray(resForObjHndl))) {\n if (!opt.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, resForObjHndl, {\n ...opt,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(resForObjHndl);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in resForObjHndl) {\n if (Object.prototype.hasOwnProperty.call(resForObjHndl, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n if (hasDefaultValue && !res) {\n copy[m] = this.translate(deepKey, {\n ...opt,\n defaultValue: shouldHandleAsObject(defaultValue) ? defaultValue[m] : undefined,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n } else {\n copy[m] = this.translate(deepKey, {\n ...opt,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n }\n if (copy[m] === deepKey) copy[m] = resForObjHndl[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, opt, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = opt.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...opt,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, opt.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(opt.lng || this.language);\n } else {\n lngs.push(opt.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, opt);\n } else if (this.backendConnector?.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, opt);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, opt);\n if (needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] && suffixes.indexOf(`${this.options.pluralSeparator}zero`) < 0) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, opt[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, opt, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) {\n res = `${namespace}${nsSeparator}${key}`;\n }\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}${nsSeparator}${key}` : key, usedDefault ? res : undefined, opt);\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, opt, resolved, lastKey) {\n if (this.i18nFormat?.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...opt\n }, opt.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!opt.skipInterpolation) {\n if (opt.interpolation) this.interpolator.init({\n ...opt,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...opt.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (opt?.interpolation?.skipOnVariables !== undefined ? opt.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = opt.replace && !isString(opt.replace) ? opt.replace : opt;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, opt.lng || this.language || resolved.usedLng, opt);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) opt.nest = false;\n }\n if (!opt.lng && resolved && resolved.res) opt.lng = this.language || resolved.usedLng;\n if (opt.nest !== false) res = this.interpolator.nest(res, (...args) => {\n if (lastKey?.[0] === args[0] && !opt.context) {\n this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return this.translate(...args, key);\n }, opt);\n if (opt.interpolation) this.interpolator.reset();\n }\n const postProcess = opt.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res != null && postProcessorNames?.length && opt.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(opt)\n },\n ...opt\n } : opt, this);\n }\n return res;\n }\n resolve(keys, opt = {}) {\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, opt);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const needsContextHandling = opt.context !== undefined && (isString(opt.context) || typeof opt.context === 'number') && opt.context !== '';\n const codes = opt.lngs ? opt.lngs : this.languageUtils.toResolveHierarchy(opt.lng || this.language, opt.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat?.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, opt);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, opt.count, opt);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(key + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator || '_'}${opt.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(contextKey + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, opt);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key, options = {}) {\n if (this.i18nFormat?.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails(options = {}) {\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.indexOf('-') > -1) {\n let formattedCode;\n try {\n formattedCode = Intl.getCanonicalLocales(code)[0];\n } catch (e) {}\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n if (this.options.lowerCaseLng) {\n return code.toLowerCase();\n }\n return code;\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngScOnly = this.getScriptPartFromCode(code);\n if (this.isSupportedCode(lngScOnly)) return found = lngScOnly;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return supportedLng;\n if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n if (supportedLng.indexOf('-') > 0 && lngOnly.indexOf('-') < 0 && supportedLng.substring(0, supportedLng.indexOf('-')) === lngOnly) return supportedLng;\n if (supportedLng.indexOf(lngOnly) === 0 && lngOnly.length > 1) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes((fallbackCode === false ? [] : fallbackCode) || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst dummyRule = {\n select: count => count === 1 ? 'one' : 'other',\n resolvedOptions: () => ({\n pluralCategories: ['one', 'other']\n })\n};\nclass PluralResolver {\n constructor(languageUtils, options = {}) {\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n this.pluralRulesCache = {};\n }\n addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code, options = {}) {\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (!Intl) {\n this.logger.error('No Intl support, please use an Intl polyfill!');\n return dummyRule;\n }\n if (!code.match(/-|_/)) return dummyRule;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n needsPlural(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n return rule?.resolvedOptions().pluralCategories.length > 1;\n }\n getPluralFormsOfKey(code, key, options = {}) {\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n if (!rule) return [];\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n getSuffix(code, count, options = {}) {\n const rule = this.getRule(code, options);\n if (rule) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return this.getSuffix('dev', count, options);\n }\n}\n\nconst deepFindWithDefaults = (data, defaultData, key, keySeparator = '.', ignoreJSONStructure = true) => {\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor(options = {}) {\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options?.interpolation?.format || (value => value);\n this.init(options);\n }\n init(options = {}) {\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix || '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp?.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}((?:[^()\"']+|\"[^\"]*\"|'[^']*'|\\\\((?:[^()]|\"[^\"]*\"|'[^']*')*\\\\))*?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (key.indexOf(this.formatSeparator) < 0) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n const missingInterpolationHandler = options?.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options?.interpolation?.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc, options = {}) {\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n const c = key.split(new RegExp(`${sep}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if ((matchedSingleQuotes?.length ?? 0) % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.indexOf(this.prefix) > -1) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n const keyEndIndex = /{.*}/.test(match[1]) ? match[1].lastIndexOf('}') + 1 : match[1].indexOf(this.formatSeparator);\n if (keyEndIndex !== -1) {\n formatters = match[1].slice(keyEndIndex).split(this.formatSeparator).map(elem => elem.trim()).filter(Boolean);\n match[1] = match[1].slice(0, keyEndIndex);\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (formatters.length) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.indexOf('(') > -1) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (v, l, o) => {\n let optForCache = o;\n if (o && o.interpolationkey && o.formatParams && o.formatParams[o.interpolationkey] && o[o.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [o.interpolationkey]: undefined\n };\n }\n const key = l + JSON.stringify(optForCache);\n let frm = cache[key];\n if (!frm) {\n frm = fn(getCleanedCode(l), o);\n cache[key] = frm;\n }\n return frm(v);\n };\n};\nconst createNonCachedFormatter = fn => (v, l, o) => fn(getCleanedCode(l), o)(v);\nclass Formatter {\n constructor(options = {}) {\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.init(options);\n }\n init(services, options = {\n interpolation: {}\n }) {\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n const cf = options.cacheInBuiltFormats ? createCachedFormatter : createNonCachedFormatter;\n this.formats = {\n number: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: cf((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: cf((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: cf((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng, options = {}) {\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && formats[0].indexOf(')') < 0 && formats.find(f => f.indexOf(')') > -1)) {\n const lastIndex = formats.findIndex(f => f.indexOf(')') > -1);\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options?.formatParams?.[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services, options = {}) {\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n this.backend?.init?.(services, options.backend, options);\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName, tried = 0, wait = this.retryTimeout, callback) {\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces, options = {}, callback) {\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name, prefix = '') {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate, options = {}, clb = () => {}) {\n if (this.services?.utils?.hasLoadedNamespace && !this.services?.utils?.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend?.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initAsync: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: value => value,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n },\n cacheInBuiltFormats: true\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs?.indexOf?.('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n if (typeof options.initImmediate === 'boolean') options.initAsync = options.initImmediate;\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nclass I18n extends EventEmitter {\n constructor(options = {}, callback) {\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initAsync) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init(options = {}, callback) {\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (options.defaultNS == null && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf('translation') < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n const usingLegacyFormatFunction = this.options.interpolation.format && this.options.interpolation.format !== defOpts.interpolation.format;\n if (usingLegacyFormatFunction) {\n this.logger.deprecate(`init: you are still using the legacy format function, please use the new approach: https://www.i18next.com/translation-function/formatting`);\n }\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n if (s.formatter.init) s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = (...args) => this.store[fcName](...args);\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = (...args) => {\n this.store[fcName](...args);\n return this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (this.languages && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initAsync) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language, callback = noop) {\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng?.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n this.options.preload?.forEach?.(l => append(l));\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].indexOf(l) > -1) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n if (!this.resolvedLanguage && this.languages.indexOf(l) < 0 && this.store.hasLanguageSomeTranslations(l)) {\n this.resolvedLanguage = l;\n this.languages.unshift(l);\n }\n }\n changeLanguage(lng, callback) {\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n if (this.isLanguageChangingTo === lng) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n }\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve((...args) => this.t(...args));\n if (callback) callback(err, (...args) => this.t(...args));\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const fl = isString(lngs) ? lngs : lngs && lngs[0];\n const l = this.store.hasLanguageSomeTranslations(fl) ? fl : this.services.languageUtils.getBestMatchFromCodes(isString(lngs) ? [lngs] : lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n this.services.languageDetector?.cacheUserLanguage?.(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix) {\n const fixedT = (key, opts, ...rest) => {\n let o;\n if (typeof opts !== 'object') {\n o = this.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n o = {\n ...opts\n };\n }\n o.lng = o.lng || fixedT.lng;\n o.lngs = o.lngs || fixedT.lngs;\n o.ns = o.ns || fixedT.ns;\n if (o.keyPrefix !== '') o.keyPrefix = o.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const keySeparator = this.options.keySeparator || '.';\n let resultKey;\n if (o.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => {\n if (typeof k === 'function') k = keysFromSelector(k, {\n ...this.options,\n ...opts\n });\n return `${o.keyPrefix}${keySeparator}${k}`;\n });\n } else {\n if (typeof key === 'function') key = keysFromSelector(key, {\n ...this.options,\n ...opts\n });\n resultKey = o.keyPrefix ? `${o.keyPrefix}${keySeparator}${key}` : key;\n }\n return this.t(resultKey, o);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t(...args) {\n return this.translator?.translate(...args);\n }\n exists(...args) {\n return this.translator?.exists(...args);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns, options = {}) {\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0 && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages?.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n try {\n const l = new Intl.Locale(lng);\n if (l && l.getTextInfo) {\n const ti = l.getTextInfo();\n if (ti && ti.direction) return ti.direction;\n }\n } catch (e) {}\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services?.languageUtils || new LanguageUtil(get());\n if (lng.toLowerCase().indexOf('-latn') > 1) return 'ltr';\n return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance(options = {}, callback) {\n return new I18n(options, callback);\n }\n cloneInstance(options = {}, callback = noop) {\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n const clonedData = Object.keys(this.store.data).reduce((prev, l) => {\n prev[l] = {\n ...this.store.data[l]\n };\n prev[l] = Object.keys(prev[l]).reduce((acc, n) => {\n acc[n] = {\n ...prev[l][n]\n };\n return acc;\n }, prev[l]);\n return prev;\n }, {});\n clone.store = new ResourceStore(clonedData, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', (event, ...args) => {\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, keysFromSelector as keyFromSelector, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","export const warn = (i18n, code, msg, rest) => {\n const args = [msg, {\n code,\n ...(rest || {})\n }];\n if (i18n?.services?.logger?.forward) {\n return i18n.services.logger.forward(args, 'warn', 'react-i18next::', true);\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n if (i18n?.services?.logger?.warn) {\n i18n.services.logger.warn(...args);\n } else if (console?.warn) {\n console.warn(...args);\n }\n};\nconst alreadyWarned = {};\nexport const warnOnce = (i18n, code, msg, rest) => {\n if (isString(msg) && alreadyWarned[msg]) return;\n if (isString(msg)) alreadyWarned[msg] = new Date();\n warn(i18n, code, msg, rest);\n};\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n if (i18n.options.preload && i18n.options.preload.indexOf(lng) > -1) return loadNamespaces(i18n, ns, cb);\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nexport const hasLoadedNamespace = (ns, i18n, options = {}) => {\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {\n languages: i18n.languages\n });\n return true;\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&amp;': '&',\n '&#38;': '&',\n '&lt;': '<',\n '&#60;': '<',\n '&gt;': '>',\n '&#62;': '>',\n '&apos;': \"'\",\n '&#39;': \"'\",\n '&quot;': '\"',\n '&#34;': '\"',\n '&nbsp;': ' ',\n '&#160;': ' ',\n '&copy;': '©',\n '&#169;': '©',\n '&reg;': '®',\n '&#174;': '®',\n '&hellip;': '…',\n '&#8230;': '…',\n '&#x2F;': '/',\n '&#47;': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape\n};\nexport const setDefaults = (options = {}) => {\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;","let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;","import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n type: '3rdParty',\n init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import { useContext, useCallback, useMemo, useEffect, useRef, useState } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n return Array.isArray(k) ? k[k.length - 1] : k;\n};\nconst notReadySnapshot = {\n t: notReadyT,\n ready: false\n};\nconst dummySubscribe = () => () => {};\nexport const useTranslation = (ns, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', 'useTranslation: You will need to pass in an i18next instance by using initReactI18next');\n }\n const i18nOptions = useMemo(() => ({\n ...getDefaults(),\n ...i18n?.options?.react,\n ...props\n }), [i18n, props]);\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n const namespaces = useMemo(() => {\n const nsOrContext = ns || defaultNSFromContext || i18n?.options?.defaultNS;\n return isString(nsOrContext) ? [nsOrContext] : nsOrContext || ['translation'];\n }, [ns, defaultNSFromContext, i18n]);\n i18n?.reportNamespaces?.addUsedNamespaces?.(namespaces);\n const revisionRef = useRef(0);\n const subscribe = useCallback(callback => {\n if (!i18n) return dummySubscribe;\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n const wrappedCallback = () => {\n revisionRef.current += 1;\n callback();\n };\n if (bindI18n) i18n.on(bindI18n, wrappedCallback);\n if (bindI18nStore) i18n.store.on(bindI18nStore, wrappedCallback);\n return () => {\n if (bindI18n) bindI18n.split(' ').forEach(e => i18n.off(e, wrappedCallback));\n if (bindI18nStore) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, wrappedCallback));\n };\n }, [i18n, i18nOptions]);\n const snapshotRef = useRef();\n const getSnapshot = useCallback(() => {\n if (!i18n) {\n return notReadySnapshot;\n }\n const calculatedReady = !!(i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const currentLng = props.lng || i18n.language;\n const currentRevision = revisionRef.current;\n const lastSnapshot = snapshotRef.current;\n if (lastSnapshot && lastSnapshot.ready === calculatedReady && lastSnapshot.lng === currentLng && lastSnapshot.keyPrefix === keyPrefix && lastSnapshot.revision === currentRevision) {\n return lastSnapshot;\n }\n const calculatedT = i18n.getFixedT(currentLng, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const newSnapshot = {\n t: calculatedT,\n ready: calculatedReady,\n lng: currentLng,\n keyPrefix,\n revision: currentRevision\n };\n snapshotRef.current = newSnapshot;\n return newSnapshot;\n }, [i18n, namespaces, keyPrefix, i18nOptions, props.lng]);\n const [loadCount, setLoadCount] = useState(0);\n const {\n t,\n ready\n } = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n useEffect(() => {\n if (i18n && !ready && !useSuspense) {\n const onLoaded = () => setLoadCount(c => c + 1);\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n }\n }, [i18n, props.lng, namespaces, ready, useSuspense, loadCount]);\n const finalI18n = i18n || {};\n const ret = useMemo(() => {\n const arr = [t, finalI18n, ready];\n arr.t = t;\n arr.i18n = finalI18n;\n arr.ready = ready;\n return arr;\n }, [t, finalI18n, ready]);\n if (i18n && useSuspense && !ready) {\n throw new Promise(resolve => {\n const onLoaded = () => resolve();\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n });\n }\n return ret;\n};","import { createElement, useMemo } from 'react';\nimport { I18nContext } from './context.js';\nexport function I18nextProvider({\n i18n,\n defaultNS,\n children\n}) {\n const value = useMemo(() => ({\n i18n,\n defaultNS\n }), [i18n, defaultNS]);\n return createElement(I18nContext.Provider, {\n value\n }, children);\n}","import React from 'react';\nimport { I18nextProvider } from 'react-i18next';\nimport i18n from './i18n';\n\nexport default function LanguageProvider({ children }) {\n return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nexport default function ModernBannerHeader({ logoUrl, orgName, bannerTitle, disclaimerText }) {\n const { t, i18n } = useTranslation();\n const [isLangOpen, setIsLangOpen] = useState(false);\n\n const changeLanguage = (lng) => {\n i18n.changeLanguage(lng);\n setIsLangOpen(false);\n };\n\n const processPlaceholder = (text) => (text || '').replace(/\\[Organization Name\\]/g, orgName);\n\n const title = processPlaceholder(bannerTitle) || t('consent_by', { companyName: orgName });\n const disclaimer = processPlaceholder(disclaimerText) || t('decline_rights', { companyName: orgName });\n\n return (\n <div className=\"space-y-2 mb-4\">\n <div className=\"flex justify-between items-start\">\n <div className=\"flex items-center gap-3\">\n {logoUrl && <img src={logoUrl} alt={`${orgName} logo`} className=\"h-7 w-auto\" />}\n <h2 className=\"text-[1.25em] font-bold text-gray-800 leading-tight\">{title}</h2>\n </div>\n <div className=\"relative\">\n <button onClick={() => setIsLangOpen(!isLangOpen)} className=\"flex items-center gap-1 text-[0.875em] text-gray-600 hover:text-gray-800\">\n {i18n.language === 'en' ? 'English' : i18n.language === 'ta' ? 'தமிழ்' : 'हिंदी'}\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" /></svg>\n </button>\n {isLangOpen && (\n <div className=\"absolute right-0 mt-1 w-40 bg-white rounded-md shadow-lg z-10 border border-gray-100\">\n <button onClick={() => changeLanguage('en')} className=\"block w-full text-left px-4 py-2 text-[0.875em] text-gray-700 hover:bg-gray-100\">English</button>\n <button onClick={() => changeLanguage('ta')} className=\"block w-full text-left px-4 py-2 text-[0.875em] text-gray-700 hover:bg-gray-100\">தமிழ்</button>\n <button onClick={() => changeLanguage('hi')} className=\"block w-full text-left px-4 py-2 text-[0.875em] text-gray-700 hover:bg-gray-100\">हिंदी</button>\n </div>\n )}\n </div>\n </div>\n <div className=\"bg-blue-50/50 border border-blue-100 text-blue-800 text-[1em] leading-normal rounded-lg py-2 px-3 italic\">\n {disclaimer}\n </div>\n </div>\n );\n}\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nimport en from './locales/en.json';\nimport ta from './locales/ta.json';\nimport hi from './locales/hi.json';\n\ni18n\n .use(initReactI18next)\n .init({\n resources: {\n en: {\n translation: en,\n },\n ta: {\n translation: ta,\n },\n hi: {\n translation: hi,\n },\n },\n lng: 'en',\n fallbackLng: 'en',\n interpolation: {\n escapeValue: false,\n },\n });\n\nexport default i18n;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nconst dynamicTranslations = {\n ta: {\n 'Gender': 'பாலினம்',\n 'Email Address': 'மின்னஞ்சல் முகவரி',\n 'Date of Birth': 'பிறந்த தேதி',\n 'PAN Number': 'பான் எண்',\n 'Mobile Number': 'மொபைல் எண்',\n 'Name': 'பெயர்',\n 'Aadhar Number': 'ஆதார் எண்',\n 'Address': 'முகவரி',\n },\n hi: {\n 'Gender': 'लिंग',\n 'Email Address': 'ईमेल पता',\n 'Date of Birth': 'जन्म की तारीख',\n 'PAN Number': 'पैन नंबर',\n 'Mobile Number': 'मोबाइल नंबर',\n 'Name': 'नाम',\n 'Aadhar Number': 'आधार संख्या',\n 'Address': 'पता',\n },\n};\n\nconst translateDynamic = (text, i18n) => {\n if (dynamicTranslations[i18n.language] && dynamicTranslations[i18n.language][text]) {\n return dynamicTranslations[i18n.language][text];\n }\n return text;\n};\n\nexport default function CollapsibleDataSection({ title, items, isOpen, onToggle }) {\n const { i18n } = useTranslation();\n return (\n <div className=\"border-t border-gray-200\">\n <button\n type=\"button\"\n className=\"w-full flex justify-between items-center py-2 text-[1em] font-medium text-gray-700\"\n onClick={onToggle}\n >\n <span>{title} ({items.length})</span>\n <svg className={`w-4 h-4 transform transition-transform ${isOpen ? 'rotate-180' : ''}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" /></svg>\n </button>\n {isOpen && (\n <div className=\"py-1.5 flex flex-wrap gap-1.5\">\n {items.map((item) => (\n <div key={item.id} className=\"bg-white border border-gray-300 rounded-full px-3 py-1 text-[0.875em] text-gray-700\">\n {translateDynamic(item.name, i18n)}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport CollapsibleDataSection from './CollapsibleDataSection';\n\nconst dynamicTranslations = {\n ta: {\n 'User Authentication & Management': 'பயனர் அங்கீகாரம் மற்றும் மேலாண்மை',\n 'Account creation and access management': 'கணக்கு உருவாக்கம் மற்றும் அணுகல் மேலாண்மை',\n 'Notifications & Updates': 'அறிவிப்புகள் மற்றும் புதுப்பிப்புகள்',\n 'Transactional and service-related updates': 'பரிவர்த்தனை மற்றும் சேவை தொடர்பான புதுப்பிப்புகள்',\n },\n hi: {\n 'User Authentication & Management': 'उपयोगकर्ता प्रमाणीकरण और प्रबंधन',\n 'Account creation and access management': 'खाता निर्माण और पहुंच प्रबंधन',\n 'Notifications & Updates': 'सूचनाएं और अपडेट',\n 'Transactional and service-related updates': 'लेन-देन और सेवा-संबंधी अपडेट',\n },\n};\n\nconst translateDynamic = (text, i18n) => {\n if (dynamicTranslations[i18n.language] && dynamicTranslations[i18n.language][text]) {\n return dynamicTranslations[i18n.language][text];\n }\n return text;\n};\n\nexport default function ModernPurposeCard({ purpose, banner, onToggle, mandatoryLabel }) {\n const { t, i18n } = useTranslation();\n // Start with all sections collapsed\n const [openSection, setOpenSection] = useState(null);\n const isMandatory = purpose.is_mandatory;\n const isAccepted = purpose.consented === 'accepted' || purpose.consented === true;\n // Change \"expiry_type\" to \"Expires in\"\n const formatExpiryText = (text) => {\n if (!text) return t('until_withdrawn') || 'Until withdrawn';\n // Handle 'one_time' -> 'One-time'\n if (text === 'one_time') return 'One-time';\n // Handle '90days' -> '90 days'\n if (text.match(/^\\d+[a-zA-Z]+$/)) {\n const digits = text.match(/^\\d+/)[0];\n const unit = text.slice(digits.length);\n return `${digits} ${unit}`;\n }\n return text;\n };\n\n const expiryLabel = formatExpiryText(purpose.expiry_label || purpose.expiry_period);\n\n const handleToggleSection = (section) => {\n setOpenSection(openSection === section ? null : section);\n };\n\n // Use per-purpose entities from the purpose object\n const dataElements = purpose.data_elements || [];\n const processingActivities = purpose.processing_activities || [];\n const legalEntities = purpose.legal_entities || [];\n const tools = purpose.tools || [];\n\n // Combine legal entities and tools for Data Processors section\n const dataProcessors = [...legalEntities, ...tools];\n\n return (\n <div className=\"border border-gray-100 rounded-xl p-2 bg-white shadow-sm hover:shadow-md transition-shadow duration-200\">\n <div className=\"flex justify-between items-start gap-2\">\n <div className=\"flex-1 space-y-0.5\">\n <div>\n <h3 className=\"font-bold text-gray-900 text-[1em]\">{translateDynamic(purpose.name, i18n)}</h3>\n <p className=\"text-[0.875em] text-gray-500 mt-0.5 leading-snug\">{translateDynamic(purpose.description, i18n)}</p>\n </div>\n\n {/* Processing Activities as Pills - Moved here */}\n {processingActivities.length > 0 && (\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {processingActivities.map((activity, idx) => (\n <span key={idx} className=\"inline-flex items-center px-2.5 py-0.5 rounded-full text-[0.75em] font-medium bg-gray-100 text-gray-600 border border-gray-200\">\n {translateDynamic(activity.name || activity, i18n)}\n </span>\n ))}\n </div>\n )}\n </div>\n\n {/* Right Column: Actions & Meta Row */}\n <div className=\"flex flex-col items-end gap-1.5 shrink-0\">\n <div className=\"h-6 flex items-center\">\n {purpose.is_legitimate ? (\n <span className=\"text-[0.75em] uppercase font-bold text-blue-700 bg-blue-50/50 border border-blue-100 px-2 py-0.5 rounded-full tracking-wider whitespace-nowrap\">\n {t('legitimate_interest') || 'Legitimate Interest'}\n </span>\n ) : isMandatory ? (\n <span className=\"text-[0.75em] uppercase font-bold text-red-700 bg-red-50/50 border border-red-100 px-2 py-0.5 rounded-full tracking-wider whitespace-nowrap mandatory-badge\">\n {mandatoryLabel || t('mandatory')}\n </span>\n ) : (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[0.75em] font-medium text-gray-400 uppercase tracking-tighter\">{t('accept')}</span>\n <label className=\"switch scale-90 origin-right\">\n <input type=\"checkbox\" checked={isAccepted} onChange={(e) => onToggle(purpose.id, e.target.checked ? 'accepted' : 'declined')} />\n <span className=\"track\" />\n <span className=\"thumb\" />\n </label>\n </div>\n )}\n </div>\n\n <div className=\"flex flex-wrap flex-col items-end gap-0.5 min-w-[80px]\">\n <span className=\"text-[0.75em] text-gray-400 font-normal italic whitespace-nowrap\">\n Expires in {expiryLabel}\n </span>\n </div>\n </div>\n </div>\n\n {/* Sections - Collapsible */}\n <div className=\"mt-1 space-y-1\">\n {dataElements.length > 0 && (\n <CollapsibleDataSection\n title={t('data_elements')}\n items={dataElements}\n isOpen={openSection === 'data_elements'}\n onToggle={() => handleToggleSection('data_elements')}\n />\n )}\n\n {banner?.show_processors !== false && dataProcessors.length > 0 && (\n <CollapsibleDataSection\n title={t('data_processors') || 'Data Processors'}\n items={dataProcessors}\n isOpen={openSection === 'data_processors'}\n onToggle={() => handleToggleSection('data_processors')}\n />\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nfunction convertMarkdownLinks(text) {\n // Regular expression to match [text](url) pattern\n const markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n\n // Replace all markdown links with HTML anchor tags\n return text.replace(markdownLinkRegex, (match, linkText, url) => {\n // Add https:// if the URL doesn't have a protocol\n let fullUrl = url.trim();\n if (!fullUrl.match(/^[a-zA-Z]+:\\/\\//)) {\n // No protocol found, add https://\n fullUrl = `https://${fullUrl}`;\n }\n\n return `<a href=\"${fullUrl}\" class=\"text-purple-600 hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">${linkText}</a>`;\n });\n}\n\nexport default function ModernBannerFooter({ footerText, orgName }) {\n // Replace [Organization Name] placeholder with actual org name\n const processedText = (footerText || '').replace(/\\[Organization Name\\]/g, orgName);\n // Convert markdown links to HTML\n const htmlContent = convertMarkdownLinks(processedText);\n\n return (\n <div\n className=\"text-center text-[0.875em] text-blue-800 bg-blue-50/50 border border-blue-100 rounded-lg px-3 py-2.5 leading-normal shadow-sm italic mb-4 w-full\"\n dangerouslySetInnerHTML={{ __html: htmlContent }}\n />\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nexport default function ModernBannerActions({\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n actionButtonText,\n rejectAllText,\n rejectAllColor,\n acceptAllText,\n onlyNecessaryText,\n onlyNecessaryColor,\n savePreferencesColor,\n primaryColor,\n purposes = [],\n isBottomReached = false,\n isSplitLayout = false // New prop\n}) {\n const { t } = useTranslation();\n\n // Check if any optional purposes are accepted\n const anyOptionalAccepted = purposes\n .filter(p => !p.is_mandatory)\n .some(p => p.consented === 'accepted' || p.consented === true);\n\n // Check if there are any mandatory purposes\n const hasMandatoryPurposes = purposes.some(p => p.is_mandatory);\n\n // Use dynamic primary color or fallback to purple\n const primaryBg = primaryColor || '#7030bc';\n\n const disabledClasses = \"opacity-50 cursor-not-allowed\";\n const buttonBase = \"px-3 py-1.5 text-[0.8125em] font-bold rounded-lg transition-all duration-200 shadow-sm whitespace-nowrap\";\n\n if (isSplitLayout) {\n return (\n <div className=\"bg-gray-50/50 px-4 py-3 border-t border-gray-100\">\n {!isBottomReached && (\n <p className=\"text-[10px] text-gray-400 mb-2 text-center animate-pulse\">\n Please scroll to the bottom to enable actions\n </p>\n )}\n <div className=\"flex flex-col sm:flex-row justify-between items-center gap-3\">\n <button\n onClick={onAcceptMandatory}\n disabled={!isBottomReached}\n className={`${buttonBase} w-full sm:w-auto text-gray-700 bg-white border border-gray-300 hover:bg-gray-50 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {onlyNecessaryText || t('only_necessary') || 'Only Essential'}\n </button>\n\n <div className=\"flex flex-row gap-2 w-full sm:w-auto justify-end\">\n <button\n onClick={onAcceptSelected}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? (savePreferencesColor || '#f87171') : undefined }}\n className={`${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? `bg-gray-300 ${disabledClasses}` : ''}`}\n >\n {actionButtonText || t('save_preferences') || 'Save Preferences'}\n </button>\n\n <button\n onClick={onConsentAll}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? '#10b981' : undefined }}\n className={`${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? `bg-gray-300 ${disabledClasses}` : ''}`}\n >\n {acceptAllText || t('accept_all') || 'Accept All'}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"bg-gray-50/50 px-4 py-2.5 border-t border-gray-100\">\n {!isBottomReached && (\n <p className=\"text-[10px] text-gray-400 mb-2 text-center animate-pulse\">\n Please scroll to the bottom to enable actions\n </p>\n )}\n <div className=\"flex flex-col sm:flex-row justify-center gap-2 pb-1\">\n <div className=\"flex flex-row gap-2 w-full sm:w-auto\">\n <button\n onClick={onRejectAll}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? (rejectAllColor || '#dc2626') : undefined }}\n className={`${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? `bg-gray-300 ${disabledClasses}` : ''}`}\n >\n {rejectAllText || t('reject_all')}\n </button>\n\n <button\n onClick={onAcceptMandatory}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? (onlyNecessaryColor || '#f97316') : undefined }}\n className={`${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? `bg-gray-300 ${disabledClasses}` : ''}`}\n >\n {onlyNecessaryText || t('only_necessary') || 'Only Necessary'}\n </button>\n </div>\n\n <button\n onClick={onAcceptSelected}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? (savePreferencesColor || primaryBg) : undefined }}\n className={`${buttonBase} w-full sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? `bg-gray-300 ${disabledClasses}` : ''}`}\n >\n {actionButtonText || t('save_preferences') || 'Save My Preferences'}\n </button>\n </div>\n </div>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\nimport LanguageProvider from './LanguageProvider';\nimport ModernBannerHeader from './ModernBannerHeader';\nimport ModernPurposeCard from './ModernPurposeCard';\nimport ModernBannerFooter from './ModernBannerFooter';\nimport ModernBannerActions from './ModernBannerActions';\nfunction Banner({ banner, companyName, logoUrl, onChangePurpose, onRejectAll, onConsentAll, onAcceptSelected, onAcceptMandatory, primaryColor, secondaryColor }) {\n const [isBottomReached, setIsBottomReached] = useState(false);\n const scrollRef = useRef(null);\n\n // Use banner_settings from API if available, otherwise fall back to props\n const settings = banner?.banner_settings || {};\n const finalPrimaryColor = settings.primary_color || primaryColor || '#3b82f6';\n const finalSecondaryColor = settings.secondary_color || secondaryColor || '#555';\n const footerText = settings.footer_text || 'Review our [Privacy Policy] and [Transparency Centre], [DPO Details]. Use the [Rights Centre] anytime to withdraw consent, delete data, name a nominee, or raise a grievance.';\n const bannerTitle = settings.banner_title;\n const disclaimerText = settings.disclaimer_text;\n const actionButtonText = settings.action_button_text || 'I Consent';\n\n const handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n // 5px threshold for \"bottom\"\n if (scrollHeight - scrollTop <= clientHeight + 5) {\n setIsBottomReached(true);\n }\n };\n\n // Check if content is already visible without scrolling\n useEffect(() => {\n if (scrollRef.current) {\n const { scrollHeight, clientHeight } = scrollRef.current;\n if (scrollHeight <= clientHeight) {\n setIsBottomReached(true);\n }\n }\n }, [banner?.purposes]);\n\n const styleVars = {\n '--font-type': settings.font_type,\n '--font-size': settings.font_size,\n '--banner-primary-color': finalPrimaryColor,\n '--banner-secondary-color': finalSecondaryColor,\n fontFamily: settings.font_type || 'inherit',\n fontSize: settings.font_size || 'inherit',\n };\n\n return (\n <div className=\"bg-white rounded-2xl flex flex-col overflow-hidden text-left h-full\" style={styleVars}>\n <div className=\"flex-shrink-0 pt-3.5 pb-2 px-3 border-b border-gray-100 bg-gray-50/80\">\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logo_url}\n orgName={companyName}\n bannerTitle={bannerTitle}\n disclaimerText={disclaimerText}\n />\n </div>\n\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"flex-1 px-5 py-2.5 space-y-2.5 overflow-y-auto bg-white\"\n >\n {banner?.purposes?.map((p) => (\n <ModernPurposeCard\n key={p.id}\n purpose={p}\n banner={banner}\n onToggle={onChangePurpose}\n />\n ))}\n\n {banner?.purposes?.some(p => p.consented === 'declined' || p.consented === false) && settings.warning_message && (\n <div className=\"py-2 px-3 bg-amber-50/50 border border-amber-100 rounded-lg flex items-start gap-2.5 animate-in fade-in slide-in-from-top-1 duration-200\">\n <svg\n className=\"mt-0.5 flex-shrink-0 opacity-70\"\n width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#d97706\" strokeWidth=\"2.5\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n <p className=\"text-[0.75em] text-amber-800/80 leading-normal font-medium\">\n {settings.warning_message}\n </p>\n </div>\n )}\n </div>\n\n <div className=\"flex-shrink-0 border-t border-gray-100 bg-gray-50/80 px-4 py-1.5\">\n <ModernBannerFooter\n footerText={footerText}\n orgName={companyName}\n />\n <ModernBannerActions\n onRejectAll={onRejectAll}\n onConsentAll={onConsentAll}\n onAcceptSelected={onAcceptSelected}\n onAcceptMandatory={onAcceptMandatory}\n purposes={banner?.purposes || []}\n actionButtonText={actionButtonText}\n rejectAllText={settings.reject_all_text}\n rejectAllColor={settings.reject_all_color}\n acceptAllText={settings.accept_all_text}\n onlyNecessaryText={settings.only_necessary_text}\n onlyNecessaryColor={settings.only_necessary_color}\n savePreferencesColor={settings.save_preferences_color}\n primaryColor={finalPrimaryColor}\n isBottomReached={isBottomReached}\n isSplitLayout={banner?.banner_settings?.general_notice_template === 'preferences_modal'}\n />\n </div>\n </div>\n );\n}\n\nexport default function BannerUI(props) {\n return (\n <LanguageProvider>\n <Banner {...props} />\n </LanguageProvider>\n );\n}\n","import React, { useMemo } from 'react';\n\n/**\n * CookieBannerUI\n *\n * Simplified summary-first cookie consent UI.\n * Actions (Accept All, Reject All, Personalize) are delegated to the parent.\n */\nexport default function CookieBannerUI({\n banner,\n companyName,\n logoUrl,\n onConsentAll,\n onAcceptMandatory,\n onPersonalize,\n primaryColor,\n secondaryColor,\n layoutClass,\n footerText,\n}) {\n const processPlaceholder = (text) => (text || '').replace(/\\[Organization Name\\]/g, companyName || '');\n\n /**\n * Simple markdown link converter for [text](url)\n */\n const convertMarkdownLinks = (text) => {\n const markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n return text.replace(markdownLinkRegex, (match, linkText, url) => {\n let fullUrl = url.trim();\n if (!fullUrl.match(/^[a-zA-Z]+:\\/\\//)) {\n fullUrl = `https://${fullUrl}`;\n }\n return `<a href=\"${fullUrl}\" class=\"mcm-link\" target=\"_blank\" rel=\"noopener noreferrer\">${linkText}</a>`;\n });\n };\n\n const styleVars = {\n '--banner-primary-color': primaryColor || '#16a34a',\n '--banner-secondary-color': secondaryColor || '#0f172a',\n };\n\n // Build the dynamic footer content\n const dynamicFooter = useMemo(() => {\n if (!footerText) return null;\n const processed = processPlaceholder(footerText);\n const withLinks = convertMarkdownLinks(processed);\n\n return (\n <div\n className=\"mcm-cookie-summary-footer-links dynamic\"\n dangerouslySetInnerHTML={{ __html: withLinks }}\n />\n );\n }, [footerText, companyName]);\n\n return (\n <div className={`mcm-cookie-banner-ui ${layoutClass}`} style={styleVars}>\n <div className={`mcm-cookie-summary ${layoutClass}`}>\n <div className=\"mcm-cookie-summary-content\">\n <h2 className=\"mcm-cookie-summary-title\">\n {processPlaceholder(banner?.banner_settings?.banner_title || 'Cookie Consent')}\n </h2>\n <p className=\"mcm-cookie-summary-text\">\n {processPlaceholder(banner?.banner_settings?.disclaimer_text || 'We use cookies to improve your experience on our site.')}\n </p>\n </div>\n\n {layoutClass === 'floating-card' && <hr />}\n\n <div className=\"mcm-cookie-summary-actions\">\n <button\n type=\"button\"\n className=\"mcm-summary-btn primary\"\n style={{ backgroundColor: styleVars['--banner-primary-color'] }}\n onClick={onConsentAll}\n >\n Accept All\n </button>\n <button\n type=\"button\"\n className=\"mcm-summary-btn secondary\"\n onClick={onAcceptMandatory}\n >\n Accept Only Necessary\n </button>\n <button\n type=\"button\"\n className=\"mcm-summary-btn text\"\n onClick={onPersonalize}\n >\n Personalize Cookies\n </button>\n </div>\n\n {layoutClass === 'floating-card' && <hr />}\n\n {dynamicFooter}\n\n <div className={`mcm-powered-by ${layoutClass === 'bottom-bar' ? 'vertical' : ''}`}>\n Powered by <span className=\"mcm-brand\">truConsent</span>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport ModernBannerFooter from './ModernBannerFooter';\nimport ModernPurposeCard from './ModernPurposeCard';\n\nfunction PreferencesModalUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onClose,\n settings\n}) {\n // Use banner_settings for content if available\n const bannerSettings = banner?.banner_settings || settings || {};\n const primaryColor = bannerSettings.primary_color || '#3b82f6';\n\n const styleVars = {\n '--preferences-primary-color': primaryColor,\n fontFamily: bannerSettings.font_type || 'inherit',\n fontSize: bannerSettings.font_size || 'inherit',\n };\n\n const orgName = companyName || 'TruConsent';\n const modalTitle = (bannerSettings.banner_title || 'Cookie Preferences').replace(/\\[Organization Name\\]/g, orgName);\n const disclaimerText = (bannerSettings.disclaimer_text || 'We use cookies to enhance your browsing experience and analyze our traffic. Please choose which types of cookies you want to allow. You can change these settings at any time.').replace(/\\[Organization Name\\]/g, orgName);\n const footerText = bannerSettings.footer_text;\n\n // Group purposes or use as-is\n const purposes = banner?.purposes || [];\n\n return (\n <div className=\"preferences-modal-content\" style={styleVars}>\n {/* Header */}\n <div className=\"preferences-header\">\n <div className=\"preferences-title-wrapper\">\n {logoUrl && (\n <img src={logoUrl} alt=\"Logo\" className=\"preferences-logo\" />\n )}\n <h2 className=\"preferences-title\">{modalTitle}</h2>\n </div>\n <button\n type=\"button\"\n className=\"preferences-close-btn\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Intro Text / Disclaimer */}\n <div className=\"preferences-intro\">\n {disclaimerText}\n </div>\n\n <div className=\"preferences-purpose-list\">\n {purposes.map((purpose) => (\n <div key={purpose.id} className=\"preferences-purpose-card-wrapper\">\n <ModernPurposeCard\n purpose={purpose}\n banner={banner}\n onToggle={onChangePurpose}\n mandatoryLabel=\"Always Active\"\n />\n </div>\n ))}\n </div>\n\n {/* Actions & Footer */}\n <div className=\"preferences-footer-container\">\n {footerText && (\n <div className=\"preferences-footer-text\">\n <ModernBannerFooter\n footerText={footerText}\n orgName={companyName}\n />\n </div>\n )}\n\n <div className=\"preferences-actions\">\n <button\n type=\"button\"\n className=\"preferences-btn preferences-btn-essential\"\n onClick={onRejectAll}\n >\n Only Essential\n </button>\n\n <div className=\"preferences-actions-right\">\n <button\n type=\"button\"\n className=\"preferences-btn preferences-btn-save\"\n onClick={onAcceptSelected}\n >\n Save Preferences\n </button>\n\n <button\n type=\"button\"\n className=\"preferences-btn preferences-btn-accept\"\n onClick={onConsentAll}\n >\n Accept All\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default PreferencesModalUI;\n","\nimport React from 'react';\n\nexport default function HCaseWarningPopup({\n settings,\n onProceed,\n onBack,\n primaryColor\n}) {\n const strategy = settings.h_case_logging_strategy || 'soft_first';\n const isHard = strategy === 'hard_immediate';\n\n const popupMessage = settings.h_case_warning_message || 'Important: You have not provided consent for one or more required items. Please acknowledge this to continue.';\n const proceedText = settings.h_case_proceed_button_text || (isHard ? 'OK' : 'Proceed Anyway');\n const backText = settings.h_case_back_button_text || 'Go Back';\n\n return (\n <div className=\"mcm-hcase-overlay\">\n <div className=\"mcm-hcase-container\">\n <div className=\"mcm-hcase-icon\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#f59e0b\" strokeWidth=\"2\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n </div>\n <h3 className=\"mcm-hcase-title\">Consent Required</h3>\n <p className=\"mcm-hcase-message\">{popupMessage}</p>\n\n <div className=\"mcm-hcase-actions\">\n {!isHard && (\n <button\n className=\"mcm-hcase-btn back\"\n onClick={onBack}\n style={{ backgroundColor: settings.h_case_back_button_color || '#f3f4f6' }}\n >\n {backText}\n </button>\n )}\n <button\n className=\"mcm-hcase-btn proceed\"\n style={{ backgroundColor: settings.h_case_proceed_button_color || primaryColor || '#3b82f6' }}\n onClick={onProceed}\n >\n {proceedText}\n </button>\n </div>\n </div>\n <style>{`\n .mcm-hcase-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n animation: mcmFadeIn 0.2s ease-out;\n }\n .mcm-hcase-container {\n background: white;\n border-radius: 16px;\n padding: 32px;\n max-width: 440px;\n width: 90%;\n text-align: center;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n }\n .mcm-hcase-icon {\n margin-bottom: 16px;\n display: flex;\n justify-content: center;\n }\n .mcm-hcase-title {\n font-size: 1.25rem;\n font-weight: 700;\n color: #111827;\n margin-bottom: 12px;\n }\n .mcm-hcase-message {\n font-size: 0.95rem;\n color: #4b5563;\n line-height: 1.5;\n margin-bottom: 24px;\n }\n .mcm-hcase-actions {\n display: flex;\n gap: 12px;\n justify-content: center;\n }\n .mcm-hcase-btn {\n padding: 10px 24px;\n border-radius: 8px;\n font-size: 0.9rem;\n font-weight: 600;\n border: none;\n cursor: pointer;\n transition: all 0.2s;\n }\n .mcm-hcase-btn.back {\n background: #f3f4f6;\n color: #374151;\n }\n .mcm-hcase-btn.back:hover {\n background: #e5e7eb;\n }\n .mcm-hcase-btn.proceed {\n color: white;\n }\n .mcm-hcase-btn.proceed:hover {\n opacity: 0.9;\n }\n @keyframes mcmFadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n `}</style>\n </div>\n );\n}\n","// TruConsentModal.jsx\nimport React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport './MarsConsentModal.css';\nimport BannerUI from './BannerUI';\nimport CookieBannerUI from './CookieBannerUI';\nimport PreferencesModalUI from './PreferencesModalUI';\n\nfunction Chevron({ open }) {\n return (\n <svg\n className={`chevron ${open ? 'open' : ''}`}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M6 9l6 6 6-6\"\n fill=\"none\"\n stroke=\"#333\"\n strokeWidth=\"2\"\n />\n </svg>\n );\n}\n\nfunction ConsentCard({ banner, purpose, onChangePurpose }) {\n // controlled checkbox bound to purpose.status === 'accepted'\n const isAccepted = purpose.consented === 'accepted';\n\n const [openData, setOpenData] = useState(false);\n const [openLegal, setOpenLegal] = useState(false);\n const [openTools, setOpenTools] = useState(false);\n\n const handleToggle = (e) => {\n const newStatus = e.target.checked ? 'accepted' : 'declined';\n onChangePurpose(purpose.id, newStatus);\n };\n\n return (\n <div className=\"mcm-card\">\n <div className=\"mcm-card-header\">\n <div>\n <h2>{purpose.name}</h2>\n <p className=\"mcm-purpose-desc\">{purpose.description}</p>\n </div>\n <div className=\"mcm-card-actions\">\n {purpose.is_mandatory && (\n <span className=\"badge mandatory\">Mandatory</span>\n )}\n {purpose.is_legitimate && (\n <span className=\"badge legitimate\" style={{ backgroundColor: '#eff6ff', color: '#1d4ed8', border: '1px solid #dbeafe' }}>Legitimate Interest</span>\n )}\n <span className=\"badge expiry\">\n Expiry: {purpose.expiry_label || purpose.expiry_period.slice(0, 6)}\n </span>\n {!purpose.is_legitimate && (\n <>\n <label className=\"switch\">\n <input\n type=\"checkbox\"\n checked={isAccepted}\n onChange={handleToggle}\n />\n <span className=\"track\" />\n <span className=\"thumb\" />\n </label>\n <span className=\"toggle-label\">\n {isAccepted ? 'Accepted' : 'Accept'}\n </span>\n </>\n )}\n </div>\n </div>\n\n <div className=\"accordion\">\n <button\n className=\"accordion-btn\"\n onClick={() => setOpenData((o) => !o)}\n >\n Data Elements <Chevron open={openData} />\n </button>\n {openData && (\n <div className=\"panel\">\n {banner.data_elements.map((el) => (\n <span key={el.id} className=\"pill\">\n {el.name}\n </span>\n ))}\n </div>\n )}\n\n <button\n className=\"accordion-btn\"\n onClick={() => setOpenLegal((o) => !o)}\n >\n Legal Entities <Chevron open={openLegal} />\n </button>\n {openLegal && (\n <div className=\"panel\">\n {banner.legal_entities.map((le) => (\n <span key={le.id} className=\"pill\">\n {le.name}\n </span>\n ))}\n </div>\n )}\n\n <button\n className=\"accordion-btn\"\n onClick={() => setOpenTools((o) => !o)}\n >\n Tools <Chevron open={openTools} />\n </button>\n {openTools && (\n <div className=\"panel\">\n {banner.tools.map((tool) => (\n <span key={tool.id} className=\"pill\">\n {tool.name}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nimport HCaseWarningPopup from './HCaseWarningPopup';\n\nexport default function TruConsentModal(props) {\n const {\n apiKey,\n organizationId,\n bannerId,\n userId,\n orgId, // Deprecated: use organizationId instead\n apiBaseUrl = 'https://rdwcymn5poo6zbzg5fa5xzjsqy0zzcpm.lambda-url.ap-south-1.on.aws/banners',\n logoUrl,\n companyName = 'Mars Company',\n onClose,\n // Note: environment is derived from organizationId suffix and does not need to be explicitly provided\n // organizationId format: \"client-dev\", \"client-staging\", or \"client\" for production\n } = props;\n\n const [banner, setBanner] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [actionLoading, setActionLoading] = useState(false);\n const [error, setError] = useState('');\n const [visible, setVisible] = useState(true);\n const [hCaseData, setHCaseData] = useState({ show: false, action: null });\n const [showFullNotice, setShowFullNotice] = useState(false);\n\n // Track if any final action (accepted/declined/no_action) has been recorded\n const actionTakenRef = useRef(false);\n const actionRunningRef = useRef(false);\n const closeButtonClickedRef = useRef(false);\n\n // Use organizationId or fall back to deprecated orgId\n const effectiveOrgId = organizationId || orgId;\n\n // Derive company / logo from banner.organization when available, falling back\n // to explicit props so existing integrations keep working.\n const resolvedCompanyName =\n (banner && (banner.organization_name || (banner.organization && banner.organization.name))) ||\n companyName;\n\n const resolvedLogoUrl =\n logoUrl || (banner && banner.organization && banner.organization.logo_url);\n\n // Fetch banner once\n useEffect(() => {\n if (!bannerId) {\n setError('Missing bannerId');\n setIsLoading(false);\n return;\n }\n if (!apiKey) {\n setError('Missing apiKey - API key is required for authentication');\n setIsLoading(false);\n return;\n }\n if (!effectiveOrgId) {\n setError('Missing organizationId - Organization ID is required for authentication');\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n const fetchUrl = userId ? `${apiBaseUrl}/${bannerId}?userId=${encodeURIComponent(userId)}` : `${apiBaseUrl}/${bannerId}`;\n fetch(fetchUrl, {\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': apiKey,\n 'X-Org-Id': effectiveOrgId,\n },\n })\n .then((res) => {\n if (res.status === 401) {\n throw new Error('Authentication required - Invalid or missing API key');\n }\n if (res.status === 403) {\n throw new Error('Access forbidden - API key does not have permission to access this banner');\n }\n if (!res.ok) throw new Error('Failed to load banner');\n return res.json();\n })\n .then((data) => {\n // data may include consent_type and cookie_config, which we\n // keep on the banner object so the UI can branch for\n // cookie-specific consent flows.\n\n // AUTO-HIDE if user is already fully consented (Progressive Consent)\n if (data.fully_consented || (!data.purposes || data.purposes.length === 0)) {\n setVisible(false);\n if (onClose) onClose('no_action');\n return;\n }\n\n // Apply default_selection logic from banner_settings\n const defaultSelection = data.banner_settings?.default_selection || 'mandatory_only';\n\n // Map purposes and set initial consented state based on default_selection\n const initializedPurposes = (data.purposes || []).map(purpose => {\n let initialConsent = 'declined'; // Default fallback\n\n if (purpose.is_legitimate) {\n // Legitimate interest purposes are active by default and cannot be toggled off\n initialConsent = 'accepted';\n } else if (defaultSelection === 'all') {\n // Pre-select all purposes (both mandatory and optional)\n initialConsent = 'accepted';\n } else if (defaultSelection === 'mandatory_only') {\n // Pre-select only mandatory purposes\n initialConsent = purpose.is_mandatory ? 'accepted' : 'declined';\n } else if (defaultSelection === 'none') {\n // All purposes start as declined (user must opt-in manually)\n initialConsent = 'declined';\n }\n\n return {\n ...purpose,\n consented: initialConsent\n };\n });\n\n setBanner({\n ...data,\n purposes: initializedPurposes\n });\n })\n\n .catch((e) => setError(e.message))\n .finally(() => setIsLoading(false));\n }, [bannerId, apiKey, effectiveOrgId, apiBaseUrl]);\n\n\n\n // close & unmount\n const close = (type) => {\n setVisible(false);\n if (onClose) onClose(type);\n };\n\n // update one purpose status in banner state\n const handlePurposeChange = (purposeId, newStatus) => {\n setBanner((b) => ({\n ...b,\n purposes: b.purposes.map((p) =>\n p.id === purposeId ? { ...p, consented: newStatus } : p\n ),\n }));\n };\n\n // Generate a unique Request ID on mount to identify this specific \"consent attempt\"\n const [requestId] = useState(() => crypto.randomUUID());\n\n // Helper to send a log event to the backend\n const sendLogEvent = async (action, purposes, metadata) => {\n if (!banner || actionRunningRef.current) return;\n\n // If it's a final intentional action (approved/declined), mark as taken\n if (action !== 'no_action') {\n actionTakenRef.current = true;\n }\n\n actionRunningRef.current = true;\n try {\n await fetch(\n `${apiBaseUrl}/${banner.collection_point}/consent`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': apiKey,\n 'X-Org-Id': effectiveOrgId,\n },\n keepalive: true, // Critical for cleanup/page hide events\n body: JSON.stringify({\n userId,\n purposes: purposes || banner.purposes,\n action,\n requestId,\n metadata: metadata || {},\n }),\n }\n );\n } catch (e) {\n console.error('Failed to log consent event:', e);\n throw e;\n } finally {\n actionRunningRef.current = false;\n }\n };\n\n // cleanup effect to record \"no_action\" ONLY if close button was clicked\n useEffect(() => {\n return () => {\n // Only send \"no_action\" if the close button was explicitly clicked\n if (closeButtonClickedRef.current && !actionTakenRef.current && banner && !actionRunningRef.current) {\n sendLogEvent('no_action');\n }\n };\n }, [banner]); // Execute when banner is loaded to ensure we have context\n\n const checkHCaseIntercept = (action, purposes) => {\n if (!banner) return false;\n\n // Check if any mandatory purpose is declined in the payload\n const activePurposes = purposes || banner.purposes;\n const hasDeclinedMandatory = activePurposes.some(\n p => p.is_mandatory && (p.consented === 'declined' || p.consented === false)\n );\n\n if (hasDeclinedMandatory && !hCaseData.show) {\n // Log the intercept event\n sendLogEvent('no_action', null, {\n h_case_event: 'triggered',\n intercepted_action: action\n });\n setHCaseData({ show: true, action });\n return true;\n }\n return false;\n };\n\n // final accept/reject all\n const handleAction = async (action, metadata = {}) => {\n if (!banner) return;\n\n // Intercept if mandatory declined\n if (action === 'declined') {\n if (checkHCaseIntercept('declined')) return;\n }\n\n setActionLoading(true);\n setError('');\n\n try {\n // Add button_used metadata\n const enhancedMetadata = {\n ...metadata,\n button_used: action === 'approved' ? 'accept_all' : 'reject_all'\n };\n\n await sendLogEvent(action, null, enhancedMetadata);\n close(action);\n } catch (e) {\n setError('Something went wrong. Please try again.');\n } finally {\n setActionLoading(false);\n setHCaseData({ show: false, action: null });\n }\n };\n\n // handle accept selected (partial consent with current selections)\n const handleAcceptSelected = async (metadata = {}) => {\n if (!banner) return;\n\n // Intercept if any mandatory purposes are turned OFF\n const hasDeclinedMandatory = banner.purposes.some(\n p => p.is_mandatory && (p.consented === 'declined' || p.consented === false)\n );\n\n if (hasDeclinedMandatory && checkHCaseIntercept('accept_selected')) return;\n\n setActionLoading(true);\n setError('');\n\n try {\n // In H-Case mode, we keep their choices even if mandatory is declined\n // (The intercept popup ensures they know what they are doing)\n\n // Add button_used metadata (default to save_preferences if not already set by H-Case)\n const enhancedMetadata = {\n button_used: 'save_preferences',\n ...metadata\n };\n\n // Determine action based on whether ALL purposes are accepted\n const allAccepted = banner.purposes.every(\n p => p.consented === 'accepted' || p.consented === true\n );\n const action = allAccepted ? 'approved' : 'partial_consent';\n\n await sendLogEvent(action, null, enhancedMetadata);\n close(action);\n } catch (e) {\n setError('Something went wrong. Please try again.');\n } finally {\n setActionLoading(false);\n setHCaseData({ show: false, action: null });\n }\n };\n\n // handle accept ONLY mandatory (ignore optional selections)\n const handleAcceptMandatory = async () => {\n if (!banner) return;\n\n setActionLoading(true);\n setError('');\n\n try {\n // Construct payload where ONLY mandatory are accepted\n const mandatoryPurposes = banner.purposes.map(p => ({\n ...p,\n consented: p.is_mandatory ? 'accepted' : 'declined'\n }));\n\n // Log with specific button_used metadata\n const metadata = {\n button_used: 'only_necessary'\n };\n\n // Determine action: if there are optional purposes, \"Only Necessary\" is partial consent\n const hasOptional = banner.purposes.some(p => !p.is_mandatory);\n const action = hasOptional ? 'partial_consent' : 'approved';\n\n await sendLogEvent(action, mandatoryPurposes, metadata);\n close(action);\n } catch (e) {\n setError('Something went wrong. Please try again.');\n } finally {\n setActionLoading(false);\n }\n };\n\n const handleCloseClick = () => {\n // Mark that the close button was explicitly clicked\n closeButtonClickedRef.current = true;\n\n if (!actionTakenRef.current) {\n sendLogEvent('no_action');\n actionTakenRef.current = true;\n }\n close('no_action');\n };\n\n if (!visible) return null;\n\n // Derive font settings for modal wrapper inheritance\n const settings = banner?.banner_settings || {};\n const styleVars = {\n '--font-type': settings.font_type || 'Verdana',\n '--font-size': settings.font_size || '14px',\n '--banner-primary-color': settings.primary_color || '#3b82f6',\n '--banner-secondary-color': settings.secondary_color || '#555',\n fontFamily: settings.font_type || 'inherit',\n fontSize: settings.font_size || 'inherit',\n };\n\n // Determine which template class to apply\n const isCookieConsent = banner?.consent_type === 'cookie_consent';\n const templateClass = (isCookieConsent && !showFullNotice)\n ? (settings.cookie_notice_template || 'floating_card')\n : (settings.general_notice_template || 'center_modal');\n\n const layoutClass = templateClass.replace('_', '-'); // e.g., floating_card -> floating-card\n\n // loading spinner\n if (isLoading) {\n return ReactDOM.createPortal(\n <div className=\"mcm-overlay\">\n <div className=\"mcm-spinner\" />\n </div>,\n document.body\n );\n }\n\n return ReactDOM.createPortal(\n <div className={`mcm-overlay ${layoutClass}`} style={styleVars}>\n <div className={`mcm-wrapper ${layoutClass}`}>\n <button\n className=\"mcm-close-btn\"\n onClick={handleCloseClick}\n aria-label=\"Close consent banner\"\n >\n &times;\n </button>\n <div\n className=\"mcm-container\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {error && (\n <div className=\"mcm-error\" role=\"alert\">\n {error}\n </div>\n )}\n\n {banner && (\n (banner.consent_type === 'cookie_consent' && !showFullNotice) ? (\n <CookieBannerUI\n banner={banner}\n companyName={resolvedCompanyName}\n logoUrl={resolvedLogoUrl}\n onAcceptMandatory={() => handleAcceptMandatory()}\n onConsentAll={() => handleAction('approved')}\n onPersonalize={() => setShowFullNotice(true)}\n primaryColor={settings.primary_color}\n secondaryColor={settings.secondary_color}\n layoutClass={layoutClass}\n footerText={settings.footer_text}\n />\n ) : (\n layoutClass === 'preferences-modal' ? (\n <PreferencesModalUI\n banner={banner}\n companyName={resolvedCompanyName}\n logoUrl={resolvedLogoUrl}\n onChangePurpose={handlePurposeChange}\n onRejectAll={() => handleAcceptMandatory()}\n onConsentAll={() => handleAction('approved')}\n onAcceptSelected={() => handleAcceptSelected()}\n onClose={onClose}\n settings={settings}\n />\n ) : (\n <BannerUI\n banner={banner}\n companyName={resolvedCompanyName}\n logoUrl={resolvedLogoUrl}\n onChangePurpose={handlePurposeChange}\n onRejectAll={() => handleAction('declined')}\n onConsentAll={() => handleAction('approved')}\n onAcceptSelected={() => handleAcceptSelected()}\n onAcceptMandatory={() => handleAcceptMandatory()}\n />\n )\n )\n )}\n {hCaseData.show && (\n <HCaseWarningPopup\n settings={banner?.banner_settings || {}}\n onProceed={() => {\n const strategy = banner?.banner_settings?.h_case_logging_strategy || 'soft_first';\n\n // Hard Mode: Proceed button (\"OK\") strictly closes popup, NO submission\n if (strategy === 'hard_immediate') {\n sendLogEvent('no_action', null, {\n h_case_event: 'closed',\n button_clicked: 'ok'\n });\n setHCaseData({ show: false, action: null });\n return;\n }\n\n // Soft Mode: Proceed button (\"Proceed Anyway\") submits with metadata\n const metadata = {\n h_case_warning_shown: true,\n h_case_acknowledged: true,\n button_used: 'h_case_proceed'\n };\n\n if (hCaseData.action === 'declined') {\n handleAction('declined', metadata);\n } else {\n handleAcceptSelected(metadata);\n }\n }}\n onBack={() => {\n sendLogEvent('no_action', null, {\n h_case_event: 'closed',\n button_clicked: 'back'\n });\n setHCaseData({ show: false, action: null });\n }}\n primaryColor={banner?.banner_settings?.primary_color}\n />\n )}\n </div>\n </div>\n </div>,\n document.body\n );\n}\n","\nimport React, { useState, useEffect } from 'react';\nimport {\n Mail,\n Clock,\n Info,\n X,\n CheckCircle2,\n User,\n} from 'lucide-react';\nimport './RightCenter.css';\n\nexport default function RightCenter({ userId, apiKey, organizationId, apiBaseUrl }) {\n\n // Use provided apiBaseUrl or fallback to AWS Lambda\n const baseUrl = apiBaseUrl || 'https://rdwcymn5poo6zbzg5fa5xzjsqy0zzcpm.lambda-url.ap-south-1.on.aws/banners';\n\n const tabs = [\n 'Consent',\n 'Rights',\n 'Transparency',\n 'DPO',\n 'Nominee',\n 'Grievance',\n ];\n const [activeTab, setActiveTab] = useState('Consent');\n\n // auth headers for backend (tenant-aware)\n const authHeaders = {};\n if (apiKey) authHeaders['X-API-Key'] = apiKey;\n if (organizationId) authHeaders['X-Org-Id'] = organizationId;\n\n // --- DPO Info ---\n const [dpoInfo, setDpoInfo] = useState(null);\n\n // --- Nominees ---\n const [nominees, setNominees] = useState([]);\n const [editing, setEditing] = useState(false);\n const [nomineeForm, setNomineeForm] = useState({\n nominee_name: '',\n relationship: '',\n nominee_email: '',\n nominee_mobile: '',\n purpose_of_appointment: '',\n });\n\n const nominee = nominees[0] || null;\n\n // --- Grievance Tickets ---\n const [tickets, setTickets] = useState([]);\n const [showGrievanceForm, setShowGrievanceForm] = useState(false);\n const [grievanceForm, setGrievanceForm] = useState({\n subject: '',\n category: '',\n description: '',\n });\n\n // Fetch once on mount\n useEffect(() => {\n // DPO\n fetch(`${baseUrl}/dpo_information`, { headers: authHeaders })\n .then((r) => r.json())\n .then(setDpoInfo)\n .catch(console.error);\n\n // Nominees\n fetch(`${baseUrl}/user_nominees/user/${userId}`, { headers: authHeaders })\n .then((r) => r.json())\n .then(setNominees)\n .catch(console.error);\n\n // Grievances\n fetch(`${baseUrl}/grievance_tickets/user/${userId}`, { headers: authHeaders })\n .then((r) => r.json())\n .then(setTickets)\n .catch(console.error);\n }, [userId]);\n\n // ------ Handlers ------\n\n // Submit nominee\n // const handleNomineeSubmit = (e) => {\n // e.preventDefault();\n // const payload = {\n // client_user_id: userId,\n // nominee_name: nomineeForm.name,\n // relationship: nomineeForm.relationship,\n // nominee_email: nomineeForm.email,\n // nominee_mobile: nomineeForm.mobile,\n // purpose_of_appointment: nomineeForm.purpose,\n // };\n // fetch(`${baseUrl}/user_nominees`, {\n // method: 'POST',\n // headers: { 'Content-Type': 'application/json' },\n // body: JSON.stringify(payload),\n // })\n // .then((r) => r.json())\n // .then((n) => {\n // setNominees((prev) => [n, ...prev]);\n // setNomineeForm({\n // name: '',\n // relationship: '',\n // email: '',\n // mobile: '',\n // purpose: '',\n // });\n // })\n // .catch(console.error);\n // };\n\n const handleNomineeSubmit = e => {\n e.preventDefault();\n const payload = { user_id: userId, ...nomineeForm };\n\n const url = nominee && editing\n ? `${baseUrl}/user_nominees/${nominee.id}`\n : `${baseUrl}/user_nominees`;\n const method = nominee && editing ? 'PUT' : 'POST';\n\n fetch(url, {\n method,\n headers: { 'Content-Type': 'application/json', ...authHeaders },\n body: JSON.stringify(payload),\n })\n .then(r => r.json())\n .then(n => {\n setNominees([n]);\n setEditing(false);\n })\n .catch(console.error);\n };\n\n const handleDeleteNominee = () => {\n if (!nominee) return;\n fetch(`${baseUrl}/user_nominees/${nominee.id}`, { method: 'DELETE', headers: authHeaders })\n .then(() => setNominees([]))\n .catch(console.error);\n };\n\n // Submit grievance\n const handleGrievanceSubmit = (e) => {\n e.preventDefault();\n const payload = {\n client_user_id: userId,\n subject: grievanceForm.subject,\n category: grievanceForm.category,\n description: grievanceForm.description,\n };\n fetch(`${baseUrl}/grievance_tickets`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...authHeaders },\n body: JSON.stringify(payload),\n })\n .then((r) => r.json())\n .then((t) => {\n setTickets((prev) => [t, ...prev]);\n setShowGrievanceForm(false);\n setGrievanceForm({ subject: '', category: '', description: '' });\n })\n .catch(console.error);\n };\n\n\n // Consent tab state\n const [consents, setConsents] = useState([]);\n const [consentsLoading, setConsentsLoading] = useState(true);\n const [dirty, setDirty] = useState(false);\n const [modalData, setModalData] = useState(null);\n const [showSaveModal, setShowSaveModal] = useState(false);\n const [consentGroups, setConsentGroups] = useState([]);\n const [initialConsentGroups, setInitialConsentGroups] = useState([]);\n\n // Rights / deletion modal state\n const [showDeleteModal, setShowDeleteModal] = useState(false);\n const [deleteConfirmed, setDeleteConfirmed] = useState(false);\n\n // Grievance tab state\n const [showForm, setShowForm] = useState(false);\n\n const normalizeStatus = (val) => {\n if (val === 'accepted' || val === 'declined') return val;\n if (val === 'approved') return 'accepted';\n if (val === 'rejected') return 'declined';\n if (typeof val === 'boolean') return val ? 'accepted' : 'declined';\n if (typeof val === 'string') {\n const v = val.toLowerCase();\n if (v === 'yes' || v === 'true') return 'accepted';\n if (v === 'no' || v === 'false') return 'declined';\n }\n return val; // could be 'pending' or undefined\n };\n\n // Helper to map API records to flat list items\n const mapRecordsToConsents = (records) =>\n records.flatMap((record) =>\n (record.purposes || []).map((purpose) => ({\n id: purpose.id,\n title: purpose.name,\n name: purpose.name,\n description: purpose.description,\n expiry: purpose.expiry_period,\n collectionPoint: record.title,\n collectionId: record.collection_point,\n type: purpose.is_mandatory ? 'Mandatory' : 'Optional',\n dataElements: (record.data_elements || []).map((el) => ({\n label: el.name,\n description: el.description,\n })),\n shownToPrincipal: !!record.shown_to_principal,\n consented: purpose.consented,\n }))\n );\n\n // Fetch and merge user overlays with all banners; filter to active\n const fetchUserConsents = async () => {\n setConsentsLoading(true);\n try {\n const [userRes, allRes] = await Promise.all([\n fetch(`${baseUrl}/user/${userId}`, { headers: authHeaders }),\n fetch(`${baseUrl}`, { headers: authHeaders }),\n ]);\n const [userRecords, allBanners] = await Promise.all([\n userRes.json(),\n allRes.json(),\n ]);\n\n const userByCp = new Map();\n (Array.isArray(userRecords) ? userRecords : []).forEach((cp) => {\n userByCp.set(cp.collection_point, cp);\n });\n\n const merged = (Array.isArray(allBanners) ? allBanners : [])\n .map((cp) => {\n const userCp = userByCp.get(cp.collection_point);\n const shown_to_principal = !!userCp?.shown_to_principal;\n // only keep explicit statuses from user (accepted/declined). Ignore 'pending'.\n const userPurposeStatus = new Map(\n (userCp?.purposes || [])\n .map((p) => ({ id: p.id, consented: normalizeStatus(p.consented) }))\n .filter((p) => p.consented === 'accepted' || p.consented === 'declined')\n .map((p) => [p.id, p.consented])\n );\n const purposes = (cp.purposes || []).map((p) => {\n const hasUser = userPurposeStatus.has(p.id);\n let status;\n if (hasUser) {\n status = userPurposeStatus.get(p.id);\n } else if (shown_to_principal) {\n // If the collection point was shown and user has no explicit status logged for this purpose,\n // treat it as accepted (implicit approval at time of show).\n status = 'accepted';\n } else {\n status = normalizeStatus(p.consented) ?? 'declined';\n }\n return { ...p, consented: status };\n });\n return { ...cp, purposes, shown_to_principal };\n });\n\n const items = mapRecordsToConsents(merged);\n setConsents(items);\n setConsentGroups(merged);\n setInitialConsentGroups(JSON.parse(JSON.stringify(merged)));\n } catch (e) {\n console.error(e);\n } finally {\n setConsentsLoading(false);\n }\n };\n\n useEffect(() => {\n fetchUserConsents();\n }, [userId]);\n\n // Toggle individual consent scoped to a specific collection point\n const handleToggle = (consentId, collectionId) => {\n // update flat list\n setConsents((prev) =>\n prev.map((c) =>\n c.id === consentId && c.collectionId === collectionId\n ? { ...c, consented: c.consented === 'accepted' ? 'declined' : 'accepted' }\n : c\n )\n );\n // update grouped list\n setConsentGroups((prev) =>\n prev.map((cp) => (\n cp.collection_point === collectionId\n ? {\n ...cp,\n purposes: (cp.purposes || []).map((p) =>\n p.id === consentId\n ? { ...p, consented: p.consented === 'accepted' ? 'declined' : 'accepted' }\n : p\n ),\n }\n : cp\n ))\n );\n setDirty(true);\n };\n\n // Save all changed consents (grouped per collection point)\n const handleSave = async () => {\n try {\n // Build initial state lookup per collection\n const initialStateByCollection = new Map();\n initialConsentGroups.forEach((cp) => {\n const purposeMap = new Map();\n (cp.purposes || []).forEach((p) => {\n purposeMap.set(p.id, p.consented);\n });\n initialStateByCollection.set(cp.collection_point, purposeMap);\n });\n\n // Group current consents by collection and track changes\n const byCollection = {};\n const changedByCollection = {};\n\n consents.forEach((c) => {\n if (!byCollection[c.collectionId]) {\n byCollection[c.collectionId] = [];\n changedByCollection[c.collectionId] = [];\n }\n byCollection[c.collectionId].push(c);\n\n const collectionInitialState = initialStateByCollection.get(c.collectionId);\n const initialStatus = collectionInitialState?.get(c.id);\n const safeInitial = initialStatus || 'declined';\n\n if (safeInitial !== c.consented) {\n changedByCollection[c.collectionId].push(c.id);\n }\n });\n\n // POST only collections that have changes\n await Promise.all(\n Object.entries(byCollection)\n .filter(([collectionId]) => changedByCollection[collectionId]?.length > 0)\n .map(([collectionId, list]) => {\n const changedIds = new Set(changedByCollection[collectionId] || []);\n const collectionInitialState = initialStateByCollection.get(collectionId);\n\n // Only include purposes that have actually changed\n const purposesPayload = list\n .filter((p) => changedIds.has(p.id))\n .map((p) => {\n const initialStatus = collectionInitialState?.get(p.id) || 'declined';\n return {\n id: p.id,\n name: p.name,\n consented: p.consented,\n initialStatus // Track initial state for action determination\n };\n });\n\n // Determine action based on state transitions\n // Priority: revoked > approved > declined\n const hasRevocation = purposesPayload.some(\n (p) => p.initialStatus === 'accepted' && p.consented === 'declined'\n );\n const hasApproval = purposesPayload.some(\n (p) => p.consented === 'accepted'\n );\n\n const action = hasRevocation ? 'revoked' : (hasApproval ? 'approved' : 'declined');\n\n // Clean up initialStatus before sending to backend\n const payload = {\n userId,\n purposes: purposesPayload.map(({ initialStatus, ...rest }) => rest),\n action\n };\n\n if (changedByCollection[collectionId]?.length > 0) {\n payload.changedPurposes = changedByCollection[collectionId];\n }\n\n return fetch(`${baseUrl}/${collectionId}/consent`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...authHeaders },\n body: JSON.stringify(payload),\n }).then((r) => {\n if (!r.ok) throw new Error('Failed to save consent');\n });\n })\n );\n\n setDirty(false);\n setShowSaveModal(true);\n await fetchUserConsents();\n } catch (e) {\n console.error(e);\n }\n };\n\n // Handle data deletion request\n const handleDeleteRequest = () => {\n setDeleteConfirmed(true);\n setTimeout(() => {\n setShowDeleteModal(false);\n }, 1500);\n };\n\n // Submit a new grievance ticket\n const handleTicketSubmit = (e) => {\n e.preventDefault();\n const subj = e.target.subject.value.trim();\n const desc = e.target.description.value.trim();\n if (!subj || !desc) return;\n setTickets((prev) => [...prev, { subject: subj, description: desc }]);\n setShowForm(false);\n e.target.reset();\n };\n\n return (\n <div className=\"rc-container\">\n {/* Tabs Navigation */}\n <nav className=\"rc-tabs\">\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n disabled={consents.length == 0}\n className={`rc-tab ${activeTab === tab ? 'rc-tab-active' : ''}`}\n >\n {tab}\n </button>\n ))}\n </nav>\n\n {/* Data Principal ID Section */}\n <div className=\"rc-principal-id\">\n <User className=\"rc-principal-icon\" />\n <span className=\"rc-principal-text\">Data Principal ID: {userId || 'f93ba6f4-815a-44b9-9a3f-aab5c7667f8c'}</span>\n </div>\n\n {/* ------------------ CONSENT TAB ------------------ */}\n {activeTab === 'Consent' && (\n <div className=\"rc-content\">\n <div className=\"rc-section-header\">\n <h2 className=\"rc-section-title\">Manage your Consents here!</h2>\n {dirty && (\n <button className=\"rc-btn-primary\" onClick={() => handleSave()}>\n Save Changes\n </button>\n )}\n </div>\n {showSaveModal && (\n <div className=\"rc-modal-overlay\">\n <div className=\"rc-modal rc-modal-small\">\n <div className=\"rc-modal-success\">\n <CheckCircle2 className=\"rc-success-icon\" />\n <h3 className=\"rc-modal-title\">Changes Saved</h3>\n <p className=\"rc-modal-subtitle\">Your consent preferences have been updated.</p>\n <div className=\"rc-modal-actions\">\n <button className=\"rc-btn-primary\" onClick={() => setShowSaveModal(false)}>OK</button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {consentsLoading && (\n <div className=\"rc-empty-state\">\n <Info className=\"rc-empty-state-icon\" />\n Loading consents...\n </div>\n )}\n\n {!consentsLoading && consentGroups.length > 0 && (\n <div className=\"rc-consent-list\">\n {consentGroups.map((cp) => (\n <div key={cp.collection_point} className=\"rc-consent-item\">\n <div className=\"rc-consent-header\">\n <div className=\"rc-consent-title-row\">\n <h3 className=\"rc-consent-title\">{cp.title}</h3>\n </div>\n </div>\n\n {(cp.purposes || []).map((p) => (\n <div key={p.id} className=\"rc-consent-item\" style={{ marginTop: 12 }}>\n <div className=\"rc-consent-header\">\n <div className=\"rc-consent-title-row\">\n <h3 className=\"rc-consent-title\">{p.name}</h3>\n <div className=\"rc-consent-header-right\">\n <Info\n className=\"rc-info-icon\"\n onClick={() =>\n setModalData({\n title: p.name,\n description: p.description,\n expiry: p.expiry_period,\n collectionPoint: cp.title,\n type: p.is_mandatory ? 'Mandatory' : 'Optional',\n dataElements: (cp.data_elements || []).map((el) => ({\n label: el.name,\n description: el.description,\n })),\n shownToPrincipal: !!cp.shown_to_principal,\n consented: p.consented,\n })\n }\n />\n <span className={`rc-badge ${p.is_mandatory ? 'rc-badge-mandatory' : 'rc-badge-optional'}`}>\n {p.is_mandatory ? 'Mandatory' : 'Optional'}\n </span>\n </div>\n </div>\n </div>\n\n <p className=\"rc-consent-description\">{p.description}</p>\n\n <div className=\"rc-consent-details\">\n <div className=\"rc-detail-item\">\n <span className=\"rc-detail-label\">Expiry:</span>\n <span className=\"rc-detail-value\">{p.expiry_period}</span>\n </div>\n <div className=\"rc-detail-item\">\n <span className=\"rc-detail-label\">Collection Point:</span>\n <span className=\"rc-detail-value\">{cp.title}</span>\n </div>\n </div>\n\n <div className=\"rc-consent-status\">\n <div className=\"rc-status-item\">\n <span className=\"rc-status-label\">Shown to Principal:</span>\n <span className={`rc-status-pill ${cp.shown_to_principal ? 'rc-status-yes' : 'rc-status-no'}`}>\n {cp.shown_to_principal ? 'Yes' : 'No'}\n </span>\n </div>\n <div className=\"rc-status-item\">\n <span className=\"rc-status-label\">Consented:</span>\n <span className={`rc-status-pill ${p.consented === 'accepted' ? 'rc-status-yes' : 'rc-status-no'}`}>\n {p.consented === 'accepted' ? 'Yes' : 'No'}\n </span>\n </div>\n </div>\n\n <div className=\"rc-consent-toggle\">\n <label className=\"rc-switch\">\n <input\n type=\"checkbox\"\n checked={p.consented === 'accepted'}\n onChange={() => handleToggle(p.id, cp.collection_point)}\n />\n <span className=\"rc-slider\"></span>\n </label>\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n )}\n\n {!consentsLoading && consentGroups.length === 0 && (\n <div className=\"rc-empty-state\">\n <Info className=\"rc-empty-state-icon\" />\n You currently have no consent records to display.\n </div>\n )}\n\n {/* Purpose Detail Modal */}\n {modalData && (\n <div className=\"rc-modal-overlay\">\n <div className=\"rc-modal\">\n <header className=\"rc-modal-header\">\n <h2 className=\"rc-modal-title\">{modalData.title}</h2>\n <button className=\"rc-modal-close\" onClick={() => setModalData(null)}>\n <X />\n </button>\n </header>\n\n <p className=\"rc-modal-subtitle\">\n Detailed information about this purpose and how your data is used\n </p>\n\n <div className=\"rc-modal-content\">\n <section className=\"rc-modal-section\">\n <h3 className=\"rc-modal-section-title\">Purpose Details</h3>\n\n <div className=\"rc-modal-field\">\n <strong className=\"rc-modal-field-label\">Description:</strong>\n <span className=\"rc-modal-field-value\">{modalData.description}</span>\n </div>\n\n <div className=\"rc-modal-field\">\n <strong className=\"rc-modal-field-label\">Expiry Period:</strong>\n <span className=\"rc-modal-field-value\">{modalData.expiry}</span>\n </div>\n\n <div className=\"rc-modal-field\">\n <strong className=\"rc-modal-field-label\">Collection Point:</strong>\n <span className=\"rc-modal-field-value\">{modalData.collectionPoint}</span>\n </div>\n\n <div className=\"rc-modal-field\">\n <strong className=\"rc-modal-field-label\">Type:</strong>\n <span className={`rc-badge ${modalData.type === 'Mandatory' ? 'rc-badge-mandatory' : 'rc-badge-optional'}`}>\n {modalData.type}\n </span>\n </div>\n </section>\n\n <section className=\"rc-modal-section\">\n <h3 className=\"rc-modal-section-title\">Data Elements</h3>\n <div className=\"rc-elements-grid\">\n {Array.from(\n modalData.dataElements\n .reduce((m, el) => (m.set(el.label, el), m), new Map())\n .values()\n ).map((el) => (\n <div key={el.label} className=\"rc-element-card\">\n <strong className=\"rc-element-title\">{el.label}</strong>\n <p className=\"rc-element-description\">{el.description}</p>\n </div>\n ))}\n </div>\n </section>\n\n <section className=\"rc-modal-section\">\n <h3 className=\"rc-modal-section-title\">Current Status</h3>\n\n <div className=\"rc-modal-status-item\">\n <span className=\"rc-modal-status-label\">Shown to Data Principal:</span>\n <span className={`rc-status-pill ${modalData.shownToPrincipal ? 'rc-status-yes' : 'rc-status-no'}`}>\n {modalData.shownToPrincipal ? 'Yes' : 'No'}\n </span>\n </div>\n\n <div className=\"rc-modal-status-item\">\n <span className=\"rc-modal-status-label\">Consent Given:</span>\n <span className={`rc-status-pill ${modalData.consented ? 'rc-status-yes' : 'rc-status-no'}`}>\n {modalData.consented === \"accepted\" ? 'Yes' : 'No'}\n </span>\n </div>\n </section>\n </div>\n </div>\n </div>\n )}\n </div>\n )}\n\n {/* ------------------ RIGHTS TAB ------------------ */}\n {activeTab === 'Rights' && (\n <div className=\"rc-content\">\n <h2 className=\"rc-section-title\">Your Data Rights</h2>\n <p className=\"rc-section-subtitle\">You can access, correct, delete, or export your data.</p>\n\n <div className=\"rc-rights-actions\">\n {/* <button className=\"rc-btn-primary\">Download My Data</button> */}\n <button className=\"rc-btn-danger\" onClick={() => setShowDeleteModal(true)}>\n Request Data Deletion\n </button>\n </div>\n\n {showDeleteModal && (\n <div className=\"rc-modal-overlay\">\n <div className=\"rc-modal rc-modal-small\">\n {!deleteConfirmed ? (\n <div className=\"rc-modal-content\">\n <div className=\"rc-warning-icon\">⚠️</div>\n <h3 className=\"rc-modal-title\">Confirm Data Deletion</h3>\n <p className=\"rc-modal-subtitle\">\n Are you sure you want to request data deletion? This action cannot be undone.\n </p>\n <div className=\"rc-modal-actions\">\n <button className=\"rc-btn-danger\" onClick={handleDeleteRequest}>\n Confirm Deletion\n </button>\n <button className=\"rc-btn-secondary\" onClick={() => setShowDeleteModal(false)}>\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <div className=\"rc-modal-success\">\n <CheckCircle2 className=\"rc-success-icon\" />\n <h3 className=\"rc-modal-title\">Request Submitted</h3>\n <p className=\"rc-modal-subtitle\">Your data deletion request has been submitted successfully!</p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )}\n\n {/* ------------------ TRANSPARENCY TAB ------------------ */}\n {activeTab === 'Transparency' && (\n <div className=\"rc-content\">\n <h2 className=\"rc-section-title\">Transparency</h2>\n <p className=\"rc-section-subtitle\">\n Learn how we collect, use, and protect your data\n </p>\n\n <p className=\"rc-transparency-text\">\n We collect your data to provide better services and comply with regulations. Your data is stored securely and used only for the purposes you've consented to.\n </p>\n </div>\n )}\n\n {/* ... keep existing code for other tabs (DPO, Nominee, Grievance) */}\n {activeTab === 'Dpo' && (\n <div className=\"rc-content\">\n <div className=\"rc-dpo-header\">\n <User className=\"rc-dpo-icon\" />\n <h2 className=\"rc-section-title\">Data Protection Officer (DPO) Contact</h2>\n </div>\n <p className=\"rc-section-subtitle\">\n Contact our DPO for data protection matters and privacy concerns\n </p>\n\n <div className=\"rc-dpo-content\">\n <div className=\"rc-dpo-left\">\n <div className=\"rc-dpo-item\">\n <User className=\"rc-dpo-item-icon\" />\n <div>\n <span className=\"rc-dpo-label\">Name</span>\n <span className=\"rc-dpo-value\">{dpoInfo?.full_name}</span>\n </div>\n </div>\n\n <div className=\"rc-dpo-item\">\n <Mail className=\"rc-dpo-item-icon\" />\n <div>\n <span className=\"rc-dpo-label\">Email</span>\n <span className=\"rc-dpo-value\">{dpoInfo?.email}</span>\n </div>\n </div>\n\n <div className=\"rc-dpo-item\">\n <Clock className=\"rc-dpo-item-icon\" />\n <div>\n <span className=\"rc-dpo-label\">Appointment Date</span>\n <span className=\"rc-dpo-value\">{dpoInfo?.appointment_date}</span>\n </div>\n </div>\n </div>\n\n <div className=\"rc-dpo-right\">\n <div className=\"rc-dpo-info-item\">\n <span className=\"rc-dpo-label\">Qualifications</span>\n <span className=\"rc-dpo-value\">{dpoInfo?.qualifications}</span>\n </div>\n\n <div className=\"rc-dpo-info-item\">\n <span className=\"rc-dpo-label\">Responsibilities</span>\n <span className=\"rc-dpo-value\">{dpoInfo?.responsibilities}</span>\n </div>\n\n <div className=\"rc-dpo-info-item\">\n <Clock className=\"rc-dpo-time-icon\" />\n <div>\n <span className=\"rc-dpo-label\">Working Hours</span>\n <span className=\"rc-dpo-value\">Monday - Friday, 9:00 AM - 5:00 PM</span>\n </div>\n </div>\n\n <div className=\"rc-response-box\">\n <h4 className=\"rc-response-title\">Response Time</h4>\n <p className=\"rc-response-text\">\n We aim to respond to all privacy inquiries within 30 days as per regulatory requirements.\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* {activeTab === 'Nominee' && (\n <div className=\"rc-content\">\n <h2 className=\"rc-section-title\">Appoint Nominee</h2>\n <p className=\"rc-section-subtitle\">\n Appoint someone to manage your data rights on your behalf\n </p>\n \n <div className=\"rc-nominee-warning\">\n <div className=\"rc-warning-icon\">⚠️</div>\n <p>Your nominee will be able to exercise all data rights including withdrawal of consent and data deletion requests on your behalf. They cannot appoint another nominee.</p>\n </div>\n \n <form className=\"rc-nominee-form\" onSubmit={handleNomineeSubmit}>\n <div className=\"rc-form-row\">\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Name *</label>\n <input \n type=\"text\" \n className=\"rc-form-input\" \n placeholder=\"Full name of nominee\"\n onChange={(e) =>\n setNomineeForm({ ...nomineeForm, name: e.target.value })\n }\n required\n />\n </div>\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Relationship *</label>\n <select className=\"rc-form-select\" onChange={(e) =>\n setNomineeForm({ ...nomineeForm, relationship: e.target.value })\n }>\n <option>Select relationship</option>\n <option>Spouse</option>\n <option>Parent</option>\n <option>Child</option>\n <option>Sibling</option>\n <option>Other</option>\n </select>\n </div>\n </div>\n \n <div className=\"rc-form-row\">\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Email *</label>\n <input \n type=\"email\" \n className=\"rc-form-input\" \n placeholder=\"nominee@example.com\"\n onChange={(e) =>\n setNomineeForm({ ...nomineeForm, email: e.target.value })\n }\n required\n />\n </div>\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Mobile Number *</label>\n <input \n type=\"tel\" \n className=\"rc-form-input\" \n placeholder=\"+1234567890\"\n onChange={(e) =>\n setNomineeForm({ ...nomineeForm, mobile: e.target.value })\n }\n required\n />\n </div>\n </div>\n \n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Purpose of Appointment</label>\n <textarea \n className=\"rc-form-textarea\" \n placeholder=\"Explain why you are appointing this nominee\"\n rows=\"4\"\n onChange={(e) =>\n setNomineeForm({ ...nomineeForm, purpose: e.target.value })\n }\n ></textarea>\n </div>\n \n <div className=\"rc-form-actions\">\n <button type=\"submit\" className=\"rc-btn-primary\">Send Verification Code</button>\n <button type=\"button\" className=\"rc-btn-secondary\">Cancel</button>\n </div>\n </form>\n </div>\n )} */}\n {activeTab === 'Nominee' && (\n <div className=\"rc-section-container\">\n <h2 className=\"rc-section-title\">Appoint Nominee</h2>\n <p className=\"rc-section-subtitle\">\n Appoint someone to manage your data rights on your behalf\n </p>\n\n <div className=\"rc-nominee-warning\">\n <div className=\"rc-warning-icon\">⚠️</div>\n <p>Your nominee will be able to exercise all data rights on your behalf.</p>\n </div>\n\n {nominee && !editing ? (\n <div className=\"rc-nominee-details-grid\">\n <div className=\"rc-nominee-item\">\n <User className=\"rc-nominee-icon\" />\n <div>\n <span className=\"rc-nominee-label\">Name</span>\n <span className=\"rc-nominee-value\">{nominee.nominee_name}</span>\n </div>\n </div>\n\n <div className=\"rc-nominee-item\">\n <User className=\"rc-nominee-icon\" />\n <div>\n <span className=\"rc-nominee-label\">Relationship</span>\n <span className=\"rc-nominee-value\">{nominee.relationship}</span>\n </div>\n </div>\n\n <div className=\"rc-nominee-item\">\n <Mail className=\"rc-nominee-icon\" />\n <div>\n <span className=\"rc-nominee-label\">Email</span>\n <span className=\"rc-nominee-value\">{nominee.nominee_email}</span>\n </div>\n </div>\n\n <div className=\"rc-nominee-item\">\n <Clock className=\"rc-nominee-icon\" />\n <div>\n <span className=\"rc-nominee-label\">Mobile</span>\n <span className=\"rc-nominee-value\">{nominee.nominee_mobile}</span>\n </div>\n </div>\n\n {nominee.purpose_of_appointment && (\n <div className=\"rc-nominee-item rc-nominee-fullwidth\">\n <Info className=\"rc-nominee-icon\" />\n <div>\n <span className=\"rc-nominee-label\">Purpose of Appointment</span>\n <span className=\"rc-nominee-value\">\n {nominee.purpose_of_appointment}\n </span>\n </div>\n </div>\n )}\n\n <div className=\"rc-nominee-actions-fullwidth\">\n <button\n className=\"rc-btn-primary\"\n onClick={() => { setEditing(true); /* ...prefill form...*/ }}\n >\n Edit\n </button>\n <button className=\"rc-btn-danger\" onClick={handleDeleteNominee}>\n Delete\n </button>\n </div>\n </div>\n ) : (\n <form\n className=\"rc-nominee-form\"\n onSubmit={handleNomineeSubmit}\n >\n <div className=\"rc-form-row\">\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Name *</label>\n <input\n type=\"text\"\n className=\"rc-form-input\"\n placeholder=\"Full name of nominee\"\n value={nomineeForm.nominee_name}\n onChange={e =>\n setNomineeForm({ ...nomineeForm, nominee_name: e.target.value })\n }\n required\n />\n </div>\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Relationship *</label>\n <select\n className=\"rc-form-select\"\n value={nomineeForm.relationship}\n onChange={e =>\n setNomineeForm({ ...nomineeForm, relationship: e.target.value })\n }\n required\n >\n <option value=\"\">Select relationship</option>\n <option>Spouse</option>\n <option>Parent</option>\n <option>Child</option>\n <option>Sibling</option>\n <option>Other</option>\n </select>\n </div>\n </div>\n\n <div className=\"rc-form-row\">\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Email *</label>\n <input\n type=\"email\"\n className=\"rc-form-input\"\n placeholder=\"nominee@example.com\"\n value={nomineeForm.nominee_email}\n onChange={e =>\n setNomineeForm({ ...nomineeForm, nominee_email: e.target.value })\n }\n required\n />\n </div>\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Mobile Number *</label>\n <input\n type=\"tel\"\n className=\"rc-form-input\"\n placeholder=\"+1234567890\"\n value={nomineeForm.nominee_mobile}\n onChange={e =>\n setNomineeForm({ ...nomineeForm, nominee_mobile: e.target.value })\n }\n required\n />\n </div>\n </div>\n\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Purpose of Appointment</label>\n <textarea\n className=\"rc-form-textarea\"\n placeholder=\"Explain why you are appointing this nominee\"\n rows=\"4\"\n value={nomineeForm.purpose_of_appointment}\n onChange={e =>\n setNomineeForm({\n ...nomineeForm,\n purpose_of_appointment: e.target.value,\n })\n }\n />\n </div>\n\n <div className=\"rc-form-actions\">\n <button type=\"submit\" className=\"rc-btn-primary\">\n {editing ? 'Update Nominee' : 'Send Verification Code'}\n </button>\n {editing && (\n <button\n type=\"button\"\n className=\"rc-btn-secondary\"\n onClick={() => setEditing(false)}\n >\n Cancel\n </button>\n )}\n </div>\n </form>\n )}\n </div>\n )}\n {activeTab === 'Grievance' && (\n <div className=\"rc-content\">\n <div className=\"rc-section-header\">\n <div>\n <h2 className=\"rc-section-title\">Grievance Tickets</h2>\n <p className=\"rc-section-subtitle\">\n Submit privacy concerns or view your existing tickets\n </p>\n </div>\n <button\n className=\"rc-btn-primary\"\n onClick={() => setShowForm(!showForm)}\n >\n Create New Ticket\n </button>\n </div>\n\n {showForm && (\n <form className=\"rc-grievance-form\" onSubmit={handleGrievanceSubmit}>\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Subject *</label>\n <input\n name=\"subject\"\n type=\"text\"\n className=\"rc-form-input\"\n placeholder=\"Brief description of your concern\"\n value={grievanceForm.subject}\n onChange={(e) =>\n setGrievanceForm({ ...grievanceForm, subject: e.target.value })\n }\n required\n />\n </div>\n\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Category *</label>\n <select name=\"category\" className=\"rc-form-select\" value={grievanceForm.category}\n onChange={(e) =>\n setGrievanceForm({\n ...grievanceForm,\n category: e.target.value,\n })\n } required>\n <option value=\"\">Select category</option>\n <option value=\"Privacy Concern\">Privacy Concern</option>\n <option value=\"Data Access\">Data Access</option>\n <option value=\"Other\">Other</option>\n </select>\n </div>\n\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Description *</label>\n <textarea\n name=\"description\"\n className=\"rc-form-textarea\"\n placeholder=\"Detailed description of your concern or request\"\n rows=\"4\"\n value={grievanceForm.description}\n onChange={(e) =>\n setGrievanceForm({\n ...grievanceForm,\n description: e.target.value,\n })\n }\n required\n />\n </div>\n\n <div className=\"rc-form-actions\">\n <button type=\"submit\" className=\"rc-btn-primary\">Submit Ticket</button>\n <button type=\"button\" className=\"rc-btn-secondary\" onClick={() => setShowForm(false)}>\n Cancel\n </button>\n </div>\n </form>\n )}\n\n <div className=\"rc-tickets-section\">\n <h3 className=\"rc-tickets-title\">Your Tickets</h3>\n {tickets.length === 0 ? (\n <div className=\"rc-empty-state\">\n <p>No tickets found. Create your first grievance ticket above.</p>\n </div>\n ) : (\n <div className=\"rc-ticket-list\">\n {tickets.map((ticket, index) => (\n <div key={index} className=\"rc-ticket-item\">\n <div className=\"rc-ticket-header\">\n <h4 className=\"rc-ticket-subject\">{ticket.subject}</h4>\n <span className=\"rc-ticket-status\">Open</span>\n </div>\n <p className=\"rc-ticket-description\">{ticket.description}</p>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport TruConsentModal from './TruConsentModal';\n\n/**\n * TruConsent - Auto-showing cookie consent modal\n * \n * Displays a modal popup immediately on mount with loading state.\n * The modal fetches banner data and shows cookie consent UI.\n * \n * @param {string} apiKey - API key for authentication\n * @param {string} organizationId - Organization ID (e.g., 'cobuildx', 'client-dev')\n * @param {string} bannerId - Banner/Collection Point ID to display\n * @param {string} userId - User ID for consent tracking\n * @param {string} apiBaseUrl - Base URL for API (optional)\n * @param {string} logoUrl - Company logo URL (optional)\n * @param {string} companyName - Company name (optional)\n * @param {function} onClose - Callback when modal closes (optional)\n */\n\nexport default function TruConsent({\n apiKey,\n organizationId,\n bannerId,\n userId,\n orgId, // Deprecated: use organizationId\n apiBaseUrl,\n logoUrl,\n companyName,\n onClose\n}) {\n // Auto-show modal on mount - TruConsentModal handles loading state internally\n return (\n <TruConsentModal\n apiKey={apiKey}\n organizationId={organizationId || orgId}\n bannerId={bannerId}\n userId={userId}\n apiBaseUrl={apiBaseUrl}\n logoUrl={logoUrl}\n companyName={companyName}\n onClose={onClose}\n />\n );\n}"],"names":["isString","obj","defer","res","rej","promise","Promise","resolve","reject","makeString","object","lastOfPathSeparatorRegExp","cleanKey","key","indexOf","replace","canNotTraverseDeeper","getLastOfPath","path","Empty","stack","split","stackIndex","length","Object","prototype","hasOwnProperty","call","k","setPath","newValue","undefined","e","p","slice","last","getPath","deepExtend","target","source","overwrite","prop","String","regexEscape","str","_entityMap","escape","data","s","chars","looksLikeObjectPathRegExpCache","constructor","capacity","this","regExpMap","Map","regExpQueue","getRegExp","pattern","regExpFromCache","get","regExpNew","RegExp","delete","shift","set","push","deepFind","keySeparator","tokens","current","i","next","nextPath","j","getCleanedCode","code","consoleLogger","type","log","args","output","warn","error","console","apply","Logger","concreteLogger","options","init","prefix","logger","debug","forward","deprecate","lvl","debugOnly","create","moduleName","clone","baseLogger","EventEmitter","observers","on","events","listener","forEach","event","numListeners","off","emit","Array","from","entries","observer","numTimesAdded","ResourceStore","ns","defaultNS","super","ignoreJSONStructure","addNamespaces","removeNamespaces","index","splice","getResource","lng","isArray","result","join","addResource","value","silent","concat","addResources","resources","m","addResourceBundle","deep","skipCopy","pack","JSON","parse","stringify","removeResourceBundle","hasResourceBundle","getResourceBundle","getDataByLanguage","hasLanguageSomeTranslations","keys","find","v","toJSON","postProcessor","processors","addPostProcessor","module","name","handle","translator","processor","process","PATH_KEY","Symbol","keysFromSelector","selector","opts","state","handler","proxy","revoke","Proxy","revocable","createProxy","checkedLoadedFor","shouldHandleAsObject","Translator","services","t","changeLanguage","language","exists","o","interpolation","opt","resolved","isObject","returnObjects","extractFromKey","nsSeparator","namespaces","wouldCheckForNsInKey","seemsNaturalLanguage","userDefinedKeySeparator","userDefinedNsSeparator","possibleChars","filter","c","r","map","matched","test","ki","substring","looksLikeObjectPath","match","interpolator","nestingRegexp","parts","translate","lastKey","overloadTranslationOptionHandler","arguments","returnDetails","namespace","appendNamespaceToCIMode","toLowerCase","usedKey","exactUsedKey","usedLng","usedNS","usedParams","getUsedParamsDetails","resUsedKey","resExactUsedKey","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","needsPluralHandling","count","hasDefaultValue","defaultValueSuffix","pluralResolver","getSuffix","defaultValueSuffixOrdinalFallback","ordinal","needsZeroSuffixLookup","defaultValue","pluralSeparator","resForObjHndl","resType","toString","extendTranslation","usedDefault","isValidLookup","resForMissing","missingKeyNoValueFallbackToKey","updateMissing","fk","lngs","fallbackLngs","languageUtils","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","send","l","specificDefaultValue","defaultForMissing","missingKeyHandler","backendConnector","saveMissing","saveMissingPlurals","suffixes","getSuffixes","suffix","appendNamespaceToMissingKey","parseMissingKeyHandler","returnedObjectHandler","resTypeIsArray","copy","newKeyToUse","deepKey","defaultVariables","skipInterpolation","skipOnVariables","nestBef","nb","interpolate","na","nest","context","reset","postProcess","postProcessorNames","applyPostProcessor","postProcessPassResolved","i18nResolved","found","extracted","fallbackNS","needsContextHandling","codes","utils","hasLoadedNamespace","finalKeys","addLookupKeys","pluralSuffix","zeroSuffix","ordinalPrefix","contextKey","contextSeparator","possibleKey","pop","returnNull","returnEmptyString","resourceStore","optionsKeys","useOptionsReplaceForData","option","LanguageUtil","supportedLngs","getScriptPartFromCode","formatLanguageCode","getLanguagePartFromCode","formattedCode","Intl","getCanonicalLocales","lowerCaseLng","cleanCode","isSupportedCode","load","nonExplicitSupportedLngs","getBestMatchFromCodes","cleanedLng","lngScOnly","lngOnly","supportedLng","fallbacks","default","fallbackCode","fallbackCodes","addCode","fc","suffixesOrder","zero","one","two","few","many","other","dummyRule","select","resolvedOptions","pluralCategories","PluralResolver","pluralRulesCache","addRule","rules","clearCache","getRule","cleanedCode","cacheKey","rule","PluralRules","err","lngPart","needsPlural","getPluralFormsOfKey","sort","pluralCategory1","pluralCategory2","pluralCategory","prepend","deepFindWithDefaults","defaultData","getPathWithDefaults","regexSafe","val","Interpolator","format","escapeValue","escape$1","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapeSuffix","unescapePrefix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","resetRegExp","getOrResetRegExp","existingRegExp","lastIndex","regexp","regexpUnescape","replaces","handleFormat","interpolationkey","trim","f","missingInterpolationHandler","regex","safeValue","todo","exec","matchedVar","temp","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","formatters","keyEndIndex","lastIndexOf","elem","Boolean","reduce","createCachedFormatter","fn","cache","optForCache","formatParams","frm","createNonCachedFormatter","Formatter","cf","cacheInBuiltFormats","formats","number","formatter","NumberFormat","currency","style","datetime","DateTimeFormat","relativetime","RelativeTimeFormat","range","list","ListFormat","add","addCached","findIndex","mem","formatName","formatOptions","formatStr","optStr","rest","trimmedKey","isNaN","parseInt","parseFormatStr","formatted","valOptions","locale","Connector","backend","store","waitingReads","maxParallelReads","readingCalls","maxRetries","retryTimeout","queue","queueLoad","languages","callback","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","pendingCount","loaded","errors","q","pushPath","removePending","done","loadedKeys","n","read","fcName","tried","wait","resolver","setTimeout","bind","then","catch","prepareLoading","loadOne","fallbackValue","isUpdate","clb","initAsync","preload","simplifyPluralSuffix","partialBundledLanguages","ret","tDescription","transformOptions","initImmediate","noop","I18n","inst","modules","external","getOwnPropertyNames","getPrototypeOf","isInitialized","isClone","isInitializing","defOpts","createClassOnDemand","ClassOrObject","lu","languageDetector","detection","deferred","finish","initializedStoreOnce","loadResources","usedCallback","append","resolvedLanguage","setResolvedLanguage","reloadResources","use","Error","li","lngInLngs","unshift","isLanguageChangingTo","setLngProps","setLng","fl","cacheUserLanguage","async","detect","getFixedT","keyPrefix","fixedT","resultKey","setDefaultNamespace","lastLng","loadNotPending","loadState","precheck","preResult","loadNamespaces","loadLanguages","preloaded","newLngs","dir","Locale","getTextInfo","ti","direction","createInstance","cloneInstance","forkResourceStore","mergedOptions","clonedData","prev","acc","instance","alreadyWarned","warnOnce","i18n","msg","Date","loadedClb","cb","initialized","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","i18nInstance","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","unescape","text","initReactI18next","setDefaults","react","setI18n","I18nContext","createContext","ReportNamespaces","usedNamespaces","addUsedNamespaces","getUsedNamespaces","objectIs","is","x","y","useState","React","useEffect","useLayoutEffect","useDebugValue","checkIfSnapshotChanged","latestGetSnapshot","getSnapshot","nextValue","shim","window","document","createElement","subscribe","_useState","forceUpdate","useSyncExternalStore","env","NODE_ENV","__REACT_DEVTOOLS_GLOBAL_HOOK__","registerInternalModuleStart","require$$0","didWarnOld18Alpha","didWarnUncachedGetSnapshot","startTransition","cachedValue","exports","registerInternalModuleStop","require$$1","notReadySnapshot","optsOrDefaultValue","ready","dummySubscribe","useTranslation","props","i18nFromProps","i18nFromContext","defaultNSFromContext","useContext","reportNamespaces","i18nOptions","useMemo","nsOrContext","revisionRef","useRef","useCallback","wrappedCallback","snapshotRef","calculatedReady","every","currentLng","currentRevision","lastSnapshot","revision","newSnapshot","nsMode","loadCount","setLoadCount","onLoaded","finalI18n","arr","I18nextProvider","children","Provider","LanguageProvider","_ref","ModernBannerHeader","logoUrl","orgName","bannerTitle","disclaimerText","_useTranslation","isLangOpen","setIsLangOpen","processPlaceholder","title","companyName","disclaimer","className","src","alt","onClick","fill","viewBox","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","en","translation","ta","hi","dynamicTranslations","Gender","Name","Address","CollapsibleDataSection","items","isOpen","onToggle","item","id","translateDynamic","ModernPurposeCard","purpose","banner","mandatoryLabel","openSection","setOpenSection","isMandatory","is_mandatory","isAccepted","consented","expiryLabel","digits","unit","formatExpiryText","expiry_label","expiry_period","handleToggleSection","section","dataElements","data_elements","processingActivities","processing_activities","dataProcessors","legal_entities","tools","description","activity","idx","is_legitimate","checked","onChange","show_processors","ModernBannerFooter","htmlContent","footerText","linkText","url","fullUrl","dangerouslySetInnerHTML","__html","ModernBannerActions","onRejectAll","onConsentAll","onAcceptSelected","onAcceptMandatory","actionButtonText","rejectAllText","rejectAllColor","acceptAllText","onlyNecessaryText","onlyNecessaryColor","savePreferencesColor","primaryColor","_ref$purposes","purposes","_ref$isBottomReached","isBottomReached","_ref$isSplitLayout","isSplitLayout","some","primaryBg","disabledClasses","buttonBase","disabled","backgroundColor","Banner","_banner$purposes","_banner$purposes2","_banner$banner_settin","onChangePurpose","secondaryColor","setIsBottomReached","scrollRef","settings","banner_settings","finalPrimaryColor","primary_color","finalSecondaryColor","secondary_color","footer_text","banner_title","disclaimer_text","action_button_text","_scrollRef$current","scrollHeight","clientHeight","font_type","font_size","fontFamily","fontSize","logo_url","ref","onScroll","_e$target","scrollTop","warning_message","width","height","cx","cy","x1","y1","x2","y2","reject_all_text","reject_all_color","accept_all_text","only_necessary_text","only_necessary_color","save_preferences_color","general_notice_template","BannerUI","CookieBannerUI","_banner$banner_settin2","onPersonalize","layoutClass","styleVars","dynamicFooter","withLinks","PreferencesModalUI","onClose","bannerSettings","modalTitle","HCaseWarningPopup","onProceed","onBack","isHard","h_case_logging_strategy","popupMessage","h_case_warning_message","proceedText","h_case_proceed_button_text","backText","h_case_back_button_text","h_case_back_button_color","h_case_proceed_button_color","_catch","body","recover","_finallyRethrows","finalizer","TruConsentModal","apiKey","organizationId","bannerId","userId","orgId","_props$apiBaseUrl","apiBaseUrl","_props$companyName","_useState4","setBanner","_useState5","isLoading","setIsLoading","setActionLoading","_useState7","setError","_useState8","visible","setVisible","_useState9","show","action","hCaseData","setHCaseData","_useState0","showFullNotice","setShowFullNotice","actionTakenRef","actionRunningRef","closeButtonClickedRef","effectiveOrgId","resolvedCompanyName","organization_name","organization","resolvedLogoUrl","fetchUrl","encodeURIComponent","fetch","headers","status","ok","json","_data$banner_settings","fully_consented","defaultSelection","default_selection","initializedPurposes","initialConsent","_extends","message","close","handlePurposeChange","purposeId","newStatus","b","requestId","crypto","randomUUID","sendLogEvent","metadata","collection_point","method","keepalive","_wasThrown","_result","checkHCaseIntercept","h_case_event","intercepted_action","handleAction","_temp","enhancedMetadata","button_used","_wasThrown2","_result2","handleAcceptSelected","_temp2","_wasThrown3","_result3","handleAcceptMandatory","_temp3","mandatoryPurposes","_wasThrown4","_result4","consent_type","cookie_notice_template","ReactDOM","createPortal","role","button_clicked","h_case_warning_shown","h_case_acknowledged","_excluded","baseUrl","activeTab","setActiveTab","authHeaders","_useState2","dpoInfo","setDpoInfo","_useState3","nominees","setNominees","editing","setEditing","nominee_name","relationship","nominee_email","nominee_mobile","purpose_of_appointment","nomineeForm","setNomineeForm","nominee","_useState6","tickets","setTickets","setShowGrievanceForm","subject","category","grievanceForm","setGrievanceForm","consents","setConsents","consentsLoading","setConsentsLoading","_useState1","dirty","setDirty","_useState10","modalData","setModalData","_useState11","showSaveModal","setShowSaveModal","_useState12","consentGroups","setConsentGroups","_useState13","initialConsentGroups","setInitialConsentGroups","_useState14","showDeleteModal","setShowDeleteModal","_useState15","deleteConfirmed","setDeleteConfirmed","_useState16","showForm","setShowForm","normalizeStatus","fetchUserConsents","all","_ref2","allRes","_ref3","userRecords","allBanners","userByCp","cp","merged","userCp","shown_to_principal","userPurposeStatus","has","_normalizeStatus","flatMap","record","expiry","collectionPoint","collectionId","el","label","shownToPrincipal","tab","User","initialStateByCollection","purposeMap","byCollection","changedByCollection","collectionInitialState","_ref4","_changedByCollection$","_ref5","_changedByCollection$2","changedIds","Set","purposesPayload","initialStatus","hasRevocation","hasApproval","payload","_ref6","_objectWithoutPropertiesLoose","changedPurposes","handleSave","CheckCircle2","Info","marginTop","consentId","X","values","full_name","Mail","email","Clock","appointment_date","qualifications","responsibilities","onSubmit","preventDefault","user_id","placeholder","required","rows","client_user_id","ticket"],"mappings":"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"}