@magicfeedback/popup-sdk 1.1.6 → 1.1.8
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/README.md +5 -0
- package/dist/index.d.mts +63 -8
- package/dist/index.d.ts +63 -8
- package/dist/index.js +244 -43
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +242 -41
- package/dist/index.mjs.map +1 -1
- package/dist/react-native.d.mts +30 -3
- package/dist/react-native.d.ts +30 -3
- package/dist/react-native.js +244 -43
- package/dist/react-native.js.map +1 -1
- package/dist/react-native.mjs +242 -41
- package/dist/react-native.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tracking/tracking-manager.ts","../src/ui/font.ts","../src/util/logger.ts","../node_modules/@magicfeedback/native/dist/magicfeedback-sdk.browser.js","../src/assets/style.css","../src/ui/renderPopup.ts","../src/index.ts","../src/types/index.ts","../src/triggers/index.ts","../src/config/env.ts","../src/platform/react-native-renderer.ts","../src/ui/surveyHtml.ts","../src/platform/renderer.ts","../src/core/deepdots-popups.ts","../src/analytics/analytics-manager.ts","../src/analytics/feedback-payload.ts","../src/tracking/navigation-observer.ts","../src/analytics/device-info.ts","../src/analytics/geo-info.ts","../src/analytics/engagement-tracker.ts","../src/contact/contact-manager.ts","../src/analytics/crash-reporter.ts","../src/analytics/messaging.ts","../src/react-native/setup.ts"],"sourcesContent":["/**\n * Identidad + sesión para el tracking de navegación (Fase 1).\n * Implementa el \"Contrato común Web+KMP\".\n *\n * Modelo: el SDK gestiona el `user_id` (persistente). El `session_id` es propiedad\n * del BACKEND: llega en la respuesta de `POST /sdk/popups` y se cachea; el backend\n * cose sesiones por `user_id` + ventana. El SDK NO genera ni expira sesiones.\n *\n * Sin dependencias de DOM: recibe el storage y (opcionalmente) el reloj y el\n * generador de uuid por inyección. El binding a `localStorage` vive en `createDefaultStorage`.\n */\n\n/** Store clave/valor mínimo (espejo conceptual del `KeyValueStorage` de KMP). */\nexport interface KeyValueStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\n/** Impl en memoria — usada en tests y como fallback sin `localStorage`. */\nexport class InMemoryStorage implements KeyValueStorage {\n private map = new Map<string, string>();\n getItem(key: string): string | null {\n return this.map.has(key) ? (this.map.get(key) as string) : null;\n }\n setItem(key: string, value: string): void {\n this.map.set(key, value);\n }\n removeItem(key: string): void {\n this.map.delete(key);\n }\n}\n\n/** Storage por defecto en Web: `localStorage` si está disponible, si no in-memory. */\nexport function createDefaultStorage(): KeyValueStorage {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n const ls = window.localStorage;\n const probe = '__deepdots_probe__';\n ls.setItem(probe, '1');\n ls.removeItem(probe);\n return {\n getItem: (k) => ls.getItem(k),\n setItem: (k, v) => ls.setItem(k, v),\n removeItem: (k) => ls.removeItem(k),\n };\n }\n } catch {\n // cae a in-memory\n }\n return new InMemoryStorage();\n}\n\n/** Claves de storage — namespace `deepdots.*`. Solo identidad (la sesión no se persiste). */\nexport const STORAGE_KEYS = {\n userId: 'deepdots.user_id',\n firstSeen: 'deepdots.user.first_seen',\n contactAttributes: 'deepdots.contact.attributes',\n} as const;\n\n/** Par clave/valor con el formato `NativeAnswer` que espera `@magicfeedback/native`. */\nexport interface IdentityAnswer {\n key: string;\n value: string[];\n}\n\n/**\n * Construye el `profile` y el `metadata` de identidad para inyectar en el survey\n * (`magicfeedback.form(appId, publicKey, profile, metadata)`), según el contrato §5.\n * `session_id` solo se incluye si el backend ya lo proveyó.\n */\nexport function buildSurveyIdentity(\n userId: string | null,\n sessionId: string | null,\n miniService: string | null = null,\n analyticsFeedbackSessionId: string | null = null,\n): { profile: IdentityAnswer[]; metadata: IdentityAnswer[] } {\n const profile: IdentityAnswer[] = userId ? [{ key: 'external-user-id', value: [userId] }] : [];\n const metadata: IdentityAnswer[] = [];\n if (sessionId) metadata.push({ key: 'session_id', value: [sessionId] });\n if (userId) metadata.push({ key: 'user_id', value: [userId] });\n if (miniService) metadata.push({ key: 'mini_service', value: [miniService] });\n if (analyticsFeedbackSessionId) metadata.push({ key: 'deepdots_analytics_feedback_session_id', value: [analyticsFeedbackSessionId] });\n return { profile, metadata };\n}\n\nexport interface TrackingManagerOptions {\n storage: KeyValueStorage;\n /** Id provisto por el cliente; si existe se usa y NO se persiste. */\n clientUserId?: string;\n /** Reloj inyectable (default `Date.now`). */\n now?: () => number;\n /** Generador de uuid inyectable (default uuid v4). */\n uuid?: () => string;\n /** Estado inicial del tracking (default `true`). */\n enabled?: boolean;\n}\n\nfunction defaultUuid(): string {\n const g = (typeof globalThis !== 'undefined' ? globalThis : {}) as {\n crypto?: { randomUUID?: () => string; getRandomValues?: (a: Uint8Array) => Uint8Array };\n };\n if (g.crypto?.randomUUID) return g.crypto.randomUUID();\n const bytes = new Uint8Array(16);\n if (g.crypto?.getRandomValues) {\n g.crypto.getRandomValues(bytes);\n } else {\n for (let i = 0; i < 16; i++) bytes[i] = Math.floor(Math.random() * 256);\n }\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0'));\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex\n .slice(6, 8)\n .join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10, 16).join('')}`;\n}\n\nexport class TrackingManager {\n private storage: KeyValueStorage;\n private clientUserId?: string;\n private now: () => number;\n private uuid: () => string;\n private enabled: boolean;\n\n /** session_id cacheado, provisto por el backend (no se genera ni se persiste). */\n private sessionId: string | null = null;\n private userWasJustCreated = false;\n\n constructor(options: TrackingManagerOptions) {\n this.storage = options.storage;\n this.clientUserId = options.clientUserId;\n this.now = options.now ?? (() => Date.now());\n this.uuid = options.uuid ?? defaultUuid;\n this.enabled = options.enabled ?? true;\n }\n\n isTrackingEnabled(): boolean {\n return this.enabled;\n }\n\n setTrackingEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n /** Resuelve el user_id según la regla: cliente > persistido > generar+persistir. */\n getUserId(): string | null {\n if (!this.enabled) return null;\n if (this.clientUserId) return this.clientUserId;\n\n const persisted = this.storage.getItem(STORAGE_KEYS.userId);\n if (persisted) return persisted;\n\n const id = this.uuid();\n this.storage.setItem(STORAGE_KEYS.userId, id);\n this.storage.setItem(STORAGE_KEYS.firstSeen, String(this.now()));\n this.userWasJustCreated = true;\n return id;\n }\n\n /** `true` solo en la primera sesión tras crear el user_id propio del SDK. */\n isNewUser(): boolean {\n return this.userWasJustCreated;\n }\n\n /** session_id actual provisto por el backend, o null si aún no llegó. */\n getSessionId(): string | null {\n if (!this.enabled) return null;\n return this.sessionId;\n }\n\n /** Cachea el session_id devuelto por el backend (respuesta de POST /sdk/popups). */\n setSessionId(sessionId: string | null): void {\n if (!this.enabled) return;\n this.sessionId = sessionId;\n }\n}\n","/**\n * Helpers puros (sin DOM) para la fuente personalizable del popup/survey.\n * Espejo exacto en KMP: `ui/Font.kt`. Cualquier cambio aquí se replica allí.\n */\n\nconst FORMAT_BY_EXT: Record<string, string> = {\n woff2: 'woff2',\n woff: 'woff',\n ttf: 'truetype',\n otf: 'opentype',\n};\n\n/** Deriva el `format()` del `@font-face` a partir de la extensión de la URL. */\nexport function fontFormatFromUrl(url: string): string | undefined {\n const clean = url.split('?')[0].split('#')[0];\n const ext = clean.slice(clean.lastIndexOf('.') + 1).toLowerCase();\n return FORMAT_BY_EXT[ext];\n}\n\n// family/url provienen de la API y se interpolan en CSS y en el <style> del HTML del WebView.\n// Saneamos para evitar romper el string/rule (CSS injection) o cerrar </style> (script injection).\nfunction sanitizeFamily(family: string): string {\n return family.replace(/[^A-Za-z0-9 ._-]/g, '').trim();\n}\n\nfunction isSafeFontUrl(url: string): boolean {\n // Solo http(s)/data y sin caracteres que rompan url(\"...\") o el <style>:\n // comillas, <>, backslash, y cualquier whitespace o carácter de control.\n if (!/^(https?:|data:)/i.test(url)) return false;\n // eslint-disable-next-line no-control-regex\n return !/[\\x00-\\x20\"<>\\\\]/.test(url);\n}\n\n/** Valor a aplicar en `font-family`: nombre custom + fallback de sistema. */\nexport function buildFontFamilyValue(family: string): string {\n const safe = sanitizeFamily(family);\n return `\"${safe}\", -apple-system, system-ui, sans-serif`;\n}\n\n/** CSS del `@font-face`. Devuelve \"\" si no hay url (o no es segura). */\nexport function buildFontFaceCss(family: string, url?: string): string {\n if (!url || !isSafeFontUrl(url)) return '';\n const safe = sanitizeFamily(family);\n const fmt = fontFormatFromUrl(url);\n const src = fmt ? `url(\"${url}\") format(\"${fmt}\")` : `url(\"${url}\")`;\n return `@font-face{font-family:\"${safe}\";src:${src};font-display:swap;}`;\n}\n","import type { DeepdotsLogger } from '../types';\n\n/**\n * Logger de módulo compartido: el core lo fija en init() con el logger inyectado\n * por el host (o `console` por defecto), y los módulos que no reciben `this`\n * (renderPopup, renderers) enrutan por aquí. `warn`/`error` caen a `log` si el\n * logger del host no los provee (solo `log` es obligatorio en DeepdotsLogger).\n */\nlet active: DeepdotsLogger = console;\n\nexport function setLogger(logger: DeepdotsLogger | undefined): void {\n active = logger ?? console;\n}\n\nexport function sdkLog(...args: unknown[]): void {\n active.log(...args);\n}\n\nexport function sdkWarn(...args: unknown[]): void {\n (active.warn ?? active.log)(...args);\n}\n\nexport function sdkError(...args: unknown[]): void {\n (active.error ?? active.log)(...args);\n}\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.magicfeedback=t():e.magicfeedback=t()}(self,(()=>{return e={945:function(e,t){var i=\"undefined\"!=typeof self?self:this,n=function(){function e(){this.fetch=!1,this.DOMException=i.DOMException}return e.prototype=i,new e}();!function(e){!function(t){var i=\"URLSearchParams\"in e,n=\"Symbol\"in e&&\"iterator\"in Symbol,r=\"FileReader\"in e&&\"Blob\"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),s=\"FormData\"in e,a=\"ArrayBuffer\"in e;if(a)var o=[\"[object Int8Array]\",\"[object Uint8Array]\",\"[object Uint8ClampedArray]\",\"[object Int16Array]\",\"[object Uint16Array]\",\"[object Int32Array]\",\"[object Uint32Array]\",\"[object Float32Array]\",\"[object Float64Array]\"],l=ArrayBuffer.isView||function(e){return e&&o.indexOf(Object.prototype.toString.call(e))>-1};function d(e){if(\"string\"!=typeof e&&(e=String(e)),/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError(\"Invalid character in header field name\");return e.toLowerCase()}function c(e){return\"string\"!=typeof e&&(e=String(e)),e}function u(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return n&&(t[Symbol.iterator]=function(){return t}),t}function p(e){this.map={},e instanceof p?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function m(e){if(e.bodyUsed)return Promise.reject(new TypeError(\"Already read\"));e.bodyUsed=!0}function h(e){return new Promise((function(t,i){e.onload=function(){t(e.result)},e.onerror=function(){i(e.error)}}))}function f(e){var t=new FileReader,i=h(t);return t.readAsArrayBuffer(e),i}function v(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function g(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?\"string\"==typeof e?this._bodyText=e:r&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:s&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:i&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():a&&r&&(t=e)&&DataView.prototype.isPrototypeOf(t)?(this._bodyArrayBuffer=v(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):a&&(ArrayBuffer.prototype.isPrototypeOf(e)||l(e))?this._bodyArrayBuffer=v(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText=\"\",this.headers.get(\"content-type\")||(\"string\"==typeof e?this.headers.set(\"content-type\",\"text/plain;charset=UTF-8\"):this._bodyBlob&&this._bodyBlob.type?this.headers.set(\"content-type\",this._bodyBlob.type):i&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set(\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"))},r&&(this.blob=function(){var e=m(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error(\"could not read FormData body as blob\");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?m(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(f)}),this.text=function(){var e,t,i,n=m(this);if(n)return n;if(this._bodyBlob)return e=this._bodyBlob,i=h(t=new FileReader),t.readAsText(e),i;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),i=new Array(t.length),n=0;n<t.length;n++)i[n]=String.fromCharCode(t[n]);return i.join(\"\")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error(\"could not read FormData body as text\");return Promise.resolve(this._bodyText)},s&&(this.formData=function(){return this.text().then(E)}),this.json=function(){return this.text().then(JSON.parse)},this}p.prototype.append=function(e,t){e=d(e),t=c(t);var i=this.map[e];this.map[e]=i?i+\", \"+t:t},p.prototype.delete=function(e){delete this.map[d(e)]},p.prototype.get=function(e){return e=d(e),this.has(e)?this.map[e]:null},p.prototype.has=function(e){return this.map.hasOwnProperty(d(e))},p.prototype.set=function(e,t){this.map[d(e)]=c(t)},p.prototype.forEach=function(e,t){for(var i in this.map)this.map.hasOwnProperty(i)&&e.call(t,this.map[i],i,this)},p.prototype.keys=function(){var e=[];return this.forEach((function(t,i){e.push(i)})),u(e)},p.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),u(e)},p.prototype.entries=function(){var e=[];return this.forEach((function(t,i){e.push([i,t])})),u(e)},n&&(p.prototype[Symbol.iterator]=p.prototype.entries);var y=[\"DELETE\",\"GET\",\"HEAD\",\"OPTIONS\",\"POST\",\"PUT\"];function b(e,t){var i,n,r=(t=t||{}).body;if(e instanceof b){if(e.bodyUsed)throw new TypeError(\"Already read\");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new p(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,r||null==e._bodyInit||(r=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||\"same-origin\",!t.headers&&this.headers||(this.headers=new p(t.headers)),this.method=(n=(i=t.method||this.method||\"GET\").toUpperCase(),y.indexOf(n)>-1?n:i),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,(\"GET\"===this.method||\"HEAD\"===this.method)&&r)throw new TypeError(\"Body not allowed for GET or HEAD requests\");this._initBody(r)}function E(e){var t=new FormData;return e.trim().split(\"&\").forEach((function(e){if(e){var i=e.split(\"=\"),n=i.shift().replace(/\\+/g,\" \"),r=i.join(\"=\").replace(/\\+/g,\" \");t.append(decodeURIComponent(n),decodeURIComponent(r))}})),t}function k(e,t){t||(t={}),this.type=\"default\",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText=\"statusText\"in t?t.statusText:\"OK\",this.headers=new p(t.headers),this.url=t.url||\"\",this._initBody(e)}b.prototype.clone=function(){return new b(this,{body:this._bodyInit})},g.call(b.prototype),g.call(k.prototype),k.prototype.clone=function(){return new k(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new p(this.headers),url:this.url})},k.error=function(){var e=new k(null,{status:0,statusText:\"\"});return e.type=\"error\",e};var A=[301,302,303,307,308];k.redirect=function(e,t){if(-1===A.indexOf(t))throw new RangeError(\"Invalid status code\");return new k(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var i=Error(e);this.stack=i.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function C(e,i){return new Promise((function(n,s){var a=new b(e,i);if(a.signal&&a.signal.aborted)return s(new t.DOMException(\"Aborted\",\"AbortError\"));var o=new XMLHttpRequest;function l(){o.abort()}o.onload=function(){var e,t,i={status:o.status,statusText:o.statusText,headers:(e=o.getAllResponseHeaders()||\"\",t=new p,e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/).forEach((function(e){var i=e.split(\":\"),n=i.shift().trim();if(n){var r=i.join(\":\").trim();t.append(n,r)}})),t)};i.url=\"responseURL\"in o?o.responseURL:i.headers.get(\"X-Request-URL\");var r=\"response\"in o?o.response:o.responseText;n(new k(r,i))},o.onerror=function(){s(new TypeError(\"Network request failed\"))},o.ontimeout=function(){s(new TypeError(\"Network request failed\"))},o.onabort=function(){s(new t.DOMException(\"Aborted\",\"AbortError\"))},o.open(a.method,a.url,!0),\"include\"===a.credentials?o.withCredentials=!0:\"omit\"===a.credentials&&(o.withCredentials=!1),\"responseType\"in o&&r&&(o.responseType=\"blob\"),a.headers.forEach((function(e,t){o.setRequestHeader(t,e)})),a.signal&&(a.signal.addEventListener(\"abort\",l),o.onreadystatechange=function(){4===o.readyState&&a.signal.removeEventListener(\"abort\",l)}),o.send(void 0===a._bodyInit?null:a._bodyInit)}))}C.polyfill=!0,e.fetch||(e.fetch=C,e.Headers=p,e.Request=b,e.Response=k),t.Headers=p,t.Request=b,t.Response=k,t.fetch=C,Object.defineProperty(t,\"__esModule\",{value:!0})}({})}(n),n.fetch.ponyfill=!0,delete n.fetch.polyfill;var r=n;(t=r.fetch).default=r.fetch,t.fetch=r.fetch,t.Headers=r.Headers,t.Request=r.Request,t.Response=r.Response,e.exports=t},317:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.HOST_API_URL_DEV=t.HOST_API_URL=void 0,t.HOST_API_URL=\"https://api.deepdots.com/\",t.HOST_API_URL_DEV=\"https://api-dev.deepdots.com/\"},156:function(e,t,i){\"use strict\";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(i(927));let s=null;s||(s=(0,r.default)()),t.default=s},927:function(e,t,i){\"use strict\";var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function a(e){try{l(n.next(e))}catch(e){s(e)}}function o(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,o)}l((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,\"__esModule\",{value:!0});const r=i(57),s=i(665),a=i(256),o=i(313),l=i(317);t.default=function(){const e=new s.Config;let t=new a.Log(e);return{init:function(i){\"boolean\"==typeof(null==i?void 0:i.debug)&&e.set(\"debug\",i.debug),\"boolean\"==typeof(null==i?void 0:i.dryRun)&&e.set(\"dryRun\",i.dryRun),e.set(\"url\",(null==i?void 0:i.env)&&\"dev\"===(null==i?void 0:i.env)?l.HOST_API_URL_DEV:l.HOST_API_URL),e.set(\"env\",null==i?void 0:i.env),t.log(\"Initialized Magicfeedback\",e)},send:function(i,r,s,a=!0,l,d){return n(this,void 0,void 0,(function*(){i||t.err(\"No appID provided\"),r||t.err(\"No publicKey provided\"),s||t.err(\"No feedback provided\"),s.answers||s.profile||s.metrics||s.metadata||t.err(\"No feedback data provided\");const n=e.get(\"url\"),c={integration:i,publicKey:r,privateKey:d,completed:a,id:l,feedback:s};try{if(e.get(\"dryRun\"))return t.log(\"Dry run enabled: skipping native feedback submit\"),`dry-run-${Date.now()}`;const i=yield(0,o.sendFeedback)(n,c,t);return t.log(\"sent native feedback\"),i}catch(e){return t.err(\"error native feedback\",e),!1}}))},form:function(i,n,s,a){return i||t.err(\"No appID provided\"),n||t.err(\"No publicKey provided\"),new r.Form(e,i,n,s,a)},session:function(i){return i||t.err(\"No sessionId provided\"),new r.Form(e,i)}}}},79:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.History=void 0,t.History=class{constructor(){this.items=[]}enqueue(e){this.items.push(e)}dequeue(){return this.items.shift()}rollback(){return this.items.pop()}front(){return this.items[0]}back(){return this.items[this.items.length-1]}isEmpty(){return 0===this.items.length}size(){return this.items.length}get(e){return this.items[e]}}},665:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Config=void 0,t.Config=class{constructor(){this.variables={},this.variables.env=\"prod\",this.variables.debug=!1,this.variables.dryRun=!1}get(e){return this.variables[e]}set(e,t){this.variables[e]=t}}},57:function(e,t,i){\"use strict\";var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function a(e){try{l(n.next(e))}catch(e){s(e)}}function o(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,o)}l((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,\"__esModule\",{value:!0}),t.Form=void 0;const r=i(558),s=i(256),a=i(313),o=i(213),l=i(989),d=i(700),c=i(591),u=i(79),p=i(636);t.Form=class{constructor(e,t,i,n,r){this.config=e,this.log=new s.Log(e),this.formOptionsConfig={addButton:!0,sendButtonText:\"Send\",backButtonText:\"Back\",nextButtonText:\"Next\",addSuccessScreen:!0,getMetaData:!0,customMetaData:[],questionFormat:\"standard\"},this.selector=\"\",this.appId=t,this.publicKey=i||\"\",this.url=e.get(\"url\"),this.id=\"\",this.formData=null,this.feedback={text:\"\",answers:[],profile:null!=n?n:[],metrics:[],metadata:null!=r?r:[]},this.history=new u.History,this.graph=new l.PageGraph([]),this.progress=0,this.total=0,this.completed=!1,this.timeToCompleted=0}generate(e,t){var i,r,s,o,l,d,c;return n(this,void 0,void 0,(function*(){try{this.formOptionsConfig=Object.assign(Object.assign({},this.formOptionsConfig),t),this.selector=e;let n=this.formData;if(void 0!==this.formData&&this.formData||(n=\"\"!==this.publicKey?yield(0,a.getForm)(this.url,this.appId,this.publicKey,this.log):yield(0,a.getSessionForm)(this.url,this.appId,this.log)),void 0===n||!n)throw new Error(`No data for app ${this.appId}`);if(null===(i=n.error)||void 0===i?void 0:i.message)throw new Error(n.error.message);if(n.questions=(null===(r=n.questions)||void 0===r?void 0:r.filter((e=>\"ACTIVE\"===e.status)))||[],n.pages=(null===(s=n.pages)||void 0===s?void 0:s.filter((e=>\"ACTIVE\"===e.status)))||[],null===(o=n.pages)||void 0===o||o.forEach((e=>{var t;return e.integrationQuestions=null===(t=e.integrationQuestions)||void 0===t?void 0:t.filter((e=>\"ACTIVE\"===e.status))})),this.formData=n,this.formData.savedAt||(this.formData.savedAt=new Date,localStorage.setItem(`magicfeedback-${this.appId}`,JSON.stringify(this.formData))),void 0===this.formData.questions||!this.formData.questions)throw new Error(`No questions for app ${this.appId}`);this.formData.pages&&0!==(null===(l=this.formData.pages)||void 0===l?void 0:l.length)||this.formatPages(),null===(d=this.formData.questions)||void 0===d||d.sort(((e,t)=>e.position-t.position)),this.formData.pages=this.formData.pages.filter((e=>{var t;return(null===(t=e.integrationQuestions)||void 0===t?void 0:t.length)>0})),this.formOptionsConfig.getMetaData&&this.getMetaData(),(null===(c=this.formData.style)||void 0===c?void 0:c.startMessage)?yield this.generateWelcomeMessage(this.formData.style.startMessage):this.startForm()}catch(e){return this.log.err(e),void(this.formOptionsConfig.onLoadedEvent&&(yield this.formOptionsConfig.onLoadedEvent({loading:!1,error:e})))}}))}formatPages(){var e;if(this.formData)switch(this.formData.identity){case\"MAGICSURVEY\":this.formData.pages=[],null===(e=this.formData.questions)||void 0===e||e.forEach((e=>{var t,i;const n=new c.PageRoute(e.id,e.ref,c.OperatorType.NOEQUAL,[],c.TransitionType.PAGE,(e.position+1).toString(),e.position.toString()),r=new d.Page(e.position.toString(),e.position,this.appId,[e],[n]);null===(i=null===(t=this.formData)||void 0===t?void 0:t.pages)||void 0===i||i.push(r)}));break;case\"MAGICFORM\":const t=new d.Page(\"1\",1,this.appId,this.formData.questions,[]);this.formData.pages=[t]}}generateContainer(){let e=document.getElementById(this.selector);if(!e&&(e=document.getElementById(\"magicfeedback-container-\"+this.appId),!e))throw new Error(`Element with ID '${this.selector}' not found.`);return e.classList.add(\"magicfeedback-container\"),e.id=\"magicfeedback-container-\"+this.appId,e.innerHTML=\"\",e}generateForm(){var e,t,i,r;return n(this,void 0,void 0,(function*(){try{if(!this.formData||!this.formData.pages||0===this.formData.pages.length)throw new Error(\"No form data\");this.graph=new l.PageGraph(this.formData.pages.sort(((e,t)=>e.position-t.position)));let n=this.generateContainer();const s=document.createElement(\"form\");s.classList.add(\"magicfeedback-form\"),s.id=\"magicfeedback-\"+this.appId,s.addEventListener(\"submit\",(e=>e.preventDefault()));const a=document.createElement(\"div\");a.classList.add(\"magicfeedback-questions\"),a.id=\"magicfeedback-questions-\"+this.appId;const d=this.graph.getFirstPage();if(!d)throw new Error(\"No page found\");if(this.total=this.graph.findMaxDepth(),d.elements=(0,o.renderQuestions)(d.questions,this.formOptionsConfig.questionFormat,null===(e=this.formData)||void 0===e?void 0:e.lang[0],null===(t=this.formData)||void 0===t?void 0:t.product,(()=>this.send())),null===(i=d.elements)||void 0===i||i.forEach((e=>a.appendChild(e))),s.appendChild(a),this.history.enqueue(d),n.appendChild(s),this.progress=this.total-this.graph.findMaxDepth(d),this.formOptionsConfig.addButton){const e=(0,o.renderActions)(null===(r=this.formData)||void 0===r?void 0:r.identity,(()=>this.back()),this.formOptionsConfig.sendButtonText,this.formOptionsConfig.backButtonText,this.formOptionsConfig.nextButtonText);s.appendChild(e)}this.formOptionsConfig.addButton&&s.addEventListener(\"submit\",(e=>{e.preventDefault(),this.send()})),this.timeToCompleted=Date.now(),this.formOptionsConfig.onLoadedEvent&&(yield this.formOptionsConfig.onLoadedEvent({loading:!1,progress:this.progress,total:this.total,formData:this.formData,formOptionsConfig:this.formOptionsConfig}))}catch(e){return this.log.err(e),void(this.formOptionsConfig.onLoadedEvent&&this.formOptionsConfig.onLoadedEvent({loading:!1,error:e}))}}))}startForm(){this.generateForm()}generateWelcomeMessage(e){return n(this,void 0,void 0,(function*(){try{const t=this.generateContainer(),i=(0,o.renderStartMessage)(e,this.formOptionsConfig.addButton,this.formOptionsConfig.startButtonText,(()=>this.startForm()));t.appendChild(i),this.formOptionsConfig.onLoadedEvent&&(yield this.formOptionsConfig.onLoadedEvent({loading:!1,formData:this.formData}))}catch(e){return this.log.err(e),void(this.formOptionsConfig.onLoadedEvent&&this.formOptionsConfig.onLoadedEvent({loading:!1,error:e}))}}))}getMetaData(){this.formOptionsConfig.customMetaData&&(this.feedback.metadata=[...this.feedback.metadata,...this.formOptionsConfig.customMetaData]),this.feedback.metadata.push({key:\"navigator-url\",value:[window.location.href]}),this.feedback.metadata.push({key:\"navigator-origin\",value:[window.location.origin]}),this.feedback.metadata.push({key:\"navigator-pathname\",value:[window.location.pathname]}),this.feedback.metadata.push({key:\"navigator-search\",value:[window.location.search]});const e=new URLSearchParams(window.location.search);Array.from(new Set(e.keys())).forEach((t=>{const i=e.getAll(t);i.length>0&&this.feedback.metadata.push({key:`query-${t}`,value:i})})),this.feedback.metadata.push({key:\"navigator-user\",value:[navigator.userAgent]}),this.feedback.metadata.push({key:\"navigator-language\",value:[navigator.language]}),this.feedback.metadata.push({key:\"navigator-platform\",value:[navigator.platform]}),this.feedback.metadata.push({key:\"navigator-appVersion\",value:[navigator.appVersion]}),this.feedback.metadata.push({key:\"navigator-appName\",value:[navigator.appName]}),this.feedback.metadata.push({key:\"navigator-product\",value:[navigator.product]}),this.feedback.metadata.push({key:\"screen-width\",value:[window.screen.width.toString()]}),this.feedback.metadata.push({key:\"screen-height\",value:[window.screen.height.toString()]}),this.appId&&\"\"===this.publicKey&&this.feedback.metadata.push({key:\"MAGICFEEDBACK_SESSION\",value:[this.appId]})}send(e,t,i){return n(this,void 0,void 0,(function*(){const n=document.getElementById(\"magicfeedback-questions-\"+this.appId);try{i&&(this.feedback.profile=[...this.feedback.profile,...i]),t&&(this.feedback.metrics=[...this.feedback.metrics,...t]),e&&(this.feedback.metadata=[...this.feedback.metadata,...e]),this.answer(),this.formOptionsConfig.beforeSubmitEvent&&(yield this.formOptionsConfig.beforeSubmitEvent({loading:!0,progress:this.progress,total:this.total}));const s=this.history.back();if(!s)throw new Error(\"No page found\");for(const e of s.questions.filter((e=>e.require&&![r.FEEDBACKAPPANSWERTYPE.CONSENT,r.FEEDBACKAPPANSWERTYPE.INFO_PAGE].includes(e.type)))){const t=e.assets,i=this.feedback.answers.filter((t=>t.key.includes(e.ref)&&!t.key.includes(\"extra-option\")));if(0===i.length||i.find((e=>0===e.value.length)))throw this.log.err(`The question ${e.ref} is required`),new Error(\"No response\");if(null==t?void 0:t.minOptions){let n=[];if((null==t?void 0:t.exclusiveAnswers)&&(n=null==t?void 0:t.exclusiveAnswers),!i[0].value.find((e=>n.includes(e)))&&i[0].value.length<(null==t?void 0:t.minOptions))throw this.log.err(`The question ${e.ref} requires at least ${null==t?void 0:t.minOptions} options`),new Error(\"No response\")}if(e.type===r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX){const i=this.feedback.answers.find((t=>t.key===e.ref));if(!i)throw this.log.err(`The matrix question ${e.ref} is required`),new Error(\"No response\");const n=this.parseMatrixAnswerPre(i),r=Array.isArray(null==t?void 0:t.options)?t.options:[];if(r.length>0){if(r.find((e=>{const t=n.find((t=>t.key===e));return!t||!Array.isArray(t.value)||0===t.value.length})))throw this.log.err(`The matrix question ${e.ref} requires an answer in every row`),new Error(\"No response\")}else if(0===n.length||n.some((e=>!Array.isArray(e.value)||0===e.value.length)))throw this.log.err(`The matrix question ${e.ref} requires an answer in every row`),new Error(\"No response\")}}const a=yield this.pushAnswers(!1);if(!a)throw new Error(\"No response\");this.id=a,yield this.processNextQuestion(n)}catch(e){this.log.err(`An error occurred while submitting the form ${this.appId}:`,e),this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({loading:!1,progress:this.progress,total:this.total,error:e}))}}))}answer(){const e=document.getElementById(\"magicfeedback-\"+this.appId);if(!e)return this.log.err(`Form \"${e}\" not found.`),this.feedback.answers=[],[];const t=this.history.back();if(!t){const t=e.querySelectorAll(\".magicfeedback-input\"),i=[],n={};return t.forEach((e=>{var t;const r=e,s=r.name;if(!s)return;const a=r.type;if((\"radio\"===a||\"checkbox\"===a)&&!r.checked)return;const o=r.value,l=r.classList[0];if((null==l?void 0:l.includes(\"magicfeedback-priority-list\"))||(null===(t=r.id)||void 0===t?void 0:t.startsWith(\"priority-list-\")))return n[s]||(n[s]=[]),void n[s].push(o);const d=\"magicfeedback-consent\"===l?r.checked.toString():o;if(null==d)return;const c={key:s,value:[d]};i.push(c)})),Object.entries(n).forEach((([e,t])=>{const n=t.slice().sort(((e,t)=>Number(e.split(\".\")[0])-Number(t.split(\".\")[0])));i.push({key:e,value:n})})),this.feedback.answers=i,i}const i=[];let n=!1;const s=e.querySelectorAll(\".magicfeedback-input\"),o={},l={},d={};if(s.forEach((e=>{const s=e,c=t.questions.find((e=>{var t;return null===(t=s.name)||void 0===t?void 0:t.includes(e.ref)})),u=s.type,p=s.classList[0],m={key:s.name,value:[]},h=\"magicfeedback-consent\"===p?s.checked.toString():s.value;if(m.key&&\"\"!==m.key)if(m.key.startsWith(\"extra-option-\"))\"\"!==h&&(m.value.push(h),i.push(m));else switch(null==c?void 0:c.type){case r.FEEDBACKAPPANSWERTYPE.EMAIL:case r.FEEDBACKAPPANSWERTYPE.TEXT:case r.FEEDBACKAPPANSWERTYPE.LONGTEXT:case r.FEEDBACKAPPANSWERTYPE.NUMBER:case r.FEEDBACKAPPANSWERTYPE.DATE:case r.FEEDBACKAPPANSWERTYPE.CONTACT:case r.FEEDBACKAPPANSWERTYPE.PASSWORD:\"\"!==h&&(\"email\"===u?(0,a.validateEmail)(h)?(this.feedback.profile.push({key:\"email\",value:[h]}),m.value.push(h),i.push(m)):(this.log.err(\"Invalid email\"),n=!0):(m.value.push(h),i.push(m)));break;case r.FEEDBACKAPPANSWERTYPE.RADIO:s.checked&&(m.value.push(h),i.push(m));break;case r.FEEDBACKAPPANSWERTYPE.MULTIPLECHOICE:case r.FEEDBACKAPPANSWERTYPE.MULTIPLECHOISE_IMAGE:s.checked&&(l[m.key]||(l[m.key]=[]),l[m.key].push(h));break;case r.FEEDBACKAPPANSWERTYPE.BOOLEAN:s.checked&&(m.value.push(h),i.push(m));break;case r.FEEDBACKAPPANSWERTYPE.CONSENT:m.value.push(s.checked.toString()),i.push(m);break;case r.FEEDBACKAPPANSWERTYPE.RATING_EMOJI:case r.FEEDBACKAPPANSWERTYPE.RATING_NUMBER:case r.FEEDBACKAPPANSWERTYPE.RATING_STAR:s.checked&&(m.value.push(h),i.push(m));break;case r.FEEDBACKAPPANSWERTYPE.SELECT:\"\"!==h&&(m.value.push(h),i.push(m));break;case r.FEEDBACKAPPANSWERTYPE.POINT_SYSTEM:\"number\"===u&&s.id&&(d[m.key]||(d[m.key]=[]),\"\"!==h&&d[m.key].push(`${s.id}:${h}%`));break;case r.FEEDBACKAPPANSWERTYPE.PRIORITY_LIST:\"hidden\"===u&&(o[m.key]||(o[m.key]=[]),o[m.key].push(h));break;case r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX:e.checked&&(m.value.push(h),i.push(m));case r.FEEDBACKAPPANSWERTYPE.UPLOAD_IMAGE:case r.FEEDBACKAPPANSWERTYPE.UPLOAD_FILE:}})),n)return[];Object.entries(l).forEach((([e,t])=>{t&&0!==t.length&&i.push({key:e,value:t})})),Object.entries(d).forEach((([e,t])=>{t&&0!==t.length&&i.push({key:e,value:t})})),Object.entries(o).forEach((([e,t])=>{if(!t||0===t.length)return;const n=t.slice().sort(((e,t)=>Number(e.split(\".\")[0])-Number(t.split(\".\")[0])));i.push({key:e,value:n})}));try{t.questions.filter((e=>e.type===r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX)).forEach((e=>{const t=e.ref+\"-\",n=i.filter((e=>e.key.startsWith(t)));if(0===n.length)return;const r=n.map((e=>({key:e.key.substring(t.length),value:e.value}))),s={key:e.ref,value:[JSON.stringify(r)]};for(const e of n){const t=i.findIndex((t=>t.key===e.key));-1!==t&&i.splice(t,1)}const a=i.findIndex((t=>t.key===e.ref));-1!==a?i[a]=s:i.push(s)}))}catch(e){this.log.err(\"Error agrupando MULTI_QUESTION_MATRIX\",e)}return this.feedback.answers=i,t.setAnswer(i),i}finish(){return n(this,void 0,void 0,(function*(){if(this.completed=!0,this.timeToCompleted=Date.now()-this.timeToCompleted,this.feedback.metadata.push({key:\"time-to-complete\",value:[this.timeToCompleted.toString()]}),this.formOptionsConfig.addSuccessScreen){const e=document.getElementById(\"magicfeedback-container-\"+this.appId);e.childNodes.length>0&&e.removeChild(e.childNodes[0]);const t=(0,o.renderSuccess)(this.formOptionsConfig.successMessage||\"Thank you for your feedback!\");e.appendChild(t)}this.answer();try{const e=yield this.pushAnswers(!0);if(!e)throw this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({loading:!1,progress:this.progress,total:this.total,completed:this.completed,error:`An error occurred while submitting the form ${this.appId}:`})),new Error(\"An error occurred while submitting the form ${this.appId}:\");this.id=e,this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({response:this.id,loading:!1,progress:this.progress,total:this.total,completed:this.completed,error:null}))}catch(e){this.log.err(`An error occurred while submitting the form ${this.appId}:`,e),this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({loading:!1,progress:this.progress,total:this.total,completed:this.completed,error:e}))}}))}pushAnswers(e=!1){return n(this,void 0,void 0,(function*(){try{if(this.config.get(\"dryRun\")){const e=this.id||`dry-run-${this.appId}-${Date.now()}`;return this.log.log(`Dry run enabled: skipping feedback submit for form ${this.appId}`),e}const t=this.config.get(\"url\"),i={integration:this.appId,publicKey:this.publicKey,feedback:this.feedback,completed:e};return yield(0,a.sendFeedback)(t,this.id?Object.assign(Object.assign({},i),{sessionId:this.id}):i,this.log)}catch(e){return this.log.err(`An error occurred while submitting the form ${this.appId}:`,e),\"\"}}))}callFollowUpQuestion(e){var t;return n(this,void 0,void 0,(function*(){if(!(null==e?void 0:e.followup))return null;try{if(this.config.get(\"dryRun\"))return this.log.log(`Dry run enabled: skipping follow up API for question ${e.ref}`),null;if(0===this.feedback.answers.length)throw new Error(\"No answers provided\");const i=this.config.get(\"url\"),n=Object.assign(Object.assign(Object.assign({answer:null===(t=this.feedback.answers.find((t=>t.key===e.ref)))||void 0===t?void 0:t.value[0]},\"\"!==this.publicKey&&{publicKey:this.publicKey}),\"\"===this.publicKey&&{campaignSessionId:this.appId}),{sessionId:this.id,question:e});return yield(0,a.getFollowUpQuestion)(i,n,this.log)}catch(e){throw this.log.err(`An error occurred while submitting the form ${this.appId}:`,e),e}}))}processNextQuestion(e){var t,i,r;return n(this,void 0,void 0,(function*(){const n=this.history.back();if(!n)throw new Error(\"No page found\");const s=n.getFollowupQuestions();if(0===(null==s?void 0:s.length))return void(yield this.renderNextQuestion(e,n));const a=[];for(const e of s){const t=n.questions.find((t=>t.ref===e));if(t){const e=yield this.callFollowUpQuestion(t);e&&a.push(e)}}if(0===a.length)return void(yield this.renderNextQuestion(e,n));const l=new d.Page(n.id,n.position,this.appId,a,n.edges),c=new p.PageNode(n.id,n.position,n.edges,l,a,!0);c.elements=(0,o.renderQuestions)(a,this.formOptionsConfig.questionFormat,null===(t=this.formData)||void 0===t?void 0:t.lang[0],null===(i=this.formData)||void 0===i?void 0:i.product,(()=>this.send())),this.history.enqueue(c),this.progress+=.5,e.innerHTML=\"\",null===(r=c.elements)||void 0===r||r.forEach((t=>e.appendChild(t))),this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({response:this.id,loading:!1,progress:this.progress,total:this.total,followup:c.isFollowup,completed:this.completed,error:null}))}))}renderNextQuestion(e,t){var i,s,a,l,d;return n(this,void 0,void 0,(function*(){let n=this.graph.getNextPage(t,this.feedback.answers);if(!n)return void this.finish();const u=n.edges.filter((e=>\"PRECONDITIONAL\"===e.typeCondition)).sort(((e,t)=>e.position<t.position?-1:e.position>t.position?1:0));if((null==u?void 0:u.length)>0){const t=u.some((e=>e.transition===c.TransitionType.ALLOW));let a=t;for(const t of u){let o;for(let e=this.history.size()-1;e>=0;e--){const n=this.history.get(e);if(n&&(o=null===(i=n.answers)||void 0===i?void 0:i.find((e=>e.key===t.questionRef)),o))break}let l=!1;if(o){const e=null===(s=this.formData)||void 0===s?void 0:s.questions.find((e=>e.ref===t.questionRef)),i=Array.isArray(o.value)?o.value:[o.value],n=Array.isArray(t.value)?t.value:[t.value];if((null==e?void 0:e.type)===r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX)l=this.evaluateMatrixPreconditional(t,o);else switch(t.typeOperator){case\"EQUAL\":case\"INQ\":l=i.some((e=>n.includes(e)));break;case\"NOEQUAL\":case\"NINQ\":l=i.every((e=>!n.includes(e)));break;case\"GREATER\":l=i.some((e=>Number(e)>Number(n[0])));break;case\"LESS\":l=i.some((e=>Number(e)<Number(n[0])));break;case\"GREATEREQUAL\":l=i.some((e=>Number(e)>=Number(n[0])));break;case\"LESSEQUAL\":l=i.some((e=>Number(e)<=Number(n[0])))}}if(t.transition===c.TransitionType.ALLOW)l||(a=!1);else if(t.transition===c.TransitionType.NEXT&&l)return this.feedback.answers=[],void(n&&(yield this.renderNextQuestion(e,n)))}if(t&&!a)return this.feedback.answers=[],void(n&&(yield this.renderNextQuestion(e,n)))}n.elements=(0,o.renderQuestions)(n.questions,this.formOptionsConfig.questionFormat,null===(a=this.formData)||void 0===a?void 0:a.lang[0],null===(l=this.formData)||void 0===l?void 0:l.product,(()=>this.send())),e.innerHTML=\"\",null===(d=n.elements)||void 0===d||d.forEach((t=>e.appendChild(t))),this.history.enqueue(n),this.progress=this.total-this.graph.findMaxDepth(n),this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({response:this.id,loading:!1,progress:this.progress,total:this.total,followup:n.isFollowup,completed:this.completed,error:null}))}))}back(){var e;return n(this,void 0,void 0,(function*(){if(0===this.history.size())return;const t=document.getElementById(\"magicfeedback-questions-\"+this.appId);t&&t.childNodes.length>0&&(t.innerHTML=\"\"),this.history.rollback();const i=this.history.back();i?(null===(e=i.elements)||void 0===e||e.forEach((e=>t.appendChild(e))),this.progress=this.total-this.graph.findMaxDepth(i)):this.progress=this.history.size(),this.formOptionsConfig.onBackEvent&&(yield this.formOptionsConfig.onBackEvent({loading:!1,progress:this.progress,followup:(null==i?void 0:i.isFollowup)||!1,error:i?null:\"No page found\"}))}))}previewQuestion(e,t,i){var n,r;const s=Array.isArray(t)?t:[t];if(!s||0===s.length)throw new Error(\"[MagicFeedback] No question provided for preview\");const a=document.getElementById(e);if(!a)throw new Error(`[MagicFeedback] Element with ID '${e}' not found.`);const{format:l=this.formOptionsConfig.questionFormat||\"standard\",language:d=(null===(n=this.formData)||void 0===n?void 0:n.lang)&&this.formData.lang[0]||\"en\",product:c=(null===(r=this.formData)||void 0===r?void 0:r.product)||{customIcons:!1},clearContainer:u=!0,wrap:p=!0}=i||{};u&&(a.innerHTML=\"\");let m=[];try{m=(0,o.renderQuestions)(s,l,d,c)}catch(e){throw this.log.err(e),e}let h=a;if(p){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-preview-question\"),h.appendChild(e),h=e}return m.forEach((e=>h.appendChild(e))),a}parseMatrixAnswerPre(e){if(!e||!e.value)return[];if(1===e.value.length&&\"string\"==typeof e.value[0]&&e.value[0].trim().startsWith(\"[\"))try{const t=JSON.parse(e.value[0]);if(Array.isArray(t))return t}catch(e){return[]}return Array.isArray(e.value)&&e.value.length>0&&\"object\"==typeof e.value[0]&&null!==e.value[0]&&\"key\"in e.value[0]?e.value:[]}evaluateMatrixPreconditional(e,t){const i=Array.isArray(e.value)?e.value:[e.value],n=new Set(e.option||[]),r=this.parseMatrixAnswerPre(t);if(!r.length)return!1;const s=n.size>0?r.filter((e=>n.has(e.key))):r;if(!s.length)return!1;switch(e.typeOperator){case\"EQUAL\":case\"INQ\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.includes(e)))));case\"NOEQUAL\":case\"NINQ\":return s.every((e=>(Array.isArray(e.value)?e.value:[e.value]).every((e=>!i.includes(e)))));case\"GREATER\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)>Number(t)))))));case\"LESS\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)<Number(t)))))));case\"GREATEREQUAL\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)>=Number(t)))))));case\"LESSEQUAL\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)<=Number(t)))))));default:return!1}}}},700:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Page=void 0,t.Page=class{constructor(e,t,i,n,r){this.id=e,this.position=t,this.generatedAt=(new Date).toISOString(),this.updatedAt=(new Date).toISOString(),this.status=\"ACTIVE\",this.integrationId=i,this.integrationQuestions=n,this.integrationPageRoutes=r}}},989:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PageGraph=void 0;const n=i(636),r=i(558),s=i(591);t.PageGraph=class{constructor(e){this.nodes=new Map,this.buildGraph(e)}buildGraph(e){e.forEach((e=>{var t;e.integrationPageRoutes&&(e.integrationPageRoutes=(null===(t=e.integrationPageRoutes)||void 0===t?void 0:t.sort(((e,t)=>{const i=new Date((null==e?void 0:e.generatedAt)||0).getTime(),n=new Date((null==t?void 0:t.generatedAt)||0).getTime();return i!==n?i-n:\"DIRECT\"===e.typeCondition&&\"DIRECT\"!==t.typeCondition?1:\"DIRECT\"!==e.typeCondition&&\"DIRECT\"===t.typeCondition?-1:0})))||[]);const i=new n.PageNode(e.id,e.position,e.integrationPageRoutes||[],e,e.integrationQuestions);this.nodes.set(i.id,i)}))}getNodeById(e){return this.nodes.get(e)}getNextEdgeByDefault(e){if(!e)return;const t=e.edges.find((e=>e.typeCondition===s.ConditionType.DIRECT));if(!t||![s.TransitionType.FINISH,s.TransitionType.REDIRECT].includes(t.transition)){if(t&&t.transitionDestiny)return t.transitionDestiny;for(const t of this.nodes.values())if(t.position===e.position+1)return t.id}}getFirstPage(){let e,t=Number.MAX_VALUE;for(const i of this.nodes.values())i.position<t&&(t=i.position,e=i);return e}getNextPage(e,t){var i;if(!e)return;e.edges.sort(((e,t)=>\"DIRECT\"===e.typeCondition?1:\"DIRECT\"===t.typeCondition?-1:0));const n=e.edges.find((i=>{const n=e.questions.find((e=>e.ref===i.questionRef)),a=null==t?void 0:t.filter((e=>e.key===i.questionRef));if(\"DIRECT\"===i.typeCondition)return!0;if(!a||0===a.length)return!1;if((null==n?void 0:n.type)===r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX)return this.evaluateMatrixCondition(i,a);const o=Array.isArray(i.value)?i.value:[i.value];switch(i.typeOperator){case s.OperatorType.EQUAL:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.includes(e)))));case s.OperatorType.NOEQUAL:return a.every((e=>(Array.isArray(e.value)?e.value:[e.value]).every((e=>!o.includes(e)))));case s.OperatorType.GREATER:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.some((t=>Number(e)>Number(t)))))));case s.OperatorType.LESS:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.some((t=>Number(e)<Number(t)))))));case s.OperatorType.GREATEREQUAL:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.some((t=>Number(e)>=Number(t)))))));case s.OperatorType.LESSEQUAL:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.some((t=>Number(e)<=Number(t)))))));case s.OperatorType.INQ:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.includes(e)))));case s.OperatorType.NINQ:return a.every((e=>(Array.isArray(e.value)?e.value:[e.value]).every((e=>!o.includes(e)))));default:return!1}}));if(!n){const t=this.getNextEdgeByDefault(e);if(!t)return;return this.getNodeById(t)}switch(n.transition){case s.TransitionType.PAGE:if(!n.transitionDestiny)return;return this.getNodeById(n.transitionDestiny);case s.TransitionType.FINISH:return;case s.TransitionType.REDIRECT:return void(window.location.href=(null===(i=n.transitionDestiny)||void 0===i?void 0:i.includes(\"?\"))?`${n.transitionDestiny}&${window.location.search.slice(1)}`:`${n.transitionDestiny}${window.location.search}`);default:return}}findDepth(e){const t=this.getNodeById(e);if(!t)return 0;const i=new Set;return this.DFSUtil(t,i,0)}findMaxDepth(e){if(e||(e=this.getFirstPage()),!e)return 0;const t=new Set;let i=1;return i=Math.max(i,this.DFSUtil(e,t,i)),i}DFSUtil(e,t,i){t.add(e);let n=i;const r=[...e.edges.filter((e=>e.typeCondition!==s.ConditionType.PRECONDITIONAL))||[]],a=this.getNextEdgeByDefault(e);if(a){const i=this.getNodeById(a);i&&!t.has(i)&&r.push(new s.PageRoute(i.id,\"\",s.OperatorType.DEFAULT,[\"\"],s.TransitionType.PAGE,i.id,e.id))}for(const e of r){if(!e.transitionDestiny)continue;const r=this.getNodeById(e.transitionDestiny);if(r&&!t.has(r)){const e=i+1,s=new Set(t),a=this.DFSUtil(r,s,e);n=Math.max(n,a)}}return n}parseMatrixAnswer(e){if(!e||!e.value)return[];if(1===e.value.length&&\"string\"==typeof e.value[0]&&e.value[0].trim().startsWith(\"[\"))try{const t=JSON.parse(e.value[0]);if(Array.isArray(t))return t}catch(e){return[]}return Array.isArray(e.value)&&e.value.length>0&&\"object\"==typeof e.value[0]&&null!==e.value[0]&&\"key\"in e.value[0]?e.value:[]}evaluateMatrixCondition(e,t){const i=Array.isArray(e.value)?e.value:[e.value],n=new Set(e.option||[]),r=t[0],a=this.parseMatrixAnswer(r);if(!a.length)return!1;const o=n.size>0?a.filter((e=>n.has(e.key))):a;if(!o.length)return!1;switch(e.typeOperator){case s.OperatorType.EQUAL:case s.OperatorType.INQ:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.includes(e)))));case s.OperatorType.NOEQUAL:case s.OperatorType.NINQ:return o.every((e=>(Array.isArray(e.value)?e.value:[e.value]).every((e=>!i.includes(e)))));case s.OperatorType.GREATER:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)>Number(t)))))));case s.OperatorType.LESS:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)<Number(t)))))));case s.OperatorType.GREATEREQUAL:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)>=Number(t)))))));case s.OperatorType.LESSEQUAL:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)<=Number(t)))))));default:return!1}}}},636:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PageNode=void 0,t.PageNode=class{constructor(e,t,i,n,r,s=!1){this.answers=[],this.id=e,this.position=t,this.edges=i,this.data=n,this.questions=r.sort(((e,t)=>e.position-t.position)),this.elements=[],this.isFollowup=s}getFollowupQuestions(){return this.questions.filter((e=>e.followup)).map((e=>e.ref))}getRequiredQuestions(){return this.questions.filter((e=>e.require)).map((e=>e.ref))}setAnswer(e){this.answers=e}}},591:(e,t)=>{\"use strict\";var i,n,r,s;Object.defineProperty(t,\"__esModule\",{value:!0}),t.PageRoute=t.StatusType=t.OperatorType=t.ConditionType=t.TransitionType=void 0,(s=t.TransitionType||(t.TransitionType={})).PAGE=\"PAGE\",s.FINISH=\"FINISH\",s.REDIRECT=\"REDIRECT\",s.NEXT=\"NEXT\",s.ALLOW=\"ALLOW\",function(e){e.LOGICAL=\"LOGICAL\",e.DIRECT=\"DIRECT\",e.PRECONDITIONAL=\"PRECONDITIONAL\"}(i=t.ConditionType||(t.ConditionType={})),(r=t.OperatorType||(t.OperatorType={})).EQUAL=\"EQUAL\",r.NOEQUAL=\"NOEQUAL\",r.GREATER=\"GREATER\",r.LESS=\"LESS\",r.GREATEREQUAL=\"GREATEREQUAL\",r.LESSEQUAL=\"LESSEQUAL\",r.INQ=\"INQ\",r.NINQ=\"NINQ\",r.DEFAULT=\"DEFAULT\",function(e){e.ACTIVE=\"ACTIVE\",e.DEPRECATED=\"DEPRECATED\",e.DELETE=\"DELETE\"}(n=t.StatusType||(t.StatusType={})),t.PageRoute=class{constructor(e,t,r,s,a,o,l,d,c,u){this.id=e,this.questionRef=t,this.typeCondition=d||i.LOGICAL,this.typeOperator=r,this.value=s||[],this.transition=a,this.transitionDestiny=o,this.status=n.ACTIVE,this.generatedAt=new Date,this.updatedAt=new Date,this.integrationPageId=l,this.position=c||0,this.option=u||[]}}},558:(e,t)=>{\"use strict\";var i,n;Object.defineProperty(t,\"__esModule\",{value:!0}),t.QuestionType=t.FEEDBACKAPPANSWERTYPE=void 0,(n=t.FEEDBACKAPPANSWERTYPE||(t.FEEDBACKAPPANSWERTYPE={})).CONTACT=\"CONTACT\",n.MULTIPLECHOISE_IMAGE=\"MULTIPLECHOISE_IMAGE\",n.EMAIL=\"EMAIL\",n.RATING_STAR=\"RATING_STAR\",n.RADIO=\"RADIO\",n.MULTIPLECHOICE=\"MULTIPLECHOICE\",n.SELECT=\"SELECT\",n.TEXT=\"TEXT\",n.LONGTEXT=\"LONGTEXT\",n.NUMBER=\"NUMBER\",n.RATING_EMOJI=\"RATING_EMOJI\",n.RATING_NUMBER=\"RATING_NUMBER\",n.DATE=\"DATE\",n.BOOLEAN=\"BOOLEAN\",n.PASSWORD=\"PASSWORD\",n.CONSENT=\"CONSENT\",n.MULTI_QUESTION_MATRIX=\"MULTI_QUESTION_MATRIX\",n.POINT_SYSTEM=\"POINT_SYSTEM\",n.PRIORITY_LIST=\"PRIORITY_LIST\",n.INFO_PAGE=\"INFO_PAGE\",n.UPLOAD_FILE=\"UPLOAD_FILE\",n.UPLOAD_IMAGE=\"UPLOAD_IMAGE\",t.QuestionType=class{},function(e){e.FORM=\"form\",e.DIV=\"div\"}(i||(i={}))},516:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getUrlParam=t.getBooleanOptions=t.parseTitle=void 0,t.parseTitle=function(e,t){return e?\"object\"==typeof e?e[t]||e.en:e:\"\"},t.getBooleanOptions=function(e){switch(e){case\"es\":return[\"Sí\",\"No\"];case\"fr\":return[\"Oui\",\"Non\"];case\"de\":return[\"Ja\",\"Nein\"];case\"it\":return[\"Sì\",\"No\"];case\"pt\":return[\"Sim\",\"Não\"];case\"nl\":return[\"Ja\",\"Nee\"];case\"pl\":return[\"Tak\",\"Nie\"];case\"ru\":return[\"Да\",\"Нет\"];case\"ja\":return[\"はい\",\"いいえ\"];case\"zh\":return[\"是\",\"不\"];case\"ko\":return[\"예\",\"아니\"];case\"da\":case\"sv\":return[\"Ja\",\"Nej\"];case\"fi\":return[\"Kyllä\",\"Ei\"];case\"no\":return[\"Ja\",\"Nei\"];case\"ar\":return[\"نعم\",\"لا\"];case\"bn\":return[\"হ্যাঁ\",\"না\"];default:return[\"Yes\",\"No\"]}},t.getUrlParam=function(e){return new URLSearchParams(window.location.search).get(e)}},559:(e,t)=>{\"use strict\";function i(e,t,i,n,r=!1,s=!0,a=\"ltr\",o=\"row\"){const l=document.createElement(\"div\");l.classList.add(\"magicfeedback-rating-placeholder\"),l.style.display=\"flex\",l.style.flexDirection=o,l.style.alignItems=\"center\",l.style.justifyContent=\"space-between\",l.style.width=r?`calc(100% - (100% / ${t+1}))`:\"100%\",l.style.marginRight=\"auto\",s&&window.innerWidth<600&&(l.style.flexDirection=\"column\");const d=document.createElement(\"span\");d.textContent=null!=i?i:null,d.classList.add(\"magicfeedback-rating-placeholder-value\"),d.style.fontSize=\"15px\",d.style.display=\"block\",d.style.minWidth=\"0\",d.style.overflowWrap=\"anywhere\",d.style.wordBreak=\"break-word\",d.style.textAlign=\"ltr\"===a?\"left\":\"right\",d.style.width=\"50%\",(s&&window.innerWidth<600||\"column\"===o)&&(d.textContent=`${e} = ${i}`,d.style.width=\"100%\",d.style.textAlign=\"left\",d.style.marginBottom=\"5px\");const c=document.createElement(\"span\");return c.textContent=null!=n?n:null,c.classList.add(\"magicfeedback-rating-placeholder-value\"),c.style.fontSize=\"15px\",c.style.display=\"block\",c.style.minWidth=\"0\",c.style.overflowWrap=\"anywhere\",c.style.wordBreak=\"break-word\",c.style.textAlign=\"ltr\"===a?\"right\":\"left\",c.style.width=\"50%\",(s&&window.innerWidth<600||\"column\"===o)&&(c.textContent=`${t} = ${n}`,c.style.width=\"100%\",c.style.textAlign=\"left\",c.style.marginBottom=\"5px\"),\"ltr\"===a?(i&&l.appendChild(d),n&&l.appendChild(c)):(n&&l.appendChild(c),i&&l.appendChild(d)),l}Object.defineProperty(t,\"__esModule\",{value:!0}),t.createRatingNumberElement=t.createStarRating=t.createRatingPlaceholder=void 0,t.createRatingPlaceholder=i,t.createStarRating=function(e,t,n,r=()=>{},s){const a=\"magicfeedback-rating-star-selected\",o=document.createElement(\"div\");o.classList.add(\"magicfeedback-rating-star-container\"),o.style.maxWidth=\"300px\",o.style.margin=\"auto\",o.dataset.originalSelection=\"0\";for(let t=1;t<=5;t++){const i=document.createElement(\"label\");i.classList.add(\"magicfeedback-rating-star-option\");const n=document.createElement(\"input\");n.id=`rating-${e}-${t}`,n.type=\"radio\",n.name=e,n.value=t.toString(),n.style.position=\"absolute\",n.style.opacity=\"0\",n.style.width=\"0\",n.style.height=\"0\",n.classList.add(\"magicfeedback-input\"),s&&s===n.value&&(n.checked=!0),n.addEventListener(\"change\",(()=>{const e=o.querySelectorAll(\".rating__star\");for(let t=0;t<e.length;t++)t+1<=Number(n.value)?e[t].classList.contains(a)||e[t].classList.add(a):e[t].classList.contains(a)&&e[t].classList.remove(a);o.dataset.originalSelection=n.value,r&&r()})),i.appendChild(n);const l=document.createElement(\"label\");l.htmlFor=`rating-${e}-${t}`,l.classList.add(\"rating__star\"),l.textContent=\"★\",l.style.fontSize=\"40px\",l.style.color=\"#CCCCCC\",l.style.cursor=\"pointer\",l.addEventListener(\"mouseenter\",(()=>{const e=o.querySelectorAll(\".rating__star\"),i=t-1;e.forEach(((e,t)=>{t<=i?e.classList.contains(a)||e.classList.add(a):e.classList.contains(a)&&e.classList.remove(a)}))})),l.addEventListener(\"mouseleave\",(()=>{const e=Number(o.dataset.originalSelection||\"0\");o.querySelectorAll(\".rating__star\").forEach(((t,i)=>{i<e?t.classList.contains(a)||t.classList.add(a):t.classList.contains(a)&&t.classList.remove(a)}))})),i.appendChild(l),o.appendChild(i)}const l=i(1,5,t,n,!1,!1);return l.childElementCount>0&&(o.classList.add(\"magicfeedback-rating-container--with-placeholder\"),o.insertBefore(l,o.firstChild)),o},t.createRatingNumberElement=function(e,t,n,r,s,a,o,l){var d;const c=document.createElement(\"div\");c.classList.add(\"magicfeedback-rating-number\");const u=\"ltr\"===n?r:`${r}-reverse`,p=document.createElement(\"div\");p.classList.add(\"magicfeedback-rating-number-container\"),p.classList.add(`magicfeedback-rating-number-container-${n}`),p.classList.add(`magicfeedback-rating-number-container-${r}`),p.style.display=\"flex\",p.style.flexDirection=u,p.setAttribute(\"role\",\"radiogroup\"),p.setAttribute(\"aria-label\",(null==t?void 0:t.ariaLabel)||\"Rating\");const m=(null==t?void 0:t.max)?Number(null==t?void 0:t.max):10,h=(null==t?void 0:t.min)?Number(null==t?void 0:t.min):0,f=(null==t?void 0:t.numberPlaceholders)||null,v=!(s||\"column\"===r)&&((null==t?void 0:t.minPlaceholder)||(null==t?void 0:t.maxPlaceholder));if(v){const e=i(h,m,null==t?void 0:t.minPlaceholder,null==t?void 0:t.maxPlaceholder,null!==(d=null==t?void 0:t.extraOption)&&void 0!==d&&d,!1,n,\"row\");e.childElementCount>0&&(p.classList.add(\"magicfeedback-rating-number-container--with-placeholder\"),p.insertBefore(e,p.firstChild))}for(let i=h;i<=m;i++){const n=document.createElement(\"div\");n.classList.add(\"magicfeedback-rating-number-option\"),n.classList.add(`magicfeedback-rating-number-option-${r}`);const d=document.createElement(\"label\");d.htmlFor=`rating-${e}-${i}`,d.classList.add(\"magicfeedback-rating-number-option-label-container\");let c=i.toString();v?f&&f[i]&&!s&&(d.title=f[i]):f&&f[i]?c+=` = ${f[i]}`:i===h&&(null==t?void 0:t.minPlaceholder)?c+=` = ${null==t?void 0:t.minPlaceholder}`:i===m&&(null==t?void 0:t.maxPlaceholder)&&(c+=` = ${null==t?void 0:t.maxPlaceholder}`);const u=document.createElement(\"input\");u.id=`rating-${e}-${i}`,u.type=\"radio\",u.name=e,u.value=i.toString(),u.classList.add(a),u.classList.add(\"magicfeedback-input\"),u.setAttribute(\"aria-label\",`${i}`),o&&u.addEventListener(\"change\",(()=>o())),l&&l===u.value&&(u.checked=!0);const g=document.createElement(\"label\");g.htmlFor=`rating-${e}-${i}`,g.textContent=c,g.classList.add(\"magicfeedback-rating-number-value\"),d.appendChild(u),d.appendChild(g),n.appendChild(d),p.appendChild(n)}if((null==t?void 0:t.extraOption)&&(null==t?void 0:t.extraOptionText)){const i=document.createElement(\"div\");i.classList.add(\"magicfeedback-rating-number-option\");const r=document.createElement(\"label\");r.htmlFor=`rating-${e}-extra`,r.classList.add(\"magicfeedback-rating-number-option-label-container\");const s=document.createElement(\"input\");s.id=`rating-${e}-extra`,s.type=\"radio\",s.name=e,s.value=\"-\",s.classList.add(a),s.classList.add(\"magicfeedback-input\"),s.setAttribute(\"aria-label\",null==t?void 0:t.extraOptionText),o&&s.addEventListener(\"change\",(()=>o()));const l=document.createElement(\"label\");l.htmlFor=`rating-${e}-extra`,l.textContent=null==t?void 0:t.extraOptionText,l.classList.add(\"magicfeedback-rating-number-value\"),r.appendChild(s),r.appendChild(l),i.appendChild(r),\"ltr\"===n?p.appendChild(i):p.insertBefore(i,p.firstChild)}return c.appendChild(p),c}},42:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getQuestionRenderer=void 0;const n=i(558),r=i(998),s=i(72),a=i(732),o=i(90),l=i(65),d=i(85),c=i(817),u=i(965),p=i(180),m=i(991),h=i(152),f=i(917),v=i(452),g=i(644),y=i(773),b=i(66),E=i(843),k=i(250),A=i(409),C=i(282),T=new Map([[n.FEEDBACKAPPANSWERTYPE.TEXT,o.renderText],[n.FEEDBACKAPPANSWERTYPE.LONGTEXT,s.renderLongText],[n.FEEDBACKAPPANSWERTYPE.NUMBER,a.renderNumber],[n.FEEDBACKAPPANSWERTYPE.RADIO,r.renderChoice],[n.FEEDBACKAPPANSWERTYPE.MULTIPLECHOICE,r.renderChoice],[n.FEEDBACKAPPANSWERTYPE.BOOLEAN,l.renderBoolean],[n.FEEDBACKAPPANSWERTYPE.SELECT,d.renderSelect],[n.FEEDBACKAPPANSWERTYPE.DATE,c.renderDate],[n.FEEDBACKAPPANSWERTYPE.EMAIL,u.renderEmail],[n.FEEDBACKAPPANSWERTYPE.PASSWORD,p.renderPassword],[n.FEEDBACKAPPANSWERTYPE.CONSENT,m.renderConsent],[n.FEEDBACKAPPANSWERTYPE.RATING_EMOJI,h.renderRatingEmoji],[n.FEEDBACKAPPANSWERTYPE.RATING_NUMBER,f.renderRatingNumber],[n.FEEDBACKAPPANSWERTYPE.RATING_STAR,v.renderRatingStar],[n.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX,g.renderMatrix],[n.FEEDBACKAPPANSWERTYPE.PRIORITY_LIST,y.renderPriorityList],[n.FEEDBACKAPPANSWERTYPE.POINT_SYSTEM,b.renderPointSystem],[n.FEEDBACKAPPANSWERTYPE.UPLOAD_IMAGE,E.renderUploadImage],[n.FEEDBACKAPPANSWERTYPE.UPLOAD_FILE,k.renderUploadFile],[n.FEEDBACKAPPANSWERTYPE.MULTIPLECHOISE_IMAGE,A.renderMultipleChoiceImage],[n.FEEDBACKAPPANSWERTYPE.INFO_PAGE,C.renderInfoPage]]);t.getQuestionRenderer=function(e){return T.get(e)}},65:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderBoolean=void 0;const n=i(516);t.renderBoolean=({question:e,language:t,urlParamValue:i,send:r})=>{const{ref:s,assets:a}=e,o=document.createElement(\"div\"),l=\"magicfeedback-radio\",d=document.createElement(\"div\");return d.classList.add(\"magicfeedback-boolean-container\"),d.style.display=\"flex\",d.style.flexDirection=\"row\",d.style.justifyContent=\"space-between\",d.style.width=\"70%\",d.style.margin=\"auto\",((null==a?void 0:a.addIcon)?[\"👍\",\"👎\"]:(0,n.getBooleanOptions)(t)).forEach(((e,t)=>{const n=document.createElement(\"label\");n.classList.add(\"magicfeedback-boolean-option\"),n.htmlFor=`rating-${s}-${t}`,n.style.cursor=\"pointer\",n.style.display=\"flex\",n.style.justifyContent=\"center\",n.style.alignItems=\"center\",n.style.margin=\"auto\",n.style.padding=\"0\",n.style.width=\"45%\",n.style.height=\"38px\";const a=document.createElement(\"label\");a.htmlFor=`rating-${s}-${t}`,a.textContent=e,a.style.margin=\"0\",a.style.padding=\"0\";const o=document.createElement(\"input\");o.id=`rating-${s}-${t}`,o.type=\"radio\",o.name=s,o.value=[\"Yes\",\"No\"][t],o.classList.add(l),o.classList.add(\"magicfeedback-input\"),o.style.position=\"absolute\",o.style.opacity=\"0\",o.style.width=\"0\",o.style.height=\"0\",o.style.margin=\"0\",o.addEventListener(\"change\",(()=>{r&&r()})),i&&i.toLowerCase()===o.value.toLowerCase()&&(o.checked=!0),n.appendChild(o),n.appendChild(a),d.appendChild(n)})),o.appendChild(d),{element:o,elementTypeClass:l}}},998:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderChoice=void 0;const n=i(558),r=i(784);t.renderChoice=({question:e,language:t,urlParamValue:i,randomPosition:s,send:a})=>{const{type:o,ref:l,value:d,defaultValue:c,assets:u}=e,p=document.createElement(\"div\"),m=\"magicfeedback-\"+(\"MULTIPLECHOICE\"===o?\"checkbox\":\"radio\");let h=d||[];s&&(h=h.sort((()=>Math.random()-.5)));let f=(null==u?void 0:u.exclusiveAnswers)||[];(null==u?void 0:u.extraOption)&&(f=f.filter((e=>e!==u.extraOptionText))),f.length>0&&(null==f||f.forEach((e=>{h.includes(e)||h.push(e)})));const v=null==u?void 0:u.extraOptionText;return(null==u?void 0:u.extraOption)&&v&&!h.includes(v)&&h.push(v),h.forEach(((e,s)=>{const d=document.createElement(\"div\");d.classList.add(`magicfeedback-${\"MULTIPLECHOICE\"===o?\"checkbox\":\"radio\"}-container`);const v=document.createElement(\"label\"),g=document.createElement(\"input\");if(g.id=`rating-${l}-${s}`,g.type=\"MULTIPLECHOICE\"===o?\"checkbox\":\"radio\",g.name=l,g.value=e,g.classList.add(m),g.classList.add(\"magicfeedback-input\"),o===n.FEEDBACKAPPANSWERTYPE.MULTIPLECHOICE&&(null==u?void 0:u.maxOptions)&&(null==u?void 0:u.maxOptions)>0&&g.addEventListener(\"change\",(()=>{document.querySelectorAll(`input[name=\"${l}\"]:checked`).length>(null==u?void 0:u.maxOptions)&&(g.checked=!1)})),o===n.FEEDBACKAPPANSWERTYPE.RADIO&&a&&(!(null==u?void 0:u.extraOptionText)||(null==u?void 0:u.extraOptionText)&&e!==(null==u?void 0:u.extraOptionText))&&g.addEventListener(\"change\",(()=>{a()})),e!==c&&e!==i||(g.checked=!0),v.textContent=e,v.htmlFor=`rating-${l}-${s}`,g.addEventListener(\"change\",(t=>{const i=document.getElementById(`extra-option-${l}`);t.target.checked&&f.includes(e)?(h.forEach((t=>{t!==e&&(document.querySelector(`input[value=\"${t}\"]`).checked=!1)})),i&&(i.style.display=\"none\")):f.forEach((t=>{t!==e&&(document.querySelector(`input[value=\"${t}\"]`).checked=!1)})),(null==u?void 0:u.extraOption)&&e===(null==u?void 0:u.extraOptionText)&&i&&(i.style.display=t.target.checked?\"block\":\"none\")})),d.appendChild(g),d.appendChild(v),p.appendChild(d),(null==u?void 0:u.extraOption)&&e===(null==u?void 0:u.extraOptionText)){const e=document.createElement(\"input\");e.type=\"text\",e.placeholder=(null==u?void 0:u.extraOptionPlaceholder)||r.placeholder.answer(t||\"en\"),e.classList.add(\"magicfeedback-extra-option\"),e.classList.add(\"magicfeedback-input\"),e.id=`extra-option-${l}`,e.name=`extra-option-${l}`,e.style.display=\"none\",p.appendChild(e)}})),{element:p,elementTypeClass:m}}},991:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderConsent=void 0,t.renderConsent=({question:e,urlParamValue:t,send:i})=>{const{id:n,ref:r,value:s,require:a}=e,o=document.createElement(\"input\");return o.type=\"checkbox\",o.id=`magicfeedback-${n}`,o.name=r,o.value=\"true\",o.required=a,o.classList.add(\"magicfeedback-consent\"),o.classList.add(\"magicfeedback-input\"),t&&s.includes(t)&&(o.checked=!0),i&&o.addEventListener(\"change\",(()=>{i()})),{element:o,elementTypeClass:\"magicfeedback-consent\"}}},817:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderDate=void 0;const n=i(784);t.renderDate=({language:e,placeholderText:t,urlParamValue:i})=>{const r=document.createElement(\"input\");return r.type=\"date\",r.placeholder=t||n.placeholder.date(e||\"en\"),i&&(r.value=i),{element:r,elementTypeClass:\"magicfeedback-date\"}}},965:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderEmail=void 0,t.renderEmail=({placeholderText:e,urlParamValue:t})=>{const i=document.createElement(\"input\");return i.type=\"email\",i.placeholder=e||\"you@example.com\",t&&(i.value=t),{element:i,elementTypeClass:\"magicfeedback-email\"}}},282:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderInfoPage=void 0,t.renderInfoPage=({question:e,placeholderText:t})=>{var i,n;const r=document.createElement(\"div\");if(\"string\"==typeof(null===(i=e.assets)||void 0===i?void 0:i.placeholder)?\"\"!==e.assets.placeholder.trim():Boolean(null===(n=e.assets)||void 0===n?void 0:n.placeholder)){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-info-message\"),e.innerHTML=t||\"\",r.appendChild(e)}return{element:r,elementTypeClass:\"magicfeedback-info-page\"}}},72:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderLongText=void 0;const n=i(784);t.renderLongText=({language:e,placeholderText:t,urlParamValue:i,maxCharacters:r})=>{const s=document.createElement(\"textarea\");return s.rows=3,r>0&&(s.maxLength=r),s.placeholder=t||n.placeholder.answer(e||\"en\"),i&&(s.value=i),{element:s,elementTypeClass:\"magicfeedback-longtext\"}}},644:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderMatrix=void 0,t.renderMatrix=({question:e,isPhone:t,randomPosition:i})=>{const{ref:n,value:r,assets:s}=e,a=document.createElement(\"div\"),o=document.createElement(\"div\");o.classList.add(\"magicfeedback-multi-question-matrix-container\");let l=(null==s?void 0:s.options)||[],d=[...r],c=[];if(i&&(l=null==l?void 0:l.sort((()=>Math.random()-.5)),d=[...d].sort((()=>Math.random()-.5))),(null==s?void 0:s.exclusiveAnswers)&&(c=null==s?void 0:s.exclusiveAnswers,null==c||c.forEach((e=>{d.includes(e)||d.push(e)}))),t){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-multi-question-matrix-list\"),null==l||l.forEach((t=>{const i=document.createElement(\"div\");i.classList.add(\"magicfeedback-multi-question-matrix-list-item\"),i.style.display=\"flex\",i.style.flexDirection=\"column\",i.style.alignItems=\"flex-start\",i.style.marginBottom=\"10px\";const r=document.createElement(\"label\");r.classList.add(\"magicfeedback-multi-question-matrix-label\"),r.style.paddingBottom=\"10px\",r.textContent=t,i.appendChild(r),d.forEach((e=>{const r=document.createElement(\"div\");r.classList.add(\"magicfeedback-radio-container\"),r.style.display=\"flex\",r.style.alignItems=\"center\",r.style.justifyContent=\"flex-start\",r.style.width=\"99%\",r.style.margin=\"5px auto\";const s=document.createElement(\"label\"),a=document.createElement(\"input\");a.id=`${n}-${t}-${e}`,a.type=\"radio\",a.name=`${n}-${t}`,a.value=e,a.classList.add(\"magicfeedback-input\"),s.textContent=e,s.htmlFor=`${n}-${t}-${e}`,r.appendChild(a),r.appendChild(s),i.appendChild(r)})),e.appendChild(i)})),o.appendChild(e)}else{const e=document.createElement(\"table\");e.classList.add(\"magicfeedback-multi-question-matrix-table\");const t=document.createElement(\"thead\");t.classList.add(\"magicfeedback-multi-question-matrix-header\"),t.style.paddingBottom=\"15px\";const i=document.createElement(\"tr\"),r=document.createElement(\"th\");i.appendChild(r),d.forEach((e=>{const t=document.createElement(\"th\");t.textContent=e,i.appendChild(t)})),t.appendChild(i),e.appendChild(t);const s=document.createElement(\"tbody\");null==l||l.forEach((e=>{const t=document.createElement(\"tr\");t.classList.add(\"magicfeedback-multi-question-matrix-row-tr\");const i=document.createElement(\"td\");i.style.minWidth=\"200px\",i.style.padding=\"10px\";const r=document.createElement(\"label\");r.classList.add(\"magicfeedback-multi-question-matrix-label\"),r.textContent=e,i.appendChild(r),t.appendChild(i),d.forEach((i=>{const r=document.createElement(\"td\"),s=document.createElement(\"input\");s.type=\"radio\",s.name=`${n}-${e}`,s.value=i,s.id=`${n}-${e}-${i}`,s.classList.add(\"magicfeedback-input\"),r.appendChild(s),t.appendChild(r)})),s.appendChild(t)})),e.appendChild(s),o.appendChild(e)}return a.appendChild(o),{element:a,elementTypeClass:\"magicfeedback-multi-question-matrix\"}}},409:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderMultipleChoiceImage=void 0,t.renderMultipleChoiceImage=({question:e,randomPosition:t,urlParamValue:i,send:n})=>{const r=document.createElement(\"div\"),{ref:s,assets:a}=e;let o=[...e.value];const l=document.createElement(\"div\");l.classList.add(\"magicfeedback-multiple-choice-image-container\"),l.style.display=\"flex\",l.style.flexDirection=\"row\",l.style.flexWrap=\"wrap\",l.style.justifyContent=\"center\";const d=o.length;let c=1,u=1;if(window.innerWidth<600)c=1,u=d;else switch(d){case 1:case 2:case 3:c=d,u=1;break;case 4:case 5:case 6:u=2,c=Math.ceil(d/u);break;case 7:case 8:case 9:u=3,c=Math.ceil(d/u);break;default:u=4,c=Math.ceil(d/u)}const p=void 0!==(null==a?void 0:a.addTitle)&&(null==a?void 0:a.addTitle),m=void 0!==(null==a?void 0:a.multiOption)&&(null==a?void 0:a.multiOption),h=void 0!==(null==a?void 0:a.extraOption)&&(null==a?void 0:a.extraOption);function f(e){try{const{position:t,url:r,value:a}=e,o=document.createElement(\"div\");o.classList.add(\"magicfeedback-multiple-choice-image-option\"),o.style.width=`calc(100% / ${c} - 2px)`,o.style.height=`calc(100% / ${u} - 2px)`,o.style.padding=\"8px\",o.style.margin=\"0\";const d=document.createElement(\"label\");d.classList.add(\"magicfeedback-image-option-label-container\"),d.htmlFor=`rating-${s}-${t}`,d.style.cursor=\"pointer\",d.addEventListener(\"click\",(()=>{d.style.border=\"2px solid #000\"}));const h=document.createElement(\"label\");h.textContent=a,h.classList.add(\"magicfeedback-multiple-choice-image-label\");const f=document.createElement(\"input\");f.id=`rating-${s}-${t}`,f.type=m?\"checkbox\":\"radio\",f.name=s,f.value=a,f.style.position=\"absolute\",f.style.opacity=\"0\",f.style.width=\"0\",f.style.height=\"0\",f.classList.add(\"magicfeedback-input\"),i&&i===f.value&&(f.checked=!0),!m&&n&&f.addEventListener(\"change\",(()=>{n()}));const v=document.createElement(\"img\");v.classList.add(\"magicfeedback-multiple-choice-image-image\"),v.src=r,v.style.cursor=\"pointer\",v.style.backgroundSize=\"cover\",v.style.backgroundPosition=\"center\",v.style.width=\"100%\",v.style.height=\"100%\",v.style.objectFit=\"cover\",v.style.margin=\"auto\",d.appendChild(f),d.appendChild(v),p&&d.appendChild(h),o.appendChild(d),l.appendChild(o)}catch(e){console.error(e)}}return t&&(o=o.sort((()=>Math.random()-.5))),o.forEach((e=>f(JSON.parse(e)))),h&&(null==a?void 0:a.extraOptionValue)&&(null==a?void 0:a.extraOptionValue.length)>0&&f(null==a?void 0:a.extraOptionValue[0]),r.appendChild(l),{element:r,elementTypeClass:\"magicfeedback-multiple-choice-image\"}}},732:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderNumber=void 0;const n=i(784),r=i(516);t.renderNumber=({question:e,format:t,language:i,urlParamValue:s})=>{const a=document.createElement(\"input\");a.type=\"number\",a.placeholder=\"slim\"===t?(0,r.parseTitle)(e.title,i):n.placeholder.number(i||\"en\");const{value:o}=e;return o.length&&(o.sort(((e,t)=>Number(e)-Number(t))),a.max=o[o.length-1],a.min=o[0],a.value=o[0]),s&&!isNaN(Number(s))&&(a.value=s),{element:a,elementTypeClass:\"magicfeedback-number\"}}},180:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderPassword=void 0;const n=i(784);t.renderPassword=({language:e,placeholderText:t,urlParamValue:i})=>{const r=document.createElement(\"input\");return r.type=\"password\",r.placeholder=t||n.placeholder.password(e||\"en\"),i&&(r.value=i),{element:r,elementTypeClass:\"magicfeedback-password\"}}},66:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderPointSystem=void 0;const n=i(784);t.renderPointSystem=({question:e,language:t})=>{const{ref:i,value:r}=e,s=document.createElement(\"div\"),a=document.createElement(\"div\");a.classList.add(\"magicfeedback-point-system-container\");const o=document.createElement(\"ul\");o.classList.add(\"magicfeedback-point-system-list\"),o.style.padding=\"0\";const l=100/r.length,d=document.createElement(\"div\");d.classList.add(\"magicfeedback-error\"),d.textContent=n.placeholder.pointsystemerror(t||\"en\"),d.style.color=\"#C70039\",d.style.fontSize=\"14px\",d.style.textAlign=\"right\",d.style.width=\"100%\",d.style.display=\"none\";const c=document.createElement(\"div\");return c.classList.add(\"magicfeedback-point-system-total\"),c.textContent=\"0 / 100 %\",c.style.textAlign=\"right\",c.style.fontSize=\"15px\",c.style.marginTop=\"5px\",r.forEach(((e,t)=>{const n=document.createElement(\"li\");n.classList.add(\"magicfeedback-point-system-item\"),n.style.display=\"flex\",n.style.justifyContent=\"space-between\",n.style.alignItems=\"center\",n.style.margin=\"5px\";const r=document.createElement(\"label\");r.textContent=e,r.style.fontSize=\"15px\",n.appendChild(r);const s=document.createElement(\"span\");s.classList.add(\"magicfeedback-point-system-input-container\");const a=document.createElement(\"input\");a.name=i,a.id=`${e}`,a.type=\"number\",a.min=\"0\",a.max=\"100\",a.value=\"0\",a.classList.add(\"magicfeedback-input\"),a.style.width=\"40px\",a.style.border=\"0\",a.style.textAlign=\"center\",a.style.margin=\"0 5px\",a.autofocus=0===t;const u=document.createElement(\"span\");u.textContent=\"%\",u.style.color=\"#000\",a.addEventListener(\"input\",(()=>{const e=o.querySelectorAll(\"input\");let t=0;e.forEach((e=>{t+=Number(e.value)})),t>100&&(a.value=`${l}%`,t-=Number(a.value));const i=document.getElementById(\"magicfeedback-submit\");i&&(t<100?(c.style.color=\"orange\",i.setAttribute(\"disabled\",\"true\")):(d.style.display=\"none\",c.style.color=\"green\",i.removeAttribute(\"disabled\"))),c.textContent=`${t} / 100 %`})),a.addEventListener(\"focus\",(()=>{const e=document.getElementById(\"magicfeedback-submit\");e&&(e.setAttribute(\"disabled\",\"true\"),e.addEventListener(\"pointerover\",(()=>{const e=o.querySelectorAll(\"input\");let t=0;e.forEach((e=>{t+=Number(e.value)})),t<100&&(d.style.display=\"block\")})))})),s.appendChild(a),s.appendChild(u),n.appendChild(s),o.appendChild(n)})),a.appendChild(o),a.appendChild(c),a.appendChild(d),s.appendChild(a),{element:s,elementTypeClass:\"magicfeedback-point-system\"}}},773:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderPriorityList=void 0,t.renderPriorityList=({question:e,randomPosition:t,language:i})=>{var n,r,s;const a=document.createElement(\"div\"),o=function(e){const{value:t,ref:i,randomPosition:n=!1,limitPriority:r=!1,maxPriority:s=0,language:a=\"en\",placeholder:o=\"\"}=e,l=e=>{const t={en:{selectUpTo:\"Select up to\",options:\"options\",thenOrder:\"and then order them\",selectOptions:\"Select options\",cancel:\"Cancel\",confirm:\"Confirm\",selectOptionNumber:\"Select option #\",prioritized:\"Prioritized\",of:\"of\",instruction:\"Your priority list can be seen below. If you wish, you can rearrange your choices using the arrows. Click 'Next' to confirm your selection and proceed.\"},es:{selectUpTo:\"Selecciona hasta\",options:\"opciones\",thenOrder:\"y luego ordénalas\",selectOptions:\"Seleccionar opciones\",cancel:\"Cancelar\",confirm:\"Confirmar\",selectOptionNumber:\"Selecciona la opción #\",prioritized:\"Priorizadas\",of:\"de\",instruction:'Tu lista priorizada se muestra abajo. Si deseas, puedes reordenar las opciones con las flechas. Haz clic en \"Siguiente\" para confirmar y continuar.'},pt:{selectUpTo:\"Selecione até\",options:\"opções\",thenOrder:\"e depois ordene-as\",selectOptions:\"Selecionar opções\",cancel:\"Cancelar\",confirm:\"Confirmar\",selectOptionNumber:\"Selecione a opção #\",prioritized:\"Priorizadas\",of:\"de\",instruction:'Sua lista de prioridades pode ser vista abaixo. Se quiser, você pode reorganizar suas escolhas usando as setas. Clique em \"Próximo\" para confirmar sua seleção e continuar.'},fr:{selectUpTo:\"Sélectionnez jusqu'à\",options:\"options\",thenOrder:\"puis classez-les\",selectOptions:\"Sélectionner des options\",cancel:\"Annuler\",confirm:\"Confirmer\",selectOptionNumber:\"Sélectionnez l'option #\",prioritized:\"Priorisées\",of:\"sur\",instruction:'Votre liste de priorités est affichée ci-dessous. Si vous le souhaitez, vous pouvez réorganiser vos choix à l\\'aide des flèches. Cliquez sur \"Suivant\" pour confirmer votre sélection et continuer.'},de:{selectUpTo:\"Wählen Sie bis zu\",options:\"Optionen\",thenOrder:\"und ordnen Sie sie dann\",selectOptions:\"Optionen auswählen\",cancel:\"Abbrechen\",confirm:\"Bestätigen\",selectOptionNumber:\"Wählen Sie Option #\",prioritized:\"Priorisiert\",of:\"von\",instruction:'Ihre Prioritätenliste wird unten angezeigt. Wenn Sie möchten, können Sie Ihre Auswahl mit den Pfeilen neu anordnen. Klicken Sie auf \"Weiter\", um Ihre Auswahl zu bestätigen und fortzufahren.'},it:{selectUpTo:\"Seleziona fino a\",options:\"opzioni\",thenOrder:\"e poi ordinali\",selectOptions:\"Seleziona opzioni\",cancel:\"Annulla\",confirm:\"Conferma\",selectOptionNumber:\"Seleziona opzione #\",prioritized:\"Prioritizzate\",of:\"di\",instruction:'La tua lista di priorità è mostrata qui sotto. Se vuoi, puoi riordinare le tue scelte usando le frecce. Clicca su \"Avanti\" per confermare la selezione e continuare.'},nl:{selectUpTo:\"Selecteer tot\",options:\"opties\",thenOrder:\"en rangschik ze vervolgens\",selectOptions:\"Selecteer opties\",cancel:\"Annuleren\",confirm:\"Bevestigen\",selectOptionNumber:\"Selecteer optie #\",prioritized:\"Geprioriteerd\",of:\"van\",instruction:'Je prioriteitenlijst wordt hieronder weergegeven. Als je wilt, kun je je keuzes herschikken met behulp van de pijlen. Klik op \"Volgende\" om je selectie te bevestigen en door te gaan.'},pl:{selectUpTo:\"Wybierz do\",options:\"opcje\",thenOrder:\"a następnie je uporządkuj\",selectOptions:\"Wybierz opcje\",cancel:\"Anuluj\",confirm:\"Potwierdź\",selectOptionNumber:\"Wybierz opcję #\",prioritized:\"Priorytetowe\",of:\"z\",instruction:'Twoja lista priorytetów jest pokazana poniżej. Jeśli chcesz, możesz zmienić kolejność swoich wyborów za pomocą strzałek. Kliknij \"Dalej\", aby potwierdzić wybór i kontynuować.'},ru:{selectUpTo:\"Выберите до\",options:\"вариантов\",thenOrder:\"а затем упорядочьте их\",selectOptions:\"Выбрать варианты\",cancel:\"Отмена\",confirm:\"Подтвердить\",selectOptionNumber:\"Выберите вариант #\",prioritized:\"Приоритеты\",of:\"из\",instruction:'Ваш список приоритетов отображается ниже. Если хотите, вы можете изменить порядок вариантов с помощью стрелок. Нажмите \"Далее\", чтобы подтвердить выбор и продолжить.'},ja:{selectUpTo:\"最大\",options:\"個のオプションを選択\",thenOrder:\"その後並べ替えてください\",selectOptions:\"オプションを選択\",cancel:\"キャンセル\",confirm:\"確認\",selectOptionNumber:\"オプション # を選択\",prioritized:\"優先順位\",of:\"のうち\",instruction:\"優先順位リストは以下に表示されます。必要に応じて、矢印を使って選択肢を並べ替えることができます。「次へ」をクリックして選択を確定し、続行してください。\"},zh:{selectUpTo:\"最多选择\",options:\"个选项\",thenOrder:\"然后排序它们\",selectOptions:\"选择选项\",cancel:\"取消\",confirm:\"确认\",selectOptionNumber:\"选择选项 #\",prioritized:\"已优先\",of:\"共\",instruction:\"你的优先列表如下所示。如有需要,可以使用箭头重新排序选项。点击“下一步”确认选择并继续。\"},ko:{selectUpTo:\"최대\",options:\"개의 옵션 선택\",thenOrder:\"그런 다음 정렬하세요\",selectOptions:\"옵션 선택\",cancel:\"취소\",confirm:\"확인\",selectOptionNumber:\"옵션 # 선택\",prioritized:\"우선순위\",of:\"중\",instruction:'우선순위 목록은 아래에 표시됩니다. 원한다면 화살표를 사용해 선택 항목을 재정렬할 수 있습니다. \"다음\"을 클릭하여 선택을 확인하고 계속하세요.'},ar:{selectUpTo:\"اختر حتى\",options:\"خيارات\",thenOrder:\"ثم رتبها\",selectOptions:\"اختر الخيارات\",cancel:\"إلغاء\",confirm:\"تأكيد\",selectOptionNumber:\"اختر الخيار #\",prioritized:\"تم الترتيب\",of:\"من\",instruction:'تظهر قائمة الأولويات الخاصة بك أدناه. إذا رغبت، يمكنك إعادة ترتيب اختياراتك باستخدام الأسهم. انقر على \"التالي\" لتأكيد اختيارك والمتابعة.'},bn:{selectUpTo:\"সর্বোচ্চ নির্বাচন করুন\",options:\"টি বিকল্প\",thenOrder:\"তারপর সেগুলো সাজান\",selectOptions:\"বিকল্প নির্বাচন করুন\",cancel:\"বাতিল\",confirm:\"নিশ্চিত করুন\",selectOptionNumber:\"বিকল্প # নির্বাচন করুন\",prioritized:\"অগ্রাধিকারপ্রাপ্ত\",of:\"এর মধ্যে\",instruction:\"আপনার অগ্রাধিকার তালিকা নিচে দেখানো হয়েছে। চাইলে তীর চিহ্ন ব্যবহার করে আপনার পছন্দগুলো পুনরায় সাজাতে পারেন। “পরবর্তী” ক্লিক করে আপনার নির্বাচন নিশ্চিত করুন এবং এগিয়ে যান।\"},da:{selectUpTo:\"Vælg op til\",options:\"muligheder\",thenOrder:\"og sorter dem derefter\",selectOptions:\"Vælg muligheder\",cancel:\"Annuller\",confirm:\"Bekræft\",selectOptionNumber:\"Vælg mulighed #\",prioritized:\"Prioriteret\",of:\"af\",instruction:'Din prioritetsliste vises nedenfor. Hvis du ønsker det, kan du omarrangere dine valg ved hjælp af pilene. Klik på \"Næste\" for at bekræfte dit valg og fortsætte.'},fi:{selectUpTo:\"Valitse enintään\",options:\"vaihtoehtoa\",thenOrder:\"ja järjestä ne sitten\",selectOptions:\"Valitse vaihtoehdot\",cancel:\"Peruuta\",confirm:\"Vahvista\",selectOptionNumber:\"Valitse vaihtoehto #\",prioritized:\"Priorisoitu\",of:\" / \",instruction:'Prioriteettilistasi näkyy alla. Voit halutessasi järjestää valinnat uudelleen nuolien avulla. Napsauta \"Seuraava\" vahvistaaksesi valinnan ja jatkaaksesi.'},sv:{selectUpTo:\"Välj upp till\",options:\"alternativ\",thenOrder:\"och ordna dem sedan\",selectOptions:\"Välj alternativ\",cancel:\"Avbryt\",confirm:\"Bekräfta\",selectOptionNumber:\"Välj alternativ #\",prioritized:\"Prioriterat\",of:\"av\",instruction:'Din prioriteringslista visas nedan. Om du vill kan du ordna om dina val med hjälp av pilarna. Klicka på \"Nästa\" för att bekräfta ditt val och fortsätta.'},no:{selectUpTo:\"Velg opptil\",options:\"alternativer\",thenOrder:\"og ordne dem deretter\",selectOptions:\"Velg alternativer\",cancel:\"Avbryt\",confirm:\"Bekreft\",selectOptionNumber:\"Velg alternativ #\",prioritized:\"Prioritert\",of:\"av\",instruction:'Prioriteringslisten din vises nedenfor. Hvis du ønsker det, kan du ordne valgene dine ved hjelp av pilene. Klikk på \"Neste\" for å bekrefte valget ditt og fortsette.'}};return t[t[a]?a:\"en\"][e]},d=document.createElement(\"div\");if(d.classList.add(\"magicfeedback-priority-list-container\"),r&&s&&s>0){const e=[],r=document.createElement(\"div\");r.classList.add(\"magicfeedback-priority-list-header\");const a=document.createElement(\"div\");a.classList.add(\"magicfeedback-priority-list-instruction\"),a.textContent=\"\"!==o?o:`${l(\"instruction\")}`,a.style.display=\"none\";const c=document.createElement(\"button\");c.type=\"button\",c.textContent=l(\"selectOptions\"),c.classList.add(\"magicfeedback-button\"),c.classList.add(\"magicfeedback-priority-list-open-btn\"),r.appendChild(c),r.appendChild(a);const u=document.createElement(\"div\");u.classList.add(\"magicfeedback-priority-list-reorder\");const p=document.createElement(\"ul\");p.classList.add(\"magicfeedback-priority-list-list\"),u.appendChild(p);const m=()=>{p.innerHTML=\"\",e.forEach(((t,n)=>{const r=document.createElement(\"li\");r.classList.add(\"magicfeedback-priority-list-item\");const s=document.createElement(\"input\");s.classList.add(\"magicfeedback-input-magicfeedback-priority-list\"),s.classList.add(\"magicfeedback-input\"),s.type=\"hidden\",s.id=`priority-list-${i}`,s.name=i,s.value=`${n+1}. ${t}`,r.appendChild(s);const a=document.createElement(\"label\");a.classList.add(\"magicfeedback-priority-list-item-label\"),a.textContent=`${n+1}. ${t}`,r.appendChild(a);const o=document.createElement(\"div\");o.classList.add(\"magicfeedback-priority-list-arrows\");const l=document.createElement(\"img\");l.classList.add(\"magicfeedback-priority-list-arrow-up\"),l.src=\"https://magicfeedback-c6458-dev.web.app/assets/arrow.svg\",l.style.visibility=0===n?\"hidden\":\"visible\";const d=document.createElement(\"img\");d.classList.add(\"magicfeedback-priority-list-arrow-down\"),d.src=\"https://magicfeedback-c6458-dev.web.app/assets/arrow.svg\",d.style.transform=\"rotate(180deg)\",d.style.visibility=n===e.length-1?\"hidden\":\"visible\",l.addEventListener(\"click\",(()=>{var i,n,o,c;const u=r.previousElementSibling;if(u){const m=Number(null===(i=s.value)||void 0===i?void 0:i.split(\".\")[0])-1;s.value=`${m}. ${t}`,a.textContent=`${m}. ${t}`,l.style.visibility=1===m?\"hidden\":\"visible\",d.style.visibility=m===e.length?\"hidden\":\"visible\";const h=u.querySelector(\".magicfeedback-input-magicfeedback-priority-list\"),f=u.querySelector(\".magicfeedback-priority-list-item-label\"),v=u.querySelector(\".magicfeedback-priority-list-arrow-up\"),g=u.querySelector(\".magicfeedback-priority-list-arrow-down\");if(h&&f&&v&&g){const t=Number(null===(n=h.value)||void 0===n?void 0:n.split(\".\")[0])+1;h.value=`${t}.${null===(o=f.textContent)||void 0===o?void 0:o.split(\".\")[1]}`,f.textContent=`${t}.${null===(c=f.textContent)||void 0===c?void 0:c.split(\".\")[1]}`,v.style.visibility=1===t?\"hidden\":\"visible\",g.style.visibility=t===e.length?\"hidden\":\"visible\"}p.insertBefore(r,u)}})),d.addEventListener(\"click\",(()=>{var i,n,o;const c=r.nextElementSibling;if(c){const u=Number(null===(i=s.value)||void 0===i?void 0:i.split(\".\")[0])+1;s.value=`${u}. ${t}`,a.textContent=`${u}. ${t}`,l.style.visibility=1===u?\"hidden\":\"visible\",d.style.visibility=u===e.length?\"hidden\":\"visible\";const m=c.querySelector(\".magicfeedback-input-magicfeedback-priority-list\"),h=c.querySelector(\".magicfeedback-priority-list-item-label\"),f=c.querySelector(\".magicfeedback-priority-list-arrow-up\"),v=c.querySelector(\".magicfeedback-priority-list-arrow-down\");if(m&&h&&f&&v){const t=Number(m.value.split(\".\")[0])-1;m.value=`${t}.${null===(n=h.textContent)||void 0===n?void 0:n.split(\".\")[1]}`,h.textContent=`${t}.${null===(o=h.textContent)||void 0===o?void 0:o.split(\".\")[1]}`,f.style.visibility=1===t?\"hidden\":\"visible\",v.style.visibility=t===e.length?\"hidden\":\"visible\"}p.insertBefore(c,r)}})),o.appendChild(l),o.appendChild(d),r.appendChild(o),p.appendChild(r)}))},h=document.createElement(\"div\");h.classList.add(\"magicfeedback-modal-backdrop\"),h.style.position=\"fixed\",h.style.top=\"0\",h.style.left=\"0\",h.style.width=\"100vw\",h.style.height=\"100vh\",h.style.background=\"rgba(0,0,0,0.4)\",h.style.display=\"none\",h.style.alignItems=\"center\",h.style.justifyContent=\"center\",h.style.zIndex=\"9999\";const f=document.createElement(\"div\");f.classList.add(\"magicfeedback-modal\"),f.style.background=\"#fff\",f.style.borderRadius=\"8px\",f.style.boxShadow=\"0 8px 24px rgba(0,0,0,0.2)\",f.style.maxWidth=\"520px\",f.style.width=\"90%\",f.style.maxHeight=\"80vh\",f.style.overflow=\"auto\",f.style.padding=\"16px\",f.style.position=\"relative\";const v=document.createElement(\"h5\");v.classList.add(\"magicfeedback-modal-title\");const g=()=>Math.min(e.length+1,s),y=()=>{v.textContent=`${l(\"selectOptionNumber\")}${g()}`};y();const b=document.createElement(\"div\");b.classList.add(\"magicfeedback-modal-list\"),(n?[...t].sort((()=>Math.random()-.5)):[...t]).forEach((t=>{const n=document.createElement(\"label\");n.classList.add(\"magicfeedback-modal-row\");const r=document.createElement(\"input\");r.type=\"checkbox\",r.classList.add(\"magicfeedback-input\"),r.name=`${i}-selection`,r.value=t;const a=document.createElement(\"span\");a.textContent=t,r.addEventListener(\"change\",(()=>{if(r.checked){if(e.length>=s)return r.checked=!1,n.classList.add(\"magicfeedback-warning\"),void setTimeout((()=>{n.classList.remove(\"magicfeedback-warning\")}),800);e.push(t)}else{const i=e.indexOf(t);-1!==i&&e.splice(i,1)}y(),A()})),n.appendChild(r),n.appendChild(a),b.appendChild(n)}));const E=document.createElement(\"div\");E.classList.add(\"magicfeedback-modal-actions\");const k=document.createElement(\"div\");k.classList.add(\"magicfeedback-modal-counter\");const A=()=>{const t=l(\"of\");k.textContent=`${l(\"prioritized\")} ${e.length} ${t} ${s}`,a.style.display=e.length>0?\"block\":\"none\"};A();const C=document.createElement(\"button\");C.type=\"button\",C.classList.add(\"magicfeedback-modal-close\"),C.setAttribute(\"aria-label\",l(\"cancel\")),C.title=l(\"cancel\"),C.textContent=\"×\",C.style.position=\"absolute\",C.style.top=\"8px\",C.style.right=\"8px\",C.style.border=\"none\",C.style.background=\"transparent\",C.style.fontSize=\"24px\",C.style.cursor=\"pointer\",C.addEventListener(\"click\",(()=>{h.style.display=\"none\"}));const T=document.createElement(\"button\");return T.type=\"button\",T.textContent=l(\"confirm\"),T.classList.add(\"magicfeedback-button\"),T.classList.add(\"magicfeedback-button-primary\"),T.addEventListener(\"click\",(()=>{h.style.display=\"none\",m()})),E.appendChild(k),E.appendChild(T),f.appendChild(C),f.appendChild(v),f.appendChild(b),f.appendChild(E),h.appendChild(f),c.addEventListener(\"click\",(()=>{h.style.display=\"flex\",y(),A()})),h.addEventListener(\"click\",(e=>{e.target===h&&(h.style.display=\"none\")})),d.appendChild(r),d.appendChild(u),d.appendChild(h),m(),d}const c=document.createElement(\"ul\");c.classList.add(\"magicfeedback-priority-list-list\");const u=n?[...t].sort((()=>Math.random()-.5)):[...t];return u.forEach(((e,t)=>{const n=document.createElement(\"li\");n.classList.add(\"magicfeedback-priority-list-item\"),n.style.display=\"flex\",n.style.justifyContent=\"space-between\",n.style.alignItems=\"center\",n.style.margin=\"5px\";const r=document.createElement(\"input\");r.classList.add(\"magicfeedback-input-magicfeedback-priority-list\"),r.classList.add(\"magicfeedback-input\"),r.type=\"hidden\",r.id=`priority-list-${i}`,r.name=i,r.value=`${t+1}. ${e}`,n.appendChild(r);const s=document.createElement(\"label\");s.classList.add(\"magicfeedback-priority-list-item-label\"),s.textContent=`${t+1}. ${e}`,n.appendChild(s);const a=document.createElement(\"div\");a.style.display=\"flex\",a.style.alignItems=\"center\",a.style.justifyContent=\"space-between\";const o=document.createElement(\"img\");o.classList.add(\"magicfeedback-priority-list-arrow-up\"),o.src=\"https://magicfeedback-c6458-dev.web.app/assets/arrow.svg\",o.style.width=\"20px\",o.style.height=\"20px\",o.style.cursor=\"pointer\",o.style.margin=\"0 5px\",o.style.color=\"#000\",o.style.visibility=0===t?\"hidden\":\"visible\",o.addEventListener(\"click\",(()=>{var t,i,a,d;const p=n.previousElementSibling;if(p){const m=Number(null===(t=r.value)||void 0===t?void 0:t.split(\".\")[0])-1;r.value=`${m}. ${e}`,s.textContent=`${m}. ${e}`,o.style.visibility=1===m?\"hidden\":\"visible\",l.style.visibility=m===u.length?\"hidden\":\"visible\";const h=p.querySelector(\".magicfeedback-input-magicfeedback-priority-list\"),f=p.querySelector(\".magicfeedback-priority-list-item-label\"),v=p.querySelector(\".magicfeedback-priority-list-arrow-up\"),g=p.querySelector(\".magicfeedback-priority-list-arrow-down\");if(h&&f&&v&&g){const e=Number(null===(i=h.value)||void 0===i?void 0:i.split(\".\")[0])+1;h.value=`${e}.${null===(a=f.textContent)||void 0===a?void 0:a.split(\".\")[1]}`,f.textContent=`${e}.${null===(d=f.textContent)||void 0===d?void 0:d.split(\".\")[1]}`,v.style.visibility=1===e?\"hidden\":\"visible\",g.style.visibility=e===u.length?\"hidden\":\"visible\"}c.insertBefore(n,p)}}));const l=document.createElement(\"img\");l.classList.add(\"magicfeedback-priority-list-arrow-down\"),l.src=\"https://magicfeedback-c6458-dev.web.app/assets/arrow.svg\",l.style.width=\"20px\",l.style.height=\"20px\",l.style.cursor=\"pointer\",l.style.margin=\"0 5px\",l.style.color=\"#000\",l.style.transform=\"rotate(180deg)\",l.style.visibility=t===u.length-1?\"hidden\":\"visible\",l.addEventListener(\"click\",(()=>{var t,i,a;const d=n.nextElementSibling;if(d){const p=Number(null===(t=r.value)||void 0===t?void 0:t.split(\".\")[0])+1;r.value=`${p}. ${e}`,s.textContent=`${p}. ${e}`,o.style.visibility=1===p?\"hidden\":\"visible\",l.style.visibility=p===u.length?\"hidden\":\"visible\";const m=d.querySelector(\".magicfeedback-input-magicfeedback-priority-list\"),h=d.querySelector(\".magicfeedback-priority-list-item-label\"),f=d.querySelector(\".magicfeedback-priority-list-arrow-up\"),v=d.querySelector(\".magicfeedback-priority-list-arrow-down\");if(m&&h&&f&&v){const e=Number(m.value.split(\".\")[0])-1;m.value=`${e}.${null===(i=h.textContent)||void 0===i?void 0:i.split(\".\")[1]}`,h.textContent=`${e}.${null===(a=h.textContent)||void 0===a?void 0:a.split(\".\")[1]}`,f.style.visibility=1===e?\"hidden\":\"visible\",v.style.visibility=e===u.length?\"hidden\":\"visible\"}c.insertBefore(d,n)}})),a.appendChild(o),a.appendChild(l),n.appendChild(a),c.appendChild(n)})),d.appendChild(c),d}({value:e.value,ref:e.ref,randomPosition:t,limitPriority:(null===(n=e.assets)||void 0===n?void 0:n.limitPriority)||!1,maxPriority:(null===(r=e.assets)||void 0===r?void 0:r.maxPriority)||0,placeholder:(null===(s=e.assets)||void 0===s?void 0:s.placeholder)||\"\",language:i||\"en\"});return a.appendChild(o),{element:a,elementTypeClass:\"magicfeedback-priority-list\"}}},152:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderRatingEmoji=void 0;const n=i(559),r=\"https://survey-dev.magicfeedback.io/assets/emojis\";t.renderRatingEmoji=({question:e,url:t,send:i,urlParamValue:s})=>{var a;const{ref:o,assets:l}=e,d=document.createElement(\"div\"),c=\"magicfeedback-rating\",u=document.createElement(\"div\");u.classList.add(\"magicfeedback-rating-container\");const p=(null==l?void 0:l.max)?Number(null==l?void 0:l.max):5,m=(null==l?void 0:l.min)?Number(null==l?void 0:l.min):1,h=(0,n.createRatingPlaceholder)(m,p,null==l?void 0:l.minPlaceholder,null==l?void 0:l.maxPlaceholder,null!==(a=null==l?void 0:l.extraOption)&&void 0!==a&&a);for(let e=m;e<=p;e++){const n=document.createElement(\"div\");n.classList.add(\"magicfeedback-rating-option\");const a=document.createElement(\"label\");a.htmlFor=`rating-${o}-${e}`,a.classList.add(\"magicfeedback-rating-option-label-container\");const l=document.createElement(\"label\");l.htmlFor=`rating-${o}-${e}`,l.textContent=e.toString();const d=document.createElement(\"img\");if(d.alt=`face-${o}-${e}`,d.className=`rating-image${e}`,0===m&&10===p)d.src=`${t}/${e}.svg`,d.onerror=()=>d.src=`${r}/${e}.svg`;else if(1===m&&5===p)switch(e){case 1:d.src=`${t}/1.svg`,d.onerror=()=>d.src=`${r}/1.svg`;break;case 2:d.src=`${t}/2.svg`,d.onerror=()=>d.src=`${r}/2.svg`;break;case 3:d.src=`${t}/6.svg`,d.onerror=()=>d.src=`${r}/6.svg`;break;case 4:d.src=`${t}/9.svg`,d.onerror=()=>d.src=`${r}/9.svg`;break;case 5:d.src=`${t}/10.svg`,d.onerror=()=>d.src=`${r}/10.svg`}else{const i=Math.round(10/(p-m)*(e-m));d.src=`${t}/${i}.svg`,d.onerror=()=>d.src=`${r}/${i}.svg`}const h=document.createElement(\"input\");h.id=`rating-${o}-${e}`,h.type=\"radio\",h.name=o,h.value=e.toString(),h.classList.add(c),h.classList.add(\"magicfeedback-input\"),i&&h.addEventListener(\"change\",(()=>{i()})),s&&s===h.value&&(h.checked=!0),a.appendChild(h),a.appendChild(d),a.appendChild(l),n.appendChild(a),u.appendChild(n)}if((null==l?void 0:l.extraOption)&&(null==l?void 0:l.extraOptionText)){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-rating-option\");const t=document.createElement(\"label\");t.htmlFor=`rating-${o}-extra`,t.classList.add(\"magicfeedback-rating-option-label-container\");const n=document.createElement(\"label\");n.htmlFor=`rating-${o}-extra`,n.textContent=null==l?void 0:l.extraOptionText;const r=document.createElement(\"img\");r.src=\"https://magicfeedback-c6458-dev.web.app/assets/question.svg\",r.alt=`face-${o}-extra`,r.className=\"magicfeedback-rating-image-extra\";const s=document.createElement(\"input\");s.id=`rating-${o}-extra`,s.type=\"radio\",s.name=o,s.value=\"-\",s.classList.add(c),s.classList.add(\"magicfeedback-input\"),i&&s.addEventListener(\"change\",(()=>{i()})),t.appendChild(s),t.appendChild(r),t.appendChild(n),e.appendChild(t),u.appendChild(e)}return h.childElementCount>0&&(u.classList.add(\"magicfeedback-rating-container--with-placeholder\"),u.insertBefore(h,u.firstChild)),d.appendChild(u),{element:d,elementTypeClass:c}}},917:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderRatingNumber=void 0;const n=i(559);t.renderRatingNumber=({question:e,order:t,direction:i,isPhone:r,send:s,urlParamValue:a})=>{const o=\"magicfeedback-rating-number\";return{element:(0,n.createRatingNumberElement)(e.ref,e.assets,t,i,r,o,s,a),elementTypeClass:o}}},452:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderRatingStar=void 0;const n=i(559);t.renderRatingStar=({question:e,send:t,urlParamValue:i})=>{var r,s;const a=document.createElement(\"div\"),o=(0,n.createStarRating)(e.ref,null===(r=e.assets)||void 0===r?void 0:r.minPlaceholder,null===(s=e.assets)||void 0===s?void 0:s.maxPlaceholder,t,i);return a.appendChild(o),{element:a,elementTypeClass:\"magicfeedback-rating-star\"}}},85:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderSelect=void 0;const n=i(516);t.renderSelect=({question:e,format:t,language:i,urlParamValue:r,send:s})=>{const{title:a,value:o,defaultValue:l}=e,d=document.createElement(\"select\"),c=document.createElement(\"option\");return c.value=\"\",c.text=\"slim\"===t?(0,n.parseTitle)(a,i):l||\"Select an option\",c.disabled=!0,c.selected=!0,d.appendChild(c),o.forEach((e=>{const t=document.createElement(\"option\");t.value=e,t.text=e,d.appendChild(t)})),r&&o.includes(r)&&(d.value=r),s&&d.addEventListener(\"change\",(()=>{s()})),{element:d,elementTypeClass:\"magicfeedback-select\"}}},90:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderText=void 0;const n=i(784);t.renderText=({language:e,placeholderText:t,urlParamValue:i,send:r})=>{const s=document.createElement(\"input\");return s.type=\"text\",s.placeholder=t||n.placeholder.answer(e||\"en\"),i&&(s.value=i),s.addEventListener(\"keyup\",(e=>{e.preventDefault(),\"Enter\"===e.key&&r&&r()})),{element:s,elementTypeClass:\"magicfeedback-text\"}}},250:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderUploadFile=void 0,t.renderUploadFile=({question:e})=>{var t,i;const n=document.createElement(\"input\");return n.type=\"file\",n.required=e.require,n.multiple=(null===(t=e.assets)||void 0===t?void 0:t.multiple)||!1,n.maxLength=(null===(i=e.assets)||void 0===i?void 0:i.maxFiles)||1,{element:n,elementTypeClass:\"magicfeedback-upload-file\"}}},843:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderUploadImage=void 0,t.renderUploadImage=({question:e})=>{var t,i;const n=document.createElement(\"input\");return n.type=\"file\",n.accept=\"image/*\",n.required=e.require,n.multiple=(null===(t=e.assets)||void 0===t?void 0:t.multiple)||!1,n.maxLength=(null===(i=e.assets)||void 0===i?void 0:i.maxFiles)||1,{element:n,elementTypeClass:\"magicfeedback-upload-image\"}}},857:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.endpoints=void 0,t.endpoints={sdk:{app:(e,t)=>`sdk/app/${e}/${t}`,app_info:(e,t)=>`sdk/app/${e}/${t}/info`,session:e=>`sdk/app/session/${e}/info`,feedback:\"sdk/feedback\",followUpQuestion:\"sdk/followUpQuestion\"}}},784:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.placeholder=void 0,t.placeholder={answer:e=>{switch(e){case\"en\":default:return\"Write your answer here...\";case\"es\":return\"Escribe tu respuesta aquí...\";case\"da\":return\"Skriv dit svar her...\";case\"fi\":return\"Kirjoita vastauksesi tähän...\";case\"sv\":return\"Skriv ditt svar här...\";case\"no\":return\"Skriv svaret ditt her...\";case\"ar\":return\"اكتب إجابتك هنا...\";case\"bn\":return\"এখানে আপনার\"}},number:e=>{switch(e){case\"en\":default:return\"Write your number here...\";case\"es\":return\"Escribe tu número aquí...\";case\"da\":return\"Skriv dit nummer her...\";case\"fi\":return\"Kirjoita numerosi tähän...\";case\"sv\":return\"Skriv ditt nummer här...\";case\"no\":return\"Skriv nummeret ditt her...\";case\"ar\":return\"اكتب رقمك هنا...\";case\"bn\":return\"এখানে আপনার\"}},email:e=>{switch(e){case\"en\":default:return\"Write your email here...\";case\"es\":return\"Escribe tu correo electrónico aquí...\";case\"da\":return\"Skriv din e-mail her...\";case\"fi\":return\"Kirjoita sähköpostiosoitteesi tähän...\";case\"sv\":return\"Skriv din e-post här...\";case\"no\":return\"Skriv e-posten din her...\";case\"ar\":return\"اكتب بريدك الإلكتروني هنا...\";case\"bn\":return\"এখানে আপনার\"}},date:e=>{switch(e){case\"en\":default:return\"Write your date here...\";case\"es\":return\"Escribe tu fecha aquí...\";case\"da\":return\"Skriv din dato her...\";case\"fi\":return\"Kirjoita päivämääräsi tähän...\";case\"sv\":return\"Skriv ditt datum här...\";case\"no\":return\"Skriv datoen din her...\";case\"ar\":return\"اكتب تاريخك هنا...\";case\"bn\":return\"এখানে আপনার\"}},password:e=>{switch(e){case\"en\":default:return\"Write your password here...\";case\"es\":return\"Escribe tu contraseña aquí...\";case\"da\":return\"Skriv dit kodeord her...\";case\"fi\":return\"Kirjoita salasanasi tähän...\";case\"sv\":return\"Skriv ditt lösenord här...\";case\"no\":return\"Skriv passordet ditt her...\";case\"ar\":return\"اكتب كلمة المرور الخاصة بك هنا...\";case\"bn\":return\"এখানে আপনার\"}},pointsystemerror:e=>{switch(e){case\"en\":default:return\"The total points must be 100 %\";case\"es\":return\"El total de puntos debe ser 100 %\";case\"da\":return\"Samlet antal point skal være 100 %\";case\"fi\":return\"Kokonaispisteiden on oltava 100 %\";case\"sv\":return\"Totala poäng måste vara 100 %\";case\"no\":return\"Totalt antall poeng må være 100 %\";case\"ar\":return\"يجب أن تكون النقاط الإجمالية 100 %\";case\"bn\":return\"মোট পয়েন্ট 100 % হতে হবে\"}}}},213:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderStartMessage=t.renderSuccess=t.renderError=t.renderActions=t.renderQuestions=void 0;const n=i(42),r=i(516),s={small:\"1rem\",medium:\"1.2rem\",large:\"1.5rem\"};t.renderQuestions=function e(t,i=\"standard\",a=\"en\",o={customIcons:!1},l){if(!t)throw new Error(\"[MagicFeedback] No questions provided\");const d=[],{customIcons:c,id:u}=o;return t.forEach((p=>{var m,h;if((null===(h=null===(m=null==p?void 0:p.questionType)||void 0===m?void 0:m.conf)||void 0===h?void 0:h.length)>0){let t=document.createElement(\"div\");t.classList.add(\"magicfeedback-div\");const n=document.createElement(\"label\");n.setAttribute(\"for\",`magicfeedback-${p.id}`),n.textContent=(0,r.parseTitle)(p.title,a),n.classList.add(\"magicfeedback-label\"),t.appendChild(n),p.questionType.conf.forEach((e=>{e.ref=p.ref,p.assets[e.id]&&(e.assets={placeholder:p.assets[e.id]})})),e(p.questionType.conf,i,a,o,l).forEach((e=>{t.appendChild(e)})),d.push(t)}else{const e=function(e,t,i,a,o){var l,d,c;let u,p,{id:m,title:h,type:f,ref:v,require:g,defaultValue:y,assets:b}=e,E=document.createElement(\"div\");E.classList.add(\"magicfeedback-div\");const k=window.innerWidth<600,A=\"slim\"===t?(0,r.parseTitle)(h,i):null==b?void 0:b.placeholder,C=(0,r.getUrlParam)(v),T=(null==b?void 0:b.maxCharacters)||0,P=void 0!==(null==b?void 0:b.randomPosition)&&(null==b?void 0:b.randomPosition),w=(null==b?void 0:b.direction)||\"row\",x=(null==b?void 0:b.order)||\"ltr\",O=(0,n.getQuestionRenderer)(f);if(!O)return E;{const n=O({question:e,format:t,language:i,url:a,send:o,isPhone:k,urlParamValue:C,placeholderText:A,maxCharacters:T,randomPosition:P,direction:w,order:x});u=n.element,p=n.elementTypeClass}u.id=`magicfeedback-${m}`,u.setAttribute(\"name\",v),u.classList.add(p),(void 0!==y||null!==C)&&(u.value=C||y),[\"RADIO\",\"MULTIPLECHOICE\"].includes(f)||(u.classList.add(\"magicfeedback-input\"),u.required=g);const L=document.createElement(\"label\");L.setAttribute(\"for\",`magicfeedback-${m}`),L.textContent=(0,r.parseTitle)(h,i),L.classList.add(\"magicfeedback-label\"),function(e,t){if(\"INFO_PAGE\"!==t.type)return;const{assets:i}=t,n=function(e){if(e)return s[e]||e}(null==i?void 0:i.titleSize),r=(a=null==i?void 0:i.titleStyle,Array.isArray(a)?a:a?[a]:[]);var a;n&&e.style.setProperty(\"font-size\",n,\"important\"),(null==i?void 0:i.titleAlign)&&(e.style.setProperty(\"width\",\"100%\",\"important\"),e.style.setProperty(\"align-self\",\"stretch\",\"important\"),e.style.setProperty(\"text-align\",i.titleAlign,\"important\")),r.includes(\"italic\")&&e.style.setProperty(\"font-style\",\"italic\",\"important\"),r.includes(\"bold\")&&e.style.setProperty(\"font-weight\",\"bold\",\"important\"),r.includes(\"underline\")&&e.style.setProperty(\"text-decoration\",\"underline\",\"important\")}(L,e);const S=document.createElement(\"label\");if(S.textContent=(0,r.parseTitle)(null==b?void 0:b.subtitle,i),S.classList.add(\"magicfeedback-sublabel\"),(null===(l=null==b?void 0:b.subtitleStyle)||void 0===l?void 0:l.includes(\"italic\"))&&(S.style.fontStyle=\"italic\"),(null===(d=null==b?void 0:b.subtitleStyle)||void 0===d?void 0:d.includes(\"bold\"))&&(S.style.fontWeight=\"bold\"),(null===(c=null==b?void 0:b.subtitleStyle)||void 0===c?void 0:c.includes(\"underline\"))&&(S.style.textDecoration=\"underline\"),[\"CONSENT\"].includes(f))E.classList.add(\"magicfeedback-consent-container\"),E.appendChild(u),E.appendChild(L),(null==b?void 0:b.subtitle)&&E.appendChild(S);else{if(\"slim\"!==t&&(E.appendChild(L),(null==b?void 0:b.subtitle)&&E.appendChild(S),void 0!==(null==b?void 0:b.general)&&\"\"!==(null==b?void 0:b.general))){const e=document.createElement(\"img\");e.src=null==b?void 0:b.general,e.classList.add(\"magicfeedback-image\"),e.style.maxWidth=\"auto\",e.style.height=\"400px\",e.style.margin=\"10px 0\",E.appendChild(e)}if(\"LONGTEXT\"===f&&T>0){const e=document.createElement(\"div\");if(e.classList.add(\"magicfeedback-counter\"),e.textContent=`${u.value.length}/${T}`,e.style.textAlign=\"right\",e.style.fontSize=\"15px\",e.style.marginTop=\"5px\",u.addEventListener(\"input\",(()=>{e.textContent=`${u.value.length}/${T}`})),E.appendChild(u),E.appendChild(e),(null==b?void 0:b.extraOption)&&(null==b?void 0:b.extraOptionText)){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-skip-container\"),e.classList.add(\"magicfeedback-checkbox-container\"),e.style.display=\"flex\",e.style.justifyContent=\"flex-start\";const t=document.createElement(\"input\");t.classList.add(\"magicfeedback-skip\"),t.type=\"checkbox\",t.id=`skip-${v}`,t.name=v,t.value=\"-\",t.style.cursor=\"pointer\";const i=document.createElement(\"label\");i.htmlFor=`skip-${v}`,i.textContent=null==b?void 0:b.extraOptionText,i.style.fontSize=\"15px\",i.style.cursor=\"pointer\",i.style.margin=\"0 5px\",t.addEventListener(\"click\",(()=>{u.value=\"-\",o&&o()})),e.appendChild(t),e.appendChild(i),E.appendChild(e)}}else E.appendChild(u)}return E}(p,i,a,\"https://survey-dev.magicfeedback.io/assets/emojis\"+(c?`/${u}`:\"\"),1===t.length?l:void 0);d.push(e)}})),d},t.renderActions=function(e=\"\",t,i=\"Submit\",n=\"Back\",r=\"Next\"){const s=document.createElement(\"div\");s.classList.add(\"magicfeedback-action-container\");const a=document.createElement(\"button\");a.id=\"magicfeedback-submit\",a.type=\"submit\",a.classList.add(\"magicfeedback-submit\"),a.textContent=\"MAGICSURVEY\"===e?r||\"Next\":i||\"Submit\";const o=document.createElement(\"button\");return o.id=\"magicfeedback-back\",o.type=\"button\",o.classList.add(\"magicfeedback-back\"),o.textContent=n||\"Back\",o.addEventListener(\"click\",t),o.addEventListener(\"click\",(()=>{a.removeAttribute(\"disabled\")})),\"MAGICSURVEY\"===e&&s.appendChild(o),s.appendChild(a),s},t.renderError=function(e){const t=document.createElement(\"div\");return t.classList.add(\"magicfeedback-error\"),t.textContent=e,t},t.renderSuccess=function(e){const t=document.createElement(\"div\");return t.classList.add(\"magicfeedback-success\"),t.textContent=e,t},t.renderStartMessage=function(e,t=!1,i=\"Go!\",n=()=>{}){const r=document.createElement(\"div\");r.classList.add(\"magicfeedback-start-message-container\");const s=document.createElement(\"div\");if(s.classList.add(\"magicfeedback-start-message\"),s.innerHTML=e,r.appendChild(s),t){const e=document.createElement(\"button\");e.id=\"magicfeedback-start-message-button\",e.classList.add(\"magicfeedback-start-message-button\"),e.textContent=i,e.addEventListener(\"click\",(()=>n())),r.appendChild(e)}return r}},313:function(e,t,i){\"use strict\";var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function a(e){try{l(n.next(e))}catch(e){s(e)}}function o(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,o)}l((n=n.apply(e,t||[])).next())}))},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.getFollowUpQuestion=t.sendFeedback=t.getQuestions=t.getSessionForm=t.getForm=t.validateEmail=void 0;const s=r(i(945)),a=r(i(330)),o=i(857),l={Accept:\"application/json\",\"Magicfeedback-Sdk-Version\":a.default.version,\"x-magicfeedback-parameters\":window.location.search||\"\"};t.validateEmail=function(e){return/\\S+@\\S+\\.\\S+/.test(e)},t.getForm=function(e,t,i,r){return n(this,void 0,void 0,(function*(){try{const n=yield(0,s.default)(e+o.endpoints.sdk.app_info(t,i),{method:\"GET\",headers:l});return yield n.json()}catch(e){r.err(e)}}))},t.getSessionForm=function(e,t,i){return n(this,void 0,void 0,(function*(){try{const i=yield(0,s.default)(e+o.endpoints.sdk.session(t),{method:\"GET\",headers:l});return yield i.json()}catch(e){i.err(e)}}))},t.getQuestions=function(e,t,i,r){return n(this,void 0,void 0,(function*(){try{const n=yield(0,s.default)(e+o.endpoints.sdk.app(t,i),{method:\"GET\",headers:l});if(n.ok){const e=yield n.json();return r.log(`Received questions for app ${t}`,e),e}throw r.err(`Failed to get questions for app ${t}:`,n.status,n.statusText),new Error(\"[MagicFeedback] Bad response from server\")}catch(e){return r.err(e),[]}}))},t.sendFeedback=function(e,t,i){return n(this,void 0,void 0,(function*(){try{const n=yield(0,s.default)(e+o.endpoints.sdk.feedback,{method:\"POST\",headers:Object.assign({\"Content-Type\":\"application/json\"},l),body:JSON.stringify(t)});if(n.ok)return i.log(`Form ${t.integration} submitted successfully!`),(yield n.json()).sessionId;throw i.err(`Failed to submit form ${t.integration}:`,n.status,n.statusText),new Error(n.statusText)}catch(e){return i.err(e),\"\"}}))},t.getFollowUpQuestion=function(e,t,i){return n(this,void 0,void 0,(function*(){try{const n=yield(0,s.default)(e+o.endpoints.sdk.followUpQuestion,{method:\"POST\",headers:Object.assign({\"Content-Type\":\"application/json\"},l),body:JSON.stringify(t)});if(n.ok)return i.log(`Received follow up question for form ${t.integration}`),(yield n.json())||\"\";throw i.err(`Failed to get follow up question for form ${t.integration}:`,n.status,n.statusText),new Error(n.statusText)}catch(e){return i.err(e),\"\"}}))}},256:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Log=void 0,t.Log=class{constructor(e){this.config=e}log(...e){this.config.get(\"debug\")&&console.log(\"[MagicFeedback]:\",...e)}err(...e){console.error(\"[MagicFeedback]:\",...e)}}},330:e=>{\"use strict\";e.exports=JSON.parse('{\"name\":\"@magicfeedback/native\",\"version\":\"2.2.1\",\"main\":\"./dist/magicfeedback-sdk.node.js\",\"browser\":\"./dist/magicfeedback-sdk.browser.js\",\"types\":\"./dist/types/src/index.d.ts\",\"repository\":{\"type\":\"git\",\"url\":\"git+ssh://git@github.com/MagicFeedback/magicfeedback-sdk.git\"},\"author\":\"farias@magicfeedback.io\",\"license\":\"MIT\",\"private\":false,\"scripts\":{\"dev\":\"vite\",\"build\":\"webpack\",\"build:watch\":\"webpack --watch --mode development\",\"release\":\"npm publish --access public\",\"release:beta\":\"npm publish --access public --tag beta\",\"release:alpha\":\"npm publish --access public --tag alpha\",\"test\":\"jest\",\"test:watch\":\"jest --watchAll\",\"coverage\":\"vitest run --coverage\",\"publish:sdk\":\"bash publish.sh\",\"publish:sdk:dry-run\":\"NPM_DRY_RUN=1 bash publish.sh\"},\"files\":[\"dist\"],\"devDependencies\":{\"@babel/preset-typescript\":\"^7.22.5\",\"@types/node\":\"^17.0.21\",\"@types/webpack\":\"^5.28.0\",\"@types/webpack-node-externals\":\"^2.5.3\",\"c8\":\"^7.11.0\",\"copy-webpack-plugin\":\"^11.0.0\",\"jest\":\"^29.5.0\",\"jest-environment-jsdom\":\"^29.5.0\",\"jest-fetch-mock\":\"^3.0.3\",\"nock\":\"^13.2.4\",\"ts-jest\":\"^29.1.0\",\"ts-loader\":\"^9.2.7\",\"ts-node\":\"^10.7.0\",\"typescript\":\"^4.6.2\",\"vite\":\"^2.8.0\",\"vite-plugin-dts\":\"^0.9.9\",\"vitest\":\"^0.5.9\",\"webpack\":\"^5.70.0\",\"webpack-cli\":\"^4.9.2\",\"webpack-node-externals\":\"^3.0.0\"},\"dependencies\":{\"cross-fetch\":\"^3.1.5\",\"is-bundling-for-browser-or-node\":\"^1.1.1\"},\"description\":\"MagicFeedbackAI JavaScript Library for [MagicFeedback.io](https://magicfeedback.io/)\",\"bugs\":{\"url\":\"https://github.com/MagicFeedback/magicfeedback-sdk/issues\"},\"homepage\":\"https://github.com/MagicFeedback/magicfeedback-sdk#readme\",\"directories\":{\"example\":\"examples\",\"test\":\"test\"},\"style\":\"./dist/styles/magicfeedback-default.css\"}')}},t={},function i(n){var r=t[n];if(void 0!==r)return r.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,i),s.exports}(156).default;var e,t}));",".magicfeedback-container {\n width: 100%;\n}\n\n\n.magicfeedback-success-message,\n.magicfeedback-info-message,\n.magicfeedback-start-message,\n.magicfeedback-container{\n animation-duration: 0.5s;\n animation-name: animate-fade;\n animation-delay: 0.25s;\n animation-fill-mode: backwards;\n\n font-style: normal;\n text-align: justify;\n font-weight: 400;\n font-size: 1.2rem;\n color: #475569;\n line-height: 1.5;\n}\n\n@keyframes animate-fade {\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n}\n\n.magicfeedback-form {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n}\n.magicfeedback-questions {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n width: 100%;\n}\n\n.magicfeedback-div {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n margin-bottom: 10px;\n width: 100%;\n}\n\n.magicfeedback-label {\n margin-bottom: 25px;\n margin-top: 20px;\n font-weight: 400;\n font-family: inherit;\n font-size: 1.2rem;\n color: #212529;\n text-align: start;\n word-wrap: break-word;\n white-space: normal;\n\n}\n\n.magicfeedback-checkbox {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n width: 100%;\n}\n\n.magicfeedback-checkbox-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin-bottom: 5px;\n margin-top: 5px;\n}\n\n.magicfeedback-radio {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n flex-wrap: wrap;\n width: 100%;\n margin-right: 5px;\n padding: 5px;\n}\n\n.magicfeedback-checkbox-container,\n.magicfeedback-radio-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 5px;\n padding: 5px 0;\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 0 3px #ccc;\n}\n\n.deepdots-popup input::-webkit-outer-spin-button,\n.deepdots-popup input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n -moz-appearance: textfield;\n}\n\n.magicfeedback-checkbox input[type=\"checkbox\"] {\n margin-right: 5px;\n margin-left: 5px;\n width: 20px;\n height: 20px;\n cursor: pointer;\n}\n\n\n.magicfeedback-checkbox label,\n.magicfeedback-radio-container label {\n margin-left: 5px;\n font-weight: 400;\n font-family: inherit;\n font-size: 16px;\n color: #212529;\n text-align: start;\n width: 100%;\n}\n\n.deepdots-popup p {\n margin-bottom: 0px;\n font-size: 12px;\n}\n\n.deepdots-popup h2 {\n line-height: 1.66;\n margin: 0;\n padding: 0;\n font-weight: 900;\n color: #222;\n font-family: var(--deepdots-font, 'Montserrat');\n font-size: 18px;\n text-transform: uppercase;\n text-align: center;\n margin-bottom: 40px;\n}\n\n/* Los controles de formulario no heredan font-family por defecto: cuando hay\n fuente custom (clase deepdots-has-font), los forzamos a usar la del contenedor. */\n.deepdots-popup.deepdots-has-font button,\n.deepdots-popup.deepdots-has-font input,\n.deepdots-popup.deepdots-has-font textarea,\n.deepdots-popup.deepdots-has-font select {\n font-family: var(--deepdots-font, inherit);\n}\n\n.deepdots-popup h6 {\n margin-bottom: 1rem;\n}\n\n.deepdots-popup input[type=\"date\"],\n.deepdots-popup input[type=\"text\"],\n.deepdots-popup input[type=\"number\"],\n.deepdots-popup input[type=\"email\"],\n.deepdots-popup input[type=\"password\"],\n.deepdots-popup textarea,\n.deepdots-popup select {\n box-sizing: border-box;\n padding: 10px;\n margin: 10px 0;\n width: 100%;\n border: 2px solid #ccc; /* Default border color - you can customize this */\n border-radius: 5px;\n font-size: 18px;\n outline: none;\n transition: border-color 0.3s ease;\n min-height: 50px;\n font-family: inherit;\n -webkit-appearance: none;\n}\n\n.deepdots-popup select {\n background-image: linear-gradient(45deg, transparent 50%, gray 50%),\n linear-gradient(135deg, gray 50%, transparent 50%),\n linear-gradient(to right, #ccc, #ccc);\n background-position: calc(100% - 20px) calc(1em + 2px),\n calc(100% - 15px) calc(1em + 2px),\n calc(100% - 2.5em) 0.5em;\n background-size: 5px 5px,\n 5px 5px,\n 1px 1.5em;\n background-repeat: no-repeat;\n}\n\n.magicfeedback-boolean-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 10px 0;\n width: 100%;\n}\n\n.magicfeedback-boolean-container label {\n margin-left: 10px;\n font-weight: 400;\n font-size: 16px;\n width: 100%;\n padding-top: 5px;\n}\n\n.magicfeedback-boolean-option {\n margin-right: 10px;\n margin-left: 10px;\n width: 100%;\n height: 38px;\n border-radius: 8px;\n font-size: 16px;\n cursor: pointer;\n border: 1px solid #ced4da !important;\n}\n\n.magicfeedback-boolean-option label {\n font-weight: 400;\n font-size: 16px;\n color: #475569;\n cursor: pointer;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: inherit;\n}\n\n.magicfeedback-boolean-option input[type=radio] + label:hover {\n color: #007bff;\n}\n\n.magicfeedback-boolean-option input[type=radio]:checked + label {\n color: #007bff;\n background-color: #cadff8;\n}\n\n.deepdots-popup input[type=\"radio\"] {\n padding: 20px;\n margin: 10px 0 10px 15px;\n width: 40px;\n background-color: #fff;\n box-shadow: none;\n}\n\n/* Style for focused input/select */\n.deepdots-popup input:focus, .deepdots-popup select:focus {\n border-color: #4CAF50; /* Highlight color when focused - you can customize this */\n}\n\n/* Style for invalid input (example: validation error) */\n.deepdots-popup input.error, .deepdots-popup select.error {\n border-color: #ff3333; /* Red color for error state - you can customize this */\n}\n\n.magicfeedback-action-container {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n width: 100%;\n}\n\n.magicfeedback-action-container .magicfeedback-submit {\n cursor: pointer;\n padding: 10px;\n margin: 10px 0;\n width: 100px;\n border-radius: 8px;\n font-size: 16px;\n outline: none;\n transition: border-color 0.3s ease;\n background-color: #1E293B;\n color: white;\n}\n\n.magicfeedback-action-container .magicfeedback-back {\n cursor: pointer;\n padding: 10px;\n margin: 10px 0;\n width: 100px;\n border: 0;\n border-radius: 8px;\n font-size: 16px;\n outline: none;\n transition: border-color 0.3s ease;\n background-color: transparent;\n color: #212529;\n}\n\n\n\n/* Rating styles */\n.magicfeedback-rating {\n width: 100%;\n}\n\n.magicfeedback-rating-container {\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n flex-wrap: wrap;\n align-items: center;\n\n margin: 15px 5px;\n padding: 0;\n\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n.magicfeedback-rating-placeholder-value,\n.magicfeedback-rating-placeholder{\n text-align: center;\n align-content: center;\n justify-content: center;\n text-wrap: wrap;\n}\n\n.magicfeedback-rating-option {\n margin: 0 0.5rem;\n padding: 0;\n}\n\n@media (max-width: 1024px) {\n .magicfeedback-rating-option {\n margin: 10px 0;\n padding: 0;\n width: 20%;\n display: flex;\n justify-content: center;\n }\n\n .magicfeedback-rating-placeholder-value {\n font-size: 0.75rem;\n margin-bottom: 1px;\n }\n .magicfeedback-rating-placeholder{\n justify-content: center;\n }\n\n .magicfeedback-rating-container {\n flex-wrap: wrap;\n justify-content: flex-start;\n }\n}\n\n\n.magicfeedback-rating-option-label-container {\n display: flex;\n flex-direction: column;\n}\n\n\n.magicfeedback-rating-option-label-container label {\n display: inline-block;\n text-align: center;\n margin-bottom: 0;\n font-weight: 600;\n font-size: 18px;\n color: #475569;\n}\n\n.magicfeedback-rating-option-label-container input[type=radio] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n/* IMAGE STYLES */\n.magicfeedback-rating-option-label-container input[type=radio] + img {\n cursor: pointer;\n height: 48px;\n width: 48px;\n}\n\n/* LABEL STYLES */\n.magicfeedback-rating-option-label-container input[type=radio] + label {\n cursor: pointer;\n}\n\n/* CHECKED STYLES */\n.magicfeedback-rating-option-label-container input[type=radio]:checked + img {\n box-shadow: #007bff 0px 1px 4px, #007BFFA0 0px 0px 0px 2px;\n border-radius: 50%;\n}\n\n.magicfeedback-rating-number {\n width: 100%;\n}\n.magicfeedback-rating-container,\n.magicfeedback-rating-number-container {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n\n margin: 15px 0;\n padding: 0;\n\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n/* Cuando hay placeholders (Very bad / Very good), el placeholder ocupa\n el 100% de la primera línea y los boxes bajan a la siguiente */\n.magicfeedback-rating-number-container--with-placeholder {\n flex-wrap: wrap;\n align-items: flex-start;\n}\n\n.magicfeedback-rating-number-container--with-placeholder .magicfeedback-rating-placeholder {\n width: 100%;\n margin-bottom: 8px;\n}\n\n.magicfeedback-rating-number-container--with-placeholder .magicfeedback-rating-number-option {\n width: auto;\n flex: 1;\n}\n\n.magicfeedback-rating-number-option {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 5px;\n padding: 0;\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n width: 100%;\n}\n\n.magicfeedback-rating-number-option-row{\n max-width: 100% !important;\n}\n\n.magicfeedback-rating-number-top-placeholder,\n.magicfeedback-rating-number-bottom-placeholder{\n text-align: center !important;\n align-content: center;\n justify-content: center;\n text-wrap: wrap;\n\n font-size: 15px;\n color: #475569;\n\n width: 100%;\n margin: auto;\n}\n\n@media (min-width: 650px) {\n .magicfeedback-rating-number-option-row +.magicfeedback-rating-number-container-ltr:first-child,\n .magicfeedback-rating-number-option-row + +.magicfeedback-rating-number-container-rtl:last-child {\n margin-left: 0;\n width: calc(100% - 10px);\n }\n\n .magicfeedback-rating-number-option-row +.magicfeedback-rating-number-container-rtl:first-child,\n .magicfeedback-rating-number-option-row + +.magicfeedback-rating-number-container-ltr:last-child {\n margin-right: 0;\n width: calc(100% - 10px);\n }\n}\n\n\n.magicfeedback-rating-number-option-label-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n.magicfeedback-rating-number-option-label-container label {\n display: flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 0 10px;\n font-weight: 600;\n font-size: 14px;\n color: #475569;\n cursor: pointer;\n width: 100%;\n height: 100%;\n min-height: 50px;\n text-align: center;\n padding: 0;\n border-radius: 4px;\n border: 1px solid #ced4da;\n background-color: rgba(246, 246, 246, 0.3);\n transition: background-color 0.15s ease-in-out;\n}\n\n.magicfeedback-rating-number-option-label-container input[type=radio] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.magicfeedback-rating-number-option-label-container input[type=radio] + label {\n cursor: pointer;\n}\n\n.magicfeedback-rating-number-option-label-container input[type=radio] + label:hover,\n.magicfeedback-rating-number-option-label-container input[type=radio]:checked + label {\n color: #007bff;\n border: 1px solid #007bff;\n background-color: rgba(86, 168, 253, 0.29);\n}\n\n.magicfeedback-rating-number-container-column{\n align-items: flex-start !important;\n}\n\n@media (max-width: 650px) {\n .magicfeedback-rating-number-container-ltr {\n justify-content: center;\n flex-wrap: wrap;\n }\n\n .magicfeedback-rating-number-container-rtl {\n justify-content: center;\n flex-wrap: wrap-reverse;\n }\n\n .magicfeedback-rating-number-option {\n max-width: 100%;\n height: 55px;\n margin: 5px 0;\n }\n}\n\n.magicfeedback-rating-star {\n width: 100%;\n}\n\n.magicfeedback-rating-star-container {\n display: flex !important;\n flex-direction: row !important;\n justify-content: center !important;\n align-items: center !important;\n flex-wrap: wrap;\n margin: 15px 5px;\n padding: 0;\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n.magicfeedback-rating-star-option:not(:checked) > .rating__star {\n float: right;\n width: 1em;\n overflow: hidden;\n white-space: nowrap;\n cursor: pointer;\n font-size: 30px;\n color: #ccc;\n margin: 0 10px;\n}\n\n.magicfeedback-rating-star-option:not(:checked) > .rating__star:hover,\n.magicfeedback-rating-star-option:not(:checked) > .rating__star:hover ~ span {\n color: #deb217 !important;\n}\n\n.magicfeedback-rating-star-selected {\n color: #ffc700 !important;\n}\n\n\n/* Style for multiple choice image */\n.magicfeedback-image-option-label-container:hover {\n cursor: pointer;\n border: 0 !important;\n}\n\n.magicfeedback-image-option-label-container input[type=radio]:checked + img,\n.magicfeedback-image-option-label-container input[type=checkbox]:checked + img {\n border: 1px solid #007bff !important;\n box-shadow: 0 0 3px #007bff !important;\n}\n\n.magicfeedback-image-option-label-container input[type=radio] + img,\n.magicfeedback-image-option-label-container input[type=checkbox] + img {\n border: 1px solid transparent !important;\n}\n\n.magicfeedback-image-option-label-container{\n margin: 10px !important;\n height: calc(100% - 20px) !important;\n width: calc(100% - 20px) !important;\n}\n\n.magicfeedback-multiple-choice-image-option {\n display: flex;\n height: auto !important;\n box-shadow: 0 0 3px #ccc;\n}\n\n.magicfeedback-multiple-choice-image-label {\n font-size: 1rem;\n}\n\n.magicfeedback-consent-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 10px 0;\n width: 100%;\n}\n\n.magicfeedback-consent-container label {\n margin-left: 10px;\n}\n\n.magicfeedback-start-message-container {\n /* ... add your start message container styles here ... */\n}\n\n.magicfeedback-success-message,\n.magicfeedback-info-message,\n.magicfeedback-start-message {\n margin: 35px 5px;\n}\n\n.magicfeedback-success-message p,\n.magicfeedback-info-message p,\n.magicfeedback-start-message p {\n font-style: normal;\n text-align: start;\n font-weight: 400;\n font-size: 16px;\n color: #475569;\n line-height: 1.5;\n}\n\n.magicfeedback-success-message img,\n.magicfeedback-info-message img,\n.magicfeedback-start-message img {\n width: 400px;\n max-width: 80%;\n height: auto;\n margin: 10px auto;\n}\n\n.magicfeedback-counter,\n.magicfeedback-point-system-total {\n margin: 10px 0 0 0 !important;\n display: flex !important;\n justify-content: right !important;\n align-items: center !important;\n width: 100%;\n}\n\n.magicfeedback-skip-container {\n background-color: transparent !important;\n border: 0 !important;\n color: #999999FF !important;\n padding: 0 !important;\n margin: 0 !important;\n cursor: pointer !important;\n font-size: 0.5em !important;\n font-weight: 400 !important;\n box-shadow: 0 0 0 !important;\n\n &:hover {\n color: #0066ff;\n }\n}\n\n.magicfeedback-skip-container input[type=checkbox] {\n border-color: #999999FF !important;\n border: 0 !important;\n cursor: pointer !important;\n\n}\n\n.magicfeedback-multi-question-matrix,\n.magicfeedback-point-system,\n.magicfeedback-priority-list {\n width: 100% !important;\n}\n\n.magicfeedback-multi-question-matrix-container,\n.magicfeedback-point-system-container,\n.magicfeedback-priority-list-container {\n width: 100% !important;\n overflow-x: auto;\n}\n\n.magicfeedback-point-system-list,\n.magicfeedback-priority-list-list,\n.magicfeedback-multi-question-matrix-table {\n width: 100% !important;\n padding: 0 !important;\n overflow-x: auto;\n}\n\n.magicfeedback-multi-question-matrix {\n position: relative !important;\n}\n\n.magicfeedback-multi-question-matrix-container {\n overflow: auto !important;\n padding-bottom: 10px;\n}\n\n.magicfeedback-multi-question-matrix-label{\n text-align: left !important;\n}\n.magicfeedback-priority-list-item {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0 10px 10px;\n\n border: 1px solid #ced4da;\n border-radius: 5px;\n margin: 10px 0 !important;\n}\n\n.magicfeedback-point-system-item {\n height: 45px;\n margin: 5px 0 !important;\n}\n\n.magicfeedback-point-system-item label,\n.magicfeedback-priority-list-item-label {\n font-family: inherit;\n font-size: 18px !important;\n color: #212529;\n text-align: start;\n word-wrap: break-word;\n white-space: normal;\n padding: 0 10px 0 0;\n}\n\n.magicfeedback-point-system-input-container {\n padding: 0 10px 0 0;\n border-radius: 5px;\n font-size: 14px;\n border: 1px solid #ced4da;\n height: 42px;\n margin: auto 0;\n}\n\n.magicfeedback-multi-question-matrix-table thead {\n margin-bottom: 20px;\n}\n\n.magicfeedback-multi-question-matrix-table th{\n text-align: center;\n font-weight: 400 !important;\n font-size: 1rem !important;\n padding: 0 10px !important;\n}\n\n.magicfeedback-multi-question-matrix-table th,\n.magicfeedback-multi-question-matrix-table td label,\n.magicfeedback-priority-list-arrow-up,\n.magicfeedback-priority-list-arrow-down {\n font-style: normal !important;\n font-weight: 400 !important;\n font-size: 1rem !important;\n color: #475569 !important;\n cursor: pointer !important;\n margin: 0 !important;\n line-height: inherit;\n}\n\n.magicfeedback-multi-question-matrix-table tr {\n align-items: center;\n margin: 5px 0;\n}\n\n.magicfeedback-multi-question-matrix-row-tr{\n border-radius: 5px;\n margin: 10px 0 !important;\n}\n\n.magicfeedback-multi-question-matrix-row-tr:nth-child(odd) {\n background-color: #f1f6f6; /* Light gray background for odd rows */\n}\n\n.magicfeedback-multi-question-matrix-row-tr:nth-child(even) {\n background-color: #ffffff; /* White background for even rows */\n}\n\n.magicfeedback-multi-question-matrix-row-label {\n text-align: left !important;\n}\n\n.magicfeedback-point-system-item span {\n color: #475569 !important;\n}\n\n.magicfeedback-point-system-item input {\n padding: 0;\n margin: 0 !important;\n width: auto !important;\n min-width: 100px !important;\n height: auto !important;\n min-height: 42px;\n cursor: pointer;\n font-size: 14px;\n text-align: center !important;\n}\n\n.magicfeedback-multi-question-matrix-table input {\n margin: auto !important;\n padding: 20px !important;\n width: 100% !important;\n height: 15px;\n border: 1px solid #ced4da;\n cursor: pointer;\n}\n\n.magicfeedback-image{\n max-height: 400px !important;\n height: auto !important;\n max-width: 100% !important;\n margin: 10px auto !important;\n}\n\n.magicfeedback-error{\n margin-top: 5px;\n}","import {DeepdotsEventType, PopupActions, PopupStyle, FormData} from '../types';\nimport { buildSurveyIdentity } from '../tracking/tracking-manager';\nimport { buildFontFaceCss, buildFontFamilyValue } from './font';\nimport { sdkLog, sdkWarn, sdkError } from '../util/logger';\nimport magicfeedback from \"@magicfeedback/native\";\nimport magicfeedbackCss from '../assets/style.css';\n\n// Inserta la hoja de estilos de MagicFeedback directamente en el popup para garantizar estilos incluso si el bundler no la inyecta globalmente.\nfunction ensureMagicFeedbackStyles(_popup: HTMLElement) {\n const STYLE_ID = 'magicfeedback-sdk-styles';\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = magicfeedbackCss;\n document.head.appendChild(style);\n}\n\n// Añade estilos de spinner si no existen\nfunction ensureSpinnerStyles(_popup: HTMLElement) {\n if (document.getElementById('deepdots-spinner-styles')) return;\n const style = document.createElement('style');\n style.id = 'deepdots-spinner-styles';\n style.textContent = `\n @keyframes ddspin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n .mf-spinner { display:flex; justify-content:center; align-items:center; padding:8px 0; }\n .mf-spinner-circle { width:28px; height:28px; border:3px solid #e0e6ed; border-top-color:#1E293B; border-radius:50%; animation: ddspin 0.9s linear infinite; }\n `;\n document.head.appendChild(style);\n}\n\nfunction ensureResponsiveStyles(_popup: HTMLElement) {\n if (document.getElementById('deepdots-responsive-styles')) return;\n const style = document.createElement('style');\n style.id = 'deepdots-responsive-styles';\n style.textContent = `\n /* Responsive adjustments */\n @media (max-width: 640px) {\n .deepdots-popup {\n width: calc(100% - 24px) !important;\n max-width: calc(100% - 24px) !important;\n height: auto !important;\n max-height: 90vh !important;\n border-radius: 12px !important;\n padding: calc(16px + env(safe-area-inset-top)) 16px calc(16px + env(safe-area-inset-bottom)) 16px !important;\n box-sizing: border-box;\n }\n .deepdots-popup .mf-spinner-circle { width: 32px; height: 32px; border-width: 4px; }\n .deepdots-popup button { font-size: 16px !important; }\n .deepdots-popup-header button { width:48px; height:48px; }\n .deepdots-popup-header button svg { width:26px; height:26px; }\n .deepdots-popup-footer { flex-direction: column-reverse !important; gap: 12px !important; }\n .deepdots-popup-footer button { width: 100%; }\n }\n @media (max-width: 400px) {\n .deepdots-popup { padding: calc(12px + env(safe-area-inset-top)) 12px calc(12px + env(safe-area-inset-bottom)) 12px !important; }\n .deepdots-popup-header button { width:48px; height:48px; }\n .deepdots-popup-header button svg { width:26px; height:26px; }\n }\n @media (orientation: landscape) and (max-height: 480px) {\n .deepdots-popup {\n height: 100vh !important;\n max-height: 100vh !important;\n overflow-y: auto !important;\n }\n }\n `;\n document.head.appendChild(style);\n}\n\n// Inyecta (una sola vez) el @font-face de la fuente personalizada.\nfunction ensureFontFace(family: string, url: string) {\n const css = buildFontFaceCss(family, url);\n if (!css) return;\n const STYLE_ID = 'deepdots-font-face';\n let el = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!el) {\n el = document.createElement('style');\n el.id = STYLE_ID;\n document.head.appendChild(el);\n }\n if (el.textContent !== css) el.textContent = css;\n}\n\n/**\n * Renderiza el popup dentro del contenedor dado usando MagicFeedback para la encuesta.\n */\nexport async function renderPopup(\n container: HTMLElement,\n surveyId: string,\n productId: string,\n actions: PopupActions | undefined,\n emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void,\n onClose: () => void,\n env: string = 'production',\n userId?: string,\n style?: PopupStyle,\n sessionId?: string,\n miniService?: string,\n analyticsFeedbackSessionId?: string,\n): Promise<void> {\n let surveyCompletedEmitted = false;\n let stylesInjected = false;\n\n const isDark = style?.theme === 'dark';\n const theme = {\n popupBg: isDark ? '#1e1e1e' : '#fff',\n textPrimary: isDark ? '#f0f0f0' : '#111',\n closeBtnHoverBg: isDark ? 'rgba(255,255,255,0.10)' : 'rgba(0,0,0,0.06)',\n closeBtnHoverColor: isDark ? '#fff' : '#000000',\n };\n\n const positionMap: Record<string, { justifyContent: string; alignItems: string; padding?: string; background: string }> = {\n 'center': { justifyContent: 'center', alignItems: 'center', background: 'rgba(0,0,0,0.5)' },\n 'bottom': { justifyContent: 'center', alignItems: 'flex-end', padding: '16px', background: 'transparent' },\n 'bottom-right': { justifyContent: 'flex-end', alignItems: 'flex-end', padding: '16px', background: 'transparent' },\n 'bottom-left': { justifyContent: 'flex-start', alignItems: 'flex-end', padding: '16px', background: 'transparent' },\n 'top': { justifyContent: 'center', alignItems: 'flex-start', padding: '16px', background: 'transparent' },\n 'top-right': { justifyContent: 'flex-end', alignItems: 'flex-start', padding: '16px', background: 'transparent' },\n 'top-left': { justifyContent: 'flex-start', alignItems: 'flex-start', padding: '16px', background: 'transparent' },\n };\n const pos = positionMap[style?.position ?? 'center'] ?? positionMap['center'];\n\n // Crear popup base\n const popup = document.createElement('div');\n popup.className = 'deepdots-popup';\n popup.style.cssText = `\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n background: ${theme.popupBg};\n border-radius: 8px;\n padding: 24px;\n box-shadow: 0 4px 6px rgba(0,0,0,0.1);\n max-width: 600px;\n width: 90%;\n min-height: 200px;\n `;\n\n const font = style?.font;\n if (font?.family) {\n const familyValue = buildFontFamilyValue(font.family);\n // El survey vive dentro del contenedor y hereda esta fuente.\n popup.style.fontFamily = familyValue;\n // La variable habilita que el <h2> (Montserrat por defecto) también la use.\n popup.style.setProperty('--deepdots-font', familyValue);\n // Los controles de formulario (button/input/textarea/select) NO heredan\n // font-family por defecto; esta clase activa la regla que los fuerza a heredar.\n popup.classList.add('deepdots-has-font');\n if (font.url) ensureFontFace(font.family, font.url);\n }\n\n // Sección header (solo botón cerrar)\n const header = document.createElement('div');\n header.className = 'deepdots-popup-header';\n header.style.cssText = 'display:flex; justify-content:flex-end; align-items:center; width:100%;';\n\n // Botón de cierre (X)\n const closeBtn = document.createElement('button');\n closeBtn.type = 'button';\n closeBtn.setAttribute('aria-label', 'Close popup');\n closeBtn.innerHTML = `\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M6 18L18 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n `;\n closeBtn.style.cssText = `\n background:transparent;\n border:none;\n width:32px;\n height:32px;\n display:flex;\n align-items:center;\n justify-content:center;\n border-radius: 8px;\n cursor:pointer;\n color:${theme.textPrimary};\n padding:4px;\n transition: color .15s ease, transform .15s ease, background .15s ease;\n box-shadow: none !important;\n `;\n closeBtn.onmouseenter = () => {\n closeBtn.style.color = theme.closeBtnHoverColor;\n closeBtn.style.background = theme.closeBtnHoverBg;\n closeBtn.style.transform = 'scale(1.06)';\n };\n closeBtn.onmouseleave = () => {\n closeBtn.style.color = theme.textPrimary;\n closeBtn.style.background = 'transparent';\n closeBtn.style.transform = 'scale(1)';\n };\n closeBtn.onclick = () => {\n emit('popup_clicked', surveyId, {action: 'close_icon'});\n onClose();\n };\n header.appendChild(closeBtn);\n\n ensureMagicFeedbackStyles(popup);\n ensureSpinnerStyles(popup);\n ensureResponsiveStyles(popup);\n\n const containerContent = document.createElement('div');\n containerContent.className = 'deepdots-popup-container-conetent';\n containerContent.style.cssText = `\n display:flex; \n flex-direction:column; \n padding: 0 20px 12px 20px;\n max-height: 80vh; /* límite general del popup */\n overflow: hidden; /* quita scroll del contenedor principal */\n`\n\n // Sección principal (main) - Contenedor formulario + spinner\n const main = document.createElement('div');\n main.className = 'deepdots-popup-main';\n main.style.cssText = 'display:flex; flex-direction:column; width:100%; max-height:80vh; overflow-y:auto;';\n\n const formWrapper = document.createElement('div');\n formWrapper.style.cssText = 'width:100%; flex: 1 1 auto;';\n\n // Contenedor de aviso de error de validación\n const errorHint = document.createElement('div');\n errorHint.className = 'deepdots-error-hint';\n errorHint.style.cssText = `\n display: none;\n margin: 12px 0 0 0;\n padding: 10px 12px;\n border-radius: 6px;\n background: #FEF3C7; /* amber-100 */\n color: #92400E; /* amber-700 */\n border: 1px solid #FCD34D; /* amber-300 */\n font-size: 13px;\n `;\n errorHint.setAttribute('role', 'alert');\n errorHint.setAttribute('aria-live', 'polite');\n\n const spinnerEl = document.createElement('div');\n spinnerEl.className = 'mf-spinner';\n spinnerEl.setAttribute('role', 'status');\n spinnerEl.setAttribute('aria-label', 'Loading survey');\n spinnerEl.innerHTML = '<div class=\"mf-spinner-circle\"></div>';\n spinnerEl.style.cssText = 'position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);';\n\n const formDivId = `magicfeedback-form-${surveyId}`;\n const formHost = document.createElement('div');\n formHost.id = formDivId;\n formHost.style.cssText = 'width:100%; visibility:hidden;';\n\n formWrapper.appendChild(spinnerEl);\n formWrapper.appendChild(formHost);\n main.appendChild(formWrapper);\n // Insertar el hint justo antes del footer\n main.appendChild(errorHint);\n\n // Sección footer (acciones) - botones en extremos\n const footer = document.createElement('div');\n footer.className = 'deepdots-popup-footer';\n footer.setAttribute('data-actions-wrapper', 'true');\n footer.style.cssText = 'display:flex; flex-direction: row-reverse ;justify-content:space-between; align-items:center; gap:8px; margin-top:auto; width:100%; padding-top:16px;';\n\n // Botones\n const backButton = document.createElement('button');\n backButton.textContent = actions?.back ? actions.back.label : 'Back';\n backButton.style.cssText = `\n background: transparent;\n color: #333;\n border: 1px solid #999;\n padding: 12px 24px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: filter .15s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n `;\n backButton.onmouseenter = () => {\n backButton.style.filter = 'brightness(0.9)';\n }\n backButton.onmouseleave = () => {\n backButton.style.filter = 'brightness(1)';\n }\n backButton.onclick = () => {\n emit('popup_clicked', surveyId, {action: 'back'});\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (formInstance as any)?.back?.();\n };\n\n // Boton start survyes, solo aprece cuando la encuesta empieza con mensaje de inicio\n // Width de 100% para que ocupe todo el espacio disponible\n const startButton = document.createElement('button');\n startButton.textContent = actions?.start ? actions.start.label : 'Start survey';\n startButton.style.cssText = `\n background: #1E293B;\n color: #fff;\n border: none;\n padding: 12px 24px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: filter .15s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n `;\n startButton.onclick = () => {\n emit('popup_clicked', surveyId, {action: 'start_survey'});\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (formInstance as any)?.startForm?.();\n };\n\n // Botón cerrar popup, solo aparece al terminar la encuesta\n // Width de 100% para que ocupe todo el espacio disponible\n const closeButton = document.createElement('button');\n closeButton.textContent = actions?.complete ? actions.complete.label : 'Complete survey';\n closeButton.style.cssText = `\n background: #1E293B;\n color: #fff;\n border: none;\n padding: 12px 24px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: filter .15s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n `;\n closeButton.onmouseenter = () => {\n closeButton.style.filter = 'brightness(0.9)';\n }\n closeButton.onmouseleave = () => {\n closeButton.style.filter = 'brightness(1)';\n }\n closeButton.onclick = () => {\n emit('popup_clicked', surveyId, {action: 'complete'});\n onClose();\n };\n\n // Botón send, si es primera pagina ocupara el espacio completo pero si no estara al lado derecho\n const submitButton = document.createElement('button');\n submitButton.textContent = actions?.accept ? actions.accept.label : 'Send';\n submitButton.style.cssText = `\n background: #1E293B;\n color: #fff;\n border: none;\n padding: 12px 24px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: filter .15s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n `;\n submitButton.onclick = () => {\n if (!surveyCompletedEmitted) {\n emit('popup_clicked', surveyId, {action: 'manual_send'});\n // Dispara envío nativo si existe\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (formInstance as any)?.send?.();\n }\n };\n\n backButton.style.display = 'none';\n startButton.style.display = 'none';\n submitButton.style.display = 'none';\n closeButton.style.display = 'none';\n\n // Insertar botones dentro del footer en orden visual (row-reverse deja primario a la derecha)\n footer.appendChild(submitButton);\n footer.appendChild(backButton);\n footer.appendChild(closeButton);\n footer.appendChild(startButton);\n\n // Añadir footer al main y main al containerContent\n main.appendChild(footer);\n containerContent.appendChild(main);\n\n // Helper para controlar visibilidad de botones según estado\n type ViewState = 'loading' | 'start' | 'in_progress_first' | 'in_progress_next' | 'completed' | 'error';\n\n function updateButtons(state: ViewState) {\n // Por defecto, ocultar todos\n backButton.style.display = 'none';\n startButton.style.display = 'none';\n submitButton.style.display = 'none';\n closeButton.style.display = 'none';\n // Reset widths por estado\n backButton.style.width = '';\n startButton.style.width = '';\n submitButton.style.width = '';\n closeButton.style.width = '';\n\n switch (state) {\n case 'loading':\n // Footer se ocultará desde setLoading\n break;\n case 'start':\n // Solo botón Start a ancho completo\n startButton.style.display = 'inline-flex';\n startButton.style.width = '100%';\n break;\n case 'in_progress_first':\n // Solo botón Send (lado derecho), ancho auto\n submitButton.style.display = 'inline-flex';\n submitButton.style.width = '';\n setLoading(false);\n break;\n case 'in_progress_next':\n // Mostrar Back (izquierda) + Send (derecha)\n backButton.style.display = 'inline-flex';\n submitButton.style.display = 'inline-flex';\n setLoading(false);\n break;\n case 'completed':\n // Mostrar Close/Complete a ancho completo como acción principal\n closeButton.style.display = 'inline-flex';\n closeButton.style.width = '100%';\n setLoading(false);\n break;\n case 'error':\n // En error, permitir cerrar (ancho auto)\n // closeButton.style.display = 'inline-flex';\n setLoading(false);\n break;\n }\n }\n\n // Ensamblar popup\n popup.appendChild(header);\n popup.appendChild(containerContent);\n\n container.innerHTML = '';\n container.appendChild(popup);\n container.style.display = 'flex';\n container.style.justifyContent = pos.justifyContent;\n container.style.alignItems = pos.alignItems;\n container.style.background = pos.background;\n if (pos.padding) container.style.padding = pos.padding;\n\n // Gestión dinámica de loading\n function setLoading(isLoading: boolean) {\n spinnerEl.style.display = isLoading ? 'flex' : 'none';\n if (!isLoading) {\n formHost.style.visibility = 'visible';\n }\n // Ocultar totalmente los botones cuando está cargando\n footer.style.display = isLoading ? 'none' : 'flex';\n // Ajustar estados de los botones por si se muestran\n backButton.disabled = isLoading;\n startButton.disabled = isLoading;\n closeButton.disabled = isLoading;\n submitButton.disabled = isLoading;\n submitButton.style.opacity = isLoading ? '0.6' : '1';\n submitButton.style.cursor = isLoading ? 'not-allowed' : 'pointer';\n // No sobrescribir el estado de botones al finalizar la carga.\n if (isLoading) {\n updateButtons('loading');\n }\n }\n\n // Estado inicial\n setLoading(true);\n\n // Entorno navegador\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n // Referencia instancia formulario\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let formInstance: any = null;\n\n try {\n if (!magicfeedback || typeof magicfeedback.form !== 'function') {\n sdkWarn('[MagicFeedback] form() no disponible. Fallback manual.');\n setLoading(false);\n return;\n }\n magicfeedback.init({\n debug: true,\n env: env === 'production' ? 'prod' : 'dev'}\n );\n // Contrato Fase 1 §5: profile = identidad del usuario; metadata = contexto de tracking (session_id + user_id)\n const { profile, metadata } = buildSurveyIdentity(userId ?? null, sessionId ?? null, miniService ?? null, analyticsFeedbackSessionId ?? null);\n formInstance = magicfeedback.form(surveyId, productId, profile, metadata);\n\n interface TypedGenerateOptions {\n addButton: boolean;\n getMetaData: boolean;\n onLoadedEvent?: (args: {\n formData: FormData,\n progress?: number, total?: number\n }) => void;\n beforeSubmitEvent?: () => void;\n afterSubmitEvent?: (args: { error?: string, completed: boolean, progress: number, total: number }) => void;\n onBackEvent?: (args: { error?: string, progress: number, total: number, followup: boolean }) => void;\n }\n\n const generateOptions: TypedGenerateOptions = {\n addButton: false,\n getMetaData: true,\n };\n generateOptions.onLoadedEvent = ({formData}) => {\n // Calcular altura disponible y aplicarla al main (restando header + footer + paddings)\n try {\n /*\n const headerHeight = header.getBoundingClientRect().height;\n const footerHeight = footer.getBoundingClientRect().height;\n const paddingY = 48; // 24px top + 24px bottom\n const viewportLimit = window.innerHeight * 0.8; // coincide con max-height del popup\n const available = viewportLimit - headerHeight - footerHeight - paddingY;\n if (available > 120) { // asegurar un mínimo razonable\n main.style.maxHeight = available + 'px';\n } */\n } catch (e) {\n // silencioso\n }\n // Personalización del popup basada en formData.style\n const s = formData?.style;\n if (s && !stylesInjected) {\n stylesInjected = true;\n // Fondo del contenedor popup\n if (s.boxBackgroundColor) {\n popup.style.background = s.boxBackgroundColor;\n }\n // Alineación del contenido principal\n if (s.contentAlign) {\n // 'top' => start, 'center' => center\n main.style.justifyContent = s.contentAlign === 'center' ? 'center' : 'flex-start';\n }\n // Botón primario (submit, start)\n if (s.buttonPrimaryColor) {\n submitButton.style.background = s.buttonPrimaryColor;\n submitButton.style.border = 'none';\n submitButton.style.color = '#fff';\n\n startButton.style.background = s.buttonPrimaryColor;\n startButton.style.border = 'none';\n startButton.style.color = '#fff';\n\n closeButton.style.background = s.buttonPrimaryColor;\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n }\n // Botón secundario (back) — outlined: fondo blanco, letra y borde del color secundario\n if (s.buttonSecondaryColor) {\n backButton.style.background = '#fff';\n backButton.style.color = s.buttonSecondaryColor;\n backButton.style.border = `1px solid ${s.buttonSecondaryColor}`;\n }\n if (s.logo) {\n if (!document.getElementById('deepdots-popup-logo')) {\n // Insertar logo si existe\n const logoImg = document.createElement('img');\n logoImg.id = 'deepdots-popup-logo';\n logoImg.src = s.logo;\n logoImg.alt = 'Logo';\n logoImg.style.cssText = 'max-height:40px; max-width:100%; object-fit:contain;';\n if (s.logoSize) {\n switch (s.logoSize) {\n case 'small':\n logoImg.style.maxHeight = '30px';\n break;\n case 'medium':\n logoImg.style.maxHeight = '50px';\n break;\n case 'large':\n logoImg.style.maxHeight = '70px';\n break;\n }\n }\n if (s.logoPosition) {\n switch (s.logoPosition) {\n case 'left':\n logoImg.style.margin = '0 16px 42px 0';\n logoImg.style.display = 'block';\n logoImg.style.marginLeft = '0';\n break;\n case 'right':\n logoImg.style.margin = '0 0 42px 16px';\n logoImg.style.display = 'block';\n logoImg.style.marginLeft = 'auto';\n break;\n case 'center':\n logoImg.style.margin = '0 auto 42px auto';\n logoImg.style.display = 'block';\n break;\n }\n }\n // Insertar antes del main si no existe ya\n containerContent.insertBefore(logoImg, main);\n }\n }\n\n if (s.startMessage && s.startMessage !== '') {\n // Si hay mensaje de inicio, mostrar botón Start inicialmente\n sdkLog(s.startMessage);\n updateButtons('start');\n } else {\n // Si no hay mensaje de inicio, mostrar estado de primera página (solo Send)\n updateButtons('in_progress_first');\n }\n } else {\n // Sin estilos, asumir primera página normal\n updateButtons('in_progress_first');\n }\n\n emit('popup_clicked', surveyId, {action: 'loaded'});\n setLoading(false); // hace visible el formulario y oculta el spinner\n };\n generateOptions.beforeSubmitEvent = () => {\n setLoading(true);\n emit('popup_clicked', surveyId, {action: 'before_submit'});\n };\n generateOptions.afterSubmitEvent = ({error, completed, total, progress}) => {\n // No cambiar estado de loading aquí; lo gestiona cada transición\n // Normalizar el error a texto seguro\n const errText = error ? (typeof error === 'string' ? error : ((error as unknown as {message?: string}).message ?? String(error))) : '';\n if (errText) {\n // Desactivar loading para que se vean los botones\n setLoading(false);\n // Caso específico: error de pregunta obligatoria\n if (errText.toLowerCase().includes('no response')) {\n errorHint.textContent = 'Please answer the required question to continue.';\n errorHint.style.display = 'block';\n emit('popup_clicked', surveyId, {action: 'validation_error_required'});\n updateButtons('in_progress_next');\n return;\n }\n // Otros errores: mostrar mensaje genérico y permitir cerrar\n errorHint.textContent = 'An error occurred while submitting. Please try again or close the popup.';\n errorHint.style.display = 'block';\n emit('popup_clicked', surveyId, {action: 'submit_error', error: errText});\n // updateButtons('error');\n return;\n }\n // Limpiar hint si no hay error\n errorHint.style.display = 'none';\n setLoading(false);\n if (completed) {\n emit('survey_completed', surveyId, {action: 'completed'});\n surveyCompletedEmitted = true;\n updateButtons('completed');\n return;\n }\n emit('popup_clicked', surveyId, {action: 'partial'});\n if (total > 1 && progress > 0 && progress < total) {\n updateButtons('in_progress_next');\n } else {\n updateButtons('in_progress_first');\n }\n };\n generateOptions.onBackEvent = ({progress}) => {\n emit('popup_clicked', surveyId, {action: 'back'});\n // Si volvemos a la primera página, ocultar Back\n if (progress === 0) {\n updateButtons('in_progress_first');\n } else {\n updateButtons('in_progress_next');\n }\n };\n\n // Ejecutar generación con opciones tipadas\n formInstance.generate(formDivId, generateOptions)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((err: any) => {\n sdkError('[MagicFeedback] Error generating form:', err);\n setLoading(false);\n });\n } catch (e) {\n sdkError('[MagicFeedback] Exception initializing form:', e);\n setLoading(false);\n }\n}\n","export { DeepdotsPopups } from './core/deepdots-popups';\nexport { buildMessageParams } from './analytics/messaging';\nexport type { MessageStage, TrackMessageOptions } from './analytics/messaging';\nexport type {\n DeepdotsConfig,\n DeepdotsInitParams,\n DeepdotsLogger,\n TriggerConfig,\n DeepdotsEvent,\n DeepdotsEventType,\n EventListener,\n PopupDefinition,\n PopupTrigger,\n PopupTriggerCondition,\n PopupTriggerConditionStatus,\n} from './types';\nexport { POPUP_TRIGGER_CONDITION_STATUSES } from './types';\nexport { NoopPopupRenderer, BrowserPopupRenderer, createDefaultRenderer } from './platform/renderer';\nexport type { PopupRenderer } from './platform/renderer';\n// Para hosts (React Native): inyectar storage persistente y device info.\nexport { InMemoryStorage } from './tracking/tracking-manager';\nexport type { KeyValueStorage } from './tracking/tracking-manager';\nexport type { DeviceInfo } from './analytics/device-info';\nexport { ContactManager } from './contact/contact-manager';\nexport type { ContactAttributes, ContactAttributeValue, ContactBody } from './contact/contact-manager';\n// Canal de analytics → POST /sdk/feedback (modelo de Feedback del Surveys SDK).\nexport { buildAnalyticsFeedbackBody, createFeedbackSink } from './analytics/feedback-payload';\nexport type { AnalyticsKeys, AnalyticsFeedbackBody, FeedbackKV } from './analytics/feedback-payload';\n// Crash & error reporting (#14–17).\nexport { CrashReporter, crashRecordToParams } from './analytics/crash-reporter';\nexport type { CrashRecord, CrashSeverity, ReportErrorOptions, DeviceSnapshot, ReactNativeErrorUtils } from './analytics/crash-reporter';\n// React Native: renderer-puente para mostrar surveys en react-native-webview.\nexport { ReactNativePopupRenderer } from './platform/react-native-renderer';\nexport type { ReactNativeRendererOptions, ReactNativeSurveyPayload } from './platform/react-native-renderer';\nexport { buildSurveyHtml } from './ui/surveyHtml';\n// React Native: auto-wiring en una llamada (storage MMKV + device + platform + lifecycle).\nexport { setupReactNative, mmkvStorage, collectRnDevice } from './react-native/setup';\nexport type { ReactNativeSetupDeps, MmkvLike, DeviceInfoLike, AppStateLike } from './react-native/setup';\n","/**\n * Configuration options for initializing the DeepdotsPopups SDK\n */\nimport type { KeyValueStorage } from '../tracking/tracking-manager';\nimport type { DeviceInfo } from '../analytics/device-info';\nimport type { AnalyticsKeys } from '../analytics/feedback-payload';\n\n/**\n * Custom logger to receive the SDK's debug output instead of the console.\n * Only `log` is required; `warn`/`error`/`info` fall back to `log` when omitted.\n * Lets the host pipe debug output to a file, Firebase, etc. `console` satisfies this shape.\n */\nexport interface DeepdotsLogger {\n log: (...args: unknown[]) => void;\n warn?: (...args: unknown[]) => void;\n error?: (...args: unknown[]) => void;\n info?: (...args: unknown[]) => void;\n}\n\nexport interface DeepdotsInitParams {\n /** API key for authentication */\n apiKey?: string;\n /** Node environment: 'development' or 'production' */\n nodeEnv?: 'development' | 'production';\n /** Enable debug logging */\n debug?: boolean;\n /** Custom logger for debug output. When set (and `debug` is true), the SDK routes its logs here instead of `console`. Default: `console`. */\n logger?: DeepdotsLogger;\n /** Optional user id to send with popup events */\n userId?: string;\n /** Starts tracking enabled (default) or disabled (e.g. until consent is granted). Equivalent to calling `setTrackingEnabled` after init. */\n trackingEnabled?: boolean;\n /** Host app version (for analytics device info / Technology #11). */\n appVersion?: string;\n /** Injectable persistent storage (RN: adapter over AsyncStorage). If missing, uses localStorage/in-memory. */\n storage?: KeyValueStorage;\n /** Platform used in the analytics envelope. Default is 'web'; in RN pass 'android'/'ios'. */\n platform?: 'web' | 'android' | 'ios';\n /** Injectable device info (RN: from react-native-device-info). If missing, it is derived from the browser. */\n device?: DeviceInfo;\n /**\n * Analytics channel keys (`POST /sdk/feedback`). If provided, analytics is SENT\n * to the configured integration; if missing, it stays in dry-run mode (console.log only).\n */\n analytics?: AnalyticsKeys;\n /**\n * Internal user attributes known only by the host (language, age, plan, ...), sent\n * to the backend Contact for segmentation/targeting. Requires `userId`. Equivalent to calling\n * `setContactAttributes` after init (sends only when values changed from the last sync).\n */\n contactAttributes?: Record<string, string | number | boolean>;\n\n}\nexport interface DeepdotsConfig {\n /** API key for authentication */\n apiKey?: string;\n /** Enable debug logging */\n debug?: boolean;\n /** Optional user id to send with popup events */\n userId?: string;\n}\n\n/**\n * Options for configuring survey triggers\n */\nexport interface TriggerConfig {\n /** Trigger type: 'time' (delay), 'scroll' (scroll percentage), 'exit' (route exit), 'click' (element id), 'event' (host event) */\n type: 'time' | 'scroll' | 'exit' | 'click' | 'event';\n /** Value for the trigger (milliseconds for time, percentage for scroll, seconds for exit, element id for click, event name for event) */\n value?: number | string;\n /** Survey ID to show when triggered */\n surveyId: string;\n /** Optional popup definition id (used to disambiguate repeated survey ids) */\n popupId?: string;\n}\n\n/**\n * Event types emitted by the SDK\n */\nexport type DeepdotsEventType =\n | 'popup_shown'\n | 'popup_clicked'\n | 'survey_completed';\n\n/**\n * Event payload structure\n */\nexport interface DeepdotsEvent {\n type: DeepdotsEventType;\n surveyId: string;\n timestamp: number;\n data?: Record<string, unknown>;\n}\n\n/**\n * Event listener callback\n */\nexport type EventListener = (event: DeepdotsEvent) => void;\n\n/** Trigger type used by remote popup definitions */\nexport type PopupTriggerType = 'time_on_page' | 'scroll' | 'exit' | 'click' | 'event';\n\nexport type PopupTriggerConditionStatus = 'SHOWED' | 'PARTIAL' | 'COMPLETED';\n\nexport const POPUP_TRIGGER_CONDITION_STATUSES: PopupTriggerConditionStatus[] = [\n 'SHOWED',\n 'PARTIAL',\n 'COMPLETED',\n];\n\n/** Extra condition used to activate the popup */\nexport interface PopupTriggerCondition {\n answered: PopupTriggerConditionStatus; // user progress status in the survey\n cooldownDays: number; // cooldown days before showing again\n}\n\n/** Trigger attached to the popup definition */\nexport interface PopupTrigger {\n type: PopupTriggerType;\n value: number | string; // seconds on page, scroll percentage, click id, or event name\n}\n\n/** Accept action (open survey) */\nexport interface PopupActionAccept {\n label: string;\n surveyId: string; // survey id to launch\n}\n\n/** Decline action */\nexport interface PopupActionDecline {\n label: string;\n cooldownDays?: number; // optional: do not show again until X days pass\n}\n\n/** Start Surveys Action */\nexport interface PopupActionStart {\n label: string;\n}\n\n/** Complete action (accept and auto-complete survey) */\n// Requires the survey to support auto-completion via parameters.\nexport interface PopupActionComplete {\n label: string;\n surveyId: string; // survey id to launch\n autoCompleteParams: Record<string, unknown>; // parameters used for auto-completion\n cooldownDays?: number;\n}\n\n/** Set of actions available in the popup */\nexport interface PopupActions {\n accept?: PopupActionAccept;\n decline?: PopupActionDecline;\n complete?: PopupActionComplete;\n start?: PopupActionStart;\n back?: PopupActionDecline;\n}\n\n/** Fuente personalizable del popup + survey (viene de la API por popup) */\nexport interface PopupFont {\n /** Nombre de la familia. Ej: \"Inter\" (nombre limpio, NO un stack). */\n family: string;\n /** Opcional: URL a un archivo de fuente (woff2/ttf/otf) para armar un @font-face. */\n url?: string;\n}\n\n/** Configurable popup styles */\nexport interface PopupStyle {\n theme: 'light' | 'dark';\n position: 'bottom' | 'bottom-right' | 'bottom-left' | 'top' | 'top-right' | 'top-left' | 'center';\n /** @deprecated Not used by the SDK; kept only for API compatibility */\n imageUrl?: string | null;\n /** Fuente personalizada. Si falta, se mantiene el comportamiento actual. */\n font?: PopupFont;\n}\n\n/** Segments/targeting rules for showing the popup */\nexport interface PopupSegments {\n lang?: string[]; // allowed languages\n path?: string[]; // app routes where it can be shown\n [key: string]: unknown; // possible future extension\n}\n\n/** Full popup definition */\nexport interface PopupDefinition {\n id: string;\n title: string;\n message: string; // rendered safe HTML (recommended to sanitize upstream)\n triggers: PopupTrigger[];\n cooldown?: PopupTriggerCondition[];\n actions?: PopupActions;\n surveyId: string;\n productId: string;\n style?: PopupStyle;\n segments?: PopupSegments;\n}\n\nexport interface FormStyle\n{\n id: string;\n logo: string;\n title: string;\n companyName: string;\n backgroundColor: string;\n boxBackgroundColor: string;\n buttonOnTopColor: string;\n buttonPrimaryColor: string\n buttonSecondaryColor: string;\n loadingBarColor: string;\n favIcon: string;\n startMessage: string;\n successMessage: string;\n addLogoInMsg: boolean;\n privacyPolicyUrl: string;\n helpUrl: string;\n integrationId: string;\n redirectLink: string;\n redirectError: string;\n redirectTime: number;\n integrationThemeId: string;\n contentAlign: 'top' | 'center';\n logoSize: 'small' | 'medium' | 'large';\n logoPosition: 'left' | 'right' | 'center';\n showProgressBar: boolean;\n showProgressUnit: boolean;\n progressUnit: 'percentage' | 'fraction';\n}\n\n\nexport interface FormData {\n id: string;\n name: string;\n description: string;\n type: string;\n identity: string;\n status: string;\n createdAt: Date;\n updatedAt: Date;\n externalId?: string | null;\n companyId: string;\n productId: string;\n userId: string;\n style: FormStyle\n}\n\nexport enum POPUPSESSIONSTATUS {\n NONE = \"NONE\",\n SHOWED = \"SHOWED\",\n PARTIAL = \"PARTIAL\",\n COMPLETED = \"COMPLETED\",\n DEPRECATED = \"DEPRECATED\",\n}\n","import type { TriggerConfig } from '../types';\nimport type { DeepdotsPopups } from '../core/deepdots-popups';\n\nexport function setupTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n switch (trigger.type) {\n case 'time':\n setupTimeTrigger(popups, trigger);\n break;\n case 'scroll':\n setupScrollTrigger(popups, trigger);\n break;\n case 'exit':\n setupExitTrigger(popups, trigger);\n break;\n case 'event':\n setupEventTrigger(popups, trigger);\n break;\n case 'click':\n setupClickTrigger(popups, trigger);\n break;\n }\n}\n\nfunction setupTimeTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n const delay = trigger.value || 5000;\n setTimeout(() => {\n popups.triggerSurvey(trigger.surveyId, trigger.popupId);\n }, delay);\n popups.debug(`Time trigger set for ${delay}ms`);\n}\n\nfunction setupScrollTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n const threshold = trigger.value || 50;\n const handler = () => {\n const scrollPercentage = (window.scrollY / (document.documentElement.scrollHeight - window.innerHeight)) * 100;\n if (scrollPercentage >= threshold) {\n popups.triggerSurvey(trigger.surveyId, trigger.popupId);\n window.removeEventListener('scroll', handler);\n }\n };\n window.addEventListener('scroll', handler);\n popups.debug(`Scroll trigger set for ${threshold}%`);\n}\n\nfunction setupExitTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n if (typeof window === 'undefined') return;\n\n const delaySeconds = parseExitDelaySeconds(trigger.value);\n const historyRef = window.history;\n const originalPushState = historyRef.pushState.bind(historyRef);\n const originalReplaceState = historyRef.replaceState.bind(historyRef);\n\n let lastUrl = normalizeUrl(window.location.href);\n let lastQueuedKey = '';\n let lastQueuedAt = 0;\n\n const queueLeave = (fromRaw: string, toRaw: string) => {\n const from = normalizeUrl(fromRaw);\n const to = normalizeUrl(toRaw);\n if (!from || !to || from === to) return;\n\n const key = `${from}=>${to}`;\n const now = Date.now();\n if (key === lastQueuedKey && now - lastQueuedAt < 150) return;\n lastQueuedKey = key;\n lastQueuedAt = now;\n popups.queueExitPopup(trigger.surveyId, delaySeconds, from, trigger.popupId);\n };\n\n const handleNavigation = (to: string) => {\n const from = lastUrl;\n queueLeave(from, to);\n lastUrl = normalizeUrl(to);\n };\n\n const handleDocumentClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return;\n if (event.button !== 0) return;\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\n const anchor = (event.target as Element | null)?.closest?.('a');\n if (!(anchor instanceof HTMLAnchorElement)) return;\n\n const href = anchor.getAttribute('href');\n if (!href || href.startsWith('javascript:') || href.startsWith('mailto:') || href.startsWith('tel:')) {\n return;\n }\n const target = anchor.getAttribute('target');\n if (target && target !== '_self') return;\n\n let destination: URL;\n try {\n destination = new URL(href, window.location.href);\n } catch {\n return;\n }\n\n if (destination.origin !== window.location.origin) return;\n queueLeave(window.location.href, destination.href);\n };\n\n const handleHashChange = (event: HashChangeEvent) => {\n const to = event.newURL || window.location.href;\n const from = event.oldURL || lastUrl;\n queueLeave(from, to);\n lastUrl = normalizeUrl(to);\n };\n\n const handlePopState = () => {\n handleNavigation(window.location.href);\n };\n\n historyRef.pushState = function (data: any, unused: string, url?: string | URL | null) {\n const from = window.location.href;\n const result = originalPushState(data, unused, url as any);\n queueLeave(from, window.location.href);\n lastUrl = normalizeUrl(window.location.href);\n return result;\n };\n\n historyRef.replaceState = function (data: any, unused: string, url?: string | URL | null) {\n const from = window.location.href;\n const result = originalReplaceState(data, unused, url as any);\n queueLeave(from, window.location.href);\n lastUrl = normalizeUrl(window.location.href);\n return result;\n };\n\n document.addEventListener('click', handleDocumentClick, true);\n window.addEventListener('hashchange', handleHashChange);\n window.addEventListener('popstate', handlePopState);\n popups.debug('Exit trigger set (deferred to next route)', {\n surveyId: trigger.surveyId,\n delaySeconds,\n });\n}\n\nfunction setupEventTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n // Event triggers are manually fired by host application using popups.triggerEvent(name).\n popups.debug('Event trigger registered', {\n popupId: trigger.popupId,\n surveyId: trigger.surveyId,\n eventName: String(trigger.value || ''),\n });\n}\n\nfunction parseExitDelaySeconds(value?: number | string): number {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return Math.max(0, value);\n }\n if (typeof value === 'string' && value.trim()) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) return Math.max(0, parsed);\n }\n return 0;\n}\n\nfunction normalizeUrl(value: string): string {\n if (!value) return '';\n const withoutIndex = value.replace(/\\/index\\.html(?=($|[?#]))/i, '');\n return withoutIndex.length > 1 && withoutIndex.endsWith('/') ? withoutIndex.slice(0, -1) : withoutIndex;\n}\n\nfunction setupClickTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n const targetId = typeof trigger.value === 'string' ? trigger.value : '';\n if (!targetId) {\n popups.debug('Click trigger missing element id', trigger);\n return;\n }\n\n const attach = () => {\n const el = document.getElementById(targetId);\n if (!el) {\n popups.debug('Click trigger target not found', targetId);\n return false;\n }\n const handler = (e: MouseEvent) => {\n if (e.defaultPrevented) return;\n popups.triggerSurvey(trigger.surveyId, trigger.popupId);\n el.removeEventListener('click', handler);\n };\n el.addEventListener('click', handler);\n popups.debug(`Click trigger set for #${targetId}`);\n return true;\n };\n\n if (typeof document === 'undefined') return;\n if (attach()) return;\n window.addEventListener('DOMContentLoaded', () => attach(), { once: true });\n}\n","import {DeepdotsConfig, DeepdotsInitParams} from '../types';\n\n/** Variables específicas por entorno derivadas de nodeEnv */\nexport interface EnvironmentVariables {\n apiBaseUrl: string;\n}\n\nconst ENVIRONMENT_MAP: Record<\"development\" | \"production\", EnvironmentVariables> = {\n development: {\n apiBaseUrl: 'https://api-dev.deepdots.com',\n },\n production: {\n apiBaseUrl: 'https://api.deepdots.com',\n },\n};\n\n/** Resuelve las variables para el entorno indicado */\nexport function resolveEnvironment(nodeEnv: DeepdotsInitParams['nodeEnv']): EnvironmentVariables {\n return ENVIRONMENT_MAP[nodeEnv || 'production'];\n}\n\n","import type { DeepdotsEventType, PopupActions, PopupStyle } from '../types';\nimport type { PopupRenderer } from './renderer';\nimport { buildSurveyIdentity } from '../tracking/tracking-manager';\nimport { buildSurveyHtml } from '../ui/surveyHtml';\nimport { sdkWarn } from '../util/logger';\n\ntype EmitFn = (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void;\n\n/** Payload que recibe el host para montar el WebView del survey. */\nexport interface ReactNativeSurveyPayload {\n surveyId: string;\n productId: string;\n /** HTML autocontenido para `<WebView source={{ html }}>`. */\n html: string;\n}\n\nexport interface ReactNativeRendererOptions {\n /** Se llama al mostrar un popup: monta el WebView con `payload.html`. */\n onShow?: (payload: ReactNativeSurveyPayload) => void;\n /** Se llama al cerrar el popup: desmonta el WebView. */\n onHide?: () => void;\n}\n\n/**\n * Renderer de React Native: el SDK no puede pintar componentes RN, así que entrega el\n * HTML del survey al host (que lo monta en `react-native-webview`) y traduce los\n * mensajes del WebView a eventos de popup del SDK (→ `POST /sdk/popups`, Messaging #18–22).\n *\n * Uso:\n * ```tsx\n * const renderer = new ReactNativePopupRenderer({\n * onShow: (p) => setSurvey({ ...p, visible: true }),\n * onHide: () => setSurvey((s) => ({ ...s, visible: false })),\n * });\n * sdk.setRenderer(renderer);\n * // …\n * <WebView source={{ html: survey.html }}\n * onMessage={(e) => renderer.handleMessage(e.nativeEvent.data)} />\n * ```\n */\nexport class ReactNativePopupRenderer implements PopupRenderer {\n private emitFn: EmitFn | null = null;\n private onCloseFn: (() => void) | null = null;\n private currentSurveyId: string | null = null;\n private partialEmitted = false;\n\n constructor(private options: ReactNativeRendererOptions = {}) {}\n\n init(): void {\n /* nada que preparar */\n }\n\n show(\n surveyId: string,\n productId: string,\n _actions: PopupActions | undefined,\n emit: EmitFn,\n onClose: () => void,\n env: string = 'production',\n userId?: string,\n style?: PopupStyle,\n sessionId?: string,\n miniService?: string,\n analyticsFeedbackSessionId?: string,\n ): void {\n this.emitFn = emit;\n this.onCloseFn = onClose;\n this.currentSurveyId = surveyId;\n this.partialEmitted = false;\n\n const { profile, metadata } = buildSurveyIdentity(userId ?? null, sessionId ?? null, miniService ?? null, analyticsFeedbackSessionId ?? null);\n const html = buildSurveyHtml({ surveyId, productId, env, profile, metadata, font: style?.font });\n if (this.options.onShow) {\n this.options.onShow({ surveyId, productId, html });\n } else {\n sdkWarn(\n '[Deepdots] ReactNativePopupRenderer sin onShow: pasa { onShow } a new ReactNativePopupRenderer({...}) para montar el WebView del survey.',\n );\n }\n }\n\n hide(): void {\n this.options.onHide?.();\n this.currentSurveyId = null;\n }\n\n /**\n * El host la conecta al `onMessage` del WebView. Traduce los mensajes del survey a\n * eventos del SDK: primera interacción → `popup_clicked` (PARTIAL), completado →\n * `survey_completed` (COMPLETED) y cierra el popup.\n */\n handleMessage(raw: string): void {\n const surveyId = this.currentSurveyId;\n if (!surveyId || !this.emitFn) return;\n\n let name: string | undefined;\n try {\n name = (JSON.parse(raw) as { name?: string }).name;\n } catch {\n name = raw; // mensajes simples (\"error:load\")\n }\n\n switch (name) {\n case 'loaded':\n case 'before_submit':\n case 'after_submit':\n case 'back':\n if (!this.partialEmitted) {\n this.partialEmitted = true;\n this.emitFn('popup_clicked', surveyId, { action: 'partial' });\n }\n break;\n case 'survey_completed':\n this.emitFn('survey_completed', surveyId);\n this.onCloseFn?.(); // el core enruta a hidePopup() → renderer.hide() → onHide\n break;\n case 'popup_close':\n this.onCloseFn?.();\n break;\n default:\n break;\n }\n }\n}\n\n/** Detección simple de entorno React Native. */\nexport function isReactNativeEnv(): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return typeof navigator !== 'undefined' && (navigator as any).product === 'ReactNative';\n}\n\n/** Factoría usada por `createDefaultRenderer` cuando se detecta RN (el host debería pasar onShow). */\nexport function createReactNativeRenderer(): PopupRenderer {\n return new ReactNativePopupRenderer();\n}\n","import type { IdentityAnswer } from '../tracking/tracking-manager';\nimport { buildFontFaceCss, buildFontFamilyValue } from './font';\nimport type { PopupFont } from '../types';\n\n/**\n * Construye un HTML autocontenido que renderiza el survey de `@magicfeedback/native`\n * dentro de un WebView (React Native). Carga el bundle desde CDN, crea el form con la\n * identidad inyectada (`profile`/`metadata`) y reenvía los eventos del survey al host\n * vía el puente de react-native-webview: `window.ReactNativeWebView.postMessage`.\n *\n * Mensajes emitidos (JSON `{name, payload}`): `loaded`, `before_submit`, `after_submit`,\n * `survey_completed`, `back`, `popup_close`.\n */\nexport interface BuildSurveyHtmlOptions {\n surveyId: string;\n productId: string;\n env?: string; // 'production' | 'development'\n profile?: IdentityAnswer[];\n metadata?: IdentityAnswer[];\n version?: string; // versión de @magicfeedback/native\n font?: PopupFont; // fuente personalizada (family + url opcional)\n}\n\nexport function buildSurveyHtml(opts: BuildSurveyHtmlOptions): string {\n const env = opts.env === 'development' ? 'dev' : 'prod';\n const version = opts.version ?? '2.2.4';\n const cdn = `https://cdn.jsdelivr.net/npm/@magicfeedback/native@${version}/dist/magicfeedback-sdk.browser.js`;\n const sid = JSON.stringify(opts.surveyId);\n const pid = JSON.stringify(opts.productId);\n const profileJson = JSON.stringify(opts.profile ?? []);\n const metaJson = JSON.stringify(opts.metadata ?? []);\n const fontFaceCss = opts.font ? buildFontFaceCss(opts.font.family, opts.font.url) : '';\n const fontFamilyValue = opts.font ? buildFontFamilyValue(opts.font.family) : '-apple-system,system-ui,sans-serif';\n\n return `<!DOCTYPE html><html><head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\n<meta name=\"color-scheme\" content=\"light\"/>\n<style>${fontFaceCss}html,body{margin:0;padding:0;background:transparent;font-family:${fontFamilyValue}}#mf{width:100%;box-sizing:border-box}#mf *{max-width:100%;box-sizing:border-box}</style>\n</head><body>\n<div id=\"mf\"></div>\n<script>\n(function(){\n function emit(s){ try{ if(window.ReactNativeWebView){ window.ReactNativeWebView.postMessage(s); } }catch(e){} }\n function emitJSON(n,p){ try{ emit(JSON.stringify({name:n,payload:p||{}})); }catch(e){} }\n window.DeepdotsClose = function(){ emitJSON('popup_close'); };\n var initialized=false;\n function initMF(){\n if(initialized || !window.magicfeedback) return initialized;\n initialized=true;\n try{\n window.magicfeedback.init({ debug:false, env:'${env}' });\n var form = window.magicfeedback.form(${sid}, ${pid}, ${profileJson}, ${metaJson});\n window.DeepdotsForm = form;\n form.generate('mf', {\n addButton:false,\n getMetaData:true,\n onLoadedEvent:function(){ emitJSON('loaded'); },\n beforeSubmitEvent:function(){ emitJSON('before_submit'); },\n afterSubmitEvent:function(p){\n try{ if(p && p.completed){ emitJSON('survey_completed', p); } else { emitJSON('after_submit', p); } }\n catch(e){ emitJSON('after_submit'); }\n },\n onBackEvent:function(p){ emitJSON('back', p); }\n }).catch(function(e){ emit('error:init'); });\n }catch(e){ emit('error:exception'); }\n return true;\n }\n var s=document.createElement('script'); s.src=${JSON.stringify(cdn)}; s.async=true;\n s.onload=function(){ initMF(); };\n s.onerror=function(){ emit('error:load'); };\n document.head.appendChild(s);\n var tries=0, t=setInterval(function(){ if(initMF()||++tries>40){ clearInterval(t); } },150);\n})();\n</script>\n</body></html>`;\n}\n","import {DeepdotsEventType, PopupActions, PopupStyle} from '../types';\nimport { isReactNativeEnv, createReactNativeRenderer } from './react-native-renderer';\n// renderPopup (DOM + @magicfeedback/native) se carga PEREZOSAMENTE solo al mostrar\n// un popup en navegador, para que importar el SDK sea seguro en React Native/SSR.\n\nexport interface PopupRenderer {\n /** Preparar recursos si aplica */\n init?(): void;\n /** Mostrar popup */\n show(\n surveyId: string,\n productId: string,\n actions: PopupActions | undefined,\n emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void,\n onClose: () => void,\n env?: string,\n userId?: string,\n style?: PopupStyle,\n sessionId?: string,\n miniService?: string,\n analyticsFeedbackSessionId?: string,\n ): void;\n /** Ocultar popup */\n hide(): void;\n}\n\n/** Renderer que no hace nada (SSR / entornos sin DOM) */\nexport class NoopPopupRenderer implements PopupRenderer {\n show(): void { /* no-op */ }\n hide(): void { /* no-op */ }\n}\n\n/** Renderer para navegadores usando la implementación actual basada en renderPopup */\nexport class BrowserPopupRenderer implements PopupRenderer {\n private container: HTMLElement | null = null;\n private visible = false;\n\n init(): void {\n if (typeof document === 'undefined') return;\n if (!this.container) {\n this.container = document.createElement('div');\n this.container.id = 'deepdots-popup-container';\n this.container.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: none;\n z-index: 999999;\n background: rgba(0, 0, 0, 0.5);\n justify-content: center;\n align-items: center;\n `;\n }\n if (!document.body.contains(this.container)) {\n document.body.appendChild(this.container);\n }\n }\n\n show(\n surveyId: string,\n productId: string,\n actions: PopupActions | undefined,\n emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void,\n onClose: () => void,\n env: string = 'production',\n userId?: string,\n style?: PopupStyle,\n sessionId?: string,\n miniService?: string,\n analyticsFeedbackSessionId?: string,\n ): void {\n if (this.visible) return;\n if (!this.container || !document.body.contains(this.container)) this.init();\n if (!this.container) return; // aún sin DOM\n this.visible = true;\n const container = this.container;\n void import('../ui/renderPopup').then(({ renderPopup }) => {\n renderPopup(container, surveyId, productId, actions, emit, onClose, env, userId, style, sessionId, miniService, analyticsFeedbackSessionId);\n });\n }\n\n hide(): void {\n this.visible = false;\n if (this.container) {\n this.container.style.display = 'none';\n this.container.innerHTML = '';\n }\n }\n}\n\n/** Factoría para obtener renderer por defecto */\nexport function createDefaultRenderer(): PopupRenderer {\n if (typeof document === 'undefined') {\n // Entorno sin DOM: probar RN primero\n if (isReactNativeEnv()) return createReactNativeRenderer();\n return new NoopPopupRenderer();\n }\n // Si estamos en React Native y hay WebView con document emulado, aún queremos RN renderer\n if (isReactNativeEnv()) return createReactNativeRenderer();\n return new BrowserPopupRenderer();\n}\n","import {\n DeepdotsConfig,\n TriggerConfig,\n DeepdotsEvent,\n DeepdotsEventType,\n EventListener,\n DeepdotsInitParams,\n DeepdotsLogger,\n PopupDefinition,\n PopupTriggerCondition,\n PopupActions,\n PopupTrigger,\n PopupTriggerConditionStatus,\n POPUP_TRIGGER_CONDITION_STATUSES, POPUPSESSIONSTATUS,\n PopupStyle,\n} from '../types';\n// renderPopup se carga de forma PEREZOSA (dynamic import) para no arrastrar\n// `@magicfeedback/native` (browser) ni el CSS al importar el SDK en entornos sin DOM (React Native).\nimport { setupTrigger } from '../triggers';\nimport { resolveEnvironment } from '../config/env';\nimport { PopupRenderer, createDefaultRenderer } from '../platform/renderer';\nimport { TrackingManager, createDefaultStorage } from '../tracking/tracking-manager';\nimport { AnalyticsManager, createDryRunSink, type AnalyticsEnvelope } from '../analytics/analytics-manager';\nimport { createFeedbackSink } from '../analytics/feedback-payload';\nimport { NavigationObserver } from '../tracking/navigation-observer';\nimport { collectDeviceInfo } from '../analytics/device-info';\nimport { collectGeoInfo } from '../analytics/geo-info';\nimport { EngagementTracker } from '../analytics/engagement-tracker';\nimport { ContactManager, type ContactAttributes } from '../contact/contact-manager';\nimport { CrashReporter, crashRecordToParams, type ReportErrorOptions, type ReactNativeErrorUtils } from '../analytics/crash-reporter';\nimport { setLogger } from '../util/logger';\nimport { buildMessageParams, type MessageStage, type TrackMessageOptions } from '../analytics/messaging';\n\nconst EXIT_QUEUE_STORAGE_KEY = '__deepdots_exit_popup_queue__';\nconst DAY_IN_MS = 24 * 60 * 60 * 1000;\nconst ANALYTICS_MAX_BATCH_SIZE = 20;\nconst ANALYTICS_FLUSH_INTERVAL_MS = 30_000;\n/** Namespace reservado para los eventos que emite el propio SDK (page_view, message, mini_service…). */\nconst RESERVED_EVENT_PREFIX = 'deepdots_';\n/** Prefijo que se antepone a los eventos custom del host para poder identificarlos frente a los reservados. */\nconst CUSTOM_EVENT_PREFIX = 'deepdots_event_';\n\ninterface DeferredExitPopup {\n id: string;\n surveyId: string;\n dueAt: number;\n sourceUrl: string;\n}\n\ninterface LegacyPopupTriggerCondition {\n answered?: boolean;\n cooldownDays?: number;\n}\n\ninterface PopupProgressState {\n status: PopupTriggerConditionStatus;\n timestamp: number;\n}\n\ntype NormalizedPopupDefinition = PopupDefinition & {\n legacyConditions?: LegacyPopupTriggerCondition[];\n};\n\n/**\n * Main class for managing survey popups\n */\nexport class DeepdotsPopups {\n private config: DeepdotsConfig | null = null;\n private listeners: Map<DeepdotsEventType, Set<EventListener>> = new Map();\n private triggers: TriggerConfig[] = [];\n private initialized = false;\n private renderer: PopupRenderer = createDefaultRenderer();\n /** Logger para el output de debug. Default `console`; el host puede inyectar el suyo en init(). */\n private logger: DeepdotsLogger = console;\n private popupContainer: HTMLElement | null = null; // deprecated: mantenido para compatibilidad interna\n private popupDefinitions: NormalizedPopupDefinition[] = [];\n private popupsLoaded = false;\n private pendingAutoLaunch = false;\n\n private answeredSurveys: Set<string> = new Set();\n private surveyProgress: Map<string, PopupProgressState> = new Map();\n private lastShown: Map<string, number> = new Map(); // popupId -> timestamp mostrado\n private surveyToPopupId: Map<string, string> = new Map(); // surveyId -> popupId\n private deferredExitTimers: number[] = [];\n\n private baseUrl: string = '';\n private env: 'production' | 'development' = 'production';\n\n /** Identidad + sesión (Fase 1 tracking). Null hasta init(). */\n private tracking: TrackingManager | null = null;\n /** Capa de analytics (canal separado del feedback). Null hasta init(). */\n private analytics: AnalyticsManager | null = null;\n /** feedbackSessionId cacheado del canal de analytics (devuelto por POST /sdk/feedback). */\n private analyticsFeedbackSessionId: string | undefined = undefined;\n /** Timer del flush periódico de analytics (cada ANALYTICS_FLUSH_INTERVAL_MS). */\n private analyticsFlushTimer: ReturnType<typeof setInterval> | undefined = undefined;\n /** Crash & error reporting (#14–17). Null hasta init(). */\n private crashReporter: CrashReporter | null = null;\n /** Observador de navegación (Fase 2): emite page_view por el canal de analytics. */\n private navObserver: NavigationObserver | null = null;\n /** Tiempo activo (engagement time, #8). */\n private engagement: EngagementTracker | null = null;\n /** Atributos internos del usuario identificado → POST /sdk/popups/contact. Null si no hay userId. */\n private contact: ContactManager | null = null;\n /** Marca si ya se inició la navegación manual (setScreen) — para RN sin History API. */\n private navStarted = false;\n\n /** Initialize the SDK with configuration */\n init(config: DeepdotsInitParams): void {\n this.logger = config.logger ?? console;\n setLogger(this.logger); // los módulos sin `this` (renderPopup, renderers) enrutan por aquí\n if (this.initialized) {\n this.log('SDK already initialized');\n return;\n }\n\n const env = resolveEnvironment(config.nodeEnv);\n\n this.baseUrl = env.apiBaseUrl;\n this.env = config.nodeEnv || 'production';\n\n this.config = {\n apiKey: config.apiKey || undefined,\n debug: config.debug || false,\n userId: config.userId || undefined,\n } as DeepdotsConfig;\n\n // user_id lo gestiona el SDK (persistente); el session_id lo provee el backend\n // (respuesta de POST /sdk/popups) y se cachea — el SDK no genera ni expira sesiones.\n const storage = config.storage ?? createDefaultStorage();\n this.tracking = new TrackingManager({\n storage,\n clientUserId: this.config.userId,\n enabled: config.trackingEnabled ?? true,\n });\n\n // Contact: info interna del usuario que solo conoce el host (segmentación/targeting).\n // Solo trackeamos usuarios IDENTIFICADOS → se crea únicamente si hay userId del init.\n if (this.config.userId) {\n const userId = this.config.userId;\n const publicKey = this.config.apiKey ?? '';\n this.contact = new ContactManager({\n storage,\n publicKey,\n userId,\n post: (body) => this.postContact(body),\n });\n // Atributos de contact pasados en init: envío fire-and-forget (solo si cambiaron).\n if (config.contactAttributes) {\n void this.setContactAttributes(config.contactAttributes);\n }\n }\n this.log('tracking · user_id:', this.tracking.getUserId(), '· new_user:', this.tracking.isNewUser(), '· enabled:', this.tracking.isTrackingEnabled());\n\n // Analytics: se envía como Feedback a la integración (`POST /sdk/feedback`) si se\n // pasan claves en init.analytics; si no, queda en dry-run (solo console.log).\n const analyticsSink = config.analytics\n ? createFeedbackSink({\n baseUrl: this.baseUrl,\n keys: config.analytics,\n log: (...a) => this.log(...a),\n onSessionId: (id) => { this.analyticsFeedbackSessionId = id; },\n })\n : createDryRunSink((...a) => this.logger.log(...a));\n const device = config.device ?? collectDeviceInfo(config.appVersion);\n this.analytics = new AnalyticsManager({\n sink: analyticsSink,\n publicKey: config.analytics?.publicKey ?? this.config.apiKey,\n language: typeof navigator !== 'undefined' ? navigator.language : undefined,\n platform: config.platform ?? 'web',\n device,\n maxBatchSize: ANALYTICS_MAX_BATCH_SIZE,\n onFlushNeeded: () => this.flushAnalytics(),\n });\n // Crash & error reporting (#14–17): captura errores no manejados (a disco, replay\n // en el siguiente arranque) y expone reportError() para el host (emite ya).\n this.crashReporter = new CrashReporter({\n storage,\n emit: (params) => this.track('deepdots_app_crash', params),\n device: () => ({ appVersion: device.app_version, osVersion: device.os_version, deviceModel: device.device_model }),\n sessionId: () => this.tracking?.getSessionId() ?? null,\n now: () => Date.now(),\n enabled: () => this.tracking?.isTrackingEnabled() ?? false,\n });\n if (this.tracking?.isTrackingEnabled()) {\n this.crashReporter.install();\n }\n // Geolocalización por IP (fire-and-forget): rellena country/city cuando resuelve.\n collectGeoInfo().then((geo) => { if (geo) this.analytics?.updateDevice(geo); }).catch(() => {});\n // Fase 2: navegación → eventos page_view por el canal de analytics.\n this.navObserver = new NavigationObserver();\n this.navObserver.onVisit((v) => this.track('deepdots_page_view', { screen: v.screen, duration_seconds: v.durationSeconds }));\n this.navObserver.install();\n // Engagement time (#8): cuenta tiempo activo en primer plano.\n this.engagement = new EngagementTracker();\n this.engagement.resume();\n this.setupAnalyticsFlush();\n // Marca de inicio de sesión (base para Crash-Free Users #14).\n this.track('deepdots_session_start', {});\n // Drena SIEMPRE la cola (descarta los pendientes si tracking está off, spec §7);\n // solo reenvía como evento cuando el tracking está activo.\n const pendingCrashes = this.crashReporter.drainPendingCrashes();\n if (this.tracking?.isTrackingEnabled()) {\n for (const rec of pendingCrashes) {\n this.track('deepdots_app_crash', crashRecordToParams(rec));\n }\n }\n\n this.initialized = true;\n this.log('SDK initialized', this.config);\n if (this.renderer.init) this.renderer.init();\n this.setupPopupContainer();\n\n // Los popups SIEMPRE se reciben de la API (no se definen en init).\n this.fetchPopupsFromServer().then((defs) => {\n this.popupDefinitions = this.validatePopupDefinitions(defs);\n this.popupsLoaded = true;\n this.log('Popups loaded from API', this.popupDefinitions);\n this.configureTriggersFromDefinitions();\n this.processDeferredExitQueue();\n if (this.pendingAutoLaunch) {\n this.startTriggers();\n }\n });\n }\n\n /** User id actual (generado por el SDK o provisto por el cliente). Null si tracking off. */\n getUserId(): string | null {\n return this.tracking?.getUserId() ?? null;\n }\n\n /** Session id de navegación actual. Null si tracking off. */\n getSessionId(): string | null {\n return this.tracking?.getSessionId() ?? null;\n }\n\n /** Activa/desactiva el tracking (identidad + sesión + analytics). Kill-switch del contrato §7bis. */\n setTrackingEnabled(enabled: boolean): void {\n this.tracking?.setTrackingEnabled(enabled);\n this.log('tracking · setTrackingEnabled:', enabled, '· session_id:', this.tracking?.getSessionId() ?? null);\n }\n\n // ───────── Analytics (canal separado del feedback, vinculado por user_id) ─────────\n\n /** Registra un evento de analítica (modelo GA: nombre + params). No-op si tracking off. */\n track(name: string, params?: Record<string, unknown>): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n // Los eventos del SDK ya van en el namespace `deepdots_`; los custom del host se\n // prefijan con `deepdots_event_` para poder distinguirlos en analítica.\n const eventName = name.startsWith(RESERVED_EVENT_PREFIX) ? name : `${CUSTOM_EVENT_PREFIX}${name}`;\n this.analytics?.track(eventName, params);\n this.log('analytics · track:', eventName, params ?? {});\n }\n\n /** User attributes para breakdowns (registration_status, pass_type, sector, pass_status…). */\n setUserAttributes(attributes: Record<string, string | number | boolean>): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.analytics?.setUserAttributes(attributes);\n }\n\n /** Reporta un error del host (manejado o no) → evento `deepdots_app_crash`. No-op si tracking off. */\n reportError(error: unknown, options?: ReportErrorOptions): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.crashReporter?.reportError(error, options);\n }\n\n /** Engancha `global.ErrorUtils` de RN para capturar errores JS no manejados. No-op si tracking off. */\n installReactNativeCrashHandler(errorUtils: ReactNativeErrorUtils): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.crashReporter?.installReactNative(errorUtils);\n }\n\n /**\n * Info interna del usuario que solo conoce el host (idioma, edad, plan…), persistida en el\n * Contact del backend para segmentación/targeting de popups. Identificada por el `userId` del\n * init. Solo envía si los atributos cambiaron (diff en storage). No-op si tracking off o sin userId.\n * @returns `true` si se envió al backend, `false` si no hubo cambios o está deshabilitado.\n */\n async setContactAttributes(attributes: ContactAttributes): Promise<boolean> {\n if (!this.tracking?.isTrackingEnabled()) return false;\n if (!this.contact) return false;\n return this.contact.setAttributes(attributes);\n }\n\n /** Marca el inicio de un mini-service; etiqueta los eventos siguientes. No-op si tracking off. */\n enterMiniService(name: string, entryPointType?: string): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.analytics?.enterMiniService(name, entryPointType);\n this.log('analytics · enterMiniService:', name, entryPointType ?? '');\n }\n\n /** Cierra el mini-service `name` (emite `mini_service_exit` con duración, #27). No-op si tracking off o si ese no está activo. */\n exitMiniService(name: string): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.analytics?.exitMiniService(name);\n this.log('analytics · exitMiniService:', name);\n }\n\n /** Findability (#31/#35): registra una búsqueda. `has_results` se deriva de `resultsCount`. */\n trackSearch(query: string, resultsCount: number, params?: Record<string, unknown>): void {\n this.track('deepdots_search', { query, results_count: resultsCount, has_results: resultsCount > 0, ...(params ?? {}) });\n }\n\n /** Findability friction (#34/#35): señal de fricción con su `friction_topic`. */\n trackFindabilityFriction(frictionTopic: string, params?: Record<string, unknown>): void {\n this.track('deepdots_findability_friction', { friction_topic: frictionTopic, ...(params ?? {}) });\n }\n\n /** Funnel: un paso del embudo, correlacionado por `taskId`. El backend reconstruye conversión/drop-off/tiempo. */\n trackFunnelStep(funnel: string, step: string, taskId: string, params?: Record<string, unknown>): void {\n this.track('deepdots_funnel_step', { funnel, step, task_id: taskId, ...(params ?? {}) });\n }\n\n /** Messaging (#18–22): registra una etapa del funnel de una notificación (push/in-app). No-op si tracking off. */\n trackMessage(stage: MessageStage, options: TrackMessageOptions): void {\n this.track('deepdots_message', buildMessageParams(stage, options));\n }\n\n /**\n * Navegación MANUAL (entornos sin History API, p. ej. React Native con React Navigation).\n * El host la llama en cada cambio de pantalla; emite `page_view` al salir de la anterior.\n */\n setScreen(name: string): void {\n if (!this.navObserver) return;\n if (!this.navStarted) {\n this.navObserver.begin(name);\n this.navStarted = true;\n } else {\n this.navObserver.visit(name);\n }\n }\n\n /** App a foreground (RN: AppState 'active'): reanuda el engagement time. */\n onForeground(): void {\n this.engagement?.resume();\n }\n\n /**\n * App a background (RN: AppState 'background'): cierra pantalla actual (page_view),\n * mini-service (mini_service_exit), emite engagement y hace flush del lote.\n */\n onBackground(): void {\n this.navObserver?.stop();\n this.navStarted = false;\n if (this.tracking?.isTrackingEnabled()) this.analytics?.exitAllMiniServices();\n this.flushEngagement();\n this.engagement?.pause();\n this.flushAnalytics();\n }\n\n /** Payload que se ENVIARÍA al endpoint de analytics (no envía ni vacía el buffer). */\n previewAnalytics(): AnalyticsEnvelope {\n return (\n this.analytics?.buildPayload(this.analyticsIdentity()) ?? {\n userId: null,\n sessionId: null,\n context: { platform: 'web', attributes: {} },\n events: [],\n }\n );\n }\n\n /** Envía (hoy dry-run → console.log) el lote acumulado de analytics y vacía el buffer. */\n flushAnalytics(): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.analytics?.flush(this.analyticsIdentity());\n }\n\n /** Emite un evento `user_engagement` con el tiempo activo acumulado (#8). */\n private flushEngagement(): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n const ms = this.engagement?.consume() ?? 0;\n if (ms > 0) this.track('deepdots_user_engagement', { engagement_time_msec: ms });\n }\n\n private analyticsIdentity() {\n return {\n userId: this.tracking?.getUserId() ?? null,\n sessionId: this.tracking?.getSessionId() ?? null,\n };\n }\n\n /** Flush automático al ocultar/cerrar la página (no perder el lote pendiente). */\n private setupAnalyticsFlush(): void {\n if (typeof document === 'undefined' || typeof window === 'undefined') return;\n // flush periódico mientras la app está en primer plano\n this.analyticsFlushTimer = setInterval(() => this.flushAnalytics(), ANALYTICS_FLUSH_INTERVAL_MS);\n // al cerrar la página: cerrar pantalla (page_view) + mini-service + engagement, y enviar el lote\n window.addEventListener('pagehide', () => {\n clearInterval(this.analyticsFlushTimer);\n this.navObserver?.stop();\n if (this.tracking?.isTrackingEnabled()) this.analytics?.exitAllMiniServices();\n this.flushEngagement();\n this.flushAnalytics();\n });\n // al ocultar/mostrar la pestaña: pausar/reanudar engagement y enviar lo acumulado\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') {\n this.flushEngagement();\n this.engagement?.pause();\n this.flushAnalytics();\n } else if (document.visibilityState === 'visible') {\n this.engagement?.resume();\n }\n });\n }\n\n /** Enable auto-launch functionality with configured triggers */\n autoLaunch(): void {\n if (!this.initialized) {\n throw new Error('SDK not initialized. Call init() first.');\n }\n if (!this.popupsLoaded) {\n this.pendingAutoLaunch = true;\n this.log('Auto-launch deferred until popups are loaded');\n return;\n }\n this.startTriggers();\n }\n\n /** Inicia los triggers configurados */\n private startTriggers(): void {\n this.log('Auto-launch enabled');\n this.triggers.forEach((trigger) => setupTrigger(this, trigger));\n }\n\n /** Configure triggers for auto-launching popups (manual) */\n configureTriggers(triggers: TriggerConfig[]): void {\n if (!this.initialized) {\n throw new Error('SDK not initialized. Call init() first.');\n }\n this.triggers = triggers;\n this.log('Triggers configured', triggers);\n }\n\n /** Deriva triggers desde las definiciones de popup */\n private configureTriggersFromDefinitions(): void {\n const derived: TriggerConfig[] = [];\n this.debug('Validated popup definitions', this.popupDefinitions);\n\n this.popupDefinitions.forEach((def) => {\n def.triggers.forEach((trigger) => {\n const type = this.mapPopupTriggerType(trigger.type);\n if (!type) {\n this.debug('Unsupported trigger type', trigger.type);\n return;\n }\n const value = type === 'time' && typeof trigger.value === 'number'\n ? trigger.value * 1000\n : trigger.value;\n derived.push({ type, value, surveyId: def.surveyId, popupId: def.id });\n });\n });\n\n if (derived.length) {\n this.configureTriggers(derived);\n }\n }\n\n /** Lógica para evaluar condiciones antes de mostrar una encuesta */\n triggerSurvey(surveyId: string, popupId?: string): void {\n const def = this.findPopupDefinition(surveyId, popupId);\n if (!def) {\n this.debug('No popup definition for trigger', { surveyId, popupId });\n return;\n }\n if (!this.shouldShow(def)) {\n this.debug('Conditions prevented showing popup', def.id);\n return;\n }\n this.showDefinition(def);\n }\n\n /** Trigger popups configured with trigger.type = 'event' and matching trigger.value */\n public triggerEvent(eventName: string): void {\n if (!this.initialized) {\n throw new Error('SDK not initialized. Call init() first.');\n }\n const normalized = String(eventName || '').trim();\n if (!normalized) {\n this.debug('Ignoring empty event trigger name');\n return;\n }\n\n const candidates = this.popupDefinitions.filter((def) => {\n return def.triggers.some((trigger) => {\n const triggerValue = String(trigger.value ?? '').trim();\n return trigger.type === 'event' && triggerValue === normalized;\n });\n });\n\n if (!candidates.length) {\n this.debug('No event popup definitions found', { eventName: normalized });\n return;\n }\n\n const matched = candidates.find((def) => this.shouldShow(def));\n if (!matched) {\n this.debug('Event popup blocked by conditions/segments', { eventName: normalized });\n return;\n }\n\n this.showDefinition(matched);\n }\n\n private showDefinition(def: PopupDefinition): void {\n this.log('Showing popup (definition)', def);\n this.surveyToPopupId.set(def.surveyId, def.id);\n this.lastShown.set(def.id, Date.now());\n this.renderPopup(def.surveyId, def.productId, def.actions, def.style);\n this.emitEvent('popup_shown', def.surveyId, { popupId: def.id });\n }\n\n private shouldShow(def: NormalizedPopupDefinition, pathUrl?: string, skipPathCheck = false): boolean {\n if (!skipPathCheck && !this.matchesSegmentsPath(def, pathUrl)) {\n return false;\n }\n if (!this.matchesSegmentsLang(def)) {\n return false;\n }\n\n const cooldowns = def.cooldown || [];\n if (cooldowns.length && !cooldowns.every((cooldown) => this.evaluateCooldown(def, cooldown))) {\n return false;\n }\n\n const legacyConditions = def.legacyConditions || [];\n if (!legacyConditions.length) return true;\n return legacyConditions.every((condition) => this.evaluateLegacyCondition(def, condition));\n }\n\n private matchesSegmentsLang(def: PopupDefinition): boolean {\n const langs = def.segments?.lang;\n if (!langs || langs.length === 0) return true;\n\n // navigator.language puede ser \"en\", \"en-US\", \"da\", \"da-DK\", etc.\n const browserLang = (\n typeof navigator !== 'undefined' ? navigator.language : ''\n ).toLowerCase();\n\n if (!browserLang) {\n this.debug('No navigator.language available for lang comparison', { popupId: def.id, langs });\n return true;\n }\n\n // Acepta si el idioma del browser empieza con alguno de los configurados\n // ej: browser \"en-US\" coincide con segment \"en\"\n const matches = langs.some((lang) => browserLang.startsWith(lang.toLowerCase()));\n if (!matches) {\n this.debug('Lang mismatch for popup', { popupId: def.id, langs, browserLang });\n }\n return matches;\n }\n\n private matchesSegmentsPath(def: PopupDefinition, pathUrl?: string): boolean {\n const paths = def.segments?.path;\n if (!paths || paths.length === 0) return true;\n if (typeof window === 'undefined' || !window.location) {\n this.debug('No window.location available for path comparison', { popupId: def.id, paths });\n return true;\n }\n\n const normalizedHref = this.normalizeUrl(pathUrl || window.location.href || '');\n const currentUrl = this.safeParseUrl(normalizedHref);\n const normalizedPath = this.normalizeUrl(currentUrl?.pathname || window.location.pathname || '');\n\n const matches = paths.some((rawCandidate) => {\n const candidate = this.normalizeUrl(rawCandidate);\n let match = false;\n if (candidate.startsWith('http://') || candidate.startsWith('https://')) {\n match = normalizedHref === candidate;\n } else if (candidate.startsWith('/')) {\n match = normalizedHref.includes(candidate);\n } else {\n match = normalizedPath === candidate;\n }\n this.debug('Path comparison', {\n popupId: def.id,\n candidate,\n currentPath: normalizedPath,\n currentHref: normalizedHref,\n match,\n });\n return match;\n });\n\n if (!matches) {\n this.debug('No path match for popup', { popupId: def.id, paths, currentPath: normalizedPath });\n }\n\n return matches;\n }\n\n private evaluateCooldown(def: PopupDefinition, condition: PopupTriggerCondition): boolean {\n switch (condition.answered) {\n case 'SHOWED':\n return this.hasCooldownElapsed(this.lastShown.get(def.id), condition.cooldownDays);\n case 'PARTIAL':\n case 'COMPLETED': {\n const progress = this.surveyProgress.get(def.surveyId);\n if (!progress || progress.status !== condition.answered) {\n return true;\n }\n return this.hasCooldownElapsed(progress.timestamp, condition.cooldownDays);\n }\n default:\n return true;\n }\n }\n\n private evaluateLegacyCondition(def: PopupDefinition, condition: LegacyPopupTriggerCondition): boolean {\n if (!condition.answered && this.answeredSurveys.has(def.surveyId)) {\n return false;\n }\n return this.hasCooldownElapsed(this.lastShown.get(def.id), condition.cooldownDays);\n }\n\n private hasCooldownElapsed(timestamp: number | undefined, cooldownDays?: number): boolean {\n if (!timestamp || !cooldownDays) {\n return true;\n }\n return Date.now() - timestamp >= cooldownDays * DAY_IN_MS;\n }\n\n /** Marcar encuesta como contestada externamente */\n public markSurveyAnswered(surveyId: string): void {\n this.answeredSurveys.add(surveyId);\n this.markSurveyProgress(surveyId, 'COMPLETED');\n }\n\n /** Queue an exit popup so it can render after navigation */\n public queueExitPopup(surveyId: string, delaySeconds: number, sourceUrl?: string, popupId?: string): void {\n const def = this.findPopupDefinition(surveyId, popupId);\n if (!def) {\n this.debug('No popup definition for exit trigger', { surveyId, popupId });\n return;\n }\n\n const originUrl = sourceUrl || (typeof window !== 'undefined' ? window.location.href : '');\n if (!originUrl) {\n this.debug('Exit popup skipped: missing source URL', { surveyId });\n return;\n }\n\n if (!this.shouldShow(def, originUrl)) {\n this.debug('Exit popup skipped by conditions/path', { popupId: def.id, sourceUrl: originUrl });\n return;\n }\n\n const safeDelayMs = Number.isFinite(delaySeconds) ? Math.max(0, delaySeconds * 1000) : 0;\n const deferred: DeferredExitPopup = {\n id: def.id,\n surveyId: def.surveyId,\n sourceUrl: this.normalizeUrl(originUrl),\n dueAt: Date.now() + safeDelayMs,\n };\n\n const queue = this.getDeferredExitQueue().filter((item) => !(item.id === deferred.id && item.sourceUrl === deferred.sourceUrl));\n queue.push(deferred);\n this.setDeferredExitQueue(queue);\n this.scheduleDeferredExitPopup(deferred);\n this.debug('Exit popup queued', deferred);\n }\n\n private processDeferredExitQueue(): void {\n const queue = this.getDeferredExitQueue();\n if (!queue.length) return;\n\n const pending: DeferredExitPopup[] = [];\n const now = Date.now();\n queue.forEach((item) => {\n const def = this.popupDefinitions.find((popup) => popup.id === item.id && popup.surveyId === item.surveyId);\n if (!def) {\n return;\n }\n if (item.dueAt <= now) {\n this.tryShowDeferredExitPopup(item);\n return;\n }\n pending.push(item);\n this.scheduleDeferredExitPopup(item);\n });\n this.setDeferredExitQueue(pending);\n }\n\n private scheduleDeferredExitPopup(item: DeferredExitPopup): void {\n if (typeof window === 'undefined') return;\n const delay = Math.max(0, item.dueAt - Date.now());\n const timer = window.setTimeout(() => this.tryShowDeferredExitPopup(item), delay);\n this.deferredExitTimers.push(timer);\n }\n\n private tryShowDeferredExitPopup(item: DeferredExitPopup): void {\n const def = this.popupDefinitions.find((popup) => popup.id === item.id && popup.surveyId === item.surveyId);\n if (!def) {\n this.removeDeferredExitPopup(item);\n return;\n }\n\n const currentUrl = typeof window !== 'undefined' ? this.normalizeUrl(window.location.href || '') : '';\n if (!currentUrl || currentUrl === this.normalizeUrl(item.sourceUrl)) {\n this.removeDeferredExitPopup(item);\n this.debug('Exit popup dropped because route did not change', item);\n return;\n }\n\n if (!this.shouldShow(def, undefined, true)) {\n this.removeDeferredExitPopup(item);\n this.debug('Exit popup skipped at render-time conditions', item);\n return;\n }\n\n this.showDefinition(def);\n this.removeDeferredExitPopup(item);\n }\n\n private findPopupDefinition(surveyId: string, popupId?: string): NormalizedPopupDefinition | undefined {\n if (popupId) {\n const byId = this.popupDefinitions.find((popup) => popup.id === popupId);\n if (byId) return byId;\n }\n return this.popupDefinitions.find((popup) => popup.surveyId === surveyId);\n }\n\n private removeDeferredExitPopup(item: DeferredExitPopup): void {\n const queue = this.getDeferredExitQueue().filter((entry) => !(entry.id === item.id && entry.sourceUrl === item.sourceUrl));\n this.setDeferredExitQueue(queue);\n }\n\n private getDeferredExitQueue(): DeferredExitPopup[] {\n if (typeof window === 'undefined') return [];\n try {\n const raw = window.sessionStorage.getItem(EXIT_QUEUE_STORAGE_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) return [];\n return parsed\n .filter((entry: unknown): entry is DeferredExitPopup => {\n if (typeof entry !== 'object' || entry === null) return false;\n const item = entry as Partial<DeferredExitPopup>;\n return typeof item.id === 'string'\n && typeof item.surveyId === 'string'\n && typeof item.sourceUrl === 'string'\n && typeof item.dueAt === 'number'\n && Number.isFinite(item.dueAt);\n })\n .map((item) => ({\n ...item,\n sourceUrl: this.normalizeUrl(item.sourceUrl),\n }));\n } catch {\n return [];\n }\n }\n\n private setDeferredExitQueue(queue: DeferredExitPopup[]): void {\n if (typeof window === 'undefined') return;\n try {\n if (!queue.length) {\n window.sessionStorage.removeItem(EXIT_QUEUE_STORAGE_KEY);\n return;\n }\n window.sessionStorage.setItem(EXIT_QUEUE_STORAGE_KEY, JSON.stringify(queue));\n } catch {\n // Ignore storage errors in host environments that block storage access.\n }\n }\n\n /** Fetch al servidor para obtener popups */\n private async fetchPopupsFromServer(): Promise<unknown[]> {\n const apiKey = this.config?.apiKey;\n const baseUrl = this.baseUrl;\n const userId = this.config?.userId;\n if (!apiKey || !baseUrl) {\n this.log('Missing apiKey or baseUrl. Skipping popups fetch.');\n return [];\n }\n const filter = userId ? { where: { userId } } : null;\n const query = filter ? `?filter=${encodeURIComponent(JSON.stringify(filter))}` : '';\n const endpoint = `${baseUrl}/sdk/${encodeURIComponent(apiKey)}/popups${query}`;\n try {\n const response = await fetch(endpoint);\n if (!response.ok) {\n this.log('Failed to fetch popups', response.status, response.statusText);\n return [];\n }\n const raw = await response.text();\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) {\n this.log('Unexpected popups payload', parsed);\n return [];\n }\n this.debug('Fetched popups payload', parsed);\n return parsed;\n } catch (error) {\n this.log('Error fetching popups', error);\n return [];\n }\n }\n\n /** Envía los atributos de contact a la API (`POST /sdk/popups/contact`). */\n private async postContact(body: { publicKey: string; userId: string; userAttributes: ContactAttributes }): Promise<void> {\n const baseUrl = this.baseUrl;\n if (!baseUrl) return;\n const endpoint = `${baseUrl}/sdk/popups/contact`;\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (!response.ok) {\n this.log('Failed to post contact', response.status, response.statusText);\n return;\n }\n this.log('contact · sent attributes for user:', body.userId);\n } catch (error) {\n this.log('Error posting contact', error);\n }\n }\n\n /** Notifica eventos de popup a la API */\n private async postPopupEvent(status: POPUPSESSIONSTATUS, popupId: string, userId?: string): Promise<void> {\n const apiKey = this.config?.apiKey;\n const baseUrl = this.baseUrl;\n if (!apiKey || !baseUrl) {\n return;\n }\n const endpoint = `${baseUrl}/sdk/popups`;\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n publicKey: apiKey,\n status,\n popupId,\n userId: userId || undefined,\n }),\n });\n if (!response.ok) {\n this.log('Failed to post popup event', response.status, response.statusText);\n return;\n }\n // Contrato Fase 1 §6: el backend devuelve el sessionId; lo cacheamos para\n // inyectarlo en las respuestas de survey (lo cose por user_id).\n try {\n const data = await response.json();\n if (data && typeof data.sessionId === 'string') {\n this.tracking?.setSessionId(data.sessionId);\n this.log('tracking · session_id from backend:', data.sessionId);\n }\n } catch {\n // respuesta sin cuerpo JSON: nada que cachear\n }\n } catch (error) {\n this.log('Error posting popup event', error);\n }\n }\n\n /** Add an event listener */\n on(eventType: DeepdotsEventType, listener: EventListener): void {\n if (!this.listeners.has(eventType)) {\n this.listeners.set(eventType, new Set());\n }\n this.listeners.get(eventType)!.add(listener);\n }\n\n /** Remove an event listener */\n off(eventType: DeepdotsEventType, listener: EventListener): void {\n const listeners = this.listeners.get(eventType);\n if (listeners) {\n listeners.delete(listener);\n }\n }\n\n /** Setup popup container element */\n private setupPopupContainer(): void {\n if (typeof document === 'undefined') {\n return;\n }\n this.popupContainer = document.createElement('div');\n this.popupContainer.id = 'deepdots-popup-container';\n this.popupContainer.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: none;\n z-index: 999999;\n background: rgba(0, 0, 0, 0.5);\n justify-content: center;\n align-items: center;\n `;\n document.body.appendChild(this.popupContainer);\n }\n\n /** Render the popup UI */\n private renderPopup(surveyId: string, productId: string, actions?: PopupActions, style?: PopupStyle): void {\n const userId = this.tracking?.getUserId() ?? this.config?.userId;\n const sessionId = this.tracking?.getSessionId() ?? undefined;\n const miniService = this.analytics?.getMiniService() ?? undefined;\n const analyticsFeedbackSessionId = this.analyticsFeedbackSessionId;\n this.log('tracking · survey identity →', { userId: userId ?? null, sessionId: sessionId ?? null, miniService: miniService ?? null, analyticsFeedbackSessionId: analyticsFeedbackSessionId ?? null });\n if (this.renderer) {\n this.renderer.show(\n surveyId,\n productId,\n actions,\n (type, id, payload) => this.emitEvent(type, id, payload),\n () => this.hidePopup(),\n this.env,\n userId,\n style,\n sessionId,\n miniService,\n analyticsFeedbackSessionId,\n );\n return;\n }\n\n if (!this.popupContainer) return;\n const container = this.popupContainer;\n void import('../ui/renderPopup').then(({ renderPopup }) => {\n renderPopup(\n container,\n surveyId,\n productId,\n actions,\n (type, id, payload) => this.emitEvent(type, id, payload),\n () => this.hidePopup(),\n this.env,\n userId,\n style,\n sessionId,\n miniService,\n analyticsFeedbackSessionId,\n );\n });\n }\n\n /** Hide the popup */\n private hidePopup(): void {\n if (this.renderer) {\n this.renderer.hide();\n return;\n }\n if (this.popupContainer) {\n this.popupContainer.style.display = 'none';\n this.popupContainer.innerHTML = '';\n }\n }\n\n /** Emit an event */\n private emitEvent(type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>): void {\n const event: DeepdotsEvent = { type, surveyId, timestamp: Date.now(), data };\n this.log('Event emitted', event);\n\n const isPartialClick = type === 'popup_clicked' && data?.action === 'partial';\n if (isPartialClick) {\n this.markSurveyProgress(surveyId, 'PARTIAL');\n }\n if (type === 'survey_completed') {\n this.markSurveyAnswered(surveyId);\n }\n if (type === 'popup_shown' || type === 'survey_completed' || isPartialClick) {\n const popupIdFromData = data?.popupId as string | undefined;\n const popupId = popupIdFromData || this.surveyToPopupId.get(surveyId);\n if (popupId) {\n const userIdFromData = data?.userId as string | undefined;\n const status = type === 'popup_shown'\n ? POPUPSESSIONSTATUS.SHOWED\n : type === 'survey_completed'\n ? POPUPSESSIONSTATUS.COMPLETED\n : POPUPSESSIONSTATUS.PARTIAL;\n void this.postPopupEvent(status, popupId, userIdFromData || this.tracking?.getUserId() || this.config?.userId);\n } else {\n this.debug('No popupId available to post event', { type, surveyId });\n }\n }\n\n const listeners = this.listeners.get(type);\n if (listeners) {\n listeners.forEach((listener) => {\n try {\n listener(event);\n } catch (error) {\n if (this.logger.error) this.logger.error('Error in event listener:', error);\n else this.logger.log('Error in event listener:', error);\n }\n });\n }\n }\n\n /** Log debug messages */\n private log(...args: unknown[]): void {\n if (this.config?.debug) {\n this.logger.log('[DeepdotsPopups]', ...args);\n }\n }\n\n /** External debug method for triggers */\n public debug(...args: unknown[]): void {\n this.log(...args);\n }\n\n /** Set a custom renderer */\n public setRenderer(renderer: PopupRenderer): void {\n this.renderer = renderer;\n if (this.initialized && this.renderer.init) {\n this.renderer.init();\n }\n }\n\n private normalizeUrl(value: string): string {\n if (!value) return '';\n const withoutIndex = value.replace(/\\/index\\.html(?=($|[?#]))/i, '');\n return withoutIndex.length > 1 && withoutIndex.endsWith('/') ? withoutIndex.slice(0, -1) : withoutIndex;\n }\n\n private safeParseUrl(url: string): URL | null {\n if (!url) return null;\n try {\n return new URL(url, typeof window !== 'undefined' ? window.location.href : undefined);\n } catch {\n return null;\n }\n }\n\n private mapPopupTriggerType(type: PopupTrigger['type']): TriggerConfig['type'] | null {\n switch (type) {\n case 'time_on_page':\n return 'time';\n case 'scroll':\n return 'scroll';\n case 'exit':\n return 'exit';\n case 'click':\n return 'click';\n case 'event':\n return 'event';\n default:\n return null;\n }\n }\n\n private markSurveyProgress(surveyId: string, status: PopupTriggerConditionStatus): void {\n const current = this.surveyProgress.get(surveyId);\n if (current?.status === 'COMPLETED' && status !== 'COMPLETED') {\n return;\n }\n this.surveyProgress.set(surveyId, { status, timestamp: Date.now() });\n }\n\n private isPopupDefinition(value: unknown): value is NormalizedPopupDefinition {\n if (typeof value !== 'object' || value === null) return false;\n const popup = value as Partial<NormalizedPopupDefinition>;\n\n return typeof popup.id === 'string'\n && typeof popup.title === 'string'\n && typeof popup.message === 'string'\n && typeof popup.surveyId === 'string'\n && typeof popup.productId === 'string'\n && Array.isArray(popup.triggers)\n && popup.triggers.length > 0\n && popup.triggers.every((trigger) => this.isPopupTrigger(trigger))\n && (!popup.cooldown || popup.cooldown.every((condition) => this.isPopupTriggerCondition(condition)));\n }\n\n private isPopupTrigger(value: unknown): value is PopupTrigger {\n if (typeof value !== 'object' || value === null) return false;\n const trigger = value as Partial<PopupTrigger>;\n return this.isPopupTriggerType(trigger.type)\n && (typeof trigger.value === 'number' || typeof trigger.value === 'string');\n }\n\n private isPopupTriggerType(value: unknown): value is PopupTrigger['type'] {\n return value === 'time_on_page'\n || value === 'scroll'\n || value === 'exit'\n || value === 'click'\n || value === 'event';\n }\n\n private isPopupTriggerCondition(value: unknown): value is PopupTriggerCondition {\n if (typeof value !== 'object' || value === null) return false;\n const condition = value as Partial<PopupTriggerCondition>;\n return POPUP_TRIGGER_CONDITION_STATUSES.includes(condition.answered as PopupTriggerConditionStatus)\n && typeof condition.cooldownDays === 'number'\n && Number.isFinite(condition.cooldownDays)\n && condition.cooldownDays >= 0;\n }\n\n private isLegacyPopupTriggerCondition(value: unknown): value is LegacyPopupTriggerCondition {\n if (typeof value !== 'object' || value === null) return false;\n const condition = value as Partial<LegacyPopupTriggerCondition>;\n if (condition.answered !== undefined && typeof condition.answered !== 'boolean') {\n return false;\n }\n if (condition.cooldownDays !== undefined) {\n return typeof condition.cooldownDays === 'number'\n && Number.isFinite(condition.cooldownDays)\n && condition.cooldownDays >= 0;\n }\n return true;\n }\n\n private normalizeTriggers(value: unknown): PopupTrigger[] {\n const items = Array.isArray(value) ? value : value ? [value] : [];\n return items\n .filter((trigger): trigger is PopupTrigger => this.isPopupTrigger(trigger))\n .map((trigger) => ({\n type: trigger.type,\n value: trigger.value,\n }));\n }\n\n private normalizeCooldown(value: unknown): PopupTriggerCondition[] {\n if (!Array.isArray(value)) return [];\n return value.filter((condition): condition is PopupTriggerCondition => this.isPopupTriggerCondition(condition));\n }\n\n private normalizeLegacyConditions(value: unknown): LegacyPopupTriggerCondition[] {\n if (!Array.isArray(value)) return [];\n return value.filter((condition): condition is LegacyPopupTriggerCondition => this.isLegacyPopupTriggerCondition(condition));\n }\n\n private normalizePopupDefinition(def: unknown): NormalizedPopupDefinition | null {\n if (typeof def !== 'object' || def === null) return null;\n const raw = def as Partial<PopupDefinition> & {\n trigger?: PopupTrigger | PopupTrigger[];\n triggers?: PopupTrigger | PopupTrigger[];\n conditions?: LegacyPopupTriggerCondition[];\n cooldown?: PopupTriggerCondition[];\n };\n\n const rawTriggers = raw.triggers ?? raw.trigger;\n const triggers = this.normalizeTriggers(rawTriggers);\n if (!triggers.length) return null;\n\n const rawTriggerList = Array.isArray(rawTriggers) ? rawTriggers : rawTriggers ? [rawTriggers] : [];\n const legacyConditions = [\n ...this.normalizeLegacyConditions(raw.conditions),\n ...rawTriggerList.flatMap((trigger) => this.normalizeLegacyConditions((trigger as { condition?: unknown }).condition)),\n ];\n const cooldown = this.normalizeCooldown(raw.cooldown);\n\n return {\n ...(raw as PopupDefinition),\n triggers,\n cooldown,\n legacyConditions,\n };\n }\n\n private validatePopupDefinitions(defs: unknown[]): NormalizedPopupDefinition[] {\n return defs\n .map((def) => this.normalizePopupDefinition(def))\n .filter((def): def is NormalizedPopupDefinition => !!def && this.isPopupDefinition(def));\n }\n}\n","/**\n * Capa de Analytics (eventos GA-style) — canal SEPARADO del feedback de survey.\n *\n * El feedback de survey se envía con `magicfeedback.send()`. La analítica de\n * navegación/comportamiento (page views, mini-services, tasks/funnels, meaningful\n * interactions, findability…) va por un ENDPOINT PROPIO, vinculada por `user_id`.\n *\n * De momento NO se hace la llamada: el `sink` por defecto hace `console.log` del\n * payload exacto que se enviaría (dry-run), para poder verificarlo. Cuando el\n * endpoint exista, se sustituye el sink por un POST.\n */\n\nimport type { DeviceInfo } from './device-info';\n\nexport interface AnalyticsEvent {\n name: string;\n timestamp: number;\n params?: Record<string, unknown>;\n}\n\nexport interface AnalyticsEnvelope {\n /** Clave pública del cliente (auth). */\n publicKey?: string;\n /** Id que vincula la analítica al usuario (el backend cose por aquí). */\n userId: string | null;\n /** Session id del backend si ya se conoce (puede ir null). */\n sessionId: string | null;\n context: {\n platform: string; // 'web' | 'android' | 'ios' (RN inyecta la suya)\n language?: string;\n /** Info de dispositivo (Technology #11–13). */\n device?: DeviceInfo;\n /** User attributes del cliente, usados para breakdowns (registration_status, pass_type, …). */\n attributes: Record<string, string>;\n };\n events: AnalyticsEvent[];\n}\n\nexport type AnalyticsSink = (payload: AnalyticsEnvelope) => void;\n\n/** Identidad resuelta por el tracking, inyectada al construir el payload. */\nexport interface AnalyticsIdentity {\n userId: string | null;\n sessionId: string | null;\n}\n\n/**\n * Sink de dry-run: NO envía nada, solo vuelca lo que se enviaría por el `log` dado\n * (default `console.log`, o el logger inyectado por el host en init()).\n */\nexport function createDryRunSink(log: (...args: unknown[]) => void = console.log): AnalyticsSink {\n return (payload) =>\n log(\n '[DeepdotsAnalytics] (dry-run · NO enviado · sin init.analytics) POST /sdk/feedback →',\n JSON.stringify(payload, null, 2),\n );\n}\n\n/** Sink por defecto: NO envía nada, solo pinta por consola lo que se enviaría. */\nexport const dryRunSink: AnalyticsSink = createDryRunSink();\n\nexport interface AnalyticsManagerOptions {\n sink?: AnalyticsSink;\n now?: () => number;\n publicKey?: string;\n language?: string;\n device?: DeviceInfo;\n /** Plataforma del envelope (default 'web'; RN inyecta 'android'/'ios'). */\n platform?: string;\n /** Nº máximo de eventos en buffer antes de solicitar un flush automático (default 20). */\n maxBatchSize?: number;\n /** Callback invocado cuando el buffer alcanza `maxBatchSize`. El caller hace el flush real. */\n onFlushNeeded?: () => void;\n}\n\nexport class AnalyticsManager {\n private sink: AnalyticsSink;\n private now: () => number;\n private publicKey?: string;\n private language?: string;\n private device?: DeviceInfo;\n private platform: string;\n\n private events: AnalyticsEvent[] = [];\n private attributes: Record<string, string> = {};\n /** Mini-services activos: nombre → timestamp de entrada. El orden de inserción marca el \"más reciente\". */\n private activeMiniServices = new Map<string, number>();\n private maxBatchSize: number;\n private onFlushNeeded?: () => void;\n\n constructor(options: AnalyticsManagerOptions = {}) {\n this.sink = options.sink ?? dryRunSink;\n this.now = options.now ?? (() => Date.now());\n this.publicKey = options.publicKey;\n this.language = options.language;\n this.device = options.device;\n this.platform = options.platform ?? 'web';\n this.maxBatchSize = options.maxBatchSize ?? 20;\n this.onFlushNeeded = options.onFlushNeeded;\n }\n\n /** Actualiza campos de device en runtime (p.ej. country/city tras resolver geo). */\n updateDevice(partial: Partial<DeviceInfo>): void {\n this.device = { ...this.device, ...partial } as DeviceInfo;\n }\n\n /** Mezcla user attributes (se coercionan a string). Mutable en runtime. */\n setUserAttributes(attrs: Record<string, string | number | boolean>): void {\n for (const [k, v] of Object.entries(attrs)) {\n if (!k) continue;\n this.attributes[k] = String(v);\n }\n }\n\n /**\n * Marca el inicio de un mini-service; etiqueta los eventos siguientes con `mini_service`.\n * Admite varios activos a la vez (concurrencia); el \"actual\" para etiquetar es el más reciente.\n * Reentrar con un nombre ya activo refresca su orden y su tiempo de entrada.\n */\n enterMiniService(name: string, entryPointType?: string): void {\n this.activeMiniServices.delete(name); // reinsertar = pasa a ser el más reciente\n this.activeMiniServices.set(name, this.now());\n this.track('deepdots_mini_service_enter', { entry_point_type: entryPointType ?? null });\n }\n\n /**\n * Cierra el mini-service `name` emitiendo `mini_service_exit` con su duración (#27).\n * No-op si ese nombre no está activo. Cierre coherente con concurrencia.\n */\n exitMiniService(name: string): void {\n const enteredAt = this.activeMiniServices.get(name);\n if (enteredAt === undefined) return;\n const durationSeconds = Math.max(0, Math.round((this.now() - enteredAt) / 1000));\n this.activeMiniServices.delete(name); // dejar de etiquetar con este antes de emitir\n this.track('deepdots_mini_service_exit', { mini_service: name, duration_seconds: durationSeconds });\n }\n\n /** Cierra TODOS los mini-services activos (orden LIFO). Para el cierre por lifecycle (background/cierre). */\n exitAllMiniServices(): void {\n for (const name of Array.from(this.activeMiniServices.keys()).reverse()) {\n this.exitMiniService(name);\n }\n }\n\n /** Registra un evento de analítica (modelo GA: nombre + params). */\n track(name: string, params?: Record<string, unknown>): void {\n const current = this.getMiniService();\n const merged: Record<string, unknown> = {\n ...(current ? { mini_service: current } : {}),\n ...(params ?? {}),\n };\n this.events.push({\n name,\n timestamp: this.now(),\n params: Object.keys(merged).length ? merged : undefined,\n });\n if (this.events.length >= this.maxBatchSize) {\n this.onFlushNeeded?.();\n }\n }\n\n /** Mini-service actual (el más reciente aún activo) para etiquetar eventos + metadata del survey (#33). */\n getMiniService(): string | null {\n let last: string | null = null;\n for (const name of this.activeMiniServices.keys()) last = name; // última clave = más reciente\n return last;\n }\n\n /** Nº de eventos pendientes de flush. */\n pending(): number {\n return this.events.length;\n }\n\n /** Construye el envelope que se enviaría al endpoint de analytics. */\n buildPayload(identity: AnalyticsIdentity): AnalyticsEnvelope {\n return {\n publicKey: this.publicKey,\n userId: identity.userId,\n sessionId: identity.sessionId,\n context: {\n platform: this.platform,\n language: this.language,\n device: this.device,\n attributes: { ...this.attributes },\n },\n events: [...this.events],\n };\n }\n\n /** Envía (vía sink) el lote acumulado y vacía el buffer. No-op si no hay eventos. */\n flush(identity: AnalyticsIdentity): AnalyticsEnvelope | null {\n if (this.events.length === 0) return null;\n const payload = this.buildPayload(identity);\n this.sink(payload);\n this.events = [];\n return payload;\n }\n}\n","/**\n * Mapeo del envelope de analytics → body de `POST /sdk/feedback`.\n *\n * La analítica se envía como un Feedback del modelo del Surveys SDK, agrupado por una\n * INTEGRACIÓN creada en la plataforma. Se manda en streaming con `completed:false` y\n * `finished:false` (nunca se \"cierra\"); el backend cose por `sessionId` + `user_id`.\n *\n * Encoding:\n * - todo va en `feedback.metadata`: contexto (user_id, session_id, platform…) + eventos\n * - cada entrada usa `value: string[]` (array de un elemento)\n * - eventos: {key: nombre_evento, value: [JSON(timestamp + params)]}\n * - identidad (user_id) → `profile` como `external-user-id`\n * - `answers` vacío, `metrics` no se usa\n * - `text` vacío\n */\n\nimport type { AnalyticsEnvelope, AnalyticsSink } from './analytics-manager';\n\nexport interface AnalyticsKeys {\n publicKey: string;\n integration: string;\n}\n\nexport interface FeedbackKV {\n key: string;\n value: string[];\n}\n\nexport interface AnalyticsFeedbackBody {\n feedback: {\n text: string;\n answers: FeedbackKV[];\n metadata: FeedbackKV[];\n profile: FeedbackKV[];\n finished: boolean;\n };\n publicKey: string;\n integration: string;\n completed: boolean;\n finished?: boolean;\n /** sessionId devuelto por el primer POST; permite que el backend agrupe todos los eventos en un solo registro. */\n sessionId?: string;\n}\n\n/** Inserta un par key/value en la lista solo si el valor está definido y no es vacío. */\nfunction pushKV(list: FeedbackKV[], key: string, value: unknown): void {\n if (value === undefined || value === null || value === '') return;\n list.push({ key, value: [String(value)] });\n}\n\nexport function buildAnalyticsFeedbackBody(\n envelope: AnalyticsEnvelope,\n keys: AnalyticsKeys,\n feedbackSessionId?: string,\n): AnalyticsFeedbackBody {\n const { context } = envelope;\n\n const profile: FeedbackKV[] = [];\n pushKV(profile, 'external-user-id', envelope.userId);\n\n // Todo va en metadata: contexto del sistema (prefijo deepdots_) + atributos de usuario + eventos\n const metadata: FeedbackKV[] = [];\n pushKV(metadata, 'deepdots_user_id', envelope.userId);\n pushKV(metadata, 'deepdots_session_id', envelope.sessionId);\n pushKV(metadata, 'deepdots_platform', context.platform);\n pushKV(metadata, 'deepdots_language', context.language);\n if (context.device) {\n const d = context.device;\n pushKV(metadata, 'deepdots_device_type', d.device_type);\n pushKV(metadata, 'deepdots_os_version', d.os_version);\n pushKV(metadata, 'deepdots_device_model', d.device_model);\n pushKV(metadata, 'deepdots_app_version', d.app_version);\n pushKV(metadata, 'deepdots_user_agent', d.user_agent);\n pushKV(metadata, 'deepdots_timezone', d.timezone);\n pushKV(metadata, 'deepdots_referrer', d.referrer);\n pushKV(metadata, 'deepdots_viewport_size', d.viewport_size);\n pushKV(metadata, 'deepdots_screen_resolution', d.screen_resolution);\n pushKV(metadata, 'deepdots_pixel_ratio', d.pixel_ratio);\n pushKV(metadata, 'deepdots_entry_type', d.entry_type);\n pushKV(metadata, 'deepdots_page_load_ms', d.page_load_ms);\n pushKV(metadata, 'deepdots_connection_type', d.connection_type);\n pushKV(metadata, 'deepdots_country', d.country);\n pushKV(metadata, 'deepdots_city', d.city);\n }\n for (const [k, v] of Object.entries(context.attributes ?? {})) {\n pushKV(metadata, k, v);\n }\n for (const e of envelope.events) {\n metadata.push({\n key: e.name,\n value: [JSON.stringify({ timestamp: e.timestamp, ...(e.params ?? {}) })],\n });\n }\n\n return {\n feedback: {\n text: '',\n answers: [],\n metadata,\n profile,\n finished: false,\n },\n publicKey: keys.publicKey,\n integration: keys.integration,\n completed: false,\n ...(feedbackSessionId ? { sessionId: feedbackSessionId } : {}),\n };\n}\n\nexport interface FeedbackSinkOptions {\n /** Base URL del backend (api(.|-dev.)deepdots.com) ya resuelta por el entorno. */\n baseUrl: string;\n keys: AnalyticsKeys;\n /** Logger opcional (gated por debug). */\n log?: (...args: unknown[]) => void;\n /** fetch inyectable (tests / RN). */\n fetchImpl?: typeof fetch;\n /** Callback invocado cuando el backend devuelve un nuevo sessionId (primer POST). */\n onSessionId?: (id: string) => void;\n}\n\n/**\n * Sink real: transforma el envelope y hace `POST {baseUrl}/sdk/feedback`.\n * Fire-and-forget (no bloquea el flush); errores solo se loguean.\n * Stateful: cachea el `sessionId` que devuelve el backend en la primera respuesta\n * y lo envía en los siguientes POSTs para que el backend agrupe todos los eventos\n * en un único registro de feedback.\n */\nexport function createFeedbackSink(options: FeedbackSinkOptions): AnalyticsSink {\n let feedbackSessionId: string | undefined;\n\n return (envelope: AnalyticsEnvelope) => {\n const body = buildAnalyticsFeedbackBody(envelope, options.keys, feedbackSessionId);\n const f = options.fetchImpl ?? (typeof fetch !== 'undefined' ? fetch : undefined);\n if (!f) {\n options.log?.('[DeepdotsAnalytics] no fetch disponible; payload no enviado', body);\n return;\n }\n options.log?.('[DeepdotsAnalytics] POST /sdk/feedback →', body);\n f(`${options.baseUrl}/sdk/feedback`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n .then(async (res) => {\n if (res.ok) {\n try {\n const data = (await res.json()) as { sessionId?: string };\n if (data?.sessionId && data.sessionId !== feedbackSessionId) {\n feedbackSessionId = data.sessionId;\n options.log?.('[DeepdotsAnalytics] feedbackSessionId cacheado:', feedbackSessionId);\n options.onSessionId?.(feedbackSessionId);\n }\n } catch {\n /* respuesta sin JSON — ignorar */\n }\n }\n })\n .catch((err) => options.log?.('[DeepdotsAnalytics] error enviando feedback', err));\n };\n}\n","/**\n * Observador de navegación (Fase 2). Detecta cambios de pantalla y emite \"visitas\"\n * completadas (screen + entrada/salida/duración) cuando se abandona una pantalla.\n *\n * En Web se engancha a la History API (pushState/replaceState/popstate/hashchange).\n * La lógica de timing y normalización es pura y testeable sin DOM (vía `begin`/`visit`/`stop`\n * y un reloj inyectable).\n *\n * El consumidor (DeepdotsPopups) reenvía cada visita como un evento `page_view` por el\n * canal de analytics; el grafo se reconstruye en backend por orden + timestamp.\n */\n\nexport interface ScreenVisit {\n screen: string;\n entry: number;\n exit: number;\n durationSeconds: number;\n}\n\nexport type VisitListener = (visit: ScreenVisit) => void;\n\nconst UUID_PREFIX = /^[0-9a-f]{8}-[0-9a-f]{4}-/i;\n\n/** Normaliza una URL a un nombre de pantalla: path (+hash route), sin query, IDs → :id. */\nexport function normalizeScreen(href: string): string {\n let pathAndHash: string;\n try {\n const u = new URL(href, 'http://deepdots.local');\n pathAndHash = u.pathname + (u.hash || '');\n } catch {\n pathAndHash = href;\n }\n // quitar query (incluida la que pueda venir dentro del hash route)\n pathAndHash = pathAndHash.replace(/\\?[^#]*/g, '');\n const collapsed = pathAndHash\n .split('/')\n .map((seg) => (/^[0-9]+$/.test(seg) || UUID_PREFIX.test(seg) ? ':id' : seg))\n .join('/');\n return collapsed || '/';\n}\n\nexport interface NavigationObserverOptions {\n now?: () => number;\n}\n\nexport class NavigationObserver {\n private now: () => number;\n private listeners = new Set<VisitListener>();\n private currentScreen: string | null = null;\n private entryAt = 0;\n private installed = false;\n private domHandlers: Array<() => void> = [];\n\n constructor(options: NavigationObserverOptions = {}) {\n this.now = options.now ?? (() => Date.now());\n }\n\n onVisit(listener: VisitListener): void {\n this.listeners.add(listener);\n }\n\n /** Fija la pantalla inicial (sin emitir visita; su duración se cierra al salir). */\n begin(href: string): void {\n this.currentScreen = normalizeScreen(href);\n this.entryAt = this.now();\n }\n\n /** Navega a una pantalla nueva: cierra la anterior (emite visita) y abre la nueva. */\n visit(href: string): void {\n const next = normalizeScreen(href);\n if (next === this.currentScreen) return; // misma pantalla → no es una visita nueva\n this.closeCurrent();\n this.currentScreen = next;\n this.entryAt = this.now();\n }\n\n /** Cierra la pantalla actual emitiendo su visita (p. ej. al cerrar la app/pestaña). */\n stop(): void {\n this.closeCurrent();\n this.currentScreen = null;\n }\n\n private closeCurrent(): void {\n if (this.currentScreen == null) return;\n const exit = this.now();\n const visit: ScreenVisit = {\n screen: this.currentScreen,\n entry: this.entryAt,\n exit,\n durationSeconds: Math.max(0, Math.round((exit - this.entryAt) / 1000)),\n };\n this.listeners.forEach((l) => {\n try {\n l(visit);\n } catch {\n /* listener no debe romper la navegación */\n }\n });\n }\n\n /** Instala los hooks de History en el navegador y registra la pantalla actual. */\n install(): void {\n if (this.installed || typeof window === 'undefined' || typeof history === 'undefined') return;\n this.installed = true;\n\n const handle = () => this.visit(window.location.href);\n\n const originalPush = history.pushState.bind(history);\n const originalReplace = history.replaceState.bind(history);\n history.pushState = (data: unknown, unused: string, url?: string | URL | null) => {\n const r = originalPush(data as never, unused, url as never);\n handle();\n return r;\n };\n history.replaceState = (data: unknown, unused: string, url?: string | URL | null) => {\n const r = originalReplace(data as never, unused, url as never);\n handle();\n return r;\n };\n window.addEventListener('popstate', handle);\n window.addEventListener('hashchange', handle);\n\n this.domHandlers.push(() => {\n history.pushState = originalPush;\n history.replaceState = originalReplace;\n window.removeEventListener('popstate', handle);\n window.removeEventListener('hashchange', handle);\n });\n\n this.begin(window.location.href);\n }\n\n uninstall(): void {\n this.domHandlers.forEach((off) => off());\n this.domHandlers = [];\n this.installed = false;\n }\n}\n","/**\n * Device info para el context de analytics (Technology #11–13).\n *\n * En Web enviamos `device_type` + `user_agent` crudo y dejamos que el backend\n * derive OS/navegador del UA (como hace GA). Los campos adicionales (timezone,\n * referrer, viewport, etc.) se recogen de las APIs del navegador sin permisos.\n * `country`/`city` se rellenan de forma asíncrona (ver geo-info.ts).\n * En KMP las APIs nativas dan os_version/device_model reales.\n */\n\nexport interface DeviceInfo {\n device_type: 'mobile' | 'tablet' | 'desktop';\n os_version?: string;\n device_model?: string;\n app_version?: string;\n user_agent?: string;\n timezone?: string;\n referrer?: string;\n viewport_size?: string;\n screen_resolution?: string;\n pixel_ratio?: number;\n entry_type?: string;\n page_load_ms?: number;\n connection_type?: string;\n country?: string;\n city?: string;\n}\n\nexport function parseDeviceType(ua: string): 'mobile' | 'tablet' | 'desktop' {\n const s = (ua || '').toLowerCase();\n if (/ipad|tablet|playbook|silk/.test(s) || (/android/.test(s) && !/mobile/.test(s))) {\n return 'tablet';\n }\n if (/mobi|iphone|ipod|windows phone/.test(s) || (/android/.test(s) && /mobile/.test(s))) {\n return 'mobile';\n }\n return 'desktop';\n}\n\nfunction getEntryType(): string | undefined {\n if (typeof performance === 'undefined') return undefined;\n const entries = performance.getEntriesByType('navigation');\n if (!entries.length) return undefined;\n return (entries[0] as PerformanceNavigationTiming).type;\n}\n\nfunction getPageLoadMs(): number | undefined {\n if (typeof performance === 'undefined') return undefined;\n const entries = performance.getEntriesByType('navigation');\n if (!entries.length) return undefined;\n const load = (entries[0] as PerformanceNavigationTiming).loadEventEnd;\n return load > 0 ? Math.round(load) : undefined;\n}\n\nfunction getConnectionType(): string | undefined {\n if (typeof navigator === 'undefined') return undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (navigator as any).connection?.effectiveType ?? undefined;\n}\n\nexport function collectDeviceInfo(appVersion?: string): DeviceInfo {\n const ua = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return {\n device_type: parseDeviceType(ua),\n user_agent: ua || undefined,\n app_version: appVersion,\n timezone: typeof Intl !== 'undefined' ? Intl.DateTimeFormat().resolvedOptions().timeZone : undefined,\n referrer: typeof document !== 'undefined' && document.referrer ? document.referrer : undefined,\n viewport_size:\n typeof window !== 'undefined' ? `${window.innerWidth}x${window.innerHeight}` : undefined,\n screen_resolution:\n typeof screen !== 'undefined' ? `${screen.width}x${screen.height}` : undefined,\n pixel_ratio: typeof window !== 'undefined' ? window.devicePixelRatio : undefined,\n entry_type: getEntryType(),\n page_load_ms: getPageLoadMs(),\n connection_type: getConnectionType(),\n };\n}\n","/**\n * Geolocalización por IP vía ipapi.co (Option B: client-side).\n * Fire-and-forget: se llama en init() y rellena country/city en el DeviceInfo\n * cuando resuelve. Tolerante a fallos (ad-blockers, rate-limit, red).\n */\n\nexport interface GeoInfo {\n country?: string;\n city?: string;\n}\n\nexport async function collectGeoInfo(fetchImpl?: typeof fetch): Promise<GeoInfo | null> {\n const f = fetchImpl ?? (typeof fetch !== 'undefined' ? fetch : undefined);\n if (!f) return null;\n try {\n const res = await f('https://ipapi.co/json/');\n if (!res.ok) return null;\n const data = (await res.json()) as Record<string, unknown>;\n const country = (data.country_code as string) || undefined;\n const city = (data.city as string) || undefined;\n if (!country && !city) return null;\n return { country, city };\n } catch {\n return null;\n }\n}\n","/**\n * Mide el tiempo ACTIVO (en primer plano), estilo GA4 (engagement time).\n * Acumula mientras está \"resumed\" (pestaña visible / app en foreground) y pausa en\n * background. `consume()` devuelve los ms activos desde la última lectura y reinicia,\n * dejando el timer corriendo. El consumidor emite un evento `user_engagement` con\n * `engagement_time_msec`; el backend lo suma por sesión → \"Average Time Spent per Session\" (#8).\n */\nexport class EngagementTracker {\n private now: () => number;\n private activeMs = 0;\n private lastResumeAt: number | null = null;\n\n constructor(now: () => number = () => Date.now()) {\n this.now = now;\n }\n\n /** Reanuda el conteo (pestaña visible / app en foreground). Idempotente. */\n resume(): void {\n if (this.lastResumeAt === null) this.lastResumeAt = this.now();\n }\n\n /** Pausa el conteo (pestaña oculta / app en background), acumulando el tramo activo. */\n pause(): void {\n if (this.lastResumeAt !== null) {\n this.activeMs += this.now() - this.lastResumeAt;\n this.lastResumeAt = null;\n }\n }\n\n /** Devuelve los ms activos acumulados desde la última lectura y reinicia (sin parar el timer). */\n consume(): number {\n if (this.lastResumeAt !== null) {\n const t = this.now();\n this.activeMs += t - this.lastResumeAt;\n this.lastResumeAt = t;\n }\n const ms = this.activeMs;\n this.activeMs = 0;\n return ms;\n }\n\n isActive(): boolean {\n return this.lastResumeAt !== null;\n }\n}\n","import type { KeyValueStorage } from '../tracking/tracking-manager';\nimport { STORAGE_KEYS } from '../tracking/tracking-manager';\n\n/** Valor de un atributo de contact (info interna del usuario que solo conoce el host). */\nexport type ContactAttributeValue = string | number | boolean;\nexport type ContactAttributes = Record<string, ContactAttributeValue>;\n\n/** Body de `POST /sdk/popups/contact`. */\nexport interface ContactBody {\n publicKey: string;\n userId: string;\n userAttributes: ContactAttributes;\n}\n\nexport interface ContactManagerOptions {\n storage: KeyValueStorage;\n publicKey: string;\n userId: string;\n /** Envío real (inyectable para tests): hace el `POST /sdk/popups/contact`. */\n post: (body: ContactBody) => Promise<void>;\n}\n\n/** Serialización estable (claves ordenadas) para el diff contra lo último enviado. */\nfunction stableSerialize(attrs: ContactAttributes): string {\n const sorted: ContactAttributes = {};\n for (const key of Object.keys(attrs).sort()) {\n sorted[key] = attrs[key];\n }\n return JSON.stringify(sorted);\n}\n\n/**\n * Gestiona los atributos de contact del usuario identificado (`userId` del init).\n * Solo envía cuando cambian respecto a lo último persistido en storage, para ahorrar\n * peticiones (el host puede llamar `setAttributes` en cada identificación sin miedo).\n */\nexport class ContactManager {\n private readonly storage: KeyValueStorage;\n private readonly publicKey: string;\n private readonly userId: string;\n private readonly post: (body: ContactBody) => Promise<void>;\n\n constructor(options: ContactManagerOptions) {\n this.storage = options.storage;\n this.publicKey = options.publicKey;\n this.userId = options.userId;\n this.post = options.post;\n }\n\n /**\n * Envía los atributos si cambiaron respecto a lo último enviado.\n * @returns `true` si se envió, `false` si no hubo cambios.\n */\n async setAttributes(attributes: ContactAttributes): Promise<boolean> {\n const serialized = stableSerialize(attributes);\n const last = this.storage.getItem(STORAGE_KEYS.contactAttributes);\n if (last === serialized) return false;\n\n await this.post({\n publicKey: this.publicKey,\n userId: this.userId,\n userAttributes: attributes,\n });\n this.storage.setItem(STORAGE_KEYS.contactAttributes, serialized);\n return true;\n }\n}\n","/**\n * Crash & error reporting (Stability #14–17) — captura de errores GESTIONADOS.\n *\n * - `reportError()`: API pública para el host (app viva) → emite `deepdots_app_crash` ya.\n * - handlers de `window` (errores no capturados): persisten a disco y se reenvían\n * en el siguiente arranque (el proceso puede morir antes del flush normal).\n *\n * El contexto de device/sesión se captura EN EL MOMENTO del crash y se guarda en el\n * record — no se lee del envelope en el replay (el replay puede ocurrir en otra\n * app_version/OS). Las dims OS/device en Web suelen ir vacías (se derivan del UA en backend).\n */\n\nimport type { KeyValueStorage } from '../tracking/tracking-manager';\n\nexport type CrashSeverity = 'fatal' | 'error' | 'warning';\n\nexport interface CrashRecord {\n crashedAt: number;\n crashType: string;\n message: string;\n stack: string;\n fatal: boolean;\n handled: boolean;\n severity: CrashSeverity;\n sessionId: string | null;\n appVersion?: string;\n osVersion?: string;\n deviceModel?: string;\n context?: Record<string, string>;\n}\n\nexport interface ReportErrorOptions {\n severity?: CrashSeverity;\n handled?: boolean;\n context?: Record<string, unknown>;\n}\n\nexport interface DeviceSnapshot {\n appVersion?: string;\n osVersion?: string;\n deviceModel?: string;\n}\n\n/** Forma mínima de `global.ErrorUtils` de React Native. */\nexport interface ReactNativeErrorUtils {\n getGlobalHandler?(): ((error: unknown, isFatal?: boolean) => void) | undefined;\n setGlobalHandler(handler: (error: unknown, isFatal?: boolean) => void): void;\n}\n\nexport interface CrashReporterOptions {\n storage: KeyValueStorage;\n /** Emite un evento deepdots_app_crash AHORA (app viva). */\n emit: (params: Record<string, unknown>) => void;\n /** Snapshot de device en el momento del crash. */\n device: () => DeviceSnapshot;\n /** session_id en el momento del crash. */\n sessionId: () => string | null;\n now?: () => number;\n /** Kill-switch de consentimiento. */\n enabled?: () => boolean;\n}\n\nconst STACK_MAX = 8000;\nconst QUEUE_KEY = 'deepdots.crash.queue';\nconst MAX_QUEUED = 20;\n\n/** Convierte un CrashRecord en los params del evento `deepdots_app_crash` (omite undefined). */\nexport function crashRecordToParams(r: CrashRecord): Record<string, unknown> {\n const params: Record<string, unknown> = {\n crashed_at: r.crashedAt,\n crash_type: r.crashType,\n message: r.message,\n stack: r.stack,\n fatal: r.fatal,\n handled: r.handled,\n severity: r.severity,\n };\n if (r.sessionId) params.crashed_session_id = r.sessionId;\n if (r.appVersion) params.crashed_app_version = r.appVersion;\n if (r.osVersion) params.crashed_os_version = r.osVersion;\n if (r.deviceModel) params.crashed_device_model = r.deviceModel;\n if (r.context) {\n for (const [k, v] of Object.entries(r.context)) params[`ctx_${k}`] = v;\n }\n return params;\n}\n\nexport class CrashReporter {\n private options: CrashReporterOptions;\n private now: () => number;\n\n constructor(options: CrashReporterOptions) {\n this.options = options;\n this.now = options.now ?? (() => Date.now());\n }\n\n private isEnabled(): boolean {\n return this.options.enabled ? this.options.enabled() : true;\n }\n\n /** Construye un CrashRecord capturando contexto en el momento del crash. */\n private buildRecord(\n error: unknown,\n severity: CrashSeverity,\n handled: boolean,\n fatal: boolean,\n context?: Record<string, unknown>,\n ): CrashRecord {\n const err = error as { name?: string; message?: string; stack?: string };\n const isErr = error instanceof Error;\n const dev = this.options.device();\n const ctx = context\n ? Object.fromEntries(Object.entries(context).map(([k, v]) => [k, String(v)]))\n : undefined;\n return {\n crashedAt: this.now(),\n crashType: (isErr && err.name) || 'Error',\n message: isErr ? String(err.message ?? '') : String(error),\n stack: (isErr && typeof err.stack === 'string' ? err.stack : '').slice(0, STACK_MAX),\n fatal,\n handled,\n severity,\n sessionId: this.options.sessionId(),\n appVersion: dev.appVersion,\n osVersion: dev.osVersion,\n deviceModel: dev.deviceModel,\n context: ctx,\n };\n }\n\n /** API pública del host: reporta un error (app viva) → emite el evento ya. */\n reportError(error: unknown, options: ReportErrorOptions = {}): void {\n if (!this.isEnabled()) return;\n const severity = options.severity ?? 'error';\n const handled = options.handled ?? true;\n const fatal = severity === 'fatal';\n const record = this.buildRecord(error, severity, handled, fatal, options.context);\n this.options.emit(crashRecordToParams(record));\n }\n\n /** Captura un error no manejado (fatal) → persiste a disco para replay en el siguiente arranque. */\n captureUnhandled(error: unknown): void {\n this.persist(this.buildRecord(error, 'fatal', false, true));\n }\n\n /** Persiste un crash no capturado a disco para reenviarlo en el siguiente arranque. */\n private persist(record: CrashRecord): void {\n let queue: CrashRecord[] = [];\n try {\n const raw = this.options.storage.getItem(QUEUE_KEY);\n if (raw) queue = JSON.parse(raw) as CrashRecord[];\n if (!Array.isArray(queue)) queue = [];\n } catch {\n queue = [];\n }\n queue.push(record);\n if (queue.length > MAX_QUEUED) queue = queue.slice(queue.length - MAX_QUEUED);\n try {\n this.options.storage.setItem(QUEUE_KEY, JSON.stringify(queue));\n } catch {\n /* storage lleno / no disponible — se pierde el crash, no rompemos la app */\n }\n }\n\n /** Lee y vacía la cola de crashes pendientes (llamado en init para el replay). */\n drainPendingCrashes(): CrashRecord[] {\n let queue: CrashRecord[] = [];\n try {\n const raw = this.options.storage.getItem(QUEUE_KEY);\n if (raw) queue = JSON.parse(raw) as CrashRecord[];\n if (!Array.isArray(queue)) queue = [];\n } catch {\n queue = [];\n }\n if (queue.length) {\n try { this.options.storage.removeItem(QUEUE_KEY); } catch { /* noop */ }\n }\n return queue;\n }\n\n /** Instala los handlers globales de errores no capturados (no-op sin `window`). */\n install(): void {\n // En React Native `window` existe pero NO tiene addEventListener; comprobamos\n // la capacidad, no solo la existencia de `window`. En RN el host usa\n // installReactNative(ErrorUtils) para capturar los errores no manejados.\n if (typeof window === 'undefined' || typeof window.addEventListener !== 'function') return;\n window.addEventListener('error', (e: ErrorEvent) => {\n if (!this.isEnabled()) return;\n this.captureUnhandled(e.error ?? e.message ?? 'error');\n });\n window.addEventListener('unhandledrejection', (e: PromiseRejectionEvent) => {\n if (!this.isEnabled()) return;\n this.captureUnhandled(e.reason ?? 'unhandledrejection');\n });\n }\n\n /** Engancha `global.ErrorUtils` de RN (no hay `window`): persiste y encadena al handler previo. */\n installReactNative(errorUtils: ReactNativeErrorUtils): void {\n const previous = errorUtils.getGlobalHandler?.();\n errorUtils.setGlobalHandler((error: unknown, isFatal?: boolean) => {\n if (this.isEnabled()) this.captureUnhandled(error);\n previous?.(error, isFatal);\n });\n }\n\n /** @internal Test seam: ejercita el camino de persistencia (window handlers no son testeables en vitest). */\n _persistForTest(error: unknown): void {\n this.captureUnhandled(error);\n }\n}\n","/**\n * Messaging (#18–22): tracking de notificaciones del host (push / in-app).\n * Un único evento reservado `deepdots_message` con un campo `stage` discriminador;\n * el funnel se correlaciona por `message_id` y se agrupa por `message_title`.\n */\n\nexport type MessageStage = 'delivered' | 'clicked' | 'converted';\n\nexport interface TrackMessageOptions {\n /** Identificador del mensaje/notificación — correlaciona el funnel delivered→clicked→converted. */\n id: string;\n /** Título del mensaje — dimensión de agrupación de #18–22. */\n title: string;\n /** Canal de entrega. */\n channel: 'push' | 'in_app';\n /** Nombre de la campaña (opcional). */\n campaign?: string;\n /** Valor de conversión (opcional, típico en `stage: 'converted'`). */\n value?: number;\n currency?: string;\n /** Parámetros libres adicionales. */\n params?: Record<string, unknown>;\n}\n\n/** Construye los params del evento `deepdots_message` (omite opcionales ausentes). */\nexport function buildMessageParams(stage: MessageStage, o: TrackMessageOptions): Record<string, unknown> {\n const p: Record<string, unknown> = {\n stage,\n message_id: o.id,\n message_title: o.title,\n channel: o.channel,\n };\n if (o.campaign) p.campaign = o.campaign;\n if (o.value !== undefined) p.value = o.value;\n if (o.currency) p.currency = o.currency;\n return { ...p, ...(o.params ?? {}) };\n}\n","/**\n * Auto-wiring de React Native: concentra TODA la configuración en el SDK para que el\n * host solo tenga que envolver su app en un `<DeepdotsProvider config={...}>`.\n *\n * No importa React ni librerías nativas: el host (o el Provider) le pasa los módulos\n * nativos que tenga instalados (MMKV, device-info, AppState). Todo es opcional y degrada\n * con elegancia (sin MMKV → in-memory; sin device-info → sin device info).\n */\nimport type { DeepdotsPopups } from '../core/deepdots-popups';\nimport type { DeepdotsInitParams } from '../types';\nimport type { KeyValueStorage } from '../tracking/tracking-manager';\nimport type { DeviceInfo } from '../analytics/device-info';\nimport type { PopupRenderer } from '../platform/renderer';\nimport type { ReactNativeErrorUtils } from '../analytics/crash-reporter';\n\n/** Forma mínima de `react-native-mmkv` (instancia MMKV). */\nexport interface MmkvLike {\n getString(key: string): string | undefined | null;\n set(key: string, value: string): void;\n delete(key: string): void;\n}\n\n/** Forma mínima de `react-native-device-info`. */\nexport interface DeviceInfoLike {\n isTablet?: () => boolean;\n getSystemVersion?: () => string;\n getDeviceId?: () => string;\n getVersion?: () => string;\n}\n\n/** Forma mínima de `AppState` de react-native. */\nexport interface AppStateLike {\n addEventListener(type: 'change', listener: (state: string) => void): { remove: () => void } | void;\n}\n\nexport interface ReactNativeSetupDeps {\n mmkv?: MmkvLike | null;\n deviceInfo?: DeviceInfoLike | null;\n appState?: AppStateLike | null;\n platform?: 'web' | 'android' | 'ios';\n renderer?: PopupRenderer;\n /** `global.ErrorUtils` de RN (para capturar errores JS no manejados). Default: `globalThis.ErrorUtils`. */\n errorUtils?: ReactNativeErrorUtils | null;\n}\n\n/** Adaptador KeyValueStorage (síncrono) sobre una instancia de MMKV. */\nexport function mmkvStorage(mmkv: MmkvLike): KeyValueStorage {\n return {\n getItem: (k) => mmkv.getString(k) ?? null,\n setItem: (k, v) => mmkv.set(k, v),\n removeItem: (k) => mmkv.delete(k),\n };\n}\n\n/** Recoge device info desde react-native-device-info (Technology #11–13). */\nexport function collectRnDevice(d: DeviceInfoLike): DeviceInfo {\n return {\n device_type: d.isTablet?.() ? 'tablet' : 'mobile',\n os_version: d.getSystemVersion?.(),\n device_model: d.getDeviceId?.(),\n app_version: d.getVersion?.(),\n };\n}\n\n/**\n * Configura el SDK para React Native en una sola llamada: storage persistente (MMKV),\n * device info, platform, init y lifecycle (AppState → onForeground/onBackground).\n * Devuelve una función de limpieza (quita el listener de AppState).\n */\nexport function setupReactNative(\n sdk: DeepdotsPopups,\n config: DeepdotsInitParams,\n deps: ReactNativeSetupDeps = {},\n): () => void {\n if (deps.renderer) sdk.setRenderer(deps.renderer);\n\n const storage = deps.mmkv ? mmkvStorage(deps.mmkv) : config.storage;\n const device = deps.deviceInfo ? collectRnDevice(deps.deviceInfo) : config.device;\n const platform = deps.platform ?? config.platform;\n\n sdk.init({ ...config, storage, device, platform });\n\n // Captura de errores JS no manejados en RN (no hay `window`): usa el ErrorUtils inyectado\n // o el global del runtime RN. Degrada si no existe.\n const errorUtils =\n deps.errorUtils ?? (globalThis as { ErrorUtils?: ReactNativeErrorUtils }).ErrorUtils;\n if (errorUtils && typeof errorUtils.setGlobalHandler === 'function') {\n sdk.installReactNativeCrashHandler(errorUtils);\n }\n\n let subscription: { remove: () => void } | void;\n if (deps.appState?.addEventListener) {\n subscription = deps.appState.addEventListener('change', (state) => {\n if (state === 'active') sdk.onForeground();\n else sdk.onBackground(); // 'background' | 'inactive'\n });\n }\n\n return () => {\n if (subscription && typeof subscription.remove === 'function') subscription.remove();\n };\n}\n"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","names":["module","e","t","i","n","r","s","a","o","l","d","c","u","p","v","h","f","m","g","magicfeedback","renderPopup","renderPopup"]}
|
|
1
|
+
{"version":3,"sources":["../src/tracking/tracking-manager.ts","../src/ui/font.ts","../src/util/logger.ts","../node_modules/@magicfeedback/native/dist/magicfeedback-sdk.browser.js","../src/assets/style.css","../src/ui/renderPopup.ts","../src/index.ts","../src/types/index.ts","../src/triggers/index.ts","../src/config/env.ts","../src/platform/react-native-renderer.ts","../src/ui/surveyHtml.ts","../src/platform/renderer.ts","../src/core/deepdots-popups.ts","../src/analytics/analytics-manager.ts","../src/analytics/feedback-payload.ts","../src/tracking/navigation-observer.ts","../src/analytics/device-info.ts","../src/analytics/geo-info.ts","../src/analytics/language.ts","../src/analytics/engagement-tracker.ts","../src/contact/contact-manager.ts","../src/analytics/crash-reporter.ts","../src/analytics/messaging.ts","../src/react-native/setup.ts"],"sourcesContent":["/**\n * Identidad + sesión para el tracking de navegación (Fase 1).\n * Implementa el \"Contrato común Web+KMP\".\n *\n * Modelo: el SDK gestiona el `user_id` (persistente). El `session_id` es propiedad\n * del BACKEND: llega en la respuesta de `POST /sdk/popups` y se cachea; el backend\n * cose sesiones por `user_id` + ventana. El SDK NO genera ni expira sesiones.\n *\n * Sin dependencias de DOM: recibe el storage y (opcionalmente) el reloj y el\n * generador de uuid por inyección. El binding a `localStorage` vive en `createDefaultStorage`.\n */\n\n/** Store clave/valor mínimo (espejo conceptual del `KeyValueStorage` de KMP). */\nexport interface KeyValueStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\n/** Impl en memoria — usada en tests y como fallback sin `localStorage`. */\nexport class InMemoryStorage implements KeyValueStorage {\n private map = new Map<string, string>();\n getItem(key: string): string | null {\n return this.map.has(key) ? (this.map.get(key) as string) : null;\n }\n setItem(key: string, value: string): void {\n this.map.set(key, value);\n }\n removeItem(key: string): void {\n this.map.delete(key);\n }\n}\n\n/** Storage por defecto en Web: `localStorage` si está disponible, si no in-memory. */\nexport function createDefaultStorage(): KeyValueStorage {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n const ls = window.localStorage;\n const probe = '__deepdots_probe__';\n ls.setItem(probe, '1');\n ls.removeItem(probe);\n return {\n getItem: (k) => ls.getItem(k),\n setItem: (k, v) => ls.setItem(k, v),\n removeItem: (k) => ls.removeItem(k),\n };\n }\n } catch {\n // cae a in-memory\n }\n return new InMemoryStorage();\n}\n\n/** Claves de storage — namespace `deepdots.*`. Solo identidad (la sesión no se persiste). */\nexport const STORAGE_KEYS = {\n userId: 'deepdots.user_id',\n firstSeen: 'deepdots.user.first_seen',\n contactAttributes: 'deepdots.contact.attributes',\n} as const;\n\n/** Par clave/valor con el formato `NativeAnswer` que espera `@magicfeedback/native`. */\nexport interface IdentityAnswer {\n key: string;\n value: string[];\n}\n\n/**\n * Construye el `profile` y el `metadata` de identidad para inyectar en el survey\n * (`magicfeedback.form(appId, publicKey, profile, metadata)`), según el contrato §5.\n * `session_id` solo se incluye si el backend ya lo proveyó.\n */\nexport function buildSurveyIdentity(\n userId: string | null,\n sessionId: string | null,\n miniService: string | null = null,\n analyticsFeedbackSessionId: string | null = null,\n): { profile: IdentityAnswer[]; metadata: IdentityAnswer[] } {\n const profile: IdentityAnswer[] = userId ? [{ key: 'external-user-id', value: [userId] }] : [];\n const metadata: IdentityAnswer[] = [];\n if (sessionId) metadata.push({ key: 'session_id', value: [sessionId] });\n if (userId) metadata.push({ key: 'user_id', value: [userId] });\n if (miniService) metadata.push({ key: 'mini_service', value: [miniService] });\n if (analyticsFeedbackSessionId) metadata.push({ key: 'deepdots_analytics_feedback_session_id', value: [analyticsFeedbackSessionId] });\n return { profile, metadata };\n}\n\nexport interface TrackingManagerOptions {\n storage: KeyValueStorage;\n /** Id provisto por el cliente; si existe se usa y NO se persiste. */\n clientUserId?: string;\n /** Reloj inyectable (default `Date.now`). */\n now?: () => number;\n /** Generador de uuid inyectable (default uuid v4). */\n uuid?: () => string;\n /** Estado inicial del tracking (default `true`). */\n enabled?: boolean;\n}\n\nfunction defaultUuid(): string {\n const g = (typeof globalThis !== 'undefined' ? globalThis : {}) as {\n crypto?: { randomUUID?: () => string; getRandomValues?: (a: Uint8Array) => Uint8Array };\n };\n if (g.crypto?.randomUUID) return g.crypto.randomUUID();\n const bytes = new Uint8Array(16);\n if (g.crypto?.getRandomValues) {\n g.crypto.getRandomValues(bytes);\n } else {\n for (let i = 0; i < 16; i++) bytes[i] = Math.floor(Math.random() * 256);\n }\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0'));\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex\n .slice(6, 8)\n .join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10, 16).join('')}`;\n}\n\nexport class TrackingManager {\n private storage: KeyValueStorage;\n private clientUserId?: string;\n private now: () => number;\n private uuid: () => string;\n private enabled: boolean;\n\n /** session_id cacheado, provisto por el backend (no se genera ni se persiste). */\n private sessionId: string | null = null;\n private userWasJustCreated = false;\n\n constructor(options: TrackingManagerOptions) {\n this.storage = options.storage;\n this.clientUserId = options.clientUserId;\n this.now = options.now ?? (() => Date.now());\n this.uuid = options.uuid ?? defaultUuid;\n this.enabled = options.enabled ?? true;\n }\n\n isTrackingEnabled(): boolean {\n return this.enabled;\n }\n\n setTrackingEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n /** Resuelve el user_id según la regla: cliente > persistido > generar+persistir. */\n getUserId(): string | null {\n if (!this.enabled) return null;\n if (this.clientUserId) return this.clientUserId;\n\n const persisted = this.storage.getItem(STORAGE_KEYS.userId);\n if (persisted) return persisted;\n\n const id = this.uuid();\n this.storage.setItem(STORAGE_KEYS.userId, id);\n this.storage.setItem(STORAGE_KEYS.firstSeen, String(this.now()));\n this.userWasJustCreated = true;\n return id;\n }\n\n /** `true` solo en la primera sesión tras crear el user_id propio del SDK. */\n isNewUser(): boolean {\n return this.userWasJustCreated;\n }\n\n /** session_id actual provisto por el backend, o null si aún no llegó. */\n getSessionId(): string | null {\n if (!this.enabled) return null;\n return this.sessionId;\n }\n\n /** Cachea el session_id devuelto por el backend (respuesta de POST /sdk/popups). */\n setSessionId(sessionId: string | null): void {\n if (!this.enabled) return;\n this.sessionId = sessionId;\n }\n}\n","/**\n * Helpers puros (sin DOM) para la fuente personalizable del popup/survey.\n * Espejo exacto en KMP: `ui/Font.kt`. Cualquier cambio aquí se replica allí.\n */\n\nconst FORMAT_BY_EXT: Record<string, string> = {\n woff2: 'woff2',\n woff: 'woff',\n ttf: 'truetype',\n otf: 'opentype',\n};\n\n/** Deriva el `format()` del `@font-face` a partir de la extensión de la URL. */\nexport function fontFormatFromUrl(url: string): string | undefined {\n const clean = url.split('?')[0].split('#')[0];\n const ext = clean.slice(clean.lastIndexOf('.') + 1).toLowerCase();\n return FORMAT_BY_EXT[ext];\n}\n\n// family/url provienen de la API y se interpolan en CSS y en el <style> del HTML del WebView.\n// Saneamos para evitar romper el string/rule (CSS injection) o cerrar </style> (script injection).\nfunction sanitizeFamily(family: string): string {\n return family.replace(/[^A-Za-z0-9 ._-]/g, '').trim();\n}\n\nfunction isSafeFontUrl(url: string): boolean {\n // Solo http(s)/data y sin caracteres que rompan url(\"...\") o el <style>:\n // comillas, <>, backslash, y cualquier whitespace o carácter de control.\n if (!/^(https?:|data:)/i.test(url)) return false;\n // eslint-disable-next-line no-control-regex\n return !/[\\x00-\\x20\"<>\\\\]/.test(url);\n}\n\n/** Valor a aplicar en `font-family`: nombre custom + fallback de sistema. */\nexport function buildFontFamilyValue(family: string): string {\n const safe = sanitizeFamily(family);\n return `\"${safe}\", -apple-system, system-ui, sans-serif`;\n}\n\n/** CSS del `@font-face`. Devuelve \"\" si no hay url (o no es segura). */\nexport function buildFontFaceCss(family: string, url?: string): string {\n if (!url || !isSafeFontUrl(url)) return '';\n const safe = sanitizeFamily(family);\n const fmt = fontFormatFromUrl(url);\n const src = fmt ? `url(\"${url}\") format(\"${fmt}\")` : `url(\"${url}\")`;\n return `@font-face{font-family:\"${safe}\";src:${src};font-display:swap;}`;\n}\n","import type { DeepdotsLogger } from '../types';\n\n/**\n * Logger de módulo compartido: el core lo fija en init() con el logger inyectado\n * por el host (o `console` por defecto), y los módulos que no reciben `this`\n * (renderPopup, renderers) enrutan por aquí. `warn`/`error` caen a `log` si el\n * logger del host no los provee (solo `log` es obligatorio en DeepdotsLogger).\n */\nlet active: DeepdotsLogger = console;\n\nexport function setLogger(logger: DeepdotsLogger | undefined): void {\n active = logger ?? console;\n}\n\nexport function sdkLog(...args: unknown[]): void {\n active.log(...args);\n}\n\nexport function sdkWarn(...args: unknown[]): void {\n (active.warn ?? active.log)(...args);\n}\n\nexport function sdkError(...args: unknown[]): void {\n (active.error ?? active.log)(...args);\n}\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.magicfeedback=t():e.magicfeedback=t()}(self,(()=>{return e={945:function(e,t){var i=\"undefined\"!=typeof self?self:this,n=function(){function e(){this.fetch=!1,this.DOMException=i.DOMException}return e.prototype=i,new e}();!function(e){!function(t){var i=\"URLSearchParams\"in e,n=\"Symbol\"in e&&\"iterator\"in Symbol,r=\"FileReader\"in e&&\"Blob\"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),s=\"FormData\"in e,a=\"ArrayBuffer\"in e;if(a)var o=[\"[object Int8Array]\",\"[object Uint8Array]\",\"[object Uint8ClampedArray]\",\"[object Int16Array]\",\"[object Uint16Array]\",\"[object Int32Array]\",\"[object Uint32Array]\",\"[object Float32Array]\",\"[object Float64Array]\"],l=ArrayBuffer.isView||function(e){return e&&o.indexOf(Object.prototype.toString.call(e))>-1};function d(e){if(\"string\"!=typeof e&&(e=String(e)),/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError(\"Invalid character in header field name\");return e.toLowerCase()}function c(e){return\"string\"!=typeof e&&(e=String(e)),e}function u(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return n&&(t[Symbol.iterator]=function(){return t}),t}function p(e){this.map={},e instanceof p?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function m(e){if(e.bodyUsed)return Promise.reject(new TypeError(\"Already read\"));e.bodyUsed=!0}function h(e){return new Promise((function(t,i){e.onload=function(){t(e.result)},e.onerror=function(){i(e.error)}}))}function f(e){var t=new FileReader,i=h(t);return t.readAsArrayBuffer(e),i}function v(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function g(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?\"string\"==typeof e?this._bodyText=e:r&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:s&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:i&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():a&&r&&(t=e)&&DataView.prototype.isPrototypeOf(t)?(this._bodyArrayBuffer=v(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):a&&(ArrayBuffer.prototype.isPrototypeOf(e)||l(e))?this._bodyArrayBuffer=v(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText=\"\",this.headers.get(\"content-type\")||(\"string\"==typeof e?this.headers.set(\"content-type\",\"text/plain;charset=UTF-8\"):this._bodyBlob&&this._bodyBlob.type?this.headers.set(\"content-type\",this._bodyBlob.type):i&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set(\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"))},r&&(this.blob=function(){var e=m(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error(\"could not read FormData body as blob\");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?m(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(f)}),this.text=function(){var e,t,i,n=m(this);if(n)return n;if(this._bodyBlob)return e=this._bodyBlob,i=h(t=new FileReader),t.readAsText(e),i;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),i=new Array(t.length),n=0;n<t.length;n++)i[n]=String.fromCharCode(t[n]);return i.join(\"\")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error(\"could not read FormData body as text\");return Promise.resolve(this._bodyText)},s&&(this.formData=function(){return this.text().then(E)}),this.json=function(){return this.text().then(JSON.parse)},this}p.prototype.append=function(e,t){e=d(e),t=c(t);var i=this.map[e];this.map[e]=i?i+\", \"+t:t},p.prototype.delete=function(e){delete this.map[d(e)]},p.prototype.get=function(e){return e=d(e),this.has(e)?this.map[e]:null},p.prototype.has=function(e){return this.map.hasOwnProperty(d(e))},p.prototype.set=function(e,t){this.map[d(e)]=c(t)},p.prototype.forEach=function(e,t){for(var i in this.map)this.map.hasOwnProperty(i)&&e.call(t,this.map[i],i,this)},p.prototype.keys=function(){var e=[];return this.forEach((function(t,i){e.push(i)})),u(e)},p.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),u(e)},p.prototype.entries=function(){var e=[];return this.forEach((function(t,i){e.push([i,t])})),u(e)},n&&(p.prototype[Symbol.iterator]=p.prototype.entries);var y=[\"DELETE\",\"GET\",\"HEAD\",\"OPTIONS\",\"POST\",\"PUT\"];function b(e,t){var i,n,r=(t=t||{}).body;if(e instanceof b){if(e.bodyUsed)throw new TypeError(\"Already read\");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new p(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,r||null==e._bodyInit||(r=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||\"same-origin\",!t.headers&&this.headers||(this.headers=new p(t.headers)),this.method=(n=(i=t.method||this.method||\"GET\").toUpperCase(),y.indexOf(n)>-1?n:i),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,(\"GET\"===this.method||\"HEAD\"===this.method)&&r)throw new TypeError(\"Body not allowed for GET or HEAD requests\");this._initBody(r)}function E(e){var t=new FormData;return e.trim().split(\"&\").forEach((function(e){if(e){var i=e.split(\"=\"),n=i.shift().replace(/\\+/g,\" \"),r=i.join(\"=\").replace(/\\+/g,\" \");t.append(decodeURIComponent(n),decodeURIComponent(r))}})),t}function k(e,t){t||(t={}),this.type=\"default\",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText=\"statusText\"in t?t.statusText:\"OK\",this.headers=new p(t.headers),this.url=t.url||\"\",this._initBody(e)}b.prototype.clone=function(){return new b(this,{body:this._bodyInit})},g.call(b.prototype),g.call(k.prototype),k.prototype.clone=function(){return new k(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new p(this.headers),url:this.url})},k.error=function(){var e=new k(null,{status:0,statusText:\"\"});return e.type=\"error\",e};var A=[301,302,303,307,308];k.redirect=function(e,t){if(-1===A.indexOf(t))throw new RangeError(\"Invalid status code\");return new k(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var i=Error(e);this.stack=i.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function C(e,i){return new Promise((function(n,s){var a=new b(e,i);if(a.signal&&a.signal.aborted)return s(new t.DOMException(\"Aborted\",\"AbortError\"));var o=new XMLHttpRequest;function l(){o.abort()}o.onload=function(){var e,t,i={status:o.status,statusText:o.statusText,headers:(e=o.getAllResponseHeaders()||\"\",t=new p,e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/).forEach((function(e){var i=e.split(\":\"),n=i.shift().trim();if(n){var r=i.join(\":\").trim();t.append(n,r)}})),t)};i.url=\"responseURL\"in o?o.responseURL:i.headers.get(\"X-Request-URL\");var r=\"response\"in o?o.response:o.responseText;n(new k(r,i))},o.onerror=function(){s(new TypeError(\"Network request failed\"))},o.ontimeout=function(){s(new TypeError(\"Network request failed\"))},o.onabort=function(){s(new t.DOMException(\"Aborted\",\"AbortError\"))},o.open(a.method,a.url,!0),\"include\"===a.credentials?o.withCredentials=!0:\"omit\"===a.credentials&&(o.withCredentials=!1),\"responseType\"in o&&r&&(o.responseType=\"blob\"),a.headers.forEach((function(e,t){o.setRequestHeader(t,e)})),a.signal&&(a.signal.addEventListener(\"abort\",l),o.onreadystatechange=function(){4===o.readyState&&a.signal.removeEventListener(\"abort\",l)}),o.send(void 0===a._bodyInit?null:a._bodyInit)}))}C.polyfill=!0,e.fetch||(e.fetch=C,e.Headers=p,e.Request=b,e.Response=k),t.Headers=p,t.Request=b,t.Response=k,t.fetch=C,Object.defineProperty(t,\"__esModule\",{value:!0})}({})}(n),n.fetch.ponyfill=!0,delete n.fetch.polyfill;var r=n;(t=r.fetch).default=r.fetch,t.fetch=r.fetch,t.Headers=r.Headers,t.Request=r.Request,t.Response=r.Response,e.exports=t},317:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.HOST_API_URL_DEV=t.HOST_API_URL=void 0,t.HOST_API_URL=\"https://api.deepdots.com/\",t.HOST_API_URL_DEV=\"https://api-dev.deepdots.com/\"},156:function(e,t,i){\"use strict\";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(i(927));let s=null;s||(s=(0,r.default)()),t.default=s},927:function(e,t,i){\"use strict\";var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function a(e){try{l(n.next(e))}catch(e){s(e)}}function o(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,o)}l((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,\"__esModule\",{value:!0});const r=i(57),s=i(665),a=i(256),o=i(313),l=i(317);t.default=function(){const e=new s.Config;let t=new a.Log(e);return{init:function(i){\"boolean\"==typeof(null==i?void 0:i.debug)&&e.set(\"debug\",i.debug),\"boolean\"==typeof(null==i?void 0:i.dryRun)&&e.set(\"dryRun\",i.dryRun),e.set(\"url\",(null==i?void 0:i.env)&&\"dev\"===(null==i?void 0:i.env)?l.HOST_API_URL_DEV:l.HOST_API_URL),e.set(\"env\",null==i?void 0:i.env),t.log(\"Initialized Magicfeedback\",e)},send:function(i,r,s,a=!0,l,d){return n(this,void 0,void 0,(function*(){i||t.err(\"No appID provided\"),r||t.err(\"No publicKey provided\"),s||t.err(\"No feedback provided\"),s.answers||s.profile||s.metrics||s.metadata||t.err(\"No feedback data provided\");const n=e.get(\"url\"),c={integration:i,publicKey:r,privateKey:d,completed:a,id:l,feedback:s};try{if(e.get(\"dryRun\"))return t.log(\"Dry run enabled: skipping native feedback submit\"),`dry-run-${Date.now()}`;const i=yield(0,o.sendFeedback)(n,c,t);return t.log(\"sent native feedback\"),i}catch(e){return t.err(\"error native feedback\",e),!1}}))},form:function(i,n,s,a){return i||t.err(\"No appID provided\"),n||t.err(\"No publicKey provided\"),new r.Form(e,i,n,s,a)},session:function(i){return i||t.err(\"No sessionId provided\"),new r.Form(e,i)}}}},79:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.History=void 0,t.History=class{constructor(){this.items=[]}enqueue(e){this.items.push(e)}dequeue(){return this.items.shift()}rollback(){return this.items.pop()}front(){return this.items[0]}back(){return this.items[this.items.length-1]}isEmpty(){return 0===this.items.length}size(){return this.items.length}get(e){return this.items[e]}}},665:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Config=void 0,t.Config=class{constructor(){this.variables={},this.variables.env=\"prod\",this.variables.debug=!1,this.variables.dryRun=!1}get(e){return this.variables[e]}set(e,t){this.variables[e]=t}}},57:function(e,t,i){\"use strict\";var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function a(e){try{l(n.next(e))}catch(e){s(e)}}function o(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,o)}l((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,\"__esModule\",{value:!0}),t.Form=void 0;const r=i(558),s=i(256),a=i(313),o=i(213),l=i(989),d=i(700),c=i(591),u=i(79),p=i(636);t.Form=class{constructor(e,t,i,n,r){this.config=e,this.log=new s.Log(e),this.formOptionsConfig={addButton:!0,sendButtonText:\"Send\",backButtonText:\"Back\",nextButtonText:\"Next\",addSuccessScreen:!0,getMetaData:!0,customMetaData:[],questionFormat:\"standard\"},this.selector=\"\",this.appId=t,this.publicKey=i||\"\",this.url=e.get(\"url\"),this.id=\"\",this.formData=null,this.feedback={text:\"\",answers:[],profile:null!=n?n:[],metrics:[],metadata:null!=r?r:[]},this.history=new u.History,this.graph=new l.PageGraph([]),this.progress=0,this.total=0,this.completed=!1,this.timeToCompleted=0}generate(e,t){var i,r,s,o,l,d,c;return n(this,void 0,void 0,(function*(){try{this.formOptionsConfig=Object.assign(Object.assign({},this.formOptionsConfig),t),this.selector=e;let n=this.formData;if(void 0!==this.formData&&this.formData||(n=\"\"!==this.publicKey?yield(0,a.getForm)(this.url,this.appId,this.publicKey,this.log):yield(0,a.getSessionForm)(this.url,this.appId,this.log)),void 0===n||!n)throw new Error(`No data for app ${this.appId}`);if(null===(i=n.error)||void 0===i?void 0:i.message)throw new Error(n.error.message);if(n.questions=(null===(r=n.questions)||void 0===r?void 0:r.filter((e=>\"ACTIVE\"===e.status)))||[],n.pages=(null===(s=n.pages)||void 0===s?void 0:s.filter((e=>\"ACTIVE\"===e.status)))||[],null===(o=n.pages)||void 0===o||o.forEach((e=>{var t;return e.integrationQuestions=null===(t=e.integrationQuestions)||void 0===t?void 0:t.filter((e=>\"ACTIVE\"===e.status))})),this.formData=n,this.formData.savedAt||(this.formData.savedAt=new Date,localStorage.setItem(`magicfeedback-${this.appId}`,JSON.stringify(this.formData))),void 0===this.formData.questions||!this.formData.questions)throw new Error(`No questions for app ${this.appId}`);this.formData.pages&&0!==(null===(l=this.formData.pages)||void 0===l?void 0:l.length)||this.formatPages(),null===(d=this.formData.questions)||void 0===d||d.sort(((e,t)=>e.position-t.position)),this.formData.pages=this.formData.pages.filter((e=>{var t;return(null===(t=e.integrationQuestions)||void 0===t?void 0:t.length)>0})),this.formOptionsConfig.getMetaData&&this.getMetaData(),(null===(c=this.formData.style)||void 0===c?void 0:c.startMessage)?yield this.generateWelcomeMessage(this.formData.style.startMessage):this.startForm()}catch(e){return this.log.err(e),void(this.formOptionsConfig.onLoadedEvent&&(yield this.formOptionsConfig.onLoadedEvent({loading:!1,error:e})))}}))}formatPages(){var e;if(this.formData)switch(this.formData.identity){case\"MAGICSURVEY\":this.formData.pages=[],null===(e=this.formData.questions)||void 0===e||e.forEach((e=>{var t,i;const n=new c.PageRoute(e.id,e.ref,c.OperatorType.NOEQUAL,[],c.TransitionType.PAGE,(e.position+1).toString(),e.position.toString()),r=new d.Page(e.position.toString(),e.position,this.appId,[e],[n]);null===(i=null===(t=this.formData)||void 0===t?void 0:t.pages)||void 0===i||i.push(r)}));break;case\"MAGICFORM\":const t=new d.Page(\"1\",1,this.appId,this.formData.questions,[]);this.formData.pages=[t]}}generateContainer(){let e=document.getElementById(this.selector);if(!e&&(e=document.getElementById(\"magicfeedback-container-\"+this.appId),!e))throw new Error(`Element with ID '${this.selector}' not found.`);return e.classList.add(\"magicfeedback-container\"),e.id=\"magicfeedback-container-\"+this.appId,e.innerHTML=\"\",e}generateForm(){var e,t,i,r;return n(this,void 0,void 0,(function*(){try{if(!this.formData||!this.formData.pages||0===this.formData.pages.length)throw new Error(\"No form data\");this.graph=new l.PageGraph(this.formData.pages.sort(((e,t)=>e.position-t.position)));let n=this.generateContainer();const s=document.createElement(\"form\");s.classList.add(\"magicfeedback-form\"),s.id=\"magicfeedback-\"+this.appId,s.addEventListener(\"submit\",(e=>e.preventDefault()));const a=document.createElement(\"div\");a.classList.add(\"magicfeedback-questions\"),a.id=\"magicfeedback-questions-\"+this.appId;const d=this.graph.getFirstPage();if(!d)throw new Error(\"No page found\");if(this.total=this.graph.findMaxDepth(),d.elements=(0,o.renderQuestions)(d.questions,this.formOptionsConfig.questionFormat,null===(e=this.formData)||void 0===e?void 0:e.lang[0],null===(t=this.formData)||void 0===t?void 0:t.product,(()=>this.send())),null===(i=d.elements)||void 0===i||i.forEach((e=>a.appendChild(e))),s.appendChild(a),this.history.enqueue(d),n.appendChild(s),this.progress=this.total-this.graph.findMaxDepth(d),this.formOptionsConfig.addButton){const e=(0,o.renderActions)(null===(r=this.formData)||void 0===r?void 0:r.identity,(()=>this.back()),this.formOptionsConfig.sendButtonText,this.formOptionsConfig.backButtonText,this.formOptionsConfig.nextButtonText);s.appendChild(e)}this.formOptionsConfig.addButton&&s.addEventListener(\"submit\",(e=>{e.preventDefault(),this.send()})),this.timeToCompleted=Date.now(),this.formOptionsConfig.onLoadedEvent&&(yield this.formOptionsConfig.onLoadedEvent({loading:!1,progress:this.progress,total:this.total,formData:this.formData,formOptionsConfig:this.formOptionsConfig}))}catch(e){return this.log.err(e),void(this.formOptionsConfig.onLoadedEvent&&this.formOptionsConfig.onLoadedEvent({loading:!1,error:e}))}}))}startForm(){this.generateForm()}generateWelcomeMessage(e){return n(this,void 0,void 0,(function*(){try{const t=this.generateContainer(),i=(0,o.renderStartMessage)(e,this.formOptionsConfig.addButton,this.formOptionsConfig.startButtonText,(()=>this.startForm()));t.appendChild(i),this.formOptionsConfig.onLoadedEvent&&(yield this.formOptionsConfig.onLoadedEvent({loading:!1,formData:this.formData}))}catch(e){return this.log.err(e),void(this.formOptionsConfig.onLoadedEvent&&this.formOptionsConfig.onLoadedEvent({loading:!1,error:e}))}}))}getMetaData(){this.formOptionsConfig.customMetaData&&(this.feedback.metadata=[...this.feedback.metadata,...this.formOptionsConfig.customMetaData]),this.feedback.metadata.push({key:\"navigator-url\",value:[window.location.href]}),this.feedback.metadata.push({key:\"navigator-origin\",value:[window.location.origin]}),this.feedback.metadata.push({key:\"navigator-pathname\",value:[window.location.pathname]}),this.feedback.metadata.push({key:\"navigator-search\",value:[window.location.search]});const e=new URLSearchParams(window.location.search);Array.from(new Set(e.keys())).forEach((t=>{const i=e.getAll(t);i.length>0&&this.feedback.metadata.push({key:`query-${t}`,value:i})})),this.feedback.metadata.push({key:\"navigator-user\",value:[navigator.userAgent]}),this.feedback.metadata.push({key:\"navigator-language\",value:[navigator.language]}),this.feedback.metadata.push({key:\"navigator-platform\",value:[navigator.platform]}),this.feedback.metadata.push({key:\"navigator-appVersion\",value:[navigator.appVersion]}),this.feedback.metadata.push({key:\"navigator-appName\",value:[navigator.appName]}),this.feedback.metadata.push({key:\"navigator-product\",value:[navigator.product]}),this.feedback.metadata.push({key:\"screen-width\",value:[window.screen.width.toString()]}),this.feedback.metadata.push({key:\"screen-height\",value:[window.screen.height.toString()]}),this.appId&&\"\"===this.publicKey&&this.feedback.metadata.push({key:\"MAGICFEEDBACK_SESSION\",value:[this.appId]})}send(e,t,i){return n(this,void 0,void 0,(function*(){const n=document.getElementById(\"magicfeedback-questions-\"+this.appId);try{i&&(this.feedback.profile=[...this.feedback.profile,...i]),t&&(this.feedback.metrics=[...this.feedback.metrics,...t]),e&&(this.feedback.metadata=[...this.feedback.metadata,...e]),this.answer(),this.formOptionsConfig.beforeSubmitEvent&&(yield this.formOptionsConfig.beforeSubmitEvent({loading:!0,progress:this.progress,total:this.total}));const s=this.history.back();if(!s)throw new Error(\"No page found\");for(const e of s.questions.filter((e=>e.require&&![r.FEEDBACKAPPANSWERTYPE.CONSENT,r.FEEDBACKAPPANSWERTYPE.INFO_PAGE].includes(e.type)))){const t=e.assets,i=this.feedback.answers.filter((t=>t.key.includes(e.ref)&&!t.key.includes(\"extra-option\")));if(0===i.length||i.find((e=>0===e.value.length)))throw this.log.err(`The question ${e.ref} is required`),new Error(\"No response\");if(null==t?void 0:t.minOptions){let n=[];if((null==t?void 0:t.exclusiveAnswers)&&(n=null==t?void 0:t.exclusiveAnswers),!i[0].value.find((e=>n.includes(e)))&&i[0].value.length<(null==t?void 0:t.minOptions))throw this.log.err(`The question ${e.ref} requires at least ${null==t?void 0:t.minOptions} options`),new Error(\"No response\")}if(e.type===r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX){const i=this.feedback.answers.find((t=>t.key===e.ref));if(!i)throw this.log.err(`The matrix question ${e.ref} is required`),new Error(\"No response\");const n=this.parseMatrixAnswerPre(i),r=Array.isArray(null==t?void 0:t.options)?t.options:[];if(r.length>0){if(r.find((e=>{const t=n.find((t=>t.key===e));return!t||!Array.isArray(t.value)||0===t.value.length})))throw this.log.err(`The matrix question ${e.ref} requires an answer in every row`),new Error(\"No response\")}else if(0===n.length||n.some((e=>!Array.isArray(e.value)||0===e.value.length)))throw this.log.err(`The matrix question ${e.ref} requires an answer in every row`),new Error(\"No response\")}}const a=yield this.pushAnswers(!1);if(!a)throw new Error(\"No response\");this.id=a,yield this.processNextQuestion(n)}catch(e){this.log.err(`An error occurred while submitting the form ${this.appId}:`,e),this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({loading:!1,progress:this.progress,total:this.total,error:e}))}}))}answer(){const e=document.getElementById(\"magicfeedback-\"+this.appId);if(!e)return this.log.err(`Form \"${e}\" not found.`),this.feedback.answers=[],[];const t=this.history.back();if(!t){const t=e.querySelectorAll(\".magicfeedback-input\"),i=[],n={};return t.forEach((e=>{var t;const r=e,s=r.name;if(!s)return;const a=r.type;if((\"radio\"===a||\"checkbox\"===a)&&!r.checked)return;const o=r.value,l=r.classList[0];if((null==l?void 0:l.includes(\"magicfeedback-priority-list\"))||(null===(t=r.id)||void 0===t?void 0:t.startsWith(\"priority-list-\")))return n[s]||(n[s]=[]),void n[s].push(o);const d=\"magicfeedback-consent\"===l?r.checked.toString():o;if(null==d)return;const c={key:s,value:[d]};i.push(c)})),Object.entries(n).forEach((([e,t])=>{const n=t.slice().sort(((e,t)=>Number(e.split(\".\")[0])-Number(t.split(\".\")[0])));i.push({key:e,value:n})})),this.feedback.answers=i,i}const i=[];let n=!1;const s=e.querySelectorAll(\".magicfeedback-input\"),o={},l={},d={};if(s.forEach((e=>{const s=e,c=t.questions.find((e=>{var t;return null===(t=s.name)||void 0===t?void 0:t.includes(e.ref)})),u=s.type,p=s.classList[0],m={key:s.name,value:[]},h=\"magicfeedback-consent\"===p?s.checked.toString():s.value;if(m.key&&\"\"!==m.key)if(m.key.startsWith(\"extra-option-\"))\"\"!==h&&(m.value.push(h),i.push(m));else switch(null==c?void 0:c.type){case r.FEEDBACKAPPANSWERTYPE.EMAIL:case r.FEEDBACKAPPANSWERTYPE.TEXT:case r.FEEDBACKAPPANSWERTYPE.LONGTEXT:case r.FEEDBACKAPPANSWERTYPE.NUMBER:case r.FEEDBACKAPPANSWERTYPE.DATE:case r.FEEDBACKAPPANSWERTYPE.CONTACT:case r.FEEDBACKAPPANSWERTYPE.PASSWORD:\"\"!==h&&(\"email\"===u?(0,a.validateEmail)(h)?(this.feedback.profile.push({key:\"email\",value:[h]}),m.value.push(h),i.push(m)):(this.log.err(\"Invalid email\"),n=!0):(m.value.push(h),i.push(m)));break;case r.FEEDBACKAPPANSWERTYPE.RADIO:s.checked&&(m.value.push(h),i.push(m));break;case r.FEEDBACKAPPANSWERTYPE.MULTIPLECHOICE:case r.FEEDBACKAPPANSWERTYPE.MULTIPLECHOISE_IMAGE:s.checked&&(l[m.key]||(l[m.key]=[]),l[m.key].push(h));break;case r.FEEDBACKAPPANSWERTYPE.BOOLEAN:s.checked&&(m.value.push(h),i.push(m));break;case r.FEEDBACKAPPANSWERTYPE.CONSENT:m.value.push(s.checked.toString()),i.push(m);break;case r.FEEDBACKAPPANSWERTYPE.RATING_EMOJI:case r.FEEDBACKAPPANSWERTYPE.RATING_NUMBER:case r.FEEDBACKAPPANSWERTYPE.RATING_STAR:s.checked&&(m.value.push(h),i.push(m));break;case r.FEEDBACKAPPANSWERTYPE.SELECT:\"\"!==h&&(m.value.push(h),i.push(m));break;case r.FEEDBACKAPPANSWERTYPE.POINT_SYSTEM:\"number\"===u&&s.id&&(d[m.key]||(d[m.key]=[]),\"\"!==h&&d[m.key].push(`${s.id}:${h}%`));break;case r.FEEDBACKAPPANSWERTYPE.PRIORITY_LIST:\"hidden\"===u&&(o[m.key]||(o[m.key]=[]),o[m.key].push(h));break;case r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX:e.checked&&(m.value.push(h),i.push(m));case r.FEEDBACKAPPANSWERTYPE.UPLOAD_IMAGE:case r.FEEDBACKAPPANSWERTYPE.UPLOAD_FILE:}})),n)return[];Object.entries(l).forEach((([e,t])=>{t&&0!==t.length&&i.push({key:e,value:t})})),Object.entries(d).forEach((([e,t])=>{t&&0!==t.length&&i.push({key:e,value:t})})),Object.entries(o).forEach((([e,t])=>{if(!t||0===t.length)return;const n=t.slice().sort(((e,t)=>Number(e.split(\".\")[0])-Number(t.split(\".\")[0])));i.push({key:e,value:n})}));try{t.questions.filter((e=>e.type===r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX)).forEach((e=>{const t=e.ref+\"-\",n=i.filter((e=>e.key.startsWith(t)));if(0===n.length)return;const r=n.map((e=>({key:e.key.substring(t.length),value:e.value}))),s={key:e.ref,value:[JSON.stringify(r)]};for(const e of n){const t=i.findIndex((t=>t.key===e.key));-1!==t&&i.splice(t,1)}const a=i.findIndex((t=>t.key===e.ref));-1!==a?i[a]=s:i.push(s)}))}catch(e){this.log.err(\"Error agrupando MULTI_QUESTION_MATRIX\",e)}return this.feedback.answers=i,t.setAnswer(i),i}finish(){return n(this,void 0,void 0,(function*(){if(this.completed=!0,this.timeToCompleted=Date.now()-this.timeToCompleted,this.feedback.metadata.push({key:\"time-to-complete\",value:[this.timeToCompleted.toString()]}),this.formOptionsConfig.addSuccessScreen){const e=document.getElementById(\"magicfeedback-container-\"+this.appId);e.childNodes.length>0&&e.removeChild(e.childNodes[0]);const t=(0,o.renderSuccess)(this.formOptionsConfig.successMessage||\"Thank you for your feedback!\");e.appendChild(t)}this.answer();try{const e=yield this.pushAnswers(!0);if(!e)throw this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({loading:!1,progress:this.progress,total:this.total,completed:this.completed,error:`An error occurred while submitting the form ${this.appId}:`})),new Error(\"An error occurred while submitting the form ${this.appId}:\");this.id=e,this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({response:this.id,loading:!1,progress:this.progress,total:this.total,completed:this.completed,error:null}))}catch(e){this.log.err(`An error occurred while submitting the form ${this.appId}:`,e),this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({loading:!1,progress:this.progress,total:this.total,completed:this.completed,error:e}))}}))}pushAnswers(e=!1){return n(this,void 0,void 0,(function*(){try{if(this.config.get(\"dryRun\")){const e=this.id||`dry-run-${this.appId}-${Date.now()}`;return this.log.log(`Dry run enabled: skipping feedback submit for form ${this.appId}`),e}const t=this.config.get(\"url\"),i={integration:this.appId,publicKey:this.publicKey,feedback:this.feedback,completed:e};return yield(0,a.sendFeedback)(t,this.id?Object.assign(Object.assign({},i),{sessionId:this.id}):i,this.log)}catch(e){return this.log.err(`An error occurred while submitting the form ${this.appId}:`,e),\"\"}}))}callFollowUpQuestion(e){var t;return n(this,void 0,void 0,(function*(){if(!(null==e?void 0:e.followup))return null;try{if(this.config.get(\"dryRun\"))return this.log.log(`Dry run enabled: skipping follow up API for question ${e.ref}`),null;if(0===this.feedback.answers.length)throw new Error(\"No answers provided\");const i=this.config.get(\"url\"),n=Object.assign(Object.assign(Object.assign({answer:null===(t=this.feedback.answers.find((t=>t.key===e.ref)))||void 0===t?void 0:t.value[0]},\"\"!==this.publicKey&&{publicKey:this.publicKey}),\"\"===this.publicKey&&{campaignSessionId:this.appId}),{sessionId:this.id,question:e});return yield(0,a.getFollowUpQuestion)(i,n,this.log)}catch(e){throw this.log.err(`An error occurred while submitting the form ${this.appId}:`,e),e}}))}processNextQuestion(e){var t,i,r;return n(this,void 0,void 0,(function*(){const n=this.history.back();if(!n)throw new Error(\"No page found\");const s=n.getFollowupQuestions();if(0===(null==s?void 0:s.length))return void(yield this.renderNextQuestion(e,n));const a=[];for(const e of s){const t=n.questions.find((t=>t.ref===e));if(t){const e=yield this.callFollowUpQuestion(t);e&&a.push(e)}}if(0===a.length)return void(yield this.renderNextQuestion(e,n));const l=new d.Page(n.id,n.position,this.appId,a,n.edges),c=new p.PageNode(n.id,n.position,n.edges,l,a,!0);c.elements=(0,o.renderQuestions)(a,this.formOptionsConfig.questionFormat,null===(t=this.formData)||void 0===t?void 0:t.lang[0],null===(i=this.formData)||void 0===i?void 0:i.product,(()=>this.send())),this.history.enqueue(c),this.progress+=.5,e.innerHTML=\"\",null===(r=c.elements)||void 0===r||r.forEach((t=>e.appendChild(t))),this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({response:this.id,loading:!1,progress:this.progress,total:this.total,followup:c.isFollowup,completed:this.completed,error:null}))}))}renderNextQuestion(e,t){var i,s,a,l,d;return n(this,void 0,void 0,(function*(){let n=this.graph.getNextPage(t,this.feedback.answers);if(!n)return void this.finish();const u=n.edges.filter((e=>\"PRECONDITIONAL\"===e.typeCondition)).sort(((e,t)=>e.position<t.position?-1:e.position>t.position?1:0));if((null==u?void 0:u.length)>0){const t=u.some((e=>e.transition===c.TransitionType.ALLOW));let a=t;for(const t of u){let o;for(let e=this.history.size()-1;e>=0;e--){const n=this.history.get(e);if(n&&(o=null===(i=n.answers)||void 0===i?void 0:i.find((e=>e.key===t.questionRef)),o))break}let l=!1;if(o){const e=null===(s=this.formData)||void 0===s?void 0:s.questions.find((e=>e.ref===t.questionRef)),i=Array.isArray(o.value)?o.value:[o.value],n=Array.isArray(t.value)?t.value:[t.value];if((null==e?void 0:e.type)===r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX)l=this.evaluateMatrixPreconditional(t,o);else switch(t.typeOperator){case\"EQUAL\":case\"INQ\":l=i.some((e=>n.includes(e)));break;case\"NOEQUAL\":case\"NINQ\":l=i.every((e=>!n.includes(e)));break;case\"GREATER\":l=i.some((e=>Number(e)>Number(n[0])));break;case\"LESS\":l=i.some((e=>Number(e)<Number(n[0])));break;case\"GREATEREQUAL\":l=i.some((e=>Number(e)>=Number(n[0])));break;case\"LESSEQUAL\":l=i.some((e=>Number(e)<=Number(n[0])))}}if(t.transition===c.TransitionType.ALLOW)l||(a=!1);else if(t.transition===c.TransitionType.NEXT&&l)return this.feedback.answers=[],void(n&&(yield this.renderNextQuestion(e,n)))}if(t&&!a)return this.feedback.answers=[],void(n&&(yield this.renderNextQuestion(e,n)))}n.elements=(0,o.renderQuestions)(n.questions,this.formOptionsConfig.questionFormat,null===(a=this.formData)||void 0===a?void 0:a.lang[0],null===(l=this.formData)||void 0===l?void 0:l.product,(()=>this.send())),e.innerHTML=\"\",null===(d=n.elements)||void 0===d||d.forEach((t=>e.appendChild(t))),this.history.enqueue(n),this.progress=this.total-this.graph.findMaxDepth(n),this.formOptionsConfig.afterSubmitEvent&&(yield this.formOptionsConfig.afterSubmitEvent({response:this.id,loading:!1,progress:this.progress,total:this.total,followup:n.isFollowup,completed:this.completed,error:null}))}))}back(){var e;return n(this,void 0,void 0,(function*(){if(0===this.history.size())return;const t=document.getElementById(\"magicfeedback-questions-\"+this.appId);t&&t.childNodes.length>0&&(t.innerHTML=\"\"),this.history.rollback();const i=this.history.back();i?(null===(e=i.elements)||void 0===e||e.forEach((e=>t.appendChild(e))),this.progress=this.total-this.graph.findMaxDepth(i)):this.progress=this.history.size(),this.formOptionsConfig.onBackEvent&&(yield this.formOptionsConfig.onBackEvent({loading:!1,progress:this.progress,followup:(null==i?void 0:i.isFollowup)||!1,error:i?null:\"No page found\"}))}))}previewQuestion(e,t,i){var n,r;const s=Array.isArray(t)?t:[t];if(!s||0===s.length)throw new Error(\"[MagicFeedback] No question provided for preview\");const a=document.getElementById(e);if(!a)throw new Error(`[MagicFeedback] Element with ID '${e}' not found.`);const{format:l=this.formOptionsConfig.questionFormat||\"standard\",language:d=(null===(n=this.formData)||void 0===n?void 0:n.lang)&&this.formData.lang[0]||\"en\",product:c=(null===(r=this.formData)||void 0===r?void 0:r.product)||{customIcons:!1},clearContainer:u=!0,wrap:p=!0}=i||{};u&&(a.innerHTML=\"\");let m=[];try{m=(0,o.renderQuestions)(s,l,d,c)}catch(e){throw this.log.err(e),e}let h=a;if(p){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-preview-question\"),h.appendChild(e),h=e}return m.forEach((e=>h.appendChild(e))),a}parseMatrixAnswerPre(e){if(!e||!e.value)return[];if(1===e.value.length&&\"string\"==typeof e.value[0]&&e.value[0].trim().startsWith(\"[\"))try{const t=JSON.parse(e.value[0]);if(Array.isArray(t))return t}catch(e){return[]}return Array.isArray(e.value)&&e.value.length>0&&\"object\"==typeof e.value[0]&&null!==e.value[0]&&\"key\"in e.value[0]?e.value:[]}evaluateMatrixPreconditional(e,t){const i=Array.isArray(e.value)?e.value:[e.value],n=new Set(e.option||[]),r=this.parseMatrixAnswerPre(t);if(!r.length)return!1;const s=n.size>0?r.filter((e=>n.has(e.key))):r;if(!s.length)return!1;switch(e.typeOperator){case\"EQUAL\":case\"INQ\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.includes(e)))));case\"NOEQUAL\":case\"NINQ\":return s.every((e=>(Array.isArray(e.value)?e.value:[e.value]).every((e=>!i.includes(e)))));case\"GREATER\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)>Number(t)))))));case\"LESS\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)<Number(t)))))));case\"GREATEREQUAL\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)>=Number(t)))))));case\"LESSEQUAL\":return s.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)<=Number(t)))))));default:return!1}}}},700:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Page=void 0,t.Page=class{constructor(e,t,i,n,r){this.id=e,this.position=t,this.generatedAt=(new Date).toISOString(),this.updatedAt=(new Date).toISOString(),this.status=\"ACTIVE\",this.integrationId=i,this.integrationQuestions=n,this.integrationPageRoutes=r}}},989:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PageGraph=void 0;const n=i(636),r=i(558),s=i(591);t.PageGraph=class{constructor(e){this.nodes=new Map,this.buildGraph(e)}buildGraph(e){e.forEach((e=>{var t;e.integrationPageRoutes&&(e.integrationPageRoutes=(null===(t=e.integrationPageRoutes)||void 0===t?void 0:t.sort(((e,t)=>{const i=new Date((null==e?void 0:e.generatedAt)||0).getTime(),n=new Date((null==t?void 0:t.generatedAt)||0).getTime();return i!==n?i-n:\"DIRECT\"===e.typeCondition&&\"DIRECT\"!==t.typeCondition?1:\"DIRECT\"!==e.typeCondition&&\"DIRECT\"===t.typeCondition?-1:0})))||[]);const i=new n.PageNode(e.id,e.position,e.integrationPageRoutes||[],e,e.integrationQuestions);this.nodes.set(i.id,i)}))}getNodeById(e){return this.nodes.get(e)}getNextEdgeByDefault(e){if(!e)return;const t=e.edges.find((e=>e.typeCondition===s.ConditionType.DIRECT));if(!t||![s.TransitionType.FINISH,s.TransitionType.REDIRECT].includes(t.transition)){if(t&&t.transitionDestiny)return t.transitionDestiny;for(const t of this.nodes.values())if(t.position===e.position+1)return t.id}}getFirstPage(){let e,t=Number.MAX_VALUE;for(const i of this.nodes.values())i.position<t&&(t=i.position,e=i);return e}getNextPage(e,t){var i;if(!e)return;e.edges.sort(((e,t)=>\"DIRECT\"===e.typeCondition?1:\"DIRECT\"===t.typeCondition?-1:0));const n=e.edges.find((i=>{const n=e.questions.find((e=>e.ref===i.questionRef)),a=null==t?void 0:t.filter((e=>e.key===i.questionRef));if(\"DIRECT\"===i.typeCondition)return!0;if(!a||0===a.length)return!1;if((null==n?void 0:n.type)===r.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX)return this.evaluateMatrixCondition(i,a);const o=Array.isArray(i.value)?i.value:[i.value];switch(i.typeOperator){case s.OperatorType.EQUAL:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.includes(e)))));case s.OperatorType.NOEQUAL:return a.every((e=>(Array.isArray(e.value)?e.value:[e.value]).every((e=>!o.includes(e)))));case s.OperatorType.GREATER:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.some((t=>Number(e)>Number(t)))))));case s.OperatorType.LESS:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.some((t=>Number(e)<Number(t)))))));case s.OperatorType.GREATEREQUAL:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.some((t=>Number(e)>=Number(t)))))));case s.OperatorType.LESSEQUAL:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.some((t=>Number(e)<=Number(t)))))));case s.OperatorType.INQ:return a.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>o.includes(e)))));case s.OperatorType.NINQ:return a.every((e=>(Array.isArray(e.value)?e.value:[e.value]).every((e=>!o.includes(e)))));default:return!1}}));if(!n){const t=this.getNextEdgeByDefault(e);if(!t)return;return this.getNodeById(t)}switch(n.transition){case s.TransitionType.PAGE:if(!n.transitionDestiny)return;return this.getNodeById(n.transitionDestiny);case s.TransitionType.FINISH:return;case s.TransitionType.REDIRECT:return void(window.location.href=(null===(i=n.transitionDestiny)||void 0===i?void 0:i.includes(\"?\"))?`${n.transitionDestiny}&${window.location.search.slice(1)}`:`${n.transitionDestiny}${window.location.search}`);default:return}}findDepth(e){const t=this.getNodeById(e);if(!t)return 0;const i=new Set;return this.DFSUtil(t,i,0)}findMaxDepth(e){if(e||(e=this.getFirstPage()),!e)return 0;const t=new Set;let i=1;return i=Math.max(i,this.DFSUtil(e,t,i)),i}DFSUtil(e,t,i){t.add(e);let n=i;const r=[...e.edges.filter((e=>e.typeCondition!==s.ConditionType.PRECONDITIONAL))||[]],a=this.getNextEdgeByDefault(e);if(a){const i=this.getNodeById(a);i&&!t.has(i)&&r.push(new s.PageRoute(i.id,\"\",s.OperatorType.DEFAULT,[\"\"],s.TransitionType.PAGE,i.id,e.id))}for(const e of r){if(!e.transitionDestiny)continue;const r=this.getNodeById(e.transitionDestiny);if(r&&!t.has(r)){const e=i+1,s=new Set(t),a=this.DFSUtil(r,s,e);n=Math.max(n,a)}}return n}parseMatrixAnswer(e){if(!e||!e.value)return[];if(1===e.value.length&&\"string\"==typeof e.value[0]&&e.value[0].trim().startsWith(\"[\"))try{const t=JSON.parse(e.value[0]);if(Array.isArray(t))return t}catch(e){return[]}return Array.isArray(e.value)&&e.value.length>0&&\"object\"==typeof e.value[0]&&null!==e.value[0]&&\"key\"in e.value[0]?e.value:[]}evaluateMatrixCondition(e,t){const i=Array.isArray(e.value)?e.value:[e.value],n=new Set(e.option||[]),r=t[0],a=this.parseMatrixAnswer(r);if(!a.length)return!1;const o=n.size>0?a.filter((e=>n.has(e.key))):a;if(!o.length)return!1;switch(e.typeOperator){case s.OperatorType.EQUAL:case s.OperatorType.INQ:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.includes(e)))));case s.OperatorType.NOEQUAL:case s.OperatorType.NINQ:return o.every((e=>(Array.isArray(e.value)?e.value:[e.value]).every((e=>!i.includes(e)))));case s.OperatorType.GREATER:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)>Number(t)))))));case s.OperatorType.LESS:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)<Number(t)))))));case s.OperatorType.GREATEREQUAL:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)>=Number(t)))))));case s.OperatorType.LESSEQUAL:return o.some((e=>(Array.isArray(e.value)?e.value:[e.value]).some((e=>i.some((t=>Number(e)<=Number(t)))))));default:return!1}}}},636:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PageNode=void 0,t.PageNode=class{constructor(e,t,i,n,r,s=!1){this.answers=[],this.id=e,this.position=t,this.edges=i,this.data=n,this.questions=r.sort(((e,t)=>e.position-t.position)),this.elements=[],this.isFollowup=s}getFollowupQuestions(){return this.questions.filter((e=>e.followup)).map((e=>e.ref))}getRequiredQuestions(){return this.questions.filter((e=>e.require)).map((e=>e.ref))}setAnswer(e){this.answers=e}}},591:(e,t)=>{\"use strict\";var i,n,r,s;Object.defineProperty(t,\"__esModule\",{value:!0}),t.PageRoute=t.StatusType=t.OperatorType=t.ConditionType=t.TransitionType=void 0,(s=t.TransitionType||(t.TransitionType={})).PAGE=\"PAGE\",s.FINISH=\"FINISH\",s.REDIRECT=\"REDIRECT\",s.NEXT=\"NEXT\",s.ALLOW=\"ALLOW\",function(e){e.LOGICAL=\"LOGICAL\",e.DIRECT=\"DIRECT\",e.PRECONDITIONAL=\"PRECONDITIONAL\"}(i=t.ConditionType||(t.ConditionType={})),(r=t.OperatorType||(t.OperatorType={})).EQUAL=\"EQUAL\",r.NOEQUAL=\"NOEQUAL\",r.GREATER=\"GREATER\",r.LESS=\"LESS\",r.GREATEREQUAL=\"GREATEREQUAL\",r.LESSEQUAL=\"LESSEQUAL\",r.INQ=\"INQ\",r.NINQ=\"NINQ\",r.DEFAULT=\"DEFAULT\",function(e){e.ACTIVE=\"ACTIVE\",e.DEPRECATED=\"DEPRECATED\",e.DELETE=\"DELETE\"}(n=t.StatusType||(t.StatusType={})),t.PageRoute=class{constructor(e,t,r,s,a,o,l,d,c,u){this.id=e,this.questionRef=t,this.typeCondition=d||i.LOGICAL,this.typeOperator=r,this.value=s||[],this.transition=a,this.transitionDestiny=o,this.status=n.ACTIVE,this.generatedAt=new Date,this.updatedAt=new Date,this.integrationPageId=l,this.position=c||0,this.option=u||[]}}},558:(e,t)=>{\"use strict\";var i,n;Object.defineProperty(t,\"__esModule\",{value:!0}),t.QuestionType=t.FEEDBACKAPPANSWERTYPE=void 0,(n=t.FEEDBACKAPPANSWERTYPE||(t.FEEDBACKAPPANSWERTYPE={})).CONTACT=\"CONTACT\",n.MULTIPLECHOISE_IMAGE=\"MULTIPLECHOISE_IMAGE\",n.EMAIL=\"EMAIL\",n.RATING_STAR=\"RATING_STAR\",n.RADIO=\"RADIO\",n.MULTIPLECHOICE=\"MULTIPLECHOICE\",n.SELECT=\"SELECT\",n.TEXT=\"TEXT\",n.LONGTEXT=\"LONGTEXT\",n.NUMBER=\"NUMBER\",n.RATING_EMOJI=\"RATING_EMOJI\",n.RATING_NUMBER=\"RATING_NUMBER\",n.DATE=\"DATE\",n.BOOLEAN=\"BOOLEAN\",n.PASSWORD=\"PASSWORD\",n.CONSENT=\"CONSENT\",n.MULTI_QUESTION_MATRIX=\"MULTI_QUESTION_MATRIX\",n.POINT_SYSTEM=\"POINT_SYSTEM\",n.PRIORITY_LIST=\"PRIORITY_LIST\",n.INFO_PAGE=\"INFO_PAGE\",n.UPLOAD_FILE=\"UPLOAD_FILE\",n.UPLOAD_IMAGE=\"UPLOAD_IMAGE\",t.QuestionType=class{},function(e){e.FORM=\"form\",e.DIV=\"div\"}(i||(i={}))},516:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getUrlParam=t.getBooleanOptions=t.parseTitle=void 0,t.parseTitle=function(e,t){return e?\"object\"==typeof e?e[t]||e.en:e:\"\"},t.getBooleanOptions=function(e){switch(e){case\"es\":return[\"Sí\",\"No\"];case\"fr\":return[\"Oui\",\"Non\"];case\"de\":return[\"Ja\",\"Nein\"];case\"it\":return[\"Sì\",\"No\"];case\"pt\":return[\"Sim\",\"Não\"];case\"nl\":return[\"Ja\",\"Nee\"];case\"pl\":return[\"Tak\",\"Nie\"];case\"ru\":return[\"Да\",\"Нет\"];case\"ja\":return[\"はい\",\"いいえ\"];case\"zh\":return[\"是\",\"不\"];case\"ko\":return[\"예\",\"아니\"];case\"da\":case\"sv\":return[\"Ja\",\"Nej\"];case\"fi\":return[\"Kyllä\",\"Ei\"];case\"no\":return[\"Ja\",\"Nei\"];case\"ar\":return[\"نعم\",\"لا\"];case\"bn\":return[\"হ্যাঁ\",\"না\"];default:return[\"Yes\",\"No\"]}},t.getUrlParam=function(e){return new URLSearchParams(window.location.search).get(e)}},559:(e,t)=>{\"use strict\";function i(e,t,i,n,r=!1,s=!0,a=\"ltr\",o=\"row\"){const l=document.createElement(\"div\");l.classList.add(\"magicfeedback-rating-placeholder\"),l.style.display=\"flex\",l.style.flexDirection=o,l.style.alignItems=\"center\",l.style.justifyContent=\"space-between\",l.style.width=r?`calc(100% - (100% / ${t+1}))`:\"100%\",l.style.marginRight=\"auto\",s&&window.innerWidth<600&&(l.style.flexDirection=\"column\");const d=document.createElement(\"span\");d.textContent=null!=i?i:null,d.classList.add(\"magicfeedback-rating-placeholder-value\"),d.style.fontSize=\"15px\",d.style.display=\"block\",d.style.minWidth=\"0\",d.style.overflowWrap=\"anywhere\",d.style.wordBreak=\"break-word\",d.style.textAlign=\"ltr\"===a?\"left\":\"right\",d.style.width=\"50%\",(s&&window.innerWidth<600||\"column\"===o)&&(d.textContent=`${e} = ${i}`,d.style.width=\"100%\",d.style.textAlign=\"left\",d.style.marginBottom=\"5px\");const c=document.createElement(\"span\");return c.textContent=null!=n?n:null,c.classList.add(\"magicfeedback-rating-placeholder-value\"),c.style.fontSize=\"15px\",c.style.display=\"block\",c.style.minWidth=\"0\",c.style.overflowWrap=\"anywhere\",c.style.wordBreak=\"break-word\",c.style.textAlign=\"ltr\"===a?\"right\":\"left\",c.style.width=\"50%\",(s&&window.innerWidth<600||\"column\"===o)&&(c.textContent=`${t} = ${n}`,c.style.width=\"100%\",c.style.textAlign=\"left\",c.style.marginBottom=\"5px\"),\"ltr\"===a?(i&&l.appendChild(d),n&&l.appendChild(c)):(n&&l.appendChild(c),i&&l.appendChild(d)),l}Object.defineProperty(t,\"__esModule\",{value:!0}),t.createRatingNumberElement=t.createStarRating=t.createRatingPlaceholder=void 0,t.createRatingPlaceholder=i,t.createStarRating=function(e,t,n,r=()=>{},s){const a=\"magicfeedback-rating-star-selected\",o=document.createElement(\"div\");o.classList.add(\"magicfeedback-rating-star-container\"),o.style.maxWidth=\"300px\",o.style.margin=\"auto\",o.dataset.originalSelection=\"0\";for(let t=1;t<=5;t++){const i=document.createElement(\"label\");i.classList.add(\"magicfeedback-rating-star-option\");const n=document.createElement(\"input\");n.id=`rating-${e}-${t}`,n.type=\"radio\",n.name=e,n.value=t.toString(),n.style.position=\"absolute\",n.style.opacity=\"0\",n.style.width=\"0\",n.style.height=\"0\",n.classList.add(\"magicfeedback-input\"),s&&s===n.value&&(n.checked=!0),n.addEventListener(\"change\",(()=>{const e=o.querySelectorAll(\".rating__star\");for(let t=0;t<e.length;t++)t+1<=Number(n.value)?e[t].classList.contains(a)||e[t].classList.add(a):e[t].classList.contains(a)&&e[t].classList.remove(a);o.dataset.originalSelection=n.value,r&&r()})),i.appendChild(n);const l=document.createElement(\"label\");l.htmlFor=`rating-${e}-${t}`,l.classList.add(\"rating__star\"),l.textContent=\"★\",l.style.fontSize=\"40px\",l.style.color=\"#CCCCCC\",l.style.cursor=\"pointer\",l.addEventListener(\"mouseenter\",(()=>{const e=o.querySelectorAll(\".rating__star\"),i=t-1;e.forEach(((e,t)=>{t<=i?e.classList.contains(a)||e.classList.add(a):e.classList.contains(a)&&e.classList.remove(a)}))})),l.addEventListener(\"mouseleave\",(()=>{const e=Number(o.dataset.originalSelection||\"0\");o.querySelectorAll(\".rating__star\").forEach(((t,i)=>{i<e?t.classList.contains(a)||t.classList.add(a):t.classList.contains(a)&&t.classList.remove(a)}))})),i.appendChild(l),o.appendChild(i)}const l=i(1,5,t,n,!1,!1);return l.childElementCount>0&&(o.classList.add(\"magicfeedback-rating-container--with-placeholder\"),o.insertBefore(l,o.firstChild)),o},t.createRatingNumberElement=function(e,t,n,r,s,a,o,l){var d;const c=document.createElement(\"div\");c.classList.add(\"magicfeedback-rating-number\");const u=\"ltr\"===n?r:`${r}-reverse`,p=document.createElement(\"div\");p.classList.add(\"magicfeedback-rating-number-container\"),p.classList.add(`magicfeedback-rating-number-container-${n}`),p.classList.add(`magicfeedback-rating-number-container-${r}`),p.style.display=\"flex\",p.style.flexDirection=u,p.setAttribute(\"role\",\"radiogroup\"),p.setAttribute(\"aria-label\",(null==t?void 0:t.ariaLabel)||\"Rating\");const m=(null==t?void 0:t.max)?Number(null==t?void 0:t.max):10,h=(null==t?void 0:t.min)?Number(null==t?void 0:t.min):0,f=(null==t?void 0:t.numberPlaceholders)||null,v=!(s||\"column\"===r)&&((null==t?void 0:t.minPlaceholder)||(null==t?void 0:t.maxPlaceholder));if(v){const e=i(h,m,null==t?void 0:t.minPlaceholder,null==t?void 0:t.maxPlaceholder,null!==(d=null==t?void 0:t.extraOption)&&void 0!==d&&d,!1,n,\"row\");e.childElementCount>0&&(p.classList.add(\"magicfeedback-rating-number-container--with-placeholder\"),p.insertBefore(e,p.firstChild))}for(let i=h;i<=m;i++){const n=document.createElement(\"div\");n.classList.add(\"magicfeedback-rating-number-option\"),n.classList.add(`magicfeedback-rating-number-option-${r}`);const d=document.createElement(\"label\");d.htmlFor=`rating-${e}-${i}`,d.classList.add(\"magicfeedback-rating-number-option-label-container\");let c=i.toString();v?f&&f[i]&&!s&&(d.title=f[i]):f&&f[i]?c+=` = ${f[i]}`:i===h&&(null==t?void 0:t.minPlaceholder)?c+=` = ${null==t?void 0:t.minPlaceholder}`:i===m&&(null==t?void 0:t.maxPlaceholder)&&(c+=` = ${null==t?void 0:t.maxPlaceholder}`);const u=document.createElement(\"input\");u.id=`rating-${e}-${i}`,u.type=\"radio\",u.name=e,u.value=i.toString(),u.classList.add(a),u.classList.add(\"magicfeedback-input\"),u.setAttribute(\"aria-label\",`${i}`),o&&u.addEventListener(\"change\",(()=>o())),l&&l===u.value&&(u.checked=!0);const g=document.createElement(\"label\");g.htmlFor=`rating-${e}-${i}`,g.textContent=c,g.classList.add(\"magicfeedback-rating-number-value\"),d.appendChild(u),d.appendChild(g),n.appendChild(d),p.appendChild(n)}if((null==t?void 0:t.extraOption)&&(null==t?void 0:t.extraOptionText)){const i=document.createElement(\"div\");i.classList.add(\"magicfeedback-rating-number-option\");const r=document.createElement(\"label\");r.htmlFor=`rating-${e}-extra`,r.classList.add(\"magicfeedback-rating-number-option-label-container\");const s=document.createElement(\"input\");s.id=`rating-${e}-extra`,s.type=\"radio\",s.name=e,s.value=\"-\",s.classList.add(a),s.classList.add(\"magicfeedback-input\"),s.setAttribute(\"aria-label\",null==t?void 0:t.extraOptionText),o&&s.addEventListener(\"change\",(()=>o()));const l=document.createElement(\"label\");l.htmlFor=`rating-${e}-extra`,l.textContent=null==t?void 0:t.extraOptionText,l.classList.add(\"magicfeedback-rating-number-value\"),r.appendChild(s),r.appendChild(l),i.appendChild(r),\"ltr\"===n?p.appendChild(i):p.insertBefore(i,p.firstChild)}return c.appendChild(p),c}},42:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getQuestionRenderer=void 0;const n=i(558),r=i(998),s=i(72),a=i(732),o=i(90),l=i(65),d=i(85),c=i(817),u=i(965),p=i(180),m=i(991),h=i(152),f=i(917),v=i(452),g=i(644),y=i(773),b=i(66),E=i(843),k=i(250),A=i(409),C=i(282),T=new Map([[n.FEEDBACKAPPANSWERTYPE.TEXT,o.renderText],[n.FEEDBACKAPPANSWERTYPE.LONGTEXT,s.renderLongText],[n.FEEDBACKAPPANSWERTYPE.NUMBER,a.renderNumber],[n.FEEDBACKAPPANSWERTYPE.RADIO,r.renderChoice],[n.FEEDBACKAPPANSWERTYPE.MULTIPLECHOICE,r.renderChoice],[n.FEEDBACKAPPANSWERTYPE.BOOLEAN,l.renderBoolean],[n.FEEDBACKAPPANSWERTYPE.SELECT,d.renderSelect],[n.FEEDBACKAPPANSWERTYPE.DATE,c.renderDate],[n.FEEDBACKAPPANSWERTYPE.EMAIL,u.renderEmail],[n.FEEDBACKAPPANSWERTYPE.PASSWORD,p.renderPassword],[n.FEEDBACKAPPANSWERTYPE.CONSENT,m.renderConsent],[n.FEEDBACKAPPANSWERTYPE.RATING_EMOJI,h.renderRatingEmoji],[n.FEEDBACKAPPANSWERTYPE.RATING_NUMBER,f.renderRatingNumber],[n.FEEDBACKAPPANSWERTYPE.RATING_STAR,v.renderRatingStar],[n.FEEDBACKAPPANSWERTYPE.MULTI_QUESTION_MATRIX,g.renderMatrix],[n.FEEDBACKAPPANSWERTYPE.PRIORITY_LIST,y.renderPriorityList],[n.FEEDBACKAPPANSWERTYPE.POINT_SYSTEM,b.renderPointSystem],[n.FEEDBACKAPPANSWERTYPE.UPLOAD_IMAGE,E.renderUploadImage],[n.FEEDBACKAPPANSWERTYPE.UPLOAD_FILE,k.renderUploadFile],[n.FEEDBACKAPPANSWERTYPE.MULTIPLECHOISE_IMAGE,A.renderMultipleChoiceImage],[n.FEEDBACKAPPANSWERTYPE.INFO_PAGE,C.renderInfoPage]]);t.getQuestionRenderer=function(e){return T.get(e)}},65:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderBoolean=void 0;const n=i(516);t.renderBoolean=({question:e,language:t,urlParamValue:i,send:r})=>{const{ref:s,assets:a}=e,o=document.createElement(\"div\"),l=\"magicfeedback-radio\",d=document.createElement(\"div\");return d.classList.add(\"magicfeedback-boolean-container\"),d.style.display=\"flex\",d.style.flexDirection=\"row\",d.style.justifyContent=\"space-between\",d.style.width=\"70%\",d.style.margin=\"auto\",((null==a?void 0:a.addIcon)?[\"👍\",\"👎\"]:(0,n.getBooleanOptions)(t)).forEach(((e,t)=>{const n=document.createElement(\"label\");n.classList.add(\"magicfeedback-boolean-option\"),n.htmlFor=`rating-${s}-${t}`,n.style.cursor=\"pointer\",n.style.display=\"flex\",n.style.justifyContent=\"center\",n.style.alignItems=\"center\",n.style.margin=\"auto\",n.style.padding=\"0\",n.style.width=\"45%\",n.style.height=\"38px\";const a=document.createElement(\"label\");a.htmlFor=`rating-${s}-${t}`,a.textContent=e,a.style.margin=\"0\",a.style.padding=\"0\";const o=document.createElement(\"input\");o.id=`rating-${s}-${t}`,o.type=\"radio\",o.name=s,o.value=[\"Yes\",\"No\"][t],o.classList.add(l),o.classList.add(\"magicfeedback-input\"),o.style.position=\"absolute\",o.style.opacity=\"0\",o.style.width=\"0\",o.style.height=\"0\",o.style.margin=\"0\",o.addEventListener(\"change\",(()=>{r&&r()})),i&&i.toLowerCase()===o.value.toLowerCase()&&(o.checked=!0),n.appendChild(o),n.appendChild(a),d.appendChild(n)})),o.appendChild(d),{element:o,elementTypeClass:l}}},998:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderChoice=void 0;const n=i(558),r=i(784);t.renderChoice=({question:e,language:t,urlParamValue:i,randomPosition:s,send:a})=>{const{type:o,ref:l,value:d,defaultValue:c,assets:u}=e,p=document.createElement(\"div\"),m=\"magicfeedback-\"+(\"MULTIPLECHOICE\"===o?\"checkbox\":\"radio\");let h=d||[];s&&(h=h.sort((()=>Math.random()-.5)));let f=(null==u?void 0:u.exclusiveAnswers)||[];(null==u?void 0:u.extraOption)&&(f=f.filter((e=>e!==u.extraOptionText))),f.length>0&&(null==f||f.forEach((e=>{h.includes(e)||h.push(e)})));const v=null==u?void 0:u.extraOptionText;return(null==u?void 0:u.extraOption)&&v&&!h.includes(v)&&h.push(v),h.forEach(((e,s)=>{const d=document.createElement(\"div\");d.classList.add(`magicfeedback-${\"MULTIPLECHOICE\"===o?\"checkbox\":\"radio\"}-container`);const v=document.createElement(\"label\"),g=document.createElement(\"input\");if(g.id=`rating-${l}-${s}`,g.type=\"MULTIPLECHOICE\"===o?\"checkbox\":\"radio\",g.name=l,g.value=e,g.classList.add(m),g.classList.add(\"magicfeedback-input\"),o===n.FEEDBACKAPPANSWERTYPE.MULTIPLECHOICE&&(null==u?void 0:u.maxOptions)&&(null==u?void 0:u.maxOptions)>0&&g.addEventListener(\"change\",(()=>{document.querySelectorAll(`input[name=\"${l}\"]:checked`).length>(null==u?void 0:u.maxOptions)&&(g.checked=!1)})),o===n.FEEDBACKAPPANSWERTYPE.RADIO&&a&&(!(null==u?void 0:u.extraOptionText)||(null==u?void 0:u.extraOptionText)&&e!==(null==u?void 0:u.extraOptionText))&&g.addEventListener(\"change\",(()=>{a()})),e!==c&&e!==i||(g.checked=!0),v.textContent=e,v.htmlFor=`rating-${l}-${s}`,g.addEventListener(\"change\",(t=>{const i=document.getElementById(`extra-option-${l}`);t.target.checked&&f.includes(e)?(h.forEach((t=>{t!==e&&(document.querySelector(`input[value=\"${t}\"]`).checked=!1)})),i&&(i.style.display=\"none\")):f.forEach((t=>{t!==e&&(document.querySelector(`input[value=\"${t}\"]`).checked=!1)})),(null==u?void 0:u.extraOption)&&e===(null==u?void 0:u.extraOptionText)&&i&&(i.style.display=t.target.checked?\"block\":\"none\")})),d.appendChild(g),d.appendChild(v),p.appendChild(d),(null==u?void 0:u.extraOption)&&e===(null==u?void 0:u.extraOptionText)){const e=document.createElement(\"input\");e.type=\"text\",e.placeholder=(null==u?void 0:u.extraOptionPlaceholder)||r.placeholder.answer(t||\"en\"),e.classList.add(\"magicfeedback-extra-option\"),e.classList.add(\"magicfeedback-input\"),e.id=`extra-option-${l}`,e.name=`extra-option-${l}`,e.style.display=\"none\",p.appendChild(e)}})),{element:p,elementTypeClass:m}}},991:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderConsent=void 0,t.renderConsent=({question:e,urlParamValue:t,send:i})=>{const{id:n,ref:r,value:s,require:a}=e,o=document.createElement(\"input\");return o.type=\"checkbox\",o.id=`magicfeedback-${n}`,o.name=r,o.value=\"true\",o.required=a,o.classList.add(\"magicfeedback-consent\"),o.classList.add(\"magicfeedback-input\"),t&&s.includes(t)&&(o.checked=!0),i&&o.addEventListener(\"change\",(()=>{i()})),{element:o,elementTypeClass:\"magicfeedback-consent\"}}},817:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderDate=void 0;const n=i(784);t.renderDate=({language:e,placeholderText:t,urlParamValue:i})=>{const r=document.createElement(\"input\");return r.type=\"date\",r.placeholder=t||n.placeholder.date(e||\"en\"),i&&(r.value=i),{element:r,elementTypeClass:\"magicfeedback-date\"}}},965:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderEmail=void 0,t.renderEmail=({placeholderText:e,urlParamValue:t})=>{const i=document.createElement(\"input\");return i.type=\"email\",i.placeholder=e||\"you@example.com\",t&&(i.value=t),{element:i,elementTypeClass:\"magicfeedback-email\"}}},282:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderInfoPage=void 0,t.renderInfoPage=({question:e,placeholderText:t})=>{var i,n;const r=document.createElement(\"div\");if(\"string\"==typeof(null===(i=e.assets)||void 0===i?void 0:i.placeholder)?\"\"!==e.assets.placeholder.trim():Boolean(null===(n=e.assets)||void 0===n?void 0:n.placeholder)){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-info-message\"),e.innerHTML=t||\"\",r.appendChild(e)}return{element:r,elementTypeClass:\"magicfeedback-info-page\"}}},72:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderLongText=void 0;const n=i(784);t.renderLongText=({language:e,placeholderText:t,urlParamValue:i,maxCharacters:r})=>{const s=document.createElement(\"textarea\");return s.rows=3,r>0&&(s.maxLength=r),s.placeholder=t||n.placeholder.answer(e||\"en\"),i&&(s.value=i),{element:s,elementTypeClass:\"magicfeedback-longtext\"}}},644:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderMatrix=void 0,t.renderMatrix=({question:e,isPhone:t,randomPosition:i})=>{const{ref:n,value:r,assets:s}=e,a=document.createElement(\"div\"),o=document.createElement(\"div\");o.classList.add(\"magicfeedback-multi-question-matrix-container\");let l=(null==s?void 0:s.options)||[],d=[...r],c=[];if(i&&(l=null==l?void 0:l.sort((()=>Math.random()-.5)),d=[...d].sort((()=>Math.random()-.5))),(null==s?void 0:s.exclusiveAnswers)&&(c=null==s?void 0:s.exclusiveAnswers,null==c||c.forEach((e=>{d.includes(e)||d.push(e)}))),t){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-multi-question-matrix-list\"),null==l||l.forEach((t=>{const i=document.createElement(\"div\");i.classList.add(\"magicfeedback-multi-question-matrix-list-item\"),i.style.display=\"flex\",i.style.flexDirection=\"column\",i.style.alignItems=\"flex-start\",i.style.marginBottom=\"10px\";const r=document.createElement(\"label\");r.classList.add(\"magicfeedback-multi-question-matrix-label\"),r.style.paddingBottom=\"10px\",r.textContent=t,i.appendChild(r),d.forEach((e=>{const r=document.createElement(\"div\");r.classList.add(\"magicfeedback-radio-container\"),r.style.display=\"flex\",r.style.alignItems=\"center\",r.style.justifyContent=\"flex-start\",r.style.width=\"99%\",r.style.margin=\"5px auto\";const s=document.createElement(\"label\"),a=document.createElement(\"input\");a.id=`${n}-${t}-${e}`,a.type=\"radio\",a.name=`${n}-${t}`,a.value=e,a.classList.add(\"magicfeedback-input\"),s.textContent=e,s.htmlFor=`${n}-${t}-${e}`,r.appendChild(a),r.appendChild(s),i.appendChild(r)})),e.appendChild(i)})),o.appendChild(e)}else{const e=document.createElement(\"table\");e.classList.add(\"magicfeedback-multi-question-matrix-table\");const t=document.createElement(\"thead\");t.classList.add(\"magicfeedback-multi-question-matrix-header\"),t.style.paddingBottom=\"15px\";const i=document.createElement(\"tr\"),r=document.createElement(\"th\");i.appendChild(r),d.forEach((e=>{const t=document.createElement(\"th\");t.textContent=e,i.appendChild(t)})),t.appendChild(i),e.appendChild(t);const s=document.createElement(\"tbody\");null==l||l.forEach((e=>{const t=document.createElement(\"tr\");t.classList.add(\"magicfeedback-multi-question-matrix-row-tr\");const i=document.createElement(\"td\");i.style.minWidth=\"200px\",i.style.padding=\"10px\";const r=document.createElement(\"label\");r.classList.add(\"magicfeedback-multi-question-matrix-label\"),r.textContent=e,i.appendChild(r),t.appendChild(i),d.forEach((i=>{const r=document.createElement(\"td\"),s=document.createElement(\"input\");s.type=\"radio\",s.name=`${n}-${e}`,s.value=i,s.id=`${n}-${e}-${i}`,s.classList.add(\"magicfeedback-input\"),r.appendChild(s),t.appendChild(r)})),s.appendChild(t)})),e.appendChild(s),o.appendChild(e)}return a.appendChild(o),{element:a,elementTypeClass:\"magicfeedback-multi-question-matrix\"}}},409:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderMultipleChoiceImage=void 0,t.renderMultipleChoiceImage=({question:e,randomPosition:t,urlParamValue:i,send:n})=>{const r=document.createElement(\"div\"),{ref:s,assets:a}=e;let o=[...e.value];const l=document.createElement(\"div\");l.classList.add(\"magicfeedback-multiple-choice-image-container\"),l.style.display=\"flex\",l.style.flexDirection=\"row\",l.style.flexWrap=\"wrap\",l.style.justifyContent=\"center\";const d=o.length;let c=1,u=1;if(window.innerWidth<600)c=1,u=d;else switch(d){case 1:case 2:case 3:c=d,u=1;break;case 4:case 5:case 6:u=2,c=Math.ceil(d/u);break;case 7:case 8:case 9:u=3,c=Math.ceil(d/u);break;default:u=4,c=Math.ceil(d/u)}const p=void 0!==(null==a?void 0:a.addTitle)&&(null==a?void 0:a.addTitle),m=void 0!==(null==a?void 0:a.multiOption)&&(null==a?void 0:a.multiOption),h=void 0!==(null==a?void 0:a.extraOption)&&(null==a?void 0:a.extraOption);function f(e){try{const{position:t,url:r,value:a}=e,o=document.createElement(\"div\");o.classList.add(\"magicfeedback-multiple-choice-image-option\"),o.style.width=`calc(100% / ${c} - 2px)`,o.style.height=`calc(100% / ${u} - 2px)`,o.style.padding=\"8px\",o.style.margin=\"0\";const d=document.createElement(\"label\");d.classList.add(\"magicfeedback-image-option-label-container\"),d.htmlFor=`rating-${s}-${t}`,d.style.cursor=\"pointer\",d.addEventListener(\"click\",(()=>{d.style.border=\"2px solid #000\"}));const h=document.createElement(\"label\");h.textContent=a,h.classList.add(\"magicfeedback-multiple-choice-image-label\");const f=document.createElement(\"input\");f.id=`rating-${s}-${t}`,f.type=m?\"checkbox\":\"radio\",f.name=s,f.value=a,f.style.position=\"absolute\",f.style.opacity=\"0\",f.style.width=\"0\",f.style.height=\"0\",f.classList.add(\"magicfeedback-input\"),i&&i===f.value&&(f.checked=!0),!m&&n&&f.addEventListener(\"change\",(()=>{n()}));const v=document.createElement(\"img\");v.classList.add(\"magicfeedback-multiple-choice-image-image\"),v.src=r,v.style.cursor=\"pointer\",v.style.backgroundSize=\"cover\",v.style.backgroundPosition=\"center\",v.style.width=\"100%\",v.style.height=\"100%\",v.style.objectFit=\"cover\",v.style.margin=\"auto\",d.appendChild(f),d.appendChild(v),p&&d.appendChild(h),o.appendChild(d),l.appendChild(o)}catch(e){console.error(e)}}return t&&(o=o.sort((()=>Math.random()-.5))),o.forEach((e=>f(JSON.parse(e)))),h&&(null==a?void 0:a.extraOptionValue)&&(null==a?void 0:a.extraOptionValue.length)>0&&f(null==a?void 0:a.extraOptionValue[0]),r.appendChild(l),{element:r,elementTypeClass:\"magicfeedback-multiple-choice-image\"}}},732:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderNumber=void 0;const n=i(784),r=i(516);t.renderNumber=({question:e,format:t,language:i,urlParamValue:s})=>{const a=document.createElement(\"input\");a.type=\"number\",a.placeholder=\"slim\"===t?(0,r.parseTitle)(e.title,i):n.placeholder.number(i||\"en\");const{value:o}=e;return o.length&&(o.sort(((e,t)=>Number(e)-Number(t))),a.max=o[o.length-1],a.min=o[0],a.value=o[0]),s&&!isNaN(Number(s))&&(a.value=s),{element:a,elementTypeClass:\"magicfeedback-number\"}}},180:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderPassword=void 0;const n=i(784);t.renderPassword=({language:e,placeholderText:t,urlParamValue:i})=>{const r=document.createElement(\"input\");return r.type=\"password\",r.placeholder=t||n.placeholder.password(e||\"en\"),i&&(r.value=i),{element:r,elementTypeClass:\"magicfeedback-password\"}}},66:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderPointSystem=void 0;const n=i(784);t.renderPointSystem=({question:e,language:t})=>{const{ref:i,value:r}=e,s=document.createElement(\"div\"),a=document.createElement(\"div\");a.classList.add(\"magicfeedback-point-system-container\");const o=document.createElement(\"ul\");o.classList.add(\"magicfeedback-point-system-list\"),o.style.padding=\"0\";const l=100/r.length,d=document.createElement(\"div\");d.classList.add(\"magicfeedback-error\"),d.textContent=n.placeholder.pointsystemerror(t||\"en\"),d.style.color=\"#C70039\",d.style.fontSize=\"14px\",d.style.textAlign=\"right\",d.style.width=\"100%\",d.style.display=\"none\";const c=document.createElement(\"div\");return c.classList.add(\"magicfeedback-point-system-total\"),c.textContent=\"0 / 100 %\",c.style.textAlign=\"right\",c.style.fontSize=\"15px\",c.style.marginTop=\"5px\",r.forEach(((e,t)=>{const n=document.createElement(\"li\");n.classList.add(\"magicfeedback-point-system-item\"),n.style.display=\"flex\",n.style.justifyContent=\"space-between\",n.style.alignItems=\"center\",n.style.margin=\"5px\";const r=document.createElement(\"label\");r.textContent=e,r.style.fontSize=\"15px\",n.appendChild(r);const s=document.createElement(\"span\");s.classList.add(\"magicfeedback-point-system-input-container\");const a=document.createElement(\"input\");a.name=i,a.id=`${e}`,a.type=\"number\",a.min=\"0\",a.max=\"100\",a.value=\"0\",a.classList.add(\"magicfeedback-input\"),a.style.width=\"40px\",a.style.border=\"0\",a.style.textAlign=\"center\",a.style.margin=\"0 5px\",a.autofocus=0===t;const u=document.createElement(\"span\");u.textContent=\"%\",u.style.color=\"#000\",a.addEventListener(\"input\",(()=>{const e=o.querySelectorAll(\"input\");let t=0;e.forEach((e=>{t+=Number(e.value)})),t>100&&(a.value=`${l}%`,t-=Number(a.value));const i=document.getElementById(\"magicfeedback-submit\");i&&(t<100?(c.style.color=\"orange\",i.setAttribute(\"disabled\",\"true\")):(d.style.display=\"none\",c.style.color=\"green\",i.removeAttribute(\"disabled\"))),c.textContent=`${t} / 100 %`})),a.addEventListener(\"focus\",(()=>{const e=document.getElementById(\"magicfeedback-submit\");e&&(e.setAttribute(\"disabled\",\"true\"),e.addEventListener(\"pointerover\",(()=>{const e=o.querySelectorAll(\"input\");let t=0;e.forEach((e=>{t+=Number(e.value)})),t<100&&(d.style.display=\"block\")})))})),s.appendChild(a),s.appendChild(u),n.appendChild(s),o.appendChild(n)})),a.appendChild(o),a.appendChild(c),a.appendChild(d),s.appendChild(a),{element:s,elementTypeClass:\"magicfeedback-point-system\"}}},773:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderPriorityList=void 0,t.renderPriorityList=({question:e,randomPosition:t,language:i})=>{var n,r,s;const a=document.createElement(\"div\"),o=function(e){const{value:t,ref:i,randomPosition:n=!1,limitPriority:r=!1,maxPriority:s=0,language:a=\"en\",placeholder:o=\"\"}=e,l=e=>{const t={en:{selectUpTo:\"Select up to\",options:\"options\",thenOrder:\"and then order them\",selectOptions:\"Select options\",cancel:\"Cancel\",confirm:\"Confirm\",selectOptionNumber:\"Select option #\",prioritized:\"Prioritized\",of:\"of\",instruction:\"Your priority list can be seen below. If you wish, you can rearrange your choices using the arrows. Click 'Next' to confirm your selection and proceed.\"},es:{selectUpTo:\"Selecciona hasta\",options:\"opciones\",thenOrder:\"y luego ordénalas\",selectOptions:\"Seleccionar opciones\",cancel:\"Cancelar\",confirm:\"Confirmar\",selectOptionNumber:\"Selecciona la opción #\",prioritized:\"Priorizadas\",of:\"de\",instruction:'Tu lista priorizada se muestra abajo. Si deseas, puedes reordenar las opciones con las flechas. Haz clic en \"Siguiente\" para confirmar y continuar.'},pt:{selectUpTo:\"Selecione até\",options:\"opções\",thenOrder:\"e depois ordene-as\",selectOptions:\"Selecionar opções\",cancel:\"Cancelar\",confirm:\"Confirmar\",selectOptionNumber:\"Selecione a opção #\",prioritized:\"Priorizadas\",of:\"de\",instruction:'Sua lista de prioridades pode ser vista abaixo. Se quiser, você pode reorganizar suas escolhas usando as setas. Clique em \"Próximo\" para confirmar sua seleção e continuar.'},fr:{selectUpTo:\"Sélectionnez jusqu'à\",options:\"options\",thenOrder:\"puis classez-les\",selectOptions:\"Sélectionner des options\",cancel:\"Annuler\",confirm:\"Confirmer\",selectOptionNumber:\"Sélectionnez l'option #\",prioritized:\"Priorisées\",of:\"sur\",instruction:'Votre liste de priorités est affichée ci-dessous. Si vous le souhaitez, vous pouvez réorganiser vos choix à l\\'aide des flèches. Cliquez sur \"Suivant\" pour confirmer votre sélection et continuer.'},de:{selectUpTo:\"Wählen Sie bis zu\",options:\"Optionen\",thenOrder:\"und ordnen Sie sie dann\",selectOptions:\"Optionen auswählen\",cancel:\"Abbrechen\",confirm:\"Bestätigen\",selectOptionNumber:\"Wählen Sie Option #\",prioritized:\"Priorisiert\",of:\"von\",instruction:'Ihre Prioritätenliste wird unten angezeigt. Wenn Sie möchten, können Sie Ihre Auswahl mit den Pfeilen neu anordnen. Klicken Sie auf \"Weiter\", um Ihre Auswahl zu bestätigen und fortzufahren.'},it:{selectUpTo:\"Seleziona fino a\",options:\"opzioni\",thenOrder:\"e poi ordinali\",selectOptions:\"Seleziona opzioni\",cancel:\"Annulla\",confirm:\"Conferma\",selectOptionNumber:\"Seleziona opzione #\",prioritized:\"Prioritizzate\",of:\"di\",instruction:'La tua lista di priorità è mostrata qui sotto. Se vuoi, puoi riordinare le tue scelte usando le frecce. Clicca su \"Avanti\" per confermare la selezione e continuare.'},nl:{selectUpTo:\"Selecteer tot\",options:\"opties\",thenOrder:\"en rangschik ze vervolgens\",selectOptions:\"Selecteer opties\",cancel:\"Annuleren\",confirm:\"Bevestigen\",selectOptionNumber:\"Selecteer optie #\",prioritized:\"Geprioriteerd\",of:\"van\",instruction:'Je prioriteitenlijst wordt hieronder weergegeven. Als je wilt, kun je je keuzes herschikken met behulp van de pijlen. Klik op \"Volgende\" om je selectie te bevestigen en door te gaan.'},pl:{selectUpTo:\"Wybierz do\",options:\"opcje\",thenOrder:\"a następnie je uporządkuj\",selectOptions:\"Wybierz opcje\",cancel:\"Anuluj\",confirm:\"Potwierdź\",selectOptionNumber:\"Wybierz opcję #\",prioritized:\"Priorytetowe\",of:\"z\",instruction:'Twoja lista priorytetów jest pokazana poniżej. Jeśli chcesz, możesz zmienić kolejność swoich wyborów za pomocą strzałek. Kliknij \"Dalej\", aby potwierdzić wybór i kontynuować.'},ru:{selectUpTo:\"Выберите до\",options:\"вариантов\",thenOrder:\"а затем упорядочьте их\",selectOptions:\"Выбрать варианты\",cancel:\"Отмена\",confirm:\"Подтвердить\",selectOptionNumber:\"Выберите вариант #\",prioritized:\"Приоритеты\",of:\"из\",instruction:'Ваш список приоритетов отображается ниже. Если хотите, вы можете изменить порядок вариантов с помощью стрелок. Нажмите \"Далее\", чтобы подтвердить выбор и продолжить.'},ja:{selectUpTo:\"最大\",options:\"個のオプションを選択\",thenOrder:\"その後並べ替えてください\",selectOptions:\"オプションを選択\",cancel:\"キャンセル\",confirm:\"確認\",selectOptionNumber:\"オプション # を選択\",prioritized:\"優先順位\",of:\"のうち\",instruction:\"優先順位リストは以下に表示されます。必要に応じて、矢印を使って選択肢を並べ替えることができます。「次へ」をクリックして選択を確定し、続行してください。\"},zh:{selectUpTo:\"最多选择\",options:\"个选项\",thenOrder:\"然后排序它们\",selectOptions:\"选择选项\",cancel:\"取消\",confirm:\"确认\",selectOptionNumber:\"选择选项 #\",prioritized:\"已优先\",of:\"共\",instruction:\"你的优先列表如下所示。如有需要,可以使用箭头重新排序选项。点击“下一步”确认选择并继续。\"},ko:{selectUpTo:\"최대\",options:\"개의 옵션 선택\",thenOrder:\"그런 다음 정렬하세요\",selectOptions:\"옵션 선택\",cancel:\"취소\",confirm:\"확인\",selectOptionNumber:\"옵션 # 선택\",prioritized:\"우선순위\",of:\"중\",instruction:'우선순위 목록은 아래에 표시됩니다. 원한다면 화살표를 사용해 선택 항목을 재정렬할 수 있습니다. \"다음\"을 클릭하여 선택을 확인하고 계속하세요.'},ar:{selectUpTo:\"اختر حتى\",options:\"خيارات\",thenOrder:\"ثم رتبها\",selectOptions:\"اختر الخيارات\",cancel:\"إلغاء\",confirm:\"تأكيد\",selectOptionNumber:\"اختر الخيار #\",prioritized:\"تم الترتيب\",of:\"من\",instruction:'تظهر قائمة الأولويات الخاصة بك أدناه. إذا رغبت، يمكنك إعادة ترتيب اختياراتك باستخدام الأسهم. انقر على \"التالي\" لتأكيد اختيارك والمتابعة.'},bn:{selectUpTo:\"সর্বোচ্চ নির্বাচন করুন\",options:\"টি বিকল্প\",thenOrder:\"তারপর সেগুলো সাজান\",selectOptions:\"বিকল্প নির্বাচন করুন\",cancel:\"বাতিল\",confirm:\"নিশ্চিত করুন\",selectOptionNumber:\"বিকল্প # নির্বাচন করুন\",prioritized:\"অগ্রাধিকারপ্রাপ্ত\",of:\"এর মধ্যে\",instruction:\"আপনার অগ্রাধিকার তালিকা নিচে দেখানো হয়েছে। চাইলে তীর চিহ্ন ব্যবহার করে আপনার পছন্দগুলো পুনরায় সাজাতে পারেন। “পরবর্তী” ক্লিক করে আপনার নির্বাচন নিশ্চিত করুন এবং এগিয়ে যান।\"},da:{selectUpTo:\"Vælg op til\",options:\"muligheder\",thenOrder:\"og sorter dem derefter\",selectOptions:\"Vælg muligheder\",cancel:\"Annuller\",confirm:\"Bekræft\",selectOptionNumber:\"Vælg mulighed #\",prioritized:\"Prioriteret\",of:\"af\",instruction:'Din prioritetsliste vises nedenfor. Hvis du ønsker det, kan du omarrangere dine valg ved hjælp af pilene. Klik på \"Næste\" for at bekræfte dit valg og fortsætte.'},fi:{selectUpTo:\"Valitse enintään\",options:\"vaihtoehtoa\",thenOrder:\"ja järjestä ne sitten\",selectOptions:\"Valitse vaihtoehdot\",cancel:\"Peruuta\",confirm:\"Vahvista\",selectOptionNumber:\"Valitse vaihtoehto #\",prioritized:\"Priorisoitu\",of:\" / \",instruction:'Prioriteettilistasi näkyy alla. Voit halutessasi järjestää valinnat uudelleen nuolien avulla. Napsauta \"Seuraava\" vahvistaaksesi valinnan ja jatkaaksesi.'},sv:{selectUpTo:\"Välj upp till\",options:\"alternativ\",thenOrder:\"och ordna dem sedan\",selectOptions:\"Välj alternativ\",cancel:\"Avbryt\",confirm:\"Bekräfta\",selectOptionNumber:\"Välj alternativ #\",prioritized:\"Prioriterat\",of:\"av\",instruction:'Din prioriteringslista visas nedan. Om du vill kan du ordna om dina val med hjälp av pilarna. Klicka på \"Nästa\" för att bekräfta ditt val och fortsätta.'},no:{selectUpTo:\"Velg opptil\",options:\"alternativer\",thenOrder:\"og ordne dem deretter\",selectOptions:\"Velg alternativer\",cancel:\"Avbryt\",confirm:\"Bekreft\",selectOptionNumber:\"Velg alternativ #\",prioritized:\"Prioritert\",of:\"av\",instruction:'Prioriteringslisten din vises nedenfor. Hvis du ønsker det, kan du ordne valgene dine ved hjelp av pilene. Klikk på \"Neste\" for å bekrefte valget ditt og fortsette.'}};return t[t[a]?a:\"en\"][e]},d=document.createElement(\"div\");if(d.classList.add(\"magicfeedback-priority-list-container\"),r&&s&&s>0){const e=[],r=document.createElement(\"div\");r.classList.add(\"magicfeedback-priority-list-header\");const a=document.createElement(\"div\");a.classList.add(\"magicfeedback-priority-list-instruction\"),a.textContent=\"\"!==o?o:`${l(\"instruction\")}`,a.style.display=\"none\";const c=document.createElement(\"button\");c.type=\"button\",c.textContent=l(\"selectOptions\"),c.classList.add(\"magicfeedback-button\"),c.classList.add(\"magicfeedback-priority-list-open-btn\"),r.appendChild(c),r.appendChild(a);const u=document.createElement(\"div\");u.classList.add(\"magicfeedback-priority-list-reorder\");const p=document.createElement(\"ul\");p.classList.add(\"magicfeedback-priority-list-list\"),u.appendChild(p);const m=()=>{p.innerHTML=\"\",e.forEach(((t,n)=>{const r=document.createElement(\"li\");r.classList.add(\"magicfeedback-priority-list-item\");const s=document.createElement(\"input\");s.classList.add(\"magicfeedback-input-magicfeedback-priority-list\"),s.classList.add(\"magicfeedback-input\"),s.type=\"hidden\",s.id=`priority-list-${i}`,s.name=i,s.value=`${n+1}. ${t}`,r.appendChild(s);const a=document.createElement(\"label\");a.classList.add(\"magicfeedback-priority-list-item-label\"),a.textContent=`${n+1}. ${t}`,r.appendChild(a);const o=document.createElement(\"div\");o.classList.add(\"magicfeedback-priority-list-arrows\");const l=document.createElement(\"img\");l.classList.add(\"magicfeedback-priority-list-arrow-up\"),l.src=\"https://magicfeedback-c6458-dev.web.app/assets/arrow.svg\",l.style.visibility=0===n?\"hidden\":\"visible\";const d=document.createElement(\"img\");d.classList.add(\"magicfeedback-priority-list-arrow-down\"),d.src=\"https://magicfeedback-c6458-dev.web.app/assets/arrow.svg\",d.style.transform=\"rotate(180deg)\",d.style.visibility=n===e.length-1?\"hidden\":\"visible\",l.addEventListener(\"click\",(()=>{var i,n,o,c;const u=r.previousElementSibling;if(u){const m=Number(null===(i=s.value)||void 0===i?void 0:i.split(\".\")[0])-1;s.value=`${m}. ${t}`,a.textContent=`${m}. ${t}`,l.style.visibility=1===m?\"hidden\":\"visible\",d.style.visibility=m===e.length?\"hidden\":\"visible\";const h=u.querySelector(\".magicfeedback-input-magicfeedback-priority-list\"),f=u.querySelector(\".magicfeedback-priority-list-item-label\"),v=u.querySelector(\".magicfeedback-priority-list-arrow-up\"),g=u.querySelector(\".magicfeedback-priority-list-arrow-down\");if(h&&f&&v&&g){const t=Number(null===(n=h.value)||void 0===n?void 0:n.split(\".\")[0])+1;h.value=`${t}.${null===(o=f.textContent)||void 0===o?void 0:o.split(\".\")[1]}`,f.textContent=`${t}.${null===(c=f.textContent)||void 0===c?void 0:c.split(\".\")[1]}`,v.style.visibility=1===t?\"hidden\":\"visible\",g.style.visibility=t===e.length?\"hidden\":\"visible\"}p.insertBefore(r,u)}})),d.addEventListener(\"click\",(()=>{var i,n,o;const c=r.nextElementSibling;if(c){const u=Number(null===(i=s.value)||void 0===i?void 0:i.split(\".\")[0])+1;s.value=`${u}. ${t}`,a.textContent=`${u}. ${t}`,l.style.visibility=1===u?\"hidden\":\"visible\",d.style.visibility=u===e.length?\"hidden\":\"visible\";const m=c.querySelector(\".magicfeedback-input-magicfeedback-priority-list\"),h=c.querySelector(\".magicfeedback-priority-list-item-label\"),f=c.querySelector(\".magicfeedback-priority-list-arrow-up\"),v=c.querySelector(\".magicfeedback-priority-list-arrow-down\");if(m&&h&&f&&v){const t=Number(m.value.split(\".\")[0])-1;m.value=`${t}.${null===(n=h.textContent)||void 0===n?void 0:n.split(\".\")[1]}`,h.textContent=`${t}.${null===(o=h.textContent)||void 0===o?void 0:o.split(\".\")[1]}`,f.style.visibility=1===t?\"hidden\":\"visible\",v.style.visibility=t===e.length?\"hidden\":\"visible\"}p.insertBefore(c,r)}})),o.appendChild(l),o.appendChild(d),r.appendChild(o),p.appendChild(r)}))},h=document.createElement(\"div\");h.classList.add(\"magicfeedback-modal-backdrop\"),h.style.position=\"fixed\",h.style.top=\"0\",h.style.left=\"0\",h.style.width=\"100vw\",h.style.height=\"100vh\",h.style.background=\"rgba(0,0,0,0.4)\",h.style.display=\"none\",h.style.alignItems=\"center\",h.style.justifyContent=\"center\",h.style.zIndex=\"9999\";const f=document.createElement(\"div\");f.classList.add(\"magicfeedback-modal\"),f.style.background=\"#fff\",f.style.borderRadius=\"8px\",f.style.boxShadow=\"0 8px 24px rgba(0,0,0,0.2)\",f.style.maxWidth=\"520px\",f.style.width=\"90%\",f.style.maxHeight=\"80vh\",f.style.overflow=\"auto\",f.style.padding=\"16px\",f.style.position=\"relative\";const v=document.createElement(\"h5\");v.classList.add(\"magicfeedback-modal-title\");const g=()=>Math.min(e.length+1,s),y=()=>{v.textContent=`${l(\"selectOptionNumber\")}${g()}`};y();const b=document.createElement(\"div\");b.classList.add(\"magicfeedback-modal-list\"),(n?[...t].sort((()=>Math.random()-.5)):[...t]).forEach((t=>{const n=document.createElement(\"label\");n.classList.add(\"magicfeedback-modal-row\");const r=document.createElement(\"input\");r.type=\"checkbox\",r.classList.add(\"magicfeedback-input\"),r.name=`${i}-selection`,r.value=t;const a=document.createElement(\"span\");a.textContent=t,r.addEventListener(\"change\",(()=>{if(r.checked){if(e.length>=s)return r.checked=!1,n.classList.add(\"magicfeedback-warning\"),void setTimeout((()=>{n.classList.remove(\"magicfeedback-warning\")}),800);e.push(t)}else{const i=e.indexOf(t);-1!==i&&e.splice(i,1)}y(),A()})),n.appendChild(r),n.appendChild(a),b.appendChild(n)}));const E=document.createElement(\"div\");E.classList.add(\"magicfeedback-modal-actions\");const k=document.createElement(\"div\");k.classList.add(\"magicfeedback-modal-counter\");const A=()=>{const t=l(\"of\");k.textContent=`${l(\"prioritized\")} ${e.length} ${t} ${s}`,a.style.display=e.length>0?\"block\":\"none\"};A();const C=document.createElement(\"button\");C.type=\"button\",C.classList.add(\"magicfeedback-modal-close\"),C.setAttribute(\"aria-label\",l(\"cancel\")),C.title=l(\"cancel\"),C.textContent=\"×\",C.style.position=\"absolute\",C.style.top=\"8px\",C.style.right=\"8px\",C.style.border=\"none\",C.style.background=\"transparent\",C.style.fontSize=\"24px\",C.style.cursor=\"pointer\",C.addEventListener(\"click\",(()=>{h.style.display=\"none\"}));const T=document.createElement(\"button\");return T.type=\"button\",T.textContent=l(\"confirm\"),T.classList.add(\"magicfeedback-button\"),T.classList.add(\"magicfeedback-button-primary\"),T.addEventListener(\"click\",(()=>{h.style.display=\"none\",m()})),E.appendChild(k),E.appendChild(T),f.appendChild(C),f.appendChild(v),f.appendChild(b),f.appendChild(E),h.appendChild(f),c.addEventListener(\"click\",(()=>{h.style.display=\"flex\",y(),A()})),h.addEventListener(\"click\",(e=>{e.target===h&&(h.style.display=\"none\")})),d.appendChild(r),d.appendChild(u),d.appendChild(h),m(),d}const c=document.createElement(\"ul\");c.classList.add(\"magicfeedback-priority-list-list\");const u=n?[...t].sort((()=>Math.random()-.5)):[...t];return u.forEach(((e,t)=>{const n=document.createElement(\"li\");n.classList.add(\"magicfeedback-priority-list-item\"),n.style.display=\"flex\",n.style.justifyContent=\"space-between\",n.style.alignItems=\"center\",n.style.margin=\"5px\";const r=document.createElement(\"input\");r.classList.add(\"magicfeedback-input-magicfeedback-priority-list\"),r.classList.add(\"magicfeedback-input\"),r.type=\"hidden\",r.id=`priority-list-${i}`,r.name=i,r.value=`${t+1}. ${e}`,n.appendChild(r);const s=document.createElement(\"label\");s.classList.add(\"magicfeedback-priority-list-item-label\"),s.textContent=`${t+1}. ${e}`,n.appendChild(s);const a=document.createElement(\"div\");a.style.display=\"flex\",a.style.alignItems=\"center\",a.style.justifyContent=\"space-between\";const o=document.createElement(\"img\");o.classList.add(\"magicfeedback-priority-list-arrow-up\"),o.src=\"https://magicfeedback-c6458-dev.web.app/assets/arrow.svg\",o.style.width=\"20px\",o.style.height=\"20px\",o.style.cursor=\"pointer\",o.style.margin=\"0 5px\",o.style.color=\"#000\",o.style.visibility=0===t?\"hidden\":\"visible\",o.addEventListener(\"click\",(()=>{var t,i,a,d;const p=n.previousElementSibling;if(p){const m=Number(null===(t=r.value)||void 0===t?void 0:t.split(\".\")[0])-1;r.value=`${m}. ${e}`,s.textContent=`${m}. ${e}`,o.style.visibility=1===m?\"hidden\":\"visible\",l.style.visibility=m===u.length?\"hidden\":\"visible\";const h=p.querySelector(\".magicfeedback-input-magicfeedback-priority-list\"),f=p.querySelector(\".magicfeedback-priority-list-item-label\"),v=p.querySelector(\".magicfeedback-priority-list-arrow-up\"),g=p.querySelector(\".magicfeedback-priority-list-arrow-down\");if(h&&f&&v&&g){const e=Number(null===(i=h.value)||void 0===i?void 0:i.split(\".\")[0])+1;h.value=`${e}.${null===(a=f.textContent)||void 0===a?void 0:a.split(\".\")[1]}`,f.textContent=`${e}.${null===(d=f.textContent)||void 0===d?void 0:d.split(\".\")[1]}`,v.style.visibility=1===e?\"hidden\":\"visible\",g.style.visibility=e===u.length?\"hidden\":\"visible\"}c.insertBefore(n,p)}}));const l=document.createElement(\"img\");l.classList.add(\"magicfeedback-priority-list-arrow-down\"),l.src=\"https://magicfeedback-c6458-dev.web.app/assets/arrow.svg\",l.style.width=\"20px\",l.style.height=\"20px\",l.style.cursor=\"pointer\",l.style.margin=\"0 5px\",l.style.color=\"#000\",l.style.transform=\"rotate(180deg)\",l.style.visibility=t===u.length-1?\"hidden\":\"visible\",l.addEventListener(\"click\",(()=>{var t,i,a;const d=n.nextElementSibling;if(d){const p=Number(null===(t=r.value)||void 0===t?void 0:t.split(\".\")[0])+1;r.value=`${p}. ${e}`,s.textContent=`${p}. ${e}`,o.style.visibility=1===p?\"hidden\":\"visible\",l.style.visibility=p===u.length?\"hidden\":\"visible\";const m=d.querySelector(\".magicfeedback-input-magicfeedback-priority-list\"),h=d.querySelector(\".magicfeedback-priority-list-item-label\"),f=d.querySelector(\".magicfeedback-priority-list-arrow-up\"),v=d.querySelector(\".magicfeedback-priority-list-arrow-down\");if(m&&h&&f&&v){const e=Number(m.value.split(\".\")[0])-1;m.value=`${e}.${null===(i=h.textContent)||void 0===i?void 0:i.split(\".\")[1]}`,h.textContent=`${e}.${null===(a=h.textContent)||void 0===a?void 0:a.split(\".\")[1]}`,f.style.visibility=1===e?\"hidden\":\"visible\",v.style.visibility=e===u.length?\"hidden\":\"visible\"}c.insertBefore(d,n)}})),a.appendChild(o),a.appendChild(l),n.appendChild(a),c.appendChild(n)})),d.appendChild(c),d}({value:e.value,ref:e.ref,randomPosition:t,limitPriority:(null===(n=e.assets)||void 0===n?void 0:n.limitPriority)||!1,maxPriority:(null===(r=e.assets)||void 0===r?void 0:r.maxPriority)||0,placeholder:(null===(s=e.assets)||void 0===s?void 0:s.placeholder)||\"\",language:i||\"en\"});return a.appendChild(o),{element:a,elementTypeClass:\"magicfeedback-priority-list\"}}},152:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderRatingEmoji=void 0;const n=i(559),r=\"https://survey-dev.magicfeedback.io/assets/emojis\";t.renderRatingEmoji=({question:e,url:t,send:i,urlParamValue:s})=>{var a;const{ref:o,assets:l}=e,d=document.createElement(\"div\"),c=\"magicfeedback-rating\",u=document.createElement(\"div\");u.classList.add(\"magicfeedback-rating-container\");const p=(null==l?void 0:l.max)?Number(null==l?void 0:l.max):5,m=(null==l?void 0:l.min)?Number(null==l?void 0:l.min):1,h=(0,n.createRatingPlaceholder)(m,p,null==l?void 0:l.minPlaceholder,null==l?void 0:l.maxPlaceholder,null!==(a=null==l?void 0:l.extraOption)&&void 0!==a&&a);for(let e=m;e<=p;e++){const n=document.createElement(\"div\");n.classList.add(\"magicfeedback-rating-option\");const a=document.createElement(\"label\");a.htmlFor=`rating-${o}-${e}`,a.classList.add(\"magicfeedback-rating-option-label-container\");const l=document.createElement(\"label\");l.htmlFor=`rating-${o}-${e}`,l.textContent=e.toString();const d=document.createElement(\"img\");if(d.alt=`face-${o}-${e}`,d.className=`rating-image${e}`,0===m&&10===p)d.src=`${t}/${e}.svg`,d.onerror=()=>d.src=`${r}/${e}.svg`;else if(1===m&&5===p)switch(e){case 1:d.src=`${t}/1.svg`,d.onerror=()=>d.src=`${r}/1.svg`;break;case 2:d.src=`${t}/2.svg`,d.onerror=()=>d.src=`${r}/2.svg`;break;case 3:d.src=`${t}/6.svg`,d.onerror=()=>d.src=`${r}/6.svg`;break;case 4:d.src=`${t}/9.svg`,d.onerror=()=>d.src=`${r}/9.svg`;break;case 5:d.src=`${t}/10.svg`,d.onerror=()=>d.src=`${r}/10.svg`}else{const i=Math.round(10/(p-m)*(e-m));d.src=`${t}/${i}.svg`,d.onerror=()=>d.src=`${r}/${i}.svg`}const h=document.createElement(\"input\");h.id=`rating-${o}-${e}`,h.type=\"radio\",h.name=o,h.value=e.toString(),h.classList.add(c),h.classList.add(\"magicfeedback-input\"),i&&h.addEventListener(\"change\",(()=>{i()})),s&&s===h.value&&(h.checked=!0),a.appendChild(h),a.appendChild(d),a.appendChild(l),n.appendChild(a),u.appendChild(n)}if((null==l?void 0:l.extraOption)&&(null==l?void 0:l.extraOptionText)){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-rating-option\");const t=document.createElement(\"label\");t.htmlFor=`rating-${o}-extra`,t.classList.add(\"magicfeedback-rating-option-label-container\");const n=document.createElement(\"label\");n.htmlFor=`rating-${o}-extra`,n.textContent=null==l?void 0:l.extraOptionText;const r=document.createElement(\"img\");r.src=\"https://magicfeedback-c6458-dev.web.app/assets/question.svg\",r.alt=`face-${o}-extra`,r.className=\"magicfeedback-rating-image-extra\";const s=document.createElement(\"input\");s.id=`rating-${o}-extra`,s.type=\"radio\",s.name=o,s.value=\"-\",s.classList.add(c),s.classList.add(\"magicfeedback-input\"),i&&s.addEventListener(\"change\",(()=>{i()})),t.appendChild(s),t.appendChild(r),t.appendChild(n),e.appendChild(t),u.appendChild(e)}return h.childElementCount>0&&(u.classList.add(\"magicfeedback-rating-container--with-placeholder\"),u.insertBefore(h,u.firstChild)),d.appendChild(u),{element:d,elementTypeClass:c}}},917:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderRatingNumber=void 0;const n=i(559);t.renderRatingNumber=({question:e,order:t,direction:i,isPhone:r,send:s,urlParamValue:a})=>{const o=\"magicfeedback-rating-number\";return{element:(0,n.createRatingNumberElement)(e.ref,e.assets,t,i,r,o,s,a),elementTypeClass:o}}},452:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderRatingStar=void 0;const n=i(559);t.renderRatingStar=({question:e,send:t,urlParamValue:i})=>{var r,s;const a=document.createElement(\"div\"),o=(0,n.createStarRating)(e.ref,null===(r=e.assets)||void 0===r?void 0:r.minPlaceholder,null===(s=e.assets)||void 0===s?void 0:s.maxPlaceholder,t,i);return a.appendChild(o),{element:a,elementTypeClass:\"magicfeedback-rating-star\"}}},85:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderSelect=void 0;const n=i(516);t.renderSelect=({question:e,format:t,language:i,urlParamValue:r,send:s})=>{const{title:a,value:o,defaultValue:l}=e,d=document.createElement(\"select\"),c=document.createElement(\"option\");return c.value=\"\",c.text=\"slim\"===t?(0,n.parseTitle)(a,i):l||\"Select an option\",c.disabled=!0,c.selected=!0,d.appendChild(c),o.forEach((e=>{const t=document.createElement(\"option\");t.value=e,t.text=e,d.appendChild(t)})),r&&o.includes(r)&&(d.value=r),s&&d.addEventListener(\"change\",(()=>{s()})),{element:d,elementTypeClass:\"magicfeedback-select\"}}},90:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderText=void 0;const n=i(784);t.renderText=({language:e,placeholderText:t,urlParamValue:i,send:r})=>{const s=document.createElement(\"input\");return s.type=\"text\",s.placeholder=t||n.placeholder.answer(e||\"en\"),i&&(s.value=i),s.addEventListener(\"keyup\",(e=>{e.preventDefault(),\"Enter\"===e.key&&r&&r()})),{element:s,elementTypeClass:\"magicfeedback-text\"}}},250:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderUploadFile=void 0,t.renderUploadFile=({question:e})=>{var t,i;const n=document.createElement(\"input\");return n.type=\"file\",n.required=e.require,n.multiple=(null===(t=e.assets)||void 0===t?void 0:t.multiple)||!1,n.maxLength=(null===(i=e.assets)||void 0===i?void 0:i.maxFiles)||1,{element:n,elementTypeClass:\"magicfeedback-upload-file\"}}},843:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderUploadImage=void 0,t.renderUploadImage=({question:e})=>{var t,i;const n=document.createElement(\"input\");return n.type=\"file\",n.accept=\"image/*\",n.required=e.require,n.multiple=(null===(t=e.assets)||void 0===t?void 0:t.multiple)||!1,n.maxLength=(null===(i=e.assets)||void 0===i?void 0:i.maxFiles)||1,{element:n,elementTypeClass:\"magicfeedback-upload-image\"}}},857:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.endpoints=void 0,t.endpoints={sdk:{app:(e,t)=>`sdk/app/${e}/${t}`,app_info:(e,t)=>`sdk/app/${e}/${t}/info`,session:e=>`sdk/app/session/${e}/info`,feedback:\"sdk/feedback\",followUpQuestion:\"sdk/followUpQuestion\"}}},784:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.placeholder=void 0,t.placeholder={answer:e=>{switch(e){case\"en\":default:return\"Write your answer here...\";case\"es\":return\"Escribe tu respuesta aquí...\";case\"da\":return\"Skriv dit svar her...\";case\"fi\":return\"Kirjoita vastauksesi tähän...\";case\"sv\":return\"Skriv ditt svar här...\";case\"no\":return\"Skriv svaret ditt her...\";case\"ar\":return\"اكتب إجابتك هنا...\";case\"bn\":return\"এখানে আপনার\"}},number:e=>{switch(e){case\"en\":default:return\"Write your number here...\";case\"es\":return\"Escribe tu número aquí...\";case\"da\":return\"Skriv dit nummer her...\";case\"fi\":return\"Kirjoita numerosi tähän...\";case\"sv\":return\"Skriv ditt nummer här...\";case\"no\":return\"Skriv nummeret ditt her...\";case\"ar\":return\"اكتب رقمك هنا...\";case\"bn\":return\"এখানে আপনার\"}},email:e=>{switch(e){case\"en\":default:return\"Write your email here...\";case\"es\":return\"Escribe tu correo electrónico aquí...\";case\"da\":return\"Skriv din e-mail her...\";case\"fi\":return\"Kirjoita sähköpostiosoitteesi tähän...\";case\"sv\":return\"Skriv din e-post här...\";case\"no\":return\"Skriv e-posten din her...\";case\"ar\":return\"اكتب بريدك الإلكتروني هنا...\";case\"bn\":return\"এখানে আপনার\"}},date:e=>{switch(e){case\"en\":default:return\"Write your date here...\";case\"es\":return\"Escribe tu fecha aquí...\";case\"da\":return\"Skriv din dato her...\";case\"fi\":return\"Kirjoita päivämääräsi tähän...\";case\"sv\":return\"Skriv ditt datum här...\";case\"no\":return\"Skriv datoen din her...\";case\"ar\":return\"اكتب تاريخك هنا...\";case\"bn\":return\"এখানে আপনার\"}},password:e=>{switch(e){case\"en\":default:return\"Write your password here...\";case\"es\":return\"Escribe tu contraseña aquí...\";case\"da\":return\"Skriv dit kodeord her...\";case\"fi\":return\"Kirjoita salasanasi tähän...\";case\"sv\":return\"Skriv ditt lösenord här...\";case\"no\":return\"Skriv passordet ditt her...\";case\"ar\":return\"اكتب كلمة المرور الخاصة بك هنا...\";case\"bn\":return\"এখানে আপনার\"}},pointsystemerror:e=>{switch(e){case\"en\":default:return\"The total points must be 100 %\";case\"es\":return\"El total de puntos debe ser 100 %\";case\"da\":return\"Samlet antal point skal være 100 %\";case\"fi\":return\"Kokonaispisteiden on oltava 100 %\";case\"sv\":return\"Totala poäng måste vara 100 %\";case\"no\":return\"Totalt antall poeng må være 100 %\";case\"ar\":return\"يجب أن تكون النقاط الإجمالية 100 %\";case\"bn\":return\"মোট পয়েন্ট 100 % হতে হবে\"}}}},213:(e,t,i)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.renderStartMessage=t.renderSuccess=t.renderError=t.renderActions=t.renderQuestions=void 0;const n=i(42),r=i(516),s={small:\"1rem\",medium:\"1.2rem\",large:\"1.5rem\"};t.renderQuestions=function e(t,i=\"standard\",a=\"en\",o={customIcons:!1},l){if(!t)throw new Error(\"[MagicFeedback] No questions provided\");const d=[],{customIcons:c,id:u}=o;return t.forEach((p=>{var m,h;if((null===(h=null===(m=null==p?void 0:p.questionType)||void 0===m?void 0:m.conf)||void 0===h?void 0:h.length)>0){let t=document.createElement(\"div\");t.classList.add(\"magicfeedback-div\");const n=document.createElement(\"label\");n.setAttribute(\"for\",`magicfeedback-${p.id}`),n.textContent=(0,r.parseTitle)(p.title,a),n.classList.add(\"magicfeedback-label\"),t.appendChild(n),p.questionType.conf.forEach((e=>{e.ref=p.ref,p.assets[e.id]&&(e.assets={placeholder:p.assets[e.id]})})),e(p.questionType.conf,i,a,o,l).forEach((e=>{t.appendChild(e)})),d.push(t)}else{const e=function(e,t,i,a,o){var l,d,c;let u,p,{id:m,title:h,type:f,ref:v,require:g,defaultValue:y,assets:b}=e,E=document.createElement(\"div\");E.classList.add(\"magicfeedback-div\");const k=window.innerWidth<600,A=\"slim\"===t?(0,r.parseTitle)(h,i):null==b?void 0:b.placeholder,C=(0,r.getUrlParam)(v),T=(null==b?void 0:b.maxCharacters)||0,P=void 0!==(null==b?void 0:b.randomPosition)&&(null==b?void 0:b.randomPosition),w=(null==b?void 0:b.direction)||\"row\",x=(null==b?void 0:b.order)||\"ltr\",O=(0,n.getQuestionRenderer)(f);if(!O)return E;{const n=O({question:e,format:t,language:i,url:a,send:o,isPhone:k,urlParamValue:C,placeholderText:A,maxCharacters:T,randomPosition:P,direction:w,order:x});u=n.element,p=n.elementTypeClass}u.id=`magicfeedback-${m}`,u.setAttribute(\"name\",v),u.classList.add(p),(void 0!==y||null!==C)&&(u.value=C||y),[\"RADIO\",\"MULTIPLECHOICE\"].includes(f)||(u.classList.add(\"magicfeedback-input\"),u.required=g);const L=document.createElement(\"label\");L.setAttribute(\"for\",`magicfeedback-${m}`),L.textContent=(0,r.parseTitle)(h,i),L.classList.add(\"magicfeedback-label\"),function(e,t){if(\"INFO_PAGE\"!==t.type)return;const{assets:i}=t,n=function(e){if(e)return s[e]||e}(null==i?void 0:i.titleSize),r=(a=null==i?void 0:i.titleStyle,Array.isArray(a)?a:a?[a]:[]);var a;n&&e.style.setProperty(\"font-size\",n,\"important\"),(null==i?void 0:i.titleAlign)&&(e.style.setProperty(\"width\",\"100%\",\"important\"),e.style.setProperty(\"align-self\",\"stretch\",\"important\"),e.style.setProperty(\"text-align\",i.titleAlign,\"important\")),r.includes(\"italic\")&&e.style.setProperty(\"font-style\",\"italic\",\"important\"),r.includes(\"bold\")&&e.style.setProperty(\"font-weight\",\"bold\",\"important\"),r.includes(\"underline\")&&e.style.setProperty(\"text-decoration\",\"underline\",\"important\")}(L,e);const S=document.createElement(\"label\");if(S.textContent=(0,r.parseTitle)(null==b?void 0:b.subtitle,i),S.classList.add(\"magicfeedback-sublabel\"),(null===(l=null==b?void 0:b.subtitleStyle)||void 0===l?void 0:l.includes(\"italic\"))&&(S.style.fontStyle=\"italic\"),(null===(d=null==b?void 0:b.subtitleStyle)||void 0===d?void 0:d.includes(\"bold\"))&&(S.style.fontWeight=\"bold\"),(null===(c=null==b?void 0:b.subtitleStyle)||void 0===c?void 0:c.includes(\"underline\"))&&(S.style.textDecoration=\"underline\"),[\"CONSENT\"].includes(f))E.classList.add(\"magicfeedback-consent-container\"),E.appendChild(u),E.appendChild(L),(null==b?void 0:b.subtitle)&&E.appendChild(S);else{if(\"slim\"!==t&&(E.appendChild(L),(null==b?void 0:b.subtitle)&&E.appendChild(S),void 0!==(null==b?void 0:b.general)&&\"\"!==(null==b?void 0:b.general))){const e=document.createElement(\"img\");e.src=null==b?void 0:b.general,e.classList.add(\"magicfeedback-image\"),e.style.maxWidth=\"auto\",e.style.height=\"400px\",e.style.margin=\"10px 0\",E.appendChild(e)}if(\"LONGTEXT\"===f&&T>0){const e=document.createElement(\"div\");if(e.classList.add(\"magicfeedback-counter\"),e.textContent=`${u.value.length}/${T}`,e.style.textAlign=\"right\",e.style.fontSize=\"15px\",e.style.marginTop=\"5px\",u.addEventListener(\"input\",(()=>{e.textContent=`${u.value.length}/${T}`})),E.appendChild(u),E.appendChild(e),(null==b?void 0:b.extraOption)&&(null==b?void 0:b.extraOptionText)){const e=document.createElement(\"div\");e.classList.add(\"magicfeedback-skip-container\"),e.classList.add(\"magicfeedback-checkbox-container\"),e.style.display=\"flex\",e.style.justifyContent=\"flex-start\";const t=document.createElement(\"input\");t.classList.add(\"magicfeedback-skip\"),t.type=\"checkbox\",t.id=`skip-${v}`,t.name=v,t.value=\"-\",t.style.cursor=\"pointer\";const i=document.createElement(\"label\");i.htmlFor=`skip-${v}`,i.textContent=null==b?void 0:b.extraOptionText,i.style.fontSize=\"15px\",i.style.cursor=\"pointer\",i.style.margin=\"0 5px\",t.addEventListener(\"click\",(()=>{u.value=\"-\",o&&o()})),e.appendChild(t),e.appendChild(i),E.appendChild(e)}}else E.appendChild(u)}return E}(p,i,a,\"https://survey-dev.magicfeedback.io/assets/emojis\"+(c?`/${u}`:\"\"),1===t.length?l:void 0);d.push(e)}})),d},t.renderActions=function(e=\"\",t,i=\"Submit\",n=\"Back\",r=\"Next\"){const s=document.createElement(\"div\");s.classList.add(\"magicfeedback-action-container\");const a=document.createElement(\"button\");a.id=\"magicfeedback-submit\",a.type=\"submit\",a.classList.add(\"magicfeedback-submit\"),a.textContent=\"MAGICSURVEY\"===e?r||\"Next\":i||\"Submit\";const o=document.createElement(\"button\");return o.id=\"magicfeedback-back\",o.type=\"button\",o.classList.add(\"magicfeedback-back\"),o.textContent=n||\"Back\",o.addEventListener(\"click\",t),o.addEventListener(\"click\",(()=>{a.removeAttribute(\"disabled\")})),\"MAGICSURVEY\"===e&&s.appendChild(o),s.appendChild(a),s},t.renderError=function(e){const t=document.createElement(\"div\");return t.classList.add(\"magicfeedback-error\"),t.textContent=e,t},t.renderSuccess=function(e){const t=document.createElement(\"div\");return t.classList.add(\"magicfeedback-success\"),t.textContent=e,t},t.renderStartMessage=function(e,t=!1,i=\"Go!\",n=()=>{}){const r=document.createElement(\"div\");r.classList.add(\"magicfeedback-start-message-container\");const s=document.createElement(\"div\");if(s.classList.add(\"magicfeedback-start-message\"),s.innerHTML=e,r.appendChild(s),t){const e=document.createElement(\"button\");e.id=\"magicfeedback-start-message-button\",e.classList.add(\"magicfeedback-start-message-button\"),e.textContent=i,e.addEventListener(\"click\",(()=>n())),r.appendChild(e)}return r}},313:function(e,t,i){\"use strict\";var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function a(e){try{l(n.next(e))}catch(e){s(e)}}function o(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,o)}l((n=n.apply(e,t||[])).next())}))},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.getFollowUpQuestion=t.sendFeedback=t.getQuestions=t.getSessionForm=t.getForm=t.validateEmail=void 0;const s=r(i(945)),a=r(i(330)),o=i(857),l={Accept:\"application/json\",\"Magicfeedback-Sdk-Version\":a.default.version,\"x-magicfeedback-parameters\":window.location.search||\"\"};t.validateEmail=function(e){return/\\S+@\\S+\\.\\S+/.test(e)},t.getForm=function(e,t,i,r){return n(this,void 0,void 0,(function*(){try{const n=yield(0,s.default)(e+o.endpoints.sdk.app_info(t,i),{method:\"GET\",headers:l});return yield n.json()}catch(e){r.err(e)}}))},t.getSessionForm=function(e,t,i){return n(this,void 0,void 0,(function*(){try{const i=yield(0,s.default)(e+o.endpoints.sdk.session(t),{method:\"GET\",headers:l});return yield i.json()}catch(e){i.err(e)}}))},t.getQuestions=function(e,t,i,r){return n(this,void 0,void 0,(function*(){try{const n=yield(0,s.default)(e+o.endpoints.sdk.app(t,i),{method:\"GET\",headers:l});if(n.ok){const e=yield n.json();return r.log(`Received questions for app ${t}`,e),e}throw r.err(`Failed to get questions for app ${t}:`,n.status,n.statusText),new Error(\"[MagicFeedback] Bad response from server\")}catch(e){return r.err(e),[]}}))},t.sendFeedback=function(e,t,i){return n(this,void 0,void 0,(function*(){try{const n=yield(0,s.default)(e+o.endpoints.sdk.feedback,{method:\"POST\",headers:Object.assign({\"Content-Type\":\"application/json\"},l),body:JSON.stringify(t)});if(n.ok)return i.log(`Form ${t.integration} submitted successfully!`),(yield n.json()).sessionId;throw i.err(`Failed to submit form ${t.integration}:`,n.status,n.statusText),new Error(n.statusText)}catch(e){return i.err(e),\"\"}}))},t.getFollowUpQuestion=function(e,t,i){return n(this,void 0,void 0,(function*(){try{const n=yield(0,s.default)(e+o.endpoints.sdk.followUpQuestion,{method:\"POST\",headers:Object.assign({\"Content-Type\":\"application/json\"},l),body:JSON.stringify(t)});if(n.ok)return i.log(`Received follow up question for form ${t.integration}`),(yield n.json())||\"\";throw i.err(`Failed to get follow up question for form ${t.integration}:`,n.status,n.statusText),new Error(n.statusText)}catch(e){return i.err(e),\"\"}}))}},256:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Log=void 0,t.Log=class{constructor(e){this.config=e}log(...e){this.config.get(\"debug\")&&console.log(\"[MagicFeedback]:\",...e)}err(...e){console.error(\"[MagicFeedback]:\",...e)}}},330:e=>{\"use strict\";e.exports=JSON.parse('{\"name\":\"@magicfeedback/native\",\"version\":\"2.2.1\",\"main\":\"./dist/magicfeedback-sdk.node.js\",\"browser\":\"./dist/magicfeedback-sdk.browser.js\",\"types\":\"./dist/types/src/index.d.ts\",\"repository\":{\"type\":\"git\",\"url\":\"git+ssh://git@github.com/MagicFeedback/magicfeedback-sdk.git\"},\"author\":\"farias@magicfeedback.io\",\"license\":\"MIT\",\"private\":false,\"scripts\":{\"dev\":\"vite\",\"build\":\"webpack\",\"build:watch\":\"webpack --watch --mode development\",\"release\":\"npm publish --access public\",\"release:beta\":\"npm publish --access public --tag beta\",\"release:alpha\":\"npm publish --access public --tag alpha\",\"test\":\"jest\",\"test:watch\":\"jest --watchAll\",\"coverage\":\"vitest run --coverage\",\"publish:sdk\":\"bash publish.sh\",\"publish:sdk:dry-run\":\"NPM_DRY_RUN=1 bash publish.sh\"},\"files\":[\"dist\"],\"devDependencies\":{\"@babel/preset-typescript\":\"^7.22.5\",\"@types/node\":\"^17.0.21\",\"@types/webpack\":\"^5.28.0\",\"@types/webpack-node-externals\":\"^2.5.3\",\"c8\":\"^7.11.0\",\"copy-webpack-plugin\":\"^11.0.0\",\"jest\":\"^29.5.0\",\"jest-environment-jsdom\":\"^29.5.0\",\"jest-fetch-mock\":\"^3.0.3\",\"nock\":\"^13.2.4\",\"ts-jest\":\"^29.1.0\",\"ts-loader\":\"^9.2.7\",\"ts-node\":\"^10.7.0\",\"typescript\":\"^4.6.2\",\"vite\":\"^2.8.0\",\"vite-plugin-dts\":\"^0.9.9\",\"vitest\":\"^0.5.9\",\"webpack\":\"^5.70.0\",\"webpack-cli\":\"^4.9.2\",\"webpack-node-externals\":\"^3.0.0\"},\"dependencies\":{\"cross-fetch\":\"^3.1.5\",\"is-bundling-for-browser-or-node\":\"^1.1.1\"},\"description\":\"MagicFeedbackAI JavaScript Library for [MagicFeedback.io](https://magicfeedback.io/)\",\"bugs\":{\"url\":\"https://github.com/MagicFeedback/magicfeedback-sdk/issues\"},\"homepage\":\"https://github.com/MagicFeedback/magicfeedback-sdk#readme\",\"directories\":{\"example\":\"examples\",\"test\":\"test\"},\"style\":\"./dist/styles/magicfeedback-default.css\"}')}},t={},function i(n){var r=t[n];if(void 0!==r)return r.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,i),s.exports}(156).default;var e,t}));",".magicfeedback-container {\n width: 100%;\n}\n\n\n.magicfeedback-success-message,\n.magicfeedback-info-message,\n.magicfeedback-start-message,\n.magicfeedback-container{\n animation-duration: 0.5s;\n animation-name: animate-fade;\n animation-delay: 0.25s;\n animation-fill-mode: backwards;\n\n font-style: normal;\n text-align: justify;\n font-weight: 400;\n font-size: 1.2rem;\n color: #475569;\n line-height: 1.5;\n}\n\n@keyframes animate-fade {\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n}\n\n.magicfeedback-form {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n}\n.magicfeedback-questions {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n width: 100%;\n}\n\n.magicfeedback-div {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n margin-bottom: 10px;\n width: 100%;\n}\n\n.magicfeedback-label {\n margin-bottom: 25px;\n margin-top: 20px;\n font-weight: 400;\n font-family: inherit;\n font-size: 1.2rem;\n color: #212529;\n text-align: start;\n word-wrap: break-word;\n white-space: normal;\n\n}\n\n.magicfeedback-checkbox {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n width: 100%;\n}\n\n.magicfeedback-checkbox-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin-bottom: 5px;\n margin-top: 5px;\n}\n\n.magicfeedback-radio {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n flex-wrap: wrap;\n width: 100%;\n margin-right: 5px;\n padding: 5px;\n}\n\n.magicfeedback-checkbox-container,\n.magicfeedback-radio-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 5px;\n padding: 5px 0;\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 0 3px #ccc;\n}\n\n.deepdots-popup input::-webkit-outer-spin-button,\n.deepdots-popup input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n -moz-appearance: textfield;\n}\n\n.magicfeedback-checkbox input[type=\"checkbox\"] {\n margin-right: 5px;\n margin-left: 5px;\n width: 20px;\n height: 20px;\n cursor: pointer;\n}\n\n\n.magicfeedback-checkbox label,\n.magicfeedback-radio-container label {\n margin-left: 5px;\n font-weight: 400;\n font-family: inherit;\n font-size: 16px;\n color: #212529;\n text-align: start;\n width: 100%;\n}\n\n.deepdots-popup p {\n margin-bottom: 0px;\n font-size: 12px;\n}\n\n.deepdots-popup h2 {\n line-height: 1.66;\n margin: 0;\n padding: 0;\n font-weight: 900;\n color: #222;\n font-family: var(--deepdots-font, 'Montserrat');\n font-size: 18px;\n text-transform: uppercase;\n text-align: center;\n margin-bottom: 40px;\n}\n\n/* Los controles de formulario no heredan font-family por defecto: cuando hay\n fuente custom (clase deepdots-has-font), los forzamos a usar la del contenedor. */\n.deepdots-popup.deepdots-has-font button,\n.deepdots-popup.deepdots-has-font input,\n.deepdots-popup.deepdots-has-font textarea,\n.deepdots-popup.deepdots-has-font select {\n font-family: var(--deepdots-font, inherit);\n}\n\n.deepdots-popup h6 {\n margin-bottom: 1rem;\n}\n\n.deepdots-popup input[type=\"date\"],\n.deepdots-popup input[type=\"text\"],\n.deepdots-popup input[type=\"number\"],\n.deepdots-popup input[type=\"email\"],\n.deepdots-popup input[type=\"password\"],\n.deepdots-popup textarea,\n.deepdots-popup select {\n box-sizing: border-box;\n padding: 10px;\n margin: 10px 0;\n width: 100%;\n border: 2px solid #ccc; /* Default border color - you can customize this */\n border-radius: 5px;\n font-size: 18px;\n outline: none;\n transition: border-color 0.3s ease;\n min-height: 50px;\n font-family: inherit;\n -webkit-appearance: none;\n}\n\n.deepdots-popup select {\n background-image: linear-gradient(45deg, transparent 50%, gray 50%),\n linear-gradient(135deg, gray 50%, transparent 50%),\n linear-gradient(to right, #ccc, #ccc);\n background-position: calc(100% - 20px) calc(1em + 2px),\n calc(100% - 15px) calc(1em + 2px),\n calc(100% - 2.5em) 0.5em;\n background-size: 5px 5px,\n 5px 5px,\n 1px 1.5em;\n background-repeat: no-repeat;\n}\n\n.magicfeedback-boolean-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 10px 0;\n width: 100%;\n}\n\n.magicfeedback-boolean-container label {\n margin-left: 10px;\n font-weight: 400;\n font-size: 16px;\n width: 100%;\n padding-top: 5px;\n}\n\n.magicfeedback-boolean-option {\n margin-right: 10px;\n margin-left: 10px;\n width: 100%;\n height: 38px;\n border-radius: 8px;\n font-size: 16px;\n cursor: pointer;\n border: 1px solid #ced4da !important;\n}\n\n.magicfeedback-boolean-option label {\n font-weight: 400;\n font-size: 16px;\n color: #475569;\n cursor: pointer;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: inherit;\n}\n\n.magicfeedback-boolean-option input[type=radio] + label:hover {\n color: #007bff;\n}\n\n.magicfeedback-boolean-option input[type=radio]:checked + label {\n color: #007bff;\n background-color: #cadff8;\n}\n\n.deepdots-popup input[type=\"radio\"] {\n padding: 20px;\n margin: 10px 0 10px 15px;\n width: 40px;\n background-color: #fff;\n box-shadow: none;\n}\n\n/* Style for focused input/select */\n.deepdots-popup input:focus, .deepdots-popup select:focus {\n border-color: #4CAF50; /* Highlight color when focused - you can customize this */\n}\n\n/* Style for invalid input (example: validation error) */\n.deepdots-popup input.error, .deepdots-popup select.error {\n border-color: #ff3333; /* Red color for error state - you can customize this */\n}\n\n.magicfeedback-action-container {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n width: 100%;\n}\n\n.magicfeedback-action-container .magicfeedback-submit {\n cursor: pointer;\n padding: 10px;\n margin: 10px 0;\n width: 100px;\n border-radius: 8px;\n font-size: 16px;\n outline: none;\n transition: border-color 0.3s ease;\n background-color: #1E293B;\n color: white;\n}\n\n.magicfeedback-action-container .magicfeedback-back {\n cursor: pointer;\n padding: 10px;\n margin: 10px 0;\n width: 100px;\n border: 0;\n border-radius: 8px;\n font-size: 16px;\n outline: none;\n transition: border-color 0.3s ease;\n background-color: transparent;\n color: #212529;\n}\n\n\n\n/* Rating styles */\n.magicfeedback-rating {\n width: 100%;\n}\n\n.magicfeedback-rating-container {\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n flex-wrap: wrap;\n align-items: center;\n\n margin: 15px 5px;\n padding: 0;\n\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n.magicfeedback-rating-placeholder-value,\n.magicfeedback-rating-placeholder{\n text-align: center;\n align-content: center;\n justify-content: center;\n text-wrap: wrap;\n}\n\n.magicfeedback-rating-option {\n margin: 0 0.5rem;\n padding: 0;\n}\n\n@media (max-width: 1024px) {\n .magicfeedback-rating-option {\n margin: 10px 0;\n padding: 0;\n width: 20%;\n display: flex;\n justify-content: center;\n }\n\n .magicfeedback-rating-placeholder-value {\n font-size: 0.75rem;\n margin-bottom: 1px;\n }\n .magicfeedback-rating-placeholder{\n justify-content: center;\n }\n\n .magicfeedback-rating-container {\n flex-wrap: wrap;\n justify-content: flex-start;\n }\n}\n\n\n.magicfeedback-rating-option-label-container {\n display: flex;\n flex-direction: column;\n}\n\n\n.magicfeedback-rating-option-label-container label {\n display: inline-block;\n text-align: center;\n margin-bottom: 0;\n font-weight: 600;\n font-size: 18px;\n color: #475569;\n}\n\n.magicfeedback-rating-option-label-container input[type=radio] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n/* IMAGE STYLES */\n.magicfeedback-rating-option-label-container input[type=radio] + img {\n cursor: pointer;\n height: 48px;\n width: 48px;\n}\n\n/* LABEL STYLES */\n.magicfeedback-rating-option-label-container input[type=radio] + label {\n cursor: pointer;\n}\n\n/* CHECKED STYLES */\n.magicfeedback-rating-option-label-container input[type=radio]:checked + img {\n box-shadow: #007bff 0px 1px 4px, #007BFFA0 0px 0px 0px 2px;\n border-radius: 50%;\n}\n\n.magicfeedback-rating-number {\n width: 100%;\n}\n.magicfeedback-rating-container,\n.magicfeedback-rating-number-container {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n\n margin: 15px 0;\n padding: 0;\n\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n/* Cuando hay placeholders (Very bad / Very good), el placeholder ocupa\n el 100% de la primera línea y los boxes bajan a la siguiente */\n.magicfeedback-rating-number-container--with-placeholder {\n flex-wrap: wrap;\n align-items: flex-start;\n}\n\n.magicfeedback-rating-number-container--with-placeholder .magicfeedback-rating-placeholder {\n width: 100%;\n margin-bottom: 8px;\n}\n\n.magicfeedback-rating-number-container--with-placeholder .magicfeedback-rating-number-option {\n width: auto;\n flex: 1;\n}\n\n.magicfeedback-rating-number-option {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 5px;\n padding: 0;\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n width: 100%;\n}\n\n.magicfeedback-rating-number-option-row{\n max-width: 100% !important;\n}\n\n.magicfeedback-rating-number-top-placeholder,\n.magicfeedback-rating-number-bottom-placeholder{\n text-align: center !important;\n align-content: center;\n justify-content: center;\n text-wrap: wrap;\n\n font-size: 15px;\n color: #475569;\n\n width: 100%;\n margin: auto;\n}\n\n@media (min-width: 650px) {\n .magicfeedback-rating-number-option-row +.magicfeedback-rating-number-container-ltr:first-child,\n .magicfeedback-rating-number-option-row + +.magicfeedback-rating-number-container-rtl:last-child {\n margin-left: 0;\n width: calc(100% - 10px);\n }\n\n .magicfeedback-rating-number-option-row +.magicfeedback-rating-number-container-rtl:first-child,\n .magicfeedback-rating-number-option-row + +.magicfeedback-rating-number-container-ltr:last-child {\n margin-right: 0;\n width: calc(100% - 10px);\n }\n}\n\n\n.magicfeedback-rating-number-option-label-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n.magicfeedback-rating-number-option-label-container label {\n display: flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 0 10px;\n font-weight: 600;\n font-size: 14px;\n color: #475569;\n cursor: pointer;\n width: 100%;\n height: 100%;\n min-height: 50px;\n text-align: center;\n padding: 0;\n border-radius: 4px;\n border: 1px solid #ced4da;\n background-color: rgba(246, 246, 246, 0.3);\n transition: background-color 0.15s ease-in-out;\n}\n\n.magicfeedback-rating-number-option-label-container input[type=radio] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.magicfeedback-rating-number-option-label-container input[type=radio] + label {\n cursor: pointer;\n}\n\n.magicfeedback-rating-number-option-label-container input[type=radio] + label:hover,\n.magicfeedback-rating-number-option-label-container input[type=radio]:checked + label {\n color: #007bff;\n border: 1px solid #007bff;\n background-color: rgba(86, 168, 253, 0.29);\n}\n\n.magicfeedback-rating-number-container-column{\n align-items: flex-start !important;\n}\n\n@media (max-width: 650px) {\n .magicfeedback-rating-number-container-ltr {\n justify-content: center;\n flex-wrap: wrap;\n }\n\n .magicfeedback-rating-number-container-rtl {\n justify-content: center;\n flex-wrap: wrap-reverse;\n }\n\n .magicfeedback-rating-number-option {\n max-width: 100%;\n height: 55px;\n margin: 5px 0;\n }\n}\n\n.magicfeedback-rating-star {\n width: 100%;\n}\n\n.magicfeedback-rating-star-container {\n display: flex !important;\n flex-direction: row !important;\n justify-content: center !important;\n align-items: center !important;\n flex-wrap: wrap;\n margin: 15px 5px;\n padding: 0;\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n.magicfeedback-rating-star-option:not(:checked) > .rating__star {\n float: right;\n width: 1em;\n overflow: hidden;\n white-space: nowrap;\n cursor: pointer;\n font-size: 30px;\n color: #ccc;\n margin: 0 10px;\n}\n\n.magicfeedback-rating-star-option:not(:checked) > .rating__star:hover,\n.magicfeedback-rating-star-option:not(:checked) > .rating__star:hover ~ span {\n color: #deb217 !important;\n}\n\n.magicfeedback-rating-star-selected {\n color: #ffc700 !important;\n}\n\n\n/* Style for multiple choice image */\n.magicfeedback-image-option-label-container:hover {\n cursor: pointer;\n border: 0 !important;\n}\n\n.magicfeedback-image-option-label-container input[type=radio]:checked + img,\n.magicfeedback-image-option-label-container input[type=checkbox]:checked + img {\n border: 1px solid #007bff !important;\n box-shadow: 0 0 3px #007bff !important;\n}\n\n.magicfeedback-image-option-label-container input[type=radio] + img,\n.magicfeedback-image-option-label-container input[type=checkbox] + img {\n border: 1px solid transparent !important;\n}\n\n.magicfeedback-image-option-label-container{\n margin: 10px !important;\n height: calc(100% - 20px) !important;\n width: calc(100% - 20px) !important;\n}\n\n.magicfeedback-multiple-choice-image-option {\n display: flex;\n height: auto !important;\n box-shadow: 0 0 3px #ccc;\n}\n\n.magicfeedback-multiple-choice-image-label {\n font-size: 1rem;\n}\n\n.magicfeedback-consent-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 10px 0;\n width: 100%;\n}\n\n.magicfeedback-consent-container label {\n margin-left: 10px;\n}\n\n.magicfeedback-start-message-container {\n /* ... add your start message container styles here ... */\n}\n\n.magicfeedback-success-message,\n.magicfeedback-info-message,\n.magicfeedback-start-message {\n margin: 35px 5px;\n}\n\n.magicfeedback-success-message p,\n.magicfeedback-info-message p,\n.magicfeedback-start-message p {\n font-style: normal;\n text-align: start;\n font-weight: 400;\n font-size: 16px;\n color: #475569;\n line-height: 1.5;\n}\n\n.magicfeedback-success-message img,\n.magicfeedback-info-message img,\n.magicfeedback-start-message img {\n width: 400px;\n max-width: 80%;\n height: auto;\n margin: 10px auto;\n}\n\n.magicfeedback-counter,\n.magicfeedback-point-system-total {\n margin: 10px 0 0 0 !important;\n display: flex !important;\n justify-content: right !important;\n align-items: center !important;\n width: 100%;\n}\n\n.magicfeedback-skip-container {\n background-color: transparent !important;\n border: 0 !important;\n color: #999999FF !important;\n padding: 0 !important;\n margin: 0 !important;\n cursor: pointer !important;\n font-size: 0.5em !important;\n font-weight: 400 !important;\n box-shadow: 0 0 0 !important;\n\n &:hover {\n color: #0066ff;\n }\n}\n\n.magicfeedback-skip-container input[type=checkbox] {\n border-color: #999999FF !important;\n border: 0 !important;\n cursor: pointer !important;\n\n}\n\n.magicfeedback-multi-question-matrix,\n.magicfeedback-point-system,\n.magicfeedback-priority-list {\n width: 100% !important;\n}\n\n.magicfeedback-multi-question-matrix-container,\n.magicfeedback-point-system-container,\n.magicfeedback-priority-list-container {\n width: 100% !important;\n overflow-x: auto;\n}\n\n.magicfeedback-point-system-list,\n.magicfeedback-priority-list-list,\n.magicfeedback-multi-question-matrix-table {\n width: 100% !important;\n padding: 0 !important;\n overflow-x: auto;\n}\n\n.magicfeedback-multi-question-matrix {\n position: relative !important;\n}\n\n.magicfeedback-multi-question-matrix-container {\n overflow: auto !important;\n padding-bottom: 10px;\n}\n\n.magicfeedback-multi-question-matrix-label{\n text-align: left !important;\n}\n.magicfeedback-priority-list-item {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0 10px 10px;\n\n border: 1px solid #ced4da;\n border-radius: 5px;\n margin: 10px 0 !important;\n}\n\n.magicfeedback-point-system-item {\n height: 45px;\n margin: 5px 0 !important;\n}\n\n.magicfeedback-point-system-item label,\n.magicfeedback-priority-list-item-label {\n font-family: inherit;\n font-size: 18px !important;\n color: #212529;\n text-align: start;\n word-wrap: break-word;\n white-space: normal;\n padding: 0 10px 0 0;\n}\n\n.magicfeedback-point-system-input-container {\n padding: 0 10px 0 0;\n border-radius: 5px;\n font-size: 14px;\n border: 1px solid #ced4da;\n height: 42px;\n margin: auto 0;\n}\n\n.magicfeedback-multi-question-matrix-table thead {\n margin-bottom: 20px;\n}\n\n.magicfeedback-multi-question-matrix-table th{\n text-align: center;\n font-weight: 400 !important;\n font-size: 1rem !important;\n padding: 0 10px !important;\n}\n\n.magicfeedback-multi-question-matrix-table th,\n.magicfeedback-multi-question-matrix-table td label,\n.magicfeedback-priority-list-arrow-up,\n.magicfeedback-priority-list-arrow-down {\n font-style: normal !important;\n font-weight: 400 !important;\n font-size: 1rem !important;\n color: #475569 !important;\n cursor: pointer !important;\n margin: 0 !important;\n line-height: inherit;\n}\n\n.magicfeedback-multi-question-matrix-table tr {\n align-items: center;\n margin: 5px 0;\n}\n\n.magicfeedback-multi-question-matrix-row-tr{\n border-radius: 5px;\n margin: 10px 0 !important;\n}\n\n.magicfeedback-multi-question-matrix-row-tr:nth-child(odd) {\n background-color: #f1f6f6; /* Light gray background for odd rows */\n}\n\n.magicfeedback-multi-question-matrix-row-tr:nth-child(even) {\n background-color: #ffffff; /* White background for even rows */\n}\n\n.magicfeedback-multi-question-matrix-row-label {\n text-align: left !important;\n}\n\n.magicfeedback-point-system-item span {\n color: #475569 !important;\n}\n\n.magicfeedback-point-system-item input {\n padding: 0;\n margin: 0 !important;\n width: auto !important;\n min-width: 100px !important;\n height: auto !important;\n min-height: 42px;\n cursor: pointer;\n font-size: 14px;\n text-align: center !important;\n}\n\n.magicfeedback-multi-question-matrix-table input {\n margin: auto !important;\n padding: 20px !important;\n width: 100% !important;\n height: 15px;\n border: 1px solid #ced4da;\n cursor: pointer;\n}\n\n.magicfeedback-image{\n max-height: 400px !important;\n height: auto !important;\n max-width: 100% !important;\n margin: 10px auto !important;\n}\n\n.magicfeedback-error{\n margin-top: 5px;\n}","import {DeepdotsEventType, PopupActions, PopupStyle, FormData} from '../types';\nimport { buildSurveyIdentity } from '../tracking/tracking-manager';\nimport { buildFontFaceCss, buildFontFamilyValue } from './font';\nimport { sdkLog, sdkWarn, sdkError } from '../util/logger';\nimport magicfeedback from \"@magicfeedback/native\";\nimport magicfeedbackCss from '../assets/style.css';\n\n// Inserta la hoja de estilos de MagicFeedback directamente en el popup para garantizar estilos incluso si el bundler no la inyecta globalmente.\nfunction ensureMagicFeedbackStyles(_popup: HTMLElement) {\n const STYLE_ID = 'magicfeedback-sdk-styles';\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = magicfeedbackCss;\n document.head.appendChild(style);\n}\n\n// Añade estilos de spinner si no existen\nfunction ensureSpinnerStyles(_popup: HTMLElement) {\n if (document.getElementById('deepdots-spinner-styles')) return;\n const style = document.createElement('style');\n style.id = 'deepdots-spinner-styles';\n style.textContent = `\n @keyframes ddspin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n .mf-spinner { display:flex; justify-content:center; align-items:center; padding:8px 0; }\n .mf-spinner-circle { width:28px; height:28px; border:3px solid #e0e6ed; border-top-color:#1E293B; border-radius:50%; animation: ddspin 0.9s linear infinite; }\n `;\n document.head.appendChild(style);\n}\n\nfunction ensureResponsiveStyles(_popup: HTMLElement) {\n if (document.getElementById('deepdots-responsive-styles')) return;\n const style = document.createElement('style');\n style.id = 'deepdots-responsive-styles';\n style.textContent = `\n /* Responsive adjustments */\n @media (max-width: 640px) {\n .deepdots-popup {\n width: calc(100% - 24px) !important;\n max-width: calc(100% - 24px) !important;\n height: auto !important;\n max-height: 90vh !important;\n border-radius: 12px !important;\n padding: calc(16px + env(safe-area-inset-top)) 16px calc(16px + env(safe-area-inset-bottom)) 16px !important;\n box-sizing: border-box;\n }\n .deepdots-popup .mf-spinner-circle { width: 32px; height: 32px; border-width: 4px; }\n .deepdots-popup button { font-size: 16px !important; }\n .deepdots-popup-header button { width:48px; height:48px; }\n .deepdots-popup-header button svg { width:26px; height:26px; }\n .deepdots-popup-footer { flex-direction: column-reverse !important; gap: 12px !important; }\n .deepdots-popup-footer button { width: 100%; }\n }\n @media (max-width: 400px) {\n .deepdots-popup { padding: calc(12px + env(safe-area-inset-top)) 12px calc(12px + env(safe-area-inset-bottom)) 12px !important; }\n .deepdots-popup-header button { width:48px; height:48px; }\n .deepdots-popup-header button svg { width:26px; height:26px; }\n }\n @media (orientation: landscape) and (max-height: 480px) {\n .deepdots-popup {\n height: 100vh !important;\n max-height: 100vh !important;\n overflow-y: auto !important;\n }\n }\n `;\n document.head.appendChild(style);\n}\n\n// Inyecta (una sola vez) el @font-face de la fuente personalizada.\nfunction ensureFontFace(family: string, url: string) {\n const css = buildFontFaceCss(family, url);\n if (!css) return;\n const STYLE_ID = 'deepdots-font-face';\n let el = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!el) {\n el = document.createElement('style');\n el.id = STYLE_ID;\n document.head.appendChild(el);\n }\n if (el.textContent !== css) el.textContent = css;\n}\n\n/**\n * Renderiza el popup dentro del contenedor dado usando MagicFeedback para la encuesta.\n */\nexport async function renderPopup(\n container: HTMLElement,\n surveyId: string,\n productId: string,\n actions: PopupActions | undefined,\n emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void,\n onClose: () => void,\n env: string = 'production',\n userId?: string,\n style?: PopupStyle,\n sessionId?: string,\n miniService?: string,\n analyticsFeedbackSessionId?: string,\n): Promise<void> {\n let surveyCompletedEmitted = false;\n let stylesInjected = false;\n\n const isDark = style?.theme === 'dark';\n const theme = {\n popupBg: isDark ? '#1e1e1e' : '#fff',\n textPrimary: isDark ? '#f0f0f0' : '#111',\n closeBtnHoverBg: isDark ? 'rgba(255,255,255,0.10)' : 'rgba(0,0,0,0.06)',\n closeBtnHoverColor: isDark ? '#fff' : '#000000',\n };\n\n const positionMap: Record<string, { justifyContent: string; alignItems: string; padding?: string; background: string }> = {\n 'center': { justifyContent: 'center', alignItems: 'center', background: 'rgba(0,0,0,0.5)' },\n 'bottom': { justifyContent: 'center', alignItems: 'flex-end', padding: '16px', background: 'transparent' },\n 'bottom-right': { justifyContent: 'flex-end', alignItems: 'flex-end', padding: '16px', background: 'transparent' },\n 'bottom-left': { justifyContent: 'flex-start', alignItems: 'flex-end', padding: '16px', background: 'transparent' },\n 'top': { justifyContent: 'center', alignItems: 'flex-start', padding: '16px', background: 'transparent' },\n 'top-right': { justifyContent: 'flex-end', alignItems: 'flex-start', padding: '16px', background: 'transparent' },\n 'top-left': { justifyContent: 'flex-start', alignItems: 'flex-start', padding: '16px', background: 'transparent' },\n };\n const pos = positionMap[style?.position ?? 'center'] ?? positionMap['center'];\n\n // Crear popup base\n const popup = document.createElement('div');\n popup.className = 'deepdots-popup';\n popup.style.cssText = `\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n background: ${theme.popupBg};\n border-radius: 8px;\n padding: 24px;\n box-shadow: 0 4px 6px rgba(0,0,0,0.1);\n max-width: 600px;\n width: 90%;\n min-height: 200px;\n `;\n\n const font = style?.font;\n if (font?.family) {\n const familyValue = buildFontFamilyValue(font.family);\n // El survey vive dentro del contenedor y hereda esta fuente.\n popup.style.fontFamily = familyValue;\n // La variable habilita que el <h2> (Montserrat por defecto) también la use.\n popup.style.setProperty('--deepdots-font', familyValue);\n // Los controles de formulario (button/input/textarea/select) NO heredan\n // font-family por defecto; esta clase activa la regla que los fuerza a heredar.\n popup.classList.add('deepdots-has-font');\n if (font.url) ensureFontFace(font.family, font.url);\n }\n\n // Sección header (solo botón cerrar)\n const header = document.createElement('div');\n header.className = 'deepdots-popup-header';\n header.style.cssText = 'display:flex; justify-content:flex-end; align-items:center; width:100%;';\n\n // Botón de cierre (X)\n const closeBtn = document.createElement('button');\n closeBtn.type = 'button';\n closeBtn.setAttribute('aria-label', 'Close popup');\n closeBtn.innerHTML = `\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M6 18L18 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n `;\n closeBtn.style.cssText = `\n background:transparent;\n border:none;\n width:32px;\n height:32px;\n display:flex;\n align-items:center;\n justify-content:center;\n border-radius: 8px;\n cursor:pointer;\n color:${theme.textPrimary};\n padding:4px;\n transition: color .15s ease, transform .15s ease, background .15s ease;\n box-shadow: none !important;\n `;\n closeBtn.onmouseenter = () => {\n closeBtn.style.color = theme.closeBtnHoverColor;\n closeBtn.style.background = theme.closeBtnHoverBg;\n closeBtn.style.transform = 'scale(1.06)';\n };\n closeBtn.onmouseleave = () => {\n closeBtn.style.color = theme.textPrimary;\n closeBtn.style.background = 'transparent';\n closeBtn.style.transform = 'scale(1)';\n };\n closeBtn.onclick = () => {\n emit('popup_clicked', surveyId, {action: 'close_icon'});\n onClose();\n };\n header.appendChild(closeBtn);\n\n ensureMagicFeedbackStyles(popup);\n ensureSpinnerStyles(popup);\n ensureResponsiveStyles(popup);\n\n const containerContent = document.createElement('div');\n containerContent.className = 'deepdots-popup-container-conetent';\n containerContent.style.cssText = `\n display:flex; \n flex-direction:column; \n padding: 0 20px 12px 20px;\n max-height: 80vh; /* límite general del popup */\n overflow: hidden; /* quita scroll del contenedor principal */\n`\n\n // Sección principal (main) - Contenedor formulario + spinner\n const main = document.createElement('div');\n main.className = 'deepdots-popup-main';\n main.style.cssText = 'display:flex; flex-direction:column; width:100%; max-height:80vh; overflow-y:auto;';\n\n const formWrapper = document.createElement('div');\n formWrapper.style.cssText = 'width:100%; flex: 1 1 auto;';\n\n // Contenedor de aviso de error de validación\n const errorHint = document.createElement('div');\n errorHint.className = 'deepdots-error-hint';\n errorHint.style.cssText = `\n display: none;\n margin: 12px 0 0 0;\n padding: 10px 12px;\n border-radius: 6px;\n background: #FEF3C7; /* amber-100 */\n color: #92400E; /* amber-700 */\n border: 1px solid #FCD34D; /* amber-300 */\n font-size: 13px;\n `;\n errorHint.setAttribute('role', 'alert');\n errorHint.setAttribute('aria-live', 'polite');\n\n const spinnerEl = document.createElement('div');\n spinnerEl.className = 'mf-spinner';\n spinnerEl.setAttribute('role', 'status');\n spinnerEl.setAttribute('aria-label', 'Loading survey');\n spinnerEl.innerHTML = '<div class=\"mf-spinner-circle\"></div>';\n spinnerEl.style.cssText = 'position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);';\n\n const formDivId = `magicfeedback-form-${surveyId}`;\n const formHost = document.createElement('div');\n formHost.id = formDivId;\n formHost.style.cssText = 'width:100%; visibility:hidden;';\n\n formWrapper.appendChild(spinnerEl);\n formWrapper.appendChild(formHost);\n main.appendChild(formWrapper);\n // Insertar el hint justo antes del footer\n main.appendChild(errorHint);\n\n // Sección footer (acciones) - botones en extremos\n const footer = document.createElement('div');\n footer.className = 'deepdots-popup-footer';\n footer.setAttribute('data-actions-wrapper', 'true');\n footer.style.cssText = 'display:flex; flex-direction: row-reverse ;justify-content:space-between; align-items:center; gap:8px; margin-top:auto; width:100%; padding-top:16px;';\n\n // Botones\n const backButton = document.createElement('button');\n backButton.textContent = actions?.back ? actions.back.label : 'Back';\n backButton.style.cssText = `\n background: transparent;\n color: #333;\n border: 1px solid #999;\n padding: 12px 24px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: filter .15s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n `;\n backButton.onmouseenter = () => {\n backButton.style.filter = 'brightness(0.9)';\n }\n backButton.onmouseleave = () => {\n backButton.style.filter = 'brightness(1)';\n }\n backButton.onclick = () => {\n emit('popup_clicked', surveyId, {action: 'back'});\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (formInstance as any)?.back?.();\n };\n\n // Boton start survyes, solo aprece cuando la encuesta empieza con mensaje de inicio\n // Width de 100% para que ocupe todo el espacio disponible\n const startButton = document.createElement('button');\n startButton.textContent = actions?.start ? actions.start.label : 'Start survey';\n startButton.style.cssText = `\n background: #1E293B;\n color: #fff;\n border: none;\n padding: 12px 24px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: filter .15s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n `;\n startButton.onclick = () => {\n emit('popup_clicked', surveyId, {action: 'start_survey'});\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (formInstance as any)?.startForm?.();\n };\n\n // Botón cerrar popup, solo aparece al terminar la encuesta\n // Width de 100% para que ocupe todo el espacio disponible\n const closeButton = document.createElement('button');\n closeButton.textContent = actions?.complete ? actions.complete.label : 'Complete survey';\n closeButton.style.cssText = `\n background: #1E293B;\n color: #fff;\n border: none;\n padding: 12px 24px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: filter .15s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n `;\n closeButton.onmouseenter = () => {\n closeButton.style.filter = 'brightness(0.9)';\n }\n closeButton.onmouseleave = () => {\n closeButton.style.filter = 'brightness(1)';\n }\n closeButton.onclick = () => {\n emit('popup_clicked', surveyId, {action: 'complete'});\n onClose();\n };\n\n // Botón send, si es primera pagina ocupara el espacio completo pero si no estara al lado derecho\n const submitButton = document.createElement('button');\n submitButton.textContent = actions?.accept ? actions.accept.label : 'Send';\n submitButton.style.cssText = `\n background: #1E293B;\n color: #fff;\n border: none;\n padding: 12px 24px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: filter .15s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n `;\n submitButton.onclick = () => {\n if (!surveyCompletedEmitted) {\n emit('popup_clicked', surveyId, {action: 'manual_send'});\n // Dispara envío nativo si existe\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (formInstance as any)?.send?.();\n }\n };\n\n backButton.style.display = 'none';\n startButton.style.display = 'none';\n submitButton.style.display = 'none';\n closeButton.style.display = 'none';\n\n // Insertar botones dentro del footer en orden visual (row-reverse deja primario a la derecha)\n footer.appendChild(submitButton);\n footer.appendChild(backButton);\n footer.appendChild(closeButton);\n footer.appendChild(startButton);\n\n // Añadir footer al main y main al containerContent\n main.appendChild(footer);\n containerContent.appendChild(main);\n\n // Helper para controlar visibilidad de botones según estado\n type ViewState = 'loading' | 'start' | 'in_progress_first' | 'in_progress_next' | 'completed' | 'error';\n\n function updateButtons(state: ViewState) {\n // Por defecto, ocultar todos\n backButton.style.display = 'none';\n startButton.style.display = 'none';\n submitButton.style.display = 'none';\n closeButton.style.display = 'none';\n // Reset widths por estado\n backButton.style.width = '';\n startButton.style.width = '';\n submitButton.style.width = '';\n closeButton.style.width = '';\n\n switch (state) {\n case 'loading':\n // Footer se ocultará desde setLoading\n break;\n case 'start':\n // Solo botón Start a ancho completo\n startButton.style.display = 'inline-flex';\n startButton.style.width = '100%';\n break;\n case 'in_progress_first':\n // Solo botón Send (lado derecho), ancho auto\n submitButton.style.display = 'inline-flex';\n submitButton.style.width = '';\n setLoading(false);\n break;\n case 'in_progress_next':\n // Mostrar Back (izquierda) + Send (derecha)\n backButton.style.display = 'inline-flex';\n submitButton.style.display = 'inline-flex';\n setLoading(false);\n break;\n case 'completed':\n // Mostrar Close/Complete a ancho completo como acción principal\n closeButton.style.display = 'inline-flex';\n closeButton.style.width = '100%';\n setLoading(false);\n break;\n case 'error':\n // En error, permitir cerrar (ancho auto)\n // closeButton.style.display = 'inline-flex';\n setLoading(false);\n break;\n }\n }\n\n // Ensamblar popup\n popup.appendChild(header);\n popup.appendChild(containerContent);\n\n container.innerHTML = '';\n container.appendChild(popup);\n container.style.display = 'flex';\n container.style.justifyContent = pos.justifyContent;\n container.style.alignItems = pos.alignItems;\n container.style.background = pos.background;\n if (pos.padding) container.style.padding = pos.padding;\n\n // Gestión dinámica de loading\n function setLoading(isLoading: boolean) {\n spinnerEl.style.display = isLoading ? 'flex' : 'none';\n if (!isLoading) {\n formHost.style.visibility = 'visible';\n }\n // Ocultar totalmente los botones cuando está cargando\n footer.style.display = isLoading ? 'none' : 'flex';\n // Ajustar estados de los botones por si se muestran\n backButton.disabled = isLoading;\n startButton.disabled = isLoading;\n closeButton.disabled = isLoading;\n submitButton.disabled = isLoading;\n submitButton.style.opacity = isLoading ? '0.6' : '1';\n submitButton.style.cursor = isLoading ? 'not-allowed' : 'pointer';\n // No sobrescribir el estado de botones al finalizar la carga.\n if (isLoading) {\n updateButtons('loading');\n }\n }\n\n // Estado inicial\n setLoading(true);\n\n // Entorno navegador\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n // Referencia instancia formulario\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let formInstance: any = null;\n\n try {\n if (!magicfeedback || typeof magicfeedback.form !== 'function') {\n sdkWarn('[MagicFeedback] form() no disponible. Fallback manual.');\n setLoading(false);\n return;\n }\n magicfeedback.init({\n debug: true,\n env: env === 'production' ? 'prod' : 'dev'}\n );\n // Contrato Fase 1 §5: profile = identidad del usuario; metadata = contexto de tracking (session_id + user_id)\n const { profile, metadata } = buildSurveyIdentity(userId ?? null, sessionId ?? null, miniService ?? null, analyticsFeedbackSessionId ?? null);\n formInstance = magicfeedback.form(surveyId, productId, profile, metadata);\n\n interface TypedGenerateOptions {\n addButton: boolean;\n getMetaData: boolean;\n onLoadedEvent?: (args: {\n formData: FormData,\n progress?: number, total?: number\n }) => void;\n beforeSubmitEvent?: () => void;\n afterSubmitEvent?: (args: { error?: string, completed: boolean, progress: number, total: number }) => void;\n onBackEvent?: (args: { error?: string, progress: number, total: number, followup: boolean }) => void;\n }\n\n const generateOptions: TypedGenerateOptions = {\n addButton: false,\n getMetaData: true,\n };\n generateOptions.onLoadedEvent = ({formData}) => {\n // Calcular altura disponible y aplicarla al main (restando header + footer + paddings)\n try {\n /*\n const headerHeight = header.getBoundingClientRect().height;\n const footerHeight = footer.getBoundingClientRect().height;\n const paddingY = 48; // 24px top + 24px bottom\n const viewportLimit = window.innerHeight * 0.8; // coincide con max-height del popup\n const available = viewportLimit - headerHeight - footerHeight - paddingY;\n if (available > 120) { // asegurar un mínimo razonable\n main.style.maxHeight = available + 'px';\n } */\n } catch (e) {\n // silencioso\n }\n // Personalización del popup basada en formData.style\n const s = formData?.style;\n if (s && !stylesInjected) {\n stylesInjected = true;\n // Fondo del contenedor popup\n if (s.boxBackgroundColor) {\n popup.style.background = s.boxBackgroundColor;\n }\n // Alineación del contenido principal\n if (s.contentAlign) {\n // 'top' => start, 'center' => center\n main.style.justifyContent = s.contentAlign === 'center' ? 'center' : 'flex-start';\n }\n // Botón primario (submit, start)\n if (s.buttonPrimaryColor) {\n submitButton.style.background = s.buttonPrimaryColor;\n submitButton.style.border = 'none';\n submitButton.style.color = '#fff';\n\n startButton.style.background = s.buttonPrimaryColor;\n startButton.style.border = 'none';\n startButton.style.color = '#fff';\n\n closeButton.style.background = s.buttonPrimaryColor;\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n }\n // Botón secundario (back) — outlined: fondo blanco, letra y borde del color secundario\n if (s.buttonSecondaryColor) {\n backButton.style.background = '#fff';\n backButton.style.color = s.buttonSecondaryColor;\n backButton.style.border = `1px solid ${s.buttonSecondaryColor}`;\n }\n if (s.logo) {\n if (!document.getElementById('deepdots-popup-logo')) {\n // Insertar logo si existe\n const logoImg = document.createElement('img');\n logoImg.id = 'deepdots-popup-logo';\n logoImg.src = s.logo;\n logoImg.alt = 'Logo';\n logoImg.style.cssText = 'max-height:40px; max-width:100%; object-fit:contain;';\n if (s.logoSize) {\n switch (s.logoSize) {\n case 'small':\n logoImg.style.maxHeight = '30px';\n break;\n case 'medium':\n logoImg.style.maxHeight = '50px';\n break;\n case 'large':\n logoImg.style.maxHeight = '70px';\n break;\n }\n }\n if (s.logoPosition) {\n switch (s.logoPosition) {\n case 'left':\n logoImg.style.margin = '0 16px 42px 0';\n logoImg.style.display = 'block';\n logoImg.style.marginLeft = '0';\n break;\n case 'right':\n logoImg.style.margin = '0 0 42px 16px';\n logoImg.style.display = 'block';\n logoImg.style.marginLeft = 'auto';\n break;\n case 'center':\n logoImg.style.margin = '0 auto 42px auto';\n logoImg.style.display = 'block';\n break;\n }\n }\n // Insertar antes del main si no existe ya\n containerContent.insertBefore(logoImg, main);\n }\n }\n\n if (s.startMessage && s.startMessage !== '') {\n // Si hay mensaje de inicio, mostrar botón Start inicialmente\n sdkLog(s.startMessage);\n updateButtons('start');\n } else {\n // Si no hay mensaje de inicio, mostrar estado de primera página (solo Send)\n updateButtons('in_progress_first');\n }\n } else {\n // Sin estilos, asumir primera página normal\n updateButtons('in_progress_first');\n }\n\n emit('popup_clicked', surveyId, {action: 'loaded'});\n setLoading(false); // hace visible el formulario y oculta el spinner\n };\n generateOptions.beforeSubmitEvent = () => {\n setLoading(true);\n emit('popup_clicked', surveyId, {action: 'before_submit'});\n };\n generateOptions.afterSubmitEvent = ({error, completed, total, progress}) => {\n // No cambiar estado de loading aquí; lo gestiona cada transición\n // Normalizar el error a texto seguro\n const errText = error ? (typeof error === 'string' ? error : ((error as unknown as {message?: string}).message ?? String(error))) : '';\n if (errText) {\n // Desactivar loading para que se vean los botones\n setLoading(false);\n // Caso específico: error de pregunta obligatoria\n if (errText.toLowerCase().includes('no response')) {\n errorHint.textContent = 'Please answer the required question to continue.';\n errorHint.style.display = 'block';\n emit('popup_clicked', surveyId, {action: 'validation_error_required'});\n updateButtons('in_progress_next');\n return;\n }\n // Otros errores: mostrar mensaje genérico y permitir cerrar\n errorHint.textContent = 'An error occurred while submitting. Please try again or close the popup.';\n errorHint.style.display = 'block';\n emit('popup_clicked', surveyId, {action: 'submit_error', error: errText});\n // updateButtons('error');\n return;\n }\n // Limpiar hint si no hay error\n errorHint.style.display = 'none';\n setLoading(false);\n if (completed) {\n emit('survey_completed', surveyId, {action: 'completed'});\n surveyCompletedEmitted = true;\n updateButtons('completed');\n return;\n }\n emit('popup_clicked', surveyId, {action: 'partial'});\n if (total > 1 && progress > 0 && progress < total) {\n updateButtons('in_progress_next');\n } else {\n updateButtons('in_progress_first');\n }\n };\n generateOptions.onBackEvent = ({progress}) => {\n emit('popup_clicked', surveyId, {action: 'back'});\n // Si volvemos a la primera página, ocultar Back\n if (progress === 0) {\n updateButtons('in_progress_first');\n } else {\n updateButtons('in_progress_next');\n }\n };\n\n // Ejecutar generación con opciones tipadas\n formInstance.generate(formDivId, generateOptions)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((err: any) => {\n sdkError('[MagicFeedback] Error generating form:', err);\n setLoading(false);\n });\n } catch (e) {\n sdkError('[MagicFeedback] Exception initializing form:', e);\n setLoading(false);\n }\n}\n","export { DeepdotsPopups } from './core/deepdots-popups';\nexport { buildMessageParams } from './analytics/messaging';\nexport type { MessageStage, TrackMessageOptions } from './analytics/messaging';\nexport type {\n DeepdotsConfig,\n DeepdotsInitParams,\n DeepdotsLogger,\n TriggerConfig,\n DeepdotsEvent,\n DeepdotsEventType,\n EventListener,\n PopupDefinition,\n PopupTrigger,\n PopupTriggerCondition,\n PopupTriggerConditionStatus,\n} from './types';\nexport { POPUP_TRIGGER_CONDITION_STATUSES } from './types';\nexport { NoopPopupRenderer, BrowserPopupRenderer, createDefaultRenderer } from './platform/renderer';\nexport type { PopupRenderer } from './platform/renderer';\n// Para hosts (React Native): inyectar storage persistente y device info.\nexport { InMemoryStorage } from './tracking/tracking-manager';\nexport type { KeyValueStorage } from './tracking/tracking-manager';\nexport type { DeviceInfo } from './analytics/device-info';\nexport { ContactManager } from './contact/contact-manager';\nexport type { ContactAttributes, ContactAttributeValue, ContactBody } from './contact/contact-manager';\n// Canal de analytics → POST /sdk/feedback (modelo de Feedback del Surveys SDK).\nexport { buildAnalyticsFeedbackBody, createFeedbackSink } from './analytics/feedback-payload';\nexport type { AnalyticsKeys, AnalyticsFeedbackBody, FeedbackKV } from './analytics/feedback-payload';\n// Crash & error reporting (#14–17).\nexport { CrashReporter, crashRecordToParams } from './analytics/crash-reporter';\nexport type { CrashRecord, CrashSeverity, ReportErrorOptions, DeviceSnapshot, ReactNativeErrorUtils } from './analytics/crash-reporter';\n// React Native: renderer-puente para mostrar surveys en react-native-webview.\nexport { ReactNativePopupRenderer } from './platform/react-native-renderer';\nexport type { ReactNativeRendererOptions, ReactNativeSurveyPayload } from './platform/react-native-renderer';\nexport { buildSurveyHtml } from './ui/surveyHtml';\n// React Native: auto-wiring en una llamada (storage MMKV + device + platform + lifecycle).\nexport { setupReactNative, mmkvStorage, collectRnDevice } from './react-native/setup';\nexport type { ReactNativeSetupDeps, MmkvLike, DeviceInfoLike, AppStateLike } from './react-native/setup';\n","/**\n * Configuration options for initializing the DeepdotsPopups SDK\n */\nimport type { KeyValueStorage } from '../tracking/tracking-manager';\nimport type { DeviceInfo } from '../analytics/device-info';\nimport type { AnalyticsKeys } from '../analytics/feedback-payload';\n\n/**\n * Custom logger to receive the SDK's debug output instead of the console.\n * Only `log` is required; `warn`/`error`/`info` fall back to `log` when omitted.\n * Lets the host pipe debug output to a file, Firebase, etc. `console` satisfies this shape.\n */\nexport interface DeepdotsLogger {\n log: (...args: unknown[]) => void;\n warn?: (...args: unknown[]) => void;\n error?: (...args: unknown[]) => void;\n info?: (...args: unknown[]) => void;\n}\n\nexport interface DeepdotsInitParams {\n /** API key for authentication */\n apiKey?: string;\n /** Node environment: 'development' or 'production' */\n nodeEnv?: 'development' | 'production';\n /** Enable debug logging */\n debug?: boolean;\n /** Custom logger for debug output. When set (and `debug` is true), the SDK routes its logs here instead of `console`. Default: `console`. */\n logger?: DeepdotsLogger;\n /** Optional user id to send with popup events */\n userId?: string;\n /** Starts tracking enabled (default) or disabled (e.g. until consent is granted). Equivalent to calling `setTrackingEnabled` after init. */\n trackingEnabled?: boolean;\n /** Host app version (for analytics device info / Technology #11). */\n appVersion?: string;\n /** Injectable persistent storage (RN: adapter over AsyncStorage). If missing, uses localStorage/in-memory. */\n storage?: KeyValueStorage;\n /** Platform used in the analytics envelope. Default is 'web'; in RN pass 'android'/'ios'. */\n platform?: 'web' | 'android' | 'ios';\n /**\n * BCP-47 language tag (e.g. 'es-ES') used for the analytics context AND for popup\n * language segmentation (`segments.lang`). If omitted, the SDK auto-detects:\n * `navigator.language` on web, or the `Intl` locale as a fallback (works in\n * React Native with Hermes, where `navigator.language` is absent). If no source\n * resolves a language, popups with `segments.lang` cannot be filtered and are shown.\n */\n language?: string;\n /** Injectable device info (RN: from react-native-device-info). If missing, it is derived from the browser. */\n device?: DeviceInfo;\n /**\n * Analytics channel keys (`POST /sdk/feedback`). If provided, analytics is SENT\n * to the configured integration; if missing, it stays in dry-run mode (console.log only).\n */\n analytics?: AnalyticsKeys;\n /**\n * Internal user attributes known only by the host (language, age, plan, ...), sent\n * to the backend Contact for segmentation/targeting. Requires `userId`. Equivalent to calling\n * `setContactAttributes` after init (sends only when values changed from the last sync).\n */\n contactAttributes?: Record<string, string | number | boolean>;\n\n}\nexport interface DeepdotsConfig {\n /** API key for authentication */\n apiKey?: string;\n /** Enable debug logging */\n debug?: boolean;\n /** Optional user id to send with popup events */\n userId?: string;\n}\n\n/**\n * Options for configuring survey triggers\n */\nexport interface TriggerConfig {\n /** Trigger type: 'time' (delay), 'scroll' (scroll percentage), 'exit' (route exit), 'click' (element id), 'event' (host event) */\n type: 'time' | 'scroll' | 'exit' | 'click' | 'event';\n /** Value for the trigger (milliseconds for time, percentage for scroll, seconds for exit, element id for click, event name for event) */\n value?: number | string;\n /** Survey ID to show when triggered */\n surveyId: string;\n /** Optional popup definition id (used to disambiguate repeated survey ids) */\n popupId?: string;\n}\n\n/**\n * Event types emitted by the SDK\n */\nexport type DeepdotsEventType =\n | 'popup_shown'\n | 'popup_clicked'\n | 'survey_completed';\n\n/**\n * Event payload structure\n */\nexport interface DeepdotsEvent {\n type: DeepdotsEventType;\n surveyId: string;\n timestamp: number;\n data?: Record<string, unknown>;\n}\n\n/**\n * Event listener callback\n */\nexport type EventListener = (event: DeepdotsEvent) => void;\n\n/** Trigger type used by remote popup definitions */\nexport type PopupTriggerType = 'time_on_page' | 'scroll' | 'exit' | 'click' | 'event';\n\nexport type PopupTriggerConditionStatus = 'SHOWED' | 'PARTIAL' | 'COMPLETED';\n\nexport const POPUP_TRIGGER_CONDITION_STATUSES: PopupTriggerConditionStatus[] = [\n 'SHOWED',\n 'PARTIAL',\n 'COMPLETED',\n];\n\n/** Extra condition used to activate the popup */\nexport interface PopupTriggerCondition {\n answered: PopupTriggerConditionStatus; // user progress status in the survey\n cooldownDays: number; // cooldown days before showing again\n}\n\n/** Trigger attached to the popup definition */\nexport interface PopupTrigger {\n type: PopupTriggerType;\n value: number | string; // seconds on page, scroll percentage, click id, or event name\n}\n\n/** Accept action (open survey) */\nexport interface PopupActionAccept {\n label: string;\n surveyId: string; // survey id to launch\n}\n\n/** Decline action */\nexport interface PopupActionDecline {\n label: string;\n cooldownDays?: number; // optional: do not show again until X days pass\n}\n\n/** Start Surveys Action */\nexport interface PopupActionStart {\n label: string;\n}\n\n/** Complete action (accept and auto-complete survey) */\n// Requires the survey to support auto-completion via parameters.\nexport interface PopupActionComplete {\n label: string;\n surveyId: string; // survey id to launch\n autoCompleteParams: Record<string, unknown>; // parameters used for auto-completion\n cooldownDays?: number;\n}\n\n/** Set of actions available in the popup */\nexport interface PopupActions {\n accept?: PopupActionAccept;\n decline?: PopupActionDecline;\n complete?: PopupActionComplete;\n start?: PopupActionStart;\n back?: PopupActionDecline;\n}\n\n/** Fuente personalizable del popup + survey (viene de la API por popup) */\nexport interface PopupFont {\n /** Nombre de la familia. Ej: \"Inter\" (nombre limpio, NO un stack). */\n family: string;\n /** Opcional: URL a un archivo de fuente (woff2/ttf/otf) para armar un @font-face. */\n url?: string;\n}\n\n/** Configurable popup styles */\nexport interface PopupStyle {\n theme: 'light' | 'dark';\n position: 'bottom' | 'bottom-right' | 'bottom-left' | 'top' | 'top-right' | 'top-left' | 'center';\n /** @deprecated Not used by the SDK; kept only for API compatibility */\n imageUrl?: string | null;\n /** Fuente personalizada. Si falta, se mantiene el comportamiento actual. */\n font?: PopupFont;\n}\n\n/** Segments/targeting rules for showing the popup */\nexport interface PopupSegments {\n lang?: string[]; // allowed languages\n path?: string[]; // app routes where it can be shown\n [key: string]: unknown; // possible future extension\n}\n\n/** Full popup definition */\nexport interface PopupDefinition {\n id: string;\n title: string;\n message: string; // rendered safe HTML (recommended to sanitize upstream)\n triggers: PopupTrigger[];\n cooldown?: PopupTriggerCondition[];\n actions?: PopupActions;\n surveyId: string;\n productId: string;\n style?: PopupStyle;\n segments?: PopupSegments;\n}\n\nexport interface FormStyle\n{\n id: string;\n logo: string;\n title: string;\n companyName: string;\n backgroundColor: string;\n boxBackgroundColor: string;\n buttonOnTopColor: string;\n buttonPrimaryColor: string\n buttonSecondaryColor: string;\n loadingBarColor: string;\n favIcon: string;\n startMessage: string;\n successMessage: string;\n addLogoInMsg: boolean;\n privacyPolicyUrl: string;\n helpUrl: string;\n integrationId: string;\n redirectLink: string;\n redirectError: string;\n redirectTime: number;\n integrationThemeId: string;\n contentAlign: 'top' | 'center';\n logoSize: 'small' | 'medium' | 'large';\n logoPosition: 'left' | 'right' | 'center';\n showProgressBar: boolean;\n showProgressUnit: boolean;\n progressUnit: 'percentage' | 'fraction';\n}\n\n\nexport interface FormData {\n id: string;\n name: string;\n description: string;\n type: string;\n identity: string;\n status: string;\n createdAt: Date;\n updatedAt: Date;\n externalId?: string | null;\n companyId: string;\n productId: string;\n userId: string;\n style: FormStyle\n}\n\nexport enum POPUPSESSIONSTATUS {\n NONE = \"NONE\",\n SHOWED = \"SHOWED\",\n PARTIAL = \"PARTIAL\",\n COMPLETED = \"COMPLETED\",\n DEPRECATED = \"DEPRECATED\",\n}\n","import type { TriggerConfig } from '../types';\nimport type { DeepdotsPopups } from '../core/deepdots-popups';\n\nexport function setupTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n switch (trigger.type) {\n case 'time':\n setupTimeTrigger(popups, trigger);\n break;\n case 'scroll':\n setupScrollTrigger(popups, trigger);\n break;\n case 'exit':\n setupExitTrigger(popups, trigger);\n break;\n case 'event':\n setupEventTrigger(popups, trigger);\n break;\n case 'click':\n setupClickTrigger(popups, trigger);\n break;\n }\n}\n\nfunction setupTimeTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n const delay = trigger.value || 5000;\n setTimeout(() => {\n popups.triggerSurvey(trigger.surveyId, trigger.popupId);\n }, delay);\n popups.debug(`Time trigger set for ${delay}ms`);\n}\n\nfunction setupScrollTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n const threshold = trigger.value || 50;\n const handler = () => {\n const scrollPercentage = (window.scrollY / (document.documentElement.scrollHeight - window.innerHeight)) * 100;\n if (scrollPercentage >= threshold) {\n popups.triggerSurvey(trigger.surveyId, trigger.popupId);\n window.removeEventListener('scroll', handler);\n }\n };\n window.addEventListener('scroll', handler);\n popups.debug(`Scroll trigger set for ${threshold}%`);\n}\n\nfunction setupExitTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n if (typeof window === 'undefined') return;\n\n const delaySeconds = parseExitDelaySeconds(trigger.value);\n const historyRef = window.history;\n const originalPushState = historyRef.pushState.bind(historyRef);\n const originalReplaceState = historyRef.replaceState.bind(historyRef);\n\n let lastUrl = normalizeUrl(window.location.href);\n let lastQueuedKey = '';\n let lastQueuedAt = 0;\n\n const queueLeave = (fromRaw: string, toRaw: string) => {\n const from = normalizeUrl(fromRaw);\n const to = normalizeUrl(toRaw);\n if (!from || !to || from === to) return;\n\n const key = `${from}=>${to}`;\n const now = Date.now();\n if (key === lastQueuedKey && now - lastQueuedAt < 150) return;\n lastQueuedKey = key;\n lastQueuedAt = now;\n popups.queueExitPopup(trigger.surveyId, delaySeconds, from, trigger.popupId);\n };\n\n const handleNavigation = (to: string) => {\n const from = lastUrl;\n queueLeave(from, to);\n lastUrl = normalizeUrl(to);\n };\n\n const handleDocumentClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return;\n if (event.button !== 0) return;\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\n const anchor = (event.target as Element | null)?.closest?.('a');\n if (!(anchor instanceof HTMLAnchorElement)) return;\n\n const href = anchor.getAttribute('href');\n if (!href || href.startsWith('javascript:') || href.startsWith('mailto:') || href.startsWith('tel:')) {\n return;\n }\n const target = anchor.getAttribute('target');\n if (target && target !== '_self') return;\n\n let destination: URL;\n try {\n destination = new URL(href, window.location.href);\n } catch {\n return;\n }\n\n if (destination.origin !== window.location.origin) return;\n queueLeave(window.location.href, destination.href);\n };\n\n const handleHashChange = (event: HashChangeEvent) => {\n const to = event.newURL || window.location.href;\n const from = event.oldURL || lastUrl;\n queueLeave(from, to);\n lastUrl = normalizeUrl(to);\n };\n\n const handlePopState = () => {\n handleNavigation(window.location.href);\n };\n\n historyRef.pushState = function (data: any, unused: string, url?: string | URL | null) {\n const from = window.location.href;\n const result = originalPushState(data, unused, url as any);\n queueLeave(from, window.location.href);\n lastUrl = normalizeUrl(window.location.href);\n return result;\n };\n\n historyRef.replaceState = function (data: any, unused: string, url?: string | URL | null) {\n const from = window.location.href;\n const result = originalReplaceState(data, unused, url as any);\n queueLeave(from, window.location.href);\n lastUrl = normalizeUrl(window.location.href);\n return result;\n };\n\n document.addEventListener('click', handleDocumentClick, true);\n window.addEventListener('hashchange', handleHashChange);\n window.addEventListener('popstate', handlePopState);\n popups.debug('Exit trigger set (deferred to next route)', {\n surveyId: trigger.surveyId,\n delaySeconds,\n });\n}\n\nfunction setupEventTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n // Event triggers are manually fired by host application using popups.triggerEvent(name).\n popups.debug('Event trigger registered', {\n popupId: trigger.popupId,\n surveyId: trigger.surveyId,\n eventName: String(trigger.value || ''),\n });\n}\n\nfunction parseExitDelaySeconds(value?: number | string): number {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return Math.max(0, value);\n }\n if (typeof value === 'string' && value.trim()) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) return Math.max(0, parsed);\n }\n return 0;\n}\n\nfunction normalizeUrl(value: string): string {\n if (!value) return '';\n const withoutIndex = value.replace(/\\/index\\.html(?=($|[?#]))/i, '');\n return withoutIndex.length > 1 && withoutIndex.endsWith('/') ? withoutIndex.slice(0, -1) : withoutIndex;\n}\n\nfunction setupClickTrigger(popups: DeepdotsPopups, trigger: TriggerConfig): void {\n const targetId = typeof trigger.value === 'string' ? trigger.value : '';\n if (!targetId) {\n popups.debug('Click trigger missing element id', trigger);\n return;\n }\n\n const attach = () => {\n const el = document.getElementById(targetId);\n if (!el) {\n popups.debug('Click trigger target not found', targetId);\n return false;\n }\n const handler = (e: MouseEvent) => {\n if (e.defaultPrevented) return;\n popups.triggerSurvey(trigger.surveyId, trigger.popupId);\n el.removeEventListener('click', handler);\n };\n el.addEventListener('click', handler);\n popups.debug(`Click trigger set for #${targetId}`);\n return true;\n };\n\n if (typeof document === 'undefined') return;\n if (attach()) return;\n window.addEventListener('DOMContentLoaded', () => attach(), { once: true });\n}\n","import {DeepdotsConfig, DeepdotsInitParams} from '../types';\n\n/** Variables específicas por entorno derivadas de nodeEnv */\nexport interface EnvironmentVariables {\n apiBaseUrl: string;\n}\n\nconst ENVIRONMENT_MAP: Record<\"development\" | \"production\", EnvironmentVariables> = {\n development: {\n apiBaseUrl: 'https://api-dev.deepdots.com',\n },\n production: {\n apiBaseUrl: 'https://api.deepdots.com',\n },\n};\n\n/** Resuelve las variables para el entorno indicado */\nexport function resolveEnvironment(nodeEnv: DeepdotsInitParams['nodeEnv']): EnvironmentVariables {\n return ENVIRONMENT_MAP[nodeEnv || 'production'];\n}\n\n","import type { DeepdotsEventType, PopupActions, PopupStyle } from '../types';\nimport type { PopupRenderer } from './renderer';\nimport { buildSurveyIdentity } from '../tracking/tracking-manager';\nimport { buildSurveyHtml } from '../ui/surveyHtml';\nimport { sdkWarn } from '../util/logger';\n\ntype EmitFn = (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void;\n\n/** Payload que recibe el host para montar el WebView del survey. */\nexport interface ReactNativeSurveyPayload {\n surveyId: string;\n productId: string;\n /** HTML autocontenido para `<WebView source={{ html }}>`. */\n html: string;\n}\n\nexport interface ReactNativeRendererOptions {\n /** Se llama al mostrar un popup: monta el WebView con `payload.html`. */\n onShow?: (payload: ReactNativeSurveyPayload) => void;\n /** Se llama al cerrar el popup: desmonta el WebView. */\n onHide?: () => void;\n}\n\n/**\n * Renderer de React Native: el SDK no puede pintar componentes RN, así que entrega el\n * HTML del survey al host (que lo monta en `react-native-webview`) y traduce los\n * mensajes del WebView a eventos de popup del SDK (→ `POST /sdk/popups`, Messaging #18–22).\n *\n * Uso:\n * ```tsx\n * const renderer = new ReactNativePopupRenderer({\n * onShow: (p) => setSurvey({ ...p, visible: true }),\n * onHide: () => setSurvey((s) => ({ ...s, visible: false })),\n * });\n * sdk.setRenderer(renderer);\n * // …\n * <WebView source={{ html: survey.html }}\n * onMessage={(e) => renderer.handleMessage(e.nativeEvent.data)} />\n * ```\n */\nexport class ReactNativePopupRenderer implements PopupRenderer {\n private emitFn: EmitFn | null = null;\n private onCloseFn: (() => void) | null = null;\n private currentSurveyId: string | null = null;\n private partialEmitted = false;\n\n constructor(private options: ReactNativeRendererOptions = {}) {}\n\n init(): void {\n /* nada que preparar */\n }\n\n show(\n surveyId: string,\n productId: string,\n _actions: PopupActions | undefined,\n emit: EmitFn,\n onClose: () => void,\n env: string = 'production',\n userId?: string,\n style?: PopupStyle,\n sessionId?: string,\n miniService?: string,\n analyticsFeedbackSessionId?: string,\n ): void {\n this.emitFn = emit;\n this.onCloseFn = onClose;\n this.currentSurveyId = surveyId;\n this.partialEmitted = false;\n\n const { profile, metadata } = buildSurveyIdentity(userId ?? null, sessionId ?? null, miniService ?? null, analyticsFeedbackSessionId ?? null);\n const html = buildSurveyHtml({ surveyId, productId, env, profile, metadata, font: style?.font });\n if (this.options.onShow) {\n this.options.onShow({ surveyId, productId, html });\n } else {\n sdkWarn(\n '[Deepdots] ReactNativePopupRenderer sin onShow: pasa { onShow } a new ReactNativePopupRenderer({...}) para montar el WebView del survey.',\n );\n }\n }\n\n hide(): void {\n this.options.onHide?.();\n this.currentSurveyId = null;\n }\n\n /**\n * El host la conecta al `onMessage` del WebView. Traduce los mensajes del survey a\n * eventos del SDK: primera interacción → `popup_clicked` (PARTIAL), completado →\n * `survey_completed` (COMPLETED) y cierra el popup.\n */\n handleMessage(raw: string): void {\n const surveyId = this.currentSurveyId;\n if (!surveyId || !this.emitFn) return;\n\n let name: string | undefined;\n try {\n name = (JSON.parse(raw) as { name?: string }).name;\n } catch {\n name = raw; // mensajes simples (\"error:load\")\n }\n\n switch (name) {\n case 'loaded':\n case 'before_submit':\n case 'after_submit':\n case 'back':\n if (!this.partialEmitted) {\n this.partialEmitted = true;\n this.emitFn('popup_clicked', surveyId, { action: 'partial' });\n }\n break;\n case 'survey_completed':\n this.emitFn('survey_completed', surveyId);\n this.onCloseFn?.(); // el core enruta a hidePopup() → renderer.hide() → onHide\n break;\n case 'popup_close':\n this.onCloseFn?.();\n break;\n default:\n break;\n }\n }\n}\n\n/** Detección simple de entorno React Native. */\nexport function isReactNativeEnv(): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return typeof navigator !== 'undefined' && (navigator as any).product === 'ReactNative';\n}\n\n/** Factoría usada por `createDefaultRenderer` cuando se detecta RN (el host debería pasar onShow). */\nexport function createReactNativeRenderer(): PopupRenderer {\n return new ReactNativePopupRenderer();\n}\n","import type { IdentityAnswer } from '../tracking/tracking-manager';\nimport { buildFontFaceCss, buildFontFamilyValue } from './font';\nimport type { PopupFont } from '../types';\n\n/**\n * Construye un HTML autocontenido que renderiza el survey de `@magicfeedback/native`\n * dentro de un WebView (React Native). Carga el bundle desde CDN, crea el form con la\n * identidad inyectada (`profile`/`metadata`) y reenvía los eventos del survey al host\n * vía el puente de react-native-webview: `window.ReactNativeWebView.postMessage`.\n *\n * Mensajes emitidos (JSON `{name, payload}`): `loaded`, `before_submit`, `after_submit`,\n * `survey_completed`, `back`, `popup_close`.\n */\nexport interface BuildSurveyHtmlOptions {\n surveyId: string;\n productId: string;\n env?: string; // 'production' | 'development'\n profile?: IdentityAnswer[];\n metadata?: IdentityAnswer[];\n version?: string; // versión de @magicfeedback/native\n font?: PopupFont; // fuente personalizada (family + url opcional)\n}\n\nexport function buildSurveyHtml(opts: BuildSurveyHtmlOptions): string {\n const env = opts.env === 'development' ? 'dev' : 'prod';\n const version = opts.version ?? '2.2.4';\n const cdn = `https://cdn.jsdelivr.net/npm/@magicfeedback/native@${version}/dist/magicfeedback-sdk.browser.js`;\n const sid = JSON.stringify(opts.surveyId);\n const pid = JSON.stringify(opts.productId);\n const profileJson = JSON.stringify(opts.profile ?? []);\n const metaJson = JSON.stringify(opts.metadata ?? []);\n const fontFaceCss = opts.font ? buildFontFaceCss(opts.font.family, opts.font.url) : '';\n const fontFamilyValue = opts.font ? buildFontFamilyValue(opts.font.family) : '-apple-system,system-ui,sans-serif';\n\n return `<!DOCTYPE html><html><head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\n<meta name=\"color-scheme\" content=\"light\"/>\n<style>${fontFaceCss}html,body{margin:0;padding:0;background:transparent;font-family:${fontFamilyValue}}#mf{width:100%;box-sizing:border-box}#mf *{max-width:100%;box-sizing:border-box}</style>\n</head><body>\n<div id=\"mf\"></div>\n<script>\n(function(){\n function emit(s){ try{ if(window.ReactNativeWebView){ window.ReactNativeWebView.postMessage(s); } }catch(e){} }\n function emitJSON(n,p){ try{ emit(JSON.stringify({name:n,payload:p||{}})); }catch(e){} }\n window.DeepdotsClose = function(){ emitJSON('popup_close'); };\n var initialized=false;\n function initMF(){\n if(initialized || !window.magicfeedback) return initialized;\n initialized=true;\n try{\n window.magicfeedback.init({ debug:false, env:'${env}' });\n var form = window.magicfeedback.form(${sid}, ${pid}, ${profileJson}, ${metaJson});\n window.DeepdotsForm = form;\n form.generate('mf', {\n addButton:false,\n getMetaData:true,\n onLoadedEvent:function(){ emitJSON('loaded'); },\n beforeSubmitEvent:function(){ emitJSON('before_submit'); },\n afterSubmitEvent:function(p){\n try{ if(p && p.completed){ emitJSON('survey_completed', p); } else { emitJSON('after_submit', p); } }\n catch(e){ emitJSON('after_submit'); }\n },\n onBackEvent:function(p){ emitJSON('back', p); }\n }).catch(function(e){ emit('error:init'); });\n }catch(e){ emit('error:exception'); }\n return true;\n }\n var s=document.createElement('script'); s.src=${JSON.stringify(cdn)}; s.async=true;\n s.onload=function(){ initMF(); };\n s.onerror=function(){ emit('error:load'); };\n document.head.appendChild(s);\n var tries=0, t=setInterval(function(){ if(initMF()||++tries>40){ clearInterval(t); } },150);\n})();\n</script>\n</body></html>`;\n}\n","import {DeepdotsEventType, PopupActions, PopupStyle} from '../types';\nimport { isReactNativeEnv, createReactNativeRenderer } from './react-native-renderer';\n// renderPopup (DOM + @magicfeedback/native) se carga PEREZOSAMENTE solo al mostrar\n// un popup en navegador, para que importar el SDK sea seguro en React Native/SSR.\n\nexport interface PopupRenderer {\n /** Preparar recursos si aplica */\n init?(): void;\n /** Mostrar popup */\n show(\n surveyId: string,\n productId: string,\n actions: PopupActions | undefined,\n emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void,\n onClose: () => void,\n env?: string,\n userId?: string,\n style?: PopupStyle,\n sessionId?: string,\n miniService?: string,\n analyticsFeedbackSessionId?: string,\n ): void;\n /** Ocultar popup */\n hide(): void;\n}\n\n/** Renderer que no hace nada (SSR / entornos sin DOM) */\nexport class NoopPopupRenderer implements PopupRenderer {\n show(): void { /* no-op */ }\n hide(): void { /* no-op */ }\n}\n\n/** Renderer para navegadores usando la implementación actual basada en renderPopup */\nexport class BrowserPopupRenderer implements PopupRenderer {\n private container: HTMLElement | null = null;\n private visible = false;\n\n init(): void {\n if (typeof document === 'undefined') return;\n if (!this.container) {\n this.container = document.createElement('div');\n this.container.id = 'deepdots-popup-container';\n this.container.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: none;\n z-index: 999999;\n background: rgba(0, 0, 0, 0.5);\n justify-content: center;\n align-items: center;\n `;\n }\n if (!document.body.contains(this.container)) {\n document.body.appendChild(this.container);\n }\n }\n\n show(\n surveyId: string,\n productId: string,\n actions: PopupActions | undefined,\n emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void,\n onClose: () => void,\n env: string = 'production',\n userId?: string,\n style?: PopupStyle,\n sessionId?: string,\n miniService?: string,\n analyticsFeedbackSessionId?: string,\n ): void {\n if (this.visible) return;\n if (!this.container || !document.body.contains(this.container)) this.init();\n if (!this.container) return; // aún sin DOM\n this.visible = true;\n const container = this.container;\n void import('../ui/renderPopup').then(({ renderPopup }) => {\n renderPopup(container, surveyId, productId, actions, emit, onClose, env, userId, style, sessionId, miniService, analyticsFeedbackSessionId);\n });\n }\n\n hide(): void {\n this.visible = false;\n if (this.container) {\n this.container.style.display = 'none';\n this.container.innerHTML = '';\n }\n }\n}\n\n/** Factoría para obtener renderer por defecto */\nexport function createDefaultRenderer(): PopupRenderer {\n if (typeof document === 'undefined') {\n // Entorno sin DOM: probar RN primero\n if (isReactNativeEnv()) return createReactNativeRenderer();\n return new NoopPopupRenderer();\n }\n // Si estamos en React Native y hay WebView con document emulado, aún queremos RN renderer\n if (isReactNativeEnv()) return createReactNativeRenderer();\n return new BrowserPopupRenderer();\n}\n","import {\n DeepdotsConfig,\n TriggerConfig,\n DeepdotsEvent,\n DeepdotsEventType,\n EventListener,\n DeepdotsInitParams,\n DeepdotsLogger,\n PopupDefinition,\n PopupTriggerCondition,\n PopupActions,\n PopupTrigger,\n PopupTriggerConditionStatus,\n POPUP_TRIGGER_CONDITION_STATUSES, POPUPSESSIONSTATUS,\n PopupStyle,\n} from '../types';\n// renderPopup se carga de forma PEREZOSA (dynamic import) para no arrastrar\n// `@magicfeedback/native` (browser) ni el CSS al importar el SDK en entornos sin DOM (React Native).\nimport { setupTrigger } from '../triggers';\nimport { resolveEnvironment } from '../config/env';\nimport { PopupRenderer, createDefaultRenderer } from '../platform/renderer';\nimport { TrackingManager, createDefaultStorage } from '../tracking/tracking-manager';\nimport { AnalyticsManager, createDryRunSink, type AnalyticsEnvelope } from '../analytics/analytics-manager';\nimport { createFeedbackSink } from '../analytics/feedback-payload';\nimport { NavigationObserver } from '../tracking/navigation-observer';\nimport { collectDeviceInfo } from '../analytics/device-info';\nimport { readCachedGeo, writeCachedGeo, fetchGeo } from '../analytics/geo-info';\nimport { resolveLanguage } from '../analytics/language';\nimport { EngagementTracker } from '../analytics/engagement-tracker';\nimport { ContactManager, type ContactAttributes } from '../contact/contact-manager';\nimport { CrashReporter, crashRecordToParams, type ReportErrorOptions, type ReactNativeErrorUtils } from '../analytics/crash-reporter';\nimport { setLogger } from '../util/logger';\nimport { buildMessageParams, type MessageStage, type TrackMessageOptions } from '../analytics/messaging';\n\nconst EXIT_QUEUE_STORAGE_KEY = '__deepdots_exit_popup_queue__';\nconst DAY_IN_MS = 24 * 60 * 60 * 1000;\nconst ANALYTICS_MAX_BATCH_SIZE = 20;\nconst ANALYTICS_FLUSH_INTERVAL_MS = 30_000;\n/** Namespace reservado para los eventos que emite el propio SDK (page_view, message, mini_service…). */\nconst RESERVED_EVENT_PREFIX = 'deepdots_';\n/** Prefijo que se antepone a los eventos custom del host para poder identificarlos frente a los reservados. */\nconst CUSTOM_EVENT_PREFIX = 'deepdots_event_';\n\ninterface DeferredExitPopup {\n id: string;\n surveyId: string;\n dueAt: number;\n sourceUrl: string;\n}\n\ninterface LegacyPopupTriggerCondition {\n answered?: boolean;\n cooldownDays?: number;\n}\n\ninterface PopupProgressState {\n status: PopupTriggerConditionStatus;\n timestamp: number;\n}\n\ntype NormalizedPopupDefinition = PopupDefinition & {\n legacyConditions?: LegacyPopupTriggerCondition[];\n};\n\n/**\n * Main class for managing survey popups\n */\nexport class DeepdotsPopups {\n private config: DeepdotsConfig | null = null;\n private listeners: Map<DeepdotsEventType, Set<EventListener>> = new Map();\n private triggers: TriggerConfig[] = [];\n private initialized = false;\n private renderer: PopupRenderer = createDefaultRenderer();\n /** Logger para el output de debug. Default `console`; el host puede inyectar el suyo en init(). */\n private logger: DeepdotsLogger = console;\n private popupContainer: HTMLElement | null = null; // deprecated: mantenido para compatibilidad interna\n private popupDefinitions: NormalizedPopupDefinition[] = [];\n private popupsLoaded = false;\n private pendingAutoLaunch = false;\n\n private answeredSurveys: Set<string> = new Set();\n private surveyProgress: Map<string, PopupProgressState> = new Map();\n private lastShown: Map<string, number> = new Map(); // popupId -> timestamp mostrado\n private surveyToPopupId: Map<string, string> = new Map(); // surveyId -> popupId\n private deferredExitTimers: number[] = [];\n\n private baseUrl: string = '';\n private env: 'production' | 'development' = 'production';\n\n /** Identidad + sesión (Fase 1 tracking). Null hasta init(). */\n private tracking: TrackingManager | null = null;\n /** Capa de analytics (canal separado del feedback). Null hasta init(). */\n private analytics: AnalyticsManager | null = null;\n /** feedbackSessionId cacheado del canal de analytics (devuelto por POST /sdk/feedback). */\n private analyticsFeedbackSessionId: string | undefined = undefined;\n /** Timer del flush periódico de analytics (cada ANALYTICS_FLUSH_INTERVAL_MS). */\n private analyticsFlushTimer: ReturnType<typeof setInterval> | undefined = undefined;\n /** Crash & error reporting (#14–17). Null hasta init(). */\n private crashReporter: CrashReporter | null = null;\n /** Observador de navegación (Fase 2): emite page_view por el canal de analytics. */\n private navObserver: NavigationObserver | null = null;\n /** Tiempo activo (engagement time, #8). */\n private engagement: EngagementTracker | null = null;\n /** Atributos internos del usuario identificado → POST /sdk/popups/contact. Null si no hay userId. */\n private contact: ContactManager | null = null;\n /** Marca si ya se inició la navegación manual (setScreen) — para RN sin History API. */\n private navStarted = false;\n /**\n * Idioma resuelto en init() (explícito > navigator.language > Intl). Única fuente de\n * verdad para el context de analytics Y para la segmentación por idioma de los popups.\n */\n private language: string | undefined = undefined;\n\n /** Initialize the SDK with configuration */\n init(config: DeepdotsInitParams): void {\n this.logger = config.logger ?? console;\n setLogger(this.logger); // los módulos sin `this` (renderPopup, renderers) enrutan por aquí\n if (this.initialized) {\n this.log('SDK already initialized');\n return;\n }\n\n const env = resolveEnvironment(config.nodeEnv);\n\n this.baseUrl = env.apiBaseUrl;\n this.env = config.nodeEnv || 'production';\n\n this.config = {\n apiKey: config.apiKey || undefined,\n debug: config.debug || false,\n userId: config.userId || undefined,\n } as DeepdotsConfig;\n\n // user_id lo gestiona el SDK (persistente); el session_id lo provee el backend\n // (respuesta de POST /sdk/popups) y se cachea — el SDK no genera ni expira sesiones.\n const storage = config.storage ?? createDefaultStorage();\n this.tracking = new TrackingManager({\n storage,\n clientUserId: this.config.userId,\n enabled: config.trackingEnabled ?? true,\n });\n\n // Contact: info interna del usuario que solo conoce el host (segmentación/targeting).\n // Solo trackeamos usuarios IDENTIFICADOS → se crea únicamente si hay userId del init.\n if (this.config.userId) {\n const userId = this.config.userId;\n const publicKey = this.config.apiKey ?? '';\n this.contact = new ContactManager({\n storage,\n publicKey,\n userId,\n post: (body) => this.postContact(body),\n });\n // Atributos de contact pasados en init: envío fire-and-forget (solo si cambiaron).\n if (config.contactAttributes) {\n void this.setContactAttributes(config.contactAttributes);\n }\n }\n this.log('tracking · user_id:', this.tracking.getUserId(), '· new_user:', this.tracking.isNewUser(), '· enabled:', this.tracking.isTrackingEnabled());\n\n // Analytics: se envía como Feedback a la integración (`POST /sdk/feedback`) si se\n // pasan claves en init.analytics; si no, queda en dry-run (solo console.log).\n const analyticsSink = config.analytics\n ? createFeedbackSink({\n baseUrl: this.baseUrl,\n keys: config.analytics,\n log: (...a) => this.log(...a),\n // sendBeacon: único transporte que sobrevive al cierre de la página.\n sendBeaconImpl:\n typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function'\n ? (url, body) => navigator.sendBeacon(url, body)\n : undefined,\n onSessionId: (id) => { this.analyticsFeedbackSessionId = id; },\n })\n : createDryRunSink((...a) => this.logger.log(...a));\n const device = config.device ?? collectDeviceInfo(config.appVersion);\n this.language = resolveLanguage({\n explicit: config.language,\n navigator: typeof navigator !== 'undefined' ? navigator : undefined,\n intl: typeof Intl !== 'undefined' ? Intl : undefined,\n });\n this.analytics = new AnalyticsManager({\n sink: analyticsSink,\n publicKey: config.analytics?.publicKey ?? this.config.apiKey,\n language: this.language,\n platform: config.platform ?? 'web',\n device,\n maxBatchSize: ANALYTICS_MAX_BATCH_SIZE,\n onFlushNeeded: () => this.flushAnalytics(),\n });\n // Crash & error reporting (#14–17): captura errores no manejados (a disco, replay\n // en el siguiente arranque) y expone reportError() para el host (emite ya).\n this.crashReporter = new CrashReporter({\n storage,\n emit: (params) => this.track('deepdots_app_crash', params),\n device: () => ({ appVersion: device.app_version, osVersion: device.os_version, deviceModel: device.device_model }),\n sessionId: () => this.tracking?.getSessionId() ?? null,\n now: () => Date.now(),\n enabled: () => this.tracking?.isTrackingEnabled() ?? false,\n });\n if (this.tracking?.isTrackingEnabled()) {\n this.crashReporter.install();\n }\n // Geolocalización por IP: aplica el cache persistente de inmediato (sin gap de timing)\n // y refresca en background (cadena de proveedores + timeout), recacheando el resultado.\n const cachedGeo = readCachedGeo(storage, Date.now());\n if (cachedGeo) this.analytics.updateDevice(cachedGeo);\n fetchGeo()\n .then((geo) => {\n if (geo) {\n this.analytics?.updateDevice(geo);\n writeCachedGeo(storage, geo, Date.now());\n }\n })\n .catch(() => {});\n // Fase 2: navegación → eventos page_view por el canal de analytics.\n this.navObserver = new NavigationObserver();\n this.navObserver.onVisit((v) => this.track('deepdots_page_view', { screen: v.screen, duration_seconds: v.durationSeconds }));\n this.navObserver.install();\n // Engagement time (#8): cuenta tiempo activo en primer plano.\n this.engagement = new EngagementTracker();\n this.engagement.resume();\n this.setupAnalyticsFlush();\n // Marca de inicio de sesión (base para Crash-Free Users #14).\n this.track('deepdots_session_start', {});\n // Drena SIEMPRE la cola (descarta los pendientes si tracking está off, spec §7);\n // solo reenvía como evento cuando el tracking está activo.\n const pendingCrashes = this.crashReporter.drainPendingCrashes();\n if (this.tracking?.isTrackingEnabled()) {\n for (const rec of pendingCrashes) {\n this.track('deepdots_app_crash', crashRecordToParams(rec));\n }\n }\n\n this.initialized = true;\n this.log('SDK initialized', this.config);\n if (this.renderer.init) this.renderer.init();\n this.setupPopupContainer();\n\n // Los popups SIEMPRE se reciben de la API (no se definen en init).\n this.fetchPopupsFromServer().then((defs) => {\n this.popupDefinitions = this.validatePopupDefinitions(defs);\n this.popupsLoaded = true;\n this.log('Popups loaded from API', this.popupDefinitions);\n this.configureTriggersFromDefinitions();\n this.processDeferredExitQueue();\n if (this.pendingAutoLaunch) {\n this.startTriggers();\n }\n });\n }\n\n /** User id actual (generado por el SDK o provisto por el cliente). Null si tracking off. */\n getUserId(): string | null {\n return this.tracking?.getUserId() ?? null;\n }\n\n /** Session id de navegación actual. Null si tracking off. */\n getSessionId(): string | null {\n return this.tracking?.getSessionId() ?? null;\n }\n\n /** Activa/desactiva el tracking (identidad + sesión + analytics). Kill-switch del contrato §7bis. */\n setTrackingEnabled(enabled: boolean): void {\n this.tracking?.setTrackingEnabled(enabled);\n this.log('tracking · setTrackingEnabled:', enabled, '· session_id:', this.tracking?.getSessionId() ?? null);\n }\n\n // ───────── Analytics (canal separado del feedback, vinculado por user_id) ─────────\n\n /** Registra un evento de analítica (modelo GA: nombre + params). No-op si tracking off. */\n track(name: string, params?: Record<string, unknown>): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n // Los eventos del SDK ya van en el namespace `deepdots_`; los custom del host se\n // prefijan con `deepdots_event_` para poder distinguirlos en analítica.\n const eventName = name.startsWith(RESERVED_EVENT_PREFIX) ? name : `${CUSTOM_EVENT_PREFIX}${name}`;\n this.analytics?.track(eventName, params);\n this.log('analytics · track:', eventName, params ?? {});\n }\n\n /** User attributes para breakdowns (registration_status, pass_type, sector, pass_status…). */\n setUserAttributes(attributes: Record<string, string | number | boolean>): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.analytics?.setUserAttributes(attributes);\n }\n\n /**\n * Registra/actualiza una métrica (valor medible) → `feedback.metrics` del body.\n * Persistente y sobrescribe por key. No-op si tracking off.\n */\n setMetric(key: string, value: string | number | boolean): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.analytics?.setMetric(key, value);\n this.log('analytics · setMetric:', key, value);\n }\n\n /** Reporta un error del host (manejado o no) → evento `deepdots_app_crash`. No-op si tracking off. */\n reportError(error: unknown, options?: ReportErrorOptions): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.crashReporter?.reportError(error, options);\n }\n\n /** Engancha `global.ErrorUtils` de RN para capturar errores JS no manejados. No-op si tracking off. */\n installReactNativeCrashHandler(errorUtils: ReactNativeErrorUtils): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.crashReporter?.installReactNative(errorUtils);\n }\n\n /**\n * Info interna del usuario que solo conoce el host (idioma, edad, plan…), persistida en el\n * Contact del backend para segmentación/targeting de popups. Identificada por el `userId` del\n * init. Solo envía si los atributos cambiaron (diff en storage). No-op si tracking off o sin userId.\n * @returns `true` si se envió al backend, `false` si no hubo cambios o está deshabilitado.\n */\n async setContactAttributes(attributes: ContactAttributes): Promise<boolean> {\n if (!this.tracking?.isTrackingEnabled()) return false;\n if (!this.contact) return false;\n return this.contact.setAttributes(attributes);\n }\n\n /** Marca el inicio de un mini-service; etiqueta los eventos siguientes. No-op si tracking off. */\n enterMiniService(name: string, entryPointType?: string): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.analytics?.enterMiniService(name, entryPointType);\n this.log('analytics · enterMiniService:', name, entryPointType ?? '');\n }\n\n /** Cierra el mini-service `name` (emite `mini_service_exit` con duración, #27). No-op si tracking off o si ese no está activo. */\n exitMiniService(name: string): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.analytics?.exitMiniService(name);\n this.log('analytics · exitMiniService:', name);\n }\n\n /** Findability (#31/#35): registra una búsqueda. `has_results` se deriva de `resultsCount`. */\n trackSearch(query: string, resultsCount: number, params?: Record<string, unknown>): void {\n this.track('deepdots_search', { query, results_count: resultsCount, has_results: resultsCount > 0, ...(params ?? {}) });\n }\n\n /** Findability friction (#34/#35): señal de fricción con su `friction_topic`. */\n trackFindabilityFriction(frictionTopic: string, params?: Record<string, unknown>): void {\n this.track('deepdots_findability_friction', { friction_topic: frictionTopic, ...(params ?? {}) });\n }\n\n /** Funnel: un paso del embudo, correlacionado por `taskId`. El backend reconstruye conversión/drop-off/tiempo. */\n trackFunnelStep(funnel: string, step: string, taskId: string, params?: Record<string, unknown>): void {\n this.track('deepdots_funnel_step', { funnel, step, task_id: taskId, ...(params ?? {}) });\n }\n\n /** Messaging (#18–22): registra una etapa del funnel de una notificación (push/in-app). No-op si tracking off. */\n trackMessage(stage: MessageStage, options: TrackMessageOptions): void {\n this.track('deepdots_message', buildMessageParams(stage, options));\n }\n\n /**\n * Navegación MANUAL (entornos sin History API, p. ej. React Native con React Navigation).\n * El host la llama en cada cambio de pantalla; emite `page_view` al salir de la anterior.\n */\n setScreen(name: string): void {\n if (!this.navObserver) return;\n if (!this.navStarted) {\n this.navObserver.begin(name);\n this.navStarted = true;\n } else {\n this.navObserver.visit(name);\n }\n }\n\n /** App a foreground (RN: AppState 'active'): reanuda el engagement time. */\n onForeground(): void {\n this.engagement?.resume();\n }\n\n /**\n * App a background (RN: AppState 'background'): cierra pantalla actual (page_view),\n * mini-service (mini_service_exit), emite engagement y hace flush del lote.\n */\n onBackground(): void {\n this.navObserver?.stop();\n this.navStarted = false;\n if (this.tracking?.isTrackingEnabled()) this.analytics?.exitAllMiniServices();\n this.flushEngagement();\n this.engagement?.pause();\n this.flushAnalytics();\n }\n\n /** Payload que se ENVIARÍA al endpoint de analytics (no envía ni vacía el buffer). */\n previewAnalytics(): AnalyticsEnvelope {\n return (\n this.analytics?.buildPayload(this.analyticsIdentity()) ?? {\n userId: null,\n sessionId: null,\n context: { platform: 'web', attributes: {} },\n events: [],\n }\n );\n }\n\n /**\n * Envía el lote acumulado de analytics y vacía el buffer.\n * `final: true` (cierre de página/app) cambia el transporte a `sendBeacon`, que sobrevive\n * al unload; un lote que falle por red o 5xx se re-encola para el siguiente flush.\n */\n flushAnalytics(options?: { final?: boolean }): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n this.analytics?.flush(this.analyticsIdentity(), options);\n }\n\n /** Emite un evento `user_engagement` con el tiempo activo acumulado (#8). */\n private flushEngagement(): void {\n if (!this.tracking?.isTrackingEnabled()) return;\n const ms = this.engagement?.consume() ?? 0;\n if (ms > 0) this.track('deepdots_user_engagement', { engagement_time_msec: ms });\n }\n\n private analyticsIdentity() {\n return {\n userId: this.tracking?.getUserId() ?? null,\n sessionId: this.tracking?.getSessionId() ?? null,\n };\n }\n\n /** Flush automático al ocultar/cerrar la página (no perder el lote pendiente). */\n private setupAnalyticsFlush(): void {\n if (typeof document === 'undefined' || typeof window === 'undefined') return;\n // flush periódico mientras la app está en primer plano\n this.analyticsFlushTimer = setInterval(() => this.flushAnalytics(), ANALYTICS_FLUSH_INTERVAL_MS);\n // al cerrar la página: cerrar pantalla (page_view) + mini-service + engagement, y enviar el lote\n window.addEventListener('pagehide', () => {\n clearInterval(this.analyticsFlushTimer);\n this.navObserver?.stop();\n if (this.tracking?.isTrackingEnabled()) this.analytics?.exitAllMiniServices();\n this.flushEngagement();\n this.flushAnalytics({ final: true });\n });\n // al ocultar/mostrar la pestaña: pausar/reanudar engagement y enviar lo acumulado\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') {\n this.flushEngagement();\n this.engagement?.pause();\n this.flushAnalytics();\n } else if (document.visibilityState === 'visible') {\n this.engagement?.resume();\n }\n });\n }\n\n /** Enable auto-launch functionality with configured triggers */\n autoLaunch(): void {\n if (!this.initialized) {\n throw new Error('SDK not initialized. Call init() first.');\n }\n if (!this.popupsLoaded) {\n this.pendingAutoLaunch = true;\n this.log('Auto-launch deferred until popups are loaded');\n return;\n }\n this.startTriggers();\n }\n\n /** Inicia los triggers configurados */\n private startTriggers(): void {\n this.log('Auto-launch enabled');\n this.triggers.forEach((trigger) => setupTrigger(this, trigger));\n }\n\n /** Configure triggers for auto-launching popups (manual) */\n configureTriggers(triggers: TriggerConfig[]): void {\n if (!this.initialized) {\n throw new Error('SDK not initialized. Call init() first.');\n }\n this.triggers = triggers;\n this.log('Triggers configured', triggers);\n }\n\n /** Deriva triggers desde las definiciones de popup */\n private configureTriggersFromDefinitions(): void {\n const derived: TriggerConfig[] = [];\n this.debug('Validated popup definitions', this.popupDefinitions);\n\n this.popupDefinitions.forEach((def) => {\n def.triggers.forEach((trigger) => {\n const type = this.mapPopupTriggerType(trigger.type);\n if (!type) {\n this.debug('Unsupported trigger type', trigger.type);\n return;\n }\n const value = type === 'time' && typeof trigger.value === 'number'\n ? trigger.value * 1000\n : trigger.value;\n derived.push({ type, value, surveyId: def.surveyId, popupId: def.id });\n });\n });\n\n if (derived.length) {\n this.configureTriggers(derived);\n }\n }\n\n /** Lógica para evaluar condiciones antes de mostrar una encuesta */\n triggerSurvey(surveyId: string, popupId?: string): void {\n const def = this.findPopupDefinition(surveyId, popupId);\n if (!def) {\n this.debug('No popup definition for trigger', { surveyId, popupId });\n return;\n }\n if (!this.shouldShow(def)) {\n this.debug('Conditions prevented showing popup', def.id);\n return;\n }\n this.showDefinition(def);\n }\n\n /** Trigger popups configured with trigger.type = 'event' and matching trigger.value */\n public triggerEvent(eventName: string): void {\n if (!this.initialized) {\n throw new Error('SDK not initialized. Call init() first.');\n }\n const normalized = String(eventName || '').trim();\n if (!normalized) {\n this.debug('Ignoring empty event trigger name');\n return;\n }\n\n const candidates = this.popupDefinitions.filter((def) => {\n return def.triggers.some((trigger) => {\n const triggerValue = String(trigger.value ?? '').trim();\n return trigger.type === 'event' && triggerValue === normalized;\n });\n });\n\n if (!candidates.length) {\n this.debug('No event popup definitions found', { eventName: normalized });\n return;\n }\n\n const matched = candidates.find((def) => this.shouldShow(def));\n if (!matched) {\n this.debug('Event popup blocked by conditions/segments', { eventName: normalized });\n return;\n }\n\n this.showDefinition(matched);\n }\n\n private showDefinition(def: PopupDefinition): void {\n this.log('Showing popup (definition)', def);\n this.surveyToPopupId.set(def.surveyId, def.id);\n this.lastShown.set(def.id, Date.now());\n this.renderPopup(def.surveyId, def.productId, def.actions, def.style);\n this.emitEvent('popup_shown', def.surveyId, { popupId: def.id });\n }\n\n private shouldShow(def: NormalizedPopupDefinition, pathUrl?: string, skipPathCheck = false): boolean {\n if (!skipPathCheck && !this.matchesSegmentsPath(def, pathUrl)) {\n return false;\n }\n if (!this.matchesSegmentsLang(def)) {\n return false;\n }\n\n const cooldowns = def.cooldown || [];\n if (cooldowns.length && !cooldowns.every((cooldown) => this.evaluateCooldown(def, cooldown))) {\n return false;\n }\n\n const legacyConditions = def.legacyConditions || [];\n if (!legacyConditions.length) return true;\n return legacyConditions.every((condition) => this.evaluateLegacyCondition(def, condition));\n }\n\n private matchesSegmentsLang(def: PopupDefinition): boolean {\n const langs = def.segments?.lang;\n if (!langs || langs.length === 0) return true;\n\n // Mismo idioma que reporta el context de analytics: explícito > navigator.language\n // > Intl. ⚠️ NO leer `navigator.language` aquí: en React Native `navigator` existe\n // pero no tiene `language`, y `undefined.toLowerCase()` reventaba la evaluación\n // COMPLETA del trigger (no solo este popup).\n const currentLang = (this.language ?? '').toLowerCase();\n\n if (!currentLang) {\n this.debug('No language available for lang comparison', { popupId: def.id, langs });\n return true;\n }\n\n // Acepta si el idioma actual empieza con alguno de los configurados\n // ej: \"en-US\" coincide con segment \"en\". Ignora entradas no-string del backend.\n const matches = langs.some(\n (lang) => typeof lang === 'string' && currentLang.startsWith(lang.toLowerCase()),\n );\n if (!matches) {\n this.debug('Lang mismatch for popup', { popupId: def.id, langs, currentLang });\n }\n return matches;\n }\n\n private matchesSegmentsPath(def: PopupDefinition, pathUrl?: string): boolean {\n const paths = def.segments?.path;\n if (!paths || paths.length === 0) return true;\n if (typeof window === 'undefined' || !window.location) {\n this.debug('No window.location available for path comparison', { popupId: def.id, paths });\n return true;\n }\n\n const normalizedHref = this.normalizeUrl(pathUrl || window.location.href || '');\n const currentUrl = this.safeParseUrl(normalizedHref);\n const normalizedPath = this.normalizeUrl(currentUrl?.pathname || window.location.pathname || '');\n\n const matches = paths.some((rawCandidate) => {\n const candidate = this.normalizeUrl(rawCandidate);\n let match = false;\n if (candidate.startsWith('http://') || candidate.startsWith('https://')) {\n match = normalizedHref === candidate;\n } else if (candidate.startsWith('/')) {\n match = normalizedHref.includes(candidate);\n } else {\n match = normalizedPath === candidate;\n }\n this.debug('Path comparison', {\n popupId: def.id,\n candidate,\n currentPath: normalizedPath,\n currentHref: normalizedHref,\n match,\n });\n return match;\n });\n\n if (!matches) {\n this.debug('No path match for popup', { popupId: def.id, paths, currentPath: normalizedPath });\n }\n\n return matches;\n }\n\n private evaluateCooldown(def: PopupDefinition, condition: PopupTriggerCondition): boolean {\n switch (condition.answered) {\n case 'SHOWED':\n return this.hasCooldownElapsed(this.lastShown.get(def.id), condition.cooldownDays);\n case 'PARTIAL':\n case 'COMPLETED': {\n const progress = this.surveyProgress.get(def.surveyId);\n if (!progress || progress.status !== condition.answered) {\n return true;\n }\n return this.hasCooldownElapsed(progress.timestamp, condition.cooldownDays);\n }\n default:\n return true;\n }\n }\n\n private evaluateLegacyCondition(def: PopupDefinition, condition: LegacyPopupTriggerCondition): boolean {\n if (!condition.answered && this.answeredSurveys.has(def.surveyId)) {\n return false;\n }\n return this.hasCooldownElapsed(this.lastShown.get(def.id), condition.cooldownDays);\n }\n\n private hasCooldownElapsed(timestamp: number | undefined, cooldownDays?: number): boolean {\n if (!timestamp || !cooldownDays) {\n return true;\n }\n return Date.now() - timestamp >= cooldownDays * DAY_IN_MS;\n }\n\n /** Marcar encuesta como contestada externamente */\n public markSurveyAnswered(surveyId: string): void {\n this.answeredSurveys.add(surveyId);\n this.markSurveyProgress(surveyId, 'COMPLETED');\n }\n\n /** Queue an exit popup so it can render after navigation */\n public queueExitPopup(surveyId: string, delaySeconds: number, sourceUrl?: string, popupId?: string): void {\n const def = this.findPopupDefinition(surveyId, popupId);\n if (!def) {\n this.debug('No popup definition for exit trigger', { surveyId, popupId });\n return;\n }\n\n const originUrl = sourceUrl || (typeof window !== 'undefined' ? window.location.href : '');\n if (!originUrl) {\n this.debug('Exit popup skipped: missing source URL', { surveyId });\n return;\n }\n\n if (!this.shouldShow(def, originUrl)) {\n this.debug('Exit popup skipped by conditions/path', { popupId: def.id, sourceUrl: originUrl });\n return;\n }\n\n const safeDelayMs = Number.isFinite(delaySeconds) ? Math.max(0, delaySeconds * 1000) : 0;\n const deferred: DeferredExitPopup = {\n id: def.id,\n surveyId: def.surveyId,\n sourceUrl: this.normalizeUrl(originUrl),\n dueAt: Date.now() + safeDelayMs,\n };\n\n const queue = this.getDeferredExitQueue().filter((item) => !(item.id === deferred.id && item.sourceUrl === deferred.sourceUrl));\n queue.push(deferred);\n this.setDeferredExitQueue(queue);\n this.scheduleDeferredExitPopup(deferred);\n this.debug('Exit popup queued', deferred);\n }\n\n private processDeferredExitQueue(): void {\n const queue = this.getDeferredExitQueue();\n if (!queue.length) return;\n\n const pending: DeferredExitPopup[] = [];\n const now = Date.now();\n queue.forEach((item) => {\n const def = this.popupDefinitions.find((popup) => popup.id === item.id && popup.surveyId === item.surveyId);\n if (!def) {\n return;\n }\n if (item.dueAt <= now) {\n this.tryShowDeferredExitPopup(item);\n return;\n }\n pending.push(item);\n this.scheduleDeferredExitPopup(item);\n });\n this.setDeferredExitQueue(pending);\n }\n\n private scheduleDeferredExitPopup(item: DeferredExitPopup): void {\n if (typeof window === 'undefined') return;\n const delay = Math.max(0, item.dueAt - Date.now());\n const timer = window.setTimeout(() => this.tryShowDeferredExitPopup(item), delay);\n this.deferredExitTimers.push(timer);\n }\n\n private tryShowDeferredExitPopup(item: DeferredExitPopup): void {\n const def = this.popupDefinitions.find((popup) => popup.id === item.id && popup.surveyId === item.surveyId);\n if (!def) {\n this.removeDeferredExitPopup(item);\n return;\n }\n\n const currentUrl = typeof window !== 'undefined' ? this.normalizeUrl(window.location.href || '') : '';\n if (!currentUrl || currentUrl === this.normalizeUrl(item.sourceUrl)) {\n this.removeDeferredExitPopup(item);\n this.debug('Exit popup dropped because route did not change', item);\n return;\n }\n\n if (!this.shouldShow(def, undefined, true)) {\n this.removeDeferredExitPopup(item);\n this.debug('Exit popup skipped at render-time conditions', item);\n return;\n }\n\n this.showDefinition(def);\n this.removeDeferredExitPopup(item);\n }\n\n private findPopupDefinition(surveyId: string, popupId?: string): NormalizedPopupDefinition | undefined {\n if (popupId) {\n const byId = this.popupDefinitions.find((popup) => popup.id === popupId);\n if (byId) return byId;\n }\n return this.popupDefinitions.find((popup) => popup.surveyId === surveyId);\n }\n\n private removeDeferredExitPopup(item: DeferredExitPopup): void {\n const queue = this.getDeferredExitQueue().filter((entry) => !(entry.id === item.id && entry.sourceUrl === item.sourceUrl));\n this.setDeferredExitQueue(queue);\n }\n\n private getDeferredExitQueue(): DeferredExitPopup[] {\n if (typeof window === 'undefined') return [];\n try {\n const raw = window.sessionStorage.getItem(EXIT_QUEUE_STORAGE_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) return [];\n return parsed\n .filter((entry: unknown): entry is DeferredExitPopup => {\n if (typeof entry !== 'object' || entry === null) return false;\n const item = entry as Partial<DeferredExitPopup>;\n return typeof item.id === 'string'\n && typeof item.surveyId === 'string'\n && typeof item.sourceUrl === 'string'\n && typeof item.dueAt === 'number'\n && Number.isFinite(item.dueAt);\n })\n .map((item) => ({\n ...item,\n sourceUrl: this.normalizeUrl(item.sourceUrl),\n }));\n } catch {\n return [];\n }\n }\n\n private setDeferredExitQueue(queue: DeferredExitPopup[]): void {\n if (typeof window === 'undefined') return;\n try {\n if (!queue.length) {\n window.sessionStorage.removeItem(EXIT_QUEUE_STORAGE_KEY);\n return;\n }\n window.sessionStorage.setItem(EXIT_QUEUE_STORAGE_KEY, JSON.stringify(queue));\n } catch {\n // Ignore storage errors in host environments that block storage access.\n }\n }\n\n /** Fetch al servidor para obtener popups */\n private async fetchPopupsFromServer(): Promise<unknown[]> {\n const apiKey = this.config?.apiKey;\n const baseUrl = this.baseUrl;\n const userId = this.config?.userId;\n if (!apiKey || !baseUrl) {\n this.log('Missing apiKey or baseUrl. Skipping popups fetch.');\n return [];\n }\n const filter = userId ? { where: { userId } } : null;\n const query = filter ? `?filter=${encodeURIComponent(JSON.stringify(filter))}` : '';\n const endpoint = `${baseUrl}/sdk/${encodeURIComponent(apiKey)}/popups${query}`;\n try {\n const response = await fetch(endpoint);\n if (!response.ok) {\n this.log('Failed to fetch popups', response.status, response.statusText);\n return [];\n }\n const raw = await response.text();\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) {\n this.log('Unexpected popups payload', parsed);\n return [];\n }\n this.debug('Fetched popups payload', parsed);\n return parsed;\n } catch (error) {\n this.log('Error fetching popups', error);\n return [];\n }\n }\n\n /** Envía los atributos de contact a la API (`POST /sdk/popups/contact`). */\n private async postContact(body: { publicKey: string; userId: string; userAttributes: ContactAttributes }): Promise<void> {\n const baseUrl = this.baseUrl;\n if (!baseUrl) return;\n const endpoint = `${baseUrl}/sdk/popups/contact`;\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (!response.ok) {\n this.log('Failed to post contact', response.status, response.statusText);\n return;\n }\n this.log('contact · sent attributes for user:', body.userId);\n } catch (error) {\n this.log('Error posting contact', error);\n }\n }\n\n /** Notifica eventos de popup a la API */\n private async postPopupEvent(status: POPUPSESSIONSTATUS, popupId: string, userId?: string): Promise<void> {\n const apiKey = this.config?.apiKey;\n const baseUrl = this.baseUrl;\n if (!apiKey || !baseUrl) {\n return;\n }\n const endpoint = `${baseUrl}/sdk/popups`;\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n publicKey: apiKey,\n status,\n popupId,\n userId: userId || undefined,\n }),\n });\n if (!response.ok) {\n this.log('Failed to post popup event', response.status, response.statusText);\n return;\n }\n // Contrato Fase 1 §6: el backend devuelve el sessionId; lo cacheamos para\n // inyectarlo en las respuestas de survey (lo cose por user_id).\n try {\n const data = await response.json();\n if (data && typeof data.sessionId === 'string') {\n this.tracking?.setSessionId(data.sessionId);\n this.log('tracking · session_id from backend:', data.sessionId);\n }\n } catch {\n // respuesta sin cuerpo JSON: nada que cachear\n }\n } catch (error) {\n this.log('Error posting popup event', error);\n }\n }\n\n /** Add an event listener */\n on(eventType: DeepdotsEventType, listener: EventListener): void {\n if (!this.listeners.has(eventType)) {\n this.listeners.set(eventType, new Set());\n }\n this.listeners.get(eventType)!.add(listener);\n }\n\n /** Remove an event listener */\n off(eventType: DeepdotsEventType, listener: EventListener): void {\n const listeners = this.listeners.get(eventType);\n if (listeners) {\n listeners.delete(listener);\n }\n }\n\n /** Setup popup container element */\n private setupPopupContainer(): void {\n if (typeof document === 'undefined') {\n return;\n }\n this.popupContainer = document.createElement('div');\n this.popupContainer.id = 'deepdots-popup-container';\n this.popupContainer.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: none;\n z-index: 999999;\n background: rgba(0, 0, 0, 0.5);\n justify-content: center;\n align-items: center;\n `;\n document.body.appendChild(this.popupContainer);\n }\n\n /** Render the popup UI */\n private renderPopup(surveyId: string, productId: string, actions?: PopupActions, style?: PopupStyle): void {\n const userId = this.tracking?.getUserId() ?? this.config?.userId;\n const sessionId = this.tracking?.getSessionId() ?? undefined;\n const miniService = this.analytics?.getMiniService() ?? undefined;\n const analyticsFeedbackSessionId = this.analyticsFeedbackSessionId;\n this.log('tracking · survey identity →', { userId: userId ?? null, sessionId: sessionId ?? null, miniService: miniService ?? null, analyticsFeedbackSessionId: analyticsFeedbackSessionId ?? null });\n if (this.renderer) {\n this.renderer.show(\n surveyId,\n productId,\n actions,\n (type, id, payload) => this.emitEvent(type, id, payload),\n () => this.hidePopup(),\n this.env,\n userId,\n style,\n sessionId,\n miniService,\n analyticsFeedbackSessionId,\n );\n return;\n }\n\n if (!this.popupContainer) return;\n const container = this.popupContainer;\n void import('../ui/renderPopup').then(({ renderPopup }) => {\n renderPopup(\n container,\n surveyId,\n productId,\n actions,\n (type, id, payload) => this.emitEvent(type, id, payload),\n () => this.hidePopup(),\n this.env,\n userId,\n style,\n sessionId,\n miniService,\n analyticsFeedbackSessionId,\n );\n });\n }\n\n /** Hide the popup */\n private hidePopup(): void {\n if (this.renderer) {\n this.renderer.hide();\n return;\n }\n if (this.popupContainer) {\n this.popupContainer.style.display = 'none';\n this.popupContainer.innerHTML = '';\n }\n }\n\n /** Emit an event */\n private emitEvent(type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>): void {\n const event: DeepdotsEvent = { type, surveyId, timestamp: Date.now(), data };\n this.log('Event emitted', event);\n\n const isPartialClick = type === 'popup_clicked' && data?.action === 'partial';\n if (isPartialClick) {\n this.markSurveyProgress(surveyId, 'PARTIAL');\n }\n if (type === 'survey_completed') {\n this.markSurveyAnswered(surveyId);\n }\n if (type === 'popup_shown' || type === 'survey_completed' || isPartialClick) {\n const popupIdFromData = data?.popupId as string | undefined;\n const popupId = popupIdFromData || this.surveyToPopupId.get(surveyId);\n if (popupId) {\n const userIdFromData = data?.userId as string | undefined;\n const status = type === 'popup_shown'\n ? POPUPSESSIONSTATUS.SHOWED\n : type === 'survey_completed'\n ? POPUPSESSIONSTATUS.COMPLETED\n : POPUPSESSIONSTATUS.PARTIAL;\n void this.postPopupEvent(status, popupId, userIdFromData || this.tracking?.getUserId() || this.config?.userId);\n } else {\n this.debug('No popupId available to post event', { type, surveyId });\n }\n }\n\n const listeners = this.listeners.get(type);\n if (listeners) {\n listeners.forEach((listener) => {\n try {\n listener(event);\n } catch (error) {\n if (this.logger.error) this.logger.error('Error in event listener:', error);\n else this.logger.log('Error in event listener:', error);\n }\n });\n }\n }\n\n /** Log debug messages */\n private log(...args: unknown[]): void {\n if (this.config?.debug) {\n this.logger.log('[DeepdotsPopups]', ...args);\n }\n }\n\n /** External debug method for triggers */\n public debug(...args: unknown[]): void {\n this.log(...args);\n }\n\n /** Set a custom renderer */\n public setRenderer(renderer: PopupRenderer): void {\n this.renderer = renderer;\n if (this.initialized && this.renderer.init) {\n this.renderer.init();\n }\n }\n\n private normalizeUrl(value: string): string {\n if (!value) return '';\n const withoutIndex = value.replace(/\\/index\\.html(?=($|[?#]))/i, '');\n return withoutIndex.length > 1 && withoutIndex.endsWith('/') ? withoutIndex.slice(0, -1) : withoutIndex;\n }\n\n private safeParseUrl(url: string): URL | null {\n if (!url) return null;\n try {\n return new URL(url, typeof window !== 'undefined' ? window.location.href : undefined);\n } catch {\n return null;\n }\n }\n\n private mapPopupTriggerType(type: PopupTrigger['type']): TriggerConfig['type'] | null {\n switch (type) {\n case 'time_on_page':\n return 'time';\n case 'scroll':\n return 'scroll';\n case 'exit':\n return 'exit';\n case 'click':\n return 'click';\n case 'event':\n return 'event';\n default:\n return null;\n }\n }\n\n private markSurveyProgress(surveyId: string, status: PopupTriggerConditionStatus): void {\n const current = this.surveyProgress.get(surveyId);\n if (current?.status === 'COMPLETED' && status !== 'COMPLETED') {\n return;\n }\n this.surveyProgress.set(surveyId, { status, timestamp: Date.now() });\n }\n\n private isPopupDefinition(value: unknown): value is NormalizedPopupDefinition {\n if (typeof value !== 'object' || value === null) return false;\n const popup = value as Partial<NormalizedPopupDefinition>;\n\n return typeof popup.id === 'string'\n && typeof popup.title === 'string'\n && typeof popup.message === 'string'\n && typeof popup.surveyId === 'string'\n && typeof popup.productId === 'string'\n && Array.isArray(popup.triggers)\n && popup.triggers.length > 0\n && popup.triggers.every((trigger) => this.isPopupTrigger(trigger))\n && (!popup.cooldown || popup.cooldown.every((condition) => this.isPopupTriggerCondition(condition)));\n }\n\n private isPopupTrigger(value: unknown): value is PopupTrigger {\n if (typeof value !== 'object' || value === null) return false;\n const trigger = value as Partial<PopupTrigger>;\n return this.isPopupTriggerType(trigger.type)\n && (typeof trigger.value === 'number' || typeof trigger.value === 'string');\n }\n\n private isPopupTriggerType(value: unknown): value is PopupTrigger['type'] {\n return value === 'time_on_page'\n || value === 'scroll'\n || value === 'exit'\n || value === 'click'\n || value === 'event';\n }\n\n private isPopupTriggerCondition(value: unknown): value is PopupTriggerCondition {\n if (typeof value !== 'object' || value === null) return false;\n const condition = value as Partial<PopupTriggerCondition>;\n return POPUP_TRIGGER_CONDITION_STATUSES.includes(condition.answered as PopupTriggerConditionStatus)\n && typeof condition.cooldownDays === 'number'\n && Number.isFinite(condition.cooldownDays)\n && condition.cooldownDays >= 0;\n }\n\n private isLegacyPopupTriggerCondition(value: unknown): value is LegacyPopupTriggerCondition {\n if (typeof value !== 'object' || value === null) return false;\n const condition = value as Partial<LegacyPopupTriggerCondition>;\n if (condition.answered !== undefined && typeof condition.answered !== 'boolean') {\n return false;\n }\n if (condition.cooldownDays !== undefined) {\n return typeof condition.cooldownDays === 'number'\n && Number.isFinite(condition.cooldownDays)\n && condition.cooldownDays >= 0;\n }\n return true;\n }\n\n private normalizeTriggers(value: unknown): PopupTrigger[] {\n const items = Array.isArray(value) ? value : value ? [value] : [];\n return items\n .filter((trigger): trigger is PopupTrigger => this.isPopupTrigger(trigger))\n .map((trigger) => ({\n type: trigger.type,\n value: trigger.value,\n }));\n }\n\n private normalizeCooldown(value: unknown): PopupTriggerCondition[] {\n if (!Array.isArray(value)) return [];\n return value.filter((condition): condition is PopupTriggerCondition => this.isPopupTriggerCondition(condition));\n }\n\n private normalizeLegacyConditions(value: unknown): LegacyPopupTriggerCondition[] {\n if (!Array.isArray(value)) return [];\n return value.filter((condition): condition is LegacyPopupTriggerCondition => this.isLegacyPopupTriggerCondition(condition));\n }\n\n private normalizePopupDefinition(def: unknown): NormalizedPopupDefinition | null {\n if (typeof def !== 'object' || def === null) return null;\n const raw = def as Partial<PopupDefinition> & {\n trigger?: PopupTrigger | PopupTrigger[];\n triggers?: PopupTrigger | PopupTrigger[];\n conditions?: LegacyPopupTriggerCondition[];\n cooldown?: PopupTriggerCondition[];\n };\n\n const rawTriggers = raw.triggers ?? raw.trigger;\n const triggers = this.normalizeTriggers(rawTriggers);\n if (!triggers.length) return null;\n\n const rawTriggerList = Array.isArray(rawTriggers) ? rawTriggers : rawTriggers ? [rawTriggers] : [];\n const legacyConditions = [\n ...this.normalizeLegacyConditions(raw.conditions),\n ...rawTriggerList.flatMap((trigger) => this.normalizeLegacyConditions((trigger as { condition?: unknown }).condition)),\n ];\n const cooldown = this.normalizeCooldown(raw.cooldown);\n\n return {\n ...(raw as PopupDefinition),\n triggers,\n cooldown,\n legacyConditions,\n };\n }\n\n private validatePopupDefinitions(defs: unknown[]): NormalizedPopupDefinition[] {\n return defs\n .map((def) => this.normalizePopupDefinition(def))\n .filter((def): def is NormalizedPopupDefinition => !!def && this.isPopupDefinition(def));\n }\n}\n","/**\n * Capa de Analytics (eventos GA-style) — canal SEPARADO del feedback de survey.\n *\n * El feedback de survey se envía con `magicfeedback.send()`. La analítica de\n * navegación/comportamiento (page views, mini-services, tasks/funnels, meaningful\n * interactions, findability…) va por un ENDPOINT PROPIO, vinculada por `user_id`.\n *\n * De momento NO se hace la llamada: el `sink` por defecto hace `console.log` del\n * payload exacto que se enviaría (dry-run), para poder verificarlo. Cuando el\n * endpoint exista, se sustituye el sink por un POST.\n */\n\nimport type { DeviceInfo } from './device-info';\n\nexport interface AnalyticsEvent {\n name: string;\n timestamp: number;\n params?: Record<string, unknown>;\n}\n\nexport interface AnalyticsEnvelope {\n /** Clave pública del cliente (auth). */\n publicKey?: string;\n /** Id que vincula la analítica al usuario (el backend cose por aquí). */\n userId: string | null;\n /** Session id del backend si ya se conoce (puede ir null). */\n sessionId: string | null;\n context: {\n platform: string; // 'web' | 'android' | 'ios' (RN inyecta la suya)\n language?: string;\n /** Info de dispositivo (Technology #11–13). */\n device?: DeviceInfo;\n /** User attributes del cliente, usados para breakdowns (registration_status, pass_type, …). */\n attributes: Record<string, string>;\n /** Métricas del host: valores medibles persistentes → van en `feedback.metrics` del body. */\n metrics?: Record<string, string>;\n };\n events: AnalyticsEvent[];\n}\n\n/** Contexto del flush, para que el sink pueda adaptar el transporte. */\nexport interface AnalyticsFlushMeta {\n /**\n * `true` cuando el flush ocurre porque la página/app se está cerrando. El sink debe usar\n * un transporte que sobreviva al unload (sendBeacon) y no puede esperar respuestas.\n */\n final?: boolean;\n}\n\n/**\n * Envío del lote. Si devuelve una promesa que **rechaza**, el manager re-encola los\n * eventos para reintentarlos en el siguiente flush (fallo transitorio: red o 5xx).\n * Resolver = lote entregado o descartado definitivamente (no se reintenta).\n */\nexport type AnalyticsSink = (payload: AnalyticsEnvelope, meta?: AnalyticsFlushMeta) => void | Promise<void>;\n\n/** Identidad resuelta por el tracking, inyectada al construir el payload. */\nexport interface AnalyticsIdentity {\n userId: string | null;\n sessionId: string | null;\n}\n\n/**\n * Sink de dry-run: NO envía nada, solo vuelca lo que se enviaría por el `log` dado\n * (default `console.log`, o el logger inyectado por el host en init()).\n */\nexport function createDryRunSink(log: (...args: unknown[]) => void = console.log): AnalyticsSink {\n return (payload) =>\n log(\n '[DeepdotsAnalytics] (dry-run · NO enviado · sin init.analytics) POST /sdk/feedback →',\n JSON.stringify(payload, null, 2),\n );\n}\n\n/** Sink por defecto: NO envía nada, solo pinta por consola lo que se enviaría. */\nexport const dryRunSink: AnalyticsSink = createDryRunSink();\n\nexport interface AnalyticsManagerOptions {\n sink?: AnalyticsSink;\n now?: () => number;\n publicKey?: string;\n language?: string;\n device?: DeviceInfo;\n /** Plataforma del envelope (default 'web'; RN inyecta 'android'/'ios'). */\n platform?: string;\n /** Nº máximo de eventos en buffer antes de solicitar un flush automático (default 20). */\n maxBatchSize?: number;\n /**\n * Techo de eventos retenidos en memoria contando los re-encolados por fallo de envío\n * (default 200). Al superarlo se descartan los más antiguos.\n */\n maxBufferedEvents?: number;\n /** Callback invocado cuando el buffer alcanza `maxBatchSize`. El caller hace el flush real. */\n onFlushNeeded?: () => void;\n}\n\nexport class AnalyticsManager {\n private sink: AnalyticsSink;\n private now: () => number;\n private publicKey?: string;\n private language?: string;\n private device?: DeviceInfo;\n private platform: string;\n\n private events: AnalyticsEvent[] = [];\n private attributes: Record<string, string> = {};\n /** Métricas del host (valores medibles persistentes). Sobrescriben por key; se reenvían en cada flush. */\n private metrics: Record<string, string> = {};\n /** Mini-services activos: nombre → timestamp de entrada. El orden de inserción marca el \"más reciente\". */\n private activeMiniServices = new Map<string, number>();\n private maxBatchSize: number;\n private maxBufferedEvents: number;\n private onFlushNeeded?: () => void;\n\n constructor(options: AnalyticsManagerOptions = {}) {\n this.sink = options.sink ?? dryRunSink;\n this.now = options.now ?? (() => Date.now());\n this.publicKey = options.publicKey;\n this.language = options.language;\n this.device = options.device;\n this.platform = options.platform ?? 'web';\n this.maxBatchSize = options.maxBatchSize ?? 20;\n this.maxBufferedEvents = options.maxBufferedEvents ?? 200;\n this.onFlushNeeded = options.onFlushNeeded;\n }\n\n /** Actualiza campos de device en runtime (p.ej. country/city tras resolver geo). */\n updateDevice(partial: Partial<DeviceInfo>): void {\n this.device = { ...this.device, ...partial } as DeviceInfo;\n }\n\n /** Mezcla user attributes (se coercionan a string). Mutable en runtime. */\n setUserAttributes(attrs: Record<string, string | number | boolean>): void {\n for (const [k, v] of Object.entries(attrs)) {\n if (!k) continue;\n this.attributes[k] = String(v);\n }\n }\n\n /**\n * Registra/actualiza una métrica (valor medible). Persistente: se reenvía en cada flush.\n * Repetir la misma key SOBRESCRIBE; el valor se coerciona a string; ignora key vacía.\n */\n setMetric(key: string, value: string | number | boolean): void {\n if (!key) return;\n this.metrics[key] = String(value);\n }\n\n /**\n * Marca el inicio de un mini-service; etiqueta los eventos siguientes con `mini_service`.\n * Admite varios activos a la vez (concurrencia); el \"actual\" para etiquetar es el más reciente.\n * Reentrar con un nombre ya activo refresca su orden y su tiempo de entrada.\n */\n enterMiniService(name: string, entryPointType?: string): void {\n this.activeMiniServices.delete(name); // reinsertar = pasa a ser el más reciente\n this.activeMiniServices.set(name, this.now());\n this.track('deepdots_mini_service_enter', { entry_point_type: entryPointType ?? null });\n }\n\n /**\n * Cierra el mini-service `name` emitiendo `mini_service_exit` con su duración (#27).\n * No-op si ese nombre no está activo. Cierre coherente con concurrencia.\n */\n exitMiniService(name: string): void {\n const enteredAt = this.activeMiniServices.get(name);\n if (enteredAt === undefined) return;\n const durationSeconds = Math.max(0, Math.round((this.now() - enteredAt) / 1000));\n this.activeMiniServices.delete(name); // dejar de etiquetar con este antes de emitir\n this.track('deepdots_mini_service_exit', { mini_service: name, duration_seconds: durationSeconds });\n }\n\n /** Cierra TODOS los mini-services activos (orden LIFO). Para el cierre por lifecycle (background/cierre). */\n exitAllMiniServices(): void {\n for (const name of Array.from(this.activeMiniServices.keys()).reverse()) {\n this.exitMiniService(name);\n }\n }\n\n /** Registra un evento de analítica (modelo GA: nombre + params). */\n track(name: string, params?: Record<string, unknown>): void {\n const current = this.getMiniService();\n const merged: Record<string, unknown> = {\n ...(current ? { mini_service: current } : {}),\n ...(params ?? {}),\n };\n this.events.push({\n name,\n timestamp: this.now(),\n params: Object.keys(merged).length ? merged : undefined,\n });\n this.enforceBufferCap();\n if (this.events.length >= this.maxBatchSize) {\n this.onFlushNeeded?.();\n }\n }\n\n /** Mini-service actual (el más reciente aún activo) para etiquetar eventos + metadata del survey (#33). */\n getMiniService(): string | null {\n let last: string | null = null;\n for (const name of this.activeMiniServices.keys()) last = name; // última clave = más reciente\n return last;\n }\n\n /** Nº de eventos pendientes de flush. */\n pending(): number {\n return this.events.length;\n }\n\n /** Construye el envelope que se enviaría al endpoint de analytics. */\n buildPayload(identity: AnalyticsIdentity): AnalyticsEnvelope {\n return {\n publicKey: this.publicKey,\n userId: identity.userId,\n sessionId: identity.sessionId,\n context: {\n platform: this.platform,\n language: this.language,\n device: this.device,\n attributes: { ...this.attributes },\n metrics: { ...this.metrics },\n },\n events: [...this.events],\n };\n }\n\n /**\n * Envía (vía sink) el lote acumulado y vacía el buffer. No-op si no hay eventos.\n *\n * Si el sink falla de forma transitoria (promesa rechazada o excepción síncrona) el lote\n * se **re-encola** al principio del buffer y se reintenta en el siguiente flush: un error\n * de red o un 5xx no debe hacer desaparecer los eventos.\n */\n flush(identity: AnalyticsIdentity, meta?: AnalyticsFlushMeta): AnalyticsEnvelope | null {\n if (this.events.length === 0) return null;\n const batch = this.events;\n const payload = this.buildPayload(identity);\n this.events = [];\n\n let result: void | Promise<void>;\n try {\n // sin meta se invoca con un solo argumento (compatibilidad con sinks del host)\n result = meta ? this.sink(payload, meta) : this.sink(payload);\n } catch {\n this.requeue(batch);\n return payload;\n }\n if (result && typeof (result as Promise<void>).then === 'function') {\n (result as Promise<void>).catch(() => this.requeue(batch));\n }\n return payload;\n }\n\n /**\n * Devuelve un lote fallido al buffer, delante de lo que haya llegado mientras se enviaba\n * (orden cronológico). Con el buffer lleno se descartan los eventos más antiguos.\n */\n private requeue(batch: AnalyticsEvent[]): void {\n this.events = [...batch, ...this.events];\n this.enforceBufferCap();\n }\n\n /** Techo del buffer: si el envío lleva rato fallando, se sacrifica lo más antiguo. */\n private enforceBufferCap(): void {\n const overflow = this.events.length - this.maxBufferedEvents;\n if (overflow > 0) this.events.splice(0, overflow);\n }\n}\n","/**\n * Mapeo del envelope de analytics → body de `POST /sdk/feedback`.\n *\n * La analítica se envía como un Feedback del modelo del Surveys SDK, agrupado por una\n * INTEGRACIÓN creada en la plataforma. Se manda en streaming con `completed:false` y\n * `finished:false` (nunca se \"cierra\"); el backend cose por `sessionId` + `user_id`.\n *\n * Encoding:\n * - todo va en `feedback.metadata`: contexto (user_id, session_id, platform…) + eventos\n * - cada entrada usa `value: string[]` (array de un elemento)\n * - eventos: {key: nombre_evento, value: [JSON(timestamp + params)]}\n * - identidad (user_id) → `profile` como `external-user-id`\n * - métricas del host (setMetric) → `feedback.metrics` (mismo shape que metadata, sin prefijo)\n * - `answers` vacío\n * - `text` vacío\n */\n\nimport type { AnalyticsEnvelope, AnalyticsSink } from './analytics-manager';\n\nexport interface AnalyticsKeys {\n publicKey: string;\n integration: string;\n}\n\nexport interface FeedbackKV {\n key: string;\n value: string[];\n}\n\nexport interface AnalyticsFeedbackBody {\n feedback: {\n text: string;\n answers: FeedbackKV[];\n metrics: FeedbackKV[];\n metadata: FeedbackKV[];\n profile: FeedbackKV[];\n finished: boolean;\n };\n publicKey: string;\n integration: string;\n completed: boolean;\n finished?: boolean;\n /** sessionId devuelto por el primer POST; permite que el backend agrupe todos los eventos en un solo registro. */\n sessionId?: string;\n}\n\n/** Inserta un par key/value en la lista solo si el valor está definido y no es vacío. */\nfunction pushKV(list: FeedbackKV[], key: string, value: unknown): void {\n if (value === undefined || value === null || value === '') return;\n list.push({ key, value: [String(value)] });\n}\n\nexport function buildAnalyticsFeedbackBody(\n envelope: AnalyticsEnvelope,\n keys: AnalyticsKeys,\n feedbackSessionId?: string,\n): AnalyticsFeedbackBody {\n const { context } = envelope;\n\n const profile: FeedbackKV[] = [];\n pushKV(profile, 'external-user-id', envelope.userId);\n\n // Todo va en metadata: contexto del sistema (prefijo deepdots_) + atributos de usuario + eventos\n const metadata: FeedbackKV[] = [];\n pushKV(metadata, 'deepdots_user_id', envelope.userId);\n pushKV(metadata, 'deepdots_session_id', envelope.sessionId);\n pushKV(metadata, 'deepdots_platform', context.platform);\n pushKV(metadata, 'deepdots_language', context.language);\n if (context.device) {\n const d = context.device;\n pushKV(metadata, 'deepdots_device_type', d.device_type);\n pushKV(metadata, 'deepdots_os_version', d.os_version);\n pushKV(metadata, 'deepdots_device_model', d.device_model);\n pushKV(metadata, 'deepdots_app_version', d.app_version);\n pushKV(metadata, 'deepdots_user_agent', d.user_agent);\n pushKV(metadata, 'deepdots_timezone', d.timezone);\n pushKV(metadata, 'deepdots_referrer', d.referrer);\n pushKV(metadata, 'deepdots_viewport_size', d.viewport_size);\n pushKV(metadata, 'deepdots_screen_resolution', d.screen_resolution);\n pushKV(metadata, 'deepdots_pixel_ratio', d.pixel_ratio);\n pushKV(metadata, 'deepdots_entry_type', d.entry_type);\n pushKV(metadata, 'deepdots_page_load_ms', d.page_load_ms);\n pushKV(metadata, 'deepdots_connection_type', d.connection_type);\n pushKV(metadata, 'deepdots_country', d.country);\n pushKV(metadata, 'deepdots_city', d.city);\n }\n for (const [k, v] of Object.entries(context.attributes ?? {})) {\n pushKV(metadata, k, v);\n }\n for (const e of envelope.events) {\n metadata.push({\n key: e.name,\n value: [JSON.stringify({ timestamp: e.timestamp, ...(e.params ?? {}) })],\n });\n }\n\n // Métricas del host → campo dedicado `feedback.metrics` (mismo shape que metadata, sin prefijo).\n const metrics: FeedbackKV[] = [];\n for (const [k, v] of Object.entries(context.metrics ?? {})) {\n pushKV(metrics, k, v);\n }\n\n return {\n feedback: {\n text: '',\n answers: [],\n metrics,\n metadata,\n profile,\n finished: false,\n },\n publicKey: keys.publicKey,\n integration: keys.integration,\n completed: false,\n ...(feedbackSessionId ? { sessionId: feedbackSessionId } : {}),\n };\n}\n\nexport interface FeedbackSinkOptions {\n /** Base URL del backend (api(.|-dev.)deepdots.com) ya resuelta por el entorno. */\n baseUrl: string;\n keys: AnalyticsKeys;\n /** Logger opcional (gated por debug). */\n log?: (...args: unknown[]) => void;\n /** fetch inyectable (tests / RN). */\n fetchImpl?: typeof fetch;\n /**\n * `navigator.sendBeacon` inyectable. Solo se usa en el flush final (cierre de página):\n * sobrevive al unload, a cambio de no poder leer la respuesta. Si no se pasa, el flush\n * final usa `fetch` con `keepalive`.\n */\n sendBeaconImpl?: (url: string, body: Blob | string) => boolean;\n /** Callback invocado cuando el backend devuelve un nuevo sessionId (primer POST). */\n onSessionId?: (id: string) => void;\n}\n\n/** Límite práctico de `fetch({keepalive:true})` y de `sendBeacon` (~64KB en Chrome). */\nconst KEEPALIVE_MAX_BYTES = 60_000;\n\n/** Un fallo transitorio merece reintento; un 4xx (payload/claves/Contact) no. */\nfunction isRetryableStatus(status: number): boolean {\n return status >= 500 || status === 408 || status === 429;\n}\n\nasync function safeBodyText(res: Response): Promise<string> {\n try {\n return (await res.text()).slice(0, 500);\n } catch {\n return '';\n }\n}\n\n/**\n * Sink real: transforma el envelope y hace `POST {baseUrl}/sdk/feedback`.\n *\n * Stateful: cachea el `sessionId` que devuelve el backend en la primera respuesta y lo\n * envía en los siguientes POSTs para que el backend agrupe todos los eventos en un único\n * registro de feedback.\n *\n * Garantías de entrega:\n * - mientras no se conozca el `sessionId`, los lotes se **serializan** (esperan la primera\n * respuesta): dos POSTs a la vez sin `sessionId` crearían dos registros y partirían los datos;\n * - `keepalive` para que el navegador no cancele el POST al navegar fuera, y `sendBeacon`\n * en el flush final (cierre de página), donde `fetch` puede morir con el documento;\n * - la promesa **rechaza** en fallo transitorio (red, 5xx, 408, 429) para que el\n * `AnalyticsManager` re-encole el lote; un 4xx se loguea y se descarta.\n */\nexport function createFeedbackSink(options: FeedbackSinkOptions): AnalyticsSink {\n let feedbackSessionId: string | undefined;\n /** Primer POST (aún sin sessionId) en vuelo: los siguientes lotes lo esperan. */\n let firstPostInFlight: Promise<void> | null = null;\n\n const url = `${options.baseUrl}/sdk/feedback`;\n\n const post = async (body: AnalyticsFeedbackBody, final: boolean): Promise<void> => {\n const json = JSON.stringify(body);\n const small = json.length <= KEEPALIVE_MAX_BYTES;\n\n // Cierre de página: sendBeacon sobrevive al unload (a cambio, no hay respuesta que leer).\n if (final && options.sendBeaconImpl && small) {\n const payload = typeof Blob !== 'undefined' ? new Blob([json], { type: 'application/json' }) : json;\n if (options.sendBeaconImpl(url, payload)) {\n options.log?.('[DeepdotsAnalytics] flush final vía sendBeacon');\n return;\n }\n options.log?.('[DeepdotsAnalytics] sendBeacon rechazó el lote; fallback a fetch');\n }\n\n const f = options.fetchImpl ?? (typeof fetch !== 'undefined' ? fetch : undefined);\n if (!f) {\n options.log?.('[DeepdotsAnalytics] no fetch disponible; payload no enviado', body);\n return;\n }\n\n const res = await f(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: json,\n // keepalive: el POST sobrevive a la navegación mientras el body sea pequeño.\n ...(small ? { keepalive: true } : {}),\n });\n\n if (!res.ok) {\n const detail = await safeBodyText(res);\n if (isRetryableStatus(res.status)) {\n // Rechazar → el manager re-encola el lote y se reintenta en el siguiente flush.\n throw new Error(`POST /sdk/feedback ${res.status} (reintentable): ${detail}`);\n }\n options.log?.(\n `[DeepdotsAnalytics] POST /sdk/feedback rechazado con ${res.status}; lote DESCARTADO:`,\n detail,\n );\n return;\n }\n\n try {\n const data = (await res.json()) as { sessionId?: string };\n if (data?.sessionId && data.sessionId !== feedbackSessionId) {\n feedbackSessionId = data.sessionId;\n options.log?.('[DeepdotsAnalytics] feedbackSessionId cacheado:', feedbackSessionId);\n options.onSessionId?.(feedbackSessionId);\n }\n } catch {\n /* respuesta sin JSON — ignorar */\n }\n };\n\n return async (envelope: AnalyticsEnvelope, meta) => {\n const final = meta?.final === true;\n\n // Sin sessionId todavía: esperar al primer POST para heredarlo y no partir el registro.\n // En el flush final no se espera (la página se está muriendo): mejor un registro\n // partido que perder el lote — el backend cose por user_id.\n if (!feedbackSessionId && firstPostInFlight && !final) {\n await firstPostInFlight;\n }\n\n const body = buildAnalyticsFeedbackBody(envelope, options.keys, feedbackSessionId);\n options.log?.('[DeepdotsAnalytics] POST /sdk/feedback →', body);\n\n const sent = post(body, final);\n if (!feedbackSessionId) {\n // nunca rechaza: es solo una barrera de orden, el fallo lo propaga `sent`\n firstPostInFlight = sent.then(\n () => undefined,\n () => undefined,\n );\n }\n await sent;\n };\n}\n","/**\n * Observador de navegación (Fase 2). Detecta cambios de pantalla y emite \"visitas\"\n * completadas (screen + entrada/salida/duración) cuando se abandona una pantalla.\n *\n * En Web se engancha a la History API (pushState/replaceState/popstate/hashchange).\n * La lógica de timing y normalización es pura y testeable sin DOM (vía `begin`/`visit`/`stop`\n * y un reloj inyectable).\n *\n * El consumidor (DeepdotsPopups) reenvía cada visita como un evento `page_view` por el\n * canal de analytics; el grafo se reconstruye en backend por orden + timestamp.\n */\n\nexport interface ScreenVisit {\n screen: string;\n entry: number;\n exit: number;\n durationSeconds: number;\n}\n\nexport type VisitListener = (visit: ScreenVisit) => void;\n\nconst UUID_PREFIX = /^[0-9a-f]{8}-[0-9a-f]{4}-/i;\n\n/** Normaliza una URL a un nombre de pantalla: path (+hash route), sin query, IDs → :id. */\nexport function normalizeScreen(href: string): string {\n let pathAndHash: string;\n try {\n const u = new URL(href, 'http://deepdots.local');\n pathAndHash = u.pathname + (u.hash || '');\n } catch {\n pathAndHash = href;\n }\n // quitar query (incluida la que pueda venir dentro del hash route)\n pathAndHash = pathAndHash.replace(/\\?[^#]*/g, '');\n const collapsed = pathAndHash\n .split('/')\n .map((seg) => (/^[0-9]+$/.test(seg) || UUID_PREFIX.test(seg) ? ':id' : seg))\n .join('/');\n return collapsed || '/';\n}\n\nexport interface NavigationObserverOptions {\n now?: () => number;\n}\n\nexport class NavigationObserver {\n private now: () => number;\n private listeners = new Set<VisitListener>();\n private currentScreen: string | null = null;\n private entryAt = 0;\n private installed = false;\n private domHandlers: Array<() => void> = [];\n\n constructor(options: NavigationObserverOptions = {}) {\n this.now = options.now ?? (() => Date.now());\n }\n\n onVisit(listener: VisitListener): void {\n this.listeners.add(listener);\n }\n\n /** Fija la pantalla inicial (sin emitir visita; su duración se cierra al salir). */\n begin(href: string): void {\n this.currentScreen = normalizeScreen(href);\n this.entryAt = this.now();\n }\n\n /** Navega a una pantalla nueva: cierra la anterior (emite visita) y abre la nueva. */\n visit(href: string): void {\n const next = normalizeScreen(href);\n if (next === this.currentScreen) return; // misma pantalla → no es una visita nueva\n this.closeCurrent();\n this.currentScreen = next;\n this.entryAt = this.now();\n }\n\n /** Cierra la pantalla actual emitiendo su visita (p. ej. al cerrar la app/pestaña). */\n stop(): void {\n this.closeCurrent();\n this.currentScreen = null;\n }\n\n private closeCurrent(): void {\n if (this.currentScreen == null) return;\n const exit = this.now();\n const visit: ScreenVisit = {\n screen: this.currentScreen,\n entry: this.entryAt,\n exit,\n durationSeconds: Math.max(0, Math.round((exit - this.entryAt) / 1000)),\n };\n this.listeners.forEach((l) => {\n try {\n l(visit);\n } catch {\n /* listener no debe romper la navegación */\n }\n });\n }\n\n /** Instala los hooks de History en el navegador y registra la pantalla actual. */\n install(): void {\n if (this.installed || typeof window === 'undefined' || typeof history === 'undefined') return;\n this.installed = true;\n\n const handle = () => this.visit(window.location.href);\n\n const originalPush = history.pushState.bind(history);\n const originalReplace = history.replaceState.bind(history);\n history.pushState = (data: unknown, unused: string, url?: string | URL | null) => {\n const r = originalPush(data as never, unused, url as never);\n handle();\n return r;\n };\n history.replaceState = (data: unknown, unused: string, url?: string | URL | null) => {\n const r = originalReplace(data as never, unused, url as never);\n handle();\n return r;\n };\n window.addEventListener('popstate', handle);\n window.addEventListener('hashchange', handle);\n\n this.domHandlers.push(() => {\n history.pushState = originalPush;\n history.replaceState = originalReplace;\n window.removeEventListener('popstate', handle);\n window.removeEventListener('hashchange', handle);\n });\n\n this.begin(window.location.href);\n }\n\n uninstall(): void {\n this.domHandlers.forEach((off) => off());\n this.domHandlers = [];\n this.installed = false;\n }\n}\n","/**\n * Device info para el context de analytics (Technology #11–13).\n *\n * En Web enviamos `device_type` + `user_agent` crudo y dejamos que el backend\n * derive OS/navegador del UA (como hace GA). Los campos adicionales (timezone,\n * referrer, viewport, etc.) se recogen de las APIs del navegador sin permisos.\n * `country`/`city` se rellenan de forma asíncrona (ver geo-info.ts).\n * En KMP las APIs nativas dan os_version/device_model reales.\n */\n\nexport interface DeviceInfo {\n device_type: 'mobile' | 'tablet' | 'desktop';\n os_version?: string;\n device_model?: string;\n app_version?: string;\n user_agent?: string;\n timezone?: string;\n referrer?: string;\n viewport_size?: string;\n screen_resolution?: string;\n pixel_ratio?: number;\n entry_type?: string;\n page_load_ms?: number;\n connection_type?: string;\n country?: string;\n city?: string;\n}\n\nexport function parseDeviceType(ua: string): 'mobile' | 'tablet' | 'desktop' {\n const s = (ua || '').toLowerCase();\n if (/ipad|tablet|playbook|silk/.test(s) || (/android/.test(s) && !/mobile/.test(s))) {\n return 'tablet';\n }\n if (/mobi|iphone|ipod|windows phone/.test(s) || (/android/.test(s) && /mobile/.test(s))) {\n return 'mobile';\n }\n return 'desktop';\n}\n\nfunction getEntryType(): string | undefined {\n if (typeof performance === 'undefined') return undefined;\n const entries = performance.getEntriesByType('navigation');\n if (!entries.length) return undefined;\n return (entries[0] as PerformanceNavigationTiming).type;\n}\n\nfunction getPageLoadMs(): number | undefined {\n if (typeof performance === 'undefined') return undefined;\n const entries = performance.getEntriesByType('navigation');\n if (!entries.length) return undefined;\n const load = (entries[0] as PerformanceNavigationTiming).loadEventEnd;\n return load > 0 ? Math.round(load) : undefined;\n}\n\nfunction getConnectionType(): string | undefined {\n if (typeof navigator === 'undefined') return undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (navigator as any).connection?.effectiveType ?? undefined;\n}\n\nexport function collectDeviceInfo(appVersion?: string): DeviceInfo {\n const ua = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return {\n device_type: parseDeviceType(ua),\n user_agent: ua || undefined,\n app_version: appVersion,\n timezone: typeof Intl !== 'undefined' ? Intl.DateTimeFormat().resolvedOptions().timeZone : undefined,\n referrer: typeof document !== 'undefined' && document.referrer ? document.referrer : undefined,\n viewport_size:\n typeof window !== 'undefined' ? `${window.innerWidth}x${window.innerHeight}` : undefined,\n screen_resolution:\n typeof screen !== 'undefined' ? `${screen.width}x${screen.height}` : undefined,\n pixel_ratio: typeof window !== 'undefined' ? window.devicePixelRatio : undefined,\n entry_type: getEntryType(),\n page_load_ms: getPageLoadMs(),\n connection_type: getConnectionType(),\n };\n}\n","/**\n * Geolocalización por IP (Option B: client-side) robusta.\n *\n * Robustez:\n * - CACHE persistente en `KeyValueStorage` con TTL: en arranques posteriores el país/ciudad\n * está disponible de inmediato (sin llamada, sin gap de timing) y ahorra cuota del proveedor.\n * - CADENA de proveedores con fallback: si uno está bloqueado (ad-blocker), rate-limited (429)\n * o caído, se prueba el siguiente.\n * - TIMEOUT por proveedor vía `AbortController` para no colgarse en uno lento.\n *\n * Todo es fire-and-forget y tolerante a fallos: ante cualquier error devuelve `null`.\n */\n\nimport type { KeyValueStorage } from '../tracking/tracking-manager';\n\nexport interface GeoInfo {\n country?: string;\n city?: string;\n}\n\n/** Clave de cache en storage. */\nexport const GEO_STORAGE_KEY = 'deepdots.geo';\n/** El país/ciudad casi no cambian: cache de 30 días. */\nexport const GEO_TTL_MS = 30 * 24 * 60 * 60 * 1000;\n/** Timeout por proveedor. */\nexport const GEO_TIMEOUT_MS = 3000;\n\ninterface CachedGeo extends GeoInfo {\n ts: number;\n}\n\n/** Lee el geo cacheado si sigue fresco (no supera el TTL). Tolerante a JSON corrupto. */\nexport function readCachedGeo(storage: KeyValueStorage, now: number): GeoInfo | null {\n try {\n const raw = storage.getItem(GEO_STORAGE_KEY);\n if (!raw) return null;\n const cached = JSON.parse(raw) as CachedGeo;\n if (typeof cached.ts !== 'number' || now - cached.ts > GEO_TTL_MS) return null;\n const geo: GeoInfo = {};\n if (cached.country) geo.country = cached.country;\n if (cached.city) geo.city = cached.city;\n return geo.country || geo.city ? geo : null;\n } catch {\n return null;\n }\n}\n\n/** Persiste el geo con la marca de tiempo actual. Tolerante a fallos de storage. */\nexport function writeCachedGeo(storage: KeyValueStorage, geo: GeoInfo, now: number): void {\n try {\n const payload: CachedGeo = { ...geo, ts: now };\n storage.setItem(GEO_STORAGE_KEY, JSON.stringify(payload));\n } catch {\n /* storage lleno / no disponible: se ignora */\n }\n}\n\nexport interface GeoProvider {\n url: string;\n parse: (data: Record<string, unknown>) => GeoInfo | null;\n}\n\n/** Proveedores en orden de preferencia. Todos devuelven JSON sin auth. */\nexport const DEFAULT_GEO_PROVIDERS: GeoProvider[] = [\n {\n // https://ipapi.co/json/\n url: 'https://ipapi.co/json/',\n parse: (d) => geoFrom(d.country_code, d.city),\n },\n {\n // https://ipwho.is/ (devuelve success:false con 200 en errores)\n url: 'https://ipwho.is/',\n parse: (d) => (d.success === false ? null : geoFrom(d.country_code, d.city)),\n },\n {\n // https://ipinfo.io/json (country = código ISO)\n url: 'https://ipinfo.io/json',\n parse: (d) => geoFrom(d.country, d.city),\n },\n];\n\nfunction geoFrom(country: unknown, city: unknown): GeoInfo | null {\n const c = typeof country === 'string' && country ? country : undefined;\n const t = typeof city === 'string' && city ? city : undefined;\n if (!c && !t) return null;\n return { country: c, city: t };\n}\n\nasync function fetchOne(provider: GeoProvider, f: typeof fetch, timeoutMs: number): Promise<GeoInfo | null> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const res = await f(provider.url, { signal: controller.signal });\n if (!res.ok) return null;\n const data = (await res.json()) as Record<string, unknown>;\n return provider.parse(data);\n } catch {\n return null;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport interface FetchGeoOptions {\n fetchImpl?: typeof fetch;\n providers?: GeoProvider[];\n timeoutMs?: number;\n}\n\n/**\n * Intenta cada proveedor en orden (con timeout) y devuelve el primer geo válido.\n * `null` si ninguno responde. No lanza.\n */\nexport async function fetchGeo(options: FetchGeoOptions = {}): Promise<GeoInfo | null> {\n const f = options.fetchImpl ?? (typeof fetch !== 'undefined' ? fetch : undefined);\n if (!f) return null;\n const providers = options.providers ?? DEFAULT_GEO_PROVIDERS;\n const timeoutMs = options.timeoutMs ?? GEO_TIMEOUT_MS;\n for (const provider of providers) {\n const geo = await fetchOne(provider, f, timeoutMs);\n if (geo) return geo;\n }\n return null;\n}\n","/**\n * Resolución del idioma para el context de analytics.\n *\n * Prioridad: idioma explícito del host > `navigator.language` (web) > locale de `Intl`\n * (fallback automático que funciona en React Native con Hermes, donde `navigator.language`\n * no existe). Si nada resuelve, devuelve `undefined` y el campo se omite del metadata.\n */\n\n/** Forma mínima de `Intl` que necesitamos (inyectable para tests / entornos sin Intl). */\nexport interface IntlLike {\n DateTimeFormat: () => { resolvedOptions: () => { locale?: string } };\n}\n\nexport interface LanguageSources {\n /** Idioma forzado por el host (init.language). Máxima prioridad. */\n explicit?: string;\n /** `navigator` global (web). En RN suele no tener `language`. */\n navigator?: { language?: string };\n /** `Intl` global. Fallback cross-platform (web + RN/Hermes). */\n intl?: IntlLike;\n}\n\nfunction clean(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed ? trimmed : undefined;\n}\n\nexport function resolveLanguage(sources: LanguageSources): string | undefined {\n const explicit = clean(sources.explicit);\n if (explicit) return explicit;\n\n const navLang = clean(sources.navigator?.language);\n if (navLang) return navLang;\n\n try {\n const locale = clean(sources.intl?.DateTimeFormat().resolvedOptions().locale);\n if (locale) return locale;\n } catch {\n /* Intl no disponible o falló: se ignora */\n }\n\n return undefined;\n}\n","/**\n * Mide el tiempo ACTIVO (en primer plano), estilo GA4 (engagement time).\n * Acumula mientras está \"resumed\" (pestaña visible / app en foreground) y pausa en\n * background. `consume()` devuelve los ms activos desde la última lectura y reinicia,\n * dejando el timer corriendo. El consumidor emite un evento `user_engagement` con\n * `engagement_time_msec`; el backend lo suma por sesión → \"Average Time Spent per Session\" (#8).\n */\nexport class EngagementTracker {\n private now: () => number;\n private activeMs = 0;\n private lastResumeAt: number | null = null;\n\n constructor(now: () => number = () => Date.now()) {\n this.now = now;\n }\n\n /** Reanuda el conteo (pestaña visible / app en foreground). Idempotente. */\n resume(): void {\n if (this.lastResumeAt === null) this.lastResumeAt = this.now();\n }\n\n /** Pausa el conteo (pestaña oculta / app en background), acumulando el tramo activo. */\n pause(): void {\n if (this.lastResumeAt !== null) {\n this.activeMs += this.now() - this.lastResumeAt;\n this.lastResumeAt = null;\n }\n }\n\n /** Devuelve los ms activos acumulados desde la última lectura y reinicia (sin parar el timer). */\n consume(): number {\n if (this.lastResumeAt !== null) {\n const t = this.now();\n this.activeMs += t - this.lastResumeAt;\n this.lastResumeAt = t;\n }\n const ms = this.activeMs;\n this.activeMs = 0;\n return ms;\n }\n\n isActive(): boolean {\n return this.lastResumeAt !== null;\n }\n}\n","import type { KeyValueStorage } from '../tracking/tracking-manager';\nimport { STORAGE_KEYS } from '../tracking/tracking-manager';\n\n/** Valor de un atributo de contact (info interna del usuario que solo conoce el host). */\nexport type ContactAttributeValue = string | number | boolean;\nexport type ContactAttributes = Record<string, ContactAttributeValue>;\n\n/** Body de `POST /sdk/popups/contact`. */\nexport interface ContactBody {\n publicKey: string;\n userId: string;\n userAttributes: ContactAttributes;\n}\n\nexport interface ContactManagerOptions {\n storage: KeyValueStorage;\n publicKey: string;\n userId: string;\n /** Envío real (inyectable para tests): hace el `POST /sdk/popups/contact`. */\n post: (body: ContactBody) => Promise<void>;\n}\n\n/** Serialización estable (claves ordenadas) para el diff contra lo último enviado. */\nfunction stableSerialize(attrs: ContactAttributes): string {\n const sorted: ContactAttributes = {};\n for (const key of Object.keys(attrs).sort()) {\n sorted[key] = attrs[key];\n }\n return JSON.stringify(sorted);\n}\n\n/**\n * Gestiona los atributos de contact del usuario identificado (`userId` del init).\n * Solo envía cuando cambian respecto a lo último persistido en storage, para ahorrar\n * peticiones (el host puede llamar `setAttributes` en cada identificación sin miedo).\n */\nexport class ContactManager {\n private readonly storage: KeyValueStorage;\n private readonly publicKey: string;\n private readonly userId: string;\n private readonly post: (body: ContactBody) => Promise<void>;\n\n constructor(options: ContactManagerOptions) {\n this.storage = options.storage;\n this.publicKey = options.publicKey;\n this.userId = options.userId;\n this.post = options.post;\n }\n\n /**\n * Envía los atributos si cambiaron respecto a lo último enviado.\n * @returns `true` si se envió, `false` si no hubo cambios.\n */\n async setAttributes(attributes: ContactAttributes): Promise<boolean> {\n const serialized = stableSerialize(attributes);\n const last = this.storage.getItem(STORAGE_KEYS.contactAttributes);\n if (last === serialized) return false;\n\n await this.post({\n publicKey: this.publicKey,\n userId: this.userId,\n userAttributes: attributes,\n });\n this.storage.setItem(STORAGE_KEYS.contactAttributes, serialized);\n return true;\n }\n}\n","/**\n * Crash & error reporting (Stability #14–17) — captura de errores GESTIONADOS.\n *\n * - `reportError()`: API pública para el host (app viva) → emite `deepdots_app_crash` ya.\n * - handlers de `window` (errores no capturados): persisten a disco y se reenvían\n * en el siguiente arranque (el proceso puede morir antes del flush normal).\n *\n * El contexto de device/sesión se captura EN EL MOMENTO del crash y se guarda en el\n * record — no se lee del envelope en el replay (el replay puede ocurrir en otra\n * app_version/OS). Las dims OS/device en Web suelen ir vacías (se derivan del UA en backend).\n */\n\nimport type { KeyValueStorage } from '../tracking/tracking-manager';\n\nexport type CrashSeverity = 'fatal' | 'error' | 'warning';\n\nexport interface CrashRecord {\n crashedAt: number;\n crashType: string;\n message: string;\n stack: string;\n fatal: boolean;\n handled: boolean;\n severity: CrashSeverity;\n sessionId: string | null;\n appVersion?: string;\n osVersion?: string;\n deviceModel?: string;\n context?: Record<string, string>;\n}\n\nexport interface ReportErrorOptions {\n severity?: CrashSeverity;\n handled?: boolean;\n context?: Record<string, unknown>;\n}\n\nexport interface DeviceSnapshot {\n appVersion?: string;\n osVersion?: string;\n deviceModel?: string;\n}\n\n/** Forma mínima de `global.ErrorUtils` de React Native. */\nexport interface ReactNativeErrorUtils {\n getGlobalHandler?(): ((error: unknown, isFatal?: boolean) => void) | undefined;\n setGlobalHandler(handler: (error: unknown, isFatal?: boolean) => void): void;\n}\n\nexport interface CrashReporterOptions {\n storage: KeyValueStorage;\n /** Emite un evento deepdots_app_crash AHORA (app viva). */\n emit: (params: Record<string, unknown>) => void;\n /** Snapshot de device en el momento del crash. */\n device: () => DeviceSnapshot;\n /** session_id en el momento del crash. */\n sessionId: () => string | null;\n now?: () => number;\n /** Kill-switch de consentimiento. */\n enabled?: () => boolean;\n}\n\nconst STACK_MAX = 8000;\nconst QUEUE_KEY = 'deepdots.crash.queue';\nconst MAX_QUEUED = 20;\n\n/** Convierte un CrashRecord en los params del evento `deepdots_app_crash` (omite undefined). */\nexport function crashRecordToParams(r: CrashRecord): Record<string, unknown> {\n const params: Record<string, unknown> = {\n crashed_at: r.crashedAt,\n crash_type: r.crashType,\n message: r.message,\n stack: r.stack,\n fatal: r.fatal,\n handled: r.handled,\n severity: r.severity,\n };\n if (r.sessionId) params.crashed_session_id = r.sessionId;\n if (r.appVersion) params.crashed_app_version = r.appVersion;\n if (r.osVersion) params.crashed_os_version = r.osVersion;\n if (r.deviceModel) params.crashed_device_model = r.deviceModel;\n if (r.context) {\n for (const [k, v] of Object.entries(r.context)) params[`ctx_${k}`] = v;\n }\n return params;\n}\n\nexport class CrashReporter {\n private options: CrashReporterOptions;\n private now: () => number;\n\n constructor(options: CrashReporterOptions) {\n this.options = options;\n this.now = options.now ?? (() => Date.now());\n }\n\n private isEnabled(): boolean {\n return this.options.enabled ? this.options.enabled() : true;\n }\n\n /** Construye un CrashRecord capturando contexto en el momento del crash. */\n private buildRecord(\n error: unknown,\n severity: CrashSeverity,\n handled: boolean,\n fatal: boolean,\n context?: Record<string, unknown>,\n ): CrashRecord {\n const err = error as { name?: string; message?: string; stack?: string };\n const isErr = error instanceof Error;\n const dev = this.options.device();\n const ctx = context\n ? Object.fromEntries(Object.entries(context).map(([k, v]) => [k, String(v)]))\n : undefined;\n return {\n crashedAt: this.now(),\n crashType: (isErr && err.name) || 'Error',\n message: isErr ? String(err.message ?? '') : String(error),\n stack: (isErr && typeof err.stack === 'string' ? err.stack : '').slice(0, STACK_MAX),\n fatal,\n handled,\n severity,\n sessionId: this.options.sessionId(),\n appVersion: dev.appVersion,\n osVersion: dev.osVersion,\n deviceModel: dev.deviceModel,\n context: ctx,\n };\n }\n\n /** API pública del host: reporta un error (app viva) → emite el evento ya. */\n reportError(error: unknown, options: ReportErrorOptions = {}): void {\n if (!this.isEnabled()) return;\n const severity = options.severity ?? 'error';\n const handled = options.handled ?? true;\n const fatal = severity === 'fatal';\n const record = this.buildRecord(error, severity, handled, fatal, options.context);\n this.options.emit(crashRecordToParams(record));\n }\n\n /** Captura un error no manejado (fatal) → persiste a disco para replay en el siguiente arranque. */\n captureUnhandled(error: unknown): void {\n this.persist(this.buildRecord(error, 'fatal', false, true));\n }\n\n /** Persiste un crash no capturado a disco para reenviarlo en el siguiente arranque. */\n private persist(record: CrashRecord): void {\n let queue: CrashRecord[] = [];\n try {\n const raw = this.options.storage.getItem(QUEUE_KEY);\n if (raw) queue = JSON.parse(raw) as CrashRecord[];\n if (!Array.isArray(queue)) queue = [];\n } catch {\n queue = [];\n }\n queue.push(record);\n if (queue.length > MAX_QUEUED) queue = queue.slice(queue.length - MAX_QUEUED);\n try {\n this.options.storage.setItem(QUEUE_KEY, JSON.stringify(queue));\n } catch {\n /* storage lleno / no disponible — se pierde el crash, no rompemos la app */\n }\n }\n\n /** Lee y vacía la cola de crashes pendientes (llamado en init para el replay). */\n drainPendingCrashes(): CrashRecord[] {\n let queue: CrashRecord[] = [];\n try {\n const raw = this.options.storage.getItem(QUEUE_KEY);\n if (raw) queue = JSON.parse(raw) as CrashRecord[];\n if (!Array.isArray(queue)) queue = [];\n } catch {\n queue = [];\n }\n if (queue.length) {\n try { this.options.storage.removeItem(QUEUE_KEY); } catch { /* noop */ }\n }\n return queue;\n }\n\n /** Instala los handlers globales de errores no capturados (no-op sin `window`). */\n install(): void {\n // En React Native `window` existe pero NO tiene addEventListener; comprobamos\n // la capacidad, no solo la existencia de `window`. En RN el host usa\n // installReactNative(ErrorUtils) para capturar los errores no manejados.\n if (typeof window === 'undefined' || typeof window.addEventListener !== 'function') return;\n window.addEventListener('error', (e: ErrorEvent) => {\n if (!this.isEnabled()) return;\n this.captureUnhandled(e.error ?? e.message ?? 'error');\n });\n window.addEventListener('unhandledrejection', (e: PromiseRejectionEvent) => {\n if (!this.isEnabled()) return;\n this.captureUnhandled(e.reason ?? 'unhandledrejection');\n });\n }\n\n /** Engancha `global.ErrorUtils` de RN (no hay `window`): persiste y encadena al handler previo. */\n installReactNative(errorUtils: ReactNativeErrorUtils): void {\n const previous = errorUtils.getGlobalHandler?.();\n errorUtils.setGlobalHandler((error: unknown, isFatal?: boolean) => {\n if (this.isEnabled()) this.captureUnhandled(error);\n previous?.(error, isFatal);\n });\n }\n\n /** @internal Test seam: ejercita el camino de persistencia (window handlers no son testeables en vitest). */\n _persistForTest(error: unknown): void {\n this.captureUnhandled(error);\n }\n}\n","/**\n * Messaging (#18–22): tracking de notificaciones del host (push / in-app).\n * Un único evento reservado `deepdots_message` con un campo `stage` discriminador;\n * el funnel se correlaciona por `message_id` y se agrupa por `message_title`.\n */\n\nexport type MessageStage = 'delivered' | 'clicked' | 'converted';\n\nexport interface TrackMessageOptions {\n /** Identificador del mensaje/notificación — correlaciona el funnel delivered→clicked→converted. */\n id: string;\n /** Título del mensaje — dimensión de agrupación de #18–22. */\n title: string;\n /** Canal de entrega. */\n channel: 'push' | 'in_app';\n /** Nombre de la campaña (opcional). */\n campaign?: string;\n /** Valor de conversión (opcional, típico en `stage: 'converted'`). */\n value?: number;\n currency?: string;\n /** Parámetros libres adicionales. */\n params?: Record<string, unknown>;\n}\n\n/** Construye los params del evento `deepdots_message` (omite opcionales ausentes). */\nexport function buildMessageParams(stage: MessageStage, o: TrackMessageOptions): Record<string, unknown> {\n const p: Record<string, unknown> = {\n stage,\n message_id: o.id,\n message_title: o.title,\n channel: o.channel,\n };\n if (o.campaign) p.campaign = o.campaign;\n if (o.value !== undefined) p.value = o.value;\n if (o.currency) p.currency = o.currency;\n return { ...p, ...(o.params ?? {}) };\n}\n","/**\n * Auto-wiring de React Native: concentra TODA la configuración en el SDK para que el\n * host solo tenga que envolver su app en un `<DeepdotsProvider config={...}>`.\n *\n * No importa React ni librerías nativas: el host (o el Provider) le pasa los módulos\n * nativos que tenga instalados (MMKV, device-info, AppState). Todo es opcional y degrada\n * con elegancia (sin MMKV → in-memory; sin device-info → sin device info).\n */\nimport type { DeepdotsPopups } from '../core/deepdots-popups';\nimport type { DeepdotsInitParams } from '../types';\nimport type { KeyValueStorage } from '../tracking/tracking-manager';\nimport type { DeviceInfo } from '../analytics/device-info';\nimport type { PopupRenderer } from '../platform/renderer';\nimport type { ReactNativeErrorUtils } from '../analytics/crash-reporter';\n\n/** Forma mínima de `react-native-mmkv` (instancia MMKV). */\nexport interface MmkvLike {\n getString(key: string): string | undefined | null;\n set(key: string, value: string): void;\n delete(key: string): void;\n}\n\n/** Forma mínima de `react-native-device-info`. */\nexport interface DeviceInfoLike {\n isTablet?: () => boolean;\n getSystemVersion?: () => string;\n getDeviceId?: () => string;\n getVersion?: () => string;\n}\n\n/** Forma mínima de `AppState` de react-native. */\nexport interface AppStateLike {\n addEventListener(type: 'change', listener: (state: string) => void): { remove: () => void } | void;\n}\n\nexport interface ReactNativeSetupDeps {\n mmkv?: MmkvLike | null;\n deviceInfo?: DeviceInfoLike | null;\n appState?: AppStateLike | null;\n platform?: 'web' | 'android' | 'ios';\n renderer?: PopupRenderer;\n /** `global.ErrorUtils` de RN (para capturar errores JS no manejados). Default: `globalThis.ErrorUtils`. */\n errorUtils?: ReactNativeErrorUtils | null;\n}\n\n/** Adaptador KeyValueStorage (síncrono) sobre una instancia de MMKV. */\nexport function mmkvStorage(mmkv: MmkvLike): KeyValueStorage {\n return {\n getItem: (k) => mmkv.getString(k) ?? null,\n setItem: (k, v) => mmkv.set(k, v),\n removeItem: (k) => mmkv.delete(k),\n };\n}\n\n/** Recoge device info desde react-native-device-info (Technology #11–13). */\nexport function collectRnDevice(d: DeviceInfoLike): DeviceInfo {\n return {\n device_type: d.isTablet?.() ? 'tablet' : 'mobile',\n os_version: d.getSystemVersion?.(),\n device_model: d.getDeviceId?.(),\n app_version: d.getVersion?.(),\n };\n}\n\n/**\n * Configura el SDK para React Native en una sola llamada: storage persistente (MMKV),\n * device info, platform, init y lifecycle (AppState → onForeground/onBackground).\n * Devuelve una función de limpieza (quita el listener de AppState).\n */\nexport function setupReactNative(\n sdk: DeepdotsPopups,\n config: DeepdotsInitParams,\n deps: ReactNativeSetupDeps = {},\n): () => void {\n if (deps.renderer) sdk.setRenderer(deps.renderer);\n\n const storage = deps.mmkv ? mmkvStorage(deps.mmkv) : config.storage;\n const device = deps.deviceInfo ? collectRnDevice(deps.deviceInfo) : config.device;\n const platform = deps.platform ?? config.platform;\n\n sdk.init({ ...config, storage, device, platform });\n\n // Captura de errores JS no manejados en RN (no hay `window`): usa el ErrorUtils inyectado\n // o el global del runtime RN. Degrada si no existe.\n const errorUtils =\n deps.errorUtils ?? (globalThis as { ErrorUtils?: ReactNativeErrorUtils }).ErrorUtils;\n if (errorUtils && typeof errorUtils.setGlobalHandler === 'function') {\n sdk.installReactNativeCrashHandler(errorUtils);\n }\n\n let subscription: { remove: () => void } | void;\n if (deps.appState?.addEventListener) {\n subscription = deps.appState.addEventListener('change', (state) => {\n if (state === 'active') sdk.onForeground();\n else sdk.onBackground(); // 'background' | 'inactive'\n });\n }\n\n return () => {\n if (subscription && typeof subscription.remove === 'function') subscription.remove();\n };\n}\n"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["clean","module","e","t","i","n","r","s","a","o","l","d","c","u","p","v","h","f","m","g","magicfeedback","renderPopup","renderPopup"]}
|