@truconsent/consent-notice 0.0.11 → 0.0.12

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/runtime/purposeAdapter.js","../src/runtime/bannerState.js","../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/templates/shared/LanguageProvider.jsx","../src/templates/shared/ModernBannerHeader.jsx","../src/i18n/i18n.js","../src/templates/shared/CollapsibleDataSection.jsx","../src/templates/shared/ModernPurposeCard.jsx","../src/templates/shared/ModernBannerFooter.jsx","../src/templates/shared/ModernBannerActions.jsx","../src/templates/general_consent/TabbedBannerUI.jsx","../src/templates/notice_only/NoticeOnlyBanner.jsx","../src/templates/general_consent/InlineSingleRowUI.jsx","../src/templates/general_consent/CompactListUI.jsx","../src/templates/general_consent/SplitPaneUI.jsx","../src/runtime/templateRegistry.js","../src/templates/general_consent/BannerUI.jsx","../src/templates/general_consent/PreferencesModalUI.jsx","../src/templates/cookie_consent/CookieBannerUI.jsx","../src/runtime/useConsentEngine.js","../src/core/HCaseWarningPopup.jsx","../src/core/TruConsentModal.jsx","../src/core/RightCenter.jsx","../src/core/TruConsent.jsx"],"sourcesContent":["/**\n * purposeAdapter.js\n *\n * Normalizes raw purpose objects from the API into a consistent shape\n * used by the Consent Engine and template layer.\n */\n\n/**\n * Normalize a single raw purpose object.\n *\n * @param {object} rawPurpose - Purpose as returned by the /v1/banners API\n * @param {string} defaultSelection - One of 'all' | 'mandatory_only' | 'none'\n * @returns {object} Normalized purpose\n */\nexport function normalizePurpose(rawPurpose, defaultSelection = 'mandatory_only') {\n const isLegitimate = !!rawPurpose.is_legitimate;\n\n // Legal basis: legitimate interest purposes are notice-basis\n const legalBasis = isLegitimate ? 'notice' : 'consent';\n\n // Withdrawable: only consent-basis purposes with recurring frequency\n const withdrawable = !isLegitimate && rawPurpose.frequency === 'recurring';\n\n // Initial consent state\n let checked;\n if (isLegitimate || rawPurpose.is_mandatory) {\n // Notice/legitimate interest or mandatory purposes are always active by default\n checked = 'accepted';\n } else if (defaultSelection === 'all') {\n checked = 'accepted';\n } else if (defaultSelection === 'none') {\n checked = 'declined';\n } else {\n // Default to 'mandatory_only' behavior\n checked = 'declined';\n }\n\n return {\n ...rawPurpose,\n legalBasis,\n withdrawable,\n consented: checked,\n // Preserve is_dynamic as-is (defaults to false if not present)\n is_dynamic: !!rawPurpose.is_dynamic,\n };\n}\n\n/**\n * Normalize an array of raw purposes and sort them by hierarchy.\n * Hierarchy: Legitimate > Necessary > Purpose-based (Recurring) > Optional (One-time)\n *\n * @param {Array} purposes - Array of raw purpose objects\n * @param {string} defaultSelection - 'all' | 'mandatory_only' | 'none'\n * @returns {Array} Normalized and sorted purposes\n */\nexport function normalizePurposes(purposes, defaultSelection = 'mandatory_only') {\n const normalized = (purposes || []).map(p => normalizePurpose(p, defaultSelection));\n return sortPurposes(normalized);\n}\n\n/**\n * Sort purposes by hierarchy: Legitimate > Necessary > Recurring > One-time.\n *\n * @param {Array} purposes - Normalized purposes\n * @returns {Array} Sorted purposes\n */\nexport function sortPurposes(purposes) {\n if (!purposes || !Array.isArray(purposes)) return [];\n \n const getPriority = (p) => {\n // 1. Legitimate Interest\n if (p.is_legitimate) return 1;\n // 2. Necessary / Mandatory\n if (p.is_mandatory) return 2;\n // 3. Purpose-based (Recurring)\n if (p.frequency === 'recurring') return 3;\n // 4. Optional (One-time)\n if (p.frequency === 'one_off') return 4;\n return 5;\n };\n\n return [...purposes].sort((a, b) => getPriority(a) - getPriority(b));\n}\n\n/**\n * Filter dynamic purposes based on previous consent.\n *\n * - Static purposes → always included\n * - Dynamic purpose never seen → show\n * - Dynamic purpose previously consented (accepted) → hide\n * - Dynamic purpose previously rejected → show (suppression logic applies externally)\n *\n * @param {Array} purposes - Normalized purposes\n * @param {Array} previousConsent - Previous consent records [{id, consented}]\n * @returns {Array} Filtered purposes\n */\nexport function filterDynamicPurposes(purposes, previousConsent = []) {\n return purposes.filter(p => {\n if (!p.is_dynamic) return true; // Static purposes always included\n const prev = previousConsent.find(c => c.id === p.id || c.purpose_id === p.id);\n if (!prev) return true; // Never seen → show\n // Consented → hide; rejected → show (suppression logic applies)\n return prev.consented !== 'accepted' && prev.status !== 'accepted';\n });\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\n/**\n * Translate text based on the current language in i18next.\n * Use for purpose names, descriptions, and entities.\n */\nexport const translateDynamic = (text, i18n) => {\n if (!text) return '';\n if (dynamicTranslations[i18n.language] && dynamicTranslations[i18n.language][text]) {\n return dynamicTranslations[i18n.language][text];\n }\n return text;\n};\n","/**\n * bannerState.js\n *\n * Derives UI state from normalized purposes.\n * Used by useConsentEngine and templates to decide rendering behaviour.\n */\n\n/**\n * Banner display cases:\n * CASE 1 — Legitimate + Other purposes → Tab-based UI\n * CASE 2 — Only consent purposes (no legitimate) → Normal banner (no tabs)\n * CASE 3 — Only legitimate purposes → Single-tab / notice-only UI\n */\nexport const BANNER_CASE = {\n TABBED: 1, // Legitimate + consent → two tabs\n NORMAL: 2, // Consent only → standard banner\n NOTICE_ONLY: 3, // Legitimate only → single tab / OK button\n};\n\n/**\n * Determine which banner case applies.\n *\n * @param {Array} purposes - Normalized purposes\n * @returns {number} One of BANNER_CASE values\n */\nexport function detectBannerCase(purposes = []) {\n const hasNotice = purposes.some(p => p.legalBasis === 'notice');\n const hasConsent = purposes.some(p => p.legalBasis === 'consent');\n\n if (hasNotice && hasConsent) return BANNER_CASE.TABBED;\n if (hasConsent && !hasNotice) return BANNER_CASE.NORMAL;\n if (hasNotice && !hasConsent) return BANNER_CASE.NOTICE_ONLY;\n\n // Fallback (empty purposes)\n return BANNER_CASE.NORMAL;\n}\n\n/**\n * Derive the UI state from a list of normalized purposes.\n *\n * @param {Array} purposes - Array of normalized purposes (with legalBasis)\n * @returns {object} UI state descriptor\n */\nexport function deriveUIState(purposes = []) {\n const noticePurposes = purposes.filter(p => p.legalBasis === 'notice');\n const consentPurposes = purposes.filter(p => p.legalBasis === 'consent');\n\n // Separate consent purposes into mandatory (profile-based) and optional\n const mandatoryConsentPurposes = consentPurposes.filter(p => p.is_mandatory);\n const optionalConsentPurposes = consentPurposes.filter(p => !p.is_mandatory);\n\n return {\n /** True when ONLY notice/legitimate-interest purposes exist (no consent needed) */\n noticeOnly: consentPurposes.length === 0 && noticePurposes.length > 0,\n\n /** True when ONLY consent purposes exist (no notice purposes) */\n consentOnly: noticePurposes.length === 0 && consentPurposes.length > 0,\n\n /** H-Case: both notice AND consent purposes exist */\n isHCase: noticePurposes.length > 0 && consentPurposes.length > 0,\n\n /** At least one consent purpose is mandatory */\n hasRequiredConsent: consentPurposes.some(p => p.is_mandatory),\n\n /** Which banner case to use */\n bannerCase: detectBannerCase(purposes),\n\n /** Segmented purpose lists for action handlers */\n noticePurposes,\n consentPurposes,\n\n /** Further breakdown of consent purposes */\n mandatoryConsentPurposes,\n optionalConsentPurposes,\n };\n}\n","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/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, showLanguage = true }) {\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) || (orgName ? t('consent_by', { companyName: orgName }) : t('consent_notice'));\n const disclaimer = processPlaceholder(disclaimerText);\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-start\">\n <div className=\"flex items-center gap-3 min-w-0 flex-1\">\n {logoUrl && <img src={logoUrl} alt={`${orgName} logo`} className=\"tru-banner-logo h-7 w-auto flex-shrink-0\" />}\n <h2 className=\"tru-banner-title text-[1.25em] font-bold leading-tight\" style={{ color: 'var(--banner-text)' }}>{title}</h2>\n </div>\n {showLanguage && (\n <div className=\"relative flex-shrink-0\">\n <button onClick={() => setIsLangOpen(!isLangOpen)} className=\"tru-language-toggle flex items-center gap-1 text-[0.875em] hover:opacity-80\" style={{ color: 'var(--banner-text-muted)' }}>\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=\"tru-language-dropdown absolute right-0 mt-1 w-40 rounded-md shadow-lg z-[100] border\"\n style={{ backgroundColor: 'var(--banner-bg)', borderColor: 'var(--banner-border)' }}>\n <button onClick={() => changeLanguage('en')} className=\"block w-full text-left px-4 py-2 text-[0.875em] hover:bg-[var(--banner-hover-bg)]\" style={{ color: 'var(--banner-text)' }}>English</button>\n <button onClick={() => changeLanguage('ta')} className=\"block w-full text-left px-4 py-2 text-[0.875em] hover:bg-[var(--banner-hover-bg)]\" style={{ color: 'var(--banner-text)' }}>தமிழ்</button>\n <button onClick={() => changeLanguage('hi')} className=\"block w-full text-left px-4 py-2 text-[0.875em] hover:bg-[var(--banner-hover-bg)]\" style={{ color: 'var(--banner-text)' }}>हिंदी</button>\n </div>\n )}\n </div>\n )}\n </div>\n {disclaimer && (\n <div className=\"tru-disclaimer-box border text-[0.9375em] leading-normal rounded-lg py-2 px-3 italic\"\n style={{ backgroundColor: 'var(--banner-info-bg)', borderColor: 'var(--banner-info-border)', color: 'var(--banner-info-text)' }}>\n {disclaimer}\n </div>\n )}\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, chevronLeft = false }) {\n const { i18n } = useTranslation();\n return (\n <div className=\"tru-data-section border-t\" style={{ borderColor: 'var(--banner-border)' }}>\n <button\n type=\"button\"\n className=\"w-full flex items-center py-2 text-[0.85em] font-medium gap-2\"\n style={{ color: 'var(--banner-text)' }}\n onClick={onToggle}\n >\n {chevronLeft && (\n <svg\n className={`w-3.5 h-3.5 text-gray-400 transition-transform ${isOpen ? 'rotate-90' : ''}`}\n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2.5}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )}\n\n <span className=\"flex-1 text-left\">{title} ({items.length})</span>\n\n {!chevronLeft && (\n <svg className={`w-4 h-4 transform transition-transform ${isOpen ? 'rotate-180' : ''}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n )}\n </button>\n {isOpen && (\n <div className={`${chevronLeft ? 'pl-5' : ''} py-1.5 flex flex-wrap gap-1.5`}>\n {items.map((item) => (\n <div key={item.id} className=\"border rounded-full px-3 py-1 text-[0.875em]\"\n style={{ backgroundColor: 'var(--banner-btn-secondary-bg)', borderColor: 'var(--banner-btn-secondary-border)', color: 'var(--banner-text-muted)' }}>\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\nimport { translateDynamic } from '../../runtime/purposeAdapter';\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=\"tru-purpose-card border rounded-xl p-2 shadow-sm hover:shadow-md transition-shadow duration-200\"\n style={{ backgroundColor: 'var(--banner-bg)', borderColor: 'var(--banner-border)' }}>\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-[1em]\" style={{ color: 'var(--banner-text)' }}>{translateDynamic(purpose.name, i18n)}</h3>\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 border\"\n style={{ backgroundColor: 'var(--banner-btn-secondary-bg)', color: 'var(--banner-text-muted)', borderColor: 'var(--banner-btn-secondary-border)' }}>\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 <div className=\"flex items-center gap-2\">\n {!isMandatory && (\n <span className=\"text-[10px] font-bold uppercase tracking-tight\" style={{ color: 'var(--banner-text-muted)' }}>{t('accept')}</span>\n )}\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.7em] font-medium italic\" style={{ color: 'var(--banner-text-muted)', opacity: 0.8 }}>\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=\"hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: var(--banner-primary-color);\">${linkText}</a>`;\n });\n}\n\nexport default function ModernBannerFooter({ footerText, orgName }) {\n if (!footerText) return null;\n\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=\"tru-footer-box text-center text-[0.8125em] border rounded-lg px-3 py-2 leading-normal italic mb-2 w-full\"\n style={{ backgroundColor: 'var(--banner-info-bg)', borderColor: 'var(--banner-info-border)', color: 'var(--banner-info-text)' }}\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 hasUserInteracted = false,\n isSplitLayout = false,\n showAcceptAll = true,\n minimal = false\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 const splitLayoutContent = (\n <>\n {!isBottomReached && (\n <p className=\"text-[10px] mb-2 text-center animate-pulse\" style={{ color: 'var(--banner-text-muted)' }}>\n {t('scroll_to_bottom') || '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-2\">\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') : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-reject ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {rejectAllText || t('reject_all')}\n </button>\n\n <button\n onClick={onAcceptMandatory}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? (onlyNecessaryColor || '#f97316') : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-necessary ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {onlyNecessaryText || t('only_necessary') || 'Only Necessary'}\n </button>\n </div>\n\n <div className=\"flex flex-row gap-2 w-full sm:w-auto\">\n {showAcceptAll && (\n <button\n onClick={onConsentAll}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? '#10b981' : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-accept ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {actionButtonText || acceptAllText || t('accept_all')}\n </button>\n )}\n </div>\n </div>\n </>\n );\n\n if (minimal) return <div className=\"w-full\">{splitLayoutContent}</div>;\n\n return (\n <div className=\"px-4 py-3 border-t\" style={{ backgroundColor: 'var(--banner-hover-bg)', borderColor: 'var(--banner-border)' }}>\n {splitLayoutContent}\n </div>\n );\n }\n\n const defaultLayoutContent = (\n <div className=\"w-full\">\n {!isBottomReached && (\n <p className=\"text-[10px] mb-2 text-center animate-pulse\" style={{ color: 'var(--banner-text-muted)' }}>\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-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') : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-reject ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {rejectAllText || t('reject_all')}\n </button>\n\n <button\n onClick={onAcceptMandatory}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? (onlyNecessaryColor || '#f97316') : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-necessary ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {onlyNecessaryText || t('only_necessary')}\n </button>\n </div>\n\n <button\n onClick={onConsentAll}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? '#10b981' : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-accept ${buttonBase} w-full sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {anyOptionalAccepted ? (t('i_consent') || 'I Consent') : (actionButtonText || acceptAllText || t('accept_all') || 'Consent All')}\n </button>\n </div>\n </div>\n );\n\n if (minimal) return defaultLayoutContent;\n\n return (\n <div className=\"px-4 py-2.5 border-t\" style={{ backgroundColor: 'var(--banner-hover-bg)', borderColor: 'var(--banner-border)' }}>\n {defaultLayoutContent}\n </div>\n );\n}\n","/**\n * TabbedBannerUI.jsx\n *\n * Dynamic tab-based consent banner that adapts to three cases:\n * CASE 1 (TABBED) — Legitimate + consent purposes → 2 tabs\n * CASE 2 (NORMAL) — Consent purposes only → no tabs, standard banner\n * CASE 3 (NOTICE_ONLY) — Legitimate purposes only → single tab with OK\n */\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { BANNER_CASE } from '../../runtime/bannerState';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernPurposeCard from '../shared/ModernPurposeCard';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernBannerActions from '../shared/ModernBannerActions';\n\n// ---------------------------------------------------------------------------\n// Sub-components\n// ---------------------------------------------------------------------------\n\n/** Group sub-heading */\nfunction GroupHeader({ title }) {\n return <div className=\"tru-group-heading\">{title}</div>;\n}\n\n/** Tab button with ARIA roles */\nfunction TabButton({ label, isActive, onClick, tabId, panelId }) {\n return (\n <button\n role=\"tab\"\n id={tabId}\n aria-selected={isActive}\n aria-controls={panelId}\n onClick={onClick}\n className=\"tru-tab-button\"\n data-active={isActive || undefined}\n >\n {label}\n </button>\n );\n}\n\n/** Tab panel wrapper */\nfunction TabPanel({ id, labelledBy, children, isActive }) {\n return (\n <div\n role=\"tabpanel\"\n id={id}\n aria-labelledby={labelledBy}\n hidden={!isActive}\n className=\"tru-tab-panel\"\n >\n {children}\n </div>\n );\n}\n\n/** Legitimate Use tab content */\nfunction LegitimateUseContent({ noticePurposes, banner, settings, companyName }) {\n const { t } = useTranslation();\n\n return (\n <div className=\"tru-legitimate-content\">\n <div className=\"tru-purposes-list\">\n {noticePurposes.map((p) => (\n <ModernPurposeCard\n key={p.id}\n purpose={p}\n banner={banner}\n onToggle={() => { }}\n />\n ))}\n </div>\n\n </div>\n );\n}\n\n/** Purposes (consent) tab content — all purposes in a flat list, no group titles */\nfunction ConsentPurposesContent({\n allConsentPurposes,\n banner,\n onChangePurpose,\n settings,\n companyName,\n}) {\n const { t } = useTranslation();\n\n const groups = [\n {\n title: t('necessary') || 'NECESSARY',\n items: allConsentPurposes.filter(p => p.is_mandatory)\n },\n {\n title: 'OPTIONAL',\n items: allConsentPurposes.filter(p => !p.is_mandatory && !p.is_dynamic)\n },\n {\n title: 'PROFILE BASED',\n items: allConsentPurposes.filter(p => p.is_dynamic)\n }\n ].filter(g => g.items.length > 0);\n\n return (\n <div className=\"tru-consent-content\">\n <div className=\"tru-purposes-list\">\n {groups.map((group, gIdx) => (\n <React.Fragment key={gIdx}>\n <GroupHeader title={group.title} />\n {group.items.map((p) => (\n <ModernPurposeCard\n key={p.id}\n purpose={p}\n banner={banner}\n onToggle={onChangePurpose}\n />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport default function TabbedBannerUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n onAcknowledgeNotice,\n hasUserInteracted,\n actionLoading,\n bannerCase,\n uiState,\n settings: settingsOverride,\n}) {\n const { t } = useTranslation();\n const [activeTab, setActiveTab] = useState(0);\n const scrollRef = useRef(null);\n const [isBottomReached, setIsBottomReached] = useState(false);\n\n const settings = settingsOverride || banner?.banner_settings || {};\n const primaryColor = settings.primary_color || '#3b82f6';\n\n const {\n noticePurposes = [],\n consentPurposes = [],\n } = uiState || {};\n\n // Scroll detection for action gating\n const handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n if (scrollHeight - scrollTop <= clientHeight + 5) {\n setIsBottomReached(true);\n }\n };\n\n useEffect(() => {\n if (scrollRef.current) {\n const { scrollHeight, clientHeight } = scrollRef.current;\n if (scrollHeight <= clientHeight) {\n setIsBottomReached(true);\n }\n }\n }, [banner?.purposes, activeTab]);\n\n const styleVars = {\n '--font-type': settings.font_type,\n '--font-size': settings.font_size,\n '--banner-primary-color': primaryColor,\n '--banner-secondary-color': settings.secondary_color || '#555',\n fontFamily: settings.font_type || 'inherit',\n fontSize: settings.font_size || 'inherit',\n };\n\n // -----------------------------------------------------------------------\n // CASE 3: Notice-only (single tab, OK button)\n // -----------------------------------------------------------------------\n if (bannerCase === BANNER_CASE.NOTICE_ONLY) {\n return (\n <div className=\"tru-banner-root tru-banner-notice-only\" style={styleVars}>\n <div className=\"tru-banner-header-area\">\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logo_url}\n orgName={companyName}\n bannerTitle={settings.banner_title}\n disclaimerText={settings.disclaimer_text}\n />\n </div>\n\n <div className=\"tru-tabs-bar\" role=\"tablist\" aria-label=\"Consent sections\">\n <TabButton\n label=\"Informational\"\n isActive={true}\n onClick={() => { }}\n tabId=\"tab-legitimate\"\n panelId=\"panel-legitimate\"\n />\n </div>\n\n <div ref={scrollRef} onScroll={handleScroll} className=\"tru-banner-scroll-area\">\n <TabPanel id=\"panel-legitimate\" labelledBy=\"tab-legitimate\" isActive={true}>\n <LegitimateUseContent\n noticePurposes={noticePurposes}\n banner={banner}\n settings={settings}\n />\n </TabPanel>\n </div>\n\n <div className=\"tru-banner-footer-area\">\n <ModernBannerFooter footerText={settings.footer_text} orgName={companyName} />\n <div className=\"tru-actions-row tru-actions-center\">\n <button\n className=\"tru-btn tru-btn-primary\"\n style={{ backgroundColor: primaryColor }}\n onClick={onAcknowledgeNotice}\n disabled={actionLoading}\n >\n {actionLoading ? (t('processing') || 'Processing...') : (settings.notice_acknowledge_text || t('ok_button') || 'OK')}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // -----------------------------------------------------------------------\n // CASE 2: Normal consent banner (no tabs)\n // -----------------------------------------------------------------------\n if (bannerCase === BANNER_CASE.NORMAL) {\n return (\n <div className=\"tru-banner-root tru-banner-normal\" style={styleVars}>\n <div className=\"tru-banner-header-area\">\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logo_url}\n orgName={companyName}\n bannerTitle={settings.banner_title}\n disclaimerText={settings.disclaimer_text}\n />\n </div>\n\n <div ref={scrollRef} onScroll={handleScroll} className=\"tru-banner-scroll-area\">\n <ConsentPurposesContent\n allConsentPurposes={consentPurposes}\n banner={banner}\n onChangePurpose={onChangePurpose}\n settings={settings}\n />\n </div>\n\n <div className=\"flex-shrink-0 border-t px-4 py-1.5\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\n <ModernBannerFooter footerText={settings.footer_text} orgName={companyName} />\n <ModernBannerActions\n onRejectAll={onRejectAll}\n onConsentAll={onConsentAll}\n onAcceptSelected={onAcceptSelected}\n onAcceptMandatory={onAcceptMandatory}\n purposes={banner?.purposes || []}\n actionButtonText={settings.action_button_text}\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={primaryColor}\n isBottomReached={isBottomReached}\n hasUserInteracted={hasUserInteracted}\n />\n </div>\n </div>\n );\n }\n\n // -----------------------------------------------------------------------\n // CASE 1: Tabbed UI (Legitimate Use + Purposes)\n // -----------------------------------------------------------------------\n const tabs = [\n { key: 'legitimate', label: 'Informational' },\n { key: 'purposes', label: 'Consent' },\n ];\n\n const isOnLegitimateTab = activeTab === 0;\n const isOnPurposesTab = activeTab === 1;\n\n return (\n <div className=\"tru-banner-root tru-banner-tabbed\" style={styleVars}>\n <div className=\"tru-banner-header-area\">\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logo_url}\n orgName={companyName}\n bannerTitle={settings.banner_title}\n disclaimerText={settings.disclaimer_text}\n />\n </div>\n\n <div className=\"tru-tabs-bar\" role=\"tablist\" aria-label=\"Consent sections\">\n {tabs.map((tab, idx) => (\n <TabButton\n key={tab.key}\n label={tab.label}\n isActive={activeTab === idx}\n onClick={() => setActiveTab(idx)}\n tabId={'tab-' + tab.key}\n panelId={'panel-' + tab.key}\n />\n ))}\n </div>\n\n <div ref={scrollRef} onScroll={handleScroll} className=\"tru-banner-scroll-area\">\n <TabPanel id=\"panel-legitimate\" labelledBy=\"tab-legitimate\" isActive={isOnLegitimateTab}>\n <LegitimateUseContent\n noticePurposes={noticePurposes}\n banner={banner}\n settings={settings}\n companyName={companyName}\n />\n </TabPanel>\n\n <TabPanel id=\"panel-purposes\" labelledBy=\"tab-purposes\" isActive={isOnPurposesTab}>\n <ConsentPurposesContent\n allConsentPurposes={consentPurposes}\n banner={banner}\n onChangePurpose={onChangePurpose}\n settings={settings}\n companyName={companyName}\n />\n </TabPanel>\n\n {/* Warnings moved here: At the end of the scrollable content area */}\n {isOnLegitimateTab && (\n <div className=\"tru-legitimate-disclaimer\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\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>No action is needed — this notice is for your awareness and is logged for transparency.</p>\n </div>\n )}\n\n {isOnPurposesTab && banner?.purposes?.some(p => p.consented === 'declined' || p.consented === false) && (\n <div className=\"tru-warning-bar\" style={{ marginTop: 16 }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\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>Your explicit consent is required to proceed. You may accept or decline, and can update your preferences anytime from the Rights Centre.</p>\n </div>\n )}\n </div>\n\n <div className=\"tru-banner-footer-area\">\n <ModernBannerFooter footerText={settings.footer_text} orgName={companyName} />\n\n <div className=\"tru-actions-row\" style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n {isOnLegitimateTab && (\n <button\n className=\"tru-btn tru-btn-primary\"\n style={{ backgroundColor: primaryColor }}\n onClick={() => setActiveTab(1)}\n >\n {t('next_button') || 'Next'}\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ marginLeft: 6 }}>\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n )}\n\n {isOnPurposesTab && (\n <ModernBannerActions\n onRejectAll={onRejectAll}\n onConsentAll={onConsentAll}\n onAcceptSelected={onAcceptSelected}\n onAcceptMandatory={onAcceptMandatory}\n purposes={banner?.purposes || []}\n actionButtonText={settings.action_button_text}\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={primaryColor}\n isBottomReached={isBottomReached}\n hasUserInteracted={hasUserInteracted}\n minimal={true}\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\nimport LanguageProvider from '../shared/LanguageProvider';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernPurposeCard from '../shared/ModernPurposeCard';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\n\n/**\n * NoticeOnlyBanner\n *\n * Informational banner for collections that have ONLY notice/legitimate-interest purposes.\n * - Read-only purpose list (no toggles — all show \"Always Active\")\n * - Single \"I Understand\" button → fires notice_shown → closes\n * - No Reject All, no Save Preferences\n */\nfunction NoticeOnlyBannerInner({\n banner,\n companyName,\n logoUrl,\n onAcknowledge,\n actionLoading,\n}) {\n const settings = banner?.banner_settings || {};\n const primaryColor = settings.primary_color || '#3b82f6';\n const footerText = settings.footer_text;\n const bannerTitle = settings.banner_title;\n const disclaimerText = settings.disclaimer_text;\n const acknowledgeText = settings.notice_acknowledge_text || 'I Understand';\n\n const [isBottomReached, setIsBottomReached] = useState(false);\n const scrollRef = useRef(null);\n\n const handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n if (scrollHeight - scrollTop <= clientHeight + 5) {\n setIsBottomReached(true);\n }\n };\n\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': primaryColor,\n fontFamily: settings.font_type || 'inherit',\n fontSize: settings.font_size || 'inherit',\n };\n\n return (\n <div\n className=\"rounded-2xl flex flex-col overflow-hidden text-left h-full border\"\n style={{\n ...styleVars,\n backgroundColor: 'var(--banner-bg)',\n color: 'var(--banner-text)',\n borderColor: 'var(--banner-border)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex-shrink-0 pt-3.5 pb-2 px-3 border-b flex flex-col gap-2\"\n style={{\n borderColor: 'var(--banner-border)',\n backgroundColor: 'var(--banner-hover-bg)',\n }}\n >\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logo_url}\n orgName={companyName}\n bannerTitle={bannerTitle}\n disclaimerText={disclaimerText}\n />\n </div>\n\n {/* Purpose Cards — all read-only */}\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"flex-1 px-5 py-2.5 space-y-2.5 overflow-y-auto\"\n style={{ backgroundColor: 'var(--banner-bg)' }}\n >\n {banner?.purposes?.map((p) => (\n <ModernPurposeCard\n key={p.id}\n purpose={p}\n banner={banner}\n onToggle={() => { }} // No-op: notice purposes are read-only\n mandatoryLabel=\"Always Active\"\n />\n ))}\n </div>\n\n {/* Footer + Single Action */}\n <div\n className=\"flex-shrink-0 border-t px-4 py-2.5\"\n style={{\n borderColor: 'var(--banner-border)',\n backgroundColor: 'var(--banner-hover-bg)',\n }}\n >\n {footerText && (\n <ModernBannerFooter\n footerText={footerText}\n orgName={companyName}\n />\n )}\n\n <div className=\"flex justify-center mt-2\">\n <button\n type=\"button\"\n className=\"px-8 py-2.5 rounded-lg font-semibold text-white text-sm transition-all duration-200 hover:opacity-90 disabled:opacity-50\"\n style={{ backgroundColor: primaryColor }}\n onClick={onAcknowledge}\n disabled={actionLoading}\n >\n {actionLoading ? 'Processing...' : acknowledgeText}\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default function NoticeOnlyBanner(props) {\n return (\n <LanguageProvider>\n <NoticeOnlyBannerInner {...props} />\n </LanguageProvider>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { translateDynamic } from '../../runtime/purposeAdapter';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernBannerActions from '../shared/ModernBannerActions';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\n\nfunction PurposeRow({ purpose, i18n, t, onChangePurpose, finalPrimaryColor, settings }) {\n const isMandatory = purpose.is_mandatory;\n const isAccepted = purpose.consented === 'accepted' || purpose.consented === true;\n const mandatoryLabel = settings.mandatory_label || t('necessary') || 'NECESSARY';\n\n const dataElements = purpose.data_elements || [];\n const _legalEntities = purpose.legal_entities || [];\n const _tools = purpose.tools || [];\n const dataProcessors = [..._legalEntities, ..._tools];\n\n return (\n <tr className=\"border-b transition-colors hover:bg-gray-50/50\" style={{ borderColor: 'var(--banner-border)' }}>\n {/* Column 1: Purpose Name & Description */}\n <td className=\"py-3 px-4 min-w-[200px]\">\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-2 mb-0.5\">\n <span className=\"font-bold text-[0.85em]\" style={{ color: 'var(--banner-text)' }}>\n {translateDynamic(purpose.name, i18n)}\n </span>\n {isMandatory && (\n <span className=\"text-[0.6em] uppercase font-black px-1.5 py-0.5 rounded-md tracking-wider border shrink-0\"\n style={{ backgroundColor: 'var(--banner-danger-bg)', color: 'var(--banner-danger-text)', borderColor: 'var(--banner-danger-text)' }}>\n {mandatoryLabel}\n </span>\n )}\n </div>\n <p className=\"text-[0.7em] leading-tight text-gray-500 line-clamp-2 max-w-[400px]\" title={translateDynamic(purpose.description, i18n)}>\n {translateDynamic(purpose.description, i18n)}\n </p>\n </div>\n </td>\n\n {/* Column 2: Data Elements */}\n <td className=\"py-3 px-3 min-w-[250px]\">\n <div className=\"flex flex-wrap gap-1\">\n {dataElements.length > 0 ? dataElements.map((item, idx) => (\n <span key={idx} className=\"px-2 py-0.5 rounded text-[0.65em] border whitespace-nowrap\"\n style={{ backgroundColor: 'var(--banner-card-bg)', borderColor: 'var(--banner-border)', color: 'var(--banner-text-muted)' }}>\n {translateDynamic(item.name || item, i18n)}\n </span>\n )) : <span className=\"text-[0.65em] text-gray-400 italic\">No data elements</span>}\n </div>\n </td>\n\n {/* Column 3: Data Processors */}\n <td className=\"py-3 px-3 min-w-[220px]\">\n <div className=\"flex flex-wrap gap-1\">\n {dataProcessors.length > 0 ? dataProcessors.map((item, idx) => (\n <span key={idx} className=\"px-2 py-0.5 rounded text-[0.65em] border whitespace-nowrap\"\n style={{ backgroundColor: 'var(--banner-card-bg)', borderColor: 'var(--banner-border)', color: 'var(--banner-text-muted)' }}>\n {translateDynamic(item.name || item, i18n)}\n </span>\n )) : <span className=\"text-[0.65em] text-gray-400 italic\">No processors</span>}\n </div>\n </td>\n\n {/* Column 4: Expiration */}\n <td className=\"py-3 px-3 min-w-[120px]\">\n <span className=\"text-[0.7em] text-gray-500\">\n {purpose.expiry_period ? `Expires in ${purpose.expiry_period}` : '-'}\n </span>\n </td>\n\n {/* Column 5: Action / Status */}\n <td className=\"py-3 px-4 text-right\">\n <div className=\"flex items-center justify-end gap-3\">\n {!isMandatory ? (\n <label className=\"switch scale-[0.8] origin-right cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={isAccepted}\n onChange={(e) => onChangePurpose(purpose.id, e.target.checked ? 'accepted' : 'declined')}\n />\n <span className=\"track\" />\n <span className=\"thumb\" />\n </label>\n ) : (\n <div className=\"w-10 h-5\" /> // Spacer for alignment\n )}\n </div>\n </td>\n </tr>\n );\n}\n\nexport default function InlineSingleRowUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n hasUserInteracted,\n primaryColor,\n actionLoading\n}) {\n const { t, i18n } = useTranslation();\n const settings = banner?.banner_settings || {};\n const finalPrimaryColor = primaryColor || settings.primary_color || '#3b82f6';\n const purposes = banner?.purposes || [];\n\n if (purposes.length === 0) return null;\n\n const footerText = settings.footer_text;\n\n return (\n <div className=\"w-full h-full bg-white border rounded-xl overflow-hidden shadow-2xl flex flex-col\" style={{ borderColor: 'var(--banner-border)' }}>\n {/* Header Area */}\n <div className=\"flex-shrink-0 pt-3.5 pb-2 px-4 border-b bg-gray-50 relative z-20\" style={{ borderColor: 'var(--banner-border)' }}>\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logo_url}\n orgName={companyName}\n bannerTitle={settings.banner_title}\n disclaimerText={settings.disclaimer_text}\n />\n </div>\n\n {/* Spreadsheet Table Container */}\n <div className=\"flex-1 overflow-x-auto overflow-y-auto w-full scrollbar-thin scrollbar-thumb-gray-200\">\n <table className=\"w-full border-collapse text-left border-hidden\">\n <thead className=\"bg-gray-50 sticky top-0 z-10\" style={{ backgroundColor: 'var(--banner-hover-bg)' }}>\n <tr className=\"border-b\" style={{ borderColor: 'var(--banner-border)' }}>\n <th className=\"py-4 px-4 text-[0.7em] font-black uppercase tracking-wider text-gray-500\">Purpose / Description</th>\n <th className=\"py-4 px-3 text-[0.7em] font-black uppercase tracking-wider text-gray-500\">Data Elements</th>\n <th className=\"py-4 px-3 text-[0.7em] font-black uppercase tracking-wider text-gray-500\">Data Processors</th>\n <th className=\"py-4 px-3 text-[0.7em] font-black uppercase tracking-wider text-gray-500\">Expiration</th>\n <th className=\"py-4 px-4 text-[0.7em] font-black uppercase tracking-wider text-gray-500 text-right\">Status</th>\n </tr>\n </thead>\n <tbody>\n {purposes.map(purpose => (\n <PurposeRow\n key={purpose.id}\n purpose={purpose}\n i18n={i18n}\n t={t}\n onChangePurpose={onChangePurpose}\n finalPrimaryColor={finalPrimaryColor}\n settings={settings}\n />\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Bottom Footer Actions */}\n <div className=\"p-4 border-t bg-gray-50/50\" style={{ borderColor: 'var(--banner-border)' }}>\n {footerText && (\n <div className=\"mb-4\">\n <ModernBannerFooter\n footerText={footerText}\n orgName={companyName}\n compact={true}\n />\n </div>\n )}\n\n <ModernBannerActions\n onRejectAll={onRejectAll}\n onConsentAll={onConsentAll}\n onAcceptSelected={onAcceptSelected}\n onAcceptMandatory={onAcceptMandatory}\n isLoading={actionLoading}\n actionButtonText={settings.action_button_text}\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 purposes={purposes}\n isBottomReached={true} // Always allow actions in spreadsheet view\n showAcceptAll={true}\n />\n </div>\n </div>\n );\n}\n\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernBannerActions from '../shared/ModernBannerActions';\nimport CollapsibleDataSection from '../shared/CollapsibleDataSection';\n\n// Individual compact row\nfunction CompactPurposeRow({ purpose, banner, onToggle, isExpanded, toggleExpand }) {\n const { t } = useTranslation();\n const settings = banner?.banner_settings || {};\n\n // State for internal sections (Data Elements / Processors)\n const [openSections, setOpenSections] = React.useState({});\n\n const toggleSection = (section) => {\n setOpenSections(prev => ({ ...prev, [section]: !prev[section] }));\n };\n\n const isMandatory = purpose.is_mandatory;\n const isAccepted = purpose.consented === 'accepted' || purpose.consented === true;\n const primaryColor = settings.primary_color || '#3b82f6';\n const mandatoryLabel = settings.mandatory_label || t('necessary') || 'NECESSARY';\n\n // Use per-purpose entities\n const dataElements = purpose.data_elements || [];\n const processingActivities = purpose.processing_activities || [];\n const _legalEntities = purpose.legal_entities || [];\n const _tools = purpose.tools || [];\n const dataProcessors = [..._legalEntities, ..._tools];\n\n return (\n <div className=\"border rounded-lg mb-2 overflow-hidden bg-white\" style={{ borderColor: isExpanded ? primaryColor : 'var(--banner-border)' }}>\n <div\n className=\"flex items-center justify-between p-3 gap-3 cursor-pointer hover:bg-gray-50 transition-colors\"\n onClick={toggleExpand}\n >\n {/* Left: Title & Expand Icon */}\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n <svg\n className={`w-4 h-4 text-gray-400 transition-transform ${isExpanded ? 'rotate-90' : ''}`}\n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n <h3 className=\"font-bold text-[0.85em] truncate text-gray-800\">{purpose.name}</h3>\n {purpose.expiry_period && (\n <span className=\"text-[0.7em] text-gray-400 font-normal italic ml-1 shrink-0\">\n (Expires in {purpose.expiry_period})\n </span>\n )}\n </div>\n\n {/* Right: Actions */}\n <div className=\"flex items-center gap-3 shrink-0\" onClick={(e) => e.stopPropagation()}>\n {isMandatory ? (\n <span className=\"text-[0.65em] uppercase font-extrabold px-1.5 py-0.5 rounded-md tracking-wider border\"\n style={{ backgroundColor: 'var(--banner-danger-bg)', color: 'var(--banner-danger-text)', borderColor: 'var(--banner-danger-text)' }}>\n {mandatoryLabel}\n </span>\n ) : (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <span className=\"text-[0.7em] font-medium uppercase text-gray-500 hidden sm:inline\">\n {isAccepted ? t('accepted') || 'Accepted' : t('declined') || 'Declined'}\n </span>\n <div className=\"switch scale-[0.8] origin-right m-0\">\n <input\n type=\"checkbox\"\n checked={isAccepted}\n onChange={(e) => onToggle(purpose.id, e.target.checked ? 'accepted' : 'declined')}\n />\n <span className=\"track\" />\n <span className=\"thumb\" />\n </div>\n </label>\n )}\n </div>\n </div>\n\n {/* Expanded Content */}\n {isExpanded && (\n <div className=\"p-3 pt-0 border-t bg-gray-50 bg-opacity-30\" style={{ borderColor: 'var(--banner-border)' }}>\n <p className=\"text-[0.8em] text-gray-600 mt-2 mb-3 leading-relaxed\">\n {purpose.description}\n </p>\n\n <div className=\"space-y-2\">\n {processingActivities.length > 0 && (\n <div className=\"text-[0.8em] text-gray-500\">\n <span className=\"font-semibold text-gray-700\">Activities:</span>{' '}\n {processingActivities.map(a => a.name || a).join(', ')}\n </div>\n )}\n {dataElements.length > 0 && (\n <CollapsibleDataSection\n title={t('data_elements') || 'Data Elements'}\n items={dataElements}\n isOpen={!!openSections.elements}\n onToggle={() => toggleSection('elements')}\n chevronLeft={true}\n />\n )}\n {settings.show_processors !== false && dataProcessors.length > 0 && (\n <CollapsibleDataSection\n title={t('data_processors') || 'Data Processors'}\n items={dataProcessors}\n isOpen={!!openSections.processors}\n onToggle={() => toggleSection('processors')}\n chevronLeft={true}\n />\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default function CompactListUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n hasUserInteracted,\n actionLoading,\n error,\n}) {\n const { t } = useTranslation();\n const settings = banner?.banner_settings || {};\n\n const bannerTitle = settings.banner_title;\n const disclaimerText = settings.disclaimer_text;\n const footerText = settings.footer_text;\n const purposes = banner?.purposes || [];\n\n // State to track which rows are expanded (default to first purpose if present)\n const [expandedRows, setExpandedRows] = useState(\n purposes.length > 0 ? { [purposes[0].id]: true } : {}\n );\n\n const toggleRow = (id) => {\n setExpandedRows(prev => ({\n ...prev,\n [id]: !prev[id]\n }));\n };\n\n return (\n <div className=\"flex flex-col h-full w-full bg-white rounded-xl shadow-2xl overflow-hidden\">\n <div className=\"flex-shrink-0 pt-3.5 pb-2 px-4 border-b bg-gray-50\" style={{ borderColor: 'var(--banner-border)' }}>\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logo_url}\n orgName={companyName}\n bannerTitle={bannerTitle}\n disclaimerText={disclaimerText}\n />\n </div>\n\n <div className=\"flex-1 px-4 py-3 overflow-y-auto bg-white\">\n {purposes.map((p) => (\n <CompactPurposeRow\n key={p.id}\n purpose={p}\n banner={banner}\n onToggle={onChangePurpose}\n isExpanded={!!expandedRows[p.id]}\n toggleExpand={() => toggleRow(p.id)}\n />\n ))}\n </div>\n\n <div className=\"flex-shrink-0 border-t px-4 py-3 bg-gray-50\" style={{ borderColor: 'var(--banner-border)' }}>\n <div className=\"mb-3\">\n <ModernBannerFooter\n footerText={footerText}\n orgName={companyName}\n compact={true}\n />\n </div>\n <ModernBannerActions\n onRejectAll={onRejectAll}\n onConsentAll={onConsentAll}\n onAcceptSelected={onAcceptSelected}\n onAcceptMandatory={onAcceptMandatory}\n isLoading={actionLoading}\n actionButtonText={settings.action_button_text}\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={settings.primary_color}\n purposes={purposes}\n isBottomReached={true} // For compact list, we don't force scroll\n />\n </div>\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernBannerActions from '../shared/ModernBannerActions';\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 SplitPaneUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n hasUserInteracted,\n actionLoading,\n primaryColor,\n secondaryColor\n}) {\n const { t, i18n } = useTranslation();\n const settings = banner?.banner_settings || {};\n const purposes = banner?.purposes || [];\n\n const bannerTitle = settings.banner_title;\n const disclaimerText = settings.disclaimer_text;\n const footerText = settings.footer_text;\n const finalPrimaryColor = settings.primary_color || primaryColor || '#3b82f6';\n const mandatoryLabel = settings.mandatory_label || t('necessary') || 'NECESSARY';\n\n const [selectedPurposeId, setSelectedPurposeId] = useState(purposes.length > 0 ? purposes[0].id : null);\n\n const activePurpose = purposes.find(p => p.id === selectedPurposeId) || purposes[0];\n\n return (\n <div\n className=\"flex flex-col mx-auto bg-white rounded-xl shadow-2xl overflow-hidden text-left\"\n style={{\n height: '85vh',\n width: '100%',\n border: '1px solid var(--banner-border)',\n backgroundColor: 'var(--banner-bg)',\n color: 'var(--banner-text)'\n }}\n >\n {/* Header - Removing extra padding/margins */}\n <div className=\"flex-shrink-0 pt-3 px-4 border-b flex flex-col\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logo_url}\n orgName={companyName}\n bannerTitle={bannerTitle}\n disclaimerText={disclaimerText}\n />\n </div>\n\n {/* Split Content Area */}\n <div className=\"flex flex-1 overflow-hidden min-h-0\">\n\n {/* Left Side: Purpose List */}\n <div className=\"w-1/3 border-r overflow-y-auto\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-bg)' }}>\n {purposes.map((p) => {\n const isMandatory = p.is_mandatory;\n const isAccepted = p.consented === 'accepted' || p.consented === true;\n const isSelected = p.id === selectedPurposeId;\n\n return (\n <div\n key={p.id}\n onClick={() => setSelectedPurposeId(p.id)}\n className={`p-4 border-b cursor-pointer transition-colors ${isSelected ? 'bg-[var(--banner-hover-bg)]' : 'hover:bg-[var(--banner-hover-bg)]/50'}`}\n style={{ borderColor: 'var(--banner-border)' }}\n >\n <div className=\"flex items-center justify-between mb-1\">\n <div className=\"flex flex-col flex-1 min-w-0\">\n <h3 className={`font-bold text-[0.95em] truncate ${isSelected ? 'text-[var(--banner-primary-color)]' : ''}`}>\n {translateDynamic(p.name, i18n)}\n </h3>\n {p.expiry_period && (\n <span className=\"text-[0.7em] text-[var(--banner-text-muted)] italic font-normal\">\n Expires in {p.expiry_period}\n </span>\n )}\n </div>\n <div onClick={(e) => e.stopPropagation()} className=\"shrink-0 ml-2\">\n {isMandatory ? (\n <span className=\"text-[0.65em] uppercase font-extrabold px-2 py-0.5 rounded-md tracking-wider border\"\n style={{ backgroundColor: 'var(--banner-danger-bg)', color: 'var(--banner-danger-text)', borderColor: 'var(--banner-danger-text)' }}>\n {mandatoryLabel}\n </span>\n ) : (\n <label className=\"switch scale-75 origin-right\">\n <input\n type=\"checkbox\"\n checked={isAccepted}\n onChange={(e) => onChangePurpose(p.id, e.target.checked ? 'accepted' : 'declined')}\n />\n <span className=\"track\" />\n <span className=\"thumb\" />\n </label>\n )}\n </div>\n </div>\n <p className=\"text-[0.8em] text-[var(--banner-text-muted)] line-clamp-2 leading-tight\">\n {translateDynamic(p.description, i18n)}\n </p>\n </div>\n );\n })}\n </div>\n\n {/* Right Side: Detail View */}\n <div className=\"flex-1 overflow-y-auto p-6 bg-white\" style={{ backgroundColor: 'var(--banner-bg)' }}>\n {activePurpose ? (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-bold mb-3\" style={{ color: 'var(--banner-text)' }}>\n {translateDynamic(activePurpose.name, i18n)}\n </h2>\n <p className=\"text-[0.95em] leading-relaxed\" style={{ color: 'var(--banner-text-muted)' }}>\n {translateDynamic(activePurpose.description, i18n)}\n </p>\n </div>\n\n {/* Processing Activities */}\n {activePurpose.processing_activities?.length > 0 && (\n <div className=\"border-t pt-6\" style={{ borderColor: 'var(--banner-border)' }}>\n <h4 className=\"text-[0.85em] font-bold mb-2 uppercase tracking-wide\" style={{ color: 'var(--banner-text)' }}>\n {t('processing_activities') || 'Processing Activities'}\n </h4>\n <div className=\"flex flex-wrap gap-1.5\">\n {activePurpose.processing_activities.map((a, idx) => (\n <span key={idx} className=\"px-2.5 py-1 rounded-full text-[0.75em] font-medium border\"\n style={{ backgroundColor: 'var(--banner-btn-secondary-bg)', color: 'var(--banner-text-muted)', borderColor: 'var(--banner-btn-secondary-border)' }}>\n {translateDynamic(a.name || a, i18n)}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Data Elements (Direct List) */}\n {activePurpose.data_elements?.length > 0 && (\n <div className=\"border-t pt-6\" style={{ borderColor: 'var(--banner-border)' }}>\n <h4 className=\"text-[0.85em] font-bold mb-2 uppercase tracking-wide\" style={{ color: 'var(--banner-text)' }}>\n {t('data_elements')} ({activePurpose.data_elements.length})\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n {activePurpose.data_elements.map((item, idx) => (\n <span key={idx} className=\"px-3 py-1 rounded-full text-[0.8em] border\"\n style={{ backgroundColor: 'var(--banner-bg)', borderColor: 'var(--banner-border)', color: 'var(--banner-text-muted)' }}>\n {translateDynamic(item.name || item, i18n)}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Data Processors (Direct List) */}\n {settings.show_processors !== false && (activePurpose.legal_entities?.length > 0 || activePurpose.tools?.length > 0) && (\n <div className=\"border-t pt-6\" style={{ borderColor: 'var(--banner-border)' }}>\n <h4 className=\"text-[0.85em] font-bold mb-2 uppercase tracking-wide\" style={{ color: 'var(--banner-text)' }}>\n {t('data_processors') || 'Data Processors'} ({[...(activePurpose.legal_entities || []), ...(activePurpose.tools || [])].length})\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n {[...(activePurpose.legal_entities || []), ...(activePurpose.tools || [])].map((item, idx) => (\n <span key={idx} className=\"px-3 py-1 rounded-full text-[0.8em] border\"\n style={{ backgroundColor: 'var(--banner-bg)', borderColor: 'var(--banner-border)', color: 'var(--banner-text-muted)' }}>\n {translateDynamic(item.name || item, i18n)}\n </span>\n ))}\n </div>\n </div>\n )}\n\n </div>\n ) : (\n <div className=\"h-full flex items-center justify-center text-[var(--banner-text-muted)] italic\">\n {t('select_purpose_hint') || 'Select a purpose from the left to view details'}\n </div>\n )}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"flex-shrink-0 border-t px-4 py-2\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\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={purposes}\n isLoading={actionLoading}\n actionButtonText={settings.action_button_text}\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={true}\n isSplitLayout={true}\n showAcceptAll={true}\n hasUserInteracted={hasUserInteracted}\n />\n </div>\n </div>\n );\n}\n","/**\n * templateRegistry.js\n *\n * Maps template keys (from banner_settings) to React components.\n * Replaces the if/else tree in TruConsentModal.\n */\n\nimport BannerUI from '../templates/general_consent/BannerUI';\nimport PreferencesModalUI from '../templates/general_consent/PreferencesModalUI';\nimport TabbedBannerUI from '../templates/general_consent/TabbedBannerUI';\nimport CookieBannerUI from '../templates/cookie_consent/CookieBannerUI';\nimport NoticeOnlyBanner from '../templates/notice_only/NoticeOnlyBanner';\nimport InlineSingleRowUI from '../templates/general_consent/InlineSingleRowUI';\nimport CompactListUI from '../templates/general_consent/CompactListUI';\nimport SplitPaneUI from '../templates/general_consent/SplitPaneUI';\n\nconst registry = {\n center_modal: BannerUI,\n tabbed_banner: TabbedBannerUI,\n preferences_modal: PreferencesModalUI,\n floating_card: CookieBannerUI,\n notice_only: NoticeOnlyBanner,\n inline_single_row: InlineSingleRowUI,\n general_compact_list: CompactListUI,\n general_split_pane: SplitPaneUI,\n};\n\n/**\n * Get the template component for a given key.\n * Falls back to BannerUI if the key is not recognized.\n *\n * @param {string} key - Template key from banner_settings\n * @returns {React.Component} Template component\n */\nexport const getTemplate = (key) => registry[key] || registry['center_modal'];\n\n/**\n * Check if a given key is a registered template.\n *\n * @param {string} key\n * @returns {boolean}\n */\nexport const isRegistered = (key) => key in registry;\n","import React, { useState, useRef, useEffect } from 'react';\nimport LanguageProvider from '../shared/LanguageProvider';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernPurposeCard from '../shared/ModernPurposeCard';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernBannerActions from '../shared/ModernBannerActions';\n\nexport default function BannerUI({ banner, companyName, logoUrl, onChangePurpose, onRejectAll, onConsentAll, onAcceptSelected, onAcceptMandatory, hasUserInteracted, 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;\n const bannerTitle = settings.banner_title;\n const disclaimerText = settings.disclaimer_text;\n const actionButtonText = settings.action_button_text;\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=\"rounded-2xl flex flex-col overflow-hidden text-left h-full border\" style={{ ...styleVars, backgroundColor: 'var(--banner-bg)', color: 'var(--banner-text)', borderColor: 'var(--banner-border)' }}>\n <div className=\"flex-shrink-0 pt-3.5 pb-2 px-3 border-b flex flex-col gap-2\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\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\"\n style={{ backgroundColor: 'var(--banner-bg)' }}\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 border rounded-lg flex items-start gap-2.5 animate-in fade-in slide-in-from-top-1 duration-200\"\n style={{ backgroundColor: 'var(--banner-warning-bg)', borderColor: 'var(--banner-warning-border)' }}>\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=\"currentColor\" strokeWidth=\"2.5\"\n style={{ color: 'var(--banner-warning-text)' }}\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] leading-normal font-medium\" style={{ color: 'var(--banner-warning-text)' }}>\n {settings.warning_message}\n </p>\n </div>\n )}\n </div>\n\n <div className=\"flex-shrink-0 border-t px-4 py-1.5\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\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 hasUserInteracted={hasUserInteracted}\n isSplitLayout={banner?.banner_settings?.general_notice_template === 'preferences_modal'}\n />\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernPurposeCard from '../shared/ModernPurposeCard';\n\nfunction PreferencesModalUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n onClose,\n settings\n}) {\n const { t, i18n } = useTranslation();\n // Use banner_settings for content if available\n const bannerSettings = banner?.banner_settings || settings || {};\n const finalPrimaryColor = bannerSettings.primary_color || '#3b82f6';\n\n const styleVars = {\n '--preferences-primary-color': finalPrimaryColor,\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 block w-full relative\">\n <ModernBannerHeader\n logoUrl={logoUrl || bannerSettings.logo_url}\n orgName={orgName}\n bannerTitle={bannerSettings.banner_title}\n disclaimerText={bannerSettings.disclaimer_text}\n showLanguage={true}\n />\n </div>\n\n\n <div className=\"preferences-purpose-list scrollbar-thin scrollbar-thumb-gray-200 mt-2\">\n {purposes.map((purpose) => (\n <div key={purpose.id} className=\"preferences-purpose-card-wrapper mb-3\">\n <ModernPurposeCard\n purpose={purpose}\n banner={banner}\n onToggle={onChangePurpose}\n />\n </div>\n ))}\n </div>\n\n <div className=\"preferences-footer-container\">\n {settings.footer_text && (\n <div className=\"preferences-footer-text\">\n <ModernBannerFooter\n footerText={settings.footer_text}\n orgName={companyName}\n compact={true}\n />\n </div>\n )}\n <div className=\"preferences-actions\">\n <button\n type=\"button\"\n className=\"preferences-btn preferences-btn-essential\"\n onClick={onAcceptMandatory}\n >\n {settings.only_necessary_text || t('only_necessary')}\n </button>\n <div className=\"preferences-actions-right\">\n <button\n type=\"button\"\n className=\"preferences-btn preferences-btn-save\"\n style={{ color: finalPrimaryColor, border: '1px solid var(--banner-border)' }}\n onClick={onAcceptSelected}\n >\n {settings.save_preferences_text || t('save_preferences')}\n </button>\n <button\n type=\"button\"\n className=\"preferences-btn preferences-btn-accept\"\n style={{ backgroundColor: '#10b981', color: 'white' }}\n onClick={onConsentAll}\n >\n {settings.action_button_text || settings.accept_all_text || t('accept_all')}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default PreferencesModalUI;\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","/**\n * useConsentEngine.js\n *\n * Custom React hook that extracts all consent logic from TruConsentModal\n * into a reusable, testable unit.\n *\n * Manages: purpose normalization, dynamic filtering, action handlers,\n * event logging (with notice_shown separation), and H-Case intercept.\n */\n\nimport { useState, useRef, useCallback, useMemo, useEffect } from 'react';\nimport { normalizePurposes, filterDynamicPurposes } from './purposeAdapter';\nimport { deriveUIState } from './bannerState';\n\n/** Generate a simple session ID for metadata tracking */\nfunction generateSessionId() {\n return `sess_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\n/**\n * @param {object} options\n * @param {object} options.bannerData - Raw banner data from API\n * @param {string} options.apiUrl - Full API base (e.g. https://api.truconsent.com)\n * @param {string} options.apiBaseUrl - Short base URL override\n * @param {string} options.apiKey - API key (mutually exclusive with token for auth)\n * @param {string} options.token - JWT token\n * @param {string} options.effectiveOrgId - Resolved organization ID\n * @param {string} options.userId - User/device ID\n * @param {string} options.assetId - Asset ID (required for API key, optional for JWT)\n * @param {function} options.onSubmit - Optional custom submission handler\n * @param {Array} options.previousConsent - Previous consent records for dynamic filtering\n * @param {number} options.bannerFetchAt - Absolute timestamp when banner fetch completed\n * @returns {object} Consent engine interface\n */\nconst EMPTY_ARRAY = [];\n\nexport default function useConsentEngine({\n bannerData,\n apiUrl,\n apiBaseUrl,\n apiKey,\n token,\n effectiveOrgId,\n userId,\n assetId,\n onSubmit,\n previousConsent = EMPTY_ARRAY,\n bannerFetchAt = null,\n}) {\n // --- Performance Tracking ---\n const [bannerDisplayAt, setBannerDisplayAt] = useState(null);\n\n // Capture display time when bannerData becomes available\n useEffect(() => {\n if (bannerData && !bannerDisplayAt) {\n setBannerDisplayAt(Date.now());\n }\n }, [bannerData, bannerDisplayAt]);\n\n // --- Request ID & Session ID (stable for this banner render) ---\n const [requestId] = useState(() => crypto.randomUUID());\n const [sessionId] = useState(() => generateSessionId());\n\n // --- Refs for action gating ---\n const actionTakenRef = useRef(false);\n const actionRunningRef = useRef(false);\n const noticeLoggedAtRef = useRef(null);\n\n // --- Loading / error state ---\n const [actionLoading, setActionLoading] = useState(false);\n const [error, setError] = useState('');\n\n // --- H-Case state ---\n const [hCaseData, setHCaseData] = useState({ show: false, action: null, intendedPurposes: null });\n\n // --- User interaction tracking ---\n const [hasUserInteracted, setHasUserInteracted] = useState(false);\n\n // --- Normalize & filter purposes ---\n const defaultSelection = bannerData?.banner_settings?.default_selection || 'mandatory_only';\n\n const initialPurposes = useMemo(() => {\n const normalized = normalizePurposes(bannerData?.purposes, defaultSelection);\n return filterDynamicPurposes(normalized, previousConsent);\n }, [bannerData?.purposes, defaultSelection, previousConsent]);\n\n const [purposes, setPurposes] = useState(initialPurposes);\n\n // *** FIX: Sync purposes when bannerData loads after initial render ***\n useEffect(() => {\n if (initialPurposes.length > 0) {\n setPurposes(initialPurposes);\n }\n }, [initialPurposes]);\n\n // --- UI State ---\n const uiState = useMemo(() => deriveUIState(purposes), [purposes]);\n\n // --- Build auth headers ---\n const buildHeaders = useCallback(() => {\n const headers = {\n 'Content-Type': 'application/json',\n 'X-Org-Id': effectiveOrgId,\n };\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n } else if (apiKey) {\n headers['X-API-Key'] = apiKey;\n }\n return headers;\n }, [token, apiKey, effectiveOrgId]);\n\n // --- Send notice_shown for notice purposes ---\n const sendNoticeShown = useCallback(async (metadata = {}) => {\n if (uiState.noticePurposes.length === 0) return;\n\n try {\n const formattedNoticePurposes = uiState.noticePurposes.map(p => ({\n purposeId: p.id,\n version: p.version || 'v1.0',\n consented: 'accepted',\n }));\n\n const collectionPointVersion = bannerData?.version || 'v1.0';\n\n const noticeMetadata = {\n sessionId,\n ...metadata,\n event_type: 'notice_shown',\n performance: {\n banner_fetched_at: bannerFetchAt,\n banner_displayed_at: bannerDisplayAt,\n }\n };\n\n const payload = {\n userId,\n requestId,\n assetId: assetId || undefined,\n consentLanguage: 'en',\n collectionPointId: bannerData?.collection_point,\n collectionPointVersion,\n consentTimestamp: Date.now(),\n source: 'npm',\n purposes: formattedNoticePurposes,\n action: 'notice_shown',\n metadata: noticeMetadata,\n };\n\n if (onSubmit) {\n await onSubmit(payload);\n } else {\n const requestUrl = apiUrl\n ? `${apiUrl}/api/v1/internal/consent/${bannerData.collection_point}/consent`\n : `${apiBaseUrl}/api/v1/internal/consent/${bannerData.collection_point}/consent`;\n\n const res = await fetch(requestUrl, {\n method: 'POST',\n headers: buildHeaders(),\n keepalive: true,\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n console.warn(`[TruConsent] notice_shown log failed with status ${res.status}`);\n }\n }\n // Mark when notice logging completed\n noticeLoggedAtRef.current = Date.now();\n } catch (e) {\n console.error('Failed to log notice_shown:', e);\n }\n }, [uiState.noticePurposes, userId, requestId, assetId, onSubmit, apiUrl, apiBaseUrl, bannerData, buildHeaders, bannerFetchAt, bannerDisplayAt, sessionId]);\n\n // Automatically log notice_shown for notice purposes when displayed\n useEffect(() => {\n if (bannerDisplayAt && bannerData && uiState.noticePurposes.length > 0) {\n sendNoticeShown();\n }\n }, [bannerDisplayAt, bannerData, uiState.noticePurposes.length, sendNoticeShown]);\n\n const sendLogEvent = useCallback(async (action, purposePayload, metadata) => {\n if (!bannerData || actionRunningRef.current) return;\n\n if (action !== 'no_action') {\n actionTakenRef.current = true;\n }\n\n actionRunningRef.current = true;\n try {\n // Build purposes in the required format: purposeId, version, consented\n const rawPurposes = purposePayload || purposes;\n const formattedPurposes = rawPurposes.map(p => ({\n purposeId: p.id,\n version: p.version || 'v1.0',\n consented: p.consented === true ? 'accepted' : p.consented === false ? 'declined' : (p.consented || 'declined'),\n }));\n\n const collectionPointVersion = bannerData?.version || 'v1.0';\n\n const payload = {\n userId,\n requestId,\n assetId: assetId || undefined,\n consentLanguage: 'en',\n collectionPointId: bannerData?.collection_point,\n collectionPointVersion,\n consentTimestamp: Date.now(),\n source: 'npm',\n purposes: formattedPurposes,\n action,\n metadata: {\n sessionId,\n ...metadata,\n collection_point_version: collectionPointVersion,\n performance: {\n banner_fetched_at: bannerFetchAt,\n banner_displayed_at: bannerDisplayAt,\n user_interaction_at: Date.now(),\n notice_logged_at: noticeLoggedAtRef.current,\n }\n },\n };\n\n if (onSubmit) {\n await onSubmit(payload);\n } else {\n // Unified endpoint: POST /v1/consent/{cp_id}\n const requestUrl = apiUrl\n ? `${apiUrl}/api/v1/internal/consent/${bannerData.collection_point}/consent`\n : `${apiBaseUrl}/api/v1/internal/consent/${bannerData.collection_point}/consent`;\n\n const res = await fetch(requestUrl, {\n method: 'POST',\n headers: buildHeaders(),\n keepalive: true,\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n if (res.status === 401) throw new Error('Unauthorized - Invalid API key');\n if (res.status === 403) throw new Error('Forbidden - Your origin or API key scope is not allowed to record consent');\n if (res.status === 429) throw new Error('Rate limit exceeded - Please try again later');\n throw new Error('Failed to record consent event');\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 }, [bannerData, userId, purposes, requestId, assetId, onSubmit, apiUrl, apiBaseUrl, buildHeaders, bannerFetchAt, bannerDisplayAt, sessionId]);\n\n // --- Toggle a single purpose ---\n const togglePurpose = useCallback((purposeId, newStatus) => {\n setHasUserInteracted(true);\n setPurposes(prev =>\n prev.map(p => p.id === purposeId ? { ...p, consented: newStatus } : p)\n );\n }, []);\n\n // --- H-Case intercept check ---\n // Only triggers when a MANDATORY consent purpose is NOT accepted\n const checkHCaseIntercept = useCallback((action, customPurposes = null) => {\n const targetPurposes = customPurposes || purposes;\n const hasDeclinedMandatory = targetPurposes.some(\n p => p.is_mandatory && p.legalBasis === 'consent' &&\n (p.consented === 'declined' || p.consented === false)\n );\n\n if (hasDeclinedMandatory && !hCaseData.show) {\n setHCaseData({ show: true, action, intendedPurposes: targetPurposes });\n return true; // intercepted\n }\n return false;\n }, [purposes, hCaseData.show]);\n\n // =====================================================================\n // ACTION HANDLERS\n // =====================================================================\n\n /** Accept All: Approved for all purposes */\n const acceptAll = useCallback(async (metadata = {}) => {\n setActionLoading(true);\n setError('');\n try {\n const acceptedPurposes = purposes.map(p => ({\n ...p,\n consented: 'accepted',\n }));\n\n const enhancedMetadata = { ...metadata, button_used: 'accept_all' };\n await sendLogEvent('Approved', acceptedPurposes, enhancedMetadata);\n return 'Approved';\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n }\n }, [purposes, sendLogEvent]);\n\n /** Reject All: Declined for all purposes */\n const rejectAll = useCallback(async (metadata = {}) => {\n const declinedPurposes = purposes.map(p => ({\n ...p,\n consented: 'declined',\n }));\n\n // Intercept if mandatory consent is being declined\n if (checkHCaseIntercept('Declined', declinedPurposes)) return null;\n\n setActionLoading(true);\n setError('');\n try {\n const enhancedMetadata = { ...metadata, button_used: 'reject_all' };\n await sendLogEvent('Declined', declinedPurposes, enhancedMetadata);\n return 'Declined';\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n }\n }, [purposes, checkHCaseIntercept, sendLogEvent]);\n\n /** Only Necessary: accept mandatory, decline optional */\n const onlyNecessary = useCallback(async (metadata = {}) => {\n setActionLoading(true);\n setError('');\n try {\n // Construct payload: mandatory accepted, optional declined\n const mandatoryPurposes = purposes.map(p => ({\n ...p,\n consented: p.is_mandatory ? 'accepted' : 'declined',\n }));\n\n const enhancedMetadata = { ...metadata, button_used: 'only_necessary' };\n\n // If there are optional purposes, it's partial; otherwise approved\n const hasOptional = purposes.some(p => !p.is_mandatory && p.legalBasis === 'consent');\n const action = hasOptional ? 'Partially Consented' : 'Approved';\n\n await sendLogEvent(action, mandatoryPurposes, enhancedMetadata);\n return action;\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n }\n }, [purposes, sendLogEvent]);\n\n /** Save Preferences / I Consent */\n const savePreferences = useCallback(async (metadata = {}) => {\n // Intercept if mandatory consent is not accepted\n const hasDeclinedMandatory = purposes.some(\n p => p.is_mandatory && p.legalBasis === 'consent' &&\n (p.consented === 'declined' || p.consented === false)\n );\n if (hasDeclinedMandatory && checkHCaseIntercept('Partially Consented')) return null;\n\n setActionLoading(true);\n setError('');\n try {\n const enhancedMetadata = {\n button_used: 'save_preferences',\n ...metadata,\n };\n\n // If ALL purposes accepted → Approved, otherwise Partially Consented\n const allAccepted = purposes.every(\n p => p.consented === 'accepted' || p.consented === true\n );\n const action = allAccepted ? 'Approved' : 'Partially Consented';\n\n await sendLogEvent(action, null, enhancedMetadata);\n return action;\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n }\n }, [purposes, checkHCaseIntercept, sendLogEvent]);\n\n /** Close Banner: No Action */\n const closeBanner = useCallback(async () => {\n if (!actionTakenRef.current) {\n await sendLogEvent('No Action');\n actionTakenRef.current = true;\n }\n return 'No Action';\n }, [sendLogEvent]);\n\n /** Notice-only: I Understand — fires notice_shown only */\n const acknowledgeNotice = useCallback(async (metadata = {}) => {\n setActionLoading(true);\n setError('');\n try {\n await sendNoticeShown({ ...metadata, button_used: 'i_understand' });\n actionTakenRef.current = true;\n return 'notice_shown';\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n }\n }, [sendNoticeShown]);\n\n // =====================================================================\n // H-CASE POPUP HANDLERS\n // =====================================================================\n\n /**\n * Proceed / OK button in H-Case popup.\n * - Allow Override (soft_first): \"Proceed Anyway\" → Partially Consented\n * - Enforce Acknowledgment (hard_immediate): \"OK\" → Partially Consented\n * Both strategies submit Partially Consented.\n */\n const handleHCaseProceed = useCallback(async () => {\n setActionLoading(true);\n setError('');\n try {\n const metadata = {\n h_case_warning_shown: true,\n h_case_acknowledged: true,\n button_used: 'h_case_proceed',\n };\n\n const finalAction = hCaseData.action || 'Partially Consented';\n await sendLogEvent(finalAction, hCaseData.intendedPurposes, metadata);\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n return finalAction;\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n }\n }, [sendLogEvent, hCaseData]);\n\n /**\n * Go Back button in H-Case popup (Allow Override mode only).\n * NO logging — just dismiss popup and return to banner.\n */\n const handleHCaseBack = useCallback(() => {\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n // No logging — user goes back to the banner to change selections\n }, []);\n\n return {\n // State\n purposes,\n uiState,\n actionLoading,\n error,\n hCaseData,\n requestId,\n actionTakenRef,\n hasUserInteracted,\n\n // Actions\n actions: {\n acceptAll,\n rejectAll,\n onlyNecessary,\n savePreferences,\n closeBanner,\n togglePurpose,\n acknowledgeNotice,\n },\n\n // H-Case handlers\n hCaseActions: {\n handleHCaseProceed,\n handleHCaseBack,\n },\n\n // Internals (exposed for TruConsentModal compatibility)\n sendLogEvent,\n };\n}\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 '../styles/consent-modal.css';\n\nimport { normalizePurposes } from '../runtime/purposeAdapter';\nimport { deriveUIState, BANNER_CASE, detectBannerCase } from '../runtime/bannerState';\nimport { getTemplate } from '../runtime/templateRegistry';\nimport useConsentEngine from '../runtime/useConsentEngine';\nimport TabbedBannerUI from '../templates/general_consent/TabbedBannerUI';\n\nimport HCaseWarningPopup from './HCaseWarningPopup';\nimport LanguageProvider from '../templates/shared/LanguageProvider';\n\n// Helper to normalize relative logo URLs\nconst normalizeUrl = (url, baseUrl) => {\n if (!url || !baseUrl) return url;\n if (url.startsWith('http') || url.startsWith('data:')) return url;\n \n const cleanBase = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n const cleanUrl = url.startsWith('/') ? url : `/${url}`;\n \n return `${cleanBase}${cleanUrl}`;\n};\n\nexport default function TruConsentModal(props) {\n const {\n apiKey,\n organizationId,\n bannerId,\n userId,\n assetId,\n apiUrl,\n apiBaseUrl,\n theme = 'light',\n logoUrl,\n companyName = 'Mars Company',\n onClose,\n onSubmit,\n token,\n } = props;\n\n const [banner, setBanner] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [fetchError, setFetchError] = useState(null);\n const [visible, setVisible] = useState(true);\n const [showFullNotice, setShowFullNotice] = useState(false);\n const [bannerFetchAt, setBannerFetchAt] = useState(null);\n\n const closeButtonClickedRef = useRef(false);\n\n const effectiveOrgId = organizationId;\n\n // Resolve assetId: prop > JWT-decoded (only for JWT/consent-link flow)\n const [resolvedAssetId, setResolvedAssetId] = useState(assetId || null);\n\n // Derive company / logo from banner.organization when available\n const resolvedCompanyName =\n (banner && (banner.organization_name || (banner.organization && banner.organization.name))) ||\n companyName;\n\n const effectiveBaseUrl = apiUrl || apiBaseUrl;\n const resolvedLogoUrl = normalizeUrl(\n (banner && banner.organization && banner.organization.logo_url) || logoUrl,\n effectiveBaseUrl\n );\n console.log('[TruConsent] resolvedLogoUrl:', resolvedLogoUrl, { logoUrl, effectiveBaseUrl });\n\n // =====================================================================\n // FETCH BANNER DATA\n // =====================================================================\n\n\n useEffect(() => {\n if (!bannerId) {\n setIsLoading(false);\n return;\n }\n if (!userId) {\n console.warn('TruConsent: Valid userId or deviceId is highly recommended but not provided.');\n }\n if (!token && !apiKey) {\n setIsLoading(false);\n return;\n }\n if (!effectiveOrgId) {\n setIsLoading(false);\n return;\n }\n\n // Determine assetId: explicit prop or from JWT\n let effectiveAssetId = assetId || null;\n if (!effectiveAssetId && token) {\n try {\n const payload = JSON.parse(atob(token.split('.')[1]));\n effectiveAssetId = payload.asset_id;\n } catch (e) {\n console.warn('TruConsent: Failed to decode JWT token', e);\n }\n }\n setResolvedAssetId(effectiveAssetId);\n\n // For API key auth, assetId is required\n if (apiKey && !effectiveAssetId) {\n console.error('TruConsent: assetId is required when using API key authentication');\n setIsLoading(false);\n return;\n }\n\n // ── Unified endpoint: GET /api/v1/consent/{asset_id}/{banner_id} ──────────\n const basePath = '/api/v1/internal/banners';\n\n const buildFetchUrl = (baseUrl, path, bId, aId, uId) => {\n const effectivePath = aId ? `${path}/${aId}/${bId}` : `${path}/${bId}`;\n const url = `${baseUrl}${effectivePath}`;\n return uId ? `${url}?userId=${encodeURIComponent(uId)}` : url;\n };\n\n const fetchUrl = apiUrl\n ? buildFetchUrl(apiUrl, basePath, bannerId, effectiveAssetId, userId)\n : buildFetchUrl(apiBaseUrl, basePath, bannerId, effectiveAssetId, userId);\n\n const headers = {\n 'Content-Type': 'application/json',\n 'X-Org-Id': effectiveOrgId,\n };\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n } else if (apiKey) {\n headers['X-API-Key'] = apiKey;\n }\n\n\n // ── First load (no cache) ─────────────────────────────────────────────\n setIsLoading(true);\n const fetchStart = performance.now();\n console.log('[TruConsent] Banner fetch START →', fetchUrl);\n fetch(fetchUrl, { headers })\n .then((res) => {\n if (res.status === 401) {\n throw new Error('Unauthorized - Invalid or missing API key');\n }\n if (res.status === 403) {\n throw new Error('Forbidden - This domain is not authorized to display this content');\n }\n if (res.status === 429) {\n throw new Error('Rate limit exceeded - Please try again in a moment');\n }\n if (!res.ok) throw new Error('Service temporarily unavailable - Please try again later');\n return res.json();\n })\n .then((data) => {\n setBannerFetchAt(Date.now());\n console.log(`[TruConsent] Banner fetch DONE at: ${Date.now()} →`, fetchUrl);\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 // Normalize purposes using purposeAdapter\n const defaultSelection = data.banner_settings?.default_selection || 'mandatory_only';\n const initializedPurposes = normalizePurposes(data.purposes, defaultSelection);\n\n setBanner({\n ...data,\n purposes: initializedPurposes,\n });\n })\n .catch((e) => {\n const fetchMs = (performance.now() - fetchStart).toFixed(1);\n console.error(`[TruConsent] Banner fetch ERROR after ${fetchMs}ms:`, e);\n \n // Improve \"Failed to fetch\" message (usually network or CORS)\n let msg = e.message || 'Failed to load banner configuration';\n if (msg === 'Failed to fetch') {\n msg = 'Unable to connect to the server. Please check your internet connection or allowed domains.';\n }\n \n setFetchError(msg);\n })\n .finally(() => setIsLoading(false));\n }, [bannerId, apiKey, effectiveOrgId, apiBaseUrl, apiUrl, assetId, token]);\n\n // =====================================================================\n // CONSENT ENGINE HOOK\n // =====================================================================\n const engine = useConsentEngine({\n bannerData: banner,\n apiUrl,\n apiBaseUrl,\n apiKey,\n token,\n effectiveOrgId,\n userId,\n assetId: resolvedAssetId,\n onSubmit,\n bannerFetchAt,\n });\n\n const {\n purposes: enginePurposes,\n uiState,\n actionLoading,\n error,\n hCaseData,\n hasUserInteracted,\n actions,\n hCaseActions,\n } = engine;\n\n // Sync engine purposes back to banner state (for template props)\n const activeBanner = banner ? { \n ...banner, \n purposes: enginePurposes,\n banner_settings: banner.banner_settings ? {\n ...banner.banner_settings,\n logo_url: normalizeUrl(banner.banner_settings.logo_url, effectiveBaseUrl)\n } : banner.banner_settings,\n organization: banner.organization ? {\n ...banner.organization,\n logo_url: normalizeUrl(banner.organization.logo_url, effectiveBaseUrl)\n } : banner.organization\n } : null;\n\n // =====================================================================\n // CLOSE HANDLERS\n // =====================================================================\n const close = (type) => {\n setVisible(false);\n if (onClose) onClose(type);\n };\n\n const handleCloseClick = async () => {\n closeButtonClickedRef.current = true;\n const result = await actions.closeBanner();\n close(result || 'no_action');\n };\n\n // Wrap engine actions to also close the modal\n const handleAcceptAll = async () => {\n const result = await actions.acceptAll();\n if (result) close(result);\n };\n\n const handleRejectAll = async () => {\n const result = await actions.rejectAll();\n if (result) close(result);\n };\n\n const handleOnlyNecessary = async () => {\n const result = await actions.onlyNecessary();\n if (result) close(result);\n };\n\n const handleSavePreferences = async () => {\n const result = await actions.savePreferences();\n if (result) close(result);\n };\n\n const handleAcknowledgeNotice = async () => {\n const result = await actions.acknowledgeNotice();\n if (result) close(result);\n };\n\n const handleHCaseProceed = async () => {\n const result = await hCaseActions.handleHCaseProceed();\n if (result) close(result);\n };\n\n if (!visible) return null;\n\n // =====================================================================\n // STYLING\n // =====================================================================\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 // =====================================================================\n // TEMPLATE SELECTION (via registry)\n // =====================================================================\n const isCookieConsent = banner?.consent_type === 'cookie_consent';\n\n // Detect banner case for tabbed UI\n const bannerCase = uiState ? uiState.bannerCase : BANNER_CASE.NORMAL;\n\n // Determine if we should use the tabbed banner UI.\n // Use tabbed UI by default for the center_modal template, or explicitly via tabbed_banner.\n // Other templates (floating_card, preferences_modal, etc.) keep their own UI.\n const rawTemplateKey = settings.general_notice_template || 'center_modal';\n const useTabbedUI = rawTemplateKey === 'tabbed_banner' || rawTemplateKey === 'center_modal';\n\n const templateKey = useTabbedUI ? 'tabbed_banner' : rawTemplateKey;\n\n const layoutClass = templateKey.replace(/_/g, '-');\n const themeClass = theme === 'dark' ? 'trubanner-theme-dark' : '';\n\n // Loading spinner\n if (isLoading) {\n return ReactDOM.createPortal(\n <div className={`mcm-overlay ${themeClass}`}>\n <div className=\"mcm-spinner\" />\n </div>,\n document.body\n );\n }\n\n // =====================================================================\n // RENDER TEMPLATE\n // =====================================================================\n const TemplateComponent = getTemplate(templateKey);\n\n // Build template-specific props\n const buildTemplateProps = () => {\n const baseProps = {\n banner: activeBanner,\n companyName: resolvedCompanyName,\n logoUrl: resolvedLogoUrl,\n actionLoading,\n };\n\n if (templateKey === 'tabbed_banner') {\n return {\n ...baseProps,\n hasUserInteracted,\n onChangePurpose: actions.togglePurpose,\n onRejectAll: handleRejectAll,\n onConsentAll: handleAcceptAll,\n onAcceptSelected: handleSavePreferences,\n onAcceptMandatory: handleOnlyNecessary,\n onAcknowledgeNotice: handleAcknowledgeNotice,\n bannerCase,\n uiState,\n settings,\n };\n }\n\n if (templateKey === 'notice_only') {\n return {\n ...baseProps,\n onAcknowledge: handleAcknowledgeNotice,\n };\n }\n\n if (templateKey === 'floating_card') {\n return {\n ...baseProps,\n onAcceptMandatory: handleOnlyNecessary,\n onConsentAll: handleAcceptAll,\n onPersonalize: () => setShowFullNotice(true),\n primaryColor: settings.primary_color,\n secondaryColor: settings.secondary_color,\n layoutClass,\n footerText: settings.footer_text,\n settings,\n };\n }\n\n if (templateKey === 'preferences_modal') {\n return {\n ...baseProps,\n hasUserInteracted,\n onChangePurpose: actions.togglePurpose,\n onRejectAll: handleRejectAll,\n onConsentAll: handleAcceptAll,\n onAcceptSelected: handleSavePreferences,\n onAcceptMandatory: handleOnlyNecessary,\n onClose,\n settings,\n };\n }\n\n // Default: center_modal (BannerUI), general_compact_list, general_split_pane, inline_single_row\n return {\n ...baseProps,\n hasUserInteracted,\n onChangePurpose: actions.togglePurpose,\n onRejectAll: handleRejectAll,\n onConsentAll: handleAcceptAll,\n onAcceptSelected: handleSavePreferences,\n onAcceptMandatory: handleOnlyNecessary,\n settings,\n };\n };\n const isInline = false;\n\n const content = (\n <React.Fragment>\n {error && (\n <div className=\"mcm-error\" role=\"alert\">\n {error}\n </div>\n )}\n\n {fetchError ? (\n <div className=\"mcm-error-view\">\n <div className=\"mcm-error-icon\">⚠️</div>\n <h2 className=\"mcm-error-title\">Unable to Load Consent</h2>\n <p className=\"mcm-error-desc\">\n {fetchError}\n </p>\n </div>\n ) : activeBanner && (\n <TemplateComponent {...buildTemplateProps()} />\n )}\n\n {hCaseData.show && (\n <div className=\"fixed inset-0 z-[99999] bg-black bg-opacity-40 flex items-center justify-center p-4\">\n <HCaseWarningPopup\n settings={banner?.banner_settings || {}}\n onProceed={handleHCaseProceed}\n onBack={hCaseActions.handleHCaseBack}\n primaryColor={banner?.banner_settings?.primary_color}\n />\n </div>\n )}\n </React.Fragment>\n );\n\n const isWide = templateKey === 'inline_single_row' || templateKey === 'general_split_pane';\n const wrapperStyle = {\n ...styleVars,\n ...(isWide ? { maxWidth: '1100px', width: '90vw' } : {})\n };\n\n if (isInline) {\n return (\n <LanguageProvider>\n <div className={`mcm-inline-wrapper ${themeClass}`} style={wrapperStyle}>\n {content}\n </div>\n </LanguageProvider>\n );\n }\n\n return ReactDOM.createPortal(\n <LanguageProvider>\n <div className={`mcm-overlay ${layoutClass} ${themeClass}`} style={styleVars}>\n <div className={`mcm-wrapper ${layoutClass}`} style={wrapperStyle}>\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 {content}\n </div>\n </div>\n </div>\n </LanguageProvider>,\n document.body\n );\n}\n","\nimport React, { useState, useEffect, useMemo, useRef } from 'react';\nimport {\n Mail,\n Clock,\n Info,\n CheckCircle2,\n User,\n} from 'lucide-react';\nimport '../styles/RightCenter.css';\n\nconst DEFAULT_RIGHTS_CENTER_SETTINGS = {\n background_color: '#020617',\n primary_text_color: '#e5e7eb',\n secondary_text_color: '#9ca3af',\n button_color: '#65a30d',\n button_text_color: '#0b1120',\n font_family: 'sans-serif',\n show_consents_section: true,\n show_rights_section: true,\n show_nominees_section: true,\n show_transparency_section: false,\n show_dpo_section: false,\n show_grievance_section: true,\n grievance_mode: 'truconsent',\n grievance_external_url: '',\n consents_section_title: 'Consents',\n rights_section_title: 'Your Data Rights',\n nominees_section_title: 'Nominees',\n dpo_qualifications_enabled: true,\n dpo_responsibilities_enabled: true,\n dpo_working_hours_enabled: true,\n dpo_response_time_enabled: true,\n transparency_description: '',\n};\n\nconst unwrapDataPayload = (payload) => {\n if (!payload || typeof payload !== 'object') return null;\n if (payload.data && typeof payload.data === 'object') return payload.data;\n return payload;\n};\n\nconst normalizeRightsCenterSettings = (payload) => {\n const data = unwrapDataPayload(payload) || {};\n return {\n ...DEFAULT_RIGHTS_CENTER_SETTINGS,\n ...data,\n };\n};\n\nconst normalizeArrayResponse = (payload) => {\n if (Array.isArray(payload)) return payload;\n if (Array.isArray(payload?.data)) return payload.data;\n return [];\n};\n\nconst normalizeObjectResponse = (payload) => {\n if (payload && typeof payload === 'object' && payload.data && typeof payload.data === 'object') {\n return payload.data;\n }\n return payload && typeof payload === 'object' ? payload : null;\n};\n\nconst withQuery = (path, queryObj = {}) => {\n const entries = Object.entries(queryObj).filter(([, v]) => v !== null && v !== undefined && String(v) !== '');\n if (!entries.length) return path;\n const qs = new URLSearchParams(entries.map(([k, v]) => [k, String(v)])).toString();\n return `${path}?${qs}`;\n};\n\nconst firstDefined = (...values) => values.find((v) => v !== undefined && v !== null && v !== '');\n\nconst toReadableValue = (value, fallback = 'Not specified') => {\n if (value === undefined || value === null || value === '') return fallback;\n if (typeof value === 'string' || typeof value === 'number') return String(value);\n if (typeof value === 'object') {\n return String(firstDefined(value.label, value.name, value.title, value.value, value.id) ?? fallback);\n }\n return fallback;\n};\n\nconst normalizeConsentedValue = (value) => {\n if (value === true) return 'accepted';\n if (value === false) return 'declined';\n if (typeof value === 'string') {\n const normalized = value.toLowerCase();\n if (['accepted', 'approved', 'yes', 'true'].includes(normalized)) return 'accepted';\n if (['declined', 'rejected', 'no', 'false'].includes(normalized)) return 'declined';\n return value;\n }\n return value;\n};\n\nconst resolveExpiry = (purpose) =>\n toReadableValue(\n firstDefined(purpose?.expiry_period, purpose?.expiry_type, purpose?.expiry, purpose?.expiry_period_id),\n 'Not specified'\n );\n\nconst resolveProcessingActivity = (purpose, collectionPoint) =>\n toReadableValue(\n firstDefined(\n purpose?.processing_activity,\n purpose?.processingActivity,\n purpose?.collection_point_name,\n purpose?.activity,\n collectionPoint?.processing_activity,\n collectionPoint?.processingActivity,\n collectionPoint?.title,\n collectionPoint?.name\n ),\n 'Not specified'\n );\n\nconst formatDateValue = (value) => {\n if (!value) return 'Not available';\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? String(value) : date.toLocaleDateString();\n};\n\nconst getPurposeDataElements = (purpose, collectionPoint) => {\n const purposeElements = Array.isArray(purpose?.data_elements) ? purpose.data_elements : [];\n if (purposeElements.length > 0) {\n return purposeElements\n .map((el) => ({\n label:\n (typeof el === 'string' || typeof el === 'number'\n ? String(el)\n : el?.name || el?.label || el?.title || String(el?.id || '')),\n description: el?.description || '',\n }))\n .filter((el) => el.label);\n }\n\n const cpElements = Array.isArray(collectionPoint?.data_elements) ? collectionPoint.data_elements : [];\n return cpElements\n .map((el) => ({\n label: el?.name || el?.label || el?.title || String(el?.id || ''),\n description: el?.description || '',\n }))\n .filter((el) => el.label);\n};\n\nconst hexToRgba = (hex, alpha) => {\n if (typeof hex !== 'string') return null;\n const clean = hex.replace('#', '').trim();\n if (![3, 6].includes(clean.length)) return null;\n const full = clean.length === 3 ? clean.split('').map((ch) => ch + ch).join('') : clean;\n const intVal = Number.parseInt(full, 16);\n if (Number.isNaN(intVal)) return null;\n const r = (intVal >> 16) & 255;\n const g = (intVal >> 8) & 255;\n const b = intVal & 255;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n\nexport default function RightCenter({ userId, apiKey, organizationId, apiUrl, apiBaseUrl, assetId, authToken }) {\n\n const [rightsCenterSettings, setRightsCenterSettings] = useState(DEFAULT_RIGHTS_CENTER_SETTINGS);\n const [activeTab, setActiveTab] = useState('Consent');\n const [isInitializing, setIsInitializing] = useState(true);\n const responseCacheRef = useRef(new Map());\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 if (userId) authHeaders['X-User-Id'] = userId;\n if (authToken) authHeaders['Authorization'] = `Bearer ${authToken}`;\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 const tabs = useMemo(() => {\n const tabConfig = [\n { label: 'Consent', enabled: rightsCenterSettings.show_consents_section },\n { label: 'Rights', enabled: rightsCenterSettings.show_rights_section },\n { label: 'Nominee', enabled: rightsCenterSettings.show_nominees_section },\n { label: 'Grievance', enabled: rightsCenterSettings.show_grievance_section },\n { label: 'Transparency', enabled: rightsCenterSettings.show_transparency_section },\n { label: 'DPO', enabled: rightsCenterSettings.show_dpo_section },\n ];\n return tabConfig.filter((tab) => tab.enabled !== false).map((tab) => tab.label);\n }, [rightsCenterSettings]);\n\n useEffect(() => {\n if (!tabs.includes(activeTab)) {\n setActiveTab(tabs[0] || 'Consent');\n }\n }, [activeTab, tabs]);\n\n const rcThemeVars = useMemo(\n () => {\n const bg = rightsCenterSettings.background_color || '#020617';\n const primaryText = rightsCenterSettings.primary_text_color || '#e5e7eb';\n const secondaryText = rightsCenterSettings.secondary_text_color || '#9ca3af';\n const primary = rightsCenterSettings.button_color || '#65a30d';\n const buttonText = rightsCenterSettings.button_text_color || '#0b1120';\n\n return {\n '--banner-card-bg': bg,\n '--banner-bg': bg,\n '--banner-hover-bg': hexToRgba(primaryText, 0.08) || 'rgba(255, 255, 255, 0.06)',\n '--banner-text': primaryText,\n '--banner-text-muted': secondaryText,\n '--banner-primary-color': primary,\n '--banner-border': hexToRgba(secondaryText, 0.45) || 'rgba(107, 114, 128, 0.45)',\n '--banner-info-bg': hexToRgba(primary, 0.12) || 'rgba(101, 163, 13, 0.12)',\n '--banner-info-border': hexToRgba(primary, 0.25) || 'rgba(101, 163, 13, 0.25)',\n '--banner-success-bg': 'rgba(34, 197, 94, 0.18)',\n '--banner-success-text': '#166534',\n '--banner-danger-bg': 'rgba(239, 68, 68, 0.18)',\n '--banner-danger-text': '#991b1b',\n '--banner-danger-btn': '#dc2626',\n '--banner-danger-btn-hover': '#b91c1c',\n '--banner-warning-bg': 'rgba(245, 158, 11, 0.12)',\n '--banner-warning-border': 'rgba(245, 158, 11, 0.28)',\n '--banner-warning-text': '#fbbf24',\n '--banner-overlay': 'rgba(2, 6, 23, 0.72)',\n '--font-type': rightsCenterSettings.font_family || 'sans-serif',\n '--rc-btn-text': buttonText,\n };\n },\n [rightsCenterSettings]\n );\n\n const cloneJson = (value) => {\n try {\n return JSON.parse(JSON.stringify(value));\n } catch (_e) {\n return value;\n }\n };\n\n const getJson = async (path, options = {}) => {\n const bypassCache = !!options.bypassCache;\n const base = apiUrl || apiBaseUrl || '';\n const url = `${base}${path}`;\n const cacheKey = `GET:${url}`;\n\n if (!bypassCache && responseCacheRef.current.has(cacheKey)) {\n return cloneJson(responseCacheRef.current.get(cacheKey));\n }\n\n let res;\n try {\n res = await fetch(url, { headers: authHeaders });\n } catch (error) {\n throw error;\n }\n\n if (!res.ok) {\n throw new Error(`GET failed (${res.status}) for ${path}`);\n }\n\n const payload = await res.json();\n if (!bypassCache) {\n responseCacheRef.current.set(cacheKey, cloneJson(payload));\n }\n return payload;\n };\n\n const fetchRightsCenterSettings = async () => {\n const query = assetId ? `?asset_id=${encodeURIComponent(assetId)}` : '';\n const base = apiUrl || apiBaseUrl || '';\n if (!base) return;\n\n const candidates = [`${base}/api/v1/internal/rights-center/settings/global${query}`];\n\n let lastError = null;\n\n for (const url of candidates) {\n let res;\n try {\n res = await fetch(url, { headers: authHeaders });\n } catch (e) {\n lastError = e;\n continue;\n }\n\n if (!res.ok) {\n if (res.status === 401 || res.status === 403) {\n throw new Error(`GET failed (${res.status}) for rights center settings`);\n }\n lastError = new Error(`GET failed (${res.status}) for rights center settings`);\n continue;\n }\n\n const payload = await res.json();\n setRightsCenterSettings(normalizeRightsCenterSettings(payload));\n return;\n }\n\n if (lastError) throw lastError;\n };\n\n const fetchRightsTabData = async () => {\n await Promise.allSettled([\n getJson('/api/v1/internal/dpo')\n .then((payload) => setDpoInfo(normalizeObjectResponse(payload))),\n getJson(`/api/v1/internal/nominee/user/${userId}`)\n .then((payload) => setNominees(normalizeArrayResponse(payload))),\n getJson(`/api/v1/internal/grievance/user/${userId}`)\n .then((payload) => setTickets(normalizeArrayResponse(payload))),\n ]);\n };\n\n const requestApi = async (method, path, payload = null) => {\n const base = apiUrl || apiBaseUrl || '';\n const url = `${base}${path}`;\n let res;\n\n try {\n res = await fetch(url, {\n method,\n headers: payload ? { 'Content-Type': 'application/json', ...authHeaders } : authHeaders,\n body: payload ? JSON.stringify(payload) : undefined,\n });\n } catch (e) {\n throw e;\n }\n\n if (!res) {\n throw new Error(`No response for ${path}`);\n }\n\n if (!res.ok) {\n let detail = '';\n try {\n const body = await res.json();\n detail = body?.detail ? `: ${body.detail}` : '';\n } catch (_e) {\n // Ignore response parse issues and fall back to status-only error.\n }\n throw new Error(`Request failed (${res.status}) for ${path}${detail}`);\n }\n\n return res;\n };\n\n // ------ Handlers ------\n\n const handleNomineeSubmit = e => {\n e.preventDefault();\n const payload = { user_id: userId, client_user_id: userId, ...nomineeForm };\n\n const method = nominee && editing ? 'PUT' : 'POST';\n const path = nominee && editing ? `/api/v1/internal/nominee/${nominee.id}` : '/api/v1/internal/nominee';\n\n requestApi(method, path, payload)\n .then(r => r.json())\n .then(n => {\n setNominees([n]);\n setEditing(false);\n setNomineeForm({\n nominee_name: '',\n relationship: '',\n nominee_email: '',\n nominee_mobile: '',\n purpose_of_appointment: '',\n });\n })\n .catch(console.error);\n };\n\n const handleDeleteNominee = () => {\n if (!nominee) return;\n requestApi('DELETE', `/api/v1/internal/nominee/${nominee.id}`)\n .then(() => setNominees([]))\n .catch(console.error);\n };\n\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 requestApi('POST', '/api/v1/internal/grievance', payload)\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 [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 [showAccessModal, setShowAccessModal] = useState(false);\n const [deleteConfirmed, setDeleteConfirmed] = useState(false);\n const [accessConfirmed, setAccessConfirmed] = 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: resolveExpiry(purpose),\n processingActivity: resolveProcessingActivity(purpose, record),\n collectionPoint: record.title || record.name || 'Collection Point',\n collectionId: record.collection_point,\n type: purpose.is_mandatory ? 'Mandatory' : 'Optional',\n dataElements: getPurposeDataElements(purpose, record),\n shownToPrincipal: !!record.shown_to_principal,\n consented: normalizeConsentedValue(purpose.consented),\n }))\n );\n\n // Fetch and merge user overlays with all banners; filter to active\n const fetchUserConsents = async (options = {}) => {\n const bypassCache = !!options.bypassCache;\n setConsentsLoading(true);\n try {\n const assetQuery = assetId ? { asset_id: assetId } : {};\n const userRecords = await getJson(withQuery(`/api/v1/internal/banners/user/${userId}`, assetQuery), { bypassCache });\n\n const userRows = normalizeArrayResponse(userRecords);\n\n let sourceRows = userRows;\n if (sourceRows.length === 0) {\n const allBanners = await getJson(withQuery('/api/v1/internal/banners', assetQuery), { bypassCache });\n sourceRows = normalizeArrayResponse(allBanners);\n }\n\n const merged = sourceRows\n .map((cp) => {\n const cpId = String(cp.collection_point || cp.id || '');\n const shownToPrincipal = cp?.shown_to_principal ?? false;\n const purposes = (cp.purposes || []).map((p) => ({\n ...p,\n id: String(p.id || ''),\n consented: normalizeStatus(p.consented) ?? 'declined',\n }));\n\n return {\n ...cp,\n collection_point: cpId,\n title: cp.title || cp.name || 'Collection Point',\n shown_to_principal: shownToPrincipal,\n purposes,\n };\n })\n .filter((cp) => !assetId || String(firstDefined(cp?.asset?.id, cp?.asset_id, cp?.assetId, '')) === String(assetId));\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 let isActive = true;\n\n const bootstrap = async () => {\n setIsInitializing(true);\n responseCacheRef.current.clear();\n\n await Promise.allSettled([\n fetchRightsCenterSettings(),\n fetchRightsTabData(),\n fetchUserConsents({ bypassCache: true }),\n ]);\n\n if (isActive) {\n setIsInitializing(false);\n }\n };\n\n bootstrap().catch(console.error);\n return () => {\n isActive = false;\n };\n }, [userId, apiUrl, apiBaseUrl, apiKey, organizationId, assetId, authToken]);\n\n const handleToggle = (consentId, collectionId) => {\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 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 const handleSave = async () => {\n try {\n if (!userId) {\n throw new Error('Cannot save consent: userId is required');\n }\n if (!organizationId) {\n throw new Error('Cannot save consent: organizationId (X-Org-Id) is required');\n }\n\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 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 const saveResults = await Promise.allSettled(\n Object.entries(byCollection)\n .filter(([collectionId]) => changedByCollection[collectionId]?.length > 0)\n .map(async ([collectionId, list]) => {\n const collectionInitialState = initialStateByCollection.get(collectionId);\n\n const purposesPayload = list\n .map((p) => {\n const initialStatus = collectionInitialState?.get(p.id) || 'declined';\n return {\n id: p.id,\n name: p.name,\n consented: normalizeConsentedValue(p.consented),\n initialStatus\n };\n });\n\n const hasApproval = purposesPayload.some(\n (p) => p.consented === 'accepted'\n );\n\n // Business rule: consented yes -> approved, consented no -> revoked.\n const action = hasApproval ? 'approved' : 'revoked';\n\n const payload = {\n userId,\n purposes: purposesPayload.map(({ initialStatus, ...rest }) => rest),\n action,\n assetId,\n };\n\n if (changedByCollection[collectionId]?.length > 0) {\n payload.changedPurposes = changedByCollection[collectionId];\n }\n\n // Consent save to truAPI backend endpoint\n // This is the only supported endpoint for recording consent\n await requestApi('POST', `/api/v1/internal/consent/${collectionId}/consent`, payload);\n })\n );\n\n const failedSaves = saveResults.filter((r) => r.status === 'rejected');\n if (failedSaves.length === 0) {\n // Save current toggled state as the new baseline without forcing a full refetch.\n setInitialConsentGroups(JSON.parse(JSON.stringify(consentGroups)));\n setDirty(false);\n setShowSaveModal(true);\n return;\n }\n\n const successCount = saveResults.length - failedSaves.length;\n if (successCount > 0) {\n alert(`Saved ${successCount} collection point(s), but ${failedSaves.length} failed. Please retry.`);\n } else {\n const first = failedSaves[0]?.reason;\n console.error('Consent save failed:', first);\n throw first || new Error('Failed to save consent');\n }\n } catch (e) {\n console.error(e);\n setShowSaveModal(false);\n alert('Failed to save consent preferences. Please try again.');\n }\n };\n\n const createRightsRequest = async (type) => {\n if (type === 'access') {\n await requestApi('POST', '/api/v1/internal/rights-requests/access-request', {\n user_id: userId,\n subject: 'Data Access Request',\n description: 'User requested access to personal data from Rights Center.',\n metadata: {\n asset_id: assetId,\n source: 'Rights Center',\n },\n });\n return;\n }\n\n await requestApi('POST', '/api/v1/internal/rights-requests/deletion-request', {\n user_id: userId,\n reason: 'User requested data deletion from Rights Center',\n metadata: {\n asset_id: assetId,\n requested_at: new Date().toISOString(),\n source: 'Rights Center',\n },\n });\n };\n\n const handleAccessRequest = async () => {\n try {\n await createRightsRequest('access');\n setAccessConfirmed(true);\n setTimeout(() => {\n setShowAccessModal(false);\n }, 1500);\n } catch (error) {\n console.error('Error submitting access request:', error);\n alert('Failed to submit access request. Please try again later.');\n }\n };\n\n const handleDeleteRequest = async () => {\n try {\n await createRightsRequest('delete');\n\n setDeleteConfirmed(true);\n setTimeout(() => {\n setShowDeleteModal(false);\n }, 1500);\n } catch (error) {\n console.error('Error submitting deletion request:', error);\n alert('Failed to submit deletion request. Please try again later.');\n }\n };\n\n return (\n <div className=\"rc-container\" style={rcThemeVars}>\n {isInitializing && (\n <div className=\"rc-initial-loader\" role=\"status\" aria-live=\"polite\">\n <div className=\"rc-spinner\" />\n <span>Loading Rights Center...</span>\n </div>\n )}\n\n {!isInitializing && (\n <React.Fragment>\n {/* Tabs Navigation */}\n <nav className=\"rc-tabs\">\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n disabled={consentsLoading && consents.length === 0}\n className={`rc-tab ${activeTab === tab ? 'rc-tab-active' : ''}`}\n >\n {tab}\n </button>\n ))}\n </nav>\n\n {/* ------------------ CONSENT TAB ------------------ */}\n {activeTab === 'Consent' && (\n <div className=\"rc-content\">\n <div className=\"rc-section-header\">\n <h2 className=\"rc-section-title\">{rightsCenterSettings.consents_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.flatMap((cp) =>\n (cp.purposes || []).map((p) => {\n const dataElementsText = (cp.data_elements || []).length > 0\n ? (cp.data_elements || [])\n .map((el) =>\n typeof el === 'string' || typeof el === 'number'\n ? String(el)\n : el?.name || el?.label || el?.title || el?.id\n )\n .filter(Boolean)\n .join(', ')\n : 'Not specified';\n const purposeDataElementsText = (() => {\n const purposeElements = Array.isArray(p.data_elements) ? p.data_elements : [];\n if (purposeElements.length > 0) {\n return purposeElements\n .map((el) =>\n typeof el === 'string' || typeof el === 'number'\n ? String(el)\n : el?.name || el?.label || el?.title || el?.id\n )\n .filter(Boolean)\n .join(', ');\n }\n return dataElementsText;\n })();\n const shownToPrincipal = p.shown_to_principal ?? cp.shown_to_principal;\n const consentedAccepted = normalizeConsentedValue(p.consented) === 'accepted';\n\n return (\n <div key={`${cp.collection_point}-${p.id}`} className=\"rc-consent-item\">\n <div className=\"rc-consent-card-row rc-consent-card-row-top\">\n <div className=\"rc-consent-purpose-block\">\n <h3 className=\"rc-consent-title\">{p.name}</h3>\n <span className={`rc-badge ${p.is_mandatory ? 'rc-badge-mandatory' : 'rc-badge-optional'}`}>\n {p.is_mandatory ? 'Necessary' : 'Optional'}\n </span>\n </div>\n\n <div className=\"rc-consent-meta-block\">\n <span className=\"rc-detail-label\">Expiry Period:</span>{' '}\n <span className=\"rc-detail-value\">{resolveExpiry(p)}</span>\n </div>\n\n <div className=\"rc-consent-toggle-wrap\">\n <label className=\"rc-switch\">\n <input\n type=\"checkbox\"\n disabled={false}\n checked={consentedAccepted}\n onChange={() => handleToggle(p.id, cp.collection_point)}\n />\n <span className=\"rc-slider\"></span>\n </label>\n </div>\n </div>\n\n <div className=\"rc-consent-card-row rc-consent-card-row-middle\">\n <div className=\"rc-consent-meta-block\">\n <span className=\"rc-detail-label\">Processing Activity:</span>{' '}\n <span className=\"rc-detail-value\">{resolveProcessingActivity(p, cp)}</span>\n </div>\n <div className=\"rc-status-item\">\n <span className=\"rc-status-label\">Show:</span>\n <span className={`rc-status-pill rc-status-pill-show ${shownToPrincipal ? 'rc-status-yes' : 'rc-status-no'}`}>\n {shownToPrincipal ? '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 rc-status-pill-consent ${consentedAccepted ? 'rc-status-yes' : 'rc-status-no'}`}>\n {consentedAccepted ? 'Yes' : 'No'}\n </span>\n </div>\n </div>\n\n <div className=\"rc-consent-card-row rc-consent-card-row-bottom\">\n <span className=\"rc-detail-label\">Data Elements:</span>{' '}\n <span className=\"rc-detail-value\">{purposeDataElementsText || 'Not specified'}</span>\n </div>\n </div>\n );\n })\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 </div>\n )}\n\n {/* ------------------ RIGHTS TAB ------------------ */}\n {activeTab === 'Rights' && (\n <div className=\"rc-content\">\n <h2 className=\"rc-section-title\">{rightsCenterSettings.rights_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\" onClick={() => { setAccessConfirmed(false); setShowAccessModal(true); }}>\n Request to Access My Data\n </button>\n <button className=\"rc-btn-primary\" onClick={() => setShowDeleteModal(true)}>\n Request to Delete My Data\n </button>\n </div>\n\n {showAccessModal && (\n <div className=\"rc-modal-overlay\">\n <div className=\"rc-modal rc-modal-small\">\n {!accessConfirmed ? (\n <div className=\"rc-modal-content\">\n <Info className=\"rc-warning-icon\" />\n <h3 className=\"rc-modal-title\">Confirm Access Request</h3>\n <p className=\"rc-modal-subtitle\">\n Submit request to access your data?\n </p>\n <div className=\"rc-modal-actions\">\n <button className=\"rc-btn-primary\" onClick={handleAccessRequest}>\n Confirm Request\n </button>\n <button className=\"rc-btn-secondary\" onClick={() => setShowAccessModal(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 access request has been submitted successfully.</p>\n </div>\n )}\n </div>\n </div>\n )}\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 <Info className=\"rc-warning-icon\" />\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\">Learn how we collect, use, and protect your data</p>\n <p className=\"rc-transparency-text\">\n {rightsCenterSettings.transparency_description ||\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 {/* ------------------ DPO TAB ------------------ */}\n {activeTab === 'DPO' && (\n <div className=\"rc-content\">\n <h2 className=\"rc-section-title\">DPO Information</h2>\n\n <div className=\"rc-dpo-preview-list\">\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Full Name</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.full_name || 'Not available'}</p>\n </div>\n\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Email</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.email || 'Not available'}</p>\n </div>\n\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Appointment Date</div>\n <p className=\"rc-dpo-preview-value\">{formatDateValue(dpoInfo?.appointment_date)}</p>\n </div>\n\n {rightsCenterSettings.dpo_qualifications_enabled && (\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Qualifications</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.qualifications || 'Not available'}</p>\n </div>\n )}\n\n {rightsCenterSettings.dpo_responsibilities_enabled && (\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Responsibilities</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.responsibilities || 'Not available'}</p>\n </div>\n )}\n\n {rightsCenterSettings.dpo_working_hours_enabled && (\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Working Hours</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.working_hours || 'Not available'}</p>\n </div>\n )}\n\n {rightsCenterSettings.dpo_response_time_enabled && (\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Response Time</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.response_time || 'Not available'}</p>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* ------------------ NOMINEE TAB ------------------ */}\n {activeTab === 'Nominee' && (\n <div className=\"rc-content\">\n <h2 className=\"rc-section-title\">{rightsCenterSettings.nominees_section_title || 'Appoint Nominee'}</h2>\n <p className=\"rc-section-subtitle\">Appoint someone to manage your data rights on your behalf</p>\n\n <div className=\"rc-btn-primary\">\n <div className=\"rc-btn-title\">⚠️</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\">{nominee.purpose_of_appointment}</span>\n </div>\n </div>\n )}\n\n <div className=\"rc-nominee-actions-fullwidth\">\n <button className=\"rc-btn-primary\" onClick={() => {\n setEditing(true);\n setNomineeForm({\n nominee_name: nominee.nominee_name,\n relationship: nominee.relationship,\n nominee_email: nominee.nominee_email,\n nominee_mobile: nominee.nominee_mobile,\n purpose_of_appointment: nominee.purpose_of_appointment\n });\n }}>\n Edit\n </button>\n <button className=\"rc-btn-danger\" onClick={handleDeleteNominee}>Delete</button>\n </div>\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 value={nomineeForm.nominee_name}\n onChange={e => setNomineeForm({ ...nomineeForm, nominee_name: e.target.value })}\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 => setNomineeForm({ ...nomineeForm, relationship: e.target.value })}\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 => setNomineeForm({ ...nomineeForm, nominee_email: e.target.value })}\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 => setNomineeForm({ ...nomineeForm, nominee_mobile: e.target.value })}\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 => setNomineeForm({ ...nomineeForm, purpose_of_appointment: e.target.value })}\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 type=\"button\" className=\"rc-btn-secondary\" onClick={() => setEditing(false)}>\n Cancel\n </button>\n )}\n </div>\n </form>\n )}\n </div>\n )}\n\n {/* ------------------ GRIEVANCE TAB ------------------ */}\n {activeTab === 'Grievance' && (\n <div className=\"rc-content\">\n {rightsCenterSettings.grievance_mode === 'external' ? (\n <div>\n <h2 className=\"rc-section-title\">Grievance</h2>\n <p className=\"rc-section-subtitle\">Grievance requests are handled on your organization portal.</p>\n <button\n className=\"rc-btn-primary\"\n onClick={() => {\n if (rightsCenterSettings.grievance_external_url) {\n window.open(rightsCenterSettings.grievance_external_url, '_blank', 'noopener,noreferrer');\n }\n }}\n disabled={!rightsCenterSettings.grievance_external_url}\n >\n Open Grievance Portal\n </button>\n </div>\n ) : (\n <React.Fragment>\n <div className=\"rc-section-header\">\n <div>\n <h2 className=\"rc-section-title\">Grievance Tickets</h2>\n <p className=\"rc-section-subtitle\">Submit privacy concerns or view your existing tickets</p>\n </div>\n <button className=\"rc-btn-primary\" onClick={() => setShowForm(!showForm)}>\n Create New Ticket\n </button>\n </div>\n\n {showForm && (\n <form className=\"rc-grievance-form\" onSubmit={(e) => {\n handleGrievanceSubmit(e);\n setShowForm(false);\n }}>\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Subject *</label>\n <input\n type=\"text\"\n className=\"rc-form-input\"\n placeholder=\"Brief description of your concern\"\n value={grievanceForm.subject}\n onChange={(e) => setGrievanceForm({ ...grievanceForm, subject: e.target.value })}\n required\n />\n </div>\n\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Category *</label>\n <select\n className=\"rc-form-select\"\n value={grievanceForm.category}\n onChange={(e) => setGrievanceForm({ ...grievanceForm, category: e.target.value })}\n required\n >\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 className=\"rc-form-textarea\"\n placeholder=\"Detailed description of your concern or request\"\n rows=\"4\"\n value={grievanceForm.description}\n onChange={(e) => setGrievanceForm({ ...grievanceForm, description: e.target.value })}\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\">{ticket.status || 'Open'}</span>\n </div>\n <p className=\"rc-ticket-description\">{ticket.description}</p>\n <div className=\"rc-ticket-meta\">\n <span className=\"rc-ticket-meta-item\">Ticket: {ticket.ticket_id}</span>\n <span className=\"rc-ticket-meta-item\">Category: {ticket.category}</span>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </React.Fragment>\n )}\n </div>\n )}\n </React.Fragment>\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} assetId - Asset ID (required when using API key auth)\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 assetId,\n apiUrl,\n apiBaseUrl,\n theme,\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}\n bannerId={bannerId}\n userId={userId}\n assetId={assetId}\n apiUrl={apiUrl}\n apiBaseUrl={apiBaseUrl}\n theme={theme}\n logoUrl={logoUrl}\n companyName={companyName}\n onClose={onClose}\n />\n );\n}"],"names":["normalizePurposes","purposes","defaultSelection","normalized","map","p","rawPurpose","isLegitimate","is_legitimate","_extends","legalBasis","withdrawable","frequency","consented","is_mandatory","is_dynamic","normalizePurpose","Array","isArray","getPriority","concat","sort","a","b","sortPurposes","dynamicTranslations","ta","hi","translateDynamic","text","i18n","language","detectBannerCase","hasNotice","some","hasConsent","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","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","from","entries","observer","numTimesAdded","ResourceStore","ns","defaultNS","super","ignoreJSONStructure","addNamespaces","removeNamespaces","index","splice","getResource","lng","result","join","addResource","value","silent","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","exists","o","interpolation","opt","resolved","isObject","returnObjects","extractFromKey","nsSeparator","namespaces","wouldCheckForNsInKey","seemsNaturalLanguage","userDefinedKeySeparator","userDefinedNsSeparator","possibleChars","filter","c","r","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","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","msg","Date","loadedClb","cb","initialized","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","i18nInstance","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","unescape","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","_ref$showLanguage","showLanguage","_useTranslation","isLangOpen","setIsLangOpen","processPlaceholder","title","companyName","disclaimer","className","src","alt","color","onClick","fill","viewBox","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","backgroundColor","borderColor","en","translation","Gender","Name","Address","CollapsibleDataSection","items","isOpen","onToggle","_ref$chevronLeft","chevronLeft","item","id","ModernPurposeCard","purpose","banner","openSection","setOpenSection","isMandatory","isAccepted","expiryLabel","digits","formatExpiryText","expiry_label","expiry_period","handleToggleSection","section","dataElements","data_elements","processingActivities","processing_activities","dataProcessors","legal_entities","tools","activity","idx","checked","onChange","opacity","show_processors","ModernBannerFooter","footerText","htmlContent","linkText","url","fullUrl","dangerouslySetInnerHTML","__html","ModernBannerActions","onRejectAll","onConsentAll","onAcceptMandatory","actionButtonText","rejectAllText","rejectAllColor","acceptAllText","onlyNecessaryText","onlyNecessaryColor","_ref$purposes","_ref$isBottomReached","isBottomReached","_ref$isSplitLayout","isSplitLayout","_ref$showAcceptAll","showAcceptAll","_ref$minimal","minimal","anyOptionalAccepted","disabledClasses","buttonBase","splitLayoutContent","Fragment","disabled","defaultLayoutContent","GroupHeader","TabButton","_ref2","isActive","role","tabId","panelId","label","TabPanel","_ref3","labelledBy","hidden","LegitimateUseContent","_ref4","noticePurposes","ConsentPurposesContent","_ref5","allConsentPurposes","onChangePurpose","groups","g","group","gIdx","NoticeOnlyBannerInner","_banner$purposes","onAcknowledge","actionLoading","settings","banner_settings","primaryColor","primary_color","footer_text","banner_title","disclaimer_text","acknowledgeText","notice_acknowledge_text","setIsBottomReached","scrollRef","_scrollRef$current","scrollHeight","clientHeight","font_type","font_size","fontFamily","fontSize","logo_url","ref","onScroll","_e$target","scrollTop","mandatoryLabel","PurposeRow","mandatory_label","description","CompactPurposeRow","isExpanded","toggleExpand","_React$useState","openSections","setOpenSections","toggleSection","_extends2","stopPropagation","elements","registry","center_modal","_banner$purposes2","_banner$banner_settin","onAcceptSelected","hasUserInteracted","secondaryColor","finalPrimaryColor","finalSecondaryColor","secondary_color","action_button_text","styleVars","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","savePreferencesColor","save_preferences_color","general_notice_template","tabbed_banner","_ref6","onAcknowledgeNotice","bannerCase","uiState","settingsOverride","activeTab","setActiveTab","_useState2","_ref7","_ref7$noticePurposes","_ref7$consentPurposes","consentPurposes","handleScroll","isOnLegitimateTab","isOnPurposesTab","tab","marginTop","display","justifyContent","marginLeft","points","preferences_modal","bannerSettings","compact","border","save_preferences_text","floating_card","_banner$banner_settin2","onPersonalize","layoutClass","dynamicFooter","withLinks","notice_only","inline_single_row","isLoading","general_compact_list","expandedRows","setExpandedRows","_extends3","general_split_pane","_activePurpose$proces","_activePurpose$data_e","_activePurpose$legal_","_activePurpose$tools","selectedPurposeId","setSelectedPurposeId","activePurpose","isSelected","_catch","body","recover","_finallyRethrows","finalizer","EMPTY_ARRAY","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","normalizeUrl","baseUrl","startsWith","endsWith","TruConsentModal","apiKey","organizationId","bannerId","userId","assetId","apiUrl","apiBaseUrl","_props$theme","theme","_props$companyName","onClose","onSubmit","token","setBanner","setIsLoading","_useState3","fetchError","setFetchError","_useState4","visible","setVisible","setShowFullNotice","_useState6","bannerFetchAt","setBannerFetchAt","closeButtonClickedRef","effectiveOrgId","_useState7","resolvedAssetId","setResolvedAssetId","resolvedCompanyName","organization_name","organization","effectiveBaseUrl","resolvedLogoUrl","effectiveAssetId","atob","asset_id","fetchUrl","bId","aId","uId","encodeURIComponent","headers","fetchStart","performance","now","fetch","status","ok","json","_data$banner_settings","fully_consented","default_selection","initializedPurposes","fetchMs","toFixed","message","engine","_bannerData$banner_se","bannerData","_ref$previousConsent","previousConsent","_ref$bannerFetchAt","bannerDisplayAt","setBannerDisplayAt","requestId","crypto","randomUUID","sessionId","Math","random","actionTakenRef","actionRunningRef","noticeLoggedAtRef","setActionLoading","_useState5","setError","show","action","intendedPurposes","hCaseData","setHCaseData","setHasUserInteracted","initialPurposes","purpose_id","filterDynamicPurposes","_useState8","setPurposes","mandatoryConsentPurposes","optionalConsentPurposes","noticeOnly","consentOnly","isHCase","hasRequiredConsent","deriveUIState","buildHeaders","sendNoticeShown","metadata","_temp3","_temp2","formattedNoticePurposes","purposeId","version","collectionPointVersion","noticeMetadata","event_type","banner_fetched_at","banner_displayed_at","payload","consentLanguage","collectionPointId","collection_point","consentTimestamp","_temp","method","keepalive","sendLogEvent","purposePayload","formattedPurposes","collection_point_version","user_interaction_at","notice_logged_at","_wasThrown","_result2","togglePurpose","newStatus","checkHCaseIntercept","customPurposes","targetPurposes","acceptAll","acceptedPurposes","enhancedMetadata","button_used","_wasThrown2","_result3","rejectAll","declinedPurposes","_wasThrown3","_result4","onlyNecessary","mandatoryPurposes","_wasThrown4","_result5","savePreferences","_wasThrown5","_result6","closeBanner","_temp4","acknowledgeNotice","_wasThrown6","_result7","handleHCaseProceed","finalAction","h_case_warning_shown","h_case_acknowledged","_wasThrown7","_result8","handleHCaseBack","actions","hCaseActions","useConsentEngine","activeBanner","close","handleAcceptAll","handleRejectAll","handleOnlyNecessary","handleSavePreferences","handleAcknowledgeNotice","rawTemplateKey","templateKey","themeClass","ReactDOM","createPortal","TemplateComponent","content","baseProps","wrapperStyle","maxWidth","_excluded","_iteratorSymbol","iterator","_settle","pact","_Pact","onFulfilled","onRejected","_this","_isSettledPact","thenable","DEFAULT_RIGHTS_CENTER_SETTINGS","background_color","primary_text_color","secondary_text_color","button_color","button_text_color","font_family","show_consents_section","show_rights_section","show_nominees_section","show_transparency_section","show_dpo_section","show_grievance_section","grievance_mode","grievance_external_url","consents_section_title","rights_section_title","nominees_section_title","dpo_qualifications_enabled","dpo_responsibilities_enabled","dpo_working_hours_enabled","dpo_response_time_enabled","transparency_description","normalizeArrayResponse","withQuery","queryObj","URLSearchParams","firstDefined","toReadableValue","fallback","_firstDefined","normalizeConsentedValue","includes","resolveExpiry","expiry_type","expiry","expiry_period_id","resolveProcessingActivity","collectionPoint","processing_activity","processingActivity","collection_point_name","getPurposeDataElements","purposeElements","el","hexToRgba","hex","alpha","clean","full","ch","intVal","Number","authToken","rightsCenterSettings","setRightsCenterSettings","setIsInitializing","responseCacheRef","authHeaders","dpoInfo","setDpoInfo","nominees","setNominees","editing","setEditing","nominee_name","relationship","nominee_email","nominee_mobile","purpose_of_appointment","nomineeForm","setNomineeForm","nominee","tickets","setTickets","setShowGrievanceForm","_useState0","subject","category","grievanceForm","setGrievanceForm","tabs","enabled","rcThemeVars","bg","primaryText","secondaryText","primary","buttonText","cloneJson","_e","getJson","_result","bypassCache","_exit","base","has","_fetch","fetchRightsCenterSettings","_exit2","_temp6","lastError","query","_temp5","check","step","_cycle","_fixup","TypeError","values","array","_forTo","_forOf","unwrapDataPayload","normalizeRightsCenterSettings","_fetch2","fetchRightsTabData","allSettled","normalizeObjectResponse","requestApi","_temp1","_temp9","_temp8","detail","_temp7","_temp0","_fetch3","_useState1","consents","setConsents","_useState10","consentsLoading","setConsentsLoading","_useState11","dirty","setDirty","_useState12","showSaveModal","setShowSaveModal","_useState13","consentGroups","setConsentGroups","_useState14","initialConsentGroups","setInitialConsentGroups","_useState15","showDeleteModal","setShowDeleteModal","_useState16","showAccessModal","setShowAccessModal","_useState17","deleteConfirmed","setDeleteConfirmed","_useState18","accessConfirmed","setAccessConfirmed","_useState19","showForm","setShowForm","normalizeStatus","fetchUserConsents","_temp12","assetQuery","userRecords","_temp11","merged","sourceRows","cp","_cp$shown_to_principa","cpId","shownToPrincipal","shown_to_principal","_normalizeStatus","_cp$asset","asset","flatMap","record","collectionId","_temp10","allBanners","clear","bootstrap","createRightsRequest","_temp14","_exit5","user_id","reason","requested_at","toISOString","_temp13","initialStateByCollection","purposeMap","byCollection","changedByCollection","collectionInitialState","_changedByCollection$","_changedByCollection$2","purposesPayload","initialStatus","_objectWithoutPropertiesLoose","changedPurposes","saveResults","failedSaves","successCount","_failedSaves$","first","alert","handleSave","CheckCircle2","Info","_p$shown_to_principal","dataElementsText","purposeDataElementsText","consentedAccepted","consentId","_temp15","_temp16","full_name","email","date","getTime","toLocaleDateString","formatDateValue","appointment_date","qualifications","responsibilities","working_hours","response_time","User","Mail","Clock","preventDefault","client_user_id","placeholder","required","rows","open","handleGrievanceSubmit","ticket","ticket_id"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/runtime/purposeAdapter.js","../src/runtime/bannerState.js","../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/templates/shared/LanguageProvider.jsx","../src/templates/shared/ModernBannerHeader.jsx","../src/i18n/i18n.js","../src/templates/shared/CollapsibleDataSection.jsx","../src/templates/shared/ModernPurposeCard.jsx","../src/templates/shared/ModernBannerFooter.jsx","../src/templates/shared/ModernBannerActions.jsx","../src/templates/general_consent/TabbedBannerUI.jsx","../src/templates/notice_only/NoticeOnlyBanner.jsx","../src/templates/general_consent/InlineSingleRowUI.jsx","../src/templates/general_consent/CompactListUI.jsx","../src/templates/general_consent/SplitPaneUI.jsx","../src/runtime/templateRegistry.js","../src/templates/general_consent/BannerUI.jsx","../src/templates/general_consent/PreferencesModalUI.jsx","../src/templates/cookie_consent/CookieBannerUI.jsx","../src/runtime/useConsentEngine.js","../src/core/HCaseWarningPopup.jsx","../src/core/TruConsentModal.jsx","../src/core/RightCenter.jsx","../src/core/TruConsent.jsx"],"sourcesContent":["/**\n * purposeAdapter.js\n *\n * Normalizes raw purpose objects from the API into a consistent shape\n * used by the Consent Engine and template layer.\n */\n\n/**\n * Normalize a single raw purpose object.\n *\n * @param {object} rawPurpose - Purpose as returned by the /v1/banners API\n * @param {string} defaultSelection - One of 'all' | 'mandatory_only' | 'none'\n * @returns {object} Normalized purpose\n */\nexport function normalizePurpose(rawPurpose, defaultSelection = 'mandatory_only') {\n const isLegitimate = !!rawPurpose.isLegitimate;\n\n // Legal basis: legitimate interest purposes are notice-basis\n const legalBasis = isLegitimate ? 'notice' : 'consent';\n\n // Withdrawable: only consent-basis purposes with recurring frequency\n const withdrawable = !isLegitimate && rawPurpose.frequency === 'recurring';\n\n // Initial consent state\n let checked;\n if (isLegitimate || rawPurpose.isMandatory) {\n // Notice/legitimate interest or mandatory purposes are always active by default\n checked = 'accepted';\n } else if (defaultSelection === 'all') {\n checked = 'accepted';\n } else if (defaultSelection === 'none') {\n checked = 'declined';\n } else {\n // Default to 'mandatory_only' behavior\n checked = 'declined';\n }\n\n return {\n ...rawPurpose,\n legalBasis,\n withdrawable,\n consented: checked,\n // Preserve isDynamic as-is (defaults to false if not present)\n isDynamic: !!rawPurpose.isDynamic,\n };\n}\n\n/**\n * Normalize an array of raw purposes and sort them by hierarchy.\n * Hierarchy: Legitimate > Necessary > Purpose-based (Recurring) > Optional (One-time)\n *\n * @param {Array} purposes - Array of raw purpose objects\n * @param {string} defaultSelection - 'all' | 'mandatory_only' | 'none'\n * @returns {Array} Normalized and sorted purposes\n */\nexport function normalizePurposes(purposes, defaultSelection = 'mandatory_only') {\n const normalized = (purposes || []).map(p => normalizePurpose(p, defaultSelection));\n return sortPurposes(normalized);\n}\n\n/**\n * Sort purposes by hierarchy: Legitimate > Necessary > Recurring > One-time.\n *\n * @param {Array} purposes - Normalized purposes\n * @returns {Array} Sorted purposes\n */\nexport function sortPurposes(purposes) {\n if (!purposes || !Array.isArray(purposes)) return [];\n \n const getPriority = (p) => {\n // 1. Legitimate Interest\n if (p.isLegitimate) return 1;\n // 2. Necessary / Mandatory\n if (p.isMandatory) return 2;\n // 3. Purpose-based (Recurring)\n if (p.frequency === 'recurring') return 3;\n // 4. Optional (One-time)\n if (p.frequency === 'one_off') return 4;\n return 5;\n };\n\n return [...purposes].sort((a, b) => getPriority(a) - getPriority(b));\n}\n\n/**\n * Filter dynamic purposes based on previous consent.\n *\n * - Static purposes → always included\n * - Dynamic purpose never seen → show\n * - Dynamic purpose previously consented (accepted) → hide\n * - Dynamic purpose previously rejected → show (suppression logic applies externally)\n *\n * @param {Array} purposes - Normalized purposes\n * @param {Array} previousConsent - Previous consent records [{id, consented}]\n * @returns {Array} Filtered purposes\n */\nexport function filterDynamicPurposes(purposes, previousConsent = []) {\n return purposes.filter(p => {\n if (!p.isDynamic) return true; // Static purposes always included\n const prev = previousConsent.find(c => c.id === p.id || c.purpose_id === p.id);\n if (!prev) return true; // Never seen → show\n // Consented → hide; rejected → show (suppression logic applies)\n return prev.consented !== 'accepted' && prev.status !== 'accepted';\n });\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\n/**\n * Translate text based on the current language in i18next.\n * Use for purpose names, descriptions, and entities.\n */\nexport const translateDynamic = (text, i18n) => {\n if (!text) return '';\n if (dynamicTranslations[i18n.language] && dynamicTranslations[i18n.language][text]) {\n return dynamicTranslations[i18n.language][text];\n }\n return text;\n};\n","/**\n * bannerState.js\n *\n * Derives UI state from normalized purposes.\n * Used by useConsentEngine and templates to decide rendering behaviour.\n */\n\n/**\n * Banner display cases:\n * CASE 1 — Legitimate + Other purposes → Tab-based UI\n * CASE 2 — Only consent purposes (no legitimate) → Normal banner (no tabs)\n * CASE 3 — Only legitimate purposes → Single-tab / notice-only UI\n */\nexport const BANNER_CASE = {\n TABBED: 1, // Legitimate + consent → two tabs\n NORMAL: 2, // Consent only → standard banner\n NOTICE_ONLY: 3, // Legitimate only → single tab / OK button\n};\n\n/**\n * Determine which banner case applies.\n *\n * @param {Array} purposes - Normalized purposes\n * @returns {number} One of BANNER_CASE values\n */\nexport function detectBannerCase(purposes = []) {\n const hasNotice = purposes.some(p => p.legalBasis === 'notice');\n const hasConsent = purposes.some(p => p.legalBasis === 'consent');\n\n if (hasNotice && hasConsent) return BANNER_CASE.TABBED;\n if (hasConsent && !hasNotice) return BANNER_CASE.NORMAL;\n if (hasNotice && !hasConsent) return BANNER_CASE.NOTICE_ONLY;\n\n // Fallback (empty purposes)\n return BANNER_CASE.NORMAL;\n}\n\n/**\n * Derive the UI state from a list of normalized purposes.\n *\n * @param {Array} purposes - Array of normalized purposes (with legalBasis)\n * @returns {object} UI state descriptor\n */\nexport function deriveUIState(purposes = []) {\n const noticePurposes = purposes.filter(p => p.legalBasis === 'notice');\n const consentPurposes = purposes.filter(p => p.legalBasis === 'consent');\n\n // Separate consent purposes into mandatory (profile-based) and optional\n const mandatoryConsentPurposes = consentPurposes.filter(p => p.isMandatory);\n const optionalConsentPurposes = consentPurposes.filter(p => !p.isMandatory);\n\n return {\n /** True when ONLY notice/legitimate-interest purposes exist (no consent needed) */\n noticeOnly: consentPurposes.length === 0 && noticePurposes.length > 0,\n\n /** True when ONLY consent purposes exist (no notice purposes) */\n consentOnly: noticePurposes.length === 0 && consentPurposes.length > 0,\n\n /** H-Case: both notice AND consent purposes exist */\n isHCase: noticePurposes.length > 0 && consentPurposes.length > 0,\n\n /** At least one consent purpose is mandatory */\n hasRequiredConsent: consentPurposes.some(p => p.isMandatory),\n\n /** Which banner case to use */\n bannerCase: detectBannerCase(purposes),\n\n /** Segmented purpose lists for action handlers */\n noticePurposes,\n consentPurposes,\n\n /** Further breakdown of consent purposes */\n mandatoryConsentPurposes,\n optionalConsentPurposes,\n };\n}\n","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/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, showLanguage = true }) {\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) || (orgName ? t('consent_by', { companyName: orgName }) : t('consent_notice'));\n const disclaimer = processPlaceholder(disclaimerText);\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-start\">\n <div className=\"flex items-center gap-3 min-w-0 flex-1\">\n {logoUrl && <img src={logoUrl} alt={`${orgName} logo`} className=\"tru-banner-logo h-7 w-auto flex-shrink-0\" />}\n <h2 className=\"tru-banner-title text-[1.25em] font-bold leading-tight\" style={{ color: 'var(--banner-text)' }}>{title}</h2>\n </div>\n {showLanguage && (\n <div className=\"relative flex-shrink-0\">\n <button onClick={() => setIsLangOpen(!isLangOpen)} className=\"tru-language-toggle flex items-center gap-1 text-[0.875em] hover:opacity-80\" style={{ color: 'var(--banner-text-muted)' }}>\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=\"tru-language-dropdown absolute right-0 mt-1 w-40 rounded-md shadow-lg z-[100] border\"\n style={{ backgroundColor: 'var(--banner-bg)', borderColor: 'var(--banner-border)' }}>\n <button onClick={() => changeLanguage('en')} className=\"block w-full text-left px-4 py-2 text-[0.875em] hover:bg-[var(--banner-hover-bg)]\" style={{ color: 'var(--banner-text)' }}>English</button>\n <button onClick={() => changeLanguage('ta')} className=\"block w-full text-left px-4 py-2 text-[0.875em] hover:bg-[var(--banner-hover-bg)]\" style={{ color: 'var(--banner-text)' }}>தமிழ்</button>\n <button onClick={() => changeLanguage('hi')} className=\"block w-full text-left px-4 py-2 text-[0.875em] hover:bg-[var(--banner-hover-bg)]\" style={{ color: 'var(--banner-text)' }}>हिंदी</button>\n </div>\n )}\n </div>\n )}\n </div>\n {disclaimer && (\n <div className=\"tru-disclaimer-box border text-[0.9375em] leading-normal rounded-lg py-2 px-3 italic\"\n style={{ backgroundColor: 'var(--banner-info-bg)', borderColor: 'var(--banner-info-border)', color: 'var(--banner-info-text)' }}>\n {disclaimer}\n </div>\n )}\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, chevronLeft = false }) {\n const { i18n } = useTranslation();\n return (\n <div className=\"tru-data-section border-t\" style={{ borderColor: 'var(--banner-border)' }}>\n <button\n type=\"button\"\n className=\"w-full flex items-center py-2 text-[0.85em] font-medium gap-2\"\n style={{ color: 'var(--banner-text)' }}\n onClick={onToggle}\n >\n {chevronLeft && (\n <svg\n className={`w-3.5 h-3.5 text-gray-400 transition-transform ${isOpen ? 'rotate-90' : ''}`}\n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2.5}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )}\n\n <span className=\"flex-1 text-left\">{title} ({items.length})</span>\n\n {!chevronLeft && (\n <svg className={`w-4 h-4 transform transition-transform ${isOpen ? 'rotate-180' : ''}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n )}\n </button>\n {isOpen && (\n <div className={`${chevronLeft ? 'pl-5' : ''} py-1.5 flex flex-wrap gap-1.5`}>\n {items.map((item) => (\n <div key={item.id} className=\"border rounded-full px-3 py-1 text-[0.875em]\"\n style={{ backgroundColor: 'var(--banner-btn-secondary-bg)', borderColor: 'var(--banner-btn-secondary-border)', color: 'var(--banner-text-muted)' }}>\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\nimport { translateDynamic } from '../../runtime/purposeAdapter';\n\nexport default function ModernPurposeCard({ purpose, banner, onToggle, mandatoryLabel, showNecessaryTag = false }) {\n const { t, i18n } = useTranslation();\n // Start with all sections collapsed\n const [openSection, setOpenSection] = useState(null);\n const isMandatory = purpose.isMandatory;\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.expiryLabel || purpose.expiryPeriod);\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.dataElements || [];\n const processingActivities = purpose.processingActivities || [];\n const legalEntities = purpose.legalEntities || [];\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=\"tru-purpose-card border rounded-xl p-2 shadow-sm hover:shadow-md transition-shadow duration-200\"\n style={{ backgroundColor: 'var(--banner-bg)', borderColor: 'var(--banner-border)' }}>\n <div className=\"flex justify-between items-start gap-2\">\n <div className=\"flex-1 space-y-0.5\">\n <div className=\"flex items-center gap-1.5 flex-wrap\">\n <h3 className=\"font-bold text-[1em]\" style={{ color: 'var(--banner-text)' }}>{translateDynamic(purpose.name, i18n)}</h3>\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 border\"\n style={{ backgroundColor: 'var(--banner-btn-secondary-bg)', color: 'var(--banner-text-muted)', borderColor: 'var(--banner-btn-secondary-border)' }}>\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.isLegitimate && (\n <div className=\"flex items-center gap-2\">\n {showNecessaryTag ? (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[0.6em] font-bold uppercase tracking-wide shrink-0\"\n style={{ backgroundColor: 'var(--banner-danger-bg)', color: 'var(--banner-danger-text)', border: '1px solid var(--banner-danger-text)' }}>\n {t('necessary') || 'Necessary'}\n </span>\n ) : !isMandatory && (\n <span className=\"text-[10px] font-bold uppercase tracking-tight\" style={{ color: 'var(--banner-text-muted)' }}>{t('accept')}</span>\n )}\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.7em] font-medium italic\" style={{ color: 'var(--banner-text-muted)', opacity: 0.8 }}>\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?.showProcessors !== 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=\"hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: var(--banner-primary-color);\">${linkText}</a>`;\n });\n}\n\nexport default function ModernBannerFooter({ footerText, orgName }) {\n if (!footerText) return null;\n\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=\"tru-footer-box text-center text-[0.8125em] border rounded-lg px-3 py-2 leading-normal italic mb-2 w-full\"\n style={{ backgroundColor: 'var(--banner-info-bg)', borderColor: 'var(--banner-info-border)', color: 'var(--banner-info-text)' }}\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 hasUserInteracted = false,\n isSplitLayout = false,\n showAcceptAll = true,\n minimal = false\n}) {\n const { t } = useTranslation();\n\n // Check if any optional purposes are accepted\n const anyOptionalAccepted = purposes\n .filter(p => !p.isMandatory)\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.isMandatory);\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 const splitLayoutContent = (\n <>\n {!isBottomReached && (\n <p className=\"text-[10px] mb-2 text-center animate-pulse\" style={{ color: 'var(--banner-text-muted)' }}>\n {t('scroll_to_bottom') || '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-2\">\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') : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-reject ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {rejectAllText || t('reject_all')}\n </button>\n\n <button\n onClick={onAcceptMandatory}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? (onlyNecessaryColor || '#f97316') : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-necessary ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {onlyNecessaryText || t('only_necessary') || 'Only Necessary'}\n </button>\n </div>\n\n <div className=\"flex flex-row gap-2 w-full sm:w-auto\">\n {showAcceptAll && (\n <button\n onClick={onConsentAll}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? '#10b981' : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-accept ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {actionButtonText || acceptAllText || t('accept_all')}\n </button>\n )}\n </div>\n </div>\n </>\n );\n\n if (minimal) return <div className=\"w-full\">{splitLayoutContent}</div>;\n\n return (\n <div className=\"px-4 py-3 border-t\" style={{ backgroundColor: 'var(--banner-hover-bg)', borderColor: 'var(--banner-border)' }}>\n {splitLayoutContent}\n </div>\n );\n }\n\n const defaultLayoutContent = (\n <div className=\"w-full\">\n {!isBottomReached && (\n <p className=\"text-[10px] mb-2 text-center animate-pulse\" style={{ color: 'var(--banner-text-muted)' }}>\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-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') : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-reject ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {rejectAllText || t('reject_all')}\n </button>\n\n <button\n onClick={onAcceptMandatory}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? (onlyNecessaryColor || '#f97316') : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-necessary ${buttonBase} flex-1 sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {onlyNecessaryText || t('only_necessary')}\n </button>\n </div>\n\n <button\n onClick={() => {\n if (anyOptionalAccepted || hasUserInteracted) {\n onAcceptSelected?.();\n } else {\n onConsentAll();\n }\n }}\n disabled={!isBottomReached}\n style={{ backgroundColor: isBottomReached ? '#10b981' : 'var(--banner-border)' }}\n className={`tru-btn tru-btn-accept ${buttonBase} w-full sm:w-auto text-white hover:opacity-90 ${!isBottomReached ? disabledClasses : ''}`}\n >\n {(anyOptionalAccepted || hasUserInteracted) ? (t('i_consent') || 'I Consent') : (actionButtonText || acceptAllText || t('accept_all') || 'Consent All')}\n </button>\n </div>\n </div>\n );\n\n if (minimal) return defaultLayoutContent;\n\n return (\n <div className=\"px-4 py-2.5 border-t\" style={{ backgroundColor: 'var(--banner-hover-bg)', borderColor: 'var(--banner-border)' }}>\n {defaultLayoutContent}\n </div>\n );\n}\n","/**\n * TabbedBannerUI.jsx\n *\n * Dynamic tab-based consent banner that adapts to three cases:\n * CASE 1 (TABBED) — Legitimate + consent purposes → 2 tabs\n * CASE 2 (NORMAL) — Consent purposes only → no tabs, standard banner\n * CASE 3 (NOTICE_ONLY) — Legitimate purposes only → single tab with OK\n */\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { BANNER_CASE } from '../../runtime/bannerState';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernPurposeCard from '../shared/ModernPurposeCard';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernBannerActions from '../shared/ModernBannerActions';\n\n// ---------------------------------------------------------------------------\n// Sub-components\n// ---------------------------------------------------------------------------\n\n/** Group sub-heading */\nfunction GroupHeader({ title }) {\n return <div className=\"tru-group-heading\">{title}</div>;\n}\n\n/** Tab button with ARIA roles */\nfunction TabButton({ label, isActive, onClick, tabId, panelId }) {\n return (\n <button\n role=\"tab\"\n id={tabId}\n aria-selected={isActive}\n aria-controls={panelId}\n onClick={onClick}\n className=\"tru-tab-button\"\n data-active={isActive || undefined}\n >\n {label}\n </button>\n );\n}\n\n/** Tab panel wrapper */\nfunction TabPanel({ id, labelledBy, children, isActive }) {\n return (\n <div\n role=\"tabpanel\"\n id={id}\n aria-labelledby={labelledBy}\n hidden={!isActive}\n className=\"tru-tab-panel\"\n >\n {children}\n </div>\n );\n}\n\n/** Legitimate Use tab content */\nfunction LegitimateUseContent({ noticePurposes, banner, settings, companyName }) {\n const { t } = useTranslation();\n\n return (\n <div className=\"tru-legitimate-content\">\n <div className=\"tru-purposes-list\">\n {noticePurposes.map((p) => (\n <ModernPurposeCard\n key={p.id}\n purpose={p}\n banner={banner}\n onToggle={() => { }}\n />\n ))}\n </div>\n\n </div>\n );\n}\n\n/** Purposes (consent) tab content — all purposes in a flat list, no group titles */\nfunction ConsentPurposesContent({\n allConsentPurposes,\n banner,\n onChangePurpose,\n settings,\n companyName,\n}) {\n const { t } = useTranslation();\n\n // A purpose that is both mandatory AND dynamic belongs only in PROFILE BASED\n // (with a \"Necessary\" tag on the card), not in NECESSARY as well.\n const groups = [\n {\n title: t('necessary') || 'NECESSARY',\n items: allConsentPurposes.filter(p => p.isMandatory && !p.isDynamic)\n },\n {\n title: 'OPTIONAL',\n items: allConsentPurposes.filter(p => !p.isMandatory && !p.isDynamic)\n },\n {\n title: 'PROFILE BASED',\n items: allConsentPurposes.filter(p => p.isDynamic)\n }\n ].filter(g => g.items.length > 0);\n\n return (\n <div className=\"tru-consent-content\">\n <div className=\"tru-purposes-list\">\n {groups.map((group, gIdx) => (\n <React.Fragment key={gIdx}>\n <GroupHeader title={group.title} />\n {group.items.map((p) => (\n <ModernPurposeCard\n key={p.id}\n purpose={p}\n banner={banner}\n onToggle={onChangePurpose}\n showNecessaryTag={p.isDynamic && p.isMandatory}\n />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport default function TabbedBannerUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n onAcknowledgeNotice,\n hasUserInteracted,\n actionLoading,\n bannerCase,\n uiState,\n settings: settingsOverride,\n}) {\n const { t } = useTranslation();\n const [activeTab, setActiveTab] = useState(0);\n const scrollRef = useRef(null);\n const [isBottomReached, setIsBottomReached] = useState(false);\n\n const settings = settingsOverride || banner?.bannerSettings || {};\n const primaryColor = settings.primaryColor || '#3b82f6';\n\n const {\n noticePurposes = [],\n consentPurposes = [],\n } = uiState || {};\n\n // Scroll detection for action gating\n const handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n if (scrollHeight - scrollTop <= clientHeight + 5) {\n setIsBottomReached(true);\n }\n };\n\n useEffect(() => {\n if (scrollRef.current) {\n const { scrollHeight, clientHeight } = scrollRef.current;\n if (scrollHeight <= clientHeight) {\n setIsBottomReached(true);\n } else {\n setIsBottomReached(false);\n }\n }\n }, [banner?.purposes, activeTab]);\n\n const styleVars = {\n '--font-type': settings.fontType,\n '--font-size': settings.fontSize,\n '--banner-primary-color': primaryColor,\n '--banner-secondary-color': settings.secondaryColor || '#555',\n fontFamily: settings.fontType || 'inherit',\n fontSize: settings.fontSize || 'inherit',\n };\n\n // -----------------------------------------------------------------------\n // CASE 3: Notice-only (single tab, OK button)\n // -----------------------------------------------------------------------\n if (bannerCase === BANNER_CASE.NOTICE_ONLY) {\n return (\n <div className=\"tru-banner-root tru-banner-notice-only\" style={styleVars}>\n <div className=\"tru-banner-header-area\">\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logoUrl}\n orgName={companyName}\n bannerTitle={settings.bannerTitle}\n disclaimerText={settings.disclaimerText}\n />\n </div>\n\n <div className=\"tru-tabs-bar\" role=\"tablist\" aria-label=\"Consent sections\">\n <TabButton\n label=\"Informational\"\n isActive={true}\n onClick={() => { }}\n tabId=\"tab-legitimate\"\n panelId=\"panel-legitimate\"\n />\n </div>\n\n <div ref={scrollRef} onScroll={handleScroll} className=\"tru-banner-scroll-area\">\n <TabPanel id=\"panel-legitimate\" labelledBy=\"tab-legitimate\" isActive={true}>\n <LegitimateUseContent\n noticePurposes={noticePurposes}\n banner={banner}\n settings={settings}\n />\n </TabPanel>\n </div>\n\n <div className=\"tru-banner-footer-area\">\n <ModernBannerFooter footerText={settings.footerText} orgName={companyName} />\n <div className=\"tru-actions-row tru-actions-center\">\n <button\n className=\"tru-btn tru-btn-primary\"\n style={{ backgroundColor: primaryColor }}\n onClick={onAcknowledgeNotice}\n disabled={actionLoading}\n >\n {actionLoading ? (t('processing') || 'Processing...') : (settings.noticeAcknowledgeText || t('ok_button') || 'OK')}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // -----------------------------------------------------------------------\n // CASE 2: Normal consent banner (no tabs)\n // -----------------------------------------------------------------------\n if (bannerCase === BANNER_CASE.NORMAL) {\n return (\n <div className=\"tru-banner-root tru-banner-normal\" style={styleVars}>\n <div className=\"tru-banner-header-area\">\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logoUrl}\n orgName={companyName}\n bannerTitle={settings.bannerTitle}\n disclaimerText={settings.disclaimerText}\n />\n </div>\n\n <div ref={scrollRef} onScroll={handleScroll} className=\"tru-banner-scroll-area\">\n <ConsentPurposesContent\n allConsentPurposes={consentPurposes}\n banner={banner}\n onChangePurpose={onChangePurpose}\n settings={settings}\n />\n </div>\n\n <div className=\"flex-shrink-0 border-t px-4 py-1.5\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\n <ModernBannerFooter footerText={settings.footerText} orgName={companyName} />\n <ModernBannerActions\n onRejectAll={onRejectAll}\n onConsentAll={onConsentAll}\n onAcceptSelected={onAcceptSelected}\n onAcceptMandatory={onAcceptMandatory}\n purposes={banner?.purposes || []}\n actionButtonText={settings.actionButtonText}\n rejectAllText={settings.rejectAllText}\n rejectAllColor={settings.rejectAllColor}\n acceptAllText={settings.acceptAllText}\n onlyNecessaryText={settings.onlyNecessaryText}\n onlyNecessaryColor={settings.onlyNecessaryColor}\n savePreferencesColor={settings.savePreferencesColor}\n primaryColor={primaryColor}\n isBottomReached={isBottomReached}\n hasUserInteracted={hasUserInteracted}\n />\n </div>\n </div>\n );\n }\n\n // -----------------------------------------------------------------------\n // CASE 1: Tabbed UI (Legitimate Use + Purposes)\n // -----------------------------------------------------------------------\n const tabs = [\n { key: 'legitimate', label: 'Informational' },\n { key: 'purposes', label: 'Consent' },\n ];\n\n const isOnLegitimateTab = activeTab === 0;\n const isOnPurposesTab = activeTab === 1;\n\n return (\n <div className=\"tru-banner-root tru-banner-tabbed\" style={styleVars}>\n <div className=\"tru-banner-header-area\">\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logoUrl}\n orgName={companyName}\n bannerTitle={settings.bannerTitle}\n disclaimerText={settings.disclaimerText}\n />\n </div>\n\n <div className=\"tru-tabs-bar\" role=\"tablist\" aria-label=\"Consent sections\">\n {tabs.map((tab, idx) => (\n <TabButton\n key={tab.key}\n label={tab.label}\n isActive={activeTab === idx}\n onClick={() => setActiveTab(idx)}\n tabId={'tab-' + tab.key}\n panelId={'panel-' + tab.key}\n />\n ))}\n </div>\n\n <div ref={scrollRef} onScroll={handleScroll} className=\"tru-banner-scroll-area\">\n <TabPanel id=\"panel-legitimate\" labelledBy=\"tab-legitimate\" isActive={isOnLegitimateTab}>\n <LegitimateUseContent\n noticePurposes={noticePurposes}\n banner={banner}\n settings={settings}\n companyName={companyName}\n />\n </TabPanel>\n\n <TabPanel id=\"panel-purposes\" labelledBy=\"tab-purposes\" isActive={isOnPurposesTab}>\n <ConsentPurposesContent\n allConsentPurposes={consentPurposes}\n banner={banner}\n onChangePurpose={onChangePurpose}\n settings={settings}\n companyName={companyName}\n />\n </TabPanel>\n\n {/* Warnings moved here: At the end of the scrollable content area */}\n {isOnLegitimateTab && (\n <div className=\"tru-legitimate-disclaimer\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\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>No action is needed — this notice is for your awareness and is logged for transparency.</p>\n </div>\n )}\n\n {isOnPurposesTab && banner?.purposes?.some(p => p.consented === 'declined' || p.consented === false) && (\n <div className=\"tru-warning-bar\" style={{ marginTop: 16 }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\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>Your explicit consent is required to proceed. You may accept or decline, and can update your preferences anytime from the Rights Centre.</p>\n </div>\n )}\n </div>\n\n <div className=\"tru-banner-footer-area\">\n <ModernBannerFooter footerText={settings.footerText} orgName={companyName} />\n\n <div className=\"tru-actions-row\" style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n {isOnLegitimateTab && (\n <button\n className={`tru-btn tru-btn-primary ${!isBottomReached ? 'opacity-50 cursor-not-allowed' : ''}`}\n style={{ backgroundColor: isBottomReached ? primaryColor : 'var(--banner-border)' }}\n onClick={() => isBottomReached && setActiveTab(1)}\n disabled={!isBottomReached}\n >\n {t('next_button') || 'Next'}\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ marginLeft: 6 }}>\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n )}\n\n {isOnPurposesTab && (\n <ModernBannerActions\n onRejectAll={onRejectAll}\n onConsentAll={onConsentAll}\n onAcceptSelected={onAcceptSelected}\n onAcceptMandatory={onAcceptMandatory}\n purposes={banner?.purposes || []}\n actionButtonText={settings.actionButtonText}\n rejectAllText={settings.rejectAllText}\n rejectAllColor={settings.rejectAllColor}\n acceptAllText={settings.acceptAllText}\n onlyNecessaryText={settings.onlyNecessaryText}\n onlyNecessaryColor={settings.onlyNecessaryColor}\n savePreferencesColor={settings.savePreferencesColor}\n primaryColor={primaryColor}\n isBottomReached={isBottomReached}\n hasUserInteracted={hasUserInteracted}\n minimal={true}\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\nimport LanguageProvider from '../shared/LanguageProvider';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernPurposeCard from '../shared/ModernPurposeCard';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\n\n/**\n * NoticeOnlyBanner\n *\n * Informational banner for collections that have ONLY notice/legitimate-interest purposes.\n * - Read-only purpose list (no toggles — all show \"Always Active\")\n * - Single \"I Understand\" button → fires notice_shown → closes\n * - No Reject All, no Save Preferences\n */\nfunction NoticeOnlyBannerInner({\n banner,\n companyName,\n logoUrl,\n onAcknowledge,\n actionLoading,\n}) {\n const settings = banner?.bannerSettings || {};\n const primaryColor = settings.primaryColor || '#3b82f6';\n const footerText = settings.footerText;\n const bannerTitle = settings.bannerTitle;\n const disclaimerText = settings.disclaimerText;\n const acknowledgeText = settings.noticeAcknowledgeText || 'I Understand';\n\n const [isBottomReached, setIsBottomReached] = useState(false);\n const scrollRef = useRef(null);\n\n const handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n if (scrollHeight - scrollTop <= clientHeight + 5) {\n setIsBottomReached(true);\n }\n };\n\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.fontType,\n '--font-size': settings.fontSize,\n '--banner-primary-color': primaryColor,\n fontFamily: settings.fontType || 'inherit',\n fontSize: settings.fontSize || 'inherit',\n };\n\n return (\n <div\n className=\"rounded-2xl flex flex-col overflow-hidden text-left h-full border\"\n style={{\n ...styleVars,\n backgroundColor: 'var(--banner-bg)',\n color: 'var(--banner-text)',\n borderColor: 'var(--banner-border)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex-shrink-0 pt-3.5 pb-2 px-3 border-b flex flex-col gap-2\"\n style={{\n borderColor: 'var(--banner-border)',\n backgroundColor: 'var(--banner-hover-bg)',\n }}\n >\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logo_url}\n orgName={companyName}\n bannerTitle={bannerTitle}\n disclaimerText={disclaimerText}\n />\n </div>\n\n {/* Purpose Cards — all read-only */}\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"flex-1 px-5 py-2.5 space-y-2.5 overflow-y-auto\"\n style={{ backgroundColor: 'var(--banner-bg)' }}\n >\n {banner?.purposes?.map((p) => (\n <ModernPurposeCard\n key={p.id}\n purpose={p}\n banner={banner}\n onToggle={() => { }} // No-op: notice purposes are read-only\n mandatoryLabel=\"Always Active\"\n />\n ))}\n </div>\n\n {/* Footer + Single Action */}\n <div\n className=\"flex-shrink-0 border-t px-4 py-2.5\"\n style={{\n borderColor: 'var(--banner-border)',\n backgroundColor: 'var(--banner-hover-bg)',\n }}\n >\n {footerText && (\n <ModernBannerFooter\n footerText={footerText}\n orgName={companyName}\n />\n )}\n\n <div className=\"flex justify-center mt-2\">\n <button\n type=\"button\"\n className=\"px-8 py-2.5 rounded-lg font-semibold text-white text-sm transition-all duration-200 hover:opacity-90 disabled:opacity-50\"\n style={{ backgroundColor: primaryColor }}\n onClick={onAcknowledge}\n disabled={actionLoading}\n >\n {actionLoading ? 'Processing...' : acknowledgeText}\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default function NoticeOnlyBanner(props) {\n return (\n <LanguageProvider>\n <NoticeOnlyBannerInner {...props} />\n </LanguageProvider>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { translateDynamic } from '../../runtime/purposeAdapter';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernBannerActions from '../shared/ModernBannerActions';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\n\nfunction PurposeRow({ purpose, i18n, t, onChangePurpose, finalPrimaryColor, settings }) {\n const isMandatory = purpose.isMandatory;\n const isAccepted = purpose.consented === 'accepted' || purpose.consented === true;\n const mandatoryLabel = settings.mandatoryLabel || t('necessary') || 'NECESSARY';\n\n const dataElements = purpose.dataElements || [];\n const _legalEntities = purpose.legalEntities || [];\n const _tools = purpose.tools || [];\n const dataProcessors = [..._legalEntities, ..._tools];\n\n return (\n <tr className=\"border-b transition-colors hover:bg-gray-50/50\" style={{ borderColor: 'var(--banner-border)' }}>\n {/* Column 1: Purpose Name & Description */}\n <td className=\"py-3 px-4 min-w-[200px]\">\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-2 mb-0.5\">\n <span className=\"font-bold text-[0.85em]\" style={{ color: 'var(--banner-text)' }}>\n {translateDynamic(purpose.name, i18n)}\n </span>\n {isMandatory && (\n <span className=\"text-[0.6em] uppercase font-black px-1.5 py-0.5 rounded-md tracking-wider border shrink-0\"\n style={{ backgroundColor: 'var(--banner-danger-bg)', color: 'var(--banner-danger-text)', borderColor: 'var(--banner-danger-text)' }}>\n {mandatoryLabel}\n </span>\n )}\n </div>\n <p className=\"text-[0.7em] leading-tight text-gray-500 line-clamp-2 max-w-[400px]\" title={translateDynamic(purpose.description, i18n)}>\n {translateDynamic(purpose.description, i18n)}\n </p>\n </div>\n </td>\n\n {/* Column 2: Data Elements */}\n <td className=\"py-3 px-3 min-w-[250px]\">\n <div className=\"flex flex-wrap gap-1\">\n {dataElements.length > 0 ? dataElements.map((item, idx) => (\n <span key={idx} className=\"px-2 py-0.5 rounded text-[0.65em] border whitespace-nowrap\"\n style={{ backgroundColor: 'var(--banner-card-bg)', borderColor: 'var(--banner-border)', color: 'var(--banner-text-muted)' }}>\n {translateDynamic(item.name || item, i18n)}\n </span>\n )) : <span className=\"text-[0.65em] text-gray-400 italic\">No data elements</span>}\n </div>\n </td>\n\n {/* Column 3: Data Processors */}\n <td className=\"py-3 px-3 min-w-[220px]\">\n <div className=\"flex flex-wrap gap-1\">\n {dataProcessors.length > 0 ? dataProcessors.map((item, idx) => (\n <span key={idx} className=\"px-2 py-0.5 rounded text-[0.65em] border whitespace-nowrap\"\n style={{ backgroundColor: 'var(--banner-card-bg)', borderColor: 'var(--banner-border)', color: 'var(--banner-text-muted)' }}>\n {translateDynamic(item.name || item, i18n)}\n </span>\n )) : <span className=\"text-[0.65em] text-gray-400 italic\">No processors</span>}\n </div>\n </td>\n\n {/* Column 4: Expiration */}\n <td className=\"py-3 px-3 min-w-[120px]\">\n <span className=\"text-[0.7em] text-gray-500\">\n {purpose.expiryPeriod ? `Expires in ${purpose.expiryPeriod}` : '-'}\n </span>\n </td>\n\n {/* Column 5: Action / Status */}\n <td className=\"py-3 px-4 text-right\">\n <div className=\"flex items-center justify-end gap-3\">\n {!isMandatory ? (\n <label className=\"switch scale-[0.8] origin-right cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={isAccepted}\n onChange={(e) => onChangePurpose(purpose.id, e.target.checked ? 'accepted' : 'declined')}\n />\n <span className=\"track\" />\n <span className=\"thumb\" />\n </label>\n ) : (\n <div className=\"w-10 h-5\" /> // Spacer for alignment\n )}\n </div>\n </td>\n </tr>\n );\n}\n\nexport default function InlineSingleRowUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n hasUserInteracted,\n primaryColor,\n actionLoading\n}) {\n const { t, i18n } = useTranslation();\n const settings = banner?.bannerSettings || {};\n const finalPrimaryColor = primaryColor || settings.primaryColor || '#3b82f6';\n const purposes = banner?.purposes || [];\n\n if (purposes.length === 0) return null;\n\n const footerText = settings.footerText;\n\n return (\n <div className=\"w-full h-full bg-white border rounded-xl overflow-hidden shadow-2xl flex flex-col\" style={{ borderColor: 'var(--banner-border)' }}>\n {/* Header Area */}\n <div className=\"flex-shrink-0 pt-3.5 pb-2 px-4 border-b bg-gray-50 relative z-20\" style={{ borderColor: 'var(--banner-border)' }}>\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logoUrl}\n orgName={companyName}\n bannerTitle={settings.bannerTitle}\n disclaimerText={settings.disclaimerText}\n />\n </div>\n\n {/* Spreadsheet Table Container */}\n <div className=\"flex-1 overflow-x-auto overflow-y-auto w-full scrollbar-thin scrollbar-thumb-gray-200\">\n <table className=\"w-full border-collapse text-left border-hidden\">\n <thead className=\"bg-gray-50 sticky top-0 z-10\" style={{ backgroundColor: 'var(--banner-hover-bg)' }}>\n <tr className=\"border-b\" style={{ borderColor: 'var(--banner-border)' }}>\n <th className=\"py-4 px-4 text-[0.7em] font-black uppercase tracking-wider text-gray-500\">Purpose / Description</th>\n <th className=\"py-4 px-3 text-[0.7em] font-black uppercase tracking-wider text-gray-500\">Data Elements</th>\n <th className=\"py-4 px-3 text-[0.7em] font-black uppercase tracking-wider text-gray-500\">Data Processors</th>\n <th className=\"py-4 px-3 text-[0.7em] font-black uppercase tracking-wider text-gray-500\">Expiration</th>\n <th className=\"py-4 px-4 text-[0.7em] font-black uppercase tracking-wider text-gray-500 text-right\">Status</th>\n </tr>\n </thead>\n <tbody>\n {purposes.map(purpose => (\n <PurposeRow\n key={purpose.id}\n purpose={purpose}\n i18n={i18n}\n t={t}\n onChangePurpose={onChangePurpose}\n finalPrimaryColor={finalPrimaryColor}\n settings={settings}\n />\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Bottom Footer Actions */}\n <div className=\"p-4 border-t bg-gray-50/50\" style={{ borderColor: 'var(--banner-border)' }}>\n {footerText && (\n <div className=\"mb-4\">\n <ModernBannerFooter\n footerText={footerText}\n orgName={companyName}\n compact={true}\n />\n </div>\n )}\n\n <ModernBannerActions\n onRejectAll={onRejectAll}\n onConsentAll={onConsentAll}\n onAcceptSelected={onAcceptSelected}\n onAcceptMandatory={onAcceptMandatory}\n isLoading={actionLoading}\n actionButtonText={settings.actionButtonText}\n rejectAllText={settings.rejectAllText}\n rejectAllColor={settings.rejectAllColor}\n acceptAllText={settings.acceptAllText}\n onlyNecessaryText={settings.onlyNecessaryText}\n onlyNecessaryColor={settings.onlyNecessaryColor}\n savePreferencesColor={settings.savePreferencesColor}\n primaryColor={finalPrimaryColor}\n purposes={purposes}\n isBottomReached={true} // Always allow actions in spreadsheet view\n showAcceptAll={true}\n />\n </div>\n </div>\n );\n}\n\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernBannerActions from '../shared/ModernBannerActions';\nimport CollapsibleDataSection from '../shared/CollapsibleDataSection';\n\n// Individual compact row\nfunction CompactPurposeRow({ purpose, banner, onToggle, isExpanded, toggleExpand }) {\n const { t } = useTranslation();\n const settings = banner?.bannerSettings || {};\n\n // State for internal sections (Data Elements / Processors)\n const [openSections, setOpenSections] = React.useState({});\n\n const toggleSection = (section) => {\n setOpenSections(prev => ({ ...prev, [section]: !prev[section] }));\n };\n\n const isMandatory = purpose.isMandatory;\n const isAccepted = purpose.consented === 'accepted' || purpose.consented === true;\n const primaryColor = settings.primaryColor || '#3b82f6';\n const mandatoryLabel = settings.mandatoryLabel || t('necessary') || 'NECESSARY';\n\n // Use per-purpose entities\n const dataElements = purpose.dataElements || [];\n const processingActivities = purpose.processingActivities || [];\n const _legalEntities = purpose.legalEntities || [];\n const _tools = purpose.tools || [];\n const dataProcessors = [..._legalEntities, ..._tools];\n\n return (\n <div className=\"border rounded-lg mb-2 overflow-hidden bg-white\" style={{ borderColor: isExpanded ? primaryColor : 'var(--banner-border)' }}>\n <div\n className=\"flex items-center justify-between p-3 gap-3 cursor-pointer hover:bg-gray-50 transition-colors\"\n onClick={toggleExpand}\n >\n {/* Left: Title & Expand Icon */}\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n <svg\n className={`w-4 h-4 text-gray-400 transition-transform ${isExpanded ? 'rotate-90' : ''}`}\n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n <h3 className=\"font-bold text-[0.85em] truncate text-gray-800\">{purpose.name}</h3>\n {purpose.expiryPeriod && (\n <span className=\"text-[0.7em] text-gray-400 font-normal italic ml-1 shrink-0\">\n (Expires in {purpose.expiryPeriod})\n </span>\n )}\n </div>\n\n {/* Right: Actions */}\n <div className=\"flex items-center gap-3 shrink-0\" onClick={(e) => e.stopPropagation()}>\n {isMandatory ? (\n <span className=\"text-[0.65em] uppercase font-extrabold px-1.5 py-0.5 rounded-md tracking-wider border\"\n style={{ backgroundColor: 'var(--banner-danger-bg)', color: 'var(--banner-danger-text)', borderColor: 'var(--banner-danger-text)' }}>\n {mandatoryLabel}\n </span>\n ) : (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <span className=\"text-[0.7em] font-medium uppercase text-gray-500 hidden sm:inline\">\n {isAccepted ? t('accepted') || 'Accepted' : t('declined') || 'Declined'}\n </span>\n <div className=\"switch scale-[0.8] origin-right m-0\">\n <input\n type=\"checkbox\"\n checked={isAccepted}\n onChange={(e) => onToggle(purpose.id, e.target.checked ? 'accepted' : 'declined')}\n />\n <span className=\"track\" />\n <span className=\"thumb\" />\n </div>\n </label>\n )}\n </div>\n </div>\n\n {/* Expanded Content */}\n {isExpanded && (\n <div className=\"p-3 pt-0 border-t bg-gray-50 bg-opacity-30\" style={{ borderColor: 'var(--banner-border)' }}>\n <p className=\"text-[0.8em] text-gray-600 mt-2 mb-3 leading-relaxed\">\n {purpose.description}\n </p>\n\n <div className=\"space-y-2\">\n {processingActivities.length > 0 && (\n <div className=\"text-[0.8em] text-gray-500\">\n <span className=\"font-semibold text-gray-700\">Activities:</span>{' '}\n {processingActivities.map(a => a.name || a).join(', ')}\n </div>\n )}\n {dataElements.length > 0 && (\n <CollapsibleDataSection\n title={t('data_elements') || 'Data Elements'}\n items={dataElements}\n isOpen={!!openSections.elements}\n onToggle={() => toggleSection('elements')}\n chevronLeft={true}\n />\n )}\n {settings.showProcessors !== false && dataProcessors.length > 0 && (\n <CollapsibleDataSection\n title={t('data_processors') || 'Data Processors'}\n items={dataProcessors}\n isOpen={!!openSections.processors}\n onToggle={() => toggleSection('processors')}\n chevronLeft={true}\n />\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default function CompactListUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n hasUserInteracted,\n actionLoading,\n error,\n}) {\n const { t } = useTranslation();\n const settings = banner?.bannerSettings || {};\n\n const bannerTitle = settings.bannerTitle;\n const disclaimerText = settings.disclaimerText;\n const footerText = settings.footerText;\n const purposes = banner?.purposes || [];\n\n // State to track which rows are expanded (default to first purpose if present)\n const [expandedRows, setExpandedRows] = useState(\n purposes.length > 0 ? { [purposes[0].id]: true } : {}\n );\n\n const toggleRow = (id) => {\n setExpandedRows(prev => ({\n ...prev,\n [id]: !prev[id]\n }));\n };\n\n return (\n <div className=\"flex flex-col h-full w-full bg-white rounded-xl shadow-2xl overflow-hidden\">\n <div className=\"flex-shrink-0 pt-3.5 pb-2 px-4 border-b bg-gray-50\" style={{ borderColor: 'var(--banner-border)' }}>\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logoUrl}\n orgName={companyName}\n bannerTitle={bannerTitle}\n disclaimerText={disclaimerText}\n />\n </div>\n\n <div className=\"flex-1 px-4 py-3 overflow-y-auto bg-white\">\n {purposes.map((p) => (\n <CompactPurposeRow\n key={p.id}\n purpose={p}\n banner={banner}\n onToggle={onChangePurpose}\n isExpanded={!!expandedRows[p.id]}\n toggleExpand={() => toggleRow(p.id)}\n />\n ))}\n </div>\n\n <div className=\"flex-shrink-0 border-t px-4 py-3 bg-gray-50\" style={{ borderColor: 'var(--banner-border)' }}>\n <div className=\"mb-3\">\n <ModernBannerFooter\n footerText={footerText}\n orgName={companyName}\n compact={true}\n />\n </div>\n <ModernBannerActions\n onRejectAll={onRejectAll}\n onConsentAll={onConsentAll}\n onAcceptSelected={onAcceptSelected}\n onAcceptMandatory={onAcceptMandatory}\n isLoading={actionLoading}\n actionButtonText={settings.actionButtonText}\n rejectAllText={settings.rejectAllText}\n rejectAllColor={settings.rejectAllColor}\n acceptAllText={settings.acceptAllText}\n onlyNecessaryText={settings.onlyNecessaryText}\n onlyNecessaryColor={settings.onlyNecessaryColor}\n savePreferencesColor={settings.savePreferencesColor}\n primaryColor={settings.primaryColor}\n purposes={purposes}\n isBottomReached={true} // For compact list, we don't force scroll\n />\n </div>\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernBannerActions from '../shared/ModernBannerActions';\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 SplitPaneUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n hasUserInteracted,\n actionLoading,\n primaryColor,\n secondaryColor\n}) {\n const { t, i18n } = useTranslation();\n const settings = banner?.bannerSettings || {};\n const purposes = banner?.purposes || [];\n\n const bannerTitle = settings.bannerTitle;\n const disclaimerText = settings.disclaimerText;\n const footerText = settings.footerText;\n const finalPrimaryColor = settings.primaryColor || primaryColor || '#3b82f6';\n const mandatoryLabel = settings.mandatoryLabel || t('necessary') || 'NECESSARY';\n\n const [selectedPurposeId, setSelectedPurposeId] = useState(purposes.length > 0 ? purposes[0].id : null);\n\n const activePurpose = purposes.find(p => p.id === selectedPurposeId) || purposes[0];\n\n return (\n <div\n className=\"flex flex-col mx-auto bg-white rounded-xl shadow-2xl overflow-hidden text-left\"\n style={{\n height: '85vh',\n width: '100%',\n border: '1px solid var(--banner-border)',\n backgroundColor: 'var(--banner-bg)',\n color: 'var(--banner-text)'\n }}\n >\n {/* Header - Removing extra padding/margins */}\n <div className=\"flex-shrink-0 pt-3 px-4 border-b flex flex-col\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logoUrl}\n orgName={companyName}\n bannerTitle={bannerTitle}\n disclaimerText={disclaimerText}\n />\n </div>\n\n {/* Split Content Area */}\n <div className=\"flex flex-1 overflow-hidden min-h-0\">\n\n {/* Left Side: Purpose List */}\n <div className=\"w-1/3 border-r overflow-y-auto\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-bg)' }}>\n {purposes.map((p) => {\n const isMandatory = p.isMandatory;\n const isAccepted = p.consented === 'accepted' || p.consented === true;\n const isSelected = p.id === selectedPurposeId;\n\n return (\n <div\n key={p.id}\n onClick={() => setSelectedPurposeId(p.id)}\n className={`p-4 border-b cursor-pointer transition-colors ${isSelected ? 'bg-[var(--banner-hover-bg)]' : 'hover:bg-[var(--banner-hover-bg)]/50'}`}\n style={{ borderColor: 'var(--banner-border)' }}\n >\n <div className=\"flex items-center justify-between mb-1\">\n <div className=\"flex flex-col flex-1 min-w-0\">\n <h3 className={`font-bold text-[0.95em] truncate ${isSelected ? 'text-[var(--banner-primary-color)]' : ''}`}>\n {translateDynamic(p.name, i18n)}\n </h3>\n {p.expiryPeriod && (\n <span className=\"text-[0.7em] text-[var(--banner-text-muted)] italic font-normal\">\n Expires in {p.expiryPeriod}\n </span>\n )}\n </div>\n <div onClick={(e) => e.stopPropagation()} className=\"shrink-0 ml-2\">\n {isMandatory ? (\n <span className=\"text-[0.65em] uppercase font-extrabold px-2 py-0.5 rounded-md tracking-wider border\"\n style={{ backgroundColor: 'var(--banner-danger-bg)', color: 'var(--banner-danger-text)', borderColor: 'var(--banner-danger-text)' }}>\n {mandatoryLabel}\n </span>\n ) : (\n <label className=\"switch scale-75 origin-right\">\n <input\n type=\"checkbox\"\n checked={isAccepted}\n onChange={(e) => onChangePurpose(p.id, e.target.checked ? 'accepted' : 'declined')}\n />\n <span className=\"track\" />\n <span className=\"thumb\" />\n </label>\n )}\n </div>\n </div>\n <p className=\"text-[0.8em] text-[var(--banner-text-muted)] line-clamp-2 leading-tight\">\n {translateDynamic(p.description, i18n)}\n </p>\n </div>\n );\n })}\n </div>\n\n {/* Right Side: Detail View */}\n <div className=\"flex-1 overflow-y-auto p-6 bg-white\" style={{ backgroundColor: 'var(--banner-bg)' }}>\n {activePurpose ? (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-bold mb-3\" style={{ color: 'var(--banner-text)' }}>\n {translateDynamic(activePurpose.name, i18n)}\n </h2>\n <p className=\"text-[0.95em] leading-relaxed\" style={{ color: 'var(--banner-text-muted)' }}>\n {translateDynamic(activePurpose.description, i18n)}\n </p>\n </div>\n\n {/* Processing Activities */}\n {activePurpose.processingActivities?.length > 0 && (\n <div className=\"border-t pt-6\" style={{ borderColor: 'var(--banner-border)' }}>\n <h4 className=\"text-[0.85em] font-bold mb-2 uppercase tracking-wide\" style={{ color: 'var(--banner-text)' }}>\n {t('processing_activities') || 'Processing Activities'}\n </h4>\n <div className=\"flex flex-wrap gap-1.5\">\n {activePurpose.processingActivities.map((a, idx) => (\n <span key={idx} className=\"px-2.5 py-1 rounded-full text-[0.75em] font-medium border\"\n style={{ backgroundColor: 'var(--banner-btn-secondary-bg)', color: 'var(--banner-text-muted)', borderColor: 'var(--banner-btn-secondary-border)' }}>\n {translateDynamic(a.name || a, i18n)}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Data Elements (Direct List) */}\n {activePurpose.dataElements?.length > 0 && (\n <div className=\"border-t pt-6\" style={{ borderColor: 'var(--banner-border)' }}>\n <h4 className=\"text-[0.85em] font-bold mb-2 uppercase tracking-wide\" style={{ color: 'var(--banner-text)' }}>\n {t('data_elements')} ({activePurpose.dataElements.length})\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n {activePurpose.dataElements.map((item, idx) => (\n <span key={idx} className=\"px-3 py-1 rounded-full text-[0.8em] border\"\n style={{ backgroundColor: 'var(--banner-bg)', borderColor: 'var(--banner-border)', color: 'var(--banner-text-muted)' }}>\n {translateDynamic(item.name || item, i18n)}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Data Processors (Direct List) */}\n {settings.showProcessors !== false && (activePurpose.legalEntities?.length > 0 || activePurpose.tools?.length > 0) && (\n <div className=\"border-t pt-6\" style={{ borderColor: 'var(--banner-border)' }}>\n <h4 className=\"text-[0.85em] font-bold mb-2 uppercase tracking-wide\" style={{ color: 'var(--banner-text)' }}>\n {t('data_processors') || 'Data Processors'} ({[...(activePurpose.legalEntities || []), ...(activePurpose.tools || [])].length})\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n {[...(activePurpose.legalEntities || []), ...(activePurpose.tools || [])].map((item, idx) => (\n <span key={idx} className=\"px-3 py-1 rounded-full text-[0.8em] border\"\n style={{ backgroundColor: 'var(--banner-bg)', borderColor: 'var(--banner-border)', color: 'var(--banner-text-muted)' }}>\n {translateDynamic(item.name || item, i18n)}\n </span>\n ))}\n </div>\n </div>\n )}\n\n </div>\n ) : (\n <div className=\"h-full flex items-center justify-center text-[var(--banner-text-muted)] italic\">\n {t('select_purpose_hint') || 'Select a purpose from the left to view details'}\n </div>\n )}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"flex-shrink-0 border-t px-4 py-2\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\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={purposes}\n isLoading={actionLoading}\n actionButtonText={settings.actionButtonText}\n rejectAllText={settings.rejectAllText}\n rejectAllColor={settings.rejectAllColor}\n acceptAllText={settings.acceptAllText}\n onlyNecessaryText={settings.onlyNecessaryText}\n onlyNecessaryColor={settings.onlyNecessaryColor}\n savePreferencesColor={settings.savePreferencesColor}\n primaryColor={finalPrimaryColor}\n isBottomReached={true}\n isSplitLayout={true}\n showAcceptAll={true}\n hasUserInteracted={hasUserInteracted}\n />\n </div>\n </div>\n );\n}\n","/**\n * templateRegistry.js\n *\n * Maps template keys (from banner_settings) to React components.\n * Replaces the if/else tree in TruConsentModal.\n */\n\nimport BannerUI from '../templates/general_consent/BannerUI';\nimport PreferencesModalUI from '../templates/general_consent/PreferencesModalUI';\nimport TabbedBannerUI from '../templates/general_consent/TabbedBannerUI';\nimport CookieBannerUI from '../templates/cookie_consent/CookieBannerUI';\nimport NoticeOnlyBanner from '../templates/notice_only/NoticeOnlyBanner';\nimport InlineSingleRowUI from '../templates/general_consent/InlineSingleRowUI';\nimport CompactListUI from '../templates/general_consent/CompactListUI';\nimport SplitPaneUI from '../templates/general_consent/SplitPaneUI';\n\nconst registry = {\n center_modal: BannerUI,\n tabbed_banner: TabbedBannerUI,\n preferences_modal: PreferencesModalUI,\n floating_card: CookieBannerUI,\n notice_only: NoticeOnlyBanner,\n inline_single_row: InlineSingleRowUI,\n general_compact_list: CompactListUI,\n general_split_pane: SplitPaneUI,\n};\n\n/**\n * Get the template component for a given key.\n * Falls back to BannerUI if the key is not recognized.\n *\n * @param {string} key - Template key from banner_settings\n * @returns {React.Component} Template component\n */\nexport const getTemplate = (key) => registry[key] || registry['center_modal'];\n\n/**\n * Check if a given key is a registered template.\n *\n * @param {string} key\n * @returns {boolean}\n */\nexport const isRegistered = (key) => key in registry;\n","import React, { useState, useRef, useEffect } from 'react';\nimport LanguageProvider from '../shared/LanguageProvider';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernPurposeCard from '../shared/ModernPurposeCard';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernBannerActions from '../shared/ModernBannerActions';\n\nexport default function BannerUI({ banner, companyName, logoUrl, onChangePurpose, onRejectAll, onConsentAll, onAcceptSelected, onAcceptMandatory, hasUserInteracted, primaryColor, secondaryColor }) {\n const [isBottomReached, setIsBottomReached] = useState(false);\n const scrollRef = useRef(null);\n\n // Use bannerSettings from API if available, otherwise fall back to props\n const settings = banner?.bannerSettings || {};\n const finalPrimaryColor = settings.primaryColor || primaryColor || '#3b82f6';\n const finalSecondaryColor = settings.secondaryColor || secondaryColor || '#555';\n const footerText = settings.footerText;\n const bannerTitle = settings.bannerTitle;\n const disclaimerText = settings.disclaimerText;\n const actionButtonText = settings.actionButtonText;\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 } else {\n setIsBottomReached(false);\n }\n }\n }, [banner?.purposes]);\n\n const styleVars = {\n '--font-type': settings.fontType,\n '--font-size': settings.fontSize,\n '--banner-primary-color': finalPrimaryColor,\n '--banner-secondary-color': finalSecondaryColor,\n fontFamily: settings.fontType || 'inherit',\n fontSize: settings.fontSize || 'inherit',\n };\n\n return (\n <div className=\"rounded-2xl flex flex-col overflow-hidden text-left h-full border\" style={{ ...styleVars, backgroundColor: 'var(--banner-bg)', color: 'var(--banner-text)', borderColor: 'var(--banner-border)' }}>\n <div className=\"flex-shrink-0 pt-3.5 pb-2 px-3 border-b flex flex-col gap-2\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\n <ModernBannerHeader\n logoUrl={logoUrl || settings.logoUrl}\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\"\n style={{ backgroundColor: 'var(--banner-bg)' }}\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.warningMessage && (\n <div className=\"py-2 px-3 border rounded-lg flex items-start gap-2.5 animate-in fade-in slide-in-from-top-1 duration-200\"\n style={{ backgroundColor: 'var(--banner-warning-bg)', borderColor: 'var(--banner-warning-border)' }}>\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=\"currentColor\" strokeWidth=\"2.5\"\n style={{ color: 'var(--banner-warning-text)' }}\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] leading-normal font-medium\" style={{ color: 'var(--banner-warning-text)' }}>\n {settings.warningMessage}\n </p>\n </div>\n )}\n </div>\n\n <div className=\"flex-shrink-0 border-t px-4 py-1.5\" style={{ borderColor: 'var(--banner-border)', backgroundColor: 'var(--banner-hover-bg)' }}>\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.rejectAllText}\n rejectAllColor={settings.rejectAllColor}\n acceptAllText={settings.acceptAllText}\n onlyNecessaryText={settings.onlyNecessaryText}\n onlyNecessaryColor={settings.onlyNecessaryColor}\n savePreferencesColor={settings.savePreferencesColor}\n primaryColor={finalPrimaryColor}\n isBottomReached={isBottomReached}\n hasUserInteracted={hasUserInteracted}\n isSplitLayout={banner?.bannerSettings?.generalNoticeTemplate === 'preferences_modal'}\n />\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ModernBannerHeader from '../shared/ModernBannerHeader';\nimport ModernBannerFooter from '../shared/ModernBannerFooter';\nimport ModernPurposeCard from '../shared/ModernPurposeCard';\n\nfunction PreferencesModalUI({\n banner,\n companyName,\n logoUrl,\n onChangePurpose,\n onRejectAll,\n onConsentAll,\n onAcceptSelected,\n onAcceptMandatory,\n onClose,\n settings\n}) {\n const { t, i18n } = useTranslation();\n // Use bannerSettings for content if available\n const bannerSettings = banner?.bannerSettings || settings || {};\n const finalPrimaryColor = bannerSettings.primaryColor || '#3b82f6';\n\n const styleVars = {\n '--preferences-primary-color': finalPrimaryColor,\n fontFamily: bannerSettings.fontType || 'inherit',\n fontSize: bannerSettings.fontSize || 'inherit',\n };\n\n const orgName = companyName || 'TruConsent';\n const modalTitle = (bannerSettings.bannerTitle || 'Cookie Preferences').replace(/\\[Organization Name\\]/g, orgName);\n const disclaimerText = (bannerSettings.disclaimerText || '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.footerText;\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 block w-full relative\">\n <ModernBannerHeader\n logoUrl={logoUrl || bannerSettings.logoUrl}\n orgName={orgName}\n bannerTitle={bannerSettings.bannerTitle}\n disclaimerText={bannerSettings.disclaimerText}\n showLanguage={true}\n />\n </div>\n\n\n <div className=\"preferences-purpose-list scrollbar-thin scrollbar-thumb-gray-200 mt-2\">\n {purposes.map((purpose) => (\n <div key={purpose.id} className=\"preferences-purpose-card-wrapper mb-3\">\n <ModernPurposeCard\n purpose={purpose}\n banner={banner}\n onToggle={onChangePurpose}\n />\n </div>\n ))}\n </div>\n\n <div className=\"preferences-footer-container\">\n {settings.footerText && (\n <div className=\"preferences-footer-text\">\n <ModernBannerFooter\n footerText={settings.footerText}\n orgName={companyName}\n compact={true}\n />\n </div>\n )}\n <div className=\"preferences-actions\">\n <button\n type=\"button\"\n className=\"preferences-btn preferences-btn-essential\"\n onClick={onAcceptMandatory}\n >\n {settings.onlyNecessaryText || t('only_necessary')}\n </button>\n <div className=\"preferences-actions-right\">\n <button\n type=\"button\"\n className=\"preferences-btn preferences-btn-save\"\n style={{ color: finalPrimaryColor, border: '1px solid var(--banner-border)' }}\n onClick={onAcceptSelected}\n >\n {settings.savePreferencesText || t('save_preferences')}\n </button>\n <button\n type=\"button\"\n className=\"preferences-btn preferences-btn-accept\"\n style={{ backgroundColor: '#10b981', color: 'white' }}\n onClick={onConsentAll}\n >\n {settings.actionButtonText || settings.acceptAllText || t('accept_all')}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default PreferencesModalUI;\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","/**\n * useConsentEngine.js\n *\n * Custom React hook that extracts all consent logic from TruConsentModal\n * into a reusable, testable unit.\n *\n * Manages: purpose normalization, dynamic filtering, action handlers,\n * event logging (with notice_shown separation), and H-Case intercept.\n */\n\nimport { useState, useRef, useCallback, useMemo, useEffect } from 'react';\nimport { normalizePurposes, filterDynamicPurposes } from './purposeAdapter';\nimport { deriveUIState } from './bannerState';\n\n/** Generate a simple session ID for metadata tracking */\nfunction generateSessionId() {\n return `sess_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\n/**\n * @param {object} options\n * @param {object} options.bannerData - Raw banner data from API\n * @param {string} options.apiUrl - Full API base (e.g. https://api.truconsent.com)\n * @param {string} options.apiBaseUrl - Short base URL override\n * @param {string} options.apiKey - API key (mutually exclusive with token for auth)\n * @param {string} options.token - JWT token\n * @param {string} options.effectiveOrgId - Resolved organization ID\n * @param {string} options.userId - User/device ID\n * @param {string} options.assetId - Asset ID (required for API key, optional for JWT)\n * @param {function} options.onSubmit - Optional custom submission handler\n * @param {Array} options.previousConsent - Previous consent records for dynamic filtering\n * @param {number} options.bannerFetchAt - Absolute timestamp when banner fetch completed\n * @returns {object} Consent engine interface\n */\nconst EMPTY_ARRAY = [];\n\nexport default function useConsentEngine({\n bannerData,\n apiUrl,\n apiBaseUrl,\n apiKey,\n token,\n effectiveOrgId,\n userId,\n assetId,\n onSubmit,\n previousConsent = EMPTY_ARRAY,\n bannerFetchAt = null,\n}) {\n // --- Performance Tracking ---\n const [bannerDisplayAt, setBannerDisplayAt] = useState(null);\n\n // Capture display time when bannerData becomes available\n useEffect(() => {\n if (bannerData && !bannerDisplayAt) {\n setBannerDisplayAt(Date.now());\n }\n }, [bannerData, bannerDisplayAt]);\n\n // --- Request ID & Session ID (stable for this banner render) ---\n const [requestId] = useState(() => crypto.randomUUID());\n const [sessionId] = useState(() => generateSessionId());\n\n // --- Refs for action gating ---\n const actionTakenRef = useRef(false);\n const actionRunningRef = useRef(false);\n const noticeLoggedAtRef = useRef(null);\n\n // --- Loading / error state ---\n const [actionLoading, setActionLoading] = useState(false);\n const [error, setError] = useState('');\n\n // --- H-Case state ---\n const [hCaseData, setHCaseData] = useState({ show: false, action: null, intendedPurposes: null });\n\n // --- User interaction tracking ---\n const [hasUserInteracted, setHasUserInteracted] = useState(false);\n\n // --- Normalize & filter purposes ---\n const defaultSelection = bannerData?.bannerSettings?.defaultSelection || 'mandatory_only';\n\n const initialPurposes = useMemo(() => {\n const normalized = normalizePurposes(bannerData?.purposes, defaultSelection);\n return filterDynamicPurposes(normalized, previousConsent);\n }, [bannerData?.purposes, defaultSelection, previousConsent]);\n\n const [purposes, setPurposes] = useState(initialPurposes);\n\n // *** FIX: Sync purposes when bannerData loads after initial render ***\n useEffect(() => {\n if (initialPurposes.length > 0) {\n setPurposes(initialPurposes);\n }\n }, [initialPurposes]);\n\n // --- UI State ---\n const uiState = useMemo(() => deriveUIState(purposes), [purposes]);\n\n // --- Build auth headers ---\n const buildHeaders = useCallback(() => {\n const headers = {\n 'Content-Type': 'application/json',\n 'X-Org-Id': effectiveOrgId,\n };\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n } else if (apiKey) {\n headers['X-API-Key'] = apiKey;\n }\n return headers;\n }, [token, apiKey, effectiveOrgId]);\n\n // --- Send notice_shown for notice purposes ---\n const sendNoticeShown = useCallback(async (metadata = {}) => {\n if (uiState.noticePurposes.length === 0) return;\n\n try {\n const formattedNoticePurposes = uiState.noticePurposes.map(p => ({\n purposeId: p.id,\n version: p.version || 'v1.0',\n consented: 'accepted',\n }));\n\n const collectionPointVersion = bannerData?.version || 'v1.0';\n\n const noticeMetadata = {\n sessionId,\n ...metadata,\n event_type: 'notice_shown',\n performance: {\n banner_fetched_at: bannerFetchAt,\n banner_displayed_at: bannerDisplayAt,\n }\n };\n\n const payload = {\n userId,\n requestId,\n assetId: assetId || undefined,\n consentLanguage: 'en',\n collectionPointId: bannerData?.collectionPoint,\n collectionPointVersion,\n consentTimestamp: Date.now(),\n source: 'npm',\n purposes: formattedNoticePurposes,\n action: 'notice_shown',\n metadata: noticeMetadata,\n };\n\n if (onSubmit) {\n await onSubmit(payload);\n } else {\n const requestUrl = apiUrl\n ? `${apiUrl}/api/v1/internal/consent/${bannerData.collectionPoint}`\n : `${apiBaseUrl}/api/v1/internal/consent/${bannerData.collectionPoint}`;\n\n const res = await fetch(requestUrl, {\n method: 'POST',\n headers: buildHeaders(),\n keepalive: true,\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n console.warn(`[TruConsent] notice_shown log failed with status ${res.status}`);\n }\n }\n // Mark when notice logging completed\n noticeLoggedAtRef.current = Date.now();\n } catch (e) {\n console.error('Failed to log notice_shown:', e);\n }\n }, [uiState.noticePurposes, userId, requestId, assetId, onSubmit, apiUrl, apiBaseUrl, bannerData, buildHeaders, bannerFetchAt, bannerDisplayAt, sessionId]);\n\n // notice_shown is logged only when the user explicitly clicks a button (acknowledgeNotice / i_understand)\n\n const sendSuppressionUpdate = useCallback((purposePayload) => {\n if (onSubmit) return; // custom submit handler — skip suppression call\n const declinedIds = (purposePayload || purposes)\n .filter(p => p.consented === 'declined' || p.consented === false)\n .map(p => p.id)\n .filter(Boolean);\n if (!declinedIds.length || !userId) return;\n\n const baseUrl = apiUrl || apiBaseUrl;\n const suppressionUrl = `${baseUrl}/api/v1/internal/consent/suppression`;\n fetch(suppressionUrl, {\n method: 'POST',\n headers: buildHeaders(),\n keepalive: true,\n body: JSON.stringify({ userId, declinedPurposeIds: declinedIds }),\n }).catch(e => console.warn('[TruConsent] suppression update failed:', e));\n }, [purposes, userId, onSubmit, apiUrl, apiBaseUrl, buildHeaders]);\n\n const sendLogEvent = useCallback(async (action, purposePayload, metadata) => {\n if (!bannerData || actionRunningRef.current) return;\n\n if (action !== 'no_action') {\n actionTakenRef.current = true;\n }\n\n actionRunningRef.current = true;\n try {\n // Build purposes in the required format: purposeId, version, consented\n const rawPurposes = purposePayload || purposes;\n const formattedPurposes = rawPurposes.map(p => ({\n purposeId: p.id,\n version: p.version || 'v1.0',\n consented: p.consented === true ? 'accepted' : p.consented === false ? 'declined' : (p.consented || 'declined'),\n }));\n\n const collectionPointVersion = bannerData?.version || 'v1.0';\n\n const payload = {\n userId,\n requestId,\n assetId: assetId || undefined,\n consentLanguage: 'en',\n collectionPointId: bannerData?.collectionPoint,\n collectionPointVersion,\n consentTimestamp: Date.now(),\n source: 'npm',\n purposes: formattedPurposes,\n action,\n metadata: {\n sessionId,\n ...metadata,\n collection_point_version: collectionPointVersion,\n performance: {\n banner_fetched_at: bannerFetchAt,\n banner_displayed_at: bannerDisplayAt,\n user_interaction_at: Date.now(),\n notice_logged_at: noticeLoggedAtRef.current,\n }\n },\n };\n\n if (onSubmit) {\n await onSubmit(payload);\n } else {\n // Step 1: Record consent log\n const requestUrl = apiUrl\n ? `${apiUrl}/api/v1/internal/consent/${bannerData.collectionPoint}`\n : `${apiBaseUrl}/api/v1/internal/consent/${bannerData.collectionPoint}`;\n\n const res = await fetch(requestUrl, {\n method: 'POST',\n headers: buildHeaders(),\n keepalive: true,\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n if (res.status === 401) throw new Error('Unauthorized - Invalid API key');\n if (res.status === 403) throw new Error('Forbidden - Your origin or API key scope is not allowed to record consent');\n if (res.status === 429) throw new Error('Rate limit exceeded - Please try again later');\n throw new Error('Failed to record consent event');\n }\n\n // Step 2: Update suppression tracking (fire-and-forget, does not block)\n sendSuppressionUpdate(rawPurposes);\n }\n } catch (e) {\n console.error('Failed to log consent event:', e);\n throw e;\n } finally {\n actionRunningRef.current = false;\n }\n }, [bannerData, userId, purposes, requestId, assetId, onSubmit, apiUrl, apiBaseUrl, buildHeaders, bannerFetchAt, bannerDisplayAt, sessionId, sendSuppressionUpdate]);\n\n // --- Toggle a single purpose ---\n const togglePurpose = useCallback((purposeId, newStatus) => {\n setHasUserInteracted(true);\n setPurposes(prev =>\n prev.map(p => p.id === purposeId ? { ...p, consented: newStatus } : p)\n );\n }, []);\n\n // --- H-Case intercept check ---\n // Only triggers when a MANDATORY consent purpose is NOT accepted\n const checkHCaseIntercept = useCallback((action, customPurposes = null) => {\n const targetPurposes = customPurposes || purposes;\n const hasDeclinedMandatory = targetPurposes.some(\n p => p.isMandatory && p.legalBasis === 'consent' &&\n (p.consented === 'declined' || p.consented === false)\n );\n\n if (hasDeclinedMandatory && !hCaseData.show) {\n setHCaseData({ show: true, action, intendedPurposes: targetPurposes });\n return true; // intercepted\n }\n return false;\n }, [purposes, hCaseData.show]);\n\n // =====================================================================\n // ACTION HANDLERS\n // =====================================================================\n\n /** Accept All: Approved for all purposes */\n const acceptAll = useCallback(async (metadata = {}) => {\n setActionLoading(true);\n setError('');\n try {\n const acceptedPurposes = purposes.map(p => ({\n ...p,\n consented: 'accepted',\n }));\n\n const enhancedMetadata = { ...metadata, button_used: 'accept_all' };\n await sendLogEvent('Approved', acceptedPurposes, enhancedMetadata);\n return 'Approved';\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n }\n }, [purposes, sendLogEvent]);\n\n /** Reject All: Declined for all purposes */\n const rejectAll = useCallback(async (metadata = {}) => {\n const declinedPurposes = purposes.map(p => ({\n ...p,\n consented: 'declined',\n }));\n\n // Intercept if mandatory consent is being declined\n if (checkHCaseIntercept('Declined', declinedPurposes)) return null;\n\n setActionLoading(true);\n setError('');\n try {\n const enhancedMetadata = { ...metadata, button_used: 'reject_all' };\n await sendLogEvent('Declined', declinedPurposes, enhancedMetadata);\n return 'Declined';\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n }\n }, [purposes, checkHCaseIntercept, sendLogEvent]);\n\n /** Only Necessary: accept mandatory, decline optional */\n const onlyNecessary = useCallback(async (metadata = {}) => {\n setActionLoading(true);\n setError('');\n try {\n // Construct payload: mandatory accepted, optional declined\n const mandatoryPurposes = purposes.map(p => ({\n ...p,\n consented: p.isMandatory ? 'accepted' : 'declined',\n }));\n\n const enhancedMetadata = { ...metadata, button_used: 'only_necessary' };\n\n // If there are optional purposes, it's partial; otherwise approved\n const hasOptional = purposes.some(p => !p.isMandatory && p.legalBasis === 'consent');\n const action = hasOptional ? 'Partially Consented' : 'Approved';\n\n await sendLogEvent(action, mandatoryPurposes, enhancedMetadata);\n return action;\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n }\n }, [purposes, sendLogEvent]);\n\n /** Save Preferences / I Consent */\n const savePreferences = useCallback(async (metadata = {}) => {\n // Intercept if mandatory consent is not accepted\n const hasDeclinedMandatory = purposes.some(\n p => p.isMandatory && p.legalBasis === 'consent' &&\n (p.consented === 'declined' || p.consented === false)\n );\n if (hasDeclinedMandatory && checkHCaseIntercept('Partially Consented')) return null;\n\n setActionLoading(true);\n setError('');\n try {\n const enhancedMetadata = {\n button_used: 'save_preferences',\n ...metadata,\n };\n\n const consentPurposes = purposes.filter(p => p.legalBasis === 'consent');\n const totalCount = consentPurposes.length;\n const acceptedCount = consentPurposes.filter(p => p.consented === 'accepted' || p.consented === true).length;\n \n let action;\n if (totalCount > 0) {\n if (acceptedCount === 0) {\n action = 'Declined';\n } else if (acceptedCount === totalCount) {\n action = 'Approved';\n } else {\n action = 'Partially Consented';\n }\n } else {\n action = 'Approved'; // No consent-based purposes to decline\n }\n\n await sendLogEvent(action, purposes, enhancedMetadata);\n return action;\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n }\n }, [purposes, checkHCaseIntercept, sendLogEvent]);\n\n /** Close Banner: No Action */\n const closeBanner = useCallback(async () => {\n if (!actionTakenRef.current) {\n await sendLogEvent('No Action');\n actionTakenRef.current = true;\n }\n return 'No Action';\n }, [sendLogEvent]);\n\n /** Notice-only: I Understand — fires notice_shown only */\n const acknowledgeNotice = useCallback(async (metadata = {}) => {\n setActionLoading(true);\n setError('');\n try {\n await sendNoticeShown({ ...metadata, button_used: 'i_understand' });\n actionTakenRef.current = true;\n return 'notice_shown';\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n }\n }, [sendNoticeShown]);\n\n // =====================================================================\n // H-CASE POPUP HANDLERS\n // =====================================================================\n\n /**\n * Proceed / OK button in H-Case popup.\n * - Allow Override (soft_first): \"Proceed Anyway\" → Partially Consented\n * - Enforce Acknowledgment (hard_immediate): \"OK\" → Partially Consented\n * Both strategies submit Partially Consented.\n */\n const handleHCaseProceed = useCallback(async () => {\n setActionLoading(true);\n setError('');\n try {\n const metadata = {\n h_case_warning_shown: true,\n h_case_acknowledged: true,\n button_used: 'h_case_proceed',\n };\n\n const finalAction = hCaseData.action || 'Partially Consented';\n await sendLogEvent(finalAction, hCaseData.intendedPurposes, metadata);\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n return finalAction;\n } catch (e) {\n setError('Something went wrong. Please try again.');\n return null;\n } finally {\n setActionLoading(false);\n }\n }, [sendLogEvent, hCaseData]);\n\n /**\n * Go Back button in H-Case popup (Allow Override mode only).\n * NO logging — just dismiss popup and return to banner.\n */\n const handleHCaseBack = useCallback(() => {\n setHCaseData({ show: false, action: null, intendedPurposes: null });\n // No logging — user goes back to the banner to change selections\n }, []);\n\n return {\n // State\n purposes,\n uiState,\n actionLoading,\n error,\n hCaseData,\n requestId,\n actionTakenRef,\n hasUserInteracted,\n\n // Actions\n actions: {\n acceptAll,\n rejectAll,\n onlyNecessary,\n savePreferences,\n closeBanner,\n togglePurpose,\n acknowledgeNotice,\n },\n\n // H-Case handlers\n hCaseActions: {\n handleHCaseProceed,\n handleHCaseBack,\n },\n\n // Internals (exposed for TruConsentModal compatibility)\n sendLogEvent,\n };\n}\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 '../styles/consent-modal.css';\n\nimport { normalizePurposes } from '../runtime/purposeAdapter';\nimport { deriveUIState, BANNER_CASE, detectBannerCase } from '../runtime/bannerState';\nimport { getTemplate } from '../runtime/templateRegistry';\nimport useConsentEngine from '../runtime/useConsentEngine';\nimport TabbedBannerUI from '../templates/general_consent/TabbedBannerUI';\n\nimport HCaseWarningPopup from './HCaseWarningPopup';\nimport LanguageProvider from '../templates/shared/LanguageProvider';\n\n// Helper to normalize relative logo URLs\nconst normalizeUrl = (url, baseUrl) => {\n if (!url || !baseUrl) return url;\n if (url.startsWith('http') || url.startsWith('data:')) return url;\n \n const cleanBase = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n const cleanUrl = url.startsWith('/') ? url : `/${url}`;\n \n return `${cleanBase}${cleanUrl}`;\n};\n\nexport default function TruConsentModal(props) {\n const {\n apiKey,\n organizationId,\n bannerId,\n userId,\n assetId,\n apiUrl,\n apiBaseUrl,\n theme = 'light',\n logoUrl,\n companyName = 'Mars Company',\n onClose,\n onSubmit,\n token,\n } = props;\n\n const [banner, setBanner] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [fetchError, setFetchError] = useState(null);\n const [visible, setVisible] = useState(true);\n const [showFullNotice, setShowFullNotice] = useState(false);\n const [bannerFetchAt, setBannerFetchAt] = useState(null);\n\n const closeButtonClickedRef = useRef(false);\n\n const effectiveOrgId = organizationId;\n\n // Resolve assetId: prop > JWT-decoded (only for JWT/consent-link flow)\n const [resolvedAssetId, setResolvedAssetId] = useState(assetId || null);\n\n // Derive company / logo from banner.organization when available\n const resolvedCompanyName =\n (banner && (banner.organizationName || (banner.organization && banner.organization.name))) ||\n companyName;\n\n const effectiveBaseUrl = apiUrl || apiBaseUrl;\n const resolvedLogoUrl = normalizeUrl(\n (banner && banner.organization && banner.organization.logoUrl) || logoUrl,\n effectiveBaseUrl\n );\n console.log('[TruConsent] resolvedLogoUrl:', resolvedLogoUrl, { logoUrl, effectiveBaseUrl });\n\n // =====================================================================\n // FETCH BANNER DATA\n // =====================================================================\n\n\n useEffect(() => {\n if (!bannerId) {\n setIsLoading(false);\n return;\n }\n if (!userId) {\n console.warn('TruConsent: Valid userId or deviceId is highly recommended but not provided.');\n }\n if (!token && !apiKey) {\n setIsLoading(false);\n return;\n }\n if (!effectiveOrgId) {\n setIsLoading(false);\n return;\n }\n\n // Determine assetId: explicit prop or from JWT\n let effectiveAssetId = assetId || null;\n if (!effectiveAssetId && token) {\n try {\n const payload = JSON.parse(atob(token.split('.')[1]));\n effectiveAssetId = payload.asset_id;\n } catch (e) {\n console.warn('TruConsent: Failed to decode JWT token', e);\n }\n }\n setResolvedAssetId(effectiveAssetId);\n\n // For API key auth, assetId is required\n if (apiKey && !effectiveAssetId) {\n console.error('TruConsent: assetId is required when using API key authentication');\n setIsLoading(false);\n return;\n }\n\n // ── Unified endpoint: GET /api/v1/consent/{asset_id}/{banner_id} ──────────\n const basePath = '/api/v1/internal/consent';\n\n const buildFetchUrl = (baseUrl, path, bId, aId, uId) => {\n const effectivePath = aId ? `${path}/${aId}/${bId}` : `${path}/${bId}`;\n const url = `${baseUrl}${effectivePath}`;\n return uId ? `${url}?userId=${encodeURIComponent(uId)}` : url;\n };\n\n const fetchUrl = apiUrl\n ? buildFetchUrl(apiUrl, basePath, bannerId, effectiveAssetId, userId)\n : buildFetchUrl(apiBaseUrl, basePath, bannerId, effectiveAssetId, userId);\n\n const headers = {\n 'Content-Type': 'application/json',\n 'X-Org-Id': effectiveOrgId,\n };\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n } else if (apiKey) {\n headers['X-API-Key'] = apiKey;\n }\n\n\n // ── First load (no cache) ─────────────────────────────────────────────\n setIsLoading(true);\n const fetchStart = performance.now();\n console.log('[TruConsent] Banner fetch START →', fetchUrl);\n fetch(fetchUrl, { headers })\n .then((res) => {\n if (res.status === 401) {\n throw new Error('Unauthorized - Invalid or missing API key');\n }\n if (res.status === 403) {\n throw new Error('Forbidden - This domain is not authorized to display this content');\n }\n if (res.status === 429) {\n throw new Error('Rate limit exceeded - Please try again in a moment');\n }\n if (!res.ok) throw new Error('Service temporarily unavailable - Please try again later');\n return res.json();\n })\n .then((data) => {\n setBannerFetchAt(Date.now());\n console.log(`[TruConsent] Banner fetch DONE at: ${Date.now()} →`, fetchUrl);\n\n // AUTO-HIDE if user is already fully consented (Progressive Consent)\n if (data.consentStatus === 'complete' || (!data.purposes || data.purposes.length === 0)) {\n setVisible(false);\n if (onClose) onClose('no_action');\n return;\n }\n\n // Normalize purposes using purposeAdapter\n const defaultSelection = data.bannerSettings?.defaultSelection || 'mandatory_only';\n const initializedPurposes = normalizePurposes(data.purposes, defaultSelection);\n\n setBanner({\n ...data,\n purposes: initializedPurposes,\n });\n })\n .catch((e) => {\n const fetchMs = (performance.now() - fetchStart).toFixed(1);\n console.error(`[TruConsent] Banner fetch ERROR after ${fetchMs}ms:`, e);\n \n // Improve \"Failed to fetch\" message (usually network or CORS)\n let msg = e.message || 'Failed to load banner configuration';\n if (msg === 'Failed to fetch') {\n msg = 'Unable to connect to the server. Please check your internet connection or allowed domains.';\n }\n \n setFetchError(msg);\n })\n .finally(() => setIsLoading(false));\n }, [bannerId, apiKey, effectiveOrgId, apiBaseUrl, apiUrl, assetId, token]);\n\n // =====================================================================\n // CONSENT ENGINE HOOK\n // =====================================================================\n const engine = useConsentEngine({\n bannerData: banner,\n apiUrl,\n apiBaseUrl,\n apiKey,\n token,\n effectiveOrgId,\n userId,\n assetId: resolvedAssetId,\n onSubmit,\n bannerFetchAt,\n });\n\n const {\n purposes: enginePurposes,\n uiState,\n actionLoading,\n error,\n hCaseData,\n hasUserInteracted,\n actions,\n hCaseActions,\n } = engine;\n\n // Sync engine purposes back to banner state (for template props)\n const activeBanner = banner ? {\n ...banner,\n purposes: enginePurposes,\n bannerSettings: banner.bannerSettings ? {\n ...banner.bannerSettings,\n logoUrl: normalizeUrl(banner.bannerSettings.logoUrl, effectiveBaseUrl)\n } : banner.bannerSettings,\n organization: banner.organization ? {\n ...banner.organization,\n logoUrl: normalizeUrl(banner.organization.logoUrl, effectiveBaseUrl)\n } : banner.organization\n } : null;\n\n // =====================================================================\n // CLOSE HANDLERS\n // =====================================================================\n const close = (type) => {\n setVisible(false);\n if (onClose) onClose(type);\n };\n\n const handleCloseClick = async () => {\n closeButtonClickedRef.current = true;\n const result = await actions.closeBanner();\n close(result || 'no_action');\n };\n\n // Wrap engine actions to also close the modal\n const handleAcceptAll = async () => {\n const result = await actions.acceptAll();\n if (result) close(result);\n };\n\n const handleRejectAll = async () => {\n const result = await actions.rejectAll();\n if (result) close(result);\n };\n\n const handleOnlyNecessary = async () => {\n const result = await actions.onlyNecessary();\n if (result) close(result);\n };\n\n const handleSavePreferences = async () => {\n const result = await actions.savePreferences();\n if (result) close(result);\n };\n\n const handleAcknowledgeNotice = async () => {\n const result = await actions.acknowledgeNotice();\n if (result) close(result);\n };\n\n const handleHCaseProceed = async () => {\n const result = await hCaseActions.handleHCaseProceed();\n if (result) close(result);\n };\n\n if (!visible) return null;\n\n // =====================================================================\n // STYLING\n // =====================================================================\n const settings = banner?.bannerSettings || {};\n const styleVars = {\n '--font-type': settings.fontType || 'Verdana',\n '--font-size': settings.fontSize || '14px',\n '--banner-primary-color': settings.primaryColor || '#3b82f6',\n '--banner-secondary-color': settings.secondaryColor || '#555',\n fontFamily: settings.fontType || 'inherit',\n fontSize: settings.fontSize || 'inherit',\n };\n\n // =====================================================================\n // TEMPLATE SELECTION (via registry)\n // =====================================================================\n const isCookieConsent = banner?.consentType === 'cookie_consent';\n\n // Detect banner case for tabbed UI\n const bannerCase = uiState ? uiState.bannerCase : BANNER_CASE.NORMAL;\n\n // Determine if we should use the tabbed banner UI.\n // Use tabbed UI by default for the center_modal template, or explicitly via tabbed_banner.\n // Other templates (floating_card, preferences_modal, etc.) keep their own UI.\n const rawTemplateKey = settings.generalNoticeTemplate || 'center_modal';\n const useTabbedUI = rawTemplateKey === 'tabbed_banner' || rawTemplateKey === 'center_modal';\n\n const templateKey = useTabbedUI ? 'tabbed_banner' : rawTemplateKey;\n\n const layoutClass = templateKey.replace(/_/g, '-');\n const themeClass = theme === 'dark' ? 'trubanner-theme-dark' : '';\n\n // Loading spinner\n if (isLoading) {\n return ReactDOM.createPortal(\n <div className={`mcm-overlay ${themeClass}`}>\n <div className=\"mcm-spinner\" />\n </div>,\n document.body\n );\n }\n\n // =====================================================================\n // RENDER TEMPLATE\n // =====================================================================\n const TemplateComponent = getTemplate(templateKey);\n\n // Build template-specific props\n const buildTemplateProps = () => {\n const baseProps = {\n banner: activeBanner,\n companyName: resolvedCompanyName,\n logoUrl: resolvedLogoUrl,\n actionLoading,\n };\n\n if (templateKey === 'tabbed_banner') {\n return {\n ...baseProps,\n hasUserInteracted,\n onChangePurpose: actions.togglePurpose,\n onRejectAll: handleRejectAll,\n onConsentAll: handleAcceptAll,\n onAcceptSelected: handleSavePreferences,\n onAcceptMandatory: handleOnlyNecessary,\n onAcknowledgeNotice: handleAcknowledgeNotice,\n bannerCase,\n uiState,\n settings,\n };\n }\n\n if (templateKey === 'notice_only') {\n return {\n ...baseProps,\n onAcknowledge: handleAcknowledgeNotice,\n };\n }\n\n if (templateKey === 'floating_card') {\n return {\n ...baseProps,\n onAcceptMandatory: handleOnlyNecessary,\n onConsentAll: handleAcceptAll,\n onPersonalize: () => setShowFullNotice(true),\n primaryColor: settings.primaryColor,\n secondaryColor: settings.secondaryColor,\n layoutClass,\n footerText: settings.footerText,\n settings,\n };\n }\n\n if (templateKey === 'preferences_modal') {\n return {\n ...baseProps,\n hasUserInteracted,\n onChangePurpose: actions.togglePurpose,\n onRejectAll: handleRejectAll,\n onConsentAll: handleAcceptAll,\n onAcceptSelected: handleSavePreferences,\n onAcceptMandatory: handleOnlyNecessary,\n onClose,\n settings,\n };\n }\n\n // Default: center_modal (BannerUI), general_compact_list, general_split_pane, inline_single_row\n return {\n ...baseProps,\n hasUserInteracted,\n onChangePurpose: actions.togglePurpose,\n onRejectAll: handleRejectAll,\n onConsentAll: handleAcceptAll,\n onAcceptSelected: handleSavePreferences,\n onAcceptMandatory: handleOnlyNecessary,\n settings,\n };\n };\n const isInline = false;\n\n const content = (\n <React.Fragment>\n {error && (\n <div className=\"mcm-error\" role=\"alert\">\n {error}\n </div>\n )}\n\n {fetchError ? (\n <div className=\"mcm-error-view\">\n <div className=\"mcm-error-icon\">⚠️</div>\n <h2 className=\"mcm-error-title\">Unable to Load Consent</h2>\n <p className=\"mcm-error-desc\">\n {fetchError}\n </p>\n </div>\n ) : activeBanner && (\n <TemplateComponent {...buildTemplateProps()} />\n )}\n\n {hCaseData.show && (\n <div className=\"fixed inset-0 z-[99999] bg-black bg-opacity-40 flex items-center justify-center p-4\">\n <HCaseWarningPopup\n settings={banner?.bannerSettings || {}}\n onProceed={handleHCaseProceed}\n onBack={hCaseActions.handleHCaseBack}\n primaryColor={banner?.bannerSettings?.primaryColor}\n />\n </div>\n )}\n </React.Fragment>\n );\n\n const isWide = templateKey === 'inline_single_row' || templateKey === 'general_split_pane';\n const wrapperStyle = {\n ...styleVars,\n ...(isWide ? { maxWidth: '1100px', width: '90vw' } : {})\n };\n\n if (isInline) {\n return (\n <LanguageProvider>\n <div className={`mcm-inline-wrapper ${themeClass}`} style={wrapperStyle}>\n {content}\n </div>\n </LanguageProvider>\n );\n }\n\n return ReactDOM.createPortal(\n <LanguageProvider>\n <div className={`mcm-overlay ${layoutClass} ${themeClass}`} style={styleVars}>\n <div className={`mcm-wrapper ${layoutClass}`} style={wrapperStyle}>\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 {content}\n </div>\n </div>\n </div>\n </LanguageProvider>,\n document.body\n );\n}\n","\nimport React, { useState, useEffect, useMemo, useRef } from 'react';\nimport {\n Mail,\n Clock,\n Info,\n CheckCircle2,\n User,\n} from 'lucide-react';\nimport '../styles/RightCenter.css';\n\nconst DEFAULT_RIGHTS_CENTER_SETTINGS = {\n background_color: '#020617',\n primary_text_color: '#e5e7eb',\n secondary_text_color: '#9ca3af',\n button_color: '#65a30d',\n button_text_color: '#0b1120',\n font_family: 'sans-serif',\n show_consents_section: true,\n show_rights_section: true,\n show_nominees_section: true,\n show_transparency_section: false,\n show_dpo_section: false,\n show_grievance_section: true,\n grievance_mode: 'truconsent',\n grievance_external_url: '',\n consents_section_title: 'Consents',\n rights_section_title: 'Your Data Rights',\n nominees_section_title: 'Nominees',\n dpo_qualifications_enabled: true,\n dpo_responsibilities_enabled: true,\n dpo_working_hours_enabled: true,\n dpo_response_time_enabled: true,\n transparency_description: '',\n};\n\nconst unwrapDataPayload = (payload) => {\n if (!payload || typeof payload !== 'object') return null;\n if (payload.data && typeof payload.data === 'object') return payload.data;\n return payload;\n};\n\nconst normalizeRightsCenterSettings = (payload) => {\n const data = unwrapDataPayload(payload) || {};\n return {\n ...DEFAULT_RIGHTS_CENTER_SETTINGS,\n ...data,\n };\n};\n\nconst normalizeArrayResponse = (payload) => {\n if (Array.isArray(payload)) return payload;\n if (Array.isArray(payload?.data)) return payload.data;\n return [];\n};\n\nconst normalizeObjectResponse = (payload) => {\n if (payload && typeof payload === 'object' && payload.data && typeof payload.data === 'object') {\n return payload.data;\n }\n return payload && typeof payload === 'object' ? payload : null;\n};\n\nconst withQuery = (path, queryObj = {}) => {\n const entries = Object.entries(queryObj).filter(([, v]) => v !== null && v !== undefined && String(v) !== '');\n if (!entries.length) return path;\n const qs = new URLSearchParams(entries.map(([k, v]) => [k, String(v)])).toString();\n return `${path}?${qs}`;\n};\n\nconst firstDefined = (...values) => values.find((v) => v !== undefined && v !== null && v !== '');\n\nconst toReadableValue = (value, fallback = 'Not specified') => {\n if (value === undefined || value === null || value === '') return fallback;\n if (typeof value === 'string' || typeof value === 'number') return String(value);\n if (typeof value === 'object') {\n return String(firstDefined(value.label, value.name, value.title, value.value, value.id) ?? fallback);\n }\n return fallback;\n};\n\nconst normalizeConsentedValue = (value) => {\n if (value === true) return 'accepted';\n if (value === false) return 'declined';\n if (typeof value === 'string') {\n const normalized = value.toLowerCase();\n if (['accepted', 'approved', 'yes', 'true'].includes(normalized)) return 'accepted';\n if (['declined', 'rejected', 'no', 'false'].includes(normalized)) return 'declined';\n return value;\n }\n return value;\n};\n\nconst resolveExpiry = (purpose) =>\n toReadableValue(\n firstDefined(purpose?.expiry_period, purpose?.expiry_type, purpose?.expiry, purpose?.expiry_period_id),\n 'Not specified'\n );\n\nconst resolveProcessingActivity = (purpose, collectionPoint) =>\n toReadableValue(\n firstDefined(\n purpose?.processing_activity,\n purpose?.processingActivity,\n purpose?.collection_point_name,\n purpose?.activity,\n collectionPoint?.processing_activity,\n collectionPoint?.processingActivity,\n collectionPoint?.title,\n collectionPoint?.name\n ),\n 'Not specified'\n );\n\nconst formatDateValue = (value) => {\n if (!value) return 'Not available';\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? String(value) : date.toLocaleDateString();\n};\n\nconst getPurposeDataElements = (purpose, collectionPoint) => {\n const purposeElements = Array.isArray(purpose?.dataElements || purpose?.data_elements) ? (purpose.dataElements || purpose.data_elements) : [];\n if (purposeElements.length > 0) {\n return purposeElements\n .map((el) => ({\n label:\n (typeof el === 'string' || typeof el === 'number'\n ? String(el)\n : el?.name || el?.label || el?.title || String(el?.id || '')),\n description: el?.description || '',\n }))\n .filter((el) => el.label);\n }\n\n const cpElements = Array.isArray(collectionPoint?.dataElements || collectionPoint?.data_elements) ? (collectionPoint.dataElements || collectionPoint.data_elements) : [];\n return cpElements\n .map((el) => ({\n label: el?.name || el?.label || el?.title || String(el?.id || ''),\n description: el?.description || '',\n }))\n .filter((el) => el.label);\n};\n\nconst hexToRgba = (hex, alpha) => {\n if (typeof hex !== 'string') return null;\n const clean = hex.replace('#', '').trim();\n if (![3, 6].includes(clean.length)) return null;\n const full = clean.length === 3 ? clean.split('').map((ch) => ch + ch).join('') : clean;\n const intVal = Number.parseInt(full, 16);\n if (Number.isNaN(intVal)) return null;\n const r = (intVal >> 16) & 255;\n const g = (intVal >> 8) & 255;\n const b = intVal & 255;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n\nexport default function RightCenter({ userId, apiKey, organizationId, apiUrl, apiBaseUrl, assetId, authToken }) {\n\n const [rightsCenterSettings, setRightsCenterSettings] = useState(DEFAULT_RIGHTS_CENTER_SETTINGS);\n const [activeTab, setActiveTab] = useState('Consent');\n const [isInitializing, setIsInitializing] = useState(true);\n const responseCacheRef = useRef(new Map());\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 if (userId) authHeaders['X-User-Id'] = userId;\n if (authToken) authHeaders['Authorization'] = `Bearer ${authToken}`;\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 const tabs = useMemo(() => {\n const tabConfig = [\n { label: 'Consent', enabled: rightsCenterSettings.show_consents_section },\n { label: 'Rights', enabled: rightsCenterSettings.show_rights_section },\n { label: 'Nominee', enabled: rightsCenterSettings.show_nominees_section },\n { label: 'Grievance', enabled: rightsCenterSettings.show_grievance_section },\n { label: 'Transparency', enabled: rightsCenterSettings.show_transparency_section },\n { label: 'DPO', enabled: rightsCenterSettings.show_dpo_section },\n ];\n return tabConfig.filter((tab) => tab.enabled !== false).map((tab) => tab.label);\n }, [rightsCenterSettings]);\n\n useEffect(() => {\n if (!tabs.includes(activeTab)) {\n setActiveTab(tabs[0] || 'Consent');\n }\n }, [activeTab, tabs]);\n\n const rcThemeVars = useMemo(\n () => {\n const bg = rightsCenterSettings.background_color || '#020617';\n const primaryText = rightsCenterSettings.primary_text_color || '#e5e7eb';\n const secondaryText = rightsCenterSettings.secondary_text_color || '#9ca3af';\n const primary = rightsCenterSettings.button_color || '#65a30d';\n const buttonText = rightsCenterSettings.button_text_color || '#0b1120';\n\n return {\n '--banner-card-bg': bg,\n '--banner-bg': bg,\n '--banner-hover-bg': hexToRgba(primaryText, 0.08) || 'rgba(255, 255, 255, 0.06)',\n '--banner-text': primaryText,\n '--banner-text-muted': secondaryText,\n '--banner-primary-color': primary,\n '--banner-border': hexToRgba(secondaryText, 0.45) || 'rgba(107, 114, 128, 0.45)',\n '--banner-info-bg': hexToRgba(primary, 0.12) || 'rgba(101, 163, 13, 0.12)',\n '--banner-info-border': hexToRgba(primary, 0.25) || 'rgba(101, 163, 13, 0.25)',\n '--banner-success-bg': 'rgba(34, 197, 94, 0.18)',\n '--banner-success-text': '#166534',\n '--banner-danger-bg': 'rgba(239, 68, 68, 0.18)',\n '--banner-danger-text': '#991b1b',\n '--banner-danger-btn': '#dc2626',\n '--banner-danger-btn-hover': '#b91c1c',\n '--banner-warning-bg': 'rgba(245, 158, 11, 0.12)',\n '--banner-warning-border': 'rgba(245, 158, 11, 0.28)',\n '--banner-warning-text': '#fbbf24',\n '--banner-overlay': 'rgba(2, 6, 23, 0.72)',\n '--font-type': rightsCenterSettings.font_family || 'sans-serif',\n '--rc-btn-text': buttonText,\n };\n },\n [rightsCenterSettings]\n );\n\n const cloneJson = (value) => {\n try {\n return JSON.parse(JSON.stringify(value));\n } catch (_e) {\n return value;\n }\n };\n\n const getJson = async (path, options = {}) => {\n const bypassCache = !!options.bypassCache;\n const base = apiUrl || apiBaseUrl || '';\n const url = `${base}${path}`;\n const cacheKey = `GET:${url}`;\n\n if (!bypassCache && responseCacheRef.current.has(cacheKey)) {\n return cloneJson(responseCacheRef.current.get(cacheKey));\n }\n\n let res;\n try {\n res = await fetch(url, { headers: authHeaders });\n } catch (error) {\n throw error;\n }\n\n if (!res.ok) {\n throw new Error(`GET failed (${res.status}) for ${path}`);\n }\n\n const payload = await res.json();\n if (!bypassCache) {\n responseCacheRef.current.set(cacheKey, cloneJson(payload));\n }\n return payload;\n };\n\n const fetchRightsCenterSettings = async () => {\n const query = assetId ? `?asset_id=${encodeURIComponent(assetId)}` : '';\n const base = apiUrl || apiBaseUrl || '';\n if (!base) return;\n\n const candidates = [`${base}/api/v1/internal/rights-center/settings/global${query}`];\n\n let lastError = null;\n\n for (const url of candidates) {\n let res;\n try {\n res = await fetch(url, { headers: authHeaders });\n } catch (e) {\n lastError = e;\n continue;\n }\n\n if (!res.ok) {\n if (res.status === 401 || res.status === 403) {\n throw new Error(`GET failed (${res.status}) for rights center settings`);\n }\n lastError = new Error(`GET failed (${res.status}) for rights center settings`);\n continue;\n }\n\n const payload = await res.json();\n setRightsCenterSettings(normalizeRightsCenterSettings(payload));\n return;\n }\n\n if (lastError) throw lastError;\n };\n\n const fetchRightsTabData = async () => {\n await Promise.allSettled([\n getJson('/api/v1/internal/dpo')\n .then((payload) => setDpoInfo(normalizeObjectResponse(payload))),\n getJson(`/api/v1/internal/nominee/user/${userId}`)\n .then((payload) => setNominees(normalizeArrayResponse(payload))),\n getJson(`/api/v1/internal/grievance/user/${userId}`)\n .then((payload) => setTickets(normalizeArrayResponse(payload))),\n ]);\n };\n\n const requestApi = async (method, path, payload = null) => {\n const base = apiUrl || apiBaseUrl || '';\n const url = `${base}${path}`;\n let res;\n\n try {\n res = await fetch(url, {\n method,\n headers: payload ? { 'Content-Type': 'application/json', ...authHeaders } : authHeaders,\n body: payload ? JSON.stringify(payload) : undefined,\n });\n } catch (e) {\n throw e;\n }\n\n if (!res) {\n throw new Error(`No response for ${path}`);\n }\n\n if (!res.ok) {\n let detail = '';\n try {\n const body = await res.json();\n detail = body?.detail ? `: ${body.detail}` : '';\n } catch (_e) {\n // Ignore response parse issues and fall back to status-only error.\n }\n throw new Error(`Request failed (${res.status}) for ${path}${detail}`);\n }\n\n return res;\n };\n\n // ------ Handlers ------\n\n const handleNomineeSubmit = e => {\n e.preventDefault();\n const payload = { user_id: userId, client_user_id: userId, ...nomineeForm };\n\n const method = nominee && editing ? 'PUT' : 'POST';\n const path = nominee && editing ? `/api/v1/internal/nominee/${nominee.id}` : '/api/v1/internal/nominee';\n\n requestApi(method, path, payload)\n .then(r => r.json())\n .then(n => {\n setNominees([n]);\n setEditing(false);\n setNomineeForm({\n nominee_name: '',\n relationship: '',\n nominee_email: '',\n nominee_mobile: '',\n purpose_of_appointment: '',\n });\n })\n .catch(console.error);\n };\n\n const handleDeleteNominee = () => {\n if (!nominee) return;\n requestApi('DELETE', `/api/v1/internal/nominee/${nominee.id}`)\n .then(() => setNominees([]))\n .catch(console.error);\n };\n\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 requestApi('POST', '/api/v1/internal/grievance', payload)\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 [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 [showAccessModal, setShowAccessModal] = useState(false);\n const [deleteConfirmed, setDeleteConfirmed] = useState(false);\n const [accessConfirmed, setAccessConfirmed] = 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: resolveExpiry(purpose),\n processingActivity: resolveProcessingActivity(purpose, record),\n collectionPoint: record.title || record.name || 'Collection Point',\n collectionId: record.collectionPoint || record.collection_point || record.bannerId || record.id,\n type: (purpose.isMandatory || purpose.is_mandatory) ? 'Mandatory' : 'Optional',\n dataElements: getPurposeDataElements(purpose, record),\n shownToPrincipal: !!(record.shownToPrincipal !== undefined ? record.shownToPrincipal : record.shown_to_principal),\n consented: normalizeConsentedValue(purpose.consented),\n }))\n );\n\n // Fetch and merge user overlays with all banners; filter to active\n const fetchUserConsents = async (options = {}) => {\n const bypassCache = !!options.bypassCache;\n setConsentsLoading(true);\n try {\n const assetQuery = assetId ? { asset_id: assetId } : {};\n const userRecords = await getJson(withQuery(`/api/v1/internal/consent/user/${userId}`, assetQuery), { bypassCache });\n\n const userRows = normalizeArrayResponse(userRecords);\n\n let sourceRows = userRows;\n if (sourceRows.length === 0) {\n const allBanners = await getJson(withQuery('/api/v1/internal/consent', assetQuery), { bypassCache });\n sourceRows = normalizeArrayResponse(allBanners);\n }\n\n const merged = sourceRows\n .map((cp) => {\n const cpId = String(cp.collectionPoint || cp.collection_point || cp.bannerId || cp.id || '');\n const shownToPrincipal = cp?.shownToPrincipal ?? cp?.shown_to_principal ?? false;\n const purposes = (cp.purposes || []).map((p) => ({\n ...p,\n id: String(p.id || ''),\n consented: normalizeStatus(p.consented) ?? 'declined',\n }));\n\n return {\n ...cp,\n collection_point: cpId,\n collectionPoint: cpId,\n title: cp.title || cp.name || 'Collection Point',\n shown_to_principal: shownToPrincipal,\n shownToPrincipal: shownToPrincipal,\n purposes,\n };\n })\n .filter((cp) => !assetId || String(firstDefined(cp?.asset?.id, cp?.asset_id, cp?.assetId, '')) === String(assetId));\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 let isActive = true;\n\n const bootstrap = async () => {\n setIsInitializing(true);\n responseCacheRef.current.clear();\n\n await Promise.allSettled([\n fetchRightsCenterSettings(),\n fetchRightsTabData(),\n fetchUserConsents({ bypassCache: true }),\n ]);\n\n if (isActive) {\n setIsInitializing(false);\n }\n };\n\n bootstrap().catch(console.error);\n return () => {\n isActive = false;\n };\n }, [userId, apiUrl, apiBaseUrl, apiKey, organizationId, assetId, authToken]);\n\n const handleToggle = (consentId, collectionId) => {\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 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 const handleSave = async () => {\n try {\n if (!userId) {\n throw new Error('Cannot save consent: userId is required');\n }\n if (!organizationId) {\n throw new Error('Cannot save consent: organizationId (X-Org-Id) is required');\n }\n\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 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 const saveResults = await Promise.allSettled(\n Object.entries(byCollection)\n .filter(([collectionId]) => changedByCollection[collectionId]?.length > 0)\n .map(async ([collectionId, list]) => {\n const collectionInitialState = initialStateByCollection.get(collectionId);\n\n const purposesPayload = list\n .map((p) => {\n const initialStatus = collectionInitialState?.get(p.id) || 'declined';\n return {\n id: p.id,\n name: p.name,\n consented: normalizeConsentedValue(p.consented),\n initialStatus\n };\n });\n\n const hasApproval = purposesPayload.some(\n (p) => p.consented === 'accepted'\n );\n\n // Business rule: consented yes -> approved, consented no -> revoked.\n const action = hasApproval ? 'approved' : 'revoked';\n\n const payload = {\n userId,\n purposes: purposesPayload.map(({ initialStatus, ...rest }) => rest),\n action,\n assetId,\n };\n\n if (changedByCollection[collectionId]?.length > 0) {\n payload.changedPurposes = changedByCollection[collectionId];\n }\n\n // Consent save to truAPI backend endpoint\n // This is the only supported endpoint for recording consent\n await requestApi('POST', `/api/v1/internal/consent/${collectionId}`, payload);\n })\n );\n\n const failedSaves = saveResults.filter((r) => r.status === 'rejected');\n if (failedSaves.length === 0) {\n // Save current toggled state as the new baseline without forcing a full refetch.\n setInitialConsentGroups(JSON.parse(JSON.stringify(consentGroups)));\n setDirty(false);\n setShowSaveModal(true);\n return;\n }\n\n const successCount = saveResults.length - failedSaves.length;\n if (successCount > 0) {\n alert(`Saved ${successCount} collection point(s), but ${failedSaves.length} failed. Please retry.`);\n } else {\n const first = failedSaves[0]?.reason;\n console.error('Consent save failed:', first);\n throw first || new Error('Failed to save consent');\n }\n } catch (e) {\n console.error(e);\n setShowSaveModal(false);\n alert('Failed to save consent preferences. Please try again.');\n }\n };\n\n const createRightsRequest = async (type) => {\n if (type === 'access') {\n await requestApi('POST', '/api/v1/internal/rights-requests/access-request', {\n user_id: userId,\n subject: 'Data Access Request',\n description: 'User requested access to personal data from Rights Center.',\n metadata: {\n asset_id: assetId,\n source: 'Rights Center',\n },\n });\n return;\n }\n\n await requestApi('POST', '/api/v1/internal/rights-requests/deletion-request', {\n user_id: userId,\n reason: 'User requested data deletion from Rights Center',\n metadata: {\n asset_id: assetId,\n requested_at: new Date().toISOString(),\n source: 'Rights Center',\n },\n });\n };\n\n const handleAccessRequest = async () => {\n try {\n await createRightsRequest('access');\n setAccessConfirmed(true);\n setTimeout(() => {\n setShowAccessModal(false);\n }, 1500);\n } catch (error) {\n console.error('Error submitting access request:', error);\n alert('Failed to submit access request. Please try again later.');\n }\n };\n\n const handleDeleteRequest = async () => {\n try {\n await createRightsRequest('delete');\n\n setDeleteConfirmed(true);\n setTimeout(() => {\n setShowDeleteModal(false);\n }, 1500);\n } catch (error) {\n console.error('Error submitting deletion request:', error);\n alert('Failed to submit deletion request. Please try again later.');\n }\n };\n\n return (\n <div className=\"rc-container\" style={rcThemeVars}>\n {isInitializing && (\n <div className=\"rc-initial-loader\" role=\"status\" aria-live=\"polite\">\n <div className=\"rc-spinner\" />\n <span>Loading Rights Center...</span>\n </div>\n )}\n\n {!isInitializing && (\n <React.Fragment>\n {/* Tabs Navigation */}\n <nav className=\"rc-tabs\">\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n disabled={consentsLoading && consents.length === 0}\n className={`rc-tab ${activeTab === tab ? 'rc-tab-active' : ''}`}\n >\n {tab}\n </button>\n ))}\n </nav>\n\n {/* ------------------ CONSENT TAB ------------------ */}\n {activeTab === 'Consent' && (\n <div className=\"rc-content\">\n <div className=\"rc-section-header\">\n <h2 className=\"rc-section-title\">{rightsCenterSettings.consents_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.flatMap((cp) =>\n (cp.purposes || []).map((p) => {\n const dataElementsText = (cp.data_elements || []).length > 0\n ? (cp.data_elements || [])\n .map((el) =>\n typeof el === 'string' || typeof el === 'number'\n ? String(el)\n : el?.name || el?.label || el?.title || el?.id\n )\n .filter(Boolean)\n .join(', ')\n : 'Not specified';\n const purposeDataElementsText = (() => {\n const purposeElements = Array.isArray(p.data_elements) ? p.data_elements : [];\n if (purposeElements.length > 0) {\n return purposeElements\n .map((el) =>\n typeof el === 'string' || typeof el === 'number'\n ? String(el)\n : el?.name || el?.label || el?.title || el?.id\n )\n .filter(Boolean)\n .join(', ');\n }\n return dataElementsText;\n })();\n const shownToPrincipal = p.shown_to_principal ?? cp.shown_to_principal;\n const consentedAccepted = normalizeConsentedValue(p.consented) === 'accepted';\n\n return (\n <div key={`${cp.collectionPoint || cp.collection_point}-${p.id}`} className=\"rc-consent-item\">\n <div className=\"rc-consent-card-row rc-consent-card-row-top\">\n <div className=\"rc-consent-purpose-block\">\n <h3 className=\"rc-consent-title\">{p.name}</h3>\n <span className={`rc-badge ${p.isMandatory || p.is_mandatory ? 'rc-badge-mandatory' : 'rc-badge-optional'}`}>\n {p.isMandatory || p.is_mandatory ? 'Necessary' : 'Optional'}\n </span>\n </div>\n\n <div className=\"rc-consent-meta-block\">\n <span className=\"rc-detail-label\">Expiry Period:</span>{' '}\n <span className=\"rc-detail-value\">{resolveExpiry(p)}</span>\n </div>\n\n <div className=\"rc-consent-toggle-wrap\">\n <label className=\"rc-switch\">\n <input\n type=\"checkbox\"\n disabled={false}\n checked={consentedAccepted}\n onChange={() => handleToggle(p.id, cp.collectionPoint || cp.collection_point)}\n />\n <span className=\"rc-slider\"></span>\n </label>\n </div>\n </div>\n\n <div className=\"rc-consent-card-row rc-consent-card-row-middle\">\n <div className=\"rc-consent-meta-block\">\n <span className=\"rc-detail-label\">Processing Activity:</span>{' '}\n <span className=\"rc-detail-value\">{resolveProcessingActivity(p, cp)}</span>\n </div>\n <div className=\"rc-status-item\">\n <span className=\"rc-status-label\">Show:</span>\n <span className={`rc-status-pill rc-status-pill-show ${shownToPrincipal ? 'rc-status-yes' : 'rc-status-no'}`}>\n {shownToPrincipal ? '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 rc-status-pill-consent ${consentedAccepted ? 'rc-status-yes' : 'rc-status-no'}`}>\n {consentedAccepted ? 'Yes' : 'No'}\n </span>\n </div>\n </div>\n\n <div className=\"rc-consent-card-row rc-consent-card-row-bottom\">\n <span className=\"rc-detail-label\">Data Elements:</span>{' '}\n <span className=\"rc-detail-value\">{purposeDataElementsText || 'Not specified'}</span>\n </div>\n </div>\n );\n })\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 </div>\n )}\n\n {/* ------------------ RIGHTS TAB ------------------ */}\n {activeTab === 'Rights' && (\n <div className=\"rc-content\">\n <h2 className=\"rc-section-title\">{rightsCenterSettings.rights_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\" onClick={() => { setAccessConfirmed(false); setShowAccessModal(true); }}>\n Request to Access My Data\n </button>\n <button className=\"rc-btn-primary\" onClick={() => setShowDeleteModal(true)}>\n Request to Delete My Data\n </button>\n </div>\n\n {showAccessModal && (\n <div className=\"rc-modal-overlay\">\n <div className=\"rc-modal rc-modal-small\">\n {!accessConfirmed ? (\n <div className=\"rc-modal-content\">\n <Info className=\"rc-warning-icon\" />\n <h3 className=\"rc-modal-title\">Confirm Access Request</h3>\n <p className=\"rc-modal-subtitle\">\n Submit request to access your data?\n </p>\n <div className=\"rc-modal-actions\">\n <button className=\"rc-btn-primary\" onClick={handleAccessRequest}>\n Confirm Request\n </button>\n <button className=\"rc-btn-secondary\" onClick={() => setShowAccessModal(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 access request has been submitted successfully.</p>\n </div>\n )}\n </div>\n </div>\n )}\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 <Info className=\"rc-warning-icon\" />\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\">Learn how we collect, use, and protect your data</p>\n <p className=\"rc-transparency-text\">\n {rightsCenterSettings.transparency_description ||\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 {/* ------------------ DPO TAB ------------------ */}\n {activeTab === 'DPO' && (\n <div className=\"rc-content\">\n <h2 className=\"rc-section-title\">DPO Information</h2>\n\n <div className=\"rc-dpo-preview-list\">\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Full Name</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.full_name || 'Not available'}</p>\n </div>\n\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Email</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.email || 'Not available'}</p>\n </div>\n\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Appointment Date</div>\n <p className=\"rc-dpo-preview-value\">{formatDateValue(dpoInfo?.appointment_date)}</p>\n </div>\n\n {rightsCenterSettings.dpo_qualifications_enabled && (\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Qualifications</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.qualifications || 'Not available'}</p>\n </div>\n )}\n\n {rightsCenterSettings.dpo_responsibilities_enabled && (\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Responsibilities</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.responsibilities || 'Not available'}</p>\n </div>\n )}\n\n {rightsCenterSettings.dpo_working_hours_enabled && (\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Working Hours</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.working_hours || 'Not available'}</p>\n </div>\n )}\n\n {rightsCenterSettings.dpo_response_time_enabled && (\n <div className=\"rc-dpo-preview-item\">\n <div className=\"rc-dpo-preview-label\">Response Time</div>\n <p className=\"rc-dpo-preview-value\">{dpoInfo?.response_time || 'Not available'}</p>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* ------------------ NOMINEE TAB ------------------ */}\n {activeTab === 'Nominee' && (\n <div className=\"rc-content\">\n <h2 className=\"rc-section-title\">{rightsCenterSettings.nominees_section_title || 'Appoint Nominee'}</h2>\n <p className=\"rc-section-subtitle\">Appoint someone to manage your data rights on your behalf</p>\n\n <div className=\"rc-btn-primary\">\n <div className=\"rc-btn-title\">⚠️</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\">{nominee.purpose_of_appointment}</span>\n </div>\n </div>\n )}\n\n <div className=\"rc-nominee-actions-fullwidth\">\n <button className=\"rc-btn-primary\" onClick={() => {\n setEditing(true);\n setNomineeForm({\n nominee_name: nominee.nominee_name,\n relationship: nominee.relationship,\n nominee_email: nominee.nominee_email,\n nominee_mobile: nominee.nominee_mobile,\n purpose_of_appointment: nominee.purpose_of_appointment\n });\n }}>\n Edit\n </button>\n <button className=\"rc-btn-danger\" onClick={handleDeleteNominee}>Delete</button>\n </div>\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 value={nomineeForm.nominee_name}\n onChange={e => setNomineeForm({ ...nomineeForm, nominee_name: e.target.value })}\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 => setNomineeForm({ ...nomineeForm, relationship: e.target.value })}\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 => setNomineeForm({ ...nomineeForm, nominee_email: e.target.value })}\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 => setNomineeForm({ ...nomineeForm, nominee_mobile: e.target.value })}\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 => setNomineeForm({ ...nomineeForm, purpose_of_appointment: e.target.value })}\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 type=\"button\" className=\"rc-btn-secondary\" onClick={() => setEditing(false)}>\n Cancel\n </button>\n )}\n </div>\n </form>\n )}\n </div>\n )}\n\n {/* ------------------ GRIEVANCE TAB ------------------ */}\n {activeTab === 'Grievance' && (\n <div className=\"rc-content\">\n {rightsCenterSettings.grievance_mode === 'external' ? (\n <div>\n <h2 className=\"rc-section-title\">Grievance</h2>\n <p className=\"rc-section-subtitle\">Grievance requests are handled on your organization portal.</p>\n <button\n className=\"rc-btn-primary\"\n onClick={() => {\n if (rightsCenterSettings.grievance_external_url) {\n window.open(rightsCenterSettings.grievance_external_url, '_blank', 'noopener,noreferrer');\n }\n }}\n disabled={!rightsCenterSettings.grievance_external_url}\n >\n Open Grievance Portal\n </button>\n </div>\n ) : (\n <React.Fragment>\n <div className=\"rc-section-header\">\n <div>\n <h2 className=\"rc-section-title\">Grievance Tickets</h2>\n <p className=\"rc-section-subtitle\">Submit privacy concerns or view your existing tickets</p>\n </div>\n <button className=\"rc-btn-primary\" onClick={() => setShowForm(!showForm)}>\n Create New Ticket\n </button>\n </div>\n\n {showForm && (\n <form className=\"rc-grievance-form\" onSubmit={(e) => {\n handleGrievanceSubmit(e);\n setShowForm(false);\n }}>\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Subject *</label>\n <input\n type=\"text\"\n className=\"rc-form-input\"\n placeholder=\"Brief description of your concern\"\n value={grievanceForm.subject}\n onChange={(e) => setGrievanceForm({ ...grievanceForm, subject: e.target.value })}\n required\n />\n </div>\n\n <div className=\"rc-form-group\">\n <label className=\"rc-form-label\">Category *</label>\n <select\n className=\"rc-form-select\"\n value={grievanceForm.category}\n onChange={(e) => setGrievanceForm({ ...grievanceForm, category: e.target.value })}\n required\n >\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 className=\"rc-form-textarea\"\n placeholder=\"Detailed description of your concern or request\"\n rows=\"4\"\n value={grievanceForm.description}\n onChange={(e) => setGrievanceForm({ ...grievanceForm, description: e.target.value })}\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\">{ticket.status || 'Open'}</span>\n </div>\n <p className=\"rc-ticket-description\">{ticket.description}</p>\n <div className=\"rc-ticket-meta\">\n <span className=\"rc-ticket-meta-item\">Ticket: {ticket.ticket_id}</span>\n <span className=\"rc-ticket-meta-item\">Category: {ticket.category}</span>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </React.Fragment>\n )}\n </div>\n )}\n </React.Fragment>\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} assetId - Asset ID (required when using API key auth)\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 assetId,\n apiUrl,\n apiBaseUrl,\n theme,\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}\n bannerId={bannerId}\n userId={userId}\n assetId={assetId}\n apiUrl={apiUrl}\n apiBaseUrl={apiBaseUrl}\n theme={theme}\n logoUrl={logoUrl}\n companyName={companyName}\n onClose={onClose}\n />\n );\n}"],"names":["normalizePurposes","purposes","defaultSelection","normalized","map","p","rawPurpose","isLegitimate","_extends","legalBasis","withdrawable","frequency","consented","isMandatory","isDynamic","normalizePurpose","Array","isArray","getPriority","concat","sort","a","b","sortPurposes","dynamicTranslations","ta","hi","translateDynamic","text","i18n","language","detectBannerCase","hasNotice","some","hasConsent","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","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","from","entries","observer","numTimesAdded","ResourceStore","ns","defaultNS","super","ignoreJSONStructure","addNamespaces","removeNamespaces","index","splice","getResource","lng","result","join","addResource","value","silent","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","exists","o","interpolation","opt","resolved","isObject","returnObjects","extractFromKey","nsSeparator","namespaces","wouldCheckForNsInKey","seemsNaturalLanguage","userDefinedKeySeparator","userDefinedNsSeparator","possibleChars","filter","c","r","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","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","msg","Date","loadedClb","cb","initialized","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","i18nInstance","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","unescape","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","_ref$showLanguage","showLanguage","_useTranslation","isLangOpen","setIsLangOpen","processPlaceholder","title","companyName","disclaimer","className","src","alt","color","onClick","fill","viewBox","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","backgroundColor","borderColor","en","translation","Gender","Name","Address","CollapsibleDataSection","items","isOpen","onToggle","_ref$chevronLeft","chevronLeft","item","id","ModernPurposeCard","purpose","banner","_ref$showNecessaryTag","showNecessaryTag","openSection","setOpenSection","isAccepted","expiryLabel","digits","formatExpiryText","expiryPeriod","handleToggleSection","section","dataElements","processingActivities","dataProcessors","legalEntities","tools","activity","idx","border","checked","onChange","opacity","showProcessors","ModernBannerFooter","footerText","htmlContent","linkText","url","fullUrl","dangerouslySetInnerHTML","__html","ModernBannerActions","onRejectAll","onConsentAll","onAcceptSelected","onAcceptMandatory","actionButtonText","rejectAllText","rejectAllColor","acceptAllText","onlyNecessaryText","onlyNecessaryColor","_ref$purposes","_ref$isBottomReached","isBottomReached","_ref$hasUserInteracte","hasUserInteracted","_ref$isSplitLayout","isSplitLayout","_ref$showAcceptAll","showAcceptAll","_ref$minimal","minimal","anyOptionalAccepted","disabledClasses","buttonBase","splitLayoutContent","Fragment","disabled","defaultLayoutContent","GroupHeader","TabButton","_ref2","isActive","role","tabId","panelId","label","TabPanel","_ref3","labelledBy","hidden","LegitimateUseContent","_ref4","noticePurposes","ConsentPurposesContent","_ref5","allConsentPurposes","onChangePurpose","groups","g","group","gIdx","NoticeOnlyBannerInner","_banner$purposes","onAcknowledge","actionLoading","settings","bannerSettings","primaryColor","acknowledgeText","noticeAcknowledgeText","setIsBottomReached","scrollRef","_scrollRef$current","scrollHeight","clientHeight","fontType","fontSize","fontFamily","logo_url","ref","onScroll","_e$target","scrollTop","mandatoryLabel","PurposeRow","description","CompactPurposeRow","isExpanded","toggleExpand","_React$useState","openSections","setOpenSections","toggleSection","_extends2","stopPropagation","elements","registry","center_modal","_banner$purposes2","_banner$bannerSetting","secondaryColor","finalPrimaryColor","finalSecondaryColor","warningMessage","width","height","cx","cy","x1","y1","x2","y2","savePreferencesColor","generalNoticeTemplate","tabbed_banner","_ref6","onAcknowledgeNotice","bannerCase","uiState","settingsOverride","activeTab","setActiveTab","_useState2","_ref7","_ref7$noticePurposes","_ref7$consentPurposes","consentPurposes","handleScroll","styleVars","isOnLegitimateTab","isOnPurposesTab","tab","marginTop","display","justifyContent","marginLeft","points","preferences_modal","compact","savePreferencesText","floating_card","_banner$banner_settin","_banner$banner_settin2","onPersonalize","layoutClass","dynamicFooter","withLinks","banner_settings","banner_title","disclaimer_text","notice_only","inline_single_row","isLoading","general_compact_list","expandedRows","setExpandedRows","_extends3","general_split_pane","_activePurpose$proces","_activePurpose$dataEl","_activePurpose$legalE","_activePurpose$tools","selectedPurposeId","setSelectedPurposeId","activePurpose","isSelected","_catch","body","recover","_finallyRethrows","finalizer","EMPTY_ARRAY","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","normalizeUrl","baseUrl","startsWith","cleanBase","endsWith","TruConsentModal","apiKey","organizationId","bannerId","userId","assetId","apiUrl","apiBaseUrl","_props$theme","theme","_props$companyName","onClose","onSubmit","token","setBanner","setIsLoading","_useState3","fetchError","setFetchError","_useState4","visible","setVisible","setShowFullNotice","_useState6","bannerFetchAt","setBannerFetchAt","closeButtonClickedRef","effectiveOrgId","_useState7","resolvedAssetId","setResolvedAssetId","resolvedCompanyName","organizationName","organization","effectiveBaseUrl","resolvedLogoUrl","effectiveAssetId","atob","asset_id","fetchUrl","bId","aId","uId","encodeURIComponent","headers","fetchStart","performance","now","fetch","status","ok","json","_data$bannerSettings","consentStatus","initializedPurposes","fetchMs","toFixed","message","engine","_bannerData$bannerSet","bannerData","_ref$previousConsent","previousConsent","_ref$bannerFetchAt","bannerDisplayAt","setBannerDisplayAt","requestId","crypto","randomUUID","sessionId","Math","random","actionTakenRef","actionRunningRef","noticeLoggedAtRef","setActionLoading","_useState5","setError","show","action","intendedPurposes","hCaseData","setHCaseData","setHasUserInteracted","initialPurposes","purpose_id","filterDynamicPurposes","_useState8","setPurposes","mandatoryConsentPurposes","optionalConsentPurposes","noticeOnly","consentOnly","isHCase","hasRequiredConsent","deriveUIState","buildHeaders","sendNoticeShown","metadata","_temp3","_temp2","formattedNoticePurposes","purposeId","version","collectionPointVersion","noticeMetadata","event_type","banner_fetched_at","banner_displayed_at","payload","consentLanguage","collectionPointId","collectionPoint","consentTimestamp","_temp","method","keepalive","sendSuppressionUpdate","purposePayload","declinedIds","declinedPurposeIds","sendLogEvent","rawPurposes","formattedPurposes","collection_point_version","user_interaction_at","notice_logged_at","_wasThrown","_result2","togglePurpose","newStatus","checkHCaseIntercept","customPurposes","targetPurposes","acceptAll","acceptedPurposes","enhancedMetadata","button_used","_wasThrown2","_result3","rejectAll","declinedPurposes","_wasThrown3","_result4","onlyNecessary","mandatoryPurposes","_wasThrown4","_result5","savePreferences","totalCount","acceptedCount","_wasThrown5","_result6","closeBanner","_temp4","acknowledgeNotice","_wasThrown6","_result7","handleHCaseProceed","finalAction","h_case_warning_shown","h_case_acknowledged","_wasThrown7","_result8","handleHCaseBack","actions","hCaseActions","useConsentEngine","activeBanner","close","handleAcceptAll","handleRejectAll","handleOnlyNecessary","handleSavePreferences","handleAcknowledgeNotice","rawTemplateKey","templateKey","themeClass","ReactDOM","createPortal","TemplateComponent","content","wrapperStyle","maxWidth","_excluded","_iteratorSymbol","iterator","_settle","pact","_Pact","onFulfilled","onRejected","_this","_isSettledPact","thenable","DEFAULT_RIGHTS_CENTER_SETTINGS","background_color","primary_text_color","secondary_text_color","button_color","button_text_color","font_family","show_consents_section","show_rights_section","show_nominees_section","show_transparency_section","show_dpo_section","show_grievance_section","grievance_mode","grievance_external_url","consents_section_title","rights_section_title","nominees_section_title","dpo_qualifications_enabled","dpo_responsibilities_enabled","dpo_working_hours_enabled","dpo_response_time_enabled","transparency_description","normalizeArrayResponse","withQuery","queryObj","URLSearchParams","firstDefined","toReadableValue","fallback","_firstDefined","normalizeConsentedValue","includes","resolveExpiry","expiry_period","expiry_type","expiry","expiry_period_id","resolveProcessingActivity","processing_activity","processingActivity","collection_point_name","getPurposeDataElements","purposeElements","data_elements","el","hexToRgba","hex","alpha","clean","full","ch","intVal","Number","authToken","rightsCenterSettings","setRightsCenterSettings","setIsInitializing","responseCacheRef","authHeaders","dpoInfo","setDpoInfo","nominees","setNominees","editing","setEditing","nominee_name","relationship","nominee_email","nominee_mobile","purpose_of_appointment","nomineeForm","setNomineeForm","nominee","tickets","setTickets","setShowGrievanceForm","_useState0","subject","category","grievanceForm","setGrievanceForm","tabs","enabled","rcThemeVars","bg","primaryText","secondaryText","primary","buttonText","cloneJson","_e","getJson","_result","bypassCache","has","_fetch","fetchRightsCenterSettings","_temp6","_exit2","lastError","query","base","_temp5","check","step","_cycle","_fixup","TypeError","values","array","_forTo","_forOf","unwrapDataPayload","normalizeRightsCenterSettings","_fetch2","fetchRightsTabData","allSettled","normalizeObjectResponse","requestApi","_temp1","_temp9","_temp8","detail","_temp7","_exit4","_temp0","_fetch3","_useState1","consents","setConsents","_useState10","consentsLoading","setConsentsLoading","_useState11","dirty","setDirty","_useState12","showSaveModal","setShowSaveModal","_useState13","consentGroups","setConsentGroups","_useState14","initialConsentGroups","setInitialConsentGroups","_useState15","showDeleteModal","setShowDeleteModal","_useState16","showAccessModal","setShowAccessModal","_useState17","deleteConfirmed","setDeleteConfirmed","_useState18","accessConfirmed","setAccessConfirmed","_useState19","showForm","setShowForm","normalizeStatus","fetchUserConsents","_temp12","assetQuery","userRecords","_temp11","merged","sourceRows","cp","_cp$shownToPrincipal","cpId","collection_point","shownToPrincipal","shown_to_principal","_normalizeStatus","_cp$asset","asset","flatMap","record","collectionId","is_mandatory","_temp10","allBanners","clear","bootstrap","createRightsRequest","_exit5","_temp14","user_id","reason","requested_at","toISOString","_temp13","initialStateByCollection","purposeMap","byCollection","changedByCollection","collectionInitialState","_changedByCollection$","_changedByCollection$2","purposesPayload","initialStatus","_objectWithoutPropertiesLoose","changedPurposes","saveResults","failedSaves","successCount","_failedSaves$","first","alert","handleSave","CheckCircle2","Info","_p$shown_to_principal","dataElementsText","purposeDataElementsText","consentedAccepted","consentId","_temp15","_temp16","full_name","email","date","getTime","toLocaleDateString","formatDateValue","appointment_date","qualifications","responsibilities","working_hours","response_time","User","Mail","Clock","preventDefault","client_user_id","placeholder","required","rows","open","handleGrievanceSubmit","ticket","ticket_id"],"mappings":"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"}