wineater-bot 3.9.4 → 4.0.0-beta.3
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/.prettierignore +9 -0
- package/.prettierrc +16 -0
- package/README.md +86 -0
- package/dist/wineater-chatbot.css +1 -0
- package/dist/wineater-chatbot.mjs +6493 -5129
- package/dist/wineater-chatbot.umd.js +40 -985
- package/docs/SVELTE.md +146 -0
- package/e2e/demo.test.ts +6 -0
- package/eslint.config.js +41 -0
- package/index.html +11 -3
- package/package.json +30 -5
- package/playwright.config.ts +9 -0
- package/pnpm-workspace.yaml +2 -0
- package/src/App.svelte +394 -0
- package/src/App.svelte.test.ts +13 -0
- package/src/components/Footer.svelte +131 -0
- package/src/components/Header.svelte +92 -0
- package/src/components/Loader.svelte +62 -0
- package/src/components/Search.svelte +188 -0
- package/src/components/WinePopup.svelte +192 -0
- package/src/components/WineTile.svelte +331 -0
- package/src/demo.spec.ts +13 -0
- package/src/index.js +4 -36
- package/src/services/analytics/analytics.ts +103 -0
- package/src/{js/widget/widget-events.js → services/analytics/constants.ts} +0 -2
- package/src/services/api/api.ts +112 -0
- package/src/services/api/deserialize.ts +102 -0
- package/src/services/i18n/i18n.ts +134 -0
- package/src/services/i18n/translations.json +521 -0
- package/src/services/store/app-store.svelte.ts +84 -0
- package/tsconfig.json +23 -0
- package/vite.config.js +69 -19
- package/vitest-setup-client.ts +2 -0
- package/src/js/analytics.js +0 -117
- package/src/js/api.js +0 -138
- package/src/js/i18n.js +0 -703
- package/src/js/widget/widget-language.js +0 -107
- package/src/js/widget/widget-search.js +0 -68
- package/src/js/widget/widget-styles.js +0 -855
- package/src/js/widget/widget-ui.js +0 -186
- package/src/js/widget.js +0 -241
|
@@ -1,989 +1,44 @@
|
|
|
1
|
-
(function(Ke){typeof define=="function"&&define.amd?define(Ke):Ke()})(function(){"use strict";var ui,hi;function Ke(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}function Nt(t,e,n){console.log(t,n);let s="";if(n){const i=new Date;i.setTime(i.getTime()+n*24*60*60*1e3),s="; expires="+i.toUTCString()}document.cookie=t+"="+(e||"")+s+"; path=/; secure; samesite=strict"}function Ot(t){const e=t+"=",n=document.cookie.split(";");for(let s=0;s<n.length;s++){let i=n[s];for(;i.charAt(0)===" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return i.substring(e.length,i.length)}return null}function Un(){const t="uniqueUserID";let e=Ot(t);return e||(e=Ke(),Nt(t,e,365)),e}function bi(t,e,n={},s={}){const i="https://admin-api.wineater.com/api/widget-events";let r=Ot("uniqueUserID");r||(r=Un());const o={user_agent:navigator.userAgent,screen_width:window.screen.width,screen_height:window.screen.height,language:navigator.language,platform:navigator.platform},u=new Date().toISOString();let c=Ot("sessionID");c||(c=Ke(),Nt("sessionID",c,1));const l={event_type:t,store_id:e,session_id:c,event_time:u,data:n,meta:{...s,user_id:r},device_info:o,region:navigator.language.split("-")[1]||null,language:navigator.language.split("-")[0]||"en"};return fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)}).then(a=>a.ok?a.json():a.json().then(d=>{throw new Error(d.message||"Failed to track widget event")})).catch(a=>{throw console.error("Widget event tracking error:",a),a})}var Me=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function yi(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Hn={exports:{}};(function(t,e){(function(n,s){s(e)})(Me,function(n){var s={getItemSync:function(b){try{return localStorage.getItem(b)||null}catch{return null}},getItem:function(b,f){var h=this;return new Promise(function(m,g){try{var S=h.getItemSync(b);f==null||f(null,S),m(S)}catch(k){f&&f(k,null),g(k)}})},setItem:function(b,f,h){return new Promise(function(m,g){try{localStorage.setItem(b,f),h&&h(null,f),m(f)}catch(S){h&&h(S,null),g(S)}})}},i=function(){return i=Object.assign||function(b){for(var f,h=1,m=arguments.length;h<m;h++)for(var g in f=arguments[h])Object.prototype.hasOwnProperty.call(f,g)&&(b[g]=f[g]);return b},i.apply(this,arguments)};function r(b,f,h,m){return new(h||(h=Promise))(function(g,S){function k(W){try{B(m.next(W))}catch(O){S(O)}}function A(W){try{B(m.throw(W))}catch(O){S(O)}}function B(W){var O;W.done?g(W.value):(O=W.value,O instanceof h?O:new h(function(q){q(O)})).then(k,A)}B((m=m.apply(b,f||[])).next())})}function o(b,f){var h,m,g,S,k={label:0,sent:function(){if(1&g[0])throw g[1];return g[1]},trys:[],ops:[]};return S={next:A(0),throw:A(1),return:A(2)},typeof Symbol=="function"&&(S[Symbol.iterator]=function(){return this}),S;function A(B){return function(W){return function(O){if(h)throw new TypeError("Generator is already executing.");for(;k;)try{if(h=1,m&&(g=2&O[0]?m.return:O[0]?m.throw||((g=m.return)&&g.call(m),0):m.next)&&!(g=g.call(m,O[1])).done)return g;switch(m=0,g&&(O=[2&O[0],g.value]),O[0]){case 0:case 1:g=O;break;case 4:return k.label++,{value:O[1],done:!1};case 5:k.label++,m=O[1],O=[0];continue;case 7:O=k.ops.pop(),k.trys.pop();continue;default:if(g=k.trys,!((g=g.length>0&&g[g.length-1])||O[0]!==6&&O[0]!==2)){k=0;continue}if(O[0]===3&&(!g||O[1]>g[0]&&O[1]<g[3])){k.label=O[1];break}if(O[0]===6&&k.label<g[1]){k.label=g[1],g=O;break}if(g&&k.label<g[2]){k.label=g[2],k.ops.push(O);break}g[2]&&k.ops.pop(),k.trys.pop();continue}O=f.call(b,k)}catch(q){O=[6,q],m=0}finally{h=g=0}if(5&O[0])throw O[1];return{value:O[0]?O[1]:void 0,done:!0}}([B,W])}}}function u(b,f,h){if(h||arguments.length===2)for(var m,g=0,S=f.length;g<S;g++)!m&&g in f||(m||(m=Array.prototype.slice.call(f,0,g)),m[g]=f[g]);return b.concat(m||Array.prototype.slice.call(f))}var c=function b(f,h){if(f===h)return!0;if(f&&h&&typeof f=="object"&&typeof h=="object"){if(f.constructor!==h.constructor)return!1;var m,g,S;if(Array.isArray(f)){if((m=f.length)!=h.length)return!1;for(g=m;g--!=0;)if(!b(f[g],h[g]))return!1;return!0}if(f.constructor===RegExp)return f.source===h.source&&f.flags===h.flags;if(f.valueOf!==Object.prototype.valueOf)return f.valueOf()===h.valueOf();if(f.toString!==Object.prototype.toString)return f.toString()===h.toString();if((m=(S=Object.keys(f)).length)!==Object.keys(h).length)return!1;for(g=m;g--!=0;)if(!Object.prototype.hasOwnProperty.call(h,S[g]))return!1;for(g=m;g--!=0;){var k=S[g];if(!b(f[k],h[k]))return!1}return!0}return f!=f&&h!=h};function l(b,f){var h=Object.keys(f||{}).filter(function(m){var g=b==null?void 0:b[m],S=f==null?void 0:f[m];return!c(g,S)});return Object.keys(b||{}).filter(function(m){Object.keys(f||{}).includes(m)||h.push(m)}),Object.keys(h).length?h:null}var a,d;function p(b,f,h){var m="shortString",g=!0;typeof h=="number"&&(m="javaDouble",g=!1),b[m]=b[m]||{},b[m][f]=g?h+"":h}function v(b){return!!b&&typeof b=="object"&&b.value!==void 0}function w(b){return Object.fromEntries(Object.entries(b).map(function(f){var h=f[0],m=f[1];return[h,v(m)?m:{value:m}]}))}function y(b){return i(i({},b),{identity:b.identity?i(i({},b.identity),{traits:w(b.identity.traits||{})}):void 0})}(function(b){b.NONE="NONE",b.DEFAULT_FLAGS="DEFAULT_FLAGS",b.CACHE="CACHE",b.SERVER="SERVER"})(a||(a={}));var x,C=null,F="BULLET_TRAIN_DB",R="BULLET_TRAIN_EVENT",E="https://edge.api.flagsmith.com/api/v1/",N="flagsmith_value_",D="flagsmith_enabled_",L="flagsmith_trait_",I=function(){function b(f){var h=this;this._trigger=null,this._triggerLoadingState=null,this.timestamp=null,this.isLoading=!1,this.eventSource=null,this.getFlags=function(){var m=h,g=m.api,S=m.evaluationContext;h.log("Get Flags"),h.isLoading=!0,h.loadingState.isFetching||h.setLoadingState(i(i({},h.loadingState),{isFetching:!0}));var k="".concat(h.getContext().identity),A=function(B){var W,O,q,ee;if(B&&k==="".concat(h.getContext().identity)){var oe=B.flags,te=B.traits,ne=B.identifier;h.isLoading=!1;var ue={},he={};te=te||[],(oe=oe||[]).forEach(function(K){ue[K.feature.name.toLowerCase().replace(/ /g,"_")]={id:K.feature.id,enabled:K.enabled,value:K.feature_state_value}}),te.forEach(function(K){he[K.trait_key.toLowerCase().replace(/ /g,"_")]={transient:K.transient,value:K.trait_value}}),h.oldFlags=i({},h.flags);var we=l(h.oldFlags,ue),Ze=l((W=h.evaluationContext.identity)===null||W===void 0?void 0:W.traits,he);if((ne||Object.keys(he).length)&&(h.evaluationContext.identity={traits:he},ne&&(h.evaluationContext.identity.identifier=ne)),h.flags=ue,h.updateStorage(),h._onChange(h.oldFlags,{isFromServer:!0,flagsChanged:we,traitsChanged:Ze},h._loadedState(null,a.SERVER)),h.datadogRum)try{if(h.datadogRum.trackTraits){var et={};Object.keys(((O=h.evaluationContext.identity)===null||O===void 0?void 0:O.traits)||{}).map(function(K){et[L+K]=h.getTrait(K)});var qe=i(i(i({},h.datadogRum.client.getUser()),{id:h.datadogRum.client.getUser().id||((q=h.evaluationContext.identity)===null||q===void 0?void 0:q.identifier)}),et);h.log("Setting Datadog user",qe),h.datadogRum.client.setUser(qe)}}catch(K){console.error(K)}if(h.dtrum)try{var ie={javaDouble:{},date:{},shortString:{},javaLongOrObject:{}};Object.keys(h.flags).map(function(K){p(ie,N+K,h.getValue(K,{skipAnalytics:!0})),p(ie,D+K,h.hasFeature(K,{skipAnalytics:!0}))}),Object.keys(((ee=h.evaluationContext.identity)===null||ee===void 0?void 0:ee.traits)||{}).map(function(K){p(ie,L+K,h.getTrait(K))}),h.log("Sending javaLongOrObject traits to dynatrace",ie.javaLongOrObject),h.log("Sending date traits to dynatrace",ie.date),h.log("Sending shortString traits to dynatrace",ie.shortString),h.log("Sending javaDouble to dynatrace",ie.javaDouble),h.dtrum.sendSessionProperties(ie.javaLongOrObject,ie.date,ie.shortString,ie.javaDouble)}catch(K){console.error(K)}}};return S.identity?Promise.all([S.identity.traits&&Object.keys(S.identity.traits).length||!S.identity.identifier?h.getJSON(g+"identities/","POST",JSON.stringify({identifier:S.identity.identifier,transient:S.identity.transient,traits:Object.entries(S.identity.traits).map(function(B){var W=B[0],O=B[1];return{trait_key:W,trait_value:O==null?void 0:O.value,transient:O==null?void 0:O.transient}}).filter(function(B){return B.trait_value!==void 0||(h.log("Warning - attempted to set an undefined trait value for key",B.trait_key),!1)})})):h.getJSON(g+"identities/?identifier="+encodeURIComponent(S.identity.identifier)+(S.identity.transient?"&transient=true":""))]).then(function(B){return h.evaluationContext.identity=i(i({},h.evaluationContext.identity),{traits:{}}),A(B==null?void 0:B[0])}).catch(function(B){var W=B.message,O=new Error(W);return Promise.reject(O)}):h.getJSON(g+"flags/").then(function(B){return A({flags:B,traits:void 0})})},this.analyticsFlags=function(){var m=h.api;if(h.evaluationEvent&&h.evaluationContext.environment&&h.evaluationEvent[h.evaluationContext.environment.apiKey])return h.evaluationEvent&&Object.getOwnPropertyNames(h.evaluationEvent).length!==0&&Object.getOwnPropertyNames(h.evaluationEvent[h.evaluationContext.environment.apiKey]).length!==0?h.getJSON(m+"analytics/flags/","POST",JSON.stringify(h.evaluationEvent[h.evaluationContext.environment.apiKey])).then(function(g){if(h.evaluationContext.environment){var S=h.getState();h.evaluationEvent||(h.evaluationEvent={}),h.evaluationEvent[h.evaluationContext.environment.apiKey]={},h.setState(i(i({},S),{evaluationEvent:h.evaluationEvent})),h.updateEventStorage()}}).catch(function(g){h.log("Exception fetching evaluationEvent",g)}):void 0},this.datadogRum=null,this.loadingState={isLoading:!0,isFetching:!0,error:null,source:a.NONE},this.canUseStorage=!1,this.analyticsInterval=null,this.api=null,this.cacheFlags=!1,this.ts=null,this.enableAnalytics=!1,this.enableLogs=!1,this.evaluationContext={},this.evaluationEvent=null,this.flags=null,this.getFlagInterval=null,this.headers=null,this.initialised=!1,this.oldFlags=null,this.onChange=null,this.onError=null,this.ticks=null,this.timer=null,this.dtrum=null,this.withTraits=null,this.cacheOptions={ttl:0,skipAPI:!1,loadStale:!1},this.getValue=function(m,g,S){var k=h.flags&&h.flags[m.toLowerCase().replace(/ /g,"_")],A=null;if(k&&(A=k.value),g!=null&&g.skipAnalytics||S||h.evaluateFlag(m,"VALUE"),A===null&&(g==null?void 0:g.fallback)!==void 0)return g.fallback;if(g!=null&&g.json)try{return A===null?(h.log("Tried to parse null flag as JSON: "+m),null):JSON.parse(A)}catch{return g.fallback}return A},this.getTrait=function(m){var g,S;return((g=h.evaluationContext.identity)===null||g===void 0?void 0:g.traits)&&((S=h.evaluationContext.identity.traits[m.toLowerCase().replace(/ /g,"_")])===null||S===void 0?void 0:S.value)},this.getAllTraits=function(){var m;return Object.fromEntries(Object.entries(((m=h.evaluationContext.identity)===null||m===void 0?void 0:m.traits)||{}).map(function(g){var S=g[0],k=g[1];return[S,k==null?void 0:k.value]}))},this.setContext=function(m){var g=y(m);return h.evaluationContext=i(i({},g),{environment:g.environment||h.evaluationContext.environment}),h.initialised?h.getFlags():Promise.resolve()},this.getContext=function(){return h.evaluationContext},this.updateContext=function(m){return h.setContext(i(i({},h.getContext()),m))},this.setTrait=function(m,g){var S;if(h.api)return h.setContext(i(i({},h.evaluationContext),{identity:i(i({},h.evaluationContext.identity),{traits:i(i({},(S=h.evaluationContext.identity)===null||S===void 0?void 0:S.traits),w(Object.fromEntries([[m,g]])))})}))},this.setTraits=function(m){var g;if(h.api)return h.setContext(i(i({},h.evaluationContext),{identity:i(i({},h.evaluationContext.identity),{traits:i(i({},(g=h.evaluationContext.identity)===null||g===void 0?void 0:g.traits),Object.fromEntries(Object.entries(m).map(function(S){var k=S[0],A=S[1];return[k,v(A)?A:{value:A}]})))})}));console.error("Attempted to setTraits a user before calling flagsmith.init. Call flagsmith.init first, if you wish to prevent it sending a request for flags, call init with preventFetch:true.")},this.hasFeature=function(m,g){var S=typeof g=="object",k=h.flags&&h.flags[m.toLowerCase().replace(/ /g,"_")],A=!1;return!k&&S&&g.fallback!==void 0?A=g==null?void 0:g.fallback:k&&k.enabled&&(A=!0),(S&&!g.skipAnalytics||!g)&&h.evaluateFlag(m,"ENABLED"),A},this.getJSON=function(m,g,S){var k,A=h;A.evaluationContext;var B=A.headers,W={method:g||"GET",body:S,cache:"no-cache",headers:{}};h.evaluationContext.environment&&(W.headers["X-Environment-Key"]=h.evaluationContext.environment.apiKey),g&&g!=="GET"&&(W.headers["Content-Type"]="application/json; charset=utf-8"),B&&Object.assign(W.headers,B),d||console.error("Flagsmith: fetch is undefined, please specify a fetch implementation into flagsmith.init to support SSR.");var O="".concat((k=h.evaluationContext.identity)===null||k===void 0?void 0:k.identifier);return d(m,W).then(function(q){var ee,oe,te="".concat((ee=h.evaluationContext.identity)===null||ee===void 0?void 0:ee.identifier);if(O===te){var ne=(oe=q.headers)===null||oe===void 0?void 0:oe.get("x-flagsmith-document-updated-at");if(ne)try{var ue=parseFloat(ne);if(isNaN(ue))return Promise.reject("Failed to parse x-flagsmith-document-updated-at");h.timestamp=ue}catch(he){h.log(he,"Failed to parse x-flagsmith-document-updated-at",ne)}return h.log("Fetch response: "+q.status+" "+(g||"GET")+0+m),q.text().then(function(he){var we=he;try{we=JSON.parse(he)}catch{}return!we&&q.status&&(we="API Response: ".concat(q.status)),q.status&&q.status>=200&&q.status<300?we:Promise.reject(new Error(we))})}h.log("Received response with identity mismatch, ignoring response. Requested: ".concat(O,", Current: ").concat(te))})},this.evaluateFlag=function(m,g){if(h.datadogRum&&(h.datadogRum.client.addFeatureFlagEvaluation?g==="VALUE"?h.datadogRum.client.addFeatureFlagEvaluation(N+m,h.getValue(m,{},!0)):h.datadogRum.client.addFeatureFlagEvaluation(D+m,h.hasFeature(m,!0)):console.error("Flagsmith: Your datadog RUM client does not support the function addFeatureFlagEvaluation, please update it.")),h.enableAnalytics){if(!h.evaluationEvent||!h.evaluationContext.environment)return;h.evaluationEvent[h.evaluationContext.environment.apiKey]||(h.evaluationEvent[h.evaluationContext.environment.apiKey]={}),h.evaluationEvent[h.evaluationContext.environment.apiKey][m]===void 0&&(h.evaluationEvent[h.evaluationContext.environment.apiKey][m]=0),h.evaluationEvent[h.evaluationContext.environment.apiKey][m]+=1}h.updateEventStorage()},this._onChange=function(m,g,S){var k,A;h.setLoadingState(S),(k=h.onChange)===null||k===void 0||k.call(h,m,g,h.loadingState),(A=h._trigger)===null||A===void 0||A.call(h)},d=f.fetch?f.fetch:typeof fetch<"u"?fetch:Me==null?void 0:Me.fetch,this.canUseStorage=typeof window<"u"||!!f.browserlessStorage,this.log("Constructing flagsmith instance "+f),f.eventSource&&(x=f.eventSource),f.AsyncStorage&&(C=f.AsyncStorage)}return b.prototype.init=function(f){var h,m,g;return r(this,void 0,void 0,function(){var S,k,A,B,W,O,q,ee,oe,te,ne,ue,he,we,Ze,et,qe,ie,K,wn,tt,di,nt,Sn,fi,pi,xn,gi,kn,st,Ve,mi,re=this;return o(this,function(ge){switch(ge.label){case 0:S=y(f.evaluationContext||this.evaluationContext),ge.label=1;case 1:if(ge.trys.push([1,13,,14]),k=f.environmentID,A=f.api,B=A===void 0?E:A,W=f.headers,O=f.onChange,q=f.cacheFlags,ee=f.datadogRum,oe=f.onError,te=f.defaultFlags,ne=f.fetch,ue=f.preventFetch,he=f.enableLogs,we=f.enableDynatrace,Ze=f.enableAnalytics,et=f.realtime,qe=f.eventSourceUrl,ie=qe===void 0?"https://realtime.flagsmith.com/":qe,K=f.AsyncStorage,wn=f.identity,tt=f.traits,di=f.state,nt=f.cacheOptions,Sn=f.angularHttpClient,fi=f._trigger,pi=f._triggerLoadingState,S.environment=k?{apiKey:k}:S.environment,!S.environment||!S.environment.apiKey)throw new Error("Please provide `evaluationContext.environment` with non-empty `apiKey`");if(S.identity=wn||tt?{identifier:wn,traits:tt?Object.fromEntries(Object.entries(tt).map(function(de){return[de[0],{value:de[1]}]})):{}}:S.identity,this.evaluationContext=S,this.api=B,this.headers=W,this.getFlagInterval=null,this.analyticsInterval=null,this.onChange=O,xn="Wrong Flagsmith Configuration: preventFetch is true and no defaulFlags provided",this._trigger=fi||this._trigger,this._triggerLoadingState=pi||this._triggerLoadingState,this.onError=function(de){re.setLoadingState(i(i({},re.loadingState),{isFetching:!1,isLoading:!1,error:de})),oe==null||oe(de)},this.enableLogs=he||!1,this.cacheOptions=nt?{skipAPI:!!nt.skipAPI,ttl:nt.ttl||0,loadStale:!!nt.loadStale}:this.cacheOptions,!this.cacheOptions.ttl&&this.cacheOptions.skipAPI&&console.warn("Flagsmith: you have set a cache ttl of 0 and are skipping API calls, this means the API will not be hit unless you clear local storage."),ne&&(d=ne),this.enableAnalytics=Ze||!1,this.flags=Object.assign({},te)||{},this.datadogRum=ee||null,this.initialised=!0,this.ticks=1e4,this.timer=this.enableLogs?new Date().valueOf():null,this.cacheFlags=C!==void 0&&!!q,K&&(C=K),et&&typeof window<"u"&&this.setupRealtime(ie,S.environment.apiKey),Object.keys(this.flags).length&&(this.loadingState=i(i({},this.loadingState),{isLoading:!1,source:a.DEFAULT_FLAGS})),this.setState(di),this.log("Initialising with properties",f,this),we&&(typeof dtrum>"u"?console.error("You have attempted to enable dynatrace but dtrum is undefined, please check you have the Dynatrace RUM JavaScript API installed."):this.dtrum=dtrum),Sn&&(d=function(de){return function(Se,xe){var Ne=xe.headers,Y=xe.method,Ge=xe.body;return new Promise(function(Ae){switch(Y){case"GET":return de.get(Se,{headers:Ne}).subscribe(function(Ee){Ae({ok:!0,text:function(){return Promise.resolve(Ee)}})});case"POST":case"PUT":return de.post(Se,Ge,{headers:Ne}).subscribe(function(Ee){Ae({ok:!0,text:function(){return Promise.resolve(Ee)}})})}})}}(Sn)),C&&this.canUseStorage&&C.getItem(R).then(function(de){try{re.evaluationEvent=JSON.parse(de)||{}}catch{re.evaluationEvent={}}re.analyticsInterval=setInterval(re.analyticsFlags,re.ticks)}),this.enableAnalytics&&(this.analyticsInterval&&clearInterval(this.analyticsInterval),C&&this.canUseStorage&&C.getItem(R,function(de,Se){if(Se&&re.evaluationContext.environment){var xe=JSON.parse(Se);if(xe[re.evaluationContext.environment.apiKey]){var Ne=re.getState();re.log("Retrieved events from cache",Se),re.setState(i(i({},Ne),{evaluationEvent:xe[re.evaluationContext.environment.apiKey]}))}}})),!q)return[3,9];if(!C||!this.canUseStorage)return[3,8];gi=function(de,Se){return r(re,void 0,void 0,function(){var xe,Ne,Y,Ge,Ae,Ee,En,vi,Tn,In,Cn,_n,Nn,On,Rn,Dn,Ln,An,Mn,Fn,Pn,Bn,jn,zn;return o(this,function(Oe){switch(Oe.label){case 0:if(!Se)return[3,7];xe=null,Ne=null,Oe.label=1;case 1:return Oe.trys.push([1,5,,6]),Y=JSON.parse(Se),Ge=!1,Ae=!1,Y&&Y.api===this.api&&((In=(Tn=Y.evaluationContext)===null||Tn===void 0?void 0:Tn.environment)===null||In===void 0?void 0:In.apiKey)===((Cn=this.evaluationContext.environment)===null||Cn===void 0?void 0:Cn.apiKey)&&(Ee=!0,this.evaluationContext.identity&&((Nn=(_n=Y.evaluationContext)===null||_n===void 0?void 0:_n.identity)===null||Nn===void 0?void 0:Nn.identifier)!==this.evaluationContext.identity.identifier&&(this.log("Ignoring cache, identity has changed from "+((Rn=(On=Y.evaluationContext)===null||On===void 0?void 0:On.identity)===null||Rn===void 0?void 0:Rn.identifier)+" to "+this.evaluationContext.identity.identifier),Ee=!1),this.cacheOptions.ttl&&(!Y.ts||new Date().valueOf()-Y.ts>this.cacheOptions.ttl)&&(Y.ts&&!this.cacheOptions.loadStale?(this.log("Ignoring cache, timestamp is too old ts:"+Y.ts+" ttl: "+this.cacheOptions.ttl+" time elapsed since cache: "+(new Date().valueOf()-Y.ts)+"ms"),Ee=!1):Y.ts&&this.cacheOptions.loadStale&&(this.log("Loading stale cache, timestamp ts:"+Y.ts+" ttl: "+this.cacheOptions.ttl+" time elapsed since cache: "+(new Date().valueOf()-Y.ts)+"ms"),Ae=!0,Ee=!0)),Ee&&(Ge=!0,Ne=l((Dn=this.evaluationContext.identity)===null||Dn===void 0?void 0:Dn.traits,(An=(Ln=Y.evaluationContext)===null||Ln===void 0?void 0:Ln.identity)===null||An===void 0?void 0:An.traits),xe=l(this.flags,Y.flags),this.setState(i(i({},Y),{evaluationContext:y(i(i({},Y.evaluationContext),{identity:!((Mn=Y.evaluationContext)===null||Mn===void 0)&&Mn.identity?i(i({},(Fn=Y.evaluationContext)===null||Fn===void 0?void 0:Fn.identity),{traits:i(i({},((Bn=(Pn=Y.evaluationContext)===null||Pn===void 0?void 0:Pn.identity)===null||Bn===void 0?void 0:Bn.traits)||{}),tt||{})}):void 0}))})),this.log("Retrieved flags from cache",Y))),Ge?(En=!ue&&(!this.cacheOptions.skipAPI||Ae),this._onChange(null,{isFromServer:!1,flagsChanged:xe,traitsChanged:Ne},this._loadedState(null,a.CACHE,En)),this.oldFlags=this.flags,this.cacheOptions.skipAPI&&Ge&&!Ae&&this.log("Skipping API, using cache"),En&&this.getFlags(),[3,4]):[3,2];case 2:return ue?[3,4]:[4,this.getFlags()];case 3:Oe.sent(),Oe.label=4;case 4:return[3,6];case 5:return vi=Oe.sent(),this.log("Exception fetching cached logs",vi),[3,6];case 6:return[3,10];case 7:return ue?[3,9]:[4,this.getFlags()];case 8:return Oe.sent(),[3,10];case 9:if(te)this._onChange(null,{isFromServer:!1,flagsChanged:l({},this.flags),traitsChanged:l({},(jn=this.evaluationContext.identity)===null||jn===void 0?void 0:jn.traits)},this._loadedState(null,a.DEFAULT_FLAGS));else{if(!this.flags)throw new Error(xn);this._onChange(null,{isFromServer:!1,flagsChanged:l({},this.flags),traitsChanged:l({},(zn=this.evaluationContext.identity)===null||zn===void 0?void 0:zn.traits)},this._loadedState(null,a.DEFAULT_FLAGS))}Oe.label=10;case 10:return[2]}})})},ge.label=2;case 2:return ge.trys.push([2,7,,8]),C.getItemSync?(kn=C.getItemSync(F),[3,5]):[3,3];case 3:return[4,C.getItem(F)];case 4:kn=ge.sent(),ge.label=5;case 5:return[4,gi(null,kn)];case 6:case 7:return ge.sent(),[3,8];case 8:return[3,12];case 9:return ue?[3,11]:[4,this.getFlags()];case 10:return ge.sent(),[3,12];case 11:if(te)this._onChange(null,{isFromServer:!1,flagsChanged:l({},te),traitsChanged:l({},(h=S.identity)===null||h===void 0?void 0:h.traits)},this._loadedState(null,a.DEFAULT_FLAGS));else if(this.flags&&(st=null,Object.keys(this.flags).length===0&&(st=xn),this._onChange(null,{isFromServer:!1,flagsChanged:l({},this.flags),traitsChanged:l({},(m=S.identity)===null||m===void 0?void 0:m.traits)},this._loadedState(st,a.DEFAULT_FLAGS)),st))throw new Error(st);ge.label=12;case 12:return[3,14];case 13:throw Ve=ge.sent(),this.log("Error during initialisation ",Ve),mi=Ve instanceof Error?Ve:new Error("".concat(Ve)),(g=this.onError)===null||g===void 0||g.call(this,mi),Ve;case 14:return[2]}})})},b.prototype._loadedState=function(f,h,m){return f===void 0&&(f=null),m===void 0&&(m=!1),{error:f,isFetching:m,isLoading:!1,source:h}},b.prototype.getAllFlags=function(){return this.flags},b.prototype.identify=function(f,h,m){return this.evaluationContext.identity={identifier:f,transient:m,traits:this.evaluationContext.identity&&this.evaluationContext.identity.identifier==f?this.evaluationContext.identity.traits:{}},this.evaluationContext.identity.identifier=f,this.log("Identify: "+this.evaluationContext.identity.identifier),h&&(this.evaluationContext.identity.traits=Object.fromEntries(Object.entries(h).map(function(g){var S=g[0],k=g[1];return[S,v(k)?k:{value:k}]}))),this.initialised?this.getFlags():Promise.resolve()},b.prototype.getState=function(){return{api:this.api,flags:this.flags,ts:this.ts,evaluationContext:this.evaluationContext,evaluationEvent:this.evaluationEvent}},b.prototype.setState=function(f){f&&(this.initialised=!0,this.api=f.api||this.api||E,this.flags=f.flags||this.flags,this.evaluationContext=f.evaluationContext||this.evaluationContext,this.evaluationEvent=f.evaluationEvent||this.evaluationEvent,this.log("setState called",this))},b.prototype.logout=function(){return this.evaluationContext.identity=null,this.initialised?this.getFlags():Promise.resolve()},b.prototype.startListening=function(f){f===void 0&&(f=1e3),this.getFlagInterval&&clearInterval(this.getFlagInterval),this.getFlagInterval=setInterval(this.getFlags,f)},b.prototype.stopListening=function(){this.getFlagInterval&&(clearInterval(this.getFlagInterval),this.getFlagInterval=null)},b.prototype.log=function(){for(var f=[],h=0;h<arguments.length;h++)f[h]=arguments[h];this.enableLogs&&console.log.apply(this,u(["FLAGSMITH:",new Date().valueOf()-(this.timer||0),"ms"],f,!0))},b.prototype.updateStorage=function(){if(this.cacheFlags){this.ts=new Date().valueOf();var f=JSON.stringify(this.getState());this.log("Setting storage",f),C.setItem(F,f)}},b.prototype.updateEventStorage=function(){if(this.enableAnalytics){var f=JSON.stringify(this.getState().evaluationEvent);C.setItem(R,f)}},b.prototype.setLoadingState=function(f){var h;c(f,this.loadingState)||(this.loadingState=i({},f),this.log("Loading state changed",f),(h=this._triggerLoadingState)===null||h===void 0||h.call(this))},b.prototype.setupRealtime=function(f,h){var m=this,g=f+"sse/environments/"+h+"/stream";x?this.eventSource||(this.log("Creating event source with url "+g),this.eventSource=new x(g),this.eventSource.addEventListener("environment_updated",function(S){var k;try{k=JSON.parse(S.data).updated_at}catch(A){m.log("Could not parse sse event",A)}k?!m.timestamp||k>m.timestamp?m.isLoading?m.log("updated_at is new, but flags are loading",S.data,m.timestamp):(m.log("updated_at is new, fetching flags",S.data,m.timestamp),m.getFlags()):m.log("updated_at is outdated, skipping get flags",S.data,m.timestamp):m.log("No updated_at received, fetching flags",S)})):this.log("Error, EventSource is undefined")},b}();function T(b){var f=b.fetch,h=b.AsyncStorage,m=b.eventSource;return new I({fetch:f,AsyncStorage:h,eventSource:m})}var P,H=(P=function(b,f){return P=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(h,m){h.__proto__=m}||function(h,m){for(var g in m)Object.prototype.hasOwnProperty.call(m,g)&&(h[g]=m[g])},P(b,f)},function(b,f){if(typeof f!="function"&&f!==null)throw new TypeError("Class extends value "+String(f)+" is not a constructor or null");function h(){this.constructor=b}P(b,f),b.prototype=f===null?Object.create(f):(h.prototype=f.prototype,new h)}),j=function(b){var f=typeof Symbol=="function"&&Symbol.iterator,h=f&&b[f],m=0;if(h)return h.call(b);if(b&&typeof b.length=="number")return{next:function(){return b&&m>=b.length&&(b=void 0),{value:b&&b[m++],done:!b}}};throw new TypeError(f?"Object is not iterable.":"Symbol.iterator is not defined.")},z=function(b,f){var h=typeof Symbol=="function"&&b[Symbol.iterator];if(!h)return b;var m,g,S=h.call(b),k=[];try{for(;(f===void 0||f-- >0)&&!(m=S.next()).done;)k.push(m.value)}catch(A){g={error:A}}finally{try{m&&!m.done&&(h=S.return)&&h.call(S)}finally{if(g)throw g.error}}return k},_=function(b,f,h){if(h||arguments.length===2)for(var m,g=0,S=f.length;g<S;g++)!m&&g in f||(m||(m=Array.prototype.slice.call(f,0,g)),m[g]=f[g]);return b.concat(m||Array.prototype.slice.call(f))},M=function(b){function f(){return b.call(this,`EventSource not available.
|
|
2
|
-
Consider loading an EventSource polyfill and making it available globally as EventSource, or passing one in as eventSourceClass to the ReconnectingEventSource constructor.`)||this}return H(f,b),f}(Error),V=function(){function b(f,h){var m=this;if(this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,this._configuration=h!=null?Object.assign({},h):void 0,this.withCredentials=!1,this._eventSource=null,this._lastEventId=null,this._timer=null,this._listeners={open:[],error:[],message:[]},this.url=f.toString(),this.readyState=this.CONNECTING,this.max_retry_time=3e3,this.eventSourceClass=globalThis.FlagsmithEventSource,this._configuration!=null&&(this._configuration.lastEventId&&(this._lastEventId=this._configuration.lastEventId,delete this._configuration.lastEventId),this._configuration.max_retry_time&&(this.max_retry_time=this._configuration.max_retry_time,delete this._configuration.max_retry_time),this._configuration.eventSourceClass&&(this.eventSourceClass=this._configuration.eventSourceClass,delete this._configuration.eventSourceClass)),this.eventSourceClass==null||typeof this.eventSourceClass!="function")throw new M;this._onevent_wrapped=function(g){m._onevent(g)},this._start()}return b.prototype.dispatchEvent=function(f){throw new Error("Method not implemented.")},b.prototype._start=function(){var f,h,m=this,g=this.url;this._lastEventId&&(g.indexOf("?")===-1?g+="?":g+="&",g+="lastEventId="+encodeURIComponent(this._lastEventId)),this._eventSource=new this.eventSourceClass(g,this._configuration),this._eventSource.onopen=function(B){m._onopen(B)},this._eventSource.onerror=function(B){m._onerror(B)},this._eventSource.onmessage=function(B){m.onmessage(B)};try{for(var S=j(Object.keys(this._listeners)),k=S.next();!k.done;k=S.next()){var A=k.value;this._eventSource.addEventListener(A,this._onevent_wrapped)}}catch(B){f={error:B}}finally{try{k&&!k.done&&(h=S.return)&&h.call(S)}finally{if(f)throw f.error}}},b.prototype._onopen=function(f){this.readyState===0&&(this.readyState=1,this.onopen(f))},b.prototype._onerror=function(f){var h=this;if(this.readyState===1&&(this.readyState=0,this.onerror(f)),this._eventSource){this._eventSource.close(),this._eventSource=null;var m=Math.round(this.max_retry_time*Math.random());this._timer=setTimeout(function(){return h._start()},m)}},b.prototype._onevent=function(f){var h,m;f&&f.lastEventId&&(this._lastEventId=f.lastEventId);var g=this._listeners[f.type];if(g!=null)try{for(var S=j(_([],z(g),!1)),k=S.next();!k.done;k=S.next())k.value.call(this,f)}catch(A){h={error:A}}finally{try{k&&!k.done&&(m=S.return)&&m.call(S)}finally{if(h)throw h.error}}f.type==="message"&&this.onmessage(f)},b.prototype.onopen=function(f){},b.prototype.onerror=function(f){},b.prototype.onmessage=function(f){},b.prototype.close=function(){this._timer&&(clearTimeout(this._timer),this._timer=null),this._eventSource&&(this._eventSource.close(),this._eventSource=null),this.readyState=2},b.prototype.addEventListener=function(f,h,m){this._listeners[f]==null&&(this._listeners[f]=[],this._eventSource!=null&&this._eventSource.addEventListener(f,this._onevent_wrapped));var g=this._listeners[f];g.includes(h)||(this._listeners[f]=_(_([],z(g),!1),[h],!1))},b.prototype.removeEventListener=function(f,h,m){var g=this._listeners[f];this._listeners[f]=g.filter(function(S){return S!==h})},b}();globalThis.FlagsmithEventSource=typeof EventSource<"u"?EventSource:null;var G=function(b,f){return f=f||{},new Promise(function(h,m){var g=new XMLHttpRequest,S=[],k=[],A={},B=function(){return{ok:(g.status/100|0)==2,statusText:g.statusText,status:g.status,url:g.responseURL,text:function(){return Promise.resolve(g.responseText)},json:function(){return Promise.resolve(g.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([g.response]))},clone:B,headers:{keys:function(){return S},entries:function(){return k},get:function(O){return A[O.toLowerCase()]},has:function(O){return O.toLowerCase()in A}}}};for(var W in g.open(f.method||"get",b,!0),g.onload=function(){g.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm,function(O,q,ee){S.push(q=q.toLowerCase()),k.push([q,ee]),A[q]=A[q]?A[q]+","+ee:ee}),h(B())},g.onerror=m,g.withCredentials=f.credentials=="include",f.headers)g.setRequestHeader(W,f.headers[W]);g.send(f.body||null)})},$=T({AsyncStorage:s,fetch:G,eventSource:V});typeof window<"u"&&(window.flagsmith=$),n.createFlagsmithInstance=function(){return T({AsyncStorage:s,fetch:G,eventSource:V})},n.default=$,Object.defineProperty(n,"__esModule",{value:!0})})})(Hn,Hn.exports);var $n={},wi=function(t,e,n,s,i){var r=new Worker($n[e]||($n[e]=URL.createObjectURL(new Blob([t+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));return r.onmessage=function(o){var u=o.data,c=u.$e$;if(c){var l=new Error(c[0]);l.code=c[1],l.stack=c[2],i(l,null)}else i(null,u)},r.postMessage(n,s),r},ae=Uint8Array,se=Uint16Array,it=Int32Array,rt=new ae([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),ot=new ae([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Rt=new ae([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wn=function(t,e){for(var n=new se(31),s=0;s<31;++s)n[s]=e+=1<<t[s-1];for(var i=new it(n[30]),s=1;s<30;++s)for(var r=n[s];r<n[s+1];++r)i[r]=r-n[s]<<5|s;return{b:n,r:i}},qn=Wn(rt,2),Si=qn.b,at=qn.r;Si[28]=258,at[258]=28;for(var xi=Wn(ot,0),Dt=xi.r,ct=new se(32768),J=0;J<32768;++J){var Te=(J&43690)>>1|(J&21845)<<1;Te=(Te&52428)>>2|(Te&13107)<<2,Te=(Te&61680)>>4|(Te&3855)<<4,ct[J]=((Te&65280)>>8|(Te&255)<<8)>>1}for(var Fe=function(t,e,n){for(var s=t.length,i=0,r=new se(e);i<s;++i)t[i]&&++r[t[i]-1];var o=new se(e);for(i=1;i<e;++i)o[i]=o[i-1]+r[i-1]<<1;var u;if(n){u=new se(1<<e);var c=15-e;for(i=0;i<s;++i)if(t[i])for(var l=i<<4|t[i],a=e-t[i],d=o[t[i]-1]++<<a,p=d|(1<<a)-1;d<=p;++d)u[ct[d]>>c]=l}else for(u=new se(s),i=0;i<s;++i)t[i]&&(u[i]=ct[o[t[i]-1]++]>>15-t[i]);return u},Ie=new ae(288),J=0;J<144;++J)Ie[J]=8;for(var J=144;J<256;++J)Ie[J]=9;for(var J=256;J<280;++J)Ie[J]=7;for(var J=280;J<288;++J)Ie[J]=8;for(var Je=new ae(32),J=0;J<32;++J)Je[J]=5;var Vn=Fe(Ie,9,0),Gn=Fe(Je,5,0),Lt=function(t){return(t+7)/8|0},Kn=function(t,e,n){return(e==null||e<0)&&(e=0),(n==null||n>t.length)&&(n=t.length),new ae(t.subarray(e,n))},ki=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Jn=function(t,e,n){var s=new Error(e||ki[t]);if(s.code=t,Error.captureStackTrace&&Error.captureStackTrace(s,Jn),!n)throw s;return s},me=function(t,e,n){n<<=e&7;var s=e/8|0;t[s]|=n,t[s+1]|=n>>8},Pe=function(t,e,n){n<<=e&7;var s=e/8|0;t[s]|=n,t[s+1]|=n>>8,t[s+2]|=n>>16},lt=function(t,e){for(var n=[],s=0;s<t.length;++s)t[s]&&n.push({s,f:t[s]});var i=n.length,r=n.slice();if(!i)return{t:Pt,l:0};if(i==1){var o=new ae(n[0].s+1);return o[n[0].s]=1,{t:o,l:1}}n.sort(function(N,D){return N.f-D.f}),n.push({s:-1,f:25001});var u=n[0],c=n[1],l=0,a=1,d=2;for(n[0]={s:-1,f:u.f+c.f,l:u,r:c};a!=i-1;)u=n[n[l].f<n[d].f?l++:d++],c=n[l!=a&&n[l].f<n[d].f?l++:d++],n[a++]={s:-1,f:u.f+c.f,l:u,r:c};for(var p=r[0].s,s=1;s<i;++s)r[s].s>p&&(p=r[s].s);var v=new se(p+1),w=ut(n[a-1],v,0);if(w>e){var s=0,y=0,x=w-e,C=1<<x;for(r.sort(function(D,L){return v[L.s]-v[D.s]||D.f-L.f});s<i;++s){var F=r[s].s;if(v[F]>e)y+=C-(1<<w-v[F]),v[F]=e;else break}for(y>>=x;y>0;){var R=r[s].s;v[R]<e?y-=1<<e-v[R]++-1:++s}for(;s>=0&&y;--s){var E=r[s].s;v[E]==e&&(--v[E],++y)}w=e}return{t:new ae(v),l:w}},ut=function(t,e,n){return t.s==-1?Math.max(ut(t.l,e,n+1),ut(t.r,e,n+1)):e[t.s]=n},At=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new se(++e),s=0,i=t[0],r=1,o=function(c){n[s++]=c},u=1;u<=e;++u)if(t[u]==i&&u!=e)++r;else{if(!i&&r>2){for(;r>138;r-=138)o(32754);r>2&&(o(r>10?r-11<<5|28690:r-3<<5|12305),r=0)}else if(r>3){for(o(i),--r;r>6;r-=6)o(8304);r>2&&(o(r-3<<5|8208),r=0)}for(;r--;)o(i);r=1,i=t[u]}return{c:n.subarray(0,s),n:e}},Be=function(t,e){for(var n=0,s=0;s<e.length;++s)n+=t[s]*e[s];return n},Mt=function(t,e,n){var s=n.length,i=Lt(e+2);t[i]=s&255,t[i+1]=s>>8,t[i+2]=t[i]^255,t[i+3]=t[i+1]^255;for(var r=0;r<s;++r)t[i+r+4]=n[r];return(i+4+s)*8},Ft=function(t,e,n,s,i,r,o,u,c,l,a){me(e,a++,n),++i[256];for(var d=lt(i,15),p=d.t,v=d.l,w=lt(r,15),y=w.t,x=w.l,C=At(p),F=C.c,R=C.n,E=At(y),N=E.c,D=E.n,L=new se(19),I=0;I<F.length;++I)++L[F[I]&31];for(var I=0;I<N.length;++I)++L[N[I]&31];for(var T=lt(L,7),P=T.t,H=T.l,j=19;j>4&&!P[Rt[j-1]];--j);var z=l+5<<3,_=Be(i,Ie)+Be(r,Je)+o,M=Be(i,p)+Be(r,y)+o+14+3*j+Be(L,P)+2*L[16]+3*L[17]+7*L[18];if(c>=0&&z<=_&&z<=M)return Mt(e,a,t.subarray(c,c+l));var V,G,$,b;if(me(e,a,1+(M<_)),a+=2,M<_){V=Fe(p,v,0),G=p,$=Fe(y,x,0),b=y;var f=Fe(P,H,0);me(e,a,R-257),me(e,a+5,D-1),me(e,a+10,j-4),a+=14;for(var I=0;I<j;++I)me(e,a+3*I,P[Rt[I]]);a+=3*j;for(var h=[F,N],m=0;m<2;++m)for(var g=h[m],I=0;I<g.length;++I){var S=g[I]&31;me(e,a,f[S]),a+=P[S],S>15&&(me(e,a,g[I]>>5&127),a+=g[I]>>12)}}else V=Vn,G=Ie,$=Gn,b=Je;for(var I=0;I<u;++I){var k=s[I];if(k>255){var S=k>>18&31;Pe(e,a,V[S+257]),a+=G[S+257],S>7&&(me(e,a,k>>23&31),a+=rt[S]);var A=k&31;Pe(e,a,$[A]),a+=b[A],A>3&&(Pe(e,a,k>>5&8191),a+=ot[A])}else Pe(e,a,V[k]),a+=G[k]}return Pe(e,a,V[256]),a+G[256]},Xn=new it([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Pt=new ae(0),Yn=function(t,e,n,s,i,r){var o=r.z||t.length,u=new ae(s+o+5*(1+Math.ceil(o/7e3))+i),c=u.subarray(s,u.length-i),l=r.l,a=(r.r||0)&7;if(e){a&&(c[0]=r.r>>3);for(var d=Xn[e-1],p=d>>13,v=d&8191,w=(1<<n)-1,y=r.p||new se(32768),x=r.h||new se(w+1),C=Math.ceil(n/3),F=2*C,R=function(ne){return(t[ne]^t[ne+1]<<C^t[ne+2]<<F)&w},E=new it(25e3),N=new se(288),D=new se(32),L=0,I=0,T=r.i||0,P=0,H=r.w||0,j=0;T+2<o;++T){var z=R(T),_=T&32767,M=x[z];if(y[_]=M,x[z]=_,H<=T){var V=o-T;if((L>7e3||P>24576)&&(V>423||!l)){a=Ft(t,c,0,E,N,D,I,P,j,T-j,a),P=L=I=0,j=T;for(var G=0;G<286;++G)N[G]=0;for(var G=0;G<30;++G)D[G]=0}var $=2,b=0,f=v,h=_-M&32767;if(V>2&&z==R(T-h))for(var m=Math.min(p,V)-1,g=Math.min(32767,T),S=Math.min(258,V);h<=g&&--f&&_!=M;){if(t[T+$]==t[T+$-h]){for(var k=0;k<S&&t[T+k]==t[T+k-h];++k);if(k>$){if($=k,b=h,k>m)break;for(var A=Math.min(h,k-2),B=0,G=0;G<A;++G){var W=T-h+G&32767,O=y[W],q=W-O&32767;q>B&&(B=q,M=W)}}}_=M,M=y[_],h+=_-M&32767}if(b){E[P++]=268435456|at[$]<<18|Dt[b];var ee=at[$]&31,oe=Dt[b]&31;I+=rt[ee]+ot[oe],++N[257+ee],++D[oe],H=T+$,++L}else E[P++]=t[T],++N[t[T]]}}for(T=Math.max(T,H);T<o;++T)E[P++]=t[T],++N[t[T]];a=Ft(t,c,l,E,N,D,I,P,j,T-j,a),l||(r.r=a&7|c[a/8|0]<<3,a-=7,r.h=x,r.p=y,r.i=T,r.w=H)}else{for(var T=r.w||0;T<o+l;T+=65535){var te=T+65535;te>=o&&(c[a/8|0]=l,te=o),a=Mt(c,a+1,t.subarray(T,te))}r.i=o}return Kn(u,0,s+Lt(a)+i)},Qn=function(){for(var t=new Int32Array(256),e=0;e<256;++e){for(var n=e,s=9;--s;)n=(n&1&&-306674912)^n>>>1;t[e]=n}return t}(),Zn=function(){var t=-1;return{p:function(e){for(var n=t,s=0;s<e.length;++s)n=Qn[n&255^e[s]]^n>>>8;t=n},d:function(){return~t}}},Bt=function(t,e,n,s,i){if(!i&&(i={l:1},e.dictionary)){var r=e.dictionary.subarray(-32768),o=new ae(r.length+t.length);o.set(r),o.set(t,r.length),t=o,i.w=r.length}return Yn(t,e.level==null?6:e.level,e.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(t.length)))*1.5):20:12+e.mem,n,s,i)},Ei=function(t,e){var n={};for(var s in t)n[s]=t[s];for(var s in e)n[s]=e[s];return n},es=function(t,e,n){for(var s=t(),i=t.toString(),r=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/\s+/g,"").split(","),o=0;o<s.length;++o){var u=s[o],c=r[o];if(typeof u=="function"){e+=";"+c+"=";var l=u.toString();if(u.prototype)if(l.indexOf("[native code]")!=-1){var a=l.indexOf(" ",8)+1;e+=l.slice(a,l.indexOf("(",a))}else{e+=l;for(var d in u.prototype)e+=";"+c+".prototype."+d+"="+u.prototype[d].toString()}else e+=l}else n[c]=u}return e},ht=[],Ti=function(t){var e=[];for(var n in t)t[n].buffer&&e.push((t[n]=new t[n].constructor(t[n])).buffer);return e},Ii=function(t,e,n,s){if(!ht[n]){for(var i="",r={},o=t.length-1,u=0;u<o;++u)i=es(t[u],i,r);ht[n]={c:es(t[o],i,r),e:r}}var c=Ei({},ht[n].e);return wi(ht[n].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+e.toString()+"}",n,c,Ti(c),s)},Ci=function(){return[ae,se,it,rt,ot,Rt,at,Dt,Vn,Ie,Gn,Je,ct,Xn,Pt,Fe,me,Pe,lt,ut,At,Be,Mt,Ft,Lt,Kn,Yn,Bt,Oi,ts]},_i=function(){return[ns,ss,dt,Zn,Qn]},ts=function(t){return postMessage(t,[t.buffer])},Ni=function(t,e,n,s,i,r){var o=Ii(n,s,i,function(u,c){o.terminate(),r(u,c)});return o.postMessage([t,e],e.consume?[t.buffer]:[]),function(){o.terminate()}},dt=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8},ns=function(t,e){var n=e.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=e.level<2?4:e.level==9?2:0,t[9]=3,e.mtime!=0&&dt(t,4,Math.floor(new Date(e.mtime||Date.now())/1e3)),n){t[3]=8;for(var s=0;s<=n.length;++s)t[s+10]=n.charCodeAt(s)}},ss=function(t){return 10+(t.filename?t.filename.length+1:0)};function Oi(t,e){return Bt(t,e||{},0,0)}function Ri(t,e,n){return n||(n=e,e={}),typeof n!="function"&&Jn(7),Ni(t,e,[Ci,_i,function(){return[is]}],function(s){return ts(is(s.data[0],s.data[1]))},2,n)}function is(t,e){e||(e={});var n=Zn(),s=t.length;n.p(t);var i=Bt(t,e,ss(e),8),r=i.length;return ns(i,e),dt(i,r-8,n.d()),dt(i,r-4,s),i}var Di=typeof TextDecoder<"u"&&new TextDecoder,Li=0;try{Di.decode(Pt,{stream:!0}),Li=1}catch{}class rs{constructor(){this.idx=1,this.backDict={}}getKey(e){let n=!1;return this.backDict[e]||(n=!0,this.backDict[e]=this.idx++),[this.backDict[e],n]}}class Ai{constructor(e,n){this.app=e,this.isDictDisabled=n,this.dict=new rs}sendSetAttribute(e,n,s){if(this.isDictDisabled){const i=[12,e,n,s];return this.app.send(i)}else{const i=[51,e,this.applyDict(n),this.applyDict(s)];return this.app.send(i)}}applyDict(e){const[n,s]=this.dict.getKey(e);return s&&this.app.send([50,n,e]),n}clear(){this.dict=new rs}}class Mi{constructor(e,n){this.app=e,this.startParams=n,this.conditions=[],this.hasStarted=!1,this.createConditionFromFilter=s=>{if(s.value.length){const i=Fi(s);if(i.type)return i}},this.durationInt=null}setConditions(e){this.conditions=e}async fetchConditions(e,n){try{const s=await fetch(`${this.app.options.ingestPoint}/v1/web/conditions/${e}`,{method:"GET",headers:{Authorization:`Bearer ${n}`}}),{conditions:i}=await s.json(),r=[];i.forEach(o=>{o.filters.forEach(c=>{let l;c.type==="fetch"?(l={type:"network_request",subConditions:[],name:o.name},c.filters.forEach(a=>{const d=this.createConditionFromFilter(a);d&&l.subConditions.push(d)})):l=this.createConditionFromFilter(c),l&&(l.type==="session_duration"&&this.processDuration(l.value[0],o.name),r.push({...l,name:o.name}))})}),this.conditions=r}catch{this.app.debug.error("Critical: cannot fetch start conditions")}}trigger(e){if(!this.hasStarted)try{this.hasStarted=!0,this.app.start(this.startParams,void 0,e)}catch(n){this.app.debug.error(n)}}processMessage(e){if(!this.hasStarted)switch(e[0]){case 78:this.jsExceptionEvent(e);break;case 27:this.customEvent(e);break;case 68:this.clickEvent(e);break;case 122:this.pageLocationEvent(e);break;case 83:this.networkRequest(e);break}}processFlags(e){const n=this.conditions.filter(s=>s.type==="feature_flag");n.length&&n.forEach(s=>{const i=je[s.operator];i&&e.find(r=>i(r.key,s.value))&&this.trigger(s.name)})}processDuration(e,n){this.durationInt=setInterval(()=>{performance.now()>e&&this.trigger(n)},1e3),this.app.attachStopCallback(()=>{this.durationInt&&clearInterval(this.durationInt)})}networkRequest(e){const n=this.conditions.filter(s=>s.type==="network_request");n.length&&n.forEach(s=>{const i=s.subConditions.filter(r=>r.operator!=="isAny");i.length?i.every(o=>{let u;switch(o.key){case"url":u=e[3];break;case"status":u=e[6];break;case"method":u=e[2];break;case"duration":u=e[8];break}const c=je[o.operator];if(c&&c(u,o.value))return!0})&&this.trigger(s.name):i.length===0&&s.subConditions.length&&this.trigger(s.name)})}customEvent(e){const n=this.conditions.filter(s=>s.type==="custom_event");n.length&&n.forEach(s=>{const i=je[s.operator];i&&(i(e[1],s.value)||i(e[2],s.value))&&this.trigger(s.name)})}clickEvent(e){const n=this.conditions.filter(s=>s.type==="click");n.length&&n.forEach(s=>{const i=je[s.operator];i&&(i(e[3],s.value)||i(e[4],s.value))&&this.trigger(s.name)})}pageLocationEvent(e){const n=this.conditions.filter(s=>s.type==="visited_url");n&&n.forEach(s=>{const i=je[s.operator];i&&i(e[1],s.value)&&this.trigger(s.name)})}jsExceptionEvent(e){const n=[e[1],e[2],e[3]],s=this.conditions.filter(i=>i.type==="exception");s&&s.forEach(i=>{const r=je[i.operator];r&&n.some(o=>r(o,i.value))&&this.trigger(i.name)})}}const je={is:(t,e)=>e.some(n=>t.includes(n)),isAny:()=>!0,isNot:(t,e)=>!e.some(n=>t.includes(n)),contains:(t,e)=>e.some(n=>t.includes(n)),notContains:(t,e)=>!e.some(n=>t.includes(n)),startsWith:(t,e)=>e.some(n=>t.startsWith(n)),endsWith:(t,e)=>e.some(n=>t.endsWith(n)),greaterThan:(t,e)=>t>e,greaterOrEqual:(t,e)=>t>=e,lessOrEqual:(t,e)=>t<=e,lessThan:(t,e)=>t<e},Fi=t=>{const e={on:"is",notOn:"isNot",">":"greaterThan","<":"lessThan","=":"is","<=":"lessOrEqual",">=":"greaterOrEqual"},n=i=>{if(Object.keys(e).includes(i))return e[i]};let s={type:"",operator:"",value:t.value,key:""};switch(t.type){case"click":s={type:"click",operator:n(t.operator),value:t.value,key:""};break;case"location":s={type:"visited_url",operator:t.operator,value:t.value,key:""};break;case"custom":s={type:"custom_event",operator:t.operator,value:t.value,key:""};break;case"metadata":s={type:t.source==="featureFlag"?"feature_flag":t.type,operator:t.operator,value:t.value,key:""};break;case"error":s={type:"exception",operator:t.operator,value:t.value,key:""};break;case"duration":s={type:"session_duration",value:t.value[0],key:""};break;case"fetchUrl":s={type:"network_request",key:"url",operator:t.operator,value:t.value};break;case"fetchStatusCode":s={type:"network_request",key:"status",operator:n(t.operator),value:t.value};break;case"fetchMethod":s={type:"network_request",key:"method",operator:n(t.operator),value:t.value};break;case"fetchDuration":s={type:"network_request",key:"duration",operator:n(t.operator),value:t.value};break}return s};class Pi{constructor(e){this.app=e,this.flags=[],this.storageKey="__openreplay_flags";const n=this.app.sessionStorage.getItem(this.storageKey);if(n){const s=n.split(";").filter(Boolean);this.flags=s.map(i=>JSON.parse(i))}}getFeatureFlag(e){return this.flags.find(n=>n.key===e)}isFlagEnabled(e){return this.flags.findIndex(n=>n.key===e)!==-1}onFlagsLoad(e){this.onFlagsCb=e}async reloadFlags(e){const n=this.app.sessionStorage.getItem(this.storageKey),s={};n&&n.split(";").filter(Boolean).forEach(a=>{const d=JSON.parse(a);s[d.key]={key:d.key,value:d.value}});const i=this.app.session.getInfo(),r=this.app.session.userInfo,o={projectID:i.projectID,userID:i.userID,metadata:i.metadata,referrer:document.referrer,os:r.userOS,device:r.userDevice,country:r.userCountry,state:r.userState,city:r.userCity,browser:r.userBrowser,persistFlags:s},u=e??this.app.session.getSessionToken(),c=await fetch(this.app.options.ingestPoint+"/v1/web/feature-flags",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${u}`},body:JSON.stringify(o)});if(c.status===200){const l=await c.json();return this.handleFlags(l.flags)}}handleFlags(e){var r;const n=[];e.forEach(o=>{o.is_persist&&n.push(o)});let s="";return this.diffPersist(n).forEach(o=>{s+=`${JSON.stringify(o)};`}),this.app.sessionStorage.setItem(this.storageKey,s),this.flags=e,(r=this.onFlagsCb)==null?void 0:r.call(this,e)}clearPersistFlags(){this.app.sessionStorage.removeItem(this.storageKey)}diffPersist(e){const n=this.app.sessionStorage.getItem(this.storageKey);if(!n)return e;const i=n.split(";").filter(Boolean).map(r=>JSON.parse(r));return e.filter(r=>i.findIndex(o=>o.key===r.key)===-1)}}const os={htmlmasked:"hidden",masked:"obscured"},ve=!(typeof window>"u"),Bi=ve&&navigator.userAgent.match(/firefox|fxios/i),ji=1e5;let jt=ve?Date.now()-performance.now():0;function zt(){jt=Date.now()-performance.now()}function ze(){return jt}const fe=ve&&performance.now?()=>Math.round(performance.now()+jt):()=>Date.now(),Ut="repeat"in String.prototype?t=>"*".repeat(t.length):t=>t.replace(/./g,"*");function as(t){return t.trim().replace(/\s+/g," ")}function cs(t){return t.startsWith("https://")||t.startsWith("http://")}const ft="https://docs.openreplay.com",ls={};function Ce(t,e,n="/"){ls[t]||(console.warn(`OpenReplay: ${t} is deprecated. ${e?`Please, use ${e} instead.`:""} Visit ${ft}${n} for more information.`),ls[t]=!0)}function Ht(t){let e=t.getAttribute("data-openreplay-label");return e!==null||(e=t.getAttribute("data-asayer-label"),e!==null&&Ce('"data-asayer-label" attribute','"data-openreplay-label" attribute',"/")),e}function Re(t,e){const n=`data-openreplay-${e}`;return t.hasAttribute(n)?(os[e]&&Ce(`"${n}" attribute`,`"${os[e]}" attribute`,"/installation/sanitize-data"),!0):!1}function zi(t){try{return!!t.contentDocument}catch{return!1}}function us(t){return t.toString(16).padStart(2,"0")}function Ui(t){const e=new Uint8Array((t||40)/2),n=window.crypto||window.msCrypto;return n?(n.getRandomValues(e),Array.from(e,us).join("")):Array.from({length:t||40},()=>us(Math.floor(Math.random()*16))).join("")}function Hi(){try{return window.self&&window.top&&window.self!==window.top}catch{return!0}}function $t(t){return window.Zone&&"__symbol__"in window.Zone?window.Zone.__symbol__(t):t}function hs(t){const e=$t("MutationObserver");return new window[e](t)}function ds(t,e,n,s){const i=$t("addEventListener");try{t[i](e,n,s)}catch(r){const o=r.message;console.debug(`Openreplay: ${o}; if this error is caused by an IframeObserver, ignore it`)}}function fs(t,e,n,s){const i=$t("removeEventListener");try{t[i](e,n,s)}catch(r){const o=r.message;console.debug(`Openreplay: ${o}; if this error is caused by an IframeObserver, ignore it`)}}class $i{constructor(){this.taskQueue=[],this.isRunning=!1}addTask(e){this.taskQueue.push(e),this.runTasks()}runTasks(){if(this.isRunning||this.taskQueue.length===0)return;this.isRunning=!0;const e=()=>{if(this.taskQueue.length===0){this.isRunning=!1;return}const n=this.taskQueue.shift();Promise.resolve(n()).then(()=>{requestAnimationFrame(()=>e())})};e()}}const Wi=new $i;function qi(t){Wi.addTask(t)}function ps(t,e){const n={...t};for(const s in e)if(e.hasOwnProperty(s)){const i=e[s],r=t[s];typeof i=="object"&&!Array.isArray(i)&&i!==null?n[s]=ps(r||{},i):n[s]=i}return n}function De(t){return[0,t]}function Vi(t,e){return[5,t,e]}function Gi(t,e){return[6,t,e]}function Ki(){return[7]}function Ji(t,e,n,s,i){return[8,t,e,n,s,i]}function Xi(t,e,n){return[9,t,e,n]}function Yi(t,e,n){return[10,t,e,n]}function Qi(t){return[11,t]}function gs(t,e){return[13,t,e]}function Zi(t,e){return[14,t,e]}function er(t,e,n){return[16,t,e,n]}function tr(t,e,n){return[18,t,e,n]}function nr(t,e){return[19,t,e]}function sr(t,e){return[20,t,e]}function ir(t,e){return[22,t,e]}function rr(t,e,n,s,i,r,o,u,c){return[23,t,e,n,s,i,r,o,u,c]}function or(t,e,n){return[24,t,e,n]}function ar(t,e){return[27,t,e]}function cr(t){return[28,t]}function lr(t){return[29,t]}function ms(t,e){return[30,t,e]}function ur(t,e,n,s){return[49,t,e,n,s]}function hr(t,e){return[54,t,e]}function dr(t){return[55,t]}function vs(t,e,n,s){return[57,t,e,n,s]}function bs(t){return[58,t]}function Wt(t,e,n,s){return[60,t,e,n,s]}function fr(t,e,n){return[61,t,e,n]}function pr(t,e){return[63,t,e]}function gr(t,e){return[64,t,e]}function mr(t,e,n,s,i,r){return[68,t,e,n,s,i,r]}function qt(t,e){return[70,t,e]}function ys(t,e,n){return[71,t,e,n]}function Vt(t,e,n,s){return[73,t,e,n,s]}function ws(t,e){return[75,t,e]}function Ss(t,e){return[76,t,e]}function vr(t,e){return[77,t,e]}function Gt(t,e,n,s){return[78,t,e,n,s]}function pt(t,e,n,s,i,r,o,u,c){return[83,t,e,n,s,i,r,o,u,c]}function br(t,e,n,s,i,r){return[84,t,e,n,s,i,r]}function yr(t,e,n,s,i,r){return[112,t,e,n,s,i,r]}function xs(t,e,n){return[113,t,e,n]}function wr(t){return[114,t]}function Sr(t){return[115,t]}function ks(t,e,n,s,i,r,o,u,c,l){return[116,t,e,n,s,i,r,o,u,c,l]}function gt(t){return[117,t]}function Le(t){return[118,t]}function xr(t,e){return[119,t,e]}function kr(t){return[120,t]}function Er(t,e,n,s){return[122,t,e,n,s]}const Kt=ve&&"performance"in window&&"memory"in performance?performance:{memory:{}},Jt=ve?(navigator.deviceMemory||0)*1024:0,Xt=Kt.memory.jsHeapSizeLimit||0;function Tr(t,e){if(!Object.assign({capturePerformance:!0},e).capturePerformance)return;let s,i;const r=()=>{s===void 0||s===-1||(s++,requestAnimationFrame(r))};t.ticker.attach(()=>{i===void 0||i===-1||i++},0,!1);const o=()=>{s===void 0||i===void 0||(t.send(ur(s,i,Kt.memory.totalJSHeapSize||0,Kt.memory.usedJSHeapSize||0)),i=s=document.hidden?-1:0)};t.attachStartCallback(()=>{i=s=-1,o(),r()}),t.attachStopCallback(()=>{i=s=void 0}),t.ticker.attach(o,40,!1),document.hidden!==void 0&&t.attachEventListener(document,"visibilitychange",o,!1,!1)}const Es="__or__watched_tags__";class Ir{constructor(e,n,s){this.sessionStorage=e,this.errLog=n,this.onTag=s,this.intervals={},this.tags=[];const i=JSON.parse(e.getItem(Es)??"[]");this.setTags(i),this.observer=new IntersectionObserver(r=>{r.forEach(o=>{if(o.isIntersecting&&o.target){const u=o.target.__or_watcher_tagname;u&&this.onTagRendered(u),this.observer.unobserve(o.target)}})})}async fetchTags(e,n){return fetch(`${e}/v1/web/tags`,{method:"GET",headers:{Authorization:`Bearer ${n}`}}).then(s=>s.json()).then(({tags:s})=>{if(s&&s.length){this.setTags(s);const i=JSON.stringify(s);this.sessionStorage.setItem(Es,i||"")}}).catch(s=>this.errLog(s))}setTags(e){this.tags=e,this.intervals={},e.forEach(n=>{this.intervals[n.id]=setInterval(()=>{const s=document.querySelectorAll(n.selector);if(s.length>0){const i=s[0];i.__or_watcher_tagname=n.id,this.observer.observe(i)}},500)})}onTagRendered(e){this.intervals[e]&&clearInterval(this.intervals[e]),this.onTag(e)}clear(){this.tags.forEach(e=>{clearInterval(this.intervals[e.id])}),this.tags=[],this.intervals={},this.observer.disconnect()}}const Cr={position:"fixed",top:0,left:0,width:"100vw",height:"100vh",background:"rgba(0, 0, 0, 0.40)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:999999,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"'},_r={display:"flex",flexDirection:"column",gap:"2rem",alignItems:"center",padding:"1.5rem",borderRadius:"2px",border:"1px solid #D9D9D9",background:"#FFF",width:"22rem"},mt={display:"flex","flex-direction":"column",gap:"unset","align-items":"center",padding:"unset",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',"border-radius":"2px",border:"1px solid #D9D9D9",background:"rgba(255, 255, 255, 0.75)",width:"22rem"},Nr={fontFamily:"Verdana, sans-serif",fontSize:"1.25rem",fontStyle:"normal",fontWeight:"500",lineHeight:"1.75rem",color:"rgba(0, 0, 0, 0.85)"},Or={borderTop:"1px solid rgba(0, 0, 0, 0.06)",borderBottom:"1px solid rgba(0, 0, 0, 0.06)",padding:"1.25rem 0rem",color:"rgba(0, 0, 0, 0.85)",fontFamily:"Verdana, sans-serif",fontSize:"13px",fontStyle:"normal",fontWeight:"400",lineHeight:"auto",whiteSpace:"pre-wrap"},Rr={display:"flex",padding:"0.4rem 0.9375rem",justifyContent:"center",alignItems:"center",gap:"0.625rem",borderRadius:"0.25rem",border:"1px solid #394EFF",background:"#394EFF",boxShadow:"0px 2px 0px 0px rgba(0, 0, 0, 0.04)",color:"#FFF",textAlign:"center",fontFamily:"Verdana, sans-serif",fontSize:"1rem",fontStyle:"normal",fontWeight:"500",lineHeight:"1.5rem",cursor:"pointer"},Ts={fontFamily:"Verdana, sans-serif",fontSize:"13px",fontWeight:"500",lineHeight:"auto",display:"flex",justifyContent:"space-between",width:"100%",cursor:"pointer"},Ue={display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"0.625rem",fontSize:"13px",lineHeight:"auto"},Dr={padding:"0.5rem",gap:"0.5rem",fontFamily:"Verdana, sans-serif",fontSize:"16px",fontStyle:"normal",fontWeight:"500",lineHeight:"auto",color:"white",display:"flex",alignItems:"center",width:"100%",borderRadius:"2px",background:"rgba(0, 0, 0, 0.75)",boxSizing:"border-box"},He={boxSizing:"border-box",display:"block",width:"100%",borderBottom:"1px solid #D9D9D9",background:"#FFF",padding:"0.65rem",alignSelf:"stretch",color:"#000",fontFamily:"Verdana, sans-serif",fontStyle:"normal",fontWeight:"400"},Lr={...He,display:"flex",flexDirection:"column",alignItems:"center",gap:"0.625rem"},Is={fontSize:"1.25rem",fontWeight:"500",cursor:"pointer",color:"#394EFF"},Cs={display:"flex",padding:"0.4rem 0.9375rem",justifyContent:"center",alignItems:"center",gap:"0.625rem",borderRadius:"0.25rem",border:"1px solid #394EFF",background:"#394EFF",boxShadow:"0px 2px 0px 0px rgba(0, 0, 0, 0.04)",color:"#FFF",textAlign:"center",fontFamily:"Verdana, sans-serif",fontSize:"1rem",fontStyle:"normal",fontWeight:"500",lineHeight:"1.5rem",width:"100%",boxSizing:"border-box",cursor:"pointer"},_s={marginTop:"1rem",marginBottom:"1rem",cursor:"pointer",display:"block",fontWeight:"500",fontSize:"13px!important",lineHeight:"auto"},Ar={display:"flex",justifyContent:"space-between",alignItems:"center",gap:"1rem",padding:"0.5rem",width:"100%",boxSizing:"border-box"},Ns={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",borderRadius:"6.25em",outline:"1px solid #394EFF",fontSize:"13px",height:"24px",width:"24px"},Mr={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",borderRadius:"6.25em",outline:"1px solid #D2DFFF",boxShadow:"0px 2px 0px 0px rgba(0, 0, 0, 0.04)",background:"#D2DFFF",fontSize:"13px",height:"24px",width:"24px"},Os={borderRadius:"0.375rem",border:"1px solid rgba(0, 0, 0, 0.06)",background:"#F5F7FF",boxShadow:"0px 2px 0px 0px rgba(0, 0, 0, 0.04)",display:"flex",flexDirection:"column",padding:"0.625rem 0.9375rem",gap:"0.5rem",alignSelf:"stretch"},Rs={fontWeight:"bold"},Fr={fontSize:"13px",lineHeight:"auto"},Ds={marginRight:"0.5rem",cursor:"pointer",color:"#394EFF",textAlign:"center",fontFamily:"Verdana, sans-serif",fontSize:"13px",fontStyle:"normal",fontWeight:"500",lineHeight:"auto"},Pr={...Ds,display:"flex",padding:"0.25rem 0.9375rem",justifyContent:"center",alignItems:"center",gap:"0.5rem",borderRadius:"0.25rem",border:"1px solid #394EFF"},Br={display:"flex",justifyContent:"space-between",alignItems:"center",width:"100%",boxSizing:"border-box"},jr={border:"4px solid rgba(255, 255, 255, 0.4)",width:"16px",height:"16px",borderRadius:"50%",borderLeftColor:"#fff",animation:"spin 0.5s linear infinite"},Ls={Standard:{width:1280,height:720},High:{width:1920,height:1080}};class zr{constructor(e){this.app=e,this.mediaRecorder=null,this.recordedChunks=[],this.stream=null,this.recStartTs=null}async startRecording(e,n,s,i){this.recStartTs=this.app.timestamp();const r=n;try{this.stream=await navigator.mediaDevices.getUserMedia({video:i?{...r,frameRate:{ideal:e}}:!1,audio:s}),this.mediaRecorder=new MediaRecorder(this.stream,{mimeType:"video/webm;codecs=vp9"}),this.recordedChunks=[],this.mediaRecorder.ondataavailable=o=>{o.data.size>0&&this.recordedChunks.push(o.data)},this.mediaRecorder.start()}catch(o){console.error(o)}}async stopRecording(){return new Promise(e=>{this.mediaRecorder&&(this.mediaRecorder.onstop=()=>{const n=new Blob(this.recordedChunks,{type:"video/webm"});e(n)},this.mediaRecorder.stop())})}async sendToAPI(){const e=await this.stopRecording();return fetch(`${this.app.options.ingestPoint}/v1/web/uxt/upload-url`,{headers:{Authorization:`Bearer ${this.app.session.getSessionToken()}`}}).then(n=>{if(n.ok)return n.json();throw new Error("Failed to get upload url")}).then(({url:n})=>fetch(n,{method:"PUT",headers:{"Content-Type":"video/webm"},body:e})).catch(console.error).finally(()=>{this.discard()})}async saveToFile(e="recorded-video.webm"){const n=await this.stopRecording(),s=URL.createObjectURL(n),i=document.createElement("a");i.style.display="none",i.href=s,i.download=e,document.body.appendChild(i),i.click(),window.URL.revokeObjectURL(s),document.body.removeChild(i)}discard(){var e,n;(e=this.mediaRecorder)==null||e.stop(),(n=this.stream)==null||n.getTracks().forEach(s=>s.stop())}}function Ur(t,e){e.onmousedown=function(n){const s=t.getBoundingClientRect(),i=n.clientX-s.left,r=n.clientY-s.top;t.style.position="fixed",t.style.zIndex=99999999999999,o(n.pageX,n.pageY);function o(l,a){let d=l-i,p=a-r;d<=5&&(d=5),p<=5&&(p=5),d>=window.innerWidth-s.width&&(d=window.innerWidth-s.width),p>=window.innerHeight-s.height&&(p=window.innerHeight-s.height),t.style.left=`${d}px`,t.style.top=`${p}px`}function u(l){o(l.pageX,l.pageY)}document.addEventListener("mousemove",u);const c=()=>{document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",c)};document.addEventListener("mouseup",c)},e.ondragstart=function(){return!1}}function Hr(){const t=document.createElement("div");t.className="grid";for(let e=0;e<16;e++){const n=document.createElement("div");Object.assign(n.style,{width:"2px",height:"2px",borderRadius:"10px",background:"white"}),n.className="cell",t.appendChild(n)}return Object.assign(t.style,{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gridTemplateRows:"repeat(4, 1fr)",gap:"2px",cursor:"grab"}),t}function $r(){const t=document.createElement("div");Object.assign(t.style,{width:"0",height:"0",borderLeft:"7px solid transparent",borderRight:"7px solid transparent",borderBottom:"7px solid white"});const e=document.createElement("div");return e.appendChild(t),Object.assign(e.style,{display:"flex",alignItems:"center",justifyContent:"center",width:"16px",height:"16px",cursor:"pointer",marginLeft:"auto",transform:"rotate(180deg)"}),e}function Wr(){const t=document.createElement("style");t.type="text/css",t.innerText=`@keyframes spin {
|
|
1
|
+
(function(Q,$){typeof exports=="object"&&typeof module<"u"?module.exports=$():typeof define=="function"&&define.amd?define($):(Q=typeof globalThis<"u"?globalThis:Q||self,Q.WineaterChatbot=$())})(this,function(){"use strict";var Cd=Object.defineProperty;var ja=Q=>{throw TypeError(Q)};var xd=(Q,$,de)=>$ in Q?Cd(Q,$,{enumerable:!0,configurable:!0,writable:!0,value:de}):Q[$]=de;var Ot=(Q,$,de)=>xd(Q,typeof $!="symbol"?$+"":$,de),ar=(Q,$,de)=>$.has(Q)||ja("Cannot "+de);var b=(Q,$,de)=>(ar(Q,$,"read from private field"),de?de.call(Q):$.get(Q)),K=(Q,$,de)=>$.has(Q)?ja("Cannot add the same private member more than once"):$ instanceof WeakSet?$.add(Q):$.set(Q,de),B=(Q,$,de,Js)=>(ar(Q,$,"write to private field"),Js?Js.call(Q,de):$.set(Q,de),de),ae=(Q,$,de)=>(ar(Q,$,"access private method"),de);var Pa,Ss,_s,ks,Kt,Gs,Ts,Es,be,lr,es,cr,Ua,Ue,ze,ir,rt,Xt,ot,We,Oe,at,vt,Ct,Jt,xt,Yt,Nt,Un,zn,me,Nd,Rd,ur,Hn,qn,hr,bt,lt,Xe,Ks,Xs,Is,Qt,La;const Q="5";typeof window<"u"&&((Pa=window.__svelte??(window.__svelte={})).v??(Pa.v=new Set)).add(Q);const $=1,de=2,Js=16,za=1,Wa=2,Ha=4,qa=8,Va=16,Ga=1,Ka=2,ye=Symbol(),Xa="http://www.w3.org/1999/xhtml",fr=!1;var Ys=Array.isArray,Ja=Array.prototype.indexOf,Vn=Array.from,Gn=Object.defineProperty,ts=Object.getOwnPropertyDescriptor,Ya=Object.getOwnPropertyDescriptors,Qa=Object.prototype,Za=Array.prototype,dr=Object.getPrototypeOf,pr=Object.isExtensible;function $a(t){for(var e=0;e<t.length;e++)t[e]()}function gr(){var t,e,s=new Promise((n,i)=>{t=n,e=i});return{promise:s,resolve:t,reject:e}}const we=2,Kn=4,Xn=8,ct=16,ut=32,Mt=64,Qs=128,Te=1024,xe=2048,St=4096,Me=8192,ht=16384,Jn=32768,ss=65536,mr=1<<17,el=1<<18,ns=1<<19,tl=1<<20,Le=256,Zs=512,$s=32768,Yn=1<<21,Qn=1<<22,At=1<<23,Pt=Symbol("$state"),sl=Symbol("legacy props"),nl=Symbol(""),is=new class extends Error{constructor(){super(...arguments);Ot(this,"name","StaleReactionError");Ot(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function il(t){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function rl(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function ol(t){throw new Error("https://svelte.dev/e/effect_in_teardown")}function al(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function ll(t){throw new Error("https://svelte.dev/e/effect_orphan")}function cl(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function ul(t){throw new Error("https://svelte.dev/e/props_invalid_value")}function hl(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function fl(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function dl(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function pl(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function gl(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function ml(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let vl=!1;function vr(t){return t===this.v}function bl(t,e){return t!=t?e==e:t!==e||t!==null&&typeof t=="object"||typeof t=="function"}function br(t){return!bl(t,this.v)}let rs=!1,yl=!1;function wl(){rs=!0}let ue=null;function os(t){ue=t}function Lt(t,e=!1,s){ue={p:ue,c:null,e:null,s:t,x:null,l:rs&&!e?{s:null,u:null,$:[]}:null}}function Bt(t){var e=ue,s=e.e;if(s!==null){e.e=null;for(var n of s)Br(n)}return t!==void 0&&(e.x=t),ue=e.p,t??{}}function Ns(){return!rs||ue!==null&&ue.l===null}let Ft=[];function yr(){var t=Ft;Ft=[],$a(t)}function Rs(t){if(Ft.length===0&&!Ds){var e=Ft;queueMicrotask(()=>{e===Ft&&yr()})}Ft.push(t)}function Sl(){for(;Ft.length>0;)yr()}const _l=new WeakMap;function wr(t){var e=H;if(e===null)return z.f|=At,t;if(e.f&Jn)as(t,e);else{if(!(e.f&Qs))throw!e.parent&&t instanceof Error&&Sr(t),t;e.b.error(t)}}function as(t,e){for(;e!==null;){if(e.f&Qs)try{e.b.error(t);return}catch(s){t=s}e=e.parent}throw t instanceof Error&&Sr(t),t}function Sr(t){const e=_l.get(t);e&&(Gn(t,"message",{value:e.message}),Gn(t,"stack",{value:e.stack}))}const en=new Set;let ee=null,tn=null,ve=null,Zn=new Set,Ye=[],sn=null,$n=!1,Ds=!1;const jn=class jn{constructor(){K(this,be);Ot(this,"committed",!1);Ot(this,"current",new Map);K(this,Ss,new Map);K(this,_s,new Set);K(this,ks,0);K(this,Kt,0);K(this,Gs,null);K(this,Ts,[]);K(this,Es,[]);Ot(this,"skipped_effects",new Set)}process(e){Ye=[],tn=null,this.apply();var s={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(const n of e)ae(this,be,lr).call(this,n,s);ae(this,be,cr).call(this),b(this,Kt)>0?(ae(this,be,es).call(this,s.effects),ae(this,be,es).call(this,s.render_effects),ae(this,be,es).call(this,s.block_effects)):(tn=this,ee=null,kr(s.render_effects),kr(s.effects),tn=null),ve=null}capture(e,s){b(this,Ss).has(e)||b(this,Ss).set(e,s),this.current.set(e,e.v),ve==null||ve.set(e,e.v)}activate(){ee=this}deactivate(){ee=null,ve=null}flush(){if(Ye.length>0){if(this.activate(),_r(),ee!==null&&ee!==this)return}else ae(this,be,cr).call(this);this.deactivate();for(const e of Zn)if(Zn.delete(e),e(),ee!==null)break}increment(e){B(this,ks,b(this,ks)+1),e&&B(this,Kt,b(this,Kt)+1)}decrement(e){B(this,ks,b(this,ks)-1),e&&B(this,Kt,b(this,Kt)-1);for(const s of b(this,Ts))Ce(s,xe),jt(s);for(const s of b(this,Es))Ce(s,St),jt(s);B(this,Ts,[]),B(this,Es,[]),this.flush()}add_callback(e){b(this,_s).add(e)}settled(){return(b(this,Gs)??B(this,Gs,gr())).promise}static ensure(){if(ee===null){const e=ee=new jn;en.add(ee),Ds||jn.enqueue(()=>{ee===e&&e.flush()})}return ee}static enqueue(e){Rs(e)}apply(){}};Ss=new WeakMap,_s=new WeakMap,ks=new WeakMap,Kt=new WeakMap,Gs=new WeakMap,Ts=new WeakMap,Es=new WeakMap,be=new WeakSet,lr=function(e,s){var l;e.f^=Te;for(var n=e.first;n!==null;){var i=n.f,r=(i&(ut|Mt))!==0,o=r&&(i&Te)!==0,a=o||(i&Me)!==0||this.skipped_effects.has(n);if(n.f&Qs&&((l=n.b)!=null&&l.is_pending())&&(s={parent:s,effect:n,effects:[],render_effects:[],block_effects:[]}),!a&&n.fn!==null){r?n.f^=Te:i&Kn?s.effects.push(n):ln(n)&&(n.f&ct&&s.block_effects.push(n),un(n));var c=n.first;if(c!==null){n=c;continue}}var u=n.parent;for(n=n.next;n===null&&u!==null;)u===s.effect&&(ae(this,be,es).call(this,s.effects),ae(this,be,es).call(this,s.render_effects),ae(this,be,es).call(this,s.block_effects),s=s.parent),n=u.next,u=u.parent}},es=function(e){for(const s of e)(s.f&xe?b(this,Ts):b(this,Es)).push(s),Ce(s,Te)},cr=function(){if(b(this,Kt)===0){for(const e of b(this,_s))e();b(this,_s).clear()}b(this,ks)===0&&ae(this,be,Ua).call(this)},Ua=function(){var i,r;if(en.size>1){b(this,Ss).clear();var e=ve,s=!0,n={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(const o of en){if(o===this){s=!1;continue}const a=[];for(const[u,l]of this.current){if(o.current.has(u))if(s&&l!==o.current.get(u))o.current.set(u,l);else continue;a.push(u)}if(a.length===0)continue;const c=[...o.current.keys()].filter(u=>!this.current.has(u));if(c.length>0){const u=new Set,l=new Map;for(const h of a)Tr(h,c,u,l);if(Ye.length>0){ee=o,o.apply();for(const h of Ye)ae(i=o,be,lr).call(i,h,n);Ye=[],o.deactivate()}}}ee=null,ve=e}this.committed=!0,en.delete(this),(r=b(this,Gs))==null||r.resolve()};let ft=jn;function kl(t){var e=Ds;Ds=!0;try{for(var s;;){if(Sl(),Ye.length===0&&(ee==null||ee.flush(),Ye.length===0))return sn=null,s;_r()}}finally{Ds=e}}function _r(){var t=us;$n=!0;try{var e=0;for(qr(!0);Ye.length>0;){var s=ft.ensure();if(e++>1e3){var n,i;Tl()}s.process(Ye),_t.clear()}}finally{$n=!1,qr(t),sn=null}}function Tl(){try{cl()}catch(t){as(t,sn)}}let qe=null;function kr(t){var e=t.length;if(e!==0){for(var s=0;s<e;){var n=t[s++];if(!(n.f&(ht|Me))&&ln(n)&&(qe=new Set,un(n),n.deps===null&&n.first===null&&n.nodes_start===null&&(n.teardown===null&&n.ac===null?Ur(n):n.fn=null),(qe==null?void 0:qe.size)>0)){_t.clear();for(const i of qe){if(i.f&(ht|Me))continue;const r=[i];let o=i.parent;for(;o!==null;)qe.has(o)&&(qe.delete(o),r.push(o)),o=o.parent;for(let a=r.length-1;a>=0;a--){const c=r[a];c.f&(ht|Me)||un(c)}}qe.clear()}}qe=null}}function Tr(t,e,s,n){if(!s.has(t)&&(s.add(t),t.reactions!==null))for(const i of t.reactions){const r=i.f;r&we?Tr(i,e,s,n):r&(Qn|ct)&&!(r&xe)&&Er(i,e,n)&&(Ce(i,xe),jt(i))}}function Er(t,e,s){const n=s.get(t);if(n!==void 0)return n;if(t.deps!==null)for(const i of t.deps){if(e.includes(i))return!0;if(i.f&we&&Er(i,e,s))return s.set(i,!0),!0}return s.set(t,!1),!1}function jt(t){for(var e=sn=t;e.parent!==null;){e=e.parent;var s=e.f;if($n&&e===H&&s&ct)return;if(s&(Mt|ut)){if(!(s&Te))return;e.f^=Te}}Ye.push(e)}function El(t){let e=0,s=Ut(0),n;return()=>{zl()&&(w(s),ii(()=>(e===0&&(n=Ls(()=>t(()=>Ms(s)))),e+=1,()=>{Rs(()=>{e-=1,e===0&&(n==null||n(),n=void 0,Ms(s))})})))}}var Il=ss|ns|Qs;function Cl(t,e,s){new xl(t,e,s)}class xl{constructor(e,s,n){K(this,me);Ot(this,"parent");K(this,Ue,!1);K(this,ze);K(this,ir,null);K(this,rt);K(this,Xt);K(this,ot);K(this,We,null);K(this,Oe,null);K(this,at,null);K(this,vt,null);K(this,Ct,null);K(this,Jt,0);K(this,xt,0);K(this,Yt,!1);K(this,Nt,null);K(this,Un,()=>{b(this,Nt)&&Os(b(this,Nt),b(this,Jt))});K(this,zn,El(()=>(B(this,Nt,Ut(b(this,Jt))),()=>{B(this,Nt,null)})));B(this,ze,e),B(this,rt,s),B(this,Xt,n),this.parent=H.b,B(this,Ue,!!b(this,rt).pending),B(this,ot,ri(()=>{H.b=this;{var i=ae(this,me,ur).call(this);try{B(this,We,Ve(()=>n(i)))}catch(r){this.error(r)}b(this,xt)>0?ae(this,me,qn).call(this):B(this,Ue,!1)}return()=>{var r;(r=b(this,Ct))==null||r.remove()}},Il))}is_pending(){return b(this,Ue)||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!b(this,rt).pending}update_pending_count(e){ae(this,me,hr).call(this,e),B(this,Jt,b(this,Jt)+e),Zn.add(b(this,Un))}get_effect_pending(){return b(this,zn).call(this),w(b(this,Nt))}error(e){var s=b(this,rt).onerror;let n=b(this,rt).failed;if(b(this,Yt)||!s&&!n)throw e;b(this,We)&&(Ne(b(this,We)),B(this,We,null)),b(this,Oe)&&(Ne(b(this,Oe)),B(this,Oe,null)),b(this,at)&&(Ne(b(this,at)),B(this,at,null));var i=!1,r=!1;const o=()=>{if(i){ml();return}i=!0,r&&pl(),ft.ensure(),B(this,Jt,0),b(this,at)!==null&&cs(b(this,at),()=>{B(this,at,null)}),B(this,Ue,this.has_pending_snippet()),B(this,We,ae(this,me,Hn).call(this,()=>(B(this,Yt,!1),Ve(()=>b(this,Xt).call(this,b(this,ze)))))),b(this,xt)>0?ae(this,me,qn).call(this):B(this,Ue,!1)};var a=z;try{Re(null),r=!0,s==null||s(e,o),r=!1}catch(c){as(c,b(this,ot)&&b(this,ot).parent)}finally{Re(a)}n&&Rs(()=>{B(this,at,ae(this,me,Hn).call(this,()=>{ft.ensure(),B(this,Yt,!0);try{return Ve(()=>{n(b(this,ze),()=>e,()=>o)})}catch(c){return as(c,b(this,ot).parent),null}finally{B(this,Yt,!1)}}))})}}Ue=new WeakMap,ze=new WeakMap,ir=new WeakMap,rt=new WeakMap,Xt=new WeakMap,ot=new WeakMap,We=new WeakMap,Oe=new WeakMap,at=new WeakMap,vt=new WeakMap,Ct=new WeakMap,Jt=new WeakMap,xt=new WeakMap,Yt=new WeakMap,Nt=new WeakMap,Un=new WeakMap,zn=new WeakMap,me=new WeakSet,Nd=function(){try{B(this,We,Ve(()=>b(this,Xt).call(this,b(this,ze))))}catch(e){this.error(e)}B(this,Ue,!1)},Rd=function(){const e=b(this,rt).pending;e&&(B(this,Oe,Ve(()=>e(b(this,ze)))),ft.enqueue(()=>{var s=ae(this,me,ur).call(this);B(this,We,ae(this,me,Hn).call(this,()=>(ft.ensure(),Ve(()=>b(this,Xt).call(this,s))))),b(this,xt)>0?ae(this,me,qn).call(this):(cs(b(this,Oe),()=>{B(this,Oe,null)}),B(this,Ue,!1))}))},ur=function(){var e=b(this,ze);return b(this,Ue)&&(B(this,Ct,zt()),b(this,ze).before(b(this,Ct)),e=b(this,Ct)),e},Hn=function(e){var s=H,n=z,i=ue;Qe(b(this,ot)),Re(b(this,ot)),os(b(this,ot).ctx);try{return e()}catch(r){return wr(r),null}finally{Qe(s),Re(n),os(i)}},qn=function(){const e=b(this,rt).pending;b(this,We)!==null&&(B(this,vt,document.createDocumentFragment()),b(this,vt).append(b(this,Ct)),Hr(b(this,We),b(this,vt))),b(this,Oe)===null&&B(this,Oe,Ve(()=>e(b(this,ze))))},hr=function(e){var s;if(!this.has_pending_snippet()){this.parent&&ae(s=this.parent,me,hr).call(s,e);return}B(this,xt,b(this,xt)+e),b(this,xt)===0&&(B(this,Ue,!1),b(this,Oe)&&cs(b(this,Oe),()=>{B(this,Oe,null)}),b(this,vt)&&(b(this,ze).before(b(this,vt)),B(this,vt,null)))};function Nl(t,e,s){const n=Ns()?nn:ti;if(e.length===0){s(t.map(n));return}var i=ee,r=H,o=Rl();Promise.all(e.map(a=>Dl(a))).then(a=>{o();try{s([...t.map(n),...a])}catch(c){r.f&ht||as(c,r)}i==null||i.deactivate(),ei()}).catch(a=>{as(a,r)})}function Rl(){var t=H,e=z,s=ue,n=ee;return function(){Qe(t),Re(e),os(s),n==null||n.activate()}}function ei(){Qe(null),Re(null),os(null)}function nn(t){var e=we|xe,s=z!==null&&z.f&we?z:null;return H===null||s!==null&&s.f&Le?e|=Le:H.f|=ns,{ctx:ue,deps:null,effects:null,equals:vr,f:e,fn:t,reactions:null,rv:0,v:ye,wv:0,parent:s??H,ac:null}}function Dl(t,e){let s=H;s===null&&rl();var n=s.b,i=void 0,r=Ut(ye),o=!z,a=new Map;return ql(()=>{var f;var c=gr();i=c.promise;try{Promise.resolve(t()).then(c.resolve,c.reject).then(()=>{u===ee&&u.committed&&u.deactivate(),ei()})}catch(d){c.reject(d),ei()}var u=ee;if(o){var l=!n.is_pending();n.update_pending_count(1),u.increment(l),(f=a.get(u))==null||f.reject(is),a.delete(u),a.set(u,c)}const h=(d,p=void 0)=>{if(u.activate(),p)p!==is&&(r.f|=At,Os(r,p));else{r.f&At&&(r.f^=At),Os(r,d);for(const[m,_]of a){if(a.delete(m),m===u)break;_.reject(is)}}o&&(n.update_pending_count(-1),u.decrement(l))};c.promise.then(h,d=>h(null,d||"unknown"))}),ni(()=>{for(const c of a.values())c.reject(is)}),new Promise(c=>{function u(l){function h(){l===i?c(r):u(i)}l.then(h,h)}u(i)})}function pe(t){const e=nn(t);return Gr(e),e}function ti(t){const e=nn(t);return e.equals=br,e}function Ir(t){var e=t.effects;if(e!==null){t.effects=null;for(var s=0;s<e.length;s+=1)Ne(e[s])}}function Ol(t){for(var e=t.parent;e!==null;){if(!(e.f&we))return e;e=e.parent}return null}function si(t){var e,s=H;Qe(Ol(t));try{t.f&=~$s,Ir(t),e=Qr(t)}finally{Qe(s)}return e}function Cr(t){var e=si(t);if(t.equals(e)||(t.v=e,t.wv=Jr()),!Wt)if(ve!==null)ve.set(t,t.v);else{var s=(kt||t.f&Le)&&t.deps!==null?St:Te;Ce(t,s)}}const _t=new Map;function Ut(t,e){var s={f:0,v:t,reactions:null,equals:vr,rv:0,wv:0};return s}function oe(t,e){const s=Ut(t);return Gr(s),s}function Ml(t,e=!1,s=!0){var i;const n=Ut(t);return e||(n.equals=br),rs&&s&&ue!==null&&ue.l!==null&&((i=ue.l).s??(i.s=[])).push(n),n}function M(t,e,s=!1){z!==null&&(!Ge||z.f&mr)&&Ns()&&z.f&(we|ct|Qn|mr)&&!(Ee!=null&&Ee.includes(t))&&dl();let n=s?dt(e):e;return Os(t,n)}function Os(t,e){if(!t.equals(e)){var s=t.v;Wt?_t.set(t,e):_t.set(t,s),t.v=e;var n=ft.ensure();n.capture(t,s),t.f&we&&(t.f&xe&&si(t),Ce(t,t.f&Le?St:Te)),t.wv=Jr(),Nr(t,xe),Ns()&&H!==null&&H.f&Te&&!(H.f&(ut|Mt))&&(Be===null?Kl([t]):Be.push(t))}return e}function xr(t,e=1){var s=w(t),n=e===1?s++:s--;return M(t,s),n}function Ms(t){M(t,t.v+1)}function Nr(t,e){var s=t.reactions;if(s!==null)for(var n=Ns(),i=s.length,r=0;r<i;r++){var o=s[r],a=o.f;if(!(!n&&o===H)){var c=(a&xe)===0;c&&Ce(o,e),a&we?a&$s||(o.f|=$s,Nr(o,St)):c&&(a&ct&&qe!==null&&qe.add(o),jt(o))}}}function dt(t){if(typeof t!="object"||t===null||Pt in t)return t;const e=dr(t);if(e!==Qa&&e!==Za)return t;var s=new Map,n=Ys(t),i=oe(0),r=Ht,o=a=>{if(Ht===r)return a();var c=z,u=Ht;Re(null),Xr(r);var l=a();return Re(c),Xr(u),l};return n&&s.set("length",oe(t.length)),new Proxy(t,{defineProperty(a,c,u){(!("value"in u)||u.configurable===!1||u.enumerable===!1||u.writable===!1)&&hl();var l=s.get(c);return l===void 0?l=o(()=>{var h=oe(u.value);return s.set(c,h),h}):M(l,u.value,!0),!0},deleteProperty(a,c){var u=s.get(c);if(u===void 0){if(c in a){const l=o(()=>oe(ye));s.set(c,l),Ms(i)}}else M(u,ye),Ms(i);return!0},get(a,c,u){var d;if(c===Pt)return t;var l=s.get(c),h=c in a;if(l===void 0&&(!h||(d=ts(a,c))!=null&&d.writable)&&(l=o(()=>{var p=dt(h?a[c]:ye),m=oe(p);return m}),s.set(c,l)),l!==void 0){var f=w(l);return f===ye?void 0:f}return Reflect.get(a,c,u)},getOwnPropertyDescriptor(a,c){var u=Reflect.getOwnPropertyDescriptor(a,c);if(u&&"value"in u){var l=s.get(c);l&&(u.value=w(l))}else if(u===void 0){var h=s.get(c),f=h==null?void 0:h.v;if(h!==void 0&&f!==ye)return{enumerable:!0,configurable:!0,value:f,writable:!0}}return u},has(a,c){var f;if(c===Pt)return!0;var u=s.get(c),l=u!==void 0&&u.v!==ye||Reflect.has(a,c);if(u!==void 0||H!==null&&(!l||(f=ts(a,c))!=null&&f.writable)){u===void 0&&(u=o(()=>{var d=l?dt(a[c]):ye,p=oe(d);return p}),s.set(c,u));var h=w(u);if(h===ye)return!1}return l},set(a,c,u,l){var y;var h=s.get(c),f=c in a;if(n&&c==="length")for(var d=u;d<h.v;d+=1){var p=s.get(d+"");p!==void 0?M(p,ye):d in a&&(p=o(()=>oe(ye)),s.set(d+"",p))}if(h===void 0)(!f||(y=ts(a,c))!=null&&y.writable)&&(h=o(()=>oe(void 0)),M(h,dt(u)),s.set(c,h));else{f=h.v!==ye;var m=o(()=>dt(u));M(h,m)}var _=Reflect.getOwnPropertyDescriptor(a,c);if(_!=null&&_.set&&_.set.call(l,u),!f){if(n&&typeof c=="string"){var C=s.get("length"),T=Number(c);Number.isInteger(T)&&T>=C.v&&M(C,T+1)}Ms(i)}return!0},ownKeys(a){w(i);var c=Reflect.ownKeys(a).filter(h=>{var f=s.get(h);return f===void 0||f.v!==ye});for(var[u,l]of s)l.v!==ye&&!(u in a)&&c.push(u);return c},setPrototypeOf(){fl()}})}function Rr(t){try{if(t!==null&&typeof t=="object"&&Pt in t)return t[Pt]}catch{}return t}function Al(t,e){return Object.is(Rr(t),Rr(e))}var Dr,Or,Mr,Ar;function Pl(){if(Dr===void 0){Dr=window,Or=/Firefox/.test(navigator.userAgent);var t=Element.prototype,e=Node.prototype,s=Text.prototype;Mr=ts(e,"firstChild").get,Ar=ts(e,"nextSibling").get,pr(t)&&(t.__click=void 0,t.__className=void 0,t.__attributes=null,t.__style=void 0,t.__e=void 0),pr(s)&&(s.__t=void 0)}}function zt(t=""){return document.createTextNode(t)}function rn(t){return Mr.call(t)}function As(t){return Ar.call(t)}function L(t,e){return rn(t)}function ls(t,e=!1){{var s=rn(t);return s instanceof Comment&&s.data===""?As(s):s}}function Y(t,e=1,s=!1){let n=t;for(;e--;)n=As(n);return n}function Ll(t){t.textContent=""}function Pr(){return!1}let Lr=!1;function Bl(){Lr||(Lr=!0,document.addEventListener("reset",t=>{Promise.resolve().then(()=>{var e;if(!t.defaultPrevented)for(const s of t.target.elements)(e=s.__on_r)==null||e.call(s)})},{capture:!0}))}function on(t){var e=z,s=H;Re(null),Qe(null);try{return t()}finally{Re(e),Qe(s)}}function Fl(t,e,s,n=s){t.addEventListener(e,()=>on(s));const i=t.__on_r;i?t.__on_r=()=>{i(),n(!0)}:t.__on_r=()=>n(!0),Bl()}function jl(t){H===null&&z===null&&ll(),z!==null&&z.f&Le&&H===null&&al(),Wt&&ol()}function Ul(t,e){var s=e.last;s===null?e.last=e.first=t:(s.next=t,t.prev=s,e.last=t)}function pt(t,e,s,n=!0){var i=H;i!==null&&i.f&Me&&(t|=Me);var r={ctx:ue,deps:null,nodes_start:null,nodes_end:null,f:t|xe,first:null,fn:e,last:null,next:null,parent:i,b:i&&i.b,prev:null,teardown:null,transitions:null,wv:0,ac:null};if(s)try{un(r),r.f|=Jn}catch(c){throw Ne(r),c}else e!==null&&jt(r);if(n){var o=r;if(s&&o.deps===null&&o.teardown===null&&o.nodes_start===null&&o.first===o.last&&!(o.f&ns)&&(o=o.first,t&ct&&t&ss&&o!==null&&(o.f|=ss)),o!==null&&(o.parent=i,i!==null&&Ul(o,i),z!==null&&z.f&we&&!(t&Mt))){var a=z;(a.effects??(a.effects=[])).push(o)}}return r}function zl(){return z!==null&&!Ge}function ni(t){const e=pt(Xn,null,!1);return Ce(e,Te),e.teardown=t,e}function an(t){jl();var e=H.f,s=!z&&(e&ut)!==0&&(e&Jn)===0;if(s){var n=ue;(n.e??(n.e=[])).push(t)}else return Br(t)}function Br(t){return pt(Kn|tl,t,!1)}function Wl(t){ft.ensure();const e=pt(Mt|ns,t,!0);return(s={})=>new Promise(n=>{s.outro?cs(e,()=>{Ne(e),n(void 0)}):(Ne(e),n(void 0))})}function Hl(t){return pt(Kn,t,!1)}function ql(t){return pt(Qn|ns,t,!0)}function ii(t,e=0){return pt(Xn|e,t,!0)}function te(t,e=[],s=[]){Nl(e,s,n=>{pt(Xn,()=>t(...n.map(w)),!0)})}function ri(t,e=0){var s=pt(ct|e,t,!0);return s}function Ve(t,e=!0){return pt(ut|ns,t,!0,e)}function Fr(t){var e=t.teardown;if(e!==null){const s=Wt,n=z;Vr(!0),Re(null);try{e.call(null)}finally{Vr(s),Re(n)}}}function jr(t,e=!1){var s=t.first;for(t.first=t.last=null;s!==null;){const i=s.ac;i!==null&&on(()=>{i.abort(is)});var n=s.next;s.f&Mt?s.parent=null:Ne(s,e),s=n}}function Vl(t){for(var e=t.first;e!==null;){var s=e.next;e.f&ut||Ne(e),e=s}}function Ne(t,e=!0){var s=!1;(e||t.f&el)&&t.nodes_start!==null&&t.nodes_end!==null&&(Gl(t.nodes_start,t.nodes_end),s=!0),jr(t,e&&!s),cn(t,0),Ce(t,ht);var n=t.transitions;if(n!==null)for(const r of n)r.stop();Fr(t);var i=t.parent;i!==null&&i.first!==null&&Ur(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes_start=t.nodes_end=t.ac=null}function Gl(t,e){for(;t!==null;){var s=t===e?null:As(t);t.remove(),t=s}}function Ur(t){var e=t.parent,s=t.prev,n=t.next;s!==null&&(s.next=n),n!==null&&(n.prev=s),e!==null&&(e.first===t&&(e.first=n),e.last===t&&(e.last=s))}function cs(t,e,s=!0){var n=[];oi(t,n,!0),zr(n,()=>{s&&Ne(t),e&&e()})}function zr(t,e){var s=t.length;if(s>0){var n=()=>--s||e();for(var i of t)i.out(n)}else e()}function oi(t,e,s){if(!(t.f&Me)){if(t.f^=Me,t.transitions!==null)for(const o of t.transitions)(o.is_global||s)&&e.push(o);for(var n=t.first;n!==null;){var i=n.next,r=(n.f&ss)!==0||(n.f&ut)!==0&&(t.f&ct)!==0;oi(n,e,r?s:!1),n=i}}}function ai(t){Wr(t,!0)}function Wr(t,e){if(t.f&Me){t.f^=Me,t.f&Te||(Ce(t,xe),jt(t));for(var s=t.first;s!==null;){var n=s.next,i=(s.f&ss)!==0||(s.f&ut)!==0;Wr(s,i?e:!1),s=n}if(t.transitions!==null)for(const r of t.transitions)(r.is_global||e)&&r.in()}}function Hr(t,e){for(var s=t.nodes_start,n=t.nodes_end;s!==null;){var i=s===n?null:As(s);e.append(s),s=i}}let us=!1;function qr(t){us=t}let Wt=!1;function Vr(t){Wt=t}let z=null,Ge=!1;function Re(t){z=t}let H=null;function Qe(t){H=t}let Ee=null;function Gr(t){z!==null&&(Ee===null?Ee=[t]:Ee.push(t))}let Ie=null,Ae=0,Be=null;function Kl(t){Be=t}let Kr=1,Ps=0,Ht=Ps;function Xr(t){Ht=t}let kt=!1;function Jr(){return++Kr}function ln(t){var h;var e=t.f;if(e&xe)return!0;if(e&St){var s=t.deps,n=(e&Le)!==0;if(e&we&&(t.f&=~$s),s!==null){var i,r,o=(e&Zs)!==0,a=n&&H!==null&&!kt,c=s.length;if((o||a)&&(H===null||!(H.f&ht))){var u=t,l=u.parent;for(i=0;i<c;i++)r=s[i],(o||!((h=r==null?void 0:r.reactions)!=null&&h.includes(u)))&&(r.reactions??(r.reactions=[])).push(u);o&&(u.f^=Zs),a&&l!==null&&!(l.f&Le)&&(u.f^=Le)}for(i=0;i<c;i++)if(r=s[i],ln(r)&&Cr(r),r.wv>t.wv)return!0}(!n||H!==null&&!kt)&&Ce(t,Te)}return!1}function Yr(t,e,s=!0){var n=t.reactions;if(n!==null&&!(Ee!=null&&Ee.includes(t)))for(var i=0;i<n.length;i++){var r=n[i];r.f&we?Yr(r,e,!1):e===r&&(s?Ce(r,xe):r.f&Te&&Ce(r,St),jt(r))}}function Qr(t){var m;var e=Ie,s=Ae,n=Be,i=z,r=kt,o=Ee,a=ue,c=Ge,u=Ht,l=t.f;Ie=null,Ae=0,Be=null,kt=(l&Le)!==0&&(Ge||!us||z===null),z=l&(ut|Mt)?null:t,Ee=null,os(t.ctx),Ge=!1,Ht=++Ps,t.ac!==null&&(on(()=>{t.ac.abort(is)}),t.ac=null);try{t.f|=Yn;var h=t.fn,f=h(),d=t.deps;if(Ie!==null){var p;if(cn(t,Ae),d!==null&&Ae>0)for(d.length=Ae+Ie.length,p=0;p<Ie.length;p++)d[Ae+p]=Ie[p];else t.deps=d=Ie;if(!kt||l&we&&t.reactions!==null)for(p=Ae;p<d.length;p++)((m=d[p]).reactions??(m.reactions=[])).push(t)}else d!==null&&Ae<d.length&&(cn(t,Ae),d.length=Ae);if(Ns()&&Be!==null&&!Ge&&d!==null&&!(t.f&(we|St|xe)))for(p=0;p<Be.length;p++)Yr(Be[p],t);return i!==null&&i!==t&&(Ps++,Be!==null&&(n===null?n=Be:n.push(...Be))),t.f&At&&(t.f^=At),f}catch(_){return wr(_)}finally{t.f^=Yn,Ie=e,Ae=s,Be=n,z=i,kt=r,Ee=o,os(a),Ge=c,Ht=u}}function Xl(t,e){let s=e.reactions;if(s!==null){var n=Ja.call(s,t);if(n!==-1){var i=s.length-1;i===0?s=e.reactions=null:(s[n]=s[i],s.pop())}}s===null&&e.f&we&&(Ie===null||!Ie.includes(e))&&(Ce(e,St),e.f&(Le|Zs)||(e.f^=Zs),Ir(e),cn(e,0))}function cn(t,e){var s=t.deps;if(s!==null)for(var n=e;n<s.length;n++)Xl(t,s[n])}function un(t){var e=t.f;if(!(e&ht)){Ce(t,Te);var s=H,n=us;H=t,us=!0;try{e&ct?Vl(t):jr(t),Fr(t);var i=Qr(t);t.teardown=typeof i=="function"?i:null,t.wv=Kr;var r;fr&&yl&&t.f&xe&&t.deps}finally{us=n,H=s}}}async function Jl(){await Promise.resolve(),kl()}function w(t){var e=t.f,s=(e&we)!==0;if(z!==null&&!Ge){var n=H!==null&&(H.f&ht)!==0;if(!n&&!(Ee!=null&&Ee.includes(t))){var i=z.deps;if(z.f&Yn)t.rv<Ps&&(t.rv=Ps,Ie===null&&i!==null&&i[Ae]===t?Ae++:Ie===null?Ie=[t]:(!kt||!Ie.includes(t))&&Ie.push(t));else{(z.deps??(z.deps=[])).push(t);var r=t.reactions;r===null?t.reactions=[z]:r.includes(z)||r.push(z)}}}else if(s&&t.deps===null&&t.effects===null){var o=t,a=o.parent;a!==null&&!(a.f&Le)&&(o.f^=Le)}if(Wt){if(_t.has(t))return _t.get(t);if(s){o=t;var c=o.v;return(!(o.f&Te)&&o.reactions!==null||Zr(o))&&(c=si(o)),_t.set(o,c),c}}else if(s){if(o=t,ve!=null&&ve.has(o))return ve.get(o);ln(o)&&Cr(o)}if(ve!=null&&ve.has(t))return ve.get(t);if(t.f&At)throw t.v;return t.v}function Zr(t){if(t.v===ye)return!0;if(t.deps===null)return!1;for(const e of t.deps)if(_t.has(e)||e.f&we&&Zr(e))return!0;return!1}function Ls(t){var e=Ge;try{return Ge=!0,t()}finally{Ge=e}}const Yl=-7169;function Ce(t,e){t.f=t.f&Yl|e}const $r=new Set,li=new Set;function Ql(t,e,s,n={}){function i(r){if(n.capture||Fs.call(e,r),!r.cancelBubble)return on(()=>s==null?void 0:s.call(this,r))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?Rs(()=>{e.addEventListener(t,i,n)}):e.addEventListener(t,i,n),i}function Bs(t,e,s,n,i){var r={capture:n,passive:i},o=Ql(t,e,s,r);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&ni(()=>{e.removeEventListener(t,o,r)})}function ci(t){for(var e=0;e<t.length;e++)$r.add(t[e]);for(var s of li)s(t)}let eo=null;function Fs(t){var T;var e=this,s=e.ownerDocument,n=t.type,i=((T=t.composedPath)==null?void 0:T.call(t))||[],r=i[0]||t.target;eo=t;var o=0,a=eo===t&&t.__root;if(a){var c=i.indexOf(a);if(c!==-1&&(e===document||e===window)){t.__root=e;return}var u=i.indexOf(e);if(u===-1)return;c<=u&&(o=c)}if(r=i[o]||t.target,r!==e){Gn(t,"currentTarget",{configurable:!0,get(){return r||s}});var l=z,h=H;Re(null),Qe(null);try{for(var f,d=[];r!==null;){var p=r.assignedSlot||r.parentNode||r.host||null;try{var m=r["__"+n];if(m!=null&&(!r.disabled||t.target===r))if(Ys(m)){var[_,...C]=m;_.apply(r,[t,...C])}else m.call(r,t)}catch(y){f?d.push(y):f=y}if(t.cancelBubble||p===e||p===null)break;r=p}if(f){for(let y of d)queueMicrotask(()=>{throw y});throw f}}finally{t.__root=e,delete t.currentTarget,Re(l),Qe(h)}}}function Zl(t){var e=document.createElement("template");return e.innerHTML=t.replaceAll("<!>","<!---->"),e.content}function ui(t,e){var s=H;s.nodes_start===null&&(s.nodes_start=t,s.nodes_end=e)}function X(t,e){var s=(e&Ga)!==0,n=(e&Ka)!==0,i,r=!t.startsWith("<!>");return()=>{i===void 0&&(i=Zl(r?t:"<!>"+t),s||(i=rn(i)));var o=n||Or?document.importNode(i,!0):i.cloneNode(!0);if(s){var a=rn(o),c=o.lastChild;ui(a,c)}else ui(o,o);return o}}function js(){var t=document.createDocumentFragment(),e=document.createComment(""),s=zt();return t.append(e,s),ui(e,s),t}function W(t,e){t!==null&&t.before(e)}const $l=["touchstart","touchmove"];function ec(t){return $l.includes(t)}function Z(t,e){var s=e==null?"":typeof e=="object"?e+"":e;s!==(t.__t??(t.__t=t.nodeValue))&&(t.__t=s,t.nodeValue=s+"")}function tc(t,e){return sc(t,e)}const hs=new Map;function sc(t,{target:e,anchor:s,props:n={},events:i,context:r,intro:o=!0}){Pl();var a=new Set,c=h=>{for(var f=0;f<h.length;f++){var d=h[f];if(!a.has(d)){a.add(d);var p=ec(d);e.addEventListener(d,Fs,{passive:p});var m=hs.get(d);m===void 0?(document.addEventListener(d,Fs,{passive:p}),hs.set(d,1)):hs.set(d,m+1)}}};c(Vn($r)),li.add(c);var u=void 0,l=Wl(()=>{var h=s??e.appendChild(zt());return Cl(h,{pending:()=>{}},f=>{if(r){Lt({});var d=ue;d.c=r}i&&(n.$$events=i),u=t(f,n)||{},r&&Bt()}),()=>{var p;for(var f of a){e.removeEventListener(f,Fs);var d=hs.get(f);--d===0?(document.removeEventListener(f,Fs),hs.delete(f)):hs.set(f,d)}li.delete(c),h!==s&&((p=h.parentNode)==null||p.removeChild(h))}});return nc.set(u,l),u}let nc=new WeakMap;class ic{constructor(e,s=!0){Ot(this,"anchor");K(this,bt,new Map);K(this,lt,new Map);K(this,Xe,new Map);K(this,Ks,!0);K(this,Xs,()=>{var e=ee;if(b(this,bt).has(e)){var s=b(this,bt).get(e),n=b(this,lt).get(s);if(n)ai(n);else{var i=b(this,Xe).get(s);i&&(b(this,lt).set(s,i.effect),b(this,Xe).delete(s),i.fragment.lastChild.remove(),this.anchor.before(i.fragment),n=i.effect)}for(const[r,o]of b(this,bt)){if(b(this,bt).delete(r),r===e)break;const a=b(this,Xe).get(o);a&&(Ne(a.effect),b(this,Xe).delete(o))}for(const[r,o]of b(this,lt)){if(r===s)continue;const a=()=>{if(Array.from(b(this,bt).values()).includes(r)){var u=document.createDocumentFragment();Hr(o,u),u.append(zt()),b(this,Xe).set(r,{effect:o,fragment:u})}else Ne(o);b(this,lt).delete(r)};b(this,Ks)||!n?cs(o,a,!1):a()}}});this.anchor=e,B(this,Ks,s)}ensure(e,s){var n=ee,i=Pr();if(s&&!b(this,lt).has(e)&&!b(this,Xe).has(e))if(i){var r=document.createDocumentFragment(),o=zt();r.append(o),b(this,Xe).set(e,{effect:Ve(()=>s(o)),fragment:r})}else b(this,lt).set(e,Ve(()=>s(this.anchor)));if(b(this,bt).set(n,e),i){for(const[a,c]of b(this,lt))a===e?n.skipped_effects.delete(c):n.skipped_effects.add(c);for(const[a,c]of b(this,Xe))a===e?n.skipped_effects.delete(c.effect):n.skipped_effects.add(c.effect);n.add_callback(b(this,Xs))}else b(this,Xs).call(this)}}bt=new WeakMap,lt=new WeakMap,Xe=new WeakMap,Ks=new WeakMap,Xs=new WeakMap;function hi(t){ue===null&&il(),rs&&ue.l!==null?rc(ue).m.push(t):an(()=>{const e=Ls(t);if(typeof e=="function")return e})}function rc(t){var e=t.l;return e.u??(e.u={a:[],b:[],m:[]})}function ie(t,e,s=!1){var n=new ic(t),i=s?ss:0;function r(o,a){n.ensure(o,a)}ri(()=>{var o=!1;e((a,c=!0)=>{o=!0,r(c,a)}),o||r(!1,null)},i)}function Us(t,e){return e}function oc(t,e,s){for(var n=t.items,i=[],r=e.length,o=0;o<r;o++)oi(e[o].e,i,!0);var a=r>0&&i.length===0&&s!==null;if(a){var c=s.parentNode;Ll(c),c.append(s),n.clear(),Ze(t,e[0].prev,e[r-1].next)}zr(i,()=>{for(var u=0;u<r;u++){var l=e[u];a||(n.delete(l.k),Ze(t,l.prev,l.next)),Ne(l.e,!a)}})}function zs(t,e,s,n,i,r=null){var o=t,a={flags:e,items:new Map,first:null};{var c=t;o=c.appendChild(zt())}var u=null,l=!1,h=new Map,f=ti(()=>{var _=s();return Ys(_)?_:_==null?[]:Vn(_)}),d,p;function m(){ac(p,d,a,h,o,i,e,n,s),r!==null&&(d.length===0?u?ai(u):u=Ve(()=>r(o)):u!==null&&cs(u,()=>{u=null}))}ri(()=>{p??(p=H),d=w(f);var _=d.length;if(!(l&&_===0)){l=_===0;var C,T,y,g;if(Pr()){var v=new Set,I=ee;for(T=0;T<_;T+=1){y=d[T],g=n(y,T);var x=a.items.get(g)??h.get(g);x?to(x,y,T):(C=so(null,a,null,null,y,g,T,i,e,s,!0),h.set(g,C)),v.add(g)}for(const[S,k]of a.items)v.has(S)||I.skipped_effects.add(k.e);I.add_callback(m)}else m();w(f)}})}function ac(t,e,s,n,i,r,o,a,c){var u=e.length,l=s.items,h=s.first,f=h,d,p=null,m=[],_=[],C,T,y,g;for(g=0;g<u;g+=1){if(C=e[g],T=a(C,g),y=l.get(T),y===void 0){var v=n.get(T);if(v!==void 0){n.delete(T),l.set(T,v);var I=p?p.next:f;Ze(s,p,v),Ze(s,v,I),fi(v,I,i),p=v}else{var x=f?f.e.nodes_start:i;p=so(x,s,p,p===null?s.first:p.next,C,T,g,r,o,c)}l.set(T,p),m=[],_=[],f=p.next;continue}if(to(y,C,g),y.e.f&Me&&ai(y.e),y!==f){if(d!==void 0&&d.has(y)){if(m.length<_.length){var S=_[0],k;p=S.prev;var A=m[0],j=m[m.length-1];for(k=0;k<m.length;k+=1)fi(m[k],S,i);for(k=0;k<_.length;k+=1)d.delete(_[k]);Ze(s,A.prev,j.next),Ze(s,p,A),Ze(s,j,S),f=S,p=j,g-=1,m=[],_=[]}else d.delete(y),fi(y,f,i),Ze(s,y.prev,y.next),Ze(s,y,p===null?s.first:p.next),Ze(s,p,y),p=y;continue}for(m=[],_=[];f!==null&&f.k!==T;)f.e.f&Me||(d??(d=new Set)).add(f),_.push(f),f=f.next;if(f===null)continue;y=f}m.push(y),p=y,f=y.next}if(f!==null||d!==void 0){for(var F=d===void 0?[]:Vn(d);f!==null;)f.e.f&Me||F.push(f),f=f.next;var G=F.length;if(G>0){var U=u===0?i:null;oc(s,F,U)}}t.first=s.first&&s.first.e,t.last=p&&p.e;for(var E of n.values())Ne(E.e);n.clear()}function to(t,e,s,n){Os(t.v,e),t.i=s}function so(t,e,s,n,i,r,o,a,c,u,l){var h=(c&$)!==0,f=(c&Js)===0,d=h?f?Ml(i,!1,!1):Ut(i):i,p=c&de?Ut(o):o,m={i:p,v:d,k:r,a:null,e:null,prev:s,next:n};try{if(t===null){var _=document.createDocumentFragment();_.append(t=zt())}return m.e=Ve(()=>a(t,d,p,u),vl),m.e.prev=s&&s.e,m.e.next=n&&n.e,s===null?l||(e.first=m):(s.next=m,s.e.next=m.e),n!==null&&(n.prev=m,n.e.prev=m.e),m}finally{}}function fi(t,e,s){for(var n=t.next?t.next.e.nodes_start:s,i=e?e.e.nodes_start:s,r=t.e.nodes_start;r!==null&&r!==n;){var o=As(r);i.before(r),r=o}}function Ze(t,e,s){e===null?t.first=s:(e.next=s,e.e.next=s&&s.e),s!==null&&(s.prev=e,s.e.prev=e&&e.e)}function lc(t,e,s){var n=t==null?"":""+t;return n=n?n+" "+e:e,n===""?null:n}function no(t,e,s,n,i,r){var o=t.__className;if(o!==s||o===void 0){var a=lc(s,n);a==null?t.removeAttribute("class"):t.className=a,t.__className=s}return r}function io(t,e,s=!1){if(t.multiple){if(e==null)return;if(!Ys(e))return gl();for(var n of t.options)n.selected=e.includes(ro(n));return}for(n of t.options){var i=ro(n);if(Al(i,e)){n.selected=!0;return}}(!s||e!==void 0)&&(t.selectedIndex=-1)}function cc(t){var e=new MutationObserver(()=>{io(t,t.__value)});e.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),ni(()=>{e.disconnect()})}function ro(t){return"__value"in t?t.__value:t.value}const uc=Symbol("is custom element"),hc=Symbol("is html");function fc(t,e){e?t.hasAttribute("selected")||t.setAttribute("selected",""):t.removeAttribute("selected")}function hn(t,e,s,n){var i=dc(t);i[e]!==(i[e]=s)&&(e==="loading"&&(t[nl]=s),s==null?t.removeAttribute(e):typeof s!="string"&&pc(t).includes(e)?t[e]=s:t.setAttribute(e,s))}function dc(t){return t.__attributes??(t.__attributes={[uc]:t.nodeName.includes("-"),[hc]:t.namespaceURI===Xa})}var oo=new Map;function pc(t){var e=t.getAttribute("is")||t.nodeName,s=oo.get(e);if(s)return s;oo.set(e,s=[]);for(var n,i=t,r=Element.prototype;r!==i;){n=Ya(i);for(var o in n)n[o].set&&s.push(o);i=dr(i)}return s}function gc(t,e,s=e){var n=new WeakSet;Fl(t,"input",async i=>{var r=i?t.defaultValue:t.value;if(r=di(t)?pi(r):r,s(r),ee!==null&&n.add(ee),await Jl(),r!==(r=e())){var o=t.selectionStart,a=t.selectionEnd,c=t.value.length;if(t.value=r??"",a!==null){var u=t.value.length;o===a&&a===c&&u>c?(t.selectionStart=u,t.selectionEnd=u):(t.selectionStart=o,t.selectionEnd=Math.min(a,u))}}}),Ls(e)==null&&t.value&&(s(di(t)?pi(t.value):t.value),ee!==null&&n.add(ee)),ii(()=>{var i=e();if(t===document.activeElement){var r=tn??ee;if(n.has(r))return}di(t)&&i===pi(t.value)||t.type==="date"&&!i&&!t.value||i!==t.value&&(t.value=i??"")})}function di(t){var e=t.type;return e==="number"||e==="range"}function pi(t){return t===""?null:+t}function ao(t,e){return t===e||(t==null?void 0:t[Pt])===e}function mc(t={},e,s,n){return Hl(()=>{var i,r;return ii(()=>{i=r,r=[],Ls(()=>{t!==s(...r)&&(e(t,...r),i&&ao(s(...i),t)&&e(null,...i))})}),()=>{Rs(()=>{r&&ao(s(...r),t)&&e(null,...r)})}}),t}let fn=!1;function vc(t){var e=fn;try{return fn=!1,[t(),fn]}finally{fn=e}}function lo(t,e,s,n){var y;var i=!rs||(s&Wa)!==0,r=(s&qa)!==0,o=(s&Va)!==0,a=n,c=!0,u=()=>(c&&(c=!1,a=o?Ls(n):n),a),l;if(r){var h=Pt in t||sl in t;l=((y=ts(t,e))==null?void 0:y.set)??(h&&e in t?g=>t[e]=g:void 0)}var f,d=!1;r?[f,d]=vc(()=>t[e]):f=t[e],f===void 0&&n!==void 0&&(f=u(),l&&(i&&ul(),l(f)));var p;if(i?p=()=>{var g=t[e];return g===void 0?u():(c=!0,g)}:p=()=>{var g=t[e];return g!==void 0&&(a=void 0),g===void 0?a:g},i&&!(s&Ha))return p;if(l){var m=t.$$legacy;return function(g,v){return arguments.length>0?((!i||!v||m||d)&&l(v?p():g),g):p()}}var _=!1,C=(s&za?nn:ti)(()=>(_=!1,p()));r&&w(C);var T=H;return function(g,v){if(arguments.length>0){const I=v?w(C):i&&r?dt(g):g;return M(C,I),_=!0,a!==void 0&&(a=I),g}return Wt&&_||T.f&ht?C.v:w(C)}}function co(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}function gi(t,e,s){let n="";if(s){const i=new Date;i.setTime(i.getTime()+s*24*60*60*1e3),n="; expires="+i.toUTCString()}document.cookie=t+"="+(e||"")+n+"; path=/; secure; samesite=strict"}function mi(t){const e=t+"=",s=document.cookie.split(";");for(let n=0;n<s.length;n++){let i=s[n];for(;i.charAt(0)===" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return i.substring(e.length,i.length)}return null}function uo(){const t="uniqueUserID";let e=mi(t);return e||(e=co(),gi(t,e,365)),e}function $e(t,e,s={},n={}){const i="https://admin-api.wineater.com/api/widget-events";let r=mi("uniqueUserID");r||(r=uo());const o={user_agent:navigator.userAgent,screen_width:window.screen.width,screen_height:window.screen.height,language:navigator.language,platform:navigator.platform},a=new Date().toISOString();let c=mi("sessionID");c||(c=co(),gi("sessionID",c,1));const u={event_type:t,store_id:e,session_id:c,event_time:a,data:s,meta:{...n,user_id:r},device_info:o,region:navigator.language.split("-")[1]||null,language:navigator.language.split("-")[0]||"en"};return fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)}).then(l=>l.ok?l.json():l.json().then(h=>{throw new Error(h.message||"Failed to track widget event")})).catch(l=>{throw console.error("Widget event tracking error:",l),l})}var ho={},bc=function(t,e,s,n,i){var r=new Worker(ho[e]||(ho[e]=URL.createObjectURL(new Blob([t+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));return r.onmessage=function(o){var a=o.data,c=a.$e$;if(c){var u=new Error(c[0]);u.code=c[1],u.stack=c[2],i(u,null)}else i(null,a)},r.postMessage(s,n),r},Fe=Uint8Array,De=Uint16Array,dn=Int32Array,pn=new Fe([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),gn=new Fe([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),vi=new Fe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),fo=function(t,e){for(var s=new De(31),n=0;n<31;++n)s[n]=e+=1<<t[n-1];for(var i=new dn(s[30]),n=1;n<30;++n)for(var r=s[n];r<s[n+1];++r)i[r]=r-s[n]<<5|n;return{b:s,r:i}},po=fo(pn,2),yc=po.b,mn=po.r;yc[28]=258,mn[258]=28;for(var wc=fo(gn,0),bi=wc.r,vn=new De(32768),ne=0;ne<32768;++ne){var Tt=(ne&43690)>>1|(ne&21845)<<1;Tt=(Tt&52428)>>2|(Tt&13107)<<2,Tt=(Tt&61680)>>4|(Tt&3855)<<4,vn[ne]=((Tt&65280)>>8|(Tt&255)<<8)>>1}for(var fs=function(t,e,s){for(var n=t.length,i=0,r=new De(e);i<n;++i)t[i]&&++r[t[i]-1];var o=new De(e);for(i=1;i<e;++i)o[i]=o[i-1]+r[i-1]<<1;var a;if(s){a=new De(1<<e);var c=15-e;for(i=0;i<n;++i)if(t[i])for(var u=i<<4|t[i],l=e-t[i],h=o[t[i]-1]++<<l,f=h|(1<<l)-1;h<=f;++h)a[vn[h]>>c]=u}else for(a=new De(n),i=0;i<n;++i)t[i]&&(a[i]=vn[o[t[i]-1]++]>>15-t[i]);return a},Et=new Fe(288),ne=0;ne<144;++ne)Et[ne]=8;for(var ne=144;ne<256;++ne)Et[ne]=9;for(var ne=256;ne<280;++ne)Et[ne]=7;for(var ne=280;ne<288;++ne)Et[ne]=8;for(var Ws=new Fe(32),ne=0;ne<32;++ne)Ws[ne]=5;var go=fs(Et,9,0),mo=fs(Ws,5,0),yi=function(t){return(t+7)/8|0},vo=function(t,e,s){return(e==null||e<0)&&(e=0),(s==null||s>t.length)&&(s=t.length),new Fe(t.subarray(e,s))},Sc=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],bo=function(t,e,s){var n=new Error(e||Sc[t]);if(n.code=t,Error.captureStackTrace&&Error.captureStackTrace(n,bo),!s)throw n;return n},et=function(t,e,s){s<<=e&7;var n=e/8|0;t[n]|=s,t[n+1]|=s>>8},ds=function(t,e,s){s<<=e&7;var n=e/8|0;t[n]|=s,t[n+1]|=s>>8,t[n+2]|=s>>16},bn=function(t,e){for(var s=[],n=0;n<t.length;++n)t[n]&&s.push({s:n,f:t[n]});var i=s.length,r=s.slice();if(!i)return{t:ki,l:0};if(i==1){var o=new Fe(s[0].s+1);return o[s[0].s]=1,{t:o,l:1}}s.sort(function(v,I){return v.f-I.f}),s.push({s:-1,f:25001});var a=s[0],c=s[1],u=0,l=1,h=2;for(s[0]={s:-1,f:a.f+c.f,l:a,r:c};l!=i-1;)a=s[s[u].f<s[h].f?u++:h++],c=s[u!=l&&s[u].f<s[h].f?u++:h++],s[l++]={s:-1,f:a.f+c.f,l:a,r:c};for(var f=r[0].s,n=1;n<i;++n)r[n].s>f&&(f=r[n].s);var d=new De(f+1),p=yn(s[l-1],d,0);if(p>e){var n=0,m=0,_=p-e,C=1<<_;for(r.sort(function(I,x){return d[x.s]-d[I.s]||I.f-x.f});n<i;++n){var T=r[n].s;if(d[T]>e)m+=C-(1<<p-d[T]),d[T]=e;else break}for(m>>=_;m>0;){var y=r[n].s;d[y]<e?m-=1<<e-d[y]++-1:++n}for(;n>=0&&m;--n){var g=r[n].s;d[g]==e&&(--d[g],++m)}p=e}return{t:new Fe(d),l:p}},yn=function(t,e,s){return t.s==-1?Math.max(yn(t.l,e,s+1),yn(t.r,e,s+1)):e[t.s]=s},wi=function(t){for(var e=t.length;e&&!t[--e];);for(var s=new De(++e),n=0,i=t[0],r=1,o=function(c){s[n++]=c},a=1;a<=e;++a)if(t[a]==i&&a!=e)++r;else{if(!i&&r>2){for(;r>138;r-=138)o(32754);r>2&&(o(r>10?r-11<<5|28690:r-3<<5|12305),r=0)}else if(r>3){for(o(i),--r;r>6;r-=6)o(8304);r>2&&(o(r-3<<5|8208),r=0)}for(;r--;)o(i);r=1,i=t[a]}return{c:s.subarray(0,n),n:e}},ps=function(t,e){for(var s=0,n=0;n<e.length;++n)s+=t[n]*e[n];return s},Si=function(t,e,s){var n=s.length,i=yi(e+2);t[i]=n&255,t[i+1]=n>>8,t[i+2]=t[i]^255,t[i+3]=t[i+1]^255;for(var r=0;r<n;++r)t[i+r+4]=s[r];return(i+4+n)*8},_i=function(t,e,s,n,i,r,o,a,c,u,l){et(e,l++,s),++i[256];for(var h=bn(i,15),f=h.t,d=h.l,p=bn(r,15),m=p.t,_=p.l,C=wi(f),T=C.c,y=C.n,g=wi(m),v=g.c,I=g.n,x=new De(19),S=0;S<T.length;++S)++x[T[S]&31];for(var S=0;S<v.length;++S)++x[v[S]&31];for(var k=bn(x,7),A=k.t,j=k.l,F=19;F>4&&!A[vi[F-1]];--F);var G=u+5<<3,U=ps(i,Et)+ps(r,Ws)+o,E=ps(i,f)+ps(r,m)+o+14+3*F+ps(x,A)+2*x[16]+3*x[17]+7*x[18];if(c>=0&&G<=U&&G<=E)return Si(e,l,t.subarray(c,c+u));var R,O,N,V;if(et(e,l,1+(E<U)),l+=2,E<U){R=fs(f,d,0),O=f,N=fs(m,_,0),V=m;var J=fs(A,j,0);et(e,l,y-257),et(e,l+5,I-1),et(e,l+10,F-4),l+=14;for(var S=0;S<F;++S)et(e,l+3*S,A[vi[S]]);l+=3*F;for(var se=[T,v],fe=0;fe<2;++fe)for(var ge=se[fe],S=0;S<ge.length;++S){var D=ge[S]&31;et(e,l,J[D]),l+=A[D],D>15&&(et(e,l,ge[S]>>5&127),l+=ge[S]>>12)}}else R=go,O=Et,N=mo,V=Ws;for(var S=0;S<a;++S){var P=n[S];if(P>255){var D=P>>18&31;ds(e,l,R[D+257]),l+=O[D+257],D>7&&(et(e,l,P>>23&31),l+=pn[D]);var re=P&31;ds(e,l,N[re]),l+=V[re],re>3&&(ds(e,l,P>>5&8191),l+=gn[re])}else ds(e,l,R[P]),l+=O[P]}return ds(e,l,R[256]),l+O[256]},yo=new dn([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),ki=new Fe(0),wo=function(t,e,s,n,i,r){var o=r.z||t.length,a=new Fe(n+o+5*(1+Math.ceil(o/7e3))+i),c=a.subarray(n,a.length-i),u=r.l,l=(r.r||0)&7;if(e){l&&(c[0]=r.r>>3);for(var h=yo[e-1],f=h>>13,d=h&8191,p=(1<<s)-1,m=r.p||new De(32768),_=r.h||new De(p+1),C=Math.ceil(s/3),T=2*C,y=function(Rt){return(t[Rt]^t[Rt+1]<<C^t[Rt+2]<<T)&p},g=new dn(25e3),v=new De(288),I=new De(32),x=0,S=0,k=r.i||0,A=0,j=r.w||0,F=0;k+2<o;++k){var G=y(k),U=k&32767,E=_[G];if(m[U]=E,_[G]=U,j<=k){var R=o-k;if((x>7e3||A>24576)&&(R>423||!u)){l=_i(t,c,0,g,v,I,S,A,F,k-F,l),A=x=S=0,F=k;for(var O=0;O<286;++O)v[O]=0;for(var O=0;O<30;++O)I[O]=0}var N=2,V=0,J=d,se=U-E&32767;if(R>2&&G==y(k-se))for(var fe=Math.min(f,R)-1,ge=Math.min(32767,k),D=Math.min(258,R);se<=ge&&--J&&U!=E;){if(t[k+N]==t[k+N-se]){for(var P=0;P<D&&t[k+P]==t[k+P-se];++P);if(P>N){if(N=P,V=se,P>fe)break;for(var re=Math.min(se,P-2),yt=0,O=0;O<re;++O){var wt=k-se+O&32767,Zt=m[wt],Je=wt-Zt&32767;Je>yt&&(yt=Je,E=wt)}}}U=E,E=m[U],se+=U-E&32767}if(V){g[A++]=268435456|mn[N]<<18|bi[V];var Cs=mn[N]&31,xs=bi[V]&31;S+=pn[Cs]+gn[xs],++v[257+Cs],++I[xs],j=k+N,++x}else g[A++]=t[k],++v[t[k]]}}for(k=Math.max(k,j);k<o;++k)g[A++]=t[k],++v[t[k]];l=_i(t,c,u,g,v,I,S,A,F,k-F,l),u||(r.r=l&7|c[l/8|0]<<3,l-=7,r.h=_,r.p=m,r.i=k,r.w=j)}else{for(var k=r.w||0;k<o+u;k+=65535){var $t=k+65535;$t>=o&&(c[l/8|0]=u,$t=o),l=Si(c,l+1,t.subarray(k,$t))}r.i=o}return vo(a,0,n+yi(l)+i)},So=function(){for(var t=new Int32Array(256),e=0;e<256;++e){for(var s=e,n=9;--n;)s=(s&1&&-306674912)^s>>>1;t[e]=s}return t}(),_o=function(){var t=-1;return{p:function(e){for(var s=t,n=0;n<e.length;++n)s=So[s&255^e[n]]^s>>>8;t=s},d:function(){return~t}}},Ti=function(t,e,s,n,i){if(!i&&(i={l:1},e.dictionary)){var r=e.dictionary.subarray(-32768),o=new Fe(r.length+t.length);o.set(r),o.set(t,r.length),t=o,i.w=r.length}return wo(t,e.level==null?6:e.level,e.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(t.length)))*1.5):20:12+e.mem,s,n,i)},_c=function(t,e){var s={};for(var n in t)s[n]=t[n];for(var n in e)s[n]=e[n];return s},ko=function(t,e,s){for(var n=t(),i=t.toString(),r=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/\s+/g,"").split(","),o=0;o<n.length;++o){var a=n[o],c=r[o];if(typeof a=="function"){e+=";"+c+"=";var u=a.toString();if(a.prototype)if(u.indexOf("[native code]")!=-1){var l=u.indexOf(" ",8)+1;e+=u.slice(l,u.indexOf("(",l))}else{e+=u;for(var h in a.prototype)e+=";"+c+".prototype."+h+"="+a.prototype[h].toString()}else e+=u}else s[c]=a}return e},wn=[],kc=function(t){var e=[];for(var s in t)t[s].buffer&&e.push((t[s]=new t[s].constructor(t[s])).buffer);return e},Tc=function(t,e,s,n){if(!wn[s]){for(var i="",r={},o=t.length-1,a=0;a<o;++a)i=ko(t[a],i,r);wn[s]={c:ko(t[o],i,r),e:r}}var c=_c({},wn[s].e);return bc(wn[s].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+e.toString()+"}",s,c,kc(c),n)},Ec=function(){return[Fe,De,dn,pn,gn,vi,mn,bi,go,Et,mo,Ws,vn,yo,ki,fs,et,ds,bn,yn,wi,ps,Si,_i,yi,vo,wo,Ti,xc,To]},Ic=function(){return[Eo,Io,Sn,_o,So]},To=function(t){return postMessage(t,[t.buffer])},Cc=function(t,e,s,n,i,r){var o=Tc(s,n,i,function(a,c){o.terminate(),r(a,c)});return o.postMessage([t,e],e.consume?[t.buffer]:[]),function(){o.terminate()}},Sn=function(t,e,s){for(;s;++e)t[e]=s,s>>>=8},Eo=function(t,e){var s=e.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=e.level<2?4:e.level==9?2:0,t[9]=3,e.mtime!=0&&Sn(t,4,Math.floor(new Date(e.mtime||Date.now())/1e3)),s){t[3]=8;for(var n=0;n<=s.length;++n)t[n+10]=s.charCodeAt(n)}},Io=function(t){return 10+(t.filename?t.filename.length+1:0)};function xc(t,e){return Ti(t,e||{},0,0)}function Nc(t,e,s){return s||(s=e,e={}),typeof s!="function"&&bo(7),Cc(t,e,[Ec,Ic,function(){return[Co]}],function(n){return To(Co(n.data[0],n.data[1]))},2,s)}function Co(t,e){e||(e={});var s=_o(),n=t.length;s.p(t);var i=Ti(t,e,Io(e),8),r=i.length;return Eo(i,e),Sn(i,r-8,s.d()),Sn(i,r-4,n),i}var Rc=typeof TextDecoder<"u"&&new TextDecoder,Dc=0;try{Rc.decode(ki,{stream:!0}),Dc=1}catch{}class xo{constructor(){this.idx=1,this.backDict={}}getKey(e){let s=!1;return this.backDict[e]||(s=!0,this.backDict[e]=this.idx++),[this.backDict[e],s]}}class Oc{constructor(e){this.dict=new xo,this.app=e.app,this.isDictDisabled=e.isDictDisabled}sendSetAttribute(e,s,n){if(this.isDictDisabled){const i=[12,e,s,n];return this.app.send(i)}else{const i=[51,e,this.applyDict(s),this.applyDict(n)];return this.app.send(i)}}applyDict(e){const[s,n]=this.dict.getKey(e);return n&&this.app.send([50,s,e]),s}clear(){this.dict=new xo}}class Mc{constructor(e,s){this.app=e,this.startParams=s,this.conditions=[],this.hasStarted=!1,this.createConditionFromFilter=n=>{if(n.value.length){const i=Ac(n);if(i.type)return i}},this.durationInt=null}setConditions(e){this.conditions=e}async fetchConditions(e,s){try{const n=await fetch(`${this.app.options.ingestPoint}/v1/web/conditions/${e}`,{method:"GET",headers:{Authorization:`Bearer ${s}`}}),{conditions:i}=await n.json(),r=[];i.forEach(o=>{o.filters.forEach(c=>{let u;c.type==="fetch"?(u={type:"network_request",subConditions:[],name:o.name},c.filters.forEach(l=>{const h=this.createConditionFromFilter(l);h&&u.subConditions.push(h)})):u=this.createConditionFromFilter(c),u&&(u.type==="session_duration"&&this.processDuration(u.value[0],o.name),r.push({...u,name:o.name}))})}),this.conditions=r}catch{this.app.debug.error("Critical: cannot fetch start conditions")}}trigger(e){if(!this.hasStarted)try{this.hasStarted=!0,this.app.start(this.startParams,void 0,e)}catch(s){this.app.debug.error(s)}}processMessage(e){if(!this.hasStarted)switch(e[0]){case 78:this.jsExceptionEvent(e);break;case 27:this.customEvent(e);break;case 68:this.clickEvent(e);break;case 122:this.pageLocationEvent(e);break;case 83:this.networkRequest(e);break}}processFlags(e){const s=this.conditions.filter(n=>n.type==="feature_flag");s.length&&s.forEach(n=>{const i=gs[n.operator];i&&e.find(r=>i(r.key,n.value))&&this.trigger(n.name)})}processDuration(e,s){this.durationInt=setInterval(()=>{performance.now()>e&&this.trigger(s)},1e3),this.app.attachStopCallback(()=>{this.durationInt&&clearInterval(this.durationInt)})}networkRequest(e){const s=this.conditions.filter(n=>n.type==="network_request");s.length&&s.forEach(n=>{const i=n.subConditions.filter(r=>r.operator!=="isAny");i.length?i.every(o=>{let a;switch(o.key){case"url":a=e[3];break;case"status":a=e[6];break;case"method":a=e[2];break;case"duration":a=e[8];break}const c=gs[o.operator];if(c&&c(a,o.value))return!0})&&this.trigger(n.name):i.length===0&&n.subConditions.length&&this.trigger(n.name)})}customEvent(e){const s=this.conditions.filter(n=>n.type==="custom_event");s.length&&s.forEach(n=>{const i=gs[n.operator];i&&(i(e[1],n.value)||i(e[2],n.value))&&this.trigger(n.name)})}clickEvent(e){const s=this.conditions.filter(n=>n.type==="click");s.length&&s.forEach(n=>{const i=gs[n.operator];i&&(i(e[3],n.value)||i(e[4],n.value))&&this.trigger(n.name)})}pageLocationEvent(e){const s=this.conditions.filter(n=>n.type==="visited_url");s&&s.forEach(n=>{const i=gs[n.operator];i&&i(e[1],n.value)&&this.trigger(n.name)})}jsExceptionEvent(e){const s=[e[1],e[2],e[3]],n=this.conditions.filter(i=>i.type==="exception");n&&n.forEach(i=>{const r=gs[i.operator];r&&s.some(o=>r(o,i.value))&&this.trigger(i.name)})}}const gs={is:(t,e)=>e.some(s=>t.includes(s)),isAny:()=>!0,isNot:(t,e)=>!e.some(s=>t.includes(s)),contains:(t,e)=>e.some(s=>t.includes(s)),notContains:(t,e)=>!e.some(s=>t.includes(s)),startsWith:(t,e)=>e.some(s=>t.startsWith(s)),endsWith:(t,e)=>e.some(s=>t.endsWith(s)),greaterThan:(t,e)=>t>e,greaterOrEqual:(t,e)=>t>=e,lessOrEqual:(t,e)=>t<=e,lessThan:(t,e)=>t<e},Ac=t=>{const e={on:"is",notOn:"isNot",">":"greaterThan","<":"lessThan","=":"is","<=":"lessOrEqual",">=":"greaterOrEqual"},s=i=>{if(Object.keys(e).includes(i))return e[i]};let n={type:"",operator:"",value:t.value,key:""};switch(t.type){case"click":n={type:"click",operator:s(t.operator),value:t.value,key:""};break;case"location":n={type:"visited_url",operator:t.operator,value:t.value,key:""};break;case"custom":n={type:"custom_event",operator:t.operator,value:t.value,key:""};break;case"metadata":n={type:t.source==="featureFlag"?"feature_flag":t.type,operator:t.operator,value:t.value,key:""};break;case"error":n={type:"exception",operator:t.operator,value:t.value,key:""};break;case"duration":n={type:"session_duration",value:t.value[0],key:""};break;case"fetchUrl":n={type:"network_request",key:"url",operator:t.operator,value:t.value};break;case"fetchStatusCode":n={type:"network_request",key:"status",operator:s(t.operator),value:t.value};break;case"fetchMethod":n={type:"network_request",key:"method",operator:s(t.operator),value:t.value};break;case"fetchDuration":n={type:"network_request",key:"duration",operator:s(t.operator),value:t.value};break}return n};class Pc{constructor(e){this.app=e,this.flags=[],this.storageKey="__openreplay_flags";const s=this.app.sessionStorage.getItem(this.storageKey);if(s){const n=s.split(";").filter(Boolean);this.flags=n.map(i=>JSON.parse(i))}}getFeatureFlag(e){return this.flags.find(s=>s.key===e)}isFlagEnabled(e){return this.flags.findIndex(s=>s.key===e)!==-1}onFlagsLoad(e){this.onFlagsCb=e}async reloadFlags(e){const s=this.app.sessionStorage.getItem(this.storageKey),n={};s&&s.split(";").filter(Boolean).forEach(l=>{const h=JSON.parse(l);n[h.key]={key:h.key,value:h.value}});const i=this.app.session.getInfo(),r=this.app.session.userInfo,o={projectID:i.projectID,userID:i.userID,metadata:i.metadata,referrer:document.referrer,os:r.userOS,device:r.userDevice,country:r.userCountry,state:r.userState,city:r.userCity,browser:r.userBrowser,persistFlags:n},a=e??this.app.session.getSessionToken(),c=await fetch(this.app.options.ingestPoint+"/v1/web/feature-flags",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify(o)});if(c.status===200){const u=await c.json();return this.handleFlags(u.flags)}}handleFlags(e){var r;const s=[];e.forEach(o=>{o.is_persist&&s.push(o)});let n="";return this.diffPersist(s).forEach(o=>{n+=`${JSON.stringify(o)};`}),this.app.sessionStorage.setItem(this.storageKey,n),this.flags=e,(r=this.onFlagsCb)==null?void 0:r.call(this,e)}clearPersistFlags(){this.app.sessionStorage.removeItem(this.storageKey)}diffPersist(e){const s=this.app.sessionStorage.getItem(this.storageKey);if(!s)return e;const i=s.split(";").filter(Boolean).map(r=>JSON.parse(r));return e.filter(r=>i.findIndex(o=>o.key===r.key)===-1)}}const No={htmlmasked:"hidden",masked:"obscured"},tt=!(typeof window>"u"),Lc=tt&&navigator.userAgent.match(/firefox|fxios/i),Bc=1e5;let Ei=tt?Date.now()-performance.now():0;function Ii(){Ei=Date.now()-performance.now()}function ms(){return Ei}const Ke=tt&&performance.now?()=>Math.round(performance.now()+Ei):()=>Date.now(),Ci="repeat"in String.prototype?t=>"*".repeat(t.length):t=>t.replace(/./g,"*");function Ro(t){return t.trim().replace(/\s+/g," ")}function Do(t){return t.startsWith("https://")||t.startsWith("http://")}const _n="https://docs.openreplay.com",Oo={};function It(t,e,s="/"){Oo[t]||(console.warn(`OpenReplay: ${t} is deprecated. ${e?`Please, use ${e} instead.`:""} Visit ${_n}${s} for more information.`),Oo[t]=!0)}function xi(t){let e=t.getAttribute("data-openreplay-label");return e!==null||(e=t.getAttribute("data-asayer-label"),e!==null&&It('"data-asayer-label" attribute','"data-openreplay-label" attribute',"/")),e}function qt(t,e){const s=`data-openreplay-${e}`;return t.hasAttribute(s)?(No[e]&&It(`"${s}" attribute`,`"${No[e]}" attribute`,"/installation/sanitize-data"),!0):!1}function Fc(t){try{return!!t.contentDocument}catch{return!1}}function Mo(t){try{return t instanceof HTMLIFrameElement?t.contentDocument:t instanceof Window?t.document:t instanceof Document?t.defaultView:"nodeType"in t?t.nodeType:"addEventListener"in t&&t.addEventListener,!0}catch(e){if(e instanceof DOMException&&e.name==="SecurityError")return!1}return!0}function Ao(t){return t.toString(16).padStart(2,"0")}function jc(t){const e=new Uint8Array(t/2),s=window.crypto||window.msCrypto;return s?(s.getRandomValues(e),Array.from(e,Ao).join("")):Array.from({length:t},()=>Ao(Math.floor(Math.random()*16))).join("")}function Po(){try{return window.self&&window.top&&window.self!==window.top}catch{return!0}}function Ni(t){return window.Zone&&"__symbol__"in window.Zone?window.Zone.__symbol__(t):t}function Lo(t,e){if(e)return new MutationObserver(t);{const s=Ni("MutationObserver");return new window[s](t)}}function Bo(t,e,s,n,i){if(!Mo(t))return;let r="addEventListener";i||(r=Ni("addEventListener"));try{t[r]?t[r](e,s,n):t.addEventListener(e,s,n)}catch(o){const a=o.message;console.error(`Openreplay: ${a}; if this error is caused by an IframeObserver, ignore it`,e,t)}}function Fo(t,e,s,n,i){if(!Mo(t))return;let r="removeEventListener";i||(r=Ni("removeEventListener"));try{t[r]?t[r](e,s,n):t.removeEventListener(e,s,n)}catch(o){const a=o.message;console.error(`Openreplay: ${a}; if this error is caused by an IframeObserver, ignore it`,e,t)}}class Uc{constructor(){this.taskQueue=[],this.isRunning=!1}addTask(e){this.taskQueue.push(e),this.runTasks()}runTasks(){if(this.isRunning||this.taskQueue.length===0)return;this.isRunning=!0;const e=()=>{if(this.taskQueue.length===0){this.isRunning=!1;return}const s=this.taskQueue.shift();Promise.resolve(s()).then(()=>{requestAnimationFrame(()=>e())})};e()}}const zc=new Uc;function Wc(t){zc.addTask(t)}function jo(t,e){const s={...t};for(const n in e)if(e.hasOwnProperty(n)){const i=e[n],r=t[n];typeof i=="object"&&!Array.isArray(i)&&i!==null?s[n]=jo(r||{},i):s[n]=i}return s}function Vt(t){return[0,t]}function Hc(t,e){return[5,t,e]}function qc(t,e){return[6,t,e]}function Vc(){return[7]}function Gc(t,e,s,n,i){return[8,t,e,s,n,i]}function Kc(t,e,s){return[9,t,e,s]}function Xc(t,e,s){return[10,t,e,s]}function Jc(t){return[11,t]}function Uo(t,e){return[13,t,e]}function Yc(t,e){return[14,t,e]}function Qc(t,e,s){return[16,t,e,s]}function Zc(t,e,s){return[18,t,e,s]}function $c(t,e){return[19,t,e]}function eu(t,e){return[20,t,e]}function tu(t,e){return[22,t,e]}function su(t,e,s,n,i,r,o,a,c){return[23,t,e,s,n,i,r,o,a,c]}function nu(t,e,s){return[24,t,e,s]}function iu(t,e){return[27,t,e]}function ru(t){return[28,t]}function ou(t){return[29,t]}function zo(t,e){return[30,t,e]}function au(t,e,s,n){return[49,t,e,s,n]}function lu(t,e){return[54,t,e]}function cu(t){return[55,t]}function Wo(t,e,s,n){return[57,t,e,s,n]}function Ho(t){return[58,t]}function Ri(t,e,s,n){return[60,t,e,s,n]}function uu(t,e,s){return[61,t,e,s]}function hu(t,e){return[63,t,e]}function fu(t,e){return[64,t,e]}function du(t,e,s,n,i,r){return[68,t,e,s,n,i,r]}function Di(t,e){return[70,t,e]}function qo(t,e,s){return[71,t,e,s]}function Oi(t,e,s,n){return[73,t,e,s,n]}function Vo(t,e){return[75,t,e]}function Go(t,e){return[76,t,e]}function pu(t,e){return[77,t,e]}function Mi(t,e,s,n){return[78,t,e,s,n]}function kn(t,e,s,n,i,r,o,a,c){return[83,t,e,s,n,i,r,o,a,c]}function gu(t,e,s,n,i,r){return[84,t,e,s,n,i,r]}function mu(t,e,s,n,i,r){return[112,t,e,s,n,i,r]}function Ko(t,e,s){return[113,t,e,s]}function vu(t){return[114,t]}function Xo(t){return[115,t]}function Jo(t,e,s,n,i,r,o,a,c,u){return[116,t,e,s,n,i,r,o,a,c,u]}function Tn(t){return[117,t]}function Gt(t){return[118,t]}function bu(t,e){return[119,t,e]}function yu(t){return[120,t]}function wu(t,e,s,n){return[122,t,e,s,n]}const Ai=tt&&"performance"in window&&"memory"in performance?performance:{memory:{}},Pi=tt?(navigator.deviceMemory||0)*1024:0,Li=Ai.memory.jsHeapSizeLimit||0;function Su(t,e){if(!Object.assign({capturePerformance:!0},e).capturePerformance)return;let n,i;const r=()=>{n===void 0||n===-1||(n++,requestAnimationFrame(r))};t.ticker.attach(()=>{i===void 0||i===-1||i++},0,!1);const o=()=>{n===void 0||i===void 0||(t.send(au(n,i,Ai.memory.totalJSHeapSize||0,Ai.memory.usedJSHeapSize||0)),i=n=document.hidden?-1:0)};t.attachStartCallback(()=>{i=n=-1,o(),r()}),t.attachStopCallback(()=>{i=n=void 0}),t.ticker.attach(o,40,!1),document.hidden!==void 0&&t.attachEventListener(document,"visibilitychange",o,!1,!1)}const Yo="__or__watched_tags__";class _u{constructor(e){this.intervals={},this.tags=[],this.sessionStorage=e.sessionStorage,this.errLog=e.errLog,this.onTag=e.onTag;const s=JSON.parse(e.sessionStorage.getItem(Yo)??"[]");this.setTags(s),this.observer=new IntersectionObserver(n=>{n.forEach(i=>{if(i.isIntersecting&&i.target){const r=i.target.__or_watcher_tagname;r&&this.onTagRendered(r),this.observer.unobserve(i.target)}})})}async fetchTags(e,s){return fetch(`${e}/v1/web/tags`,{method:"GET",headers:{Authorization:`Bearer ${s}`}}).then(n=>n.json()).then(({tags:n})=>{if(n&&n.length){this.setTags(n);const i=JSON.stringify(n);this.sessionStorage.setItem(Yo,i||"")}}).catch(n=>this.errLog(n))}setTags(e){this.tags=e,this.intervals={},e.forEach(s=>{this.intervals[s.id]=setInterval(()=>{const n=document.querySelectorAll(s.selector);if(n.length>0){const i=n[0];i.__or_watcher_tagname=s.id,this.observer.observe(i)}},500)})}onTagRendered(e){this.intervals[e]&&clearInterval(this.intervals[e]),this.onTag(e)}clear(){this.tags.forEach(e=>{clearInterval(this.intervals[e.id])}),this.tags=[],this.intervals={},this.observer.disconnect()}}const ku={position:"fixed",top:0,left:0,width:"100vw",height:"100vh",background:"rgba(0, 0, 0, 0.40)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:999999,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"'},Tu={display:"flex",flexDirection:"column",gap:"2rem",alignItems:"center",padding:"1.5rem",borderRadius:"2px",border:"1px solid #D9D9D9",background:"#FFF",width:"22rem"},En={display:"flex","flex-direction":"column",gap:"unset","align-items":"center",padding:"unset",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',"border-radius":"2px",border:"1px solid #D9D9D9",background:"rgba(255, 255, 255, 0.75)",width:"22rem"},Eu={fontFamily:"Verdana, sans-serif",fontSize:"1.25rem",fontStyle:"normal",fontWeight:"500",lineHeight:"1.75rem",color:"rgba(0, 0, 0, 0.85)"},Iu={borderTop:"1px solid rgba(0, 0, 0, 0.06)",borderBottom:"1px solid rgba(0, 0, 0, 0.06)",padding:"1.25rem 0rem",color:"rgba(0, 0, 0, 0.85)",fontFamily:"Verdana, sans-serif",fontSize:"13px",fontStyle:"normal",fontWeight:"400",lineHeight:"auto",whiteSpace:"pre-wrap"},Cu={display:"flex",padding:"0.4rem 0.9375rem",justifyContent:"center",alignItems:"center",gap:"0.625rem",borderRadius:"0.25rem",border:"1px solid #394EFF",background:"#394EFF",boxShadow:"0px 2px 0px 0px rgba(0, 0, 0, 0.04)",color:"#FFF",textAlign:"center",fontFamily:"Verdana, sans-serif",fontSize:"1rem",fontStyle:"normal",fontWeight:"500",lineHeight:"1.5rem",cursor:"pointer"},Qo={fontFamily:"Verdana, sans-serif",fontSize:"13px",fontWeight:"500",lineHeight:"auto",display:"flex",justifyContent:"space-between",width:"100%",cursor:"pointer"},vs={display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"0.625rem",fontSize:"13px",lineHeight:"auto"},xu={padding:"0.5rem",gap:"0.5rem",fontFamily:"Verdana, sans-serif",fontSize:"16px",fontStyle:"normal",fontWeight:"500",lineHeight:"auto",color:"white",display:"flex",alignItems:"center",width:"100%",borderRadius:"2px",background:"rgba(0, 0, 0, 0.75)",boxSizing:"border-box"},bs={boxSizing:"border-box",display:"block",width:"100%",borderBottom:"1px solid #D9D9D9",background:"#FFF",padding:"0.65rem",alignSelf:"stretch",color:"#000",fontFamily:"Verdana, sans-serif",fontStyle:"normal",fontWeight:"400"},Nu={...bs,display:"flex",flexDirection:"column",alignItems:"center",gap:"0.625rem"},Zo={fontSize:"1.25rem",fontWeight:"500",cursor:"pointer",color:"#394EFF"},$o={display:"flex",padding:"0.4rem 0.9375rem",justifyContent:"center",alignItems:"center",gap:"0.625rem",borderRadius:"0.25rem",border:"1px solid #394EFF",background:"#394EFF",boxShadow:"0px 2px 0px 0px rgba(0, 0, 0, 0.04)",color:"#FFF",textAlign:"center",fontFamily:"Verdana, sans-serif",fontSize:"1rem",fontStyle:"normal",fontWeight:"500",lineHeight:"1.5rem",width:"100%",boxSizing:"border-box",cursor:"pointer"},ea={marginTop:"1rem",marginBottom:"1rem",cursor:"pointer",display:"block",fontWeight:"500",fontSize:"13px!important",lineHeight:"auto"},Ru={display:"flex",justifyContent:"space-between",alignItems:"center",gap:"1rem",padding:"0.5rem",width:"100%",boxSizing:"border-box"},ta={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",borderRadius:"6.25em",outline:"1px solid #394EFF",fontSize:"13px",height:"24px",width:"24px"},Du={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",borderRadius:"6.25em",outline:"1px solid #D2DFFF",boxShadow:"0px 2px 0px 0px rgba(0, 0, 0, 0.04)",background:"#D2DFFF",fontSize:"13px",height:"24px",width:"24px"},sa={borderRadius:"0.375rem",border:"1px solid rgba(0, 0, 0, 0.06)",background:"#F5F7FF",boxShadow:"0px 2px 0px 0px rgba(0, 0, 0, 0.04)",display:"flex",flexDirection:"column",padding:"0.625rem 0.9375rem",gap:"0.5rem",alignSelf:"stretch"},na={fontWeight:"bold"},Ou={fontSize:"13px",lineHeight:"auto"},ia={marginRight:"0.5rem",cursor:"pointer",color:"#394EFF",textAlign:"center",fontFamily:"Verdana, sans-serif",fontSize:"13px",fontStyle:"normal",fontWeight:"500",lineHeight:"auto"},Mu={...ia,display:"flex",padding:"0.25rem 0.9375rem",justifyContent:"center",alignItems:"center",gap:"0.5rem",borderRadius:"0.25rem",border:"1px solid #394EFF"},Au={display:"flex",justifyContent:"space-between",alignItems:"center",width:"100%",boxSizing:"border-box"},Pu={border:"4px solid rgba(255, 255, 255, 0.4)",width:"16px",height:"16px",borderRadius:"50%",borderLeftColor:"#fff",animation:"spin 0.5s linear infinite"},ra={Standard:{width:1280,height:720}};class Lu{constructor(e){this.app=e,this.mediaRecorder=null,this.recordedChunks=[],this.stream=null,this.recStartTs=null}async startRecording(e,s,n,i){this.recStartTs=this.app.timestamp();const r=s;try{this.stream=await navigator.mediaDevices.getUserMedia({video:i?{...r,frameRate:{ideal:e}}:!1,audio:n}),this.mediaRecorder=new MediaRecorder(this.stream,{mimeType:"video/webm;codecs=vp9"}),this.recordedChunks=[],this.mediaRecorder.ondataavailable=o=>{o.data.size>0&&this.recordedChunks.push(o.data)},this.mediaRecorder.start()}catch(o){console.error(o)}}async stopRecording(){return new Promise(e=>{this.mediaRecorder&&(this.mediaRecorder.onstop=()=>{const s=new Blob(this.recordedChunks,{type:"video/webm"});e(s)},this.mediaRecorder.stop())})}async sendToAPI(){const e=await this.stopRecording();return fetch(`${this.app.options.ingestPoint}/v1/web/uxt/upload-url`,{headers:{Authorization:`Bearer ${this.app.session.getSessionToken()}`}}).then(s=>{if(s.ok)return s.json();throw new Error("Failed to get upload url")}).then(({url:s})=>fetch(s,{method:"PUT",headers:{"Content-Type":"video/webm"},body:e})).catch(console.error).finally(()=>{this.discard()})}async saveToFile(e="recorded-video.webm"){const s=await this.stopRecording(),n=URL.createObjectURL(s),i=document.createElement("a");i.style.display="none",i.href=n,i.download=e,document.body.appendChild(i),i.click(),window.URL.revokeObjectURL(n),document.body.removeChild(i)}discard(){var e,s;(e=this.mediaRecorder)==null||e.stop(),(s=this.stream)==null||s.getTracks().forEach(n=>n.stop())}}function Bu(t,e){e.onmousedown=function(s){const n=t.getBoundingClientRect(),i=s.clientX-n.left,r=s.clientY-n.top;t.style.position="fixed",t.style.zIndex=99999999999999,o(s.pageX,s.pageY);function o(u,l){let h=u-i,f=l-r;h<=5&&(h=5),f<=5&&(f=5),h>=window.innerWidth-n.width&&(h=window.innerWidth-n.width),f>=window.innerHeight-n.height&&(f=window.innerHeight-n.height),t.style.left=`${h}px`,t.style.top=`${f}px`}function a(u){o(u.pageX,u.pageY)}document.addEventListener("mousemove",a);const c=()=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",c)};document.addEventListener("mouseup",c)},e.ondragstart=function(){return!1}}function Fu(){const t=document.createElement("div");t.className="grid";for(let e=0;e<16;e++){const s=document.createElement("div");Object.assign(s.style,{width:"2px",height:"2px",borderRadius:"10px",background:"white"}),s.className="cell",t.appendChild(s)}return Object.assign(t.style,{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gridTemplateRows:"repeat(4, 1fr)",gap:"2px",cursor:"grab"}),t}function ju(){const t=document.createElement("div");Object.assign(t.style,{width:"0",height:"0",borderLeft:"7px solid transparent",borderRight:"7px solid transparent",borderBottom:"7px solid white"});const e=document.createElement("div");return e.appendChild(t),Object.assign(e.style,{display:"flex",alignItems:"center",justifyContent:"center",width:"16px",height:"16px",cursor:"pointer",marginLeft:"auto",transform:"rotate(180deg)"}),e}function Uu(){const t=document.createElement("style");t.type="text/css",t.innerText=`@keyframes spin {
|
|
3
2
|
0% { transform: rotate(0deg); }
|
|
4
3
|
100% { transform: rotate(360deg); }
|
|
5
|
-
}`,document.head.appendChild(t)}function
|
|
4
|
+
}`,document.head.appendChild(t)}function zu(){Uu();const t=document.createElement("div");return t.classList.add("spinner"),Object.assign(t.style,Pu),t}function q(t,e,s,n,i){const r=document.createElement(t);return r.className=e,Object.assign(r.style,s),n&&(r.textContent=n),i&&(r.id=i),r}const In="or_uxt_test_start",Bi="or_uxt_task_index",Fi="or_uxt_session_id",Wu="or_uxt_test_id";class Hu{constructor(e,s,n,i,r,o,a,c,u){this.ingestPoint=e,this.getTimestamp=s,this.token=n,this.testId=i,this.storageKey=r,this.setStorageKey=o,this.removeStorageKey=a,this.getStorageKey=c,this.getSessionId=u,this.durations={testStart:0,tasks:[]},this.getDurations=()=>this.durations,this.setDurations=h=>{this.durations.testStart=h.testStart,this.durations.tasks=h.tasks},this.signalTask=(h,f,d)=>{if(!h)return console.error("User Testing: No Task ID Given");const p=this.durations.tasks.find(C=>C.taskId===h),m=this.getTimestamp(),_=p?m-p.started:0;return fetch(`${this.ingestPoint}/v1/web/uxt/signals/task`,{method:"POST",headers:{Authorization:`Bearer ${this.token}`},body:JSON.stringify({testId:this.testId,taskId:h,status:f,duration:_,timestamp:m,taskAnswer:d})})},this.signalTest=h=>{const f=this.getTimestamp();if(h==="begin"&&this.testId){const m=this.getSessionId();this.setStorageKey(Fi,m),this.setStorageKey(this.storageKey,this.testId.toString()),this.setStorageKey(In,f.toString())}else this.removeStorageKey(this.storageKey),this.removeStorageKey(Bi),this.removeStorageKey(In);const d=this.durations.testStart||f,p=f-d;return fetch(`${this.ingestPoint}/v1/web/uxt/signals/test`,{method:"POST",headers:{Authorization:`Bearer ${this.token}`},body:JSON.stringify({testId:this.testId,status:h,duration:p,timestamp:f})})};const l=this.getStorageKey(In);l&&(this.durations.testStart=parseInt(l,10))}}class qu{constructor(e,s){this.app=e,this.storageKey=s,this.bg=q("div","bg",ku,void 0,"__or_ut_bg"),this.container=q("div","container",Tu,void 0,"__or_ut_ct"),this.widgetGuidelinesVisible=!0,this.widgetTasksVisible=!1,this.widgetVisible=!0,this.isActive=!1,this.descriptionSection=null,this.taskSection=null,this.endSection=null,this.stopButton=null,this.stopButtonContainer=null,this.test=null,this.testId=null,this.signalManager=null,this.getTest=(o,a,c)=>{this.testId=o;const u=this.app.options.ingestPoint;return fetch(`${u}/v1/web/uxt/test/${o}`,{headers:{Authorization:`Bearer ${a}`}}).then(l=>l.json()).then(({test:l})=>{this.isActive=!0,this.test=l,this.signalManager=new Hu(this.app.options.ingestPoint,()=>this.app.timestamp(),a,o,this.storageKey,(h,f)=>this.app.localStorage.setItem(h,f),h=>this.app.localStorage.removeItem(h),h=>this.app.localStorage.getItem(h),()=>this.app.getSessionID()),this.createGreeting(l.title,l.reqMic,l.reqCamera),c&&((l.reqMic||l.reqCamera)&&this.userRecorder.startRecording(30,ra.Standard,l.reqMic,l.reqCamera),this.showWidget(l.description,l.tasks,!0),this.showTaskSection())}).then(()=>o).catch(l=>{console.log("OR: Error fetching test",l)})},this.hideTaskSection=()=>!1,this.showTaskSection=()=>!0,this.collapseWidget=()=>!1,this.removeGreeting=()=>!1,this.toggleDescriptionVisibility=()=>{},this.currentTaskIndex=0,this.userRecorder=new Lu(e);const n=this.app.getSessionID(),i=this.app.localStorage.getItem(Fi);n!==i&&(this.app.localStorage.removeItem(this.storageKey),this.app.localStorage.removeItem(Fi),this.app.localStorage.removeItem(Wu),this.app.localStorage.removeItem(Bi),this.app.localStorage.removeItem(In));const r=this.app.localStorage.getItem(Bi);r&&(this.currentTaskIndex=parseInt(r,10))}getTestId(){return this.testId}createGreeting(e,s,n){const i=q("div","title",Eu,e),r=q("div","description",Iu,`Welcome, you're here to help us improve, not to be judged. Your insights matter!
|
|
6
5
|
|
|
7
6
|
📹 We're recording this browser tab to learn from your experience.
|
|
8
|
-
🎤 Please enable mic and camera if asked, to give us a complete picture.`),o=
|
|
9
|
-
|
|
10
|
-
We appreciate your time and valuable input.`),r=U("div","end_button_or",Cs,"Submitting Feedback"),o=qr();r.appendChild(o),(l=this.test)!=null&&l.reqMic||(a=this.test)!=null&&a.reqCamera?this.userRecorder.sendToAPI().then(()=>{r.removeChild(o),r.textContent="End Session",e=!1}).catch(d=>{console.error(d),r.removeChild(o),r.textContent="End Session",e=!1}):(r.removeChild(o),r.textContent="End Session",e=!1),this.taskSection&&this.container.removeChild(this.taskSection),this.descriptionSection&&this.container.removeChild(this.descriptionSection),this.stopButton&&this.stopButtonContainer&&this.container.removeChild(this.stopButtonContainer),r.onclick=()=>{e||(window.close(),document.body.removeChild(this.bg))},n.append(s,i,r),this.endSection=n,this.container.append(n)}}function As(t){return!!t&&t.nodeType!=null}function Zt(t){return t.namespaceURI==="http://www.w3.org/2000/svg"}function ke(t){return t.nodeType===Node.ELEMENT_NODE}function Jr(t){return t.nodeType===Node.COMMENT_NODE}function en(t){return t.nodeType===Node.TEXT_NODE}function bt(t){return t.nodeType===Node.DOCUMENT_NODE}function yt(t){return t.nodeType===Node.DOCUMENT_NODE||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function Q(t,e){return t.localName===e}class Xr{constructor(e,n){this.app=e,this.options=n,this.snapshots={},this.intervals=[],this.restartTracking=()=>{this.clear(),this.app.nodes.scanTree(this.captureCanvas)},this.captureCanvas=s=>{const i=this.app.nodes.getID(s);if(!i||!Q(s,"canvas")||this.app.sanitizer.isObscured(i)||this.app.sanitizer.isHidden(i)||!Q(s,"canvas")||this.snapshots[i])return;new IntersectionObserver(u=>{u.forEach(c=>{c.isIntersecting&&(c.target?this.snapshots[i]&&this.snapshots[i].createdAt?this.snapshots[i].paused=!1:this.recordCanvas(c.target,i):this.snapshots[i]&&(this.snapshots[i].paused=!0))})}).observe(s)},this.recordCanvas=(s,i)=>{const r=this.app.timestamp();this.snapshots[i]={images:[],createdAt:r,paused:!1,dummy:document.createElement("canvas")};const o=xr(i.toString(),r);this.app.send(o);const u=l=>{Yr(l,this.options.quality,this.snapshots[i].dummy,this.options.fixedScaling,this.fileExt,a=>{a&&(this.snapshots[i].images.push({id:this.app.timestamp(),data:a}),this.snapshots[i].images.length>9&&(this.sendSnaps(this.snapshots[i].images,i,this.snapshots[i].createdAt),this.snapshots[i].images=[]))})},c=setInterval(()=>{const l=this.app.nodes.getID(s),a=l?this.app.nodes.getNode(l):void 0;!a||!Q(a,"canvas")||a!==s?(this.app.debug.log("Canvas element not in sync"),clearInterval(c)):this.snapshots[i].paused||(this.options.useAnimationFrame?requestAnimationFrame(()=>{u(a)}):u(a))},this.interval);this.intervals.push(c)},this.fileExt=n.fileExt??"webp",this.interval=1e3/n.fps}startTracking(){setTimeout(()=>{this.app.nodes.scanTree(this.captureCanvas),this.app.nodes.attachNodeCallback(e=>{this.captureCanvas(e)})},500)}sendSnaps(e,n,s){if(Object.keys(this.snapshots).length===0)return;const i=new FormData;e.forEach(r=>{const o=r.data;o&&(i.append("snapshot",o,`${s}_${n}_${r.id}.${this.fileExt}`),this.options.isDebug&&Qr(o,`${s}_${n}_${r.id}.${this.fileExt}`))}),fetch(this.app.options.ingestPoint+"/v1/web/images",{method:"POST",headers:{Authorization:`Bearer ${this.app.session.getSessionToken()??""}`},body:i}).then(()=>!0).catch(r=>{this.app.debug.error("error saving canvas",r)})}clear(){this.intervals.forEach(e=>clearInterval(e)),this.snapshots={}}}const Ms={low:.35,medium:.55,high:.8};function Yr(t,e="medium",n,s=!1,i,r){const o=`image/${i}`;if(s){const u=window.devicePixelRatio||1;n.width=t.width/u,n.height=t.height/u;const c=n.getContext("2d");if(!c)return"";c.clearRect(0,0,n.width,n.height),c.drawImage(t,0,0,n.width,n.height),n.toBlob(r,o,Ms[e])}else t.toBlob(r,o,Ms[e])}function Qr(t,e){const n=URL.createObjectURL(t),s=document.createElement("a");s.href=n,s.download=e,s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)}const Xe={Verbose:5,Log:4,Warnings:3,Errors:2,Silent:0};class Zr{constructor(e=Xe.Silent){this.shouldLog=n=>this.level>=n,this.log=(...n)=>{this.shouldLog(Xe.Log)&&console.log(...n)},this.warn=(...n)=>{this.shouldLog(Xe.Warnings)&&console.warn(...n)},this.error=(...n)=>{this.shouldLog(Xe.Errors)&&console.error(...n)},this.level=e}}class eo{constructor(e){this.node_id=e,this.nodes=[],this.totalNodeAmount=0,this.nodeCallbacks=[],this.elementListeners=new Map,this.nextNodeId=0,this.scanTree=n=>{this.nodes.forEach(s=>n(s))}}syntheticMode(e){const i=99999999*e;if(i>9007199254740900)throw new Error("Placeholder id overflow");this.nextNodeId=i}attachNodeCallback(e){this.nodeCallbacks.push(e)}attachNodeListener(e,n,s,i=!0){const r=this.getID(e);if(r===void 0)return;ds(e,n,s,i);let o=this.elementListeners.get(r);o===void 0&&(o=[],this.elementListeners.set(r,o)),o.push([n,s,i])}registerNode(e){let n=e[this.node_id];const s=n===void 0;return s&&(n=this.nextNodeId,this.totalNodeAmount++,this.nextNodeId++,this.nodes[n]=e,e[this.node_id]=n),[n,s]}unregisterNode(e){const n=e[this.node_id];if(n!==void 0){e[this.node_id]=void 0,delete e[this.node_id],delete this.nodes[n];const s=this.elementListeners.get(n);s!==void 0&&(this.elementListeners.delete(n),s.forEach(i=>fs(e,i[0],i[1],i[2]))),this.totalNodeAmount--}return n}cleanTree(){for(let e=0;e<this.nodes.length;e++){const n=this.nodes[e];n&&!document.contains(n)&&this.unregisterNode(n)}}callNodeCallbacks(e,n){this.nodeCallbacks.forEach(s=>s(e,n))}getID(e){if(e)return e[this.node_id]}getNode(e){return this.nodes[e]}getNodeCount(){return this.totalNodeAmount}clear(){for(let e=0;e<this.nodes.length;e++){const n=this.nodes[e];n&&this.unregisterNode(n)}this.nextNodeId=0,this.nodes.length=0}}function tn(t){if(Jr(t))return!0;if(en(t))return!1;if(!ke(t))return!0;const e=t.tagName.toUpperCase();if(e==="LINK"){const n=t.getAttribute("rel"),s=t.getAttribute("as");return!(n!=null&&n.includes("stylesheet")||s==="style"||s==="font")}return e==="SCRIPT"||e==="NOSCRIPT"||e==="META"||e==="TITLE"||e==="BASE"}function nn(t){return yt(t)?!0:!tn(t)}var be;(function(t){t[t.New=0]="New",t[t.Removed=1]="Removed",t[t.Changed=2]="Changed"})(be||(be={}));class sn{constructor(e,n=!1){this.app=e,this.isTopContext=n,this.commited=[],this.recents=new Map,this.indexes=[],this.attributesMap=new Map,this.textSet=new Set,this.observer=hs(this.app.safe(s=>{for(const i of s){const r=i.target,o=i.type;if(!nn(r))continue;if(o==="childList"){for(let c=0;c<i.removedNodes.length;c++)nn(i.removedNodes[c])&&this.bindNode(i.removedNodes[c]);for(let c=0;c<i.addedNodes.length;c++)this.bindTree(i.addedNodes[c]);continue}const u=this.app.nodes.getID(r);if(u!==void 0){if(this.recents.has(u)||this.recents.set(u,be.Changed),o==="attributes"){const c=i.attributeName;if(c===null)continue;let l=this.attributesMap.get(u);l===void 0&&this.attributesMap.set(u,l=new Set),l.add(c);continue}if(o==="characterData"){this.textSet.add(u);continue}}}this.commitNodes()}))}clear(){this.commited.length=0,this.recents.clear(),this.indexes.length=1,this.attributesMap.clear(),this.textSet.clear()}sendNodeAttribute(e,n,s,i){if(Zt(n)){s.substr(0,6)==="xlink:"&&(s=s.substr(6)),i===null?this.app.send(gs(e,s)):s==="href"?(i.length>1e5&&(i=""),this.app.send(Wt(e,s,i,this.app.getBaseHref()))):this.app.attributeSender.sendSetAttribute(e,s,i);return}if(!(s==="src"||s==="srcset"||s==="integrity"||s==="crossorigin"||s==="autocomplete"||s.substr(0,2)==="on")&&!(s==="value"&&Q(n,"input")&&n.type!=="button"&&n.type!=="reset"&&n.type!=="submit")){if(i===null){this.app.send(gs(e,s));return}if(s==="style"||s==="href"&&Q(n,"link")){this.app.send(Wt(e,s,i,this.app.getBaseHref()));return}(s==="href"||i.length>1e5)&&(i=""),this.app.attributeSender.sendSetAttribute(e,s,i)}}sendNodeData(e,n,s){if(Q(n,"style")){this.app.send(fr(e,s,this.app.getBaseHref()));return}s=this.app.sanitizer.sanitize(e,s),this.app.send(Zi(e,s))}bindNode(e){const[n,s]=this.app.nodes.registerNode(e);s?this.recents.set(n,be.New):this.recents.get(n)!==be.New&&this.recents.set(n,be.Removed)}bindTree(e){if(!nn(e))return;this.bindNode(e);const n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT+NodeFilter.SHOW_TEXT,{acceptNode:s=>(this.app.nodes.getID(s)!==void 0&&this.app.debug.error("! Node is already bound",s),tn(s)||this.app.nodes.getID(s)!==void 0?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT)},!1);for(;n.nextNode();)this.bindNode(n.currentNode)}unbindTree(e){const n=this.app.nodes.unregisterNode(e);if(n!==void 0&&this.recents.get(n)===be.Removed){this.app.send(Qi(n));const s=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT+NodeFilter.SHOW_TEXT,{acceptNode:u=>tn(u)||this.app.nodes.getID(u)===void 0?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},!1);let i=0;const r=this.app.nodes.getNodeCount();for(;s.nextNode();)i+=1,this.app.nodes.unregisterNode(s.currentNode);const o=Math.floor(i/r*100);o>30&&this.app.send(Sr(o))}}_commitNode(e,n){if(yt(n))return!0;const s=n.parentNode;let i;if(!Q(n,"html")||!this.isTopContext){if(s===null)return this.unbindTree(n),!1;if(i=this.app.nodes.getID(s),i===void 0)return this.unbindTree(n),!1;if(!this.commitNode(i))return this.unbindTree(n),!1;if(this.app.sanitizer.handleNode(e,i,n),this.app.sanitizer.isHidden(i))return!1}let r=n.previousSibling;for(;r!==null;){const a=this.app.nodes.getID(r);if(a!==void 0){this.commitNode(a),this.indexes[e]=this.indexes[a]+1;break}r=r.previousSibling}r===null&&(this.indexes[e]=0);const o=this.recents.get(e),u=o===be.New,c=this.indexes[e];if(c===void 0)throw"commitNode: missing node index";if(u){if(ke(n)){let a=n;if(i!==void 0){if(this.app.sanitizer.isHidden(e)){const d=a.clientWidth,p=a.clientHeight;a=n.cloneNode(),a.style.width=`${d}px`,a.style.height=`${p}px`}this.app.send(Ji(e,i,c,a.tagName,Zt(n)))}for(let d=0;d<a.attributes.length;d++){const p=a.attributes[d];this.sendNodeAttribute(e,a,p.nodeName,p.value)}}else en(n)&&(this.app.send(Xi(e,i,c)),this.sendNodeData(e,s,n.data));return!0}o===be.Removed&&i!==void 0&&this.app.send(Yi(e,i,c));const l=this.attributesMap.get(e);if(l!==void 0){if(!ke(n))throw"commitNode: node is not an element";for(const a of l)this.sendNodeAttribute(e,n,a,n.getAttribute(a))}if(this.textSet.has(e)){if(!en(n))throw"commitNode: node is not a text";this.sendNodeData(e,s,n.data)}return!0}commitNode(e){const n=this.app.nodes.getNode(e);if(n===void 0)return!1;const s=this.commited[e];return s!==void 0?s:this.commited[e]=this._commitNode(e,n)}commitNodes(e=!1){let n;this.recents.forEach((s,i)=>{this.commitNode(i),s===be.New&&(n=this.app.nodes.getNode(i))&&this.app.nodes.callNodeCallbacks(n,e)}),this.clear()}observeRoot(e,n,s=e){this.observer.observe(e,{childList:!0,attributes:!0,characterData:!0,subtree:!0,attributeOldValue:!1,characterDataOldValue:!1}),this.bindTree(s),n(this.app.nodes.getID(e)),this.commitNodes(!0)}disconnect(){this.observer.disconnect(),this.clear()}}class Fs extends sn{observe(e){const n=e.contentDocument,s=this.app.nodes.getID(e);!n||s===void 0||this.observeRoot(n,i=>{if(i===void 0){this.app.debug.log("OpenReplay: Iframe document not bound");return}this.app.send(qt(s,i))})}syntheticObserve(e,n){this.observeRoot(n,s=>{if(s===void 0){this.app.debug.log("OpenReplay: Iframe document not bound");return}this.app.send(qt(e,s))})}}class to extends sn{observe(e){const n=e.shadowRoot,s=this.app.nodes.getID(e);!n||s===void 0||this.observeRoot(n,i=>{if(i===void 0){this.app.debug.error("OpenReplay: Shadow Root was not bound");return}this.app.send(qt(s,i))})}}class no{constructor(){this.states=new Map}calcOffset(e){let n=0,s=0;if(e.parent&&([n,s]=this.calcOffset(e.parent)),!e.offset){const{left:o,top:u}=e.iFrame.getBoundingClientRect();e.offset=[o,u]}const[i,r]=e.offset;return[n+i,s+r]}getDocumentOffset(e){const n=this.states.get(e);return n?this.calcOffset(n):[0,0]}observe(e){var u;const n=e.contentDocument;if(!n)return;const s=e.ownerDocument,i=this.states.get(s),r={offset:null,iFrame:e,parent:i||null,clear:()=>{var c;s.removeEventListener("scroll",o),(c=s.defaultView)==null||c.removeEventListener("resize",o)}},o=()=>{r.offset=null};s.addEventListener("scroll",o),(u=s.defaultView)==null||u.addEventListener("resize",o),this.states.set(n,r)}clear(){this.states.forEach(e=>e.clear()),this.states.clear()}}const rn=ve?Element.prototype.attachShadow:()=>new ShadowRoot;class so extends sn{constructor(e,n){super(e,!0),this.iframeOffsets=new no,this.contextCallbacks=[],this.contextsSet=new Set,this.iframeObservers=[],this.shadowRootObservers=[],this.options=Object.assign({captureIFrames:!0},n),this.app.nodes.attachNodeCallback(s=>{Q(s,"iframe")&&(this.options.captureIFrames&&!Re(s,"obscured")||Re(s,"capture"))&&this.handleIframe(s)}),this.app.nodes.attachNodeCallback(s=>{ke(s)&&s.shadowRoot!==null&&this.handleShadowRoot(s.shadowRoot)})}attachContextCallback(e){this.contextCallbacks.push(e)}getDocumentOffset(e){return this.iframeOffsets.getDocumentOffset(e)}handleIframe(e){let n=null;const s=this.app.safe(()=>setTimeout(()=>{if(this.app.nodes.getID(e)===void 0||!zi(e))return;const r=e.contentWindow,o=e.contentDocument;if(o&&o!==n){const u=new Fs(this.app);this.iframeObservers.push(u),u.observe(e),n=o,this.iframeOffsets.observe(e)}r&&r===r.window&&!this.contextsSet.has(r)&&(this.contextsSet.add(r),this.contextCallbacks.forEach(u=>u(r)))},100));e.addEventListener("load",s),s()}handleShadowRoot(e){const n=new to(this.app);this.shadowRootObservers.push(n),n.observe(e.host)}observe(){const e=this;Element.prototype.attachShadow=function(){const n=rn.apply(this,arguments);return e.handleShadowRoot(n),n},this.app.nodes.clear(),this.observeRoot(window.document,()=>{this.app.send(Ki()),this.app.nodes.callNodeCallbacks(document,!0)},window.document.documentElement)}crossdomainObserve(e,n){const s=this;Element.prototype.attachShadow=function(){const r=rn.apply(this,arguments);return s.handleShadowRoot(r),r},this.app.nodes.clear(),this.app.nodes.syntheticMode(n);const i=new Fs(this.app);this.iframeObservers.push(i),i.syntheticObserve(e,window.document)}disconnect(){this.iframeOffsets.clear(),Element.prototype.attachShadow=rn,this.iframeObservers.forEach(e=>e.disconnect()),this.iframeObservers=[],this.shadowRootObservers.forEach(e=>e.disconnect()),this.shadowRootObservers=[],super.disconnect()}}var wt;(function(t){t[t.Plain=0]="Plain",t[t.Obscured=1]="Obscured",t[t.Hidden=2]="Hidden"})(wt||(wt={}));const io=t=>t.trim().replace(/[^\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]/g,"█");class ro{constructor(e,n){this.app=e,this.obscured=new Set,this.hidden=new Set,this.options=Object.assign({obscureTextEmails:!0,obscureTextNumbers:!1},n)}handleNode(e,n,s){if((this.obscured.has(n)||ke(s)&&(Re(s,"masked")||Re(s,"obscured")))&&this.obscured.add(e),(this.hidden.has(n)||ke(s)&&(Re(s,"htmlmasked")||Re(s,"hidden")))&&this.hidden.add(e),this.options.domSanitizer!==void 0&&ke(s)){const i=this.options.domSanitizer(s);i===wt.Obscured&&this.obscured.add(e),i===wt.Hidden&&this.hidden.add(e)}}sanitize(e,n){return this.obscured.has(e)?io(n):(this.options.obscureTextNumbers&&(n=n.replace(/\d/g,"0")),this.options.obscureTextEmails&&(n=n.replace(/^\w+([+.-]\w+)*@\w+([.-]\w+)*\.\w{2,3}$/g,s=>{const[i,r]=s.split("@"),[o,u]=r.split(".");return`${Ut(i)}@${Ut(o)}.${Ut(u)}`})),n)}isObscured(e){return this.obscured.has(e)}isHidden(e){return this.hidden.has(e)}getInnerTextSecure(e){const n=this.app.nodes.getID(e);return n?this.sanitize(n,e.innerText):""}clear(){this.obscured.clear(),this.hidden.clear()}}class oo{constructor(e,n){this.app=e,this.options=n,this.metadata={},this.userID=null,this.callbacks=[],this.timestamp=0,this.createTabId()}attachUpdateCallback(e){this.callbacks.push(e)}handleUpdate(e){e.userID==null&&delete e.userID,e.sessionID==null&&delete e.sessionID,this.callbacks.forEach(n=>n(e))}assign(e){e.userID!==void 0&&(this.userID=e.userID),e.metadata!==void 0&&Object.entries(e.metadata).forEach(([n,s])=>this.metadata[n]=s),e.sessionID!==void 0&&(this.sessionID=e.sessionID),e.timestamp!==void 0&&(this.timestamp=e.timestamp),e.projectID!==void 0&&(this.projectID=e.projectID),this.handleUpdate(e)}setMetadata(e,n){this.metadata[e]=n,this.handleUpdate({metadata:{[e]:n}})}setUserID(e){this.userID=e,this.handleUpdate({userID:e})}setUserInfo(e){this.userInfo=e}getPageNumber(){const e=this.app.sessionStorage.getItem(this.options.session_pageno_key);if(e!=null)return parseInt(e)}incPageNo(){let e=this.getPageNumber();return e===void 0?e=0:e++,this.app.sessionStorage.setItem(this.options.session_pageno_key,e.toString()),e}getSessionToken(){return this.app.sessionStorage.getItem(this.options.session_token_key)||void 0}setSessionToken(e){this.app.sessionStorage.setItem(this.options.session_token_key,e)}applySessionHash(e){const n=decodeURI(e).split("&");let s=e,i="100500";n.length==2&&([i,s]=n),!(!i||!s)&&(this.app.sessionStorage.setItem(this.options.session_token_key,s),this.app.sessionStorage.setItem(this.options.session_pageno_key,i))}getSessionHash(){const e=this.getPageNumber(),n=this.getSessionToken();if(!(e===void 0||n===void 0))return encodeURI(String(e)+"&"+n)}getTabId(){return this.tabId||this.createTabId(),this.tabId}regenerateTabId(){const e=Ui(12);this.app.sessionStorage.setItem(this.options.session_tabid_key,e),this.tabId=e}createTabId(){const e=this.app.sessionStorage.getItem(this.options.session_tabid_key);e?this.tabId=e:this.regenerateTabId()}getInfo(){return{sessionID:this.sessionID,metadata:this.metadata,userID:this.userID,timestamp:this.timestamp,projectID:this.projectID}}reset(){this.app.sessionStorage.removeItem(this.options.session_token_key),this.metadata={},this.userID=null,this.sessionID=void 0,this.timestamp=0}}function ao(t,e){let n=0;return()=>{n++>=e&&(n=0,t())}}class co{constructor(e){this.app=e,this.timer=null,this.callbacks=[]}attach(e,n=0,s=!0,i){i&&(e=e.bind(i)),s&&(e=this.app.safe(e)),this.callbacks.unshift(n?ao(e,n):e)-1}start(){this.timer===null&&(this.timer=setInterval(()=>this.callbacks.forEach(e=>{e&&e()}),30))}stop(){this.timer!==null&&(clearInterval(this.timer),this.timer=null)}}const Ye="canceled",Ps="or_uxt_active",on="or_buffer_1",_e=t=>({reason:t,success:!1}),lo=t=>({...t,success:!0});var Z;(function(t){t[t.NotActive=0]="NotActive",t[t.Starting=1]="Starting",t[t.Active=2]="Active",t[t.ColdStart=3]="ColdStart"})(Z||(Z={}));const Bs="https://api.openreplay.com/ingest";function an(){const t=new Date().getTimezoneOffset()*-1,e=t>=0?"+":"-",n=Math.floor(Math.abs(t)/60),s=Math.abs(t)%60;return`UTC${e}${String(n).padStart(2,"0")}:${String(s).padStart(2,"0")}`}const uo=t=>new Promise(e=>setTimeout(e,t)),ce={ask:"never-gonna-give-you-up",resp:"never-gonna-let-you-down",reg:"never-gonna-run-around-and-desert-you",iframeSignal:"never-gonna-make-you-cry",iframeId:"never-gonna-say-goodbye",iframeBatch:"never-gonna-tell-a-lie-and-hurt-you"};let ho=class{constructor(e,n,s,i,r){this.signalError=i,this.insideIframe=r,this.messages=[],this.bufferedMessages1=[],this.bufferedMessages2=[],this.startCallbacks=[],this.stopCallbacks=[],this.commitCallbacks=[],this.activityState=Z.NotActive,this.version="14.0.4",this.socketMode=!1,this.compressionThreshold=24*1e3,this.bc=null,this.canvasRecorder=null,this.conditionsManager=null,this.canStart=!1,this.rootId=null,this.pageFrames=[],this.frameOderNumber=0,this.initialHostName=location.hostname,this.startTimeout=null,this.coldStartCommitN=0,this.delay=0,this.coldInterval=null,this.orderNumber=0,this.coldStartTs=0,this.singleBuffer=!1,this.onSessionSent=()=>{},this.restartCanvasTracking=()=>{var c;(c=this.canvasRecorder)==null||c.restartTracking()},this.flushBuffer=async c=>new Promise(l=>{let a=!1;const d=[c.shift()];for(;!a;){const p=c[0];!p||p[0]===0?a=!0:d.push(c.shift())}this.postToWorker(d),l(null)}),this.onUxtCb=[],this.contextId=Math.random().toString(36).slice(2),this.projectKey=e,Object.keys(s).findIndex(c=>["fixedCanvasScaling","disableCanvas"].includes(c))!==-1&&(console.warn('Openreplay: canvas options are moving to separate key "canvas" in next update. Please update your configuration.'),s={...s,canvas:{__save_canvas_locally:s.__save_canvas_locally,fixedCanvasScaling:s.fixedCanvasScaling,disableCanvas:s.disableCanvas}}),this.networkOptions=s.network;const o={revID:"",node_id:"__openreplay_id",session_token_key:"__openreplay_token",session_pageno_key:"__openreplay_pageno",session_reset_key:"__openreplay_reset",session_tabid_key:"__openreplay_tabid",local_uuid_key:"__openreplay_uuid",ingestPoint:Bs,resourceBaseHref:null,__is_snippet:!1,__debug_report_edp:null,__debug__:Xe.Silent,__save_canvas_locally:!1,localStorage:null,sessionStorage:null,disableStringDict:!1,forceSingleTab:!1,assistSocketHost:"",fixedCanvasScaling:!1,disableCanvas:!1,captureIFrames:!0,obscureTextEmails:!0,obscureTextNumbers:!1,crossdomain:{parentDomain:"*"},canvas:{disableCanvas:!1,fixedCanvasScaling:!1,__save_canvas_locally:!1,useAnimationFrame:!1}};if(this.options=ps(o,s),!this.insideIframe&&!this.options.forceSingleTab&&globalThis&&"BroadcastChannel"in globalThis){const c=location.hostname.split(".").slice(-2).join("_");this.bc=new BroadcastChannel(`rick_${c}`)}this.revID=this.options.revID,this.localStorage=this.options.localStorage??window.localStorage,this.sessionStorage=this.options.sessionStorage??window.sessionStorage,this.sanitizer=new ro(this,s),this.nodes=new eo(this.options.node_id),this.observer=new so(this,s),this.ticker=new co(this),this.ticker.attach(()=>this.commit()),this.debug=new Zr(this.options.__debug__),this.session=new oo(this,this.options),this.attributeSender=new Ai(this,!!this.options.disableStringDict),this.featureFlags=new Pi(this),this.tagWatcher=new Ir(this.sessionStorage,this.debug.error,c=>{this.send(kr(c))}),this.session.attachUpdateCallback(({userID:c,metadata:l})=>{c!=null&&this.send(cr(c)),l!=null&&Object.entries(l).forEach(([a,d])=>this.send(ms(a,d)))}),n!=null&&this.session.applySessionHash(n),this.initWorker();const u=this.session.getTabId();if(this.insideIframe){const c=a=>{const{data:d}=a;d.line===ce.iframeId&&(this.rootId=d.id,this.session.setSessionToken(d.token),this.frameOderNumber=d.frameOrderNumber,this.debug.log("starting iframe tracking",d),this.allowAppStart())};window.addEventListener("message",c),this.attachStopCallback(()=>{window.removeEventListener("message",c)});const l=this.initialHostName;window.parent.postMessage({line:ce.iframeSignal,source:u,context:this.contextId,domain:l},"*")}else{let c=0;const l=a=>{const{data:d}=a;if(d.line===ce.iframeSignal){const p=d.domain,v=Array.from(document.querySelectorAll("iframe"));this.pageFrames=v,(async()=>{let y=0;for(;y<10;){const x=this.checkNodeId(v,p);if(x){this.waitStarted().then(()=>{var R;c++;const C=this.session.getSessionToken(),F={line:ce.iframeId,context:this.contextId,domain:p,id:x,token:C,frameOrderNumber:c};this.debug.log("iframe_data",F),(R=a.source)==null||R.postMessage(F,"*")}).catch(console.error),y=10;break}y++,await uo(100)}})()}if(d.line===ce.iframeBatch){const v=d.messages.map(w=>{if(w[0]===20){let y=w;return this.pageFrames.forEach(x=>{if(x.dataset.domain===a.data.domain){const[C,F,R]=w,{left:E,top:N}=x.getBoundingClientRect();y=[C,F+E,R+N]}}),y}if(w[0]===68){let y=w;return this.pageFrames.forEach(x=>{if(x.dataset.domain===a.data.domain){const[C,F,R,E,N,D,L]=w,{left:I,top:T,width:P,height:H}=x.getBoundingClientRect(),j=document.documentElement.scrollWidth,z=document.documentElement.scrollHeight,_=D/100*P+I,M=L/100*H+T,V=_/j,G=M/z;y=[C,F,R,E,N,Math.round(V*1e3)/10,Math.round(G*1e3)/10]}}),y}return w});this.messages.push(...v)}};window.addEventListener("message",l),this.attachStopCallback(()=>{window.removeEventListener("message",l)})}this.bc!==null&&(this.bc.postMessage({line:ce.ask,source:u,context:this.contextId}),this.startTimeout=setTimeout(()=>{this.allowAppStart()},500),this.bc.onmessage=c=>{if(c.data.context!==this.contextId){if(c.data.line===ce.resp){const l=c.data.token;this.session.setSessionToken(l),this.allowAppStart()}if(c.data.line===ce.reg){const l=c.data.token;this.session.regenerateTabId(),this.session.setSessionToken(l),this.allowAppStart()}if(c.data.line===ce.ask){const l=this.session.getSessionToken();l&&this.bc&&this.bc.postMessage({line:c.data.source===u?ce.reg:ce.resp,token:l,source:u,context:this.contextId})}}})}allowAppStart(){this.canStart=!0,this.startTimeout&&(clearTimeout(this.startTimeout),this.startTimeout=null)}checkNodeId(e,n){for(const s of e)if(s.dataset.domain===n)return s[this.options.node_id];return null}initWorker(){try{this.worker=new Worker(URL.createObjectURL(new Blob(['"use strict";class t{constructor(t,s,i,e=10,n=250,h,r){this.onUnauthorised=s,this.onFailure=i,this.MAX_ATTEMPTS_COUNT=e,this.ATTEMPT_TIMEOUT=n,this.onCompress=h,this.pageNo=r,this.attemptsCount=0,this.busy=!1,this.queue=[],this.token=null,this.lastBatchNum=0,this.ingestURL=t+"/v1/web/i",this.isCompressing=void 0!==h}getQueueStatus(){return 0===this.queue.length&&!this.busy}authorise(t){this.token=t,this.busy||this.sendNext()}push(t){if(this.busy||!this.token)this.queue.push(t);else if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}}sendNext(){const t=this.queue.shift();if(t)if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}else this.busy=!1}retry(t,s,i){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure(`Failed to send batch after ${this.attemptsCount} attempts.`):(this.attemptsCount++,setTimeout((()=>this.sendBatch(t,s,i)),this.ATTEMPT_TIMEOUT*this.attemptsCount))}sendBatch(t,s,i){const e=i?.toString().replace(/^([^_]+)_([^_]+).*/,"$1_$2_$3");this.busy=!0;const n={Authorization:`Bearer ${this.token}`};s&&(n["Content-Encoding"]="gzip"),null!==this.token?fetch(`${this.ingestURL}?batch=${this.pageNo??"noPageNum"}_${e??"noBatchNum"}`,{body:t,method:"POST",headers:n,keepalive:t.length<65536}).then((e=>{if(401===e.status)return this.busy=!1,void this.onUnauthorised();e.status>=400?this.retry(t,s,`${i??"noBatchNum"}_network:${e.status}`):(this.attemptsCount=0,this.sendNext())})).catch((e=>{console.warn("OpenReplay:",e),this.retry(t,s,`${i??"noBatchNum"}_reject:${e.message}`)})):setTimeout((()=>{this.sendBatch(t,s,`${i??"noBatchNum"}_newToken`)}),500)}sendCompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!0,s)}sendUncompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}clean(){this.sendNext(),setTimeout((()=>{this.token=null,this.queue.length=0}),10)}}const s="function"==typeof TextEncoder?new TextEncoder:{encode(t){const s=t.length,i=new Uint8Array(3*s);let e=-1;for(let n=0,h=0,r=0;r!==s;){if(n=t.charCodeAt(r),r+=1,n>=55296&&n<=56319){if(r===s){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;break}if(h=t.charCodeAt(r),!(h>=56320&&h<=57343)){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;continue}if(n=1024*(n-55296)+h-56320+65536,r+=1,n>65535){i[e+=1]=240|n>>>18,i[e+=1]=128|n>>>12&63,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n;continue}}n<=127?i[e+=1]=0|n:n<=2047?(i[e+=1]=192|n>>>6,i[e+=1]=128|63&n):(i[e+=1]=224|n>>>12,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n)}return i.subarray(0,e+1)}};class i{constructor(t){this.size=t,this.offset=0,this.checkpointOffset=0,this.data=new Uint8Array(t)}getCurrentOffset(){return this.offset}checkpoint(){this.checkpointOffset=this.offset}get isEmpty(){return 0===this.offset}skip(t){return this.offset+=t,this.offset<=this.size}set(t,s){this.data.set(t,s)}boolean(t){return this.data[this.offset++]=+t,this.offset<=this.size}uint(t){for((t<0||t>Number.MAX_SAFE_INTEGER)&&(t=0);t>=128;)this.data[this.offset++]=t%256|128,t=Math.floor(t/128);return this.data[this.offset++]=t,this.offset<=this.size}int(t){return t=Math.round(t),this.uint(t>=0?2*t:-2*t-1)}string(t){const i=s.encode(t),e=i.byteLength;return!(!this.uint(e)||this.offset+e>this.size)&&(this.data.set(i,this.offset),this.offset+=e,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}class e extends i{encode(t){switch(t[0]){case 0:case 11:case 114:case 115:return this.uint(t[1]);case 4:case 44:case 47:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3]);case 5:case 20:case 38:case 70:case 75:case 76:case 77:case 82:return this.uint(t[1])&&this.uint(t[2]);case 6:return this.int(t[1])&&this.int(t[2]);case 7:return!0;case 8:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.string(t[4])&&this.boolean(t[5]);case 9:case 10:case 24:case 51:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3]);case 12:case 61:case 71:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3]);case 13:case 14:case 17:case 50:case 54:return this.uint(t[1])&&this.string(t[2]);case 16:return this.uint(t[1])&&this.int(t[2])&&this.int(t[3]);case 18:return this.uint(t[1])&&this.string(t[2])&&this.int(t[3]);case 19:return this.uint(t[1])&&this.boolean(t[2]);case 21:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8]);case 22:case 27:case 30:case 41:case 45:case 46:case 63:case 64:case 79:return this.string(t[1])&&this.string(t[2]);case 23:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 28:case 29:case 42:case 117:case 118:return this.string(t[1]);case 37:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3]);case 39:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7]);case 40:return this.string(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 48:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.int(t[5]);case 49:return this.int(t[1])&&this.int(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 53:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8]);case 55:return this.boolean(t[1]);case 57:case 60:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 58:case 120:return this.int(t[1]);case 59:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6])&&this.string(t[7]);case 67:case 73:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 68:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6]);case 69:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 78:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 81:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.int(t[4])&&this.string(t[5]);case 83:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 84:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6]);case 112:return this.uint(t[1])&&this.string(t[2])&&this.boolean(t[3])&&this.string(t[4])&&this.int(t[5])&&this.int(t[6]);case 113:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3]);case 116:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8])&&this.uint(t[9])&&this.boolean(t[10]);case 119:return this.string(t[1])&&this.uint(t[2]);case 121:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 122:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 123:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])}}}class n{constructor(t,s,i,n,h,r){this.pageNo=t,this.timestamp=s,this.url=i,this.onBatch=n,this.tabId=h,this.onOfflineEnd=r,this.nextIndex=0,this.beaconSize=2e5,this.encoder=new e(this.beaconSize),this.sizeBuffer=new Uint8Array(3),this.isEmpty=!0,this.beaconSizeLimit=1e6,this.prepare()}writeType(t){return this.encoder.uint(t[0])}writeFields(t){return this.encoder.encode(t)}writeSizeAt(t,s){for(let s=0;s<3;s++)this.sizeBuffer[s]=t>>8*s;this.encoder.set(this.sizeBuffer,s)}prepare(){if(!this.encoder.isEmpty)return;const t=[81,1,this.pageNo,this.nextIndex,this.timestamp,this.url],s=[118,this.tabId];this.writeType(t),this.writeFields(t),this.writeWithSize(s),this.isEmpty=!0}writeWithSize(t){const s=this.encoder;if(!this.writeType(t)||!s.skip(3))return!1;const i=s.getCurrentOffset(),e=this.writeFields(t);if(e){const e=s.getCurrentOffset()-i;if(e>16777215)return console.warn("OpenReplay: max message size overflow."),!1;this.writeSizeAt(e,i-3),s.checkpoint(),this.isEmpty=this.isEmpty&&0===t[0],this.nextIndex++}return e}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(t){if("q_end"===t[0])return this.finaliseBatch(),this.onOfflineEnd();0===t[0]&&(this.timestamp=t[1]),122===t[0]&&(this.url=t[1]),this.writeWithSize(t)||(this.finaliseBatch(),this.writeWithSize(t)||(this.encoder=new e(this.beaconSizeLimit),this.prepare(),this.writeWithSize(t)?this.finaliseBatch():console.warn("OpenReplay: beacon size overflow. Skipping large message.",t,this),this.encoder=new e(this.beaconSize),this.prepare()))}finaliseBatch(){if(this.isEmpty)return;const t=this.encoder.flush();this.onBatch(t),this.prepare()}clean(){this.encoder.reset()}}var h;!function(t){t[t.NotActive=0]="NotActive",t[t.Starting=1]="Starting",t[t.Stopping=2]="Stopping",t[t.Active=3]="Active",t[t.Stopped=4]="Stopped"}(h||(h={}));let r=null,a=null,u=h.NotActive;function o(){a&&a.finaliseBatch()}function c(){return new Promise((t=>{u=h.Stopping,null!==l&&(clearInterval(l),l=null),a&&(a.clean(),a=null),r&&(r.clean(),setTimeout((()=>{r=null}),20)),setTimeout((()=>{u=h.NotActive,t(null)}),100)}))}function g(){u!==h.Stopped&&(postMessage("a_stop"),c().then((()=>{postMessage("a_start")})))}let p,l=null;self.onmessage=({data:s})=>{if(null!=s){if("stop"===s)return o(),void c().then((()=>{u=h.Stopped}));if("forceFlushBatch"!==s){if(!Array.isArray(s)){if("compressed"===s.type){if(!r)return console.debug("OR WebWorker: sender not initialised. Compressed batch."),void g();s.batch&&r.sendCompressed(s.batch)}if("uncompressed"===s.type){if(!r)return console.debug("OR WebWorker: sender not initialised. Uncompressed batch."),void g();s.batch&&r.sendUncompressed(s.batch)}return"start"===s.type?(u=h.Starting,r=new t(s.ingestPoint,(()=>{g()}),(t=>{!function(t){postMessage({type:"failure",reason:t}),c()}(t)}),s.connAttemptCount,s.connAttemptGap,(t=>{postMessage({type:"compress",batch:t},[t.buffer])}),s.pageNo),a=new n(s.pageNo,s.timestamp,s.url,(t=>{r&&r.push(t)}),s.tabId,(()=>postMessage({type:"queue_empty"}))),null===l&&(l=setInterval(o,1e4)),u=h.Active):"auth"===s.type?r?a?(r.authorise(s.token),void(s.beaconSizeLimit&&a.setBeaconSizeLimit(s.beaconSizeLimit))):(console.debug("OR WebWorker: writer not initialised. Received auth."),void g()):(console.debug("OR WebWorker: sender not initialised. Received auth."),void g()):void 0}if(a){const t=a;s.forEach((s=>{55===s[0]&&(s[1]?p=setTimeout((()=>g()),18e5):clearTimeout(p)),t.writeMessage(s)}))}else postMessage("not_init"),g()}else o()}else o()};'],{type:"text/javascript"}))),this.worker.onerror=n=>{this._debug("webworker_error",n)},this.worker.onmessage=({data:n})=>{this.handleWorkerMsg(n)};const e=()=>{this.worker&&this.worker.postMessage(null)};this.attachEventListener(window,"beforeunload",e,!1),this.attachEventListener(document.body,"mouseleave",e,!1,!1),this.attachEventListener(document,"visibilitychange",e,!1)}catch(e){this._debug("worker_start",e)}}handleWorkerMsg(e){var n;if(e==="a_stop")this.stop(!1);else if(e==="a_start")this.start({},!0);else if(e==="not_init")this.debug.warn("OR WebWorker: writer not initialised. Restarting tracker");else if(e.type==="failure")this.stop(!1),this.debug.error("worker_failed",e.reason),this._debug("worker_failed",e.reason);else if(e.type==="compress"){const s=e.batch;s.byteLength>this.compressionThreshold?Ri(e.batch,{mtime:0},(r,o)=>{var u,c;r?(this.debug.error("Openreplay compression error:",r),(u=this.worker)==null||u.postMessage({type:"uncompressed",batch:s})):(c=this.worker)==null||c.postMessage({type:"compressed",batch:o})}):(n=this.worker)==null||n.postMessage({type:"uncompressed",batch:s})}else e.type==="queue_empty"&&this.onSessionSent()}_debug(e,n){this.options.__debug_report_edp!==null&&fetch(this.options.__debug_report_edp,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({context:e,error:`${n}`})}),this.debug.error("OpenReplay error: ",e,n)}send(e,n=!1){var s;this.activityState!==Z.NotActive&&(this.activityState===Z.ColdStart?(this.bufferedMessages1.push(e),this.singleBuffer||this.bufferedMessages2.push(e),(s=this.conditionsManager)==null||s.processMessage(e)):this.messages.push(e),this.activityState===Z.Active&&n&&this.commit())}_nCommit(){if(this.socketMode){this.messages.unshift(Le(this.session.getTabId())),this.messages.unshift(De(this.timestamp())),this.commitCallbacks.forEach(e=>e(this.messages)),this.messages.length=0;return}if(!(this.worker===void 0||!this.messages.length)){if(this.insideIframe){window.parent.postMessage({line:ce.iframeBatch,messages:this.messages,domain:this.initialHostName},"*"),this.commitCallbacks.forEach(e=>e(this.messages)),this.messages.length=0;return}try{qi(()=>{var e;this.messages.unshift(Le(this.session.getTabId())),this.messages.unshift(De(this.timestamp())),(e=this.worker)==null||e.postMessage(this.messages),this.commitCallbacks.forEach(n=>n(this.messages)),this.messages.length=0})}catch(e){this._debug("worker_commit",e),this.stop(!0),setTimeout(()=>{this.start()},500)}}}_cStartCommit(){this.coldStartCommitN+=1,this.coldStartCommitN===2&&(this.bufferedMessages1.push(De(this.timestamp())),this.bufferedMessages1.push(Le(this.session.getTabId())),this.bufferedMessages2.push(De(this.timestamp())),this.bufferedMessages2.push(Le(this.session.getTabId())),this.coldStartCommitN=0)}commit(){this.activityState===Z.ColdStart?this._cStartCommit():this._nCommit()}postToWorker(e){var n;(n=this.worker)==null||n.postMessage(e),this.commitCallbacks.forEach(s=>s(e)),e.length=0}timestamp(){return fe()+this.delay}safe(e){const n=this;return function(...s){try{e.apply(this,s)}catch(i){n._debug("safe_fn_call",i)}}}attachCommitCallback(e){this.commitCallbacks.push(e)}attachStartCallback(e,n=!1){n&&(e=this.safe(e)),this.startCallbacks.push(e)}attachStopCallback(e,n=!1){n&&(e=this.safe(e)),this.stopCallbacks.push(e)}attachEventListener(e,n,s,i=!0,r=!0){i&&(s=this.safe(s));const o=()=>e?ds(e,n,s,r):null,u=()=>e?fs(e,n,s,r):null;this.attachStartCallback(o,i),this.attachStopCallback(u,i)}checkRequiredVersion(e){const n=e.split(/[.-]/),s=this.version.split(/[.-]/);for(let i=0;i<3;i++){if(isNaN(Number(s[i]))||isNaN(Number(n[i])))return!1;if(Number(s[i])>Number(n[i]))return!0;if(Number(s[i])<Number(n[i]))return!1}return!0}getTrackerInfo(){return{userUUID:this.localStorage.getItem(this.options.local_uuid_key),projectKey:this.projectKey,revID:this.revID,trackerVersion:this.version,isSnippet:this.options.__is_snippet}}getSessionInfo(){return{...this.session.getInfo(),...this.getTrackerInfo()}}getSessionToken(){return this.session.getSessionToken()}getSessionID(){return this.session.getInfo().sessionID||void 0}getSessionURL(e){const{projectID:n,sessionID:s,timestamp:i}=this.session.getInfo();if(!n||!s){this.debug.error("OpenReplay error: Unable to build session URL");return}const r=this.options.ingestPoint,c=(/api\.openreplay\.com/.test(r)?"https://app.openreplay.com/ingest":r).replace(/ingest$/,`${n}/session/${s}`);if(e!=null&&e.withCurrentTime){const l=fe()-i;return`${c}?jumpto=${l}`}return c}getHost(){return new URL(this.options.ingestPoint).host}getProjectKey(){return this.projectKey}getBaseHref(){var e,n;return typeof this.options.resourceBaseHref=="string"?this.options.resourceBaseHref:(this.options.resourceBaseHref,document.baseURI?document.baseURI:((n=(e=document.head)==null?void 0:e.getElementsByTagName("base")[0])==null?void 0:n.getAttribute("href"))||location.origin+location.pathname)}resolveResourceURL(e){const n=new URL(this.getBaseHref());return n.pathname+="/"+new URL(e).pathname,n.pathname.replace(/\/+/g,"/"),n.toString()}isServiceURL(e){return e.startsWith(this.options.ingestPoint)}active(){return this.activityState===Z.Active}resetNextPageSession(e){e?this.sessionStorage.setItem(this.options.session_reset_key,"t"):this.sessionStorage.removeItem(this.options.session_reset_key)}checkSessionToken(e){const n=this.sessionStorage.getItem(this.options.session_reset_key)!==null,s=e||n,i=this.session.getSessionToken();return s||!i}async coldStart(e={},n){this.singleBuffer=!1;const s=1e3,i=this.checkSessionToken(e.forceNew);n&&await this.setupConditionalStart(e);const r=()=>{this.orderNumber+=1,zt(),this.coldStartTs=fe(),this.orderNumber%2===0?(this.bufferedMessages1.length=0,this.bufferedMessages1.push(De(this.timestamp())),this.bufferedMessages1.push(Le(this.session.getTabId()))):(this.bufferedMessages2.length=0,this.bufferedMessages2.push(De(this.timestamp())),this.bufferedMessages2.push(Le(this.session.getTabId()))),this.stop(!1),this.activityState=Z.ColdStart,e.sessionHash&&this.session.applySessionHash(e.sessionHash),e.forceNew&&this.session.reset(),this.session.assign({userID:e.userID,metadata:e.metadata}),i||(this.debug.log("continuing session on new tab",this.session.getTabId()),this.send(gt(this.session.getTabId()))),this.observer.observe(),this.ticker.start()};this.coldInterval=setInterval(()=>{r()},30*s),r()}async setupConditionalStart(e){var p,v;this.conditionsManager=new Mi(this,e);const n=await fetch(this.options.ingestPoint+"/v1/web/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...this.getTrackerInfo(),timestamp:fe(),doNotRecord:!0,bufferDiff:0,userID:this.session.getInfo().userID,token:void 0,deviceMemory:Jt,jsHeapSizeLimit:Xt,timezone:an(),width:window.screen.width,height:window.screen.height})}),{token:s,userBrowser:i,userCity:r,userCountry:o,userDevice:u,userOS:c,userState:l,projectID:a}=await n.json();this.session.assign({projectID:a}),this.session.setUserInfo({userBrowser:i,userCity:r,userCountry:o,userDevice:u,userOS:c,userState:l});const d={sessionToken:s,userUUID:"",sessionID:""};this.startCallbacks.forEach(w=>w(d)),await((p=this.conditionsManager)==null?void 0:p.fetchConditions(a,s)),await this.featureFlags.reloadFlags(s),await this.tagWatcher.fetchTags(this.options.ingestPoint,s),(v=this.conditionsManager)==null||v.processFlags(this.featureFlags.flags)}offlineRecording(e={},n){this.onSessionSent=n,this.singleBuffer=!0;const s=this.checkSessionToken(e.forceNew);zt(),this.coldStartTs=fe();const i=this.localStorage.getItem(on);if(i){const o=JSON.parse(i);this.bufferedMessages1=Array.isArray(o)?o:this.bufferedMessages1,this.localStorage.removeItem(on)}this.bufferedMessages1.push(De(this.timestamp())),this.bufferedMessages1.push(Le(this.session.getTabId())),this.activityState=Z.ColdStart,e.sessionHash&&this.session.applySessionHash(e.sessionHash),e.forceNew&&this.session.reset(),this.session.assign({userID:e.userID,metadata:e.metadata});const r={sessionToken:"",userUUID:"",sessionID:""};return this.startCallbacks.forEach(o=>o(r)),s||this.send(gt(this.session.getTabId())),this.observer.observe(),this.ticker.start(),{saveBuffer:this.saveBuffer,getBuffer:this.getBuffer,setBuffer:this.setBuffer}}saveBuffer(){this.localStorage.setItem(on,JSON.stringify(this.bufferedMessages1))}getBuffer(){return this.bufferedMessages1}setBuffer(e){this.bufferedMessages1=e}async uploadOfflineRecording(){var p,v;this.stop(!1);const e=fe();(p=this.worker)==null||p.postMessage({type:"start",pageNo:this.session.incPageNo(),ingestPoint:this.options.ingestPoint,timestamp:this.coldStartTs,url:document.URL,connAttemptCount:this.options.connAttemptCount,connAttemptGap:this.options.connAttemptGap,tabId:this.session.getTabId()});const n=await fetch(this.options.ingestPoint+"/v1/web/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...this.getTrackerInfo(),timestamp:e,doNotRecord:!1,bufferDiff:e-this.coldStartTs,userID:this.session.getInfo().userID,token:void 0,deviceMemory:Jt,jsHeapSizeLimit:Xt,timezone:an()})}),{token:s,userBrowser:i,userCity:r,userCountry:o,userDevice:u,userOS:c,userState:l,beaconSizeLimit:a,projectID:d}=await n.json();for((v=this.worker)==null||v.postMessage({type:"auth",token:s,beaconSizeLimit:a}),this.session.assign({projectID:d}),this.session.setUserInfo({userBrowser:i,userCity:r,userCountry:o,userDevice:u,userOS:c,userState:l});this.bufferedMessages1.length>0;)await this.flushBuffer(this.bufferedMessages1);this.postToWorker([["q_end"]]),this.clearBuffers()}async _start(e={},n=!1,s){const i=this.activityState===Z.ColdStart;if(i&&this.coldInterval&&clearInterval(this.coldInterval),!this.worker){const c="No worker found: perhaps, CSP is not set.";return this.signalError(c,[]),Promise.resolve(_e(c))}if(this.activityState===Z.Active||this.activityState===Z.Starting)return Promise.resolve(_e("OpenReplay: trying to call `start()` on the instance that has been started already."));this.activityState=Z.Starting,i||zt(),e.sessionHash&&this.session.applySessionHash(e.sessionHash),e.forceNew&&this.session.reset(),this.session.assign({userID:e.userID,metadata:e.metadata});const r=fe();this.worker.postMessage({type:"start",pageNo:this.session.incPageNo(),ingestPoint:this.options.ingestPoint,timestamp:i?this.coldStartTs:r,url:document.URL,connAttemptCount:this.options.connAttemptCount,connAttemptGap:this.options.connAttemptGap,tabId:this.session.getTabId()});const o=this.session.getSessionToken(),u=this.checkSessionToken(e.forceNew);this.sessionStorage.removeItem(this.options.session_reset_key),this.debug.log("OpenReplay: starting session; need new session id?",u,"session token: ",o);try{const c=await window.fetch(this.options.ingestPoint+"/v1/web/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...this.getTrackerInfo(),timestamp:r,doNotRecord:!1,bufferDiff:r-this.coldStartTs,userID:this.session.getInfo().userID,token:u?void 0:o,deviceMemory:Jt,jsHeapSizeLimit:Xt,timezone:an(),condition:s,assistOnly:e.assistOnly??this.socketMode,width:window.screen.width,height:window.screen.height})});if(c.status!==200){const _=await c.text(),M=_===Ye?Ye:`Server error: ${c.status}. ${_}`;return _e(M)}if(!this.worker){const _="no worker found after start request (this should not happen in real world)";return this.signalError(_,[]),_e(_)}const{token:l,userUUID:a,projectID:d,beaconSizeLimit:p,compressionThreshold:v,delay:w,sessionID:y,startTimestamp:x,userBrowser:C,userCity:F,userCountry:R,userDevice:E,userOS:N,userState:D,canvasEnabled:L,canvasQuality:I,canvasFPS:T,assistOnly:P}=await c.json();if(typeof l!="string"||typeof a!="string"||typeof x!="number"&&typeof x<"u"||typeof y!="string"||typeof w!="number"||typeof p!="number"&&typeof p<"u"){const _=`Incorrect server response: ${JSON.stringify(c)}`;return this.signalError(_,[]),_e(_)}this.delay=w,this.session.setSessionToken(l),this.session.setUserInfo({userBrowser:C,userCity:F,userCountry:R,userDevice:E,userOS:N,userState:D}),this.session.assign({sessionID:y,timestamp:x||r,projectID:d}),P?(this.socketMode=!0,this.worker.postMessage("stop")):this.worker.postMessage({type:"auth",token:l,beaconSizeLimit:p}),!u&&l===o&&(this.debug.log("continuing session on new tab",this.session.getTabId()),this.send(gt(this.session.getTabId()))),Object.entries(this.session.getInfo().metadata).forEach(([_,M])=>this.send(ms(_,M))),this.localStorage.setItem(this.options.local_uuid_key,a),this.compressionThreshold=v;const H={sessionToken:l,userUUID:a,sessionID:y};if(this.startCallbacks.forEach(_=>_(H)),this.featureFlags.reloadFlags(),await this.tagWatcher.fetchTags(this.options.ingestPoint,l),this.activityState=Z.Active,L&&!this.options.canvas.disableCanvas&&(this.canvasRecorder=this.canvasRecorder??new Xr(this,{fps:T,quality:I,isDebug:this.options.canvas.__save_canvas_locally,fixedScaling:this.options.canvas.fixedCanvasScaling,useAnimationFrame:this.options.canvas.useAnimationFrame}),this.canvasRecorder.startTracking()),i){const _=this.bufferedMessages1.length>this.bufferedMessages2.length?this.bufferedMessages1:this.bufferedMessages2;for(;_.length>0;)await this.flushBuffer(_);this.clearBuffers(),this.commit()}else this.insideIframe&&this.rootId?this.observer.crossdomainObserve(this.rootId,this.frameOderNumber):this.observer.observe(),this.ticker.start();this.uxtManager=this.uxtManager?this.uxtManager:new Kr(this,Ps);let j;const z=this.localStorage.getItem(Ps);if(z&&(j=parseInt(z,10)),location!=null&&location.search){const _=new URLSearchParams(location.search);if(_.has("oruxt")){const M=_.get("oruxt");j=M?parseInt(M,10):void 0}}return j&&(this.uxtManager.isActive?this.onUxtCb.forEach(_=>_(j)):this.uxtManager.getTest(j,l,!!z).then(_=>{_&&this.onUxtCb.forEach(M=>M(_))})),lo(H)}catch(c){if(this.stop(),this.session.reset(),c===Ye)return this.signalError(Ye,[]),_e(Ye);this._debug("session_start",c);const l=c instanceof Error?c.message:c.toString();return this.signalError(l,[]),_e(l)}}addOnUxtCb(e){this.onUxtCb.push(e)}getUxtId(){var e;return(e=this.uxtManager)==null?void 0:e.getTestId()}async waitStart(){return new Promise(e=>{const n=()=>{this.canStart?e(!0):setTimeout(n,25)};n()})}async waitStarted(){return new Promise(e=>{const n=()=>{this.activityState===Z.Active?e(!0):setTimeout(n,25)};n()})}async start(...e){return this.activityState===Z.Active||this.activityState===Z.Starting?Promise.resolve(_e("OpenReplay: trying to call `start()` on the instance that has been started already.")):document.hidden?new Promise(n=>{const s=async()=>{document.hidden||(await this.waitStart(),document.removeEventListener("visibilitychange",s),n(this._start(...e)))};document.addEventListener("visibilitychange",s)}):(await this.waitStart(),this._start(...e))}forceFlushBatch(){var e;(e=this.worker)==null||e.postMessage("forceFlushBatch")}getTabId(){return this.session.getTabId()}clearBuffers(){this.bufferedMessages1.length=0,this.bufferedMessages2.length=0}trackWs(e){const n=e;return(s,i,r="down")=>{typeof s!="string"||typeof i!="string"||i.length>5*1024*1024||s.length>255||this.send(br("websocket",n,i,this.timestamp(),r,s))}}stop(e=!0){var n;if(this.activityState!==Z.NotActive)try{this.attributeSender.clear(),this.sanitizer.clear(),this.observer.disconnect(),this.nodes.clear(),this.ticker.stop(),this.stopCallbacks.forEach(s=>s()),this.debug.log("OpenReplay tracking stopped."),this.tagWatcher.clear(),this.worker&&e&&this.worker.postMessage("stop"),(n=this.canvasRecorder)==null||n.clear()}finally{this.activityState=Z.NotActive}}};function fo(t){const e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;if(e===void 0)return;const n=()=>t.send(hr(Math.round(e.downlink*1e3),e.type||"unknown"));n(),e.addEventListener("change",n)}const js=ve&&"InstallTrigger"in window?t=>t.message+`
|
|
11
|
-
`+t.stack:t=>t.stack||t.message;function
|
|
12
|
-
`).filter(
|
|
13
|
-
`).filter(
|
|
14
|
-
`)
|
|
15
|
-
`).length>
|
|
16
|
-
`).length?
|
|
17
|
-
`),
|
|
18
|
-
`),
|
|
19
|
-
`).filter(function(a){return!!a.match(i)&&!a.match(/^Error created at/)},this);return l.map(function(a){var d=a.split("@"),p=this.extractLocation(d.pop()),v=d.shift()||"",w=v.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^)]*\)/g,"")||void 0,y;v.match(/\(([^)]*)\)/)&&(y=v.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var x=y===void 0||y==="[arguments not available]"?void 0:y.split(",");return new s({functionName:w,args:x,fileName:p[0],lineNumber:p[1],columnNumber:p[2],source:a})},this)}}})})(Hs);var yo=Hs.exports;const wo=yi(yo);function Ws(t){return[{columnNumber:t.colno,lineNumber:t.lineno,fileName:t.filename,functionName:"",source:""}]}function St(t,e,n={}){let s=e;try{s=wo.parse(t)}catch{}return Gt(t.name,t.message,JSON.stringify(s),JSON.stringify(n))}function qs(t,e=window,n={}){if(t instanceof ErrorEvent){if(t.error instanceof Error)return St(t.error,Ws(t),n);{let[s,i]=t.message.split(":");return i||(s="Error",i=t.message),Gt(s,i,JSON.stringify(Ws(t)),JSON.stringify(n))}}else if("PromiseRejectionEvent"in e&&t instanceof e.PromiseRejectionEvent){if(t.reason instanceof Error)return St(t.reason,[],n);{let s;try{s=JSON.stringify(t.reason)}catch{s=String(t.reason)}return Gt("Unhandled Promise Rejection",s,"[]",JSON.stringify(n))}}return null}function So(t,e){const n=Object.assign({captureExceptions:!0},e);function s(i){function r(o){const u=qs(o,i);u!=null&&t.send(u)}t.attachEventListener(i,"unhandledrejection",r),t.attachEventListener(i,"error",r)}n.captureExceptions&&(t.observer.attachContextCallback(s),s(window))}function Vs(t,e=document.location){return t=t.trim(),t.startsWith("//")||t.startsWith("http://")||t.startsWith("https://")||t.startsWith("data:")?t:t.startsWith("/")?e.origin+t:e.origin+e.pathname+t}function xo(t){return Bi&&(t.startsWith("data:image/svg+xml")||t.match(/.svg$|/i))}const ko="https://static.openreplay.com/tracker/placeholder.jpeg";function Eo(t){function e(u,c){t.attributeSender.sendSetAttribute(u,"src",ko);const{width:l,height:a}=c.getBoundingClientRect();c.hasAttribute("width")||t.attributeSender.sendSetAttribute(u,"width",String(l)),c.hasAttribute("height")||t.attributeSender.sendSetAttribute(u,"height",String(a))}const n=function(u,c){const{srcset:l}=c;if(!l)return;const a=l.split(l.match(/,\s+/)?/,\s+/:",").map(d=>Vs(d)).join(", ");t.attributeSender.sendSetAttribute(u,"srcset",a)},s=function(u,c){c.src.length>ji&&e(u,c),t.send(Wt(u,"src",c.src,t.getBaseHref()))},i=t.safe(function(u){const c=Vs(u.src||"");cs(c)&&t.send(ks(t.timestamp(),0,0,0,0,0,c,"img",0,!1))}),r=t.safe(function(u){const c=t.nodes.getID(u);c!==void 0&&u.complete&&(u.naturalHeight===0&&u.naturalWidth===0&&!xo(u.src)?i(u):t.sanitizer.isHidden(c)||t.sanitizer.isObscured(c)?e(c,u):(s(c,u),n(c,u)))}),o=hs(t.safe(u=>{for(const c of u)if(c.type==="attributes"){const l=c.target,a=t.nodes.getID(l);if(a===void 0)return;c.attributeName==="src"&&s(a,l),c.attributeName==="srcset"&&n(a,l)}}));t.attachStopCallback(()=>{o.disconnect()}),t.nodes.attachNodeCallback(u=>{Q(u,"img")&&(t.nodes.attachNodeListener(u,"error",()=>i(u)),t.nodes.attachNodeListener(u,"load",()=>r(u)),r(u),o.observe(u,{attributes:!0,attributeFilter:["src","srcset"]}))})}const To=["text","password","email","search","number","range","date","tel","time"];function Io(t){return Q(t,"textarea")?!0:Q(t,"input")?To.includes(t.type):!1}function Co(t){if(!Q(t,"input"))return!1;const e=t.type;return e==="checkbox"||e==="radio"}const _o=ve&&"labels"in HTMLInputElement.prototype?t=>{let e=t;for(;(e=e.parentNode)!==null;)if(Q(e,"label"))return e;const n=t.labels;if(n!==null&&n.length===1)return n[0]}:t=>{let e=t;for(;(e=e.parentNode)!==null;)if(Q(e,"label"))return e;const n=t.id;if(n){const s=t.ownerDocument.querySelectorAll('label[for="'+n+'"]');if(s!==null&&s.length===1)return s[0]}};function Gs(t){let e=Ht(t);if(e===null){const n=_o(t);e=n&&n.innerText||t.placeholder||t.name||t.id||t.className||t.type}return as(e).slice(0,100)}const $e={Plain:0,Obscured:1,Hidden:2};function No(t,e){const n=Object.assign({obscureInputNumbers:!0,obscureInputEmails:!0,defaultInputMode:$e.Obscured,obscureInputDates:!1},e);function s(a,d){let p=d.value,v=n.defaultInputMode;d.type==="password"||t.sanitizer.isHidden(a)?v=$e.Hidden:(t.sanitizer.isObscured(a)||v===$e.Plain&&(n.obscureInputNumbers&&d.type!=="date"&&/\d\d\d\d/.test(p)||n.obscureInputDates&&d.type==="date"||n.obscureInputEmails&&(d.type==="email"||~p.indexOf("@"))))&&(v=$e.Obscured);let w=0;switch(v){case $e.Hidden:w=-1,p="";break;case $e.Obscured:w=p.length,p="";break}return{value:p,mask:w}}function i(a,d){const{value:p,mask:v}=s(a,d);t.send(tr(a,p,v))}const r=new Map,o=new Map;t.attachStopCallback(()=>{r.clear(),o.clear()});function u(a,d){r.get(a)!==d.value&&(r.set(a,d.value),i(a,d))}function c(a,d){o.get(a)!==d&&(o.set(a,d),t.send(nr(a,d)))}t.ticker.attach(()=>{r.forEach((a,d)=>{const p=t.nodes.getNode(d);if(!p)return r.delete(d);u(d,p)}),o.forEach((a,d)=>{const p=t.nodes.getNode(d);if(!p)return o.delete(d);c(d,p.checked)})},3);function l(a,d,p,v){const{value:w,mask:y}=s(a,d),x=Gs(d);t.send(yr(a,w,y!==0,x,p,v))}t.nodes.attachNodeCallback(t.safe(a=>{const d=t.nodes.getID(a);if(d!==void 0){if(Q(a,"select")&&(i(d,a),t.nodes.attachNodeListener(a,"change",()=>i(d,a))),Io(a)){u(d,a);let p=0,v=0,w=0;const y=()=>{p=fe()},x=()=>{v===0&&p!==0&&(v=fe()-p)},C=()=>{p!==0&&(w=fe()-p),l(d,a,v,w),v=0,w=0,p=0};t.nodes.attachNodeListener(a,"focus",y),t.nodes.attachNodeListener(a,"input",x),t.nodes.attachNodeListener(a,"change",C);return}if(Co(a)){c(d,a.checked),t.nodes.attachNodeListener(a,"change",()=>c(d,a.checked));return}}}))}let le,un,Ks;function Oo(t,e){if(Ks=new Date,t.nodeType!==Node.ELEMENT_NODE)throw new Error("Can't generate CSS selector for non-element node type.");if(t.tagName.toLowerCase()==="html")return"html";const n={root:document.body,idName:i=>!0,className:i=>!0,tagName:i=>!0,attr:(i,r)=>!1,seedMinLength:1,optimizedMinLength:2,threshold:1e3,maxNumberOfTries:1e4,timeoutMs:void 0};le={...n,...e},un=Ro(le.root,n);let s=xt(t,"all",()=>xt(t,"two",()=>xt(t,"one",()=>xt(t,"none"))));if(s){const i=ei(ti(s,t));return i.length>0&&(s=i[0]),kt(s)}else throw new Error("Selector was not found.")}function Ro(t,e){return t.nodeType===Node.DOCUMENT_NODE?t:t===e.root?t.ownerDocument:t}function xt(t,e,n){let s=null,i=[],r=t,o=0;for(;r;){const u=new Date().getTime()-Ks.getTime();if(le.timeoutMs!==void 0&&u>le.timeoutMs)throw new Error(`Timeout: Can't find a unique selector after ${u}ms`);let c=Tt(Do(r))||Tt(...Lo(r))||Tt(...Ao(r))||Tt(Mo(r))||[Qs()];const l=Fo(r);if(e=="all")l&&(c=c.concat(c.filter(hn).map(a=>Et(a,l))));else if(e=="two")c=c.slice(0,1),l&&(c=c.concat(c.filter(hn).map(a=>Et(a,l))));else if(e=="one"){const[a]=c=c.slice(0,1);l&&hn(a)&&(c=[Et(a,l)])}else e=="none"&&(c=[Qs()],l&&(c=[Et(c[0],l)]));for(let a of c)a.level=o;if(i.push(c),i.length>=le.seedMinLength&&(s=Js(i,n),s))break;r=r.parentElement,o++}return s||(s=Js(i,n)),!s&&n?n():s}function Js(t,e){const n=ei(Zs(t));if(n.length>le.threshold)return e?e():null;for(let s of n)if(Ys(s))return s;return null}function kt(t){let e=t[0],n=e.name;for(let s=1;s<t.length;s++){const i=t[s].level||0;e.level===i-1?n=`${t[s].name} > ${n}`:n=`${t[s].name} ${n}`,e=t[s]}return n}function Xs(t){return t.map(e=>e.penalty).reduce((e,n)=>e+n,0)}function Ys(t){const e=kt(t);switch(un.querySelectorAll(e).length){case 0:throw new Error(`Can't select any node with this selector: ${e}`);case 1:return!0;default:return!1}}function Do(t){const e=t.getAttribute("id");return e&&le.idName(e)?{name:"#"+CSS.escape(e),penalty:0}:null}function Lo(t){return Array.from(t.attributes).filter(n=>le.attr(n.name,n.value)).map(n=>({name:`[${CSS.escape(n.name)}="${CSS.escape(n.value)}"]`,penalty:.5}))}function Ao(t){return Array.from(t.classList).filter(le.className).map(n=>({name:"."+CSS.escape(n),penalty:1}))}function Mo(t){const e=t.tagName.toLowerCase();return le.tagName(e)?{name:e,penalty:2}:null}function Qs(){return{name:"*",penalty:3}}function Fo(t){const e=t.parentNode;if(!e)return null;let n=e.firstChild;if(!n)return null;let s=0;for(;n&&(n.nodeType===Node.ELEMENT_NODE&&s++,n!==t);)n=n.nextSibling;return s}function Et(t,e){return{name:t.name+`:nth-child(${e})`,penalty:t.penalty+1}}function hn(t){return t.name!=="html"&&!t.name.startsWith("#")}function Tt(...t){const e=t.filter(Po);return e.length>0?e:null}function Po(t){return t!=null}function*Zs(t,e=[]){if(t.length>0)for(let n of t[0])yield*Zs(t.slice(1,t.length),e.concat(n));else yield e}function ei(t){return[...t].sort((e,n)=>Xs(e)-Xs(n))}function*ti(t,e,n={counter:0,visited:new Map}){if(t.length>2&&t.length>le.optimizedMinLength)for(let s=1;s<t.length-1;s++){if(n.counter>le.maxNumberOfTries)return;n.counter+=1;const i=[...t];i.splice(s,1);const r=kt(i);if(n.visited.has(r))return;Ys(i)&&Bo(i,e)&&(yield i,n.visited.set(r,!0),yield*ti(i,e,n))}}function Bo(t,e){return un.querySelector(kt(t))===e}function jo(t,e,n){return Oo(t,{root:e.body,seedMinLength:3,optimizedMinLength:(n==null?void 0:n.minSelectorDepth)||2,threshold:(n==null?void 0:n.nthThreshold)||1e3,maxNumberOfTries:(n==null?void 0:n.maxOptimiseTries)||1e4})}function dn(t){const e=t.tagName.toUpperCase();return e==="BUTTON"||e==="A"||e==="LI"||e==="SELECT"||e==="TR"||e==="TH"||t.onclick!=null||t.getAttribute("role")==="button"}function ni(t,e){return t instanceof Element?zo(t,e):null}function zo(t,e){let n=t;for(;n!==null&&n!==e.documentElement;){if(Re(n,"masked"))return null;n=n.parentElement}if(Zt(t)){let s=t.ownerSVGElement;for(;s!==null;)t=s,s=s.ownerSVGElement}for(n=t;n!==null&&n!==e.documentElement;){const s=n.tagName.toUpperCase();if(s==="LABEL")return null;if(s==="INPUT"||dn(n)||Ht(n)!==null)return n;n=n.parentElement}return t===e.documentElement?null:t}function Uo(t,e){const{disableClickmaps:n=!1}=e||{};function s(E){const N=Ht(E);if(N!==null)return N;if(Q(E,"input"))return Gs(E);if(dn(E)){let D="";return E instanceof HTMLElement&&(D=t.sanitizer.getInnerTextSecure(E)),D=D||E.id||E.className,as(D).slice(0,100)}return""}let i=-1,r=-1,o=!1,u=null,c=0,l={},a=0,d=0,p=0,v=0,w;const y=.008,x=225;function C(){const E=v/x;if(!a){a=E;return}const N=(E-a)/x;p>4&&N>y&&t.send(wr(fe())),v=0,p=0,a=E}t.attachStartCallback(()=>{w=setInterval(()=>C(),x)}),t.attachStopCallback(()=>{i=-1,r=-1,o=!1,u=null,l={},w&&clearInterval(w)});const F=()=>{o&&(t.send(sr(i,r)),o=!1)},R=(E,N=!1)=>{function D(I,T,P){return l[I]=l[I]||jo(T,E,P)}const L=N?t.attachEventListener.bind(t):t.nodes.attachNodeListener.bind(t.nodes);L(E.documentElement,"mouseover",I=>{const T=ni(I.target,E);T!==u&&(u=T,c=performance.now())}),L(E,"mousemove",I=>{const[T,P]=t.observer.getDocumentOffset(E);i=I.clientX+T,r=I.clientY+P,o=!0;const H=Math.sign(I.movementX);v+=Math.abs(I.movementX)+Math.abs(I.movementY),H!==d&&(d=H,p++)},!1),L(E,"click",I=>{const T=ni(I.target,E);if(!I.clientX&&!I.clientY||T===null)return;const P=t.nodes.getID(T);if(P!==void 0){const H=I.pageX,j=I.pageY,z=E.documentElement.scrollWidth,_=E.documentElement.scrollHeight,M=si(H/z),V=si(j/_);F(),t.send(mr(P,u===T?Math.round(performance.now()-c):0,s(T),dn(T)&&!n?D(P,T,e):"",M,V),!0)}u=null})};t.nodes.attachNodeCallback(E=>{bt(E)&&R(E)}),R(document,!0),t.ticker.attach(F,(e==null?void 0:e.trackingOffset)||7)}function si(t){return Math.round(t*1e4)}function Ho(t){const e=[],n=document.getElementsByTagName("*"),s=/url\(("[^"]*"|'[^']*'|[^)]*)\)/i;for(let i=0;i<n.length;i++){const r=n[i];let o="";if(Q(r,"img")&&(o=r.currentSrc||r.src),!o){const w=getComputedStyle(r).getPropertyValue("background-image");if(w){const y=s.exec(w);y!==null&&(o=y[1],(o.startsWith('"')||o.startsWith("'"))&&(o=o.substr(1,o.length-2)))}}if(!o)continue;const u=o.substr(0,10)==="data:image"?0:t[o];if(u===void 0)continue;const c=r.getBoundingClientRect(),l=Math.max(c.top,0),a=Math.max(c.left,0),d=Math.min(c.bottom,window.innerHeight||document.documentElement&&document.documentElement.clientHeight||0),p=Math.min(c.right,window.innerWidth||document.documentElement&&document.documentElement.clientWidth||0);if(d<=l||p<=a)continue;const v=(d-l)*(p-a);e.push({time:u,area:v})}return e}function $o(t,e){let n=Math.max(document.documentElement&&document.documentElement.clientWidth||0,window.innerWidth||0)*Math.max(document.documentElement&&document.documentElement.clientHeight||0,window.innerHeight||0)/10,s=n*t;for(let i=0;i<e.length;i++){const{time:r,area:o}=e[i];n+=o,s+=o*(r>t?r:t)}return n===0?0:s/n}function Wo(t,e){const n=Object.assign({captureResourceTimings:!0,capturePageLoadTimings:!0,capturePageRenderTimings:!0,excludedResourceUrls:[]},e);if("PerformanceObserver"in window||(n.captureResourceTimings=!1),!n.captureResourceTimings)return;let s={};function i(l){var d;if(l.duration<0||!cs(l.name)||t.isServiceURL(l.name))return;s!==null&&(s[l.name]=l.startTime+l.duration);let a=!1;(d=n.excludedResourceUrls)==null||d.forEach(p=>{if(l.name.startsWith(p)){a=!0;return}}),!a&&t.send(ks(l.startTime+ze(),l.duration,l.responseStart&&l.startTime?l.responseStart-l.startTime:0,l.transferSize>l.encodedBodySize?l.transferSize-l.encodedBodySize:0,l.encodedBodySize||0,l.decodedBodySize||0,l.name,l.initiatorType,l.transferSize,l.responseStatus&&l.responseStatus===304||l.transferSize===0))}const r=new PerformanceObserver(l=>l.getEntries().forEach(i));let o;t.attachStartCallback(function({sessionID:l}){l!==o&&(performance.getEntriesByType("resource").forEach(i),o=l),r.observe({entryTypes:["resource"]})}),t.attachStopCallback(function(){r.disconnect()});let u=0,c=0;if(n.capturePageLoadTimings){let l=!1;t.ticker.attach(()=>{if(!l&&((u===0||c===0)&&performance.getEntriesByType("paint").forEach(a=>{const{name:d,startTime:p}=a;switch(d){case"first-paint":u=p;break;case"first-contentful-paint":c=p;break}}),performance.timing.loadEventEnd||performance.now()>3e4)){l=!0;const{navigationStart:a,requestStart:d,responseStart:p,responseEnd:v,domContentLoadedEventStart:w,domContentLoadedEventEnd:y,loadEventStart:x,loadEventEnd:C}=performance.timing;t.send(rr(d-a||0,p-a||0,v-a||0,w-a||0,y-a||0,x-a||0,C-a||0,u,c))}},30)}if(n.capturePageRenderTimings){let l=0,a=0,d=0,p=null,v=!1;t.ticker.attach(()=>{if(v)return;const w=performance.now();if(s!==null&&(l=Math.max.apply(null,Object.keys(s).map(y=>s[y])),w-l>1e3&&(p=Ho(s),s=null)),d!==null&&(w-d>50&&(a=w),d=w-a>5e3?null:w),p!==null&&d===null||w>3e4){v=!0,s=null;const y=p===null?0:$o(c||u,p),{domContentLoadedEventEnd:x,navigationStart:C}=performance.timing,F=d===null?Math.max(a,c,x-C||0):0;t.send(or(y,c>l?c:l,F))}})}}function fn(t){const e=t.defaultView;return[e&&e.scrollX||t.documentElement&&t.documentElement.scrollLeft||t.body&&t.body.scrollLeft||0,e&&e.scrollY||t.documentElement&&t.documentElement.scrollTop||t.body&&t.body.scrollTop||0]}function qo(t,e){let n=!1;const s=new Map;function i(u){As(u)&&(ke(u)&&s.set(u,[u.scrollLeft,u.scrollTop]),bt(u)&&s.set(u,fn(u)))}const r=t.safe(()=>{e||t.send(Gi(...fn(document)))}),o=t.safe((u,c)=>{const l=t.nodes.getID(c);l!==void 0&&t.send(er(l,u[0],u[1]))});t.attachStartCallback(r),t.attachStopCallback(()=>{n=!1,s.clear()}),t.nodes.attachNodeCallback((u,c)=>{c&&(ke(u)&&u.scrollLeft+u.scrollTop>0?s.set(u,[u.scrollLeft,u.scrollTop]):bt(u)&&s.set(u,fn(u))),yt(u)&&t.nodes.attachNodeListener(u,"scroll",l=>{i(l.target)})}),t.attachEventListener(document,"scroll",u=>{const c=u.target;if(c===document){n=!0;return}i(c)}),t.ticker.attach(()=>{n&&(r(),n=!1),s.forEach(o),s.clear()},5,!1)}function Vo(t){let e,n,s,i,r=document.referrer;const o=t.safe(()=>{const{URL:l}=document;l!==e&&(e=l,t.send(Er(e,r,i,document.title)),i=0,r=e)}),u=t.safe(()=>{const{innerWidth:l,innerHeight:a}=window;(l!==n||a!==s)&&(n=l,s=a,t.send(Vi(n,s)))}),c=document.hidden===void 0?Function.prototype:t.safe(()=>t.send(dr(document.hidden)));t.attachStartCallback(()=>{e=null,i=ze(),n=s=-1,o(),u(),c()}),document.hidden!==void 0&&t.attachEventListener(document,"visibilitychange",c,!1,!1),t.ticker.attach(o,1,!1),t.ticker.attach(u,5,!1)}function ii(t){return yt(t)&&!!t.adoptedStyleSheets}let Go=15;function ri(){return Go++}const It=new Map;function Ko(t){if(t===null||!ii(document))return;const e=new Map,n=new Map,s=o=>setTimeout(()=>{let u=t.nodes.getID(o);if(o===document&&(u=0),u===void 0)return;let c=n.get(u);c||(c=[]);const l=[],a=o.adoptedStyleSheets;if(a&&Symbol.iterator in a)for(const d of a){let p=e.get(d);const v=!p;if(p||(p=ri(),e.set(d,p)),c.includes(p)||t.send(Ss(p,u)),v){const w=d.cssRules;for(let y=0;y<w.length;y++)t.send(Vt(p,w[y].cssText,y,t.getBaseHref()))}l.push(p)}if(Symbol.iterator in c)for(const d of c)l.includes(d)||t.send(vr(d,u));n.set(u,l)},20);function i(o){const u=Object.getOwnPropertyDescriptor(o,"adoptedStyleSheets");u&&Object.defineProperty(o,"adoptedStyleSheets",{...u,set:function(c){const l=u.set.call(this,c);return s(this),l}})}const r=o=>{if(o.__openreplay_adpss_patched__)return;o.__openreplay_adpss_patched__=!0,i(o.Document.prototype),i(o.ShadowRoot.prototype);const{replace:u,replaceSync:c}=o.CSSStyleSheet.prototype;o.CSSStyleSheet.prototype.replace=function(l){return u.call(this,l).then(a=>{const d=e.get(this);return d&&t.send(ys(d,l,t.getBaseHref())),a})},o.CSSStyleSheet.prototype.replaceSync=function(l){const a=e.get(this);return a&&t.send(ys(a,l,t.getBaseHref())),c.call(this,l)}};r(window),t.observer.attachContextCallback(t.safe(r)),t.attachStopCallback(()=>{e.clear(),n.clear()}),t.attachStartCallback(()=>{s(document)}),t.nodes.attachNodeCallback(o=>{ii(o)&&s(o)})}function Jo(t){if(t===null)return;if(!window.CSSStyleSheet){t.send(pr("no_stylesheet_prototype_in_window",""));return}const e=t.safe((i,r,o)=>{const u=It.get(i);u&&(typeof o=="string"?t.send(Vt(u,o,r,t.getBaseHref())):t.send(ws(u,r)))}),n=t.safe(i=>{let r=i;for(;r.parentRule;)r=r.parentRule;const o=r.parentStyleSheet;if(!o){t.debug.warn("No parent StyleSheet found for",r,i);return}const u=It.get(o);if(!u){t.debug.warn("No sheedID found for",o,It);return}const c=r.cssText,l=o.cssRules,a=Array.from(l).indexOf(r);a>=0?(t.send(Vt(u,c,a,t.getBaseHref())),t.send(ws(u,a+1))):t.debug.warn("Rule index not found in",o,r)}),s=t.safe(i=>{const{insertRule:r,deleteRule:o}=i.CSSStyleSheet.prototype,{insertRule:u,deleteRule:c}=i.CSSGroupingRule.prototype;i.CSSStyleSheet.prototype.insertRule=function(l,a=0){return e(this,a,l),r.call(this,l,a)},i.CSSStyleSheet.prototype.deleteRule=function(l){return e(this,l),o.call(this,l)},i.CSSGroupingRule.prototype.insertRule=function(l,a=0){const d=u.call(this,l,a);return n(this),d},i.CSSGroupingRule.prototype.deleteRule=function(l=0){const a=c.call(this,l);return n(this),a}});s(window),t.observer.attachContextCallback(s),t.nodes.attachNodeCallback(i=>{if(!Q(i,"style")||!i.sheet||i.textContent!==null&&i.textContent.trim().length>0)return;const r=t.nodes.getID(i);if(!r)return;const o=i.sheet,u=ri();It.set(o,u),t.send(Ss(u,r));const c=o.cssRules;for(let l=0;l<c.length;l++)e(o,l,c[l].cssText)})}function Xo(t){function e(s){const i=t.nodes.getID(s);i!==void 0&&t.send(bs(i))}let n=!1;t.nodes.attachNodeCallback(s=>{Q(s,"body")&&(t.nodes.attachNodeListener(s,"focus",i=>{As(i.target)&&(e(i.target),n=!1)}),t.nodes.attachNodeListener(s,"blur",i=>{i.relatedTarget===null&&(n=!0,setTimeout(()=>{n&&t.send(bs(-1))},0))}))}),t.attachStartCallback(()=>{let s=document.activeElement;for(;s&&Q(s,"iframe")&&s.contentDocument;)s=s.contentDocument.activeElement;s&&s!==s.ownerDocument.body&&e(s)},!0)}function Yo(t){if(!window.FontFace)return;const e=new Map,n=s=>{class i extends s.FontFace{constructor(...o){if(typeof o[1]=="string"){let u="";o[2]&&t.safe(()=>{u=JSON.stringify(o[2])});const c=[o[0],o[1],u],l=e.get(s.document)||[];l.push(c),e.set(s.document,l);const a=s===window?0:t.nodes.getID(s.document);if(a===void 0)return;t.active()&&t.send(vs(a,...c))}super(...o)}}s.FontFace=i};t.observer.attachContextCallback(n),n(window),t.nodes.attachNodeCallback(t.safe(s=>{if(!bt(s))return;const i=e.get(s);if(!i)return;const r=s.defaultView===window?0:t.nodes.getID(s);r!==void 0&&i.forEach(o=>{t.send(vs(r,...o))})}))}function Qo(t,e,n,s,i){t.debug.log("Openreplay: attaching axios spy to instance",e);function r(p){t.debug.log("Openreplay: capturing axios response data",p);const{headers:v,data:w,method:y,url:x,baseURL:C}=p.config,{data:F,headers:R,status:E,response:N}=p,{data:D,headers:L,status:I}=N||{},T=n.ignoreHeaders,P=Array.isArray(T)?$=>T.includes($):()=>T;function H($,b){P(b[0])||($[b[0]]=b[1])}let j={},z={};v.toJSON?j=v.toJSON():v instanceof Headers?v.forEach(($,b)=>H(j,[b,$])):Array.isArray(v)?v.forEach($=>H(j,$)):typeof v=="object"&&Object.entries(v).forEach($=>H(j,$));const _=L||R;_.toJSON?z=_.toJSON():_ instanceof Headers?_.forEach(($,b)=>H(z,[b,$])):Array.isArray(_)?_.forEach($=>H(z,$)):typeof _=="object"&&Object.entries(_).forEach(([$,b])=>{P($)||(z[$]=b)});const M=s({url:x,method:y||"",status:E||I||0,request:{headers:j,body:w},response:{headers:z,body:D||F}});if(!M){t.debug.log("Openreplay: empty request/response info, skipping");return}const V=p.config.__openreplay_timing,G=performance.now()-V;t.debug.log("Openreplay: final req object",M),t.send(pt("xhr",String(y),String(M.url),i(M.request),i(M.response),M.status,V+ze(),G,0))}function o(p){if(t.debug.log("Openreplay: capturing API request",p),p.__openreplay_timing=performance.now(),n.sessionTokenHeader){const v=typeof n.sessionTokenHeader=="string"?n.sessionTokenHeader:"X-OpenReplay-Session-Token",w=t.getSessionToken();w&&p.headers.set(v,w)}return p}function u(p){return n.failuresOnly||r(p),p}function c(p){return t.debug.log("Openreplay: capturing API request error",p),Zo(p)&&p.response?r(p.response):p instanceof Error&&t.send(St(p,[])),Promise.reject(p)}function l(p){t.debug.log("Openreplay: failed API request, skipping",p)}const a=e.interceptors.request.use(o,l,{synchronous:!0}),d=e.interceptors.response.use(u,c,{synchronous:!0});t.attachStopCallback(()=>{var p,v,w,y;(v=(p=e.interceptors.request).eject)==null||v.call(p,a),(y=(w=e.interceptors.response).eject)==null||y.call(w,d)})}function Zo(t){return ea(t)&&t.isAxiosError===!0}function ea(t){return t!==null&&typeof t=="object"}var ye;(function(t){t[t.UNSENT=0]="UNSENT",t[t.OPENED=1]="OPENED",t[t.HEADERS_RECEIVED=2]="HEADERS_RECEIVED",t[t.LOADING=3]="LOADING",t[t.DONE=4]="DONE"})(ye||(ye={}));class pn{constructor(e=[],n,s){this.ignoredHeaders=e,this.setSessionTokenHeader=n,this.sanitize=s,this.id="",this.name="",this.method="",this.url="",this.status=0,this.statusText="",this.cancelState=0,this.readyState=0,this.header={},this.responseType="",this.requestHeader={},this.responseSize=0,this.responseSizeText="",this.startTime=0,this.endTime=0,this.duration=0,this.getData={},this.requestData=null}getMessage(){const{reqHs:e,resHs:n}=this.writeHeaders(),s={headers:e,body:this.method==="GET"?JSON.stringify(this.getData):this.requestData},i={headers:n,body:this.response},r=this.sanitize({url:this.url,method:this.method,status:this.status,request:s,response:i});if(r)return pt(this.requestType,r.method,r.url,JSON.stringify(r.request),JSON.stringify(r.response),r.status,this.startTime+ze(),this.duration,this.responseSize)}writeHeaders(){const e={};Object.entries(this.requestHeader).forEach(([s,i])=>{this.isHeaderIgnored(s)||(e[s]=i)}),this.setSessionTokenHeader((s,i)=>{e[s]=i});const n={};return Object.entries(this.header).forEach(([s,i])=>{this.isHeaderIgnored(s)||(n[s]=i)}),{reqHs:e,resHs:n}}isHeaderIgnored(e){return Array.isArray(this.ignoredHeaders)?this.ignoredHeaders.map(n=>n.toLowerCase()).includes(e.toLowerCase()):this.ignoredHeaders}}const Qe=(t,e)=>{let n="";switch(t){case"":case"text":case"json":typeof e=="string"?n=e:mn(e)||Array.isArray(e)?n=JSON.stringify(e):typeof e<"u"&&(n=Object.prototype.toString.call(e));break;case"blob":case"document":case"arraybuffer":default:typeof e<"u"&&(n=Object.prototype.toString.call(e));break}return n},gn=t=>{if(!t)return null;let e;if(typeof t=="string"){(t[0]==="{"||t[0]==="[")&&(e=t);const n=t.split("&");n.length===1?e=t:e=n.join(",")}else if(na(t)){const n=[];for(const[s,i]of t)n.push(`${s}=${typeof i=="string"?i:"[object Object]"}`);e=n.join(",")}else t instanceof Blob||t instanceof ReadableStream||t instanceof ArrayBuffer?e="byte data":mn(t)?e=t:e=`can't parse body ${typeof t}`;return e},ta=(t,e={})=>{mn(e)||(e={});let n=t?t.split("?"):[];if(n.shift(),n.length>0){n=n.join("?").split("&");for(const s of n){const i=s.split("=");try{e[i[0]]=decodeURIComponent(i[1])}catch{e[i[0]]=i[1]}}}return e};function mn(t){return t!==null&&typeof t=="object"}function na(t){return t==null||ArrayBuffer.isView(t)?!1:typeof Symbol<"u"&&typeof t[Symbol.iterator]=="function"}function Ct(t){return t<=0?"":t>=1e3*1e3?(t/1e3/1e3).toFixed(1)+" MB":t>=1e3?(t/1e3).toFixed(1)+" KB":`${t}B`}const vn=t=>(t.startsWith("//")&&(t=`${new URL(window.location.href).protocol}${t}`),t.startsWith("http")?new URL(t):new URL(t,window.location.href));class sa{constructor(e,n){this.resp=e,this.item=n,this.mockReader()}set(e,n,s){return Reflect.set(e,n,s)}get(e,n){const s=Reflect.get(e,n);switch(n){case"arrayBuffer":case"blob":case"formData":case"json":case"text":return()=>(this.item.responseType=n.toLowerCase(),s.apply(e).then(i=>(this.item.response=Qe(this.item.responseType,i),i)))}return typeof s=="function"?s.bind(e):s}mockReader(){let e;if(!this.resp.body||typeof this.resp.body.getReader!="function")return;const n=this.resp.body.getReader;this.resp.body.getReader=()=>{const s=n.apply(this.resp.body);if(this.item.readyState===ye.DONE)return s;const i=s.read,r=s.cancel;return this.item.responseType="arraybuffer",s.read=()=>i.apply(s).then(o=>{if(!e)e=new Uint8Array(o.value);else{const u=new Uint8Array(e.length+o.value.length);u.set(e),u.set(o.value,e.length),e=u}return this.item.endTime=performance.now(),this.item.duration=this.item.endTime-(this.item.startTime||this.item.endTime),this.item.readyState=o.done?4:3,this.item.statusText=o.done?String(this.item.status):"Loading",this.item.responseSize=e.length,this.item.responseSizeText=Ct(this.item.responseSize),o.done&&(this.item.response=Qe(this.item.responseType,e)),o}),s.cancel=(...o)=>(this.item.cancelState=2,this.item.statusText="Cancel",this.item.endTime=performance.now(),this.item.duration=this.item.endTime-(this.item.startTime||this.item.endTime),this.item.response=Qe(this.item.responseType,e),r.apply(s,o)),s}}}class ia{constructor(e,n,s,i,r,o){this.ignoredHeaders=e,this.setSessionTokenHeader=n,this.sanitize=s,this.sendMessage=i,this.isServiceUrl=r,this.tokenUrlMatcher=o}apply(e,n,s){const i=s[0],r=s[1];if(!i||typeof i!="string"&&!(i!=null&&i.url)||(i instanceof URL||typeof i=="string"?this.isServiceUrl(String(i)):this.isServiceUrl(String(i.url))))return e.apply(window,s);const u=new pn(this.ignoredHeaders,this.setSessionTokenHeader,this.sanitize);return this.beforeFetch(u,i,r),this.setSessionTokenHeader((c,l)=>{if(!(this.tokenUrlMatcher!==void 0&&!this.tokenUrlMatcher(u.url))){if(s[1]===void 0&&s[0]instanceof Request)return s[0].headers.append(c,l);s[1]||(s[1]={}),s[1].headers===void 0&&(s[1]={...s[1],headers:{}}),s[1].headers instanceof Headers?s[1].headers.append(c,l):Array.isArray(s[1].headers)?s[1].headers.push([c,l]):s[1].headers[c]=l}}),e.apply(window,s).then(this.afterFetch(u)).catch(c=>{throw u.endTime=performance.now(),u.duration=u.endTime-(u.startTime||u.endTime),c})}beforeFetch(e,n,s){let i,r="GET",o={};if(typeof n=="string"?(r=(s==null?void 0:s.method)||"GET",i=vn(n),o=(s==null?void 0:s.headers)||{}):(r=n.method||"GET",i=vn(n.url),o=n.headers),e.method=r,e.requestType="fetch",e.requestHeader=o,e.url=i.toString(),e.name=(i.pathname.split("/").pop()||"")+i.search,e.status=0,e.statusText="Pending",e.readyState=1,e.startTime||(e.startTime=performance.now()),Object.prototype.toString.call(o)==="[object Headers]"){e.requestHeader={};for(const[u,c]of o)e.requestHeader[u]=c}else e.requestHeader=o;if(i.search&&i.searchParams){e.getData={};for(const[u,c]of i.searchParams)e.getData[u]=c}s!=null&&s.body&&(e.requestData=gn(s.body))}afterFetch(e){return n=>{e.endTime=performance.now(),e.duration=e.endTime-(e.startTime||e.endTime),e.status=n.status,e.statusText=String(n.status);let s=!1;e.header={};for(const[i,r]of n.headers)e.header[i]=r,s=r.toLowerCase().indexOf("chunked")>-1?!0:s;return s?e.readyState=3:(e.readyState=4,this.handleResponseBody(n.clone(),e).then(i=>{e.responseSize=typeof i=="string"?i.length:i.byteLength,e.responseSizeText=Ct(e.responseSize),e.response=Qe(e.responseType,i);const r=e.getMessage();r&&this.sendMessage(r)}).catch(i=>{if(i.name!=="AbortError")throw i})),new Proxy(n,new sa(n,e))}}handleResponseBody(e,n){const s=e.headers.get("content-type");return s&&s.includes("application/json")?(n.responseType="json",e.text()):s&&(s.includes("text/html")||s.includes("text/plain"))?(n.responseType="text",e.text()):(n.responseType="arraybuffer",e.arrayBuffer())}}class ra{static create(e,n,s,i,r,o){return new Proxy(fetch,new ia(e,n,s,i,r,o))}}class oa{constructor(e,n,s,i,r,o,u){this.ignoredHeaders=n,this.setSessionTokenHeader=s,this.sanitize=i,this.sendMessage=r,this.isServiceUrl=o,this.tokenUrlMatcher=u,this.XMLReq=e,this.XMLReq.onreadystatechange=()=>{this.onReadyStateChange()},this.XMLReq.onabort=()=>{this.onAbort()},this.XMLReq.ontimeout=()=>{this.onTimeout()},this.item=new pn(n,s,i),this.item.requestType="xhr"}get(e,n){switch(n){case"open":return this.getOpen(e);case"send":return this.setSessionTokenHeader((i,r)=>{this.tokenUrlMatcher!==void 0&&!this.tokenUrlMatcher(this.item.url)||e.setRequestHeader(i,r)}),this.getSend(e);case"setRequestHeader":return this.getSetRequestHeader(e);default:const s=Reflect.get(e,n);return typeof s=="function"?s.bind(e):s}}set(e,n,s){switch(n){case"onreadystatechange":return this.setOnReadyStateChange(e,n,s);case"onabort":return this.setOnAbort(e,n,s);case"ontimeout":return this.setOnTimeout(e,n,s)}return Reflect.set(e,n,s)}onReadyStateChange(){if(!(this.item.url&&this.isServiceUrl(this.item.url))&&(this.item.readyState=this.XMLReq.readyState,this.item.responseType=this.XMLReq.responseType,this.item.endTime=performance.now(),this.item.duration=this.item.endTime-this.item.startTime,this.updateItemByReadyState(),setTimeout(()=>{this.item.response=Qe(this.item.responseType,this.item.response)},0),this.XMLReq.readyState===ye.DONE)){const e=this.item.getMessage();e&&this.sendMessage(e)}}onAbort(){this.item.cancelState=1,this.item.statusText="Abort";const e=this.item.getMessage();e&&this.sendMessage(e)}onTimeout(){this.item.cancelState=3,this.item.statusText="Timeout";const e=this.item.getMessage();e&&this.sendMessage(e)}getOpen(e){const n=Reflect.get(e,"open");return(...s)=>{var o,u;const i=s[0],r=s[1];return this.item.method=i?i.toUpperCase():"GET",this.item.url=((o=r.toString)==null?void 0:o.call(r))||"",this.item.name=((u=this.item.url)==null?void 0:u.replace(new RegExp("/*$"),"").split("/").pop())??"",this.item.getData=ta(this.item.url,{}),n.apply(e,s)}}getSend(e){const n=Reflect.get(e,"send");return(...s)=>{const i=s[0];return this.item.requestData=gn(i),n.apply(e,s)}}getSetRequestHeader(e){const n=Reflect.get(e,"setRequestHeader");return(...s)=>(this.item.requestHeader||(this.item.requestHeader={}),this.item.requestHeader[s[0]]=s[1],n.apply(e,s))}setOnReadyStateChange(e,n,s){return Reflect.set(e,n,(...i)=>{this.onReadyStateChange(),s==null||s.apply(e,i)})}setOnAbort(e,n,s){return Reflect.set(e,n,(...i)=>{this.onAbort(),s.apply(e,i)})}setOnTimeout(e,n,s){return Reflect.set(e,n,(...i)=>{this.onTimeout(),s.apply(e,i)})}updateItemByReadyState(){switch(this.XMLReq.readyState){case ye.UNSENT:case ye.OPENED:this.item.status=ye.UNSENT,this.item.statusText="Pending",this.item.startTime||(this.item.startTime=performance.now());break;case ye.HEADERS_RECEIVED:this.item.status=this.XMLReq.status,this.item.statusText="Loading",this.item.header={};const e=this.XMLReq.getAllResponseHeaders()||"",n=e.split(`
|
|
20
|
-
`);for(let s=0;s<n.length;s++){const i=n[s];if(!i)continue;const r=i.split(": "),o=r[0];this.item.header[o]=r.slice(1).join(": ")}break;case ye.LOADING:this.item.status=this.XMLReq.status,this.item.statusText="Loading",this.XMLReq.response&&this.XMLReq.response.length&&(this.item.responseSize=this.XMLReq.response.length,this.item.responseSizeText=Ct(this.item.responseSize));break;case ye.DONE:this.item.status=this.XMLReq.status||this.item.status||0,this.item.statusText=String(this.item.status),this.item.endTime=performance.now(),this.item.duration=this.item.endTime-(this.item.startTime||this.item.endTime),this.item.response=this.XMLReq.response,this.XMLReq.response&&this.XMLReq.response.length&&(this.item.responseSize=this.XMLReq.response.length,this.item.responseSizeText=Ct(this.item.responseSize));break;default:this.item.status=this.XMLReq.status,this.item.statusText="Unknown";break}}}class aa{static create(e,n,s,i,r,o){return new Proxy(XMLHttpRequest,{construct(u){const c=new u;return new Proxy(c,new oa(c,e,n,s,i,r,o))}})}}const ca=t=>t instanceof Blob?t.type:t instanceof FormData?"multipart/form-data":t instanceof URLSearchParams?"application/x-www-form-urlencoded;charset=UTF-8":"text/plain;charset=UTF-8";class la{constructor(e,n,s,i,r){this.ignoredHeaders=e,this.setSessionTokenHeader=n,this.sanitize=s,this.sendMessage=i,this.isServiceUrl=r}apply(e,n,s){const i=s[0],r=s[1],o=new pn(this.ignoredHeaders,this.setSessionTokenHeader,this.sanitize);if(this.isServiceUrl(i))return e.apply(n,s);const u=vn(i);if(o.method="POST",o.url=i,o.name=(u.pathname.split("/").pop()||"")+u.search,o.requestType="beacon",o.requestHeader={"Content-Type":ca(r)},o.status=0,o.statusText="Pending",u.search&&u.searchParams){o.getData={};for(const[a,d]of u.searchParams)o.getData[a]=d}o.requestData=gn(r),o.startTime||(o.startTime=performance.now());const c=e.apply(n,s);c?(o.endTime=performance.now(),o.duration=o.endTime-(o.startTime||o.endTime),o.status=0,o.statusText="Sent",o.readyState=4):(o.status=500,o.statusText="Unknown");const l=o.getMessage();return l&&this.sendMessage(l),c}}class We{static hasSendBeacon(){return!!We.origSendBeacon}static create(e,n,s,i,r){if(We.hasSendBeacon())return new Proxy(We.origSendBeacon,new la(e,n,s,i,r))}}We.origSendBeacon=(ui=window==null?void 0:window.navigator)==null?void 0:ui.sendBeacon;const oi=t=>console.warn(`Openreplay: Can't find ${t} in global context.
|
|
21
|
-
If you're using serverside rendering in your app, make sure that tracker is loaded dynamically, otherwise ${t} won't be tracked.`);function ua(t,e,n,s,i,r,o){var u;t.XMLHttpRequest?t.XMLHttpRequest=aa.create(e,n,s,i,r,o):oi("XMLHttpRequest"),t.fetch?t.fetch=ra.create(e,n,s,i,r,o):oi("fetch"),(u=t==null?void 0:t.navigator)!=null&&u.sendBeacon&&(t.navigator.sendBeacon=We.create(e,n,s,i,r))}function bn(t){return t.__or_req_data__||(t.__or_req_data__={body:void 0,headers:{}}),t.__or_req_data__}function ai(t){return typeof t=="string"?t.toUpperCase():"GET"}function ha(t,e={}){const n=Object.assign({failuresOnly:!1,ignoreHeaders:["cookie","set-cookie","authorization"],capturePayload:!1,sessionTokenHeader:!1,captureInIframes:!0,axiosInstances:void 0,useProxy:!0},e);n.useProxy===!1&&t.debug.warn("Network module is migrating to proxy api, to gradually migrate and test it set useProxy to true");const s=n.ignoreHeaders,i=Array.isArray(s)?a=>s.includes(a):()=>s,r=n.sessionTokenHeader===!0?"X-OpenReplay-SessionToken":n.sessionTokenHeader;function o(a){if(r){const d=t.getSessionToken();d&&t.safe(a)(r,d)}}function u(a){if(n.capturePayload||(delete a.request.body,delete a.response.body),n.sanitizer){const d=a.response.body;if(typeof d=="string")try{a.response.body=JSON.parse(d)}catch{}return n.sanitizer(a)}return a}function c(a){if(a&&typeof a.body!="string")try{a.body=JSON.stringify(a.body)}catch{a.body="<unable to stringify>",t.notify.warn("Openreplay fetch couldn't stringify body:",a.body)}return JSON.stringify(a)}const l=a=>{if(n.useProxy)return ua(a,n.ignoreHeaders,o,u,R=>t.send(R),R=>t.isServiceURL(R),n.tokenUrlMatcher);const d=a.fetch.bind(a),p=(R,E={})=>{if(!(typeof R=="string"||R instanceof URL)||t.isServiceURL(String(R)))return d(R,E);o(function(D,L){E.headers===void 0&&(E.headers={}),E.headers instanceof Headers?E.headers.append(D,L):Array.isArray(E.headers)?E.headers.push([D,L]):E.headers[D]=L});const N=performance.now();return d(R,E).then(D=>{const L=performance.now()-N;if(n.failuresOnly&&D.status<400)return D;const I=D.clone();return I.text().then(T=>{const P={},H={};if(s!==!0){const _=([M,V])=>{i(M)||(P[M]=V)};E.headers instanceof Headers?E.headers.forEach((M,V)=>_([V,M])):Array.isArray(E.headers)?E.headers.forEach(_):typeof E.headers=="object"&&Object.entries(E.headers).forEach(_),I.headers.forEach((M,V)=>{i(V)||(H[V]=M)})}const j=ai(E.method),z=u({url:String(R),method:j,status:I.status,request:{headers:P,body:E.body||null},response:{headers:H,body:T}});z&&t.send(pt("fetch",j,String(z.url),c(z.request),c(z.response),I.status,N+ze(),L,0))}).catch(T=>t.debug.error("Could not process Fetch response:",T)),D})};a.fetch=p;const v=a.XMLHttpRequest.prototype.open,w=a.XMLHttpRequest.prototype.setRequestHeader,y=a.XMLHttpRequest.prototype.send;function x(R,E){const N=this;o((L,I)=>N.setRequestHeader(L,I));let D=0;return N.addEventListener("loadstart",L=>{D=L.timeStamp}),N.addEventListener("load",t.safe(L=>{const{headers:I,body:T}=bn(N),P=D>0?L.timeStamp-D:0,j=(N.getAllResponseHeaders()||"").trim().split(/[\r\n]+/),z={};j.forEach(function(V){const G=V.split(": "),$=G.shift();i($)||(z[$]=G.join(": "))});const _=ai(R),M=u({url:String(E),method:_,status:N.status,request:{headers:I,body:T||null},response:{headers:z,body:N.response}});M&&t.send(pt("xhr",_,String(M.url),c(M.request),c(M.response),N.status,D+ze(),P,0))})),v.apply(this,arguments)}function C(R){const E=bn(this);return E.body=R,y.apply(this,arguments)}function F(R,E){if(!i(R)){const N=bn(this);N.headers[R]=E}return w.apply(this,arguments)}n.axiosInstances||(a.XMLHttpRequest.prototype.open=x,a.XMLHttpRequest.prototype.send=C,a.XMLHttpRequest.prototype.setRequestHeader=F)};l(window),n.axiosInstances&&n.axiosInstances.forEach(a=>{Qo(t,a,n,u,c)}),n.captureInIframes&&t.observer.attachContextCallback(t.safe(l))}function da(t){t.attachEventListener(document,"selectionchange",()=>{const e=document.getSelection();if(e!==null&&!e.isCollapsed){const n=t.nodes.getID(e.anchorNode),s=t.nodes.getID(e.focusNode),i=e.toString().replace(/\s+/g," ");n&&s&&t.send(xs(n,s,i))}else t.send(xs(-1,-1,""))})}function fa(t){function e(){document.hidden||(t.debug.log("Openreplay: tab change to"+t.session.getTabId()),t.send(gt(t.session.getTabId())))}t.attachEventListener(window,"focus",e,!1,!1)}const _t="/installation/javascript-sdk";function pa(t){if(t==null)return console.error(`OpenReplay: invalid options argument type. Please, check documentation on ${ft}${_t}`),!1;if(typeof t.projectKey!="string")if(typeof t.projectKey!="number"){if(typeof t.projectID!="number")return console.error(`OpenReplay: projectKey is missing or wrong type (string is expected). Please, check ${ft}${_t} for more information.`),!1;t.projectKey=t.projectID.toString(),Ce("`projectID` option","`projectKey` option",_t)}else console.warn("OpenReplay: projectKey is expected to have a string type."),t.projectKey=t.projectKey.toString();return t.sessionToken!=null&&Ce("`sessionToken` option","`sessionHash` start() option","/"),!0}class ga{constructor(e){var u;if(this.options=e,this.app=null,this.crossdomainMode=!1,this.checkDoNotTrack=()=>this.options.respectDoNotTrack&&(navigator.doNotTrack=="1"||window.doNotTrack=="1"),this.signalStartIssue=(c,l)=>{const a=this.checkDoNotTrack(),d=new XMLHttpRequest,p=this.options.ingestPoint||Bs;d.open("POST",p+"/v1/web/not-started"),d.send(JSON.stringify({trackerVersion:"14.0.4",projectKey:this.options.projectKey,doNotTrack:a,reason:l.length?`missing api: ${l.join(",")}`:c}))},this.restartCanvasTracking=()=>{this.app!==null&&this.app.restartCanvasTracking()},this.handleError=(c,l={})=>{if(this.app!==null){if(c instanceof Error){const a=St(c,[],l);this.app.send(a)}else if(c instanceof ErrorEvent||"PromiseRejectionEvent"in window&&c instanceof PromiseRejectionEvent){const a=qs(c,void 0,l);a!=null&&this.app.send(a)}}},this.crossdomainMode=!!(Hi()&&((u=e.crossdomain)!=null&&u.enabled)),!ve||!pa(e))return;if(window.__OPENREPLAY__){console.error("OpenReplay: one tracker instance has been initialised already");return}if(!e.__DISABLE_SECURE_MODE&&location.protocol!=="https:"){console.error("OpenReplay: Your website must be publicly accessible and running on SSL in order for OpenReplay to properly capture and replay the user session. You can disable this check by setting `__DISABLE_SECURE_MODE` option to `true` if you are testing in localhost. Keep in mind, that asset files on a local machine are not available to the outside world. This might affect tracking if you use css files.");return}const n=this.checkDoNotTrack(),s=[],i=["Map","Set","MutationObserver","performance","timing","startsWith","Blob","Worker"];if(n)s.push("doNotTrack");else for(const c of i)if(c==="timing"){if("performance"in window&&!(c in performance)){s.push(c);break}}else if(c==="startsWith"){if(!(c in String.prototype)){s.push(c);break}}else if(!(c in window)){s.push(c);break}if(s.length>0){const c=s.join(",");console.error(`OpenReplay: browser doesn't support API required for tracking or doNotTrack is set to 1. Reason: ${c}`),this.signalStartIssue("missing_api",s);return}const r=new ho(e.projectKey,e.sessionToken,e,this.signalStartIssue,this.crossdomainMode);this.app=r,this.crossdomainMode||(Vo(r),fo(r),Tr(r,e),fa(r)),Uo(r,e.mouse),qo(r,this.crossdomainMode),Jo(r),Ko(r),vo(r,e),So(r,e),Eo(r),No(r,e),Wo(r,e),Xo(r),Yo(r),ha(r,e.network),da(r),window.__OPENREPLAY__=this,e.flags&&e.flags.onFlagsLoad&&this.onFlagsLoad(e.flags.onFlagsLoad);const o=window.open;(e.autoResetOnWindowOpen||e.resetTabOnWindowOpen)&&(r.attachStartCallback(()=>{const c=r.getTabId(),l=r.sessionStorage??window.sessionStorage;window.open=function(...a){return e.autoResetOnWindowOpen&&r.resetNextPageSession(!0),e.resetTabOnWindowOpen&&l.removeItem(e.session_tabid_key||"__openreplay_tabid"),r.resetNextPageSession(!1),l.setItem(e.session_tabid_key||"__openreplay_tabid",c),o.call(window,...a)}}),r.attachStopCallback(()=>{window.open=o}))}isFlagEnabled(e){return this.featureFlags.isFlagEnabled(e)}onFlagsLoad(e){var n;(n=this.app)==null||n.featureFlags.onFlagsLoad(e)}clearPersistFlags(){var e;(e=this.app)==null||e.featureFlags.clearPersistFlags()}reloadFlags(){var e;return(e=this.app)==null?void 0:e.featureFlags.reloadFlags()}getFeatureFlag(e){var n;return(n=this.app)==null?void 0:n.featureFlags.getFeatureFlag(e)}getAllFeatureFlags(){var e;return(e=this.app)==null?void 0:e.featureFlags.flags}use(e){return e(this.app,this.options)}isActive(){return this.app===null?!1:this.app.active()}trackWs(e){if(this.app!==null)return this.app.trackWs(e)}start(e){return this.browserEnvCheck()?this.app===null?Promise.reject("Browser doesn't support required api, or doNotTrack is active."):this.app.start(e):Promise.reject("Trying to start not in browser.")}browserEnvCheck(){return ve?!0:(console.error(`OpenReplay: you are trying to start Tracker on a node.js environment. If you want to use OpenReplay with SSR, please, use componentDidMount or useEffect API for placing the \`tracker.start()\` line. Check documentation on ${ft}${_t}`),!1)}coldStart(e,n){if(this.browserEnvCheck()){if(this.app===null)return Promise.reject("Tracker not initialized");this.app.coldStart(e,n)}else return Promise.reject("Trying to start not in browser.")}startOfflineRecording(e,n){return this.browserEnvCheck()?this.app===null?Promise.reject("Tracker not initialized"):this.app.offlineRecording(e,n):Promise.reject("Trying to start not in browser.")}uploadOfflineRecording(){if(this.app!==null)return this.app.uploadOfflineRecording()}stop(){if(this.app!==null)return this.app.stop(),this.app.session.getSessionHash()}forceFlushBatch(){this.app!==null&&this.app.forceFlushBatch()}getSessionToken(){return this.app===null?null:this.app.getSessionToken()}getSessionInfo(){return this.app===null?null:this.app.session.getInfo()}getSessionID(){return this.app===null?null:this.app.getSessionID()}getTabId(){return this.app===null?null:this.app.getTabId()}getUxId(){return this.app===null?null:this.app.getUxtId()}sessionID(){return Ce("'sessionID' method","'getSessionID' method","/"),this.getSessionID()}getSessionURL(e){if(this.app!==null)return this.app.getSessionURL(e)}setUserID(e){typeof e=="string"&&this.app!==null&&this.app.session.setUserID(e)}userID(e){Ce("'userID' method","'setUserID' method","/"),this.setUserID(e)}setUserAnonymousID(e){typeof e=="string"&&this.app!==null&&this.app.send(lr(e))}userAnonymousID(e){Ce("'userAnonymousID' method","'setUserAnonymousID' method","/"),this.setUserAnonymousID(e)}setMetadata(e,n){typeof e=="string"&&typeof n=="string"&&this.app!==null&&this.app.session.setMetadata(e,n)}metadata(e,n){Ce("'metadata' method","'setMetadata' method","/"),this.setMetadata(e,n)}event(e,n=null,s=!1){if(typeof e=="string"&&this.app!==null){if(s)return this.issue(e,n);try{n=JSON.stringify(n)}catch{return}this.app.send(ar(e,n))}}issue(e,n=null){if(typeof e=="string"&&this.app!==null){try{n=JSON.stringify(n)}catch{return}this.app.send(gr(e,n))}}}const ma=`
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
display: flex;
|
|
46
|
-
gap: 24px;
|
|
47
|
-
font-family: 'Bricolage Grotesque', sans-serif;
|
|
48
|
-
padding: 12px 12px 0px;
|
|
49
|
-
border-radius: 16px;
|
|
50
|
-
background-color: #fff;
|
|
51
|
-
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
|
|
52
|
-
max-width: 1024px;
|
|
53
|
-
min-width: 1024px;
|
|
54
|
-
min-height: 500px;
|
|
55
|
-
margin: 40px auto;
|
|
56
|
-
position: relative;
|
|
57
|
-
box-sizing: border-box;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
#wine-widget-container [class^=icon-], [class*=" icon-"] {
|
|
61
|
-
font-family: 'Bricolage Grotesque', sans-serif !important;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
#wine-widget-container .wine-widget-wrapper {
|
|
65
|
-
width: 100%;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
#wine-widget-container #wine-widget-right {
|
|
69
|
-
position: relative;
|
|
70
|
-
min-height: 300px;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/* Placeholder для вин (две колонки) */
|
|
74
|
-
#wine-placeholder {
|
|
75
|
-
display: grid;
|
|
76
|
-
grid-template-columns: repeat(4, 1fr);
|
|
77
|
-
/* 4 колонки равной ширины */
|
|
78
|
-
|
|
79
|
-
gap: 0; /* если собираетесь делать собственные границы вместо отступов */
|
|
80
|
-
/* или gap: 24px, если нужны просто промежутки между карточками без линий. */
|
|
81
|
-
|
|
82
|
-
/* Дополнительные стили можно оставить/удалить по вкусу: */
|
|
83
|
-
align-items: stretch;
|
|
84
|
-
justify-content: ;
|
|
85
|
-
margin-bottom: 0; /* уберём промежуток, если вы хотите нарисовать свою линию */
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
#wine-placeholder:hover {
|
|
89
|
-
// cursor: url('https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//cursor.svg'), pointer;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/* ===================== 4) Шапка (заголовок, подзаголовок) ===================== */
|
|
93
|
-
#wine-widget-header h1 {
|
|
94
|
-
font-family: "Bricolage Grotesque", serif;
|
|
95
|
-
font-weight: 600;
|
|
96
|
-
font-size: 24px;
|
|
97
|
-
margin: 0 auto;
|
|
98
|
-
line-height: 1.3;
|
|
99
|
-
color: #333;
|
|
100
|
-
text-align: center;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
#wine-widget-header p {
|
|
104
|
-
font-size: 16px;
|
|
105
|
-
color: #666;
|
|
106
|
-
margin-top: 8px;
|
|
107
|
-
text-align: center;
|
|
108
|
-
padding: 0 15%;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/* ===================== 5) Иконки и цветные подписи (meal, mood...) ===================== */
|
|
112
|
-
#wine-widget-container .icon {
|
|
113
|
-
display: inline-block;
|
|
114
|
-
width: 1.2em;
|
|
115
|
-
height: 1.2em;
|
|
116
|
-
vertical-align: middle;
|
|
117
|
-
margin: 0 4px 0 2px;
|
|
118
|
-
background-repeat: no-repeat;
|
|
119
|
-
background-size: contain;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
#wine-widget-container .icon-meal {
|
|
123
|
-
background-image: url('https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//meal1.svg');
|
|
124
|
-
}
|
|
125
|
-
#wine-widget-container .icon-meal:hover {
|
|
126
|
-
background-image: url('https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//meal3.svg');
|
|
127
|
-
}
|
|
128
|
-
#wine-widget-container .icon-mood {
|
|
129
|
-
background-image: url('https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//mood.svg');
|
|
130
|
-
}
|
|
131
|
-
#wine-widget-container .icon-budget {
|
|
132
|
-
background-image: url('https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//budget.svg');
|
|
133
|
-
}
|
|
134
|
-
#wine-widget-container .icon-occasion {
|
|
135
|
-
background-image: url('https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//ocasion.svg');
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/* Подпись к иконкам */
|
|
139
|
-
#wine-widget-container .icon-label {
|
|
140
|
-
color: var(--wineater-color);
|
|
141
|
-
font-weight: 500;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/* ===================== 6) Поисковая строка (input + кнопка) ===================== */
|
|
145
|
-
#wine-widget-container #wine-widget-search {
|
|
146
|
-
position: relative;
|
|
147
|
-
margin: 12px auto;
|
|
148
|
-
padding: 0 6px;
|
|
149
|
-
display: flex;
|
|
150
|
-
align-items: center;
|
|
151
|
-
border: 2px solid #D5D9EE;
|
|
152
|
-
border-radius: 10px;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
#wine-widget-container .search-icon {
|
|
156
|
-
left: 12px;
|
|
157
|
-
width: 24px;
|
|
158
|
-
height: 24px;
|
|
159
|
-
flex: 0 0 auto;
|
|
160
|
-
background-image: url('https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//search.svg?x=1');
|
|
161
|
-
background-repeat: no-repeat;
|
|
162
|
-
background-size: contain;
|
|
163
|
-
z-index: 2;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
#wine-widget-container #wine-search-input {
|
|
167
|
-
flex: 1 1 0%;
|
|
168
|
-
min-width: 0;
|
|
169
|
-
padding: 12px; /* место под иконку и кнопку */
|
|
170
|
-
font-size: 16px;
|
|
171
|
-
border: none;
|
|
172
|
-
border-radius: 10px;
|
|
173
|
-
outline: none;
|
|
174
|
-
transition: border 0.2s ease;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
#wine-search-input::placeholder {
|
|
178
|
-
color: var(--wineater-color);
|
|
179
|
-
opacity: 1;
|
|
180
|
-
transition: color 0.3s ease, opacity 0.3s ease-in-out;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
#wine-search-input:focus {
|
|
184
|
-
border-color: var(--wineater-color);
|
|
185
|
-
}
|
|
186
|
-
#wine-search-input:focus::placeholder {
|
|
187
|
-
opacity: 0.5;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/* Кнопка поиска */
|
|
191
|
-
#wine-search-button {
|
|
192
|
-
flex: 0 0 auto;
|
|
193
|
-
background-color: var(--wineater-color);
|
|
194
|
-
color: #fff;
|
|
195
|
-
border: none;
|
|
196
|
-
border-radius: 6px;
|
|
197
|
-
padding: 8px 16px;
|
|
198
|
-
font-size: 16px;
|
|
199
|
-
cursor: pointer;
|
|
200
|
-
transition: opacity 0.2s ease;
|
|
201
|
-
}
|
|
202
|
-
#wine-search-button:hover {
|
|
203
|
-
opacity: 0.8;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/* ===================== 7) Фильтр-группы ===================== */
|
|
207
|
-
#wine-widget-container .filter-group {
|
|
208
|
-
margin-bottom: 16px;
|
|
209
|
-
display: flex;
|
|
210
|
-
flex-direction: column;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
#wine-widget-container .filter-label {
|
|
214
|
-
font-size: 16px;
|
|
215
|
-
font-weight: bold;
|
|
216
|
-
color: #333;
|
|
217
|
-
margin-bottom: 8px;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
#wine-widget-container .filter-buttons {
|
|
221
|
-
display: flex;
|
|
222
|
-
gap: 8px;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
#wine-widget-container .filter-buttons button {
|
|
226
|
-
padding: 10px 16px;
|
|
227
|
-
border: 1px solid #ccc;
|
|
228
|
-
border-radius: 8px;
|
|
229
|
-
background: white;
|
|
230
|
-
cursor: pointer;
|
|
231
|
-
font-size: 14px;
|
|
232
|
-
transition: all 0.2s ease;
|
|
233
|
-
}
|
|
234
|
-
#wine-widget-container .filter-buttons button:hover {
|
|
235
|
-
transform: scale(1.05);
|
|
236
|
-
box-shadow: 0 4px 8px rgba(123, 43, 235, 0.15);
|
|
237
|
-
}
|
|
238
|
-
#wine-widget-container .filter-buttons button.selected {
|
|
239
|
-
background: linear-gradient(90deg, var(--wineater-color), var(--wineater-corp-color));
|
|
240
|
-
color: white;
|
|
241
|
-
border: none;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/* ===================== 8) Карточки рекомендаций (tiles) ===================== */
|
|
245
|
-
#wine-widget-container .wine-recommendation-tile {
|
|
246
|
-
display: flex;
|
|
247
|
-
flex-direction: column;
|
|
248
|
-
align-items: center; /* всё по центру */
|
|
249
|
-
text-align: center;
|
|
250
|
-
box-sizing: border-box;
|
|
251
|
-
padding: 16px 8px;
|
|
252
|
-
border-right: 2px solid #f6f7fd; /* убираем вертикальные линии (border-right) */
|
|
253
|
-
opacity: 0;
|
|
254
|
-
transform: translateY(20px); /* чтобы анимация была заметна */
|
|
255
|
-
transition: opacity 0.3s ease, transform 0.3s ease;
|
|
256
|
-
position: relative;
|
|
257
|
-
}
|
|
258
|
-
#wine-widget-container .wine-recommendation-tile:last-child {
|
|
259
|
-
border-right: none;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
#wine-widget-container .tile-top {
|
|
263
|
-
display: flex;
|
|
264
|
-
flex-direction: column;
|
|
265
|
-
align-items: center;
|
|
266
|
-
justify-content: flex-start;
|
|
267
|
-
/* justify-content: space-between; – не надо, т.к. элементы обычно идут последовательно */
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
/* Картинка */
|
|
272
|
-
#wine-widget-container .wine-image {
|
|
273
|
-
height: 200px;
|
|
274
|
-
object-fit: contain; /* чтобы не обрезалось, если нужно */
|
|
275
|
-
margin: 0 auto 16px; /* отступ снизу */
|
|
276
|
-
display: block;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
.wine-hover-popup {
|
|
280
|
-
display: none;
|
|
281
|
-
position: absolute;
|
|
282
|
-
top: 0;
|
|
283
|
-
left: 0;
|
|
284
|
-
width: 100%;
|
|
285
|
-
padding: 12px;
|
|
286
|
-
background-color: #fff;
|
|
287
|
-
border: 1px solid #ddd;
|
|
288
|
-
border-radius: 8px;
|
|
289
|
-
box-shadow: 0 4px 16px rgba(0,0,0,0.1);
|
|
290
|
-
transition: transform 0.3s ease;
|
|
291
|
-
z-index: 999;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
.wine-hover-popup.slide-in {
|
|
295
|
-
transform: translateY(0);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/* Стили содержимого внутри попапа */
|
|
299
|
-
.popup-reason {
|
|
300
|
-
font-size: 14px;
|
|
301
|
-
font-weight: 400;
|
|
302
|
-
color: #333;
|
|
303
|
-
margin-bottom: 8px;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
.popup-tags {
|
|
307
|
-
display: flex;
|
|
308
|
-
flex-wrap: wrap;
|
|
309
|
-
gap: 8px;
|
|
310
|
-
margin-top: 8px;
|
|
311
|
-
justify-content: center; /* Горизонтальное выравнивание по центру */
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/* Каждый чип */
|
|
315
|
-
.popup-tag {
|
|
316
|
-
display: inline-block;
|
|
317
|
-
padding: 4px 8px;
|
|
318
|
-
border-radius: 12px;
|
|
319
|
-
background-color: #F5F0FF;
|
|
320
|
-
border: 1px solid #ddd;
|
|
321
|
-
font-size: 13px;
|
|
322
|
-
color: #333;
|
|
323
|
-
text-transform: capitalize; /* Делаем каждое слово с заглавной буквы */
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/* Детальный блок */
|
|
327
|
-
#wine-widget-container .tile-details {
|
|
328
|
-
/* Можно дополнительные отступы или нет */
|
|
329
|
-
display: flex;
|
|
330
|
-
flex-direction: column;
|
|
331
|
-
align-items: center;
|
|
332
|
-
/* т.к. заголовок и таблица по центру */
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/* Заголовок вина */
|
|
336
|
-
#wine-widget-container .wine-title {
|
|
337
|
-
font-size: 15px; /* крупнее */
|
|
338
|
-
font-weight: 500;
|
|
339
|
-
margin: 0 0 8px;
|
|
340
|
-
min-height: 3rem;
|
|
341
|
-
line-height: 1.2;
|
|
342
|
-
text-align: center;
|
|
343
|
-
color: #000;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
#wine-widget-container .wine-params {
|
|
347
|
-
font-size: 14px;
|
|
348
|
-
color: #666;
|
|
349
|
-
white-space: normal;
|
|
350
|
-
text-align: center;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
#wine-widget-container .param-chips-container {
|
|
354
|
-
display: flex;
|
|
355
|
-
flex-wrap: wrap; /* чтобы чипсы переносились на новую строку при нехватке места */
|
|
356
|
-
gap: 8px; /* небольшой промежуток между чипсами */
|
|
357
|
-
justify-content: center; /* по центру горизонтали (если нужно) */
|
|
358
|
-
margin-bottom: 12px; /* отступ от нижнего блока */
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
#wine-widget-container .wine-chip {
|
|
362
|
-
display: inline-block;
|
|
363
|
-
background: #fff; /* белый фон */
|
|
364
|
-
font-size: 14px;
|
|
365
|
-
font-weight: bold;
|
|
366
|
-
padding: 4px 8px;
|
|
367
|
-
border: 2px solid #ccc; /* по умолчанию можно сделать серую границу */
|
|
368
|
-
border-radius: 24px;
|
|
369
|
-
white-space: nowrap;
|
|
370
|
-
color: #333;
|
|
371
|
-
white-space: normal;
|
|
372
|
-
word-break: normal;
|
|
373
|
-
overflow-wrap: normal;
|
|
374
|
-
max-width: 250px;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
#wine-widget-container .param-table {
|
|
380
|
-
display: grid;
|
|
381
|
-
/* Две колонки, каждая 50% */
|
|
382
|
-
grid-template-columns: 50% 50%;
|
|
383
|
-
width: 100%;
|
|
384
|
-
/* Если нужно, чтобы таблица занимала всю ширину карточки */
|
|
385
|
-
|
|
386
|
-
border-collapse: collapse;
|
|
387
|
-
/* (не все свойства table работают с grid, но можно оставить) */
|
|
388
|
-
|
|
389
|
-
text-align: left; /* Выравниваем по левой стороне */
|
|
390
|
-
margin-bottom: 12px; /* Отступ снизу, если нужно */
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
/* Каждая ячейка */
|
|
394
|
-
#wine-widget-container .param-table .cell {
|
|
395
|
-
padding: 8px;
|
|
396
|
-
/* Горизонтальная линия */
|
|
397
|
-
box-sizing: border-box;
|
|
398
|
-
border-bottom: 1px solid #ddd;
|
|
399
|
-
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
/* Вертикальная граница между левым и правым столбцом —
|
|
403
|
-
т.е. у всех ячеек, идущих в левой колонке */
|
|
404
|
-
#wine-widget-container .param-table .cell:nth-child(2n+1) {
|
|
405
|
-
border-right: 1px solid #ddd;
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
#wine-widget-container .param-table .cell:nth-last-child(-n + 2) {
|
|
409
|
-
border-bottom: none;
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
/* Нижняя строка (цена + кнопка) */
|
|
414
|
-
#wine-widget-container .bottom-row {
|
|
415
|
-
margin-top: auto; /* прижимает .bottom-row к низу
|
|
416
|
-
display: flex;
|
|
417
|
-
align-items: center;
|
|
418
|
-
gap: 12px; /* промежуток между ценой и кнопкой */
|
|
419
|
-
justify-content: center;
|
|
420
|
-
/* если хотите, чтобы они были по центру;
|
|
421
|
-
если нужно справа или растянуть, используйте space-between */
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
/* Цена */
|
|
425
|
-
#wine-widget-container .wine-price {
|
|
426
|
-
font-size: 16px;
|
|
427
|
-
font-weight: 400;
|
|
428
|
-
margin-bottom: 8px;
|
|
429
|
-
color: #333;
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
#wine-widget-container .buy-btn {
|
|
433
|
-
margin: 16px auto 0; /* центрируем и отступ сверху */
|
|
434
|
-
background-color: transparent;
|
|
435
|
-
color: var(--wineater-color);
|
|
436
|
-
border: 2px solid var(--wineater-color);
|
|
437
|
-
border-radius: 6px;
|
|
438
|
-
padding: 8px 16px;
|
|
439
|
-
font-size: 14px;
|
|
440
|
-
font-weight: 500;
|
|
441
|
-
cursor: pointer;
|
|
442
|
-
display: block;
|
|
443
|
-
text-decoration: none;
|
|
444
|
-
transition: background-color 0.2s, color 0.2s, box-shadow 0.2s;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
#wine-widget-container .buy-btn:hover {
|
|
448
|
-
box-shadow: 0 4px 8px rgba(123, 43, 235, 0.25);
|
|
449
|
-
background-color: var(--wineater-color);
|
|
450
|
-
color: #fff;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
/* Аналогично для .more-info-btn (если хотите стилизовать её тоже как кнопку) */
|
|
454
|
-
#wine-widget-container .more-info-btn {
|
|
455
|
-
display: inline-block;
|
|
456
|
-
background-color: var(--wineater-color);
|
|
457
|
-
color: #fff;
|
|
458
|
-
border-radius: 24px;
|
|
459
|
-
padding: 8px 16px;
|
|
460
|
-
font-size: 14px;
|
|
461
|
-
font-weight: 500;
|
|
462
|
-
text-decoration: none; /* убрать подчеркивание */
|
|
463
|
-
margin-top: 8px;
|
|
464
|
-
margin-right: 8px;
|
|
465
|
-
transition: transform 0.2s, box-shadow 0.2s;
|
|
466
|
-
}
|
|
467
|
-
#wine-widget-container .more-info-btn:hover {
|
|
468
|
-
transform: scale(1.05);
|
|
469
|
-
box-shadow: 0 4px 8px rgba(123, 43, 235, 0.25);
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
/* ===================== 9) Стиль для Somm Selection ===================== */
|
|
474
|
-
#wine-widget-container .somm-selection {
|
|
475
|
-
position: relative;
|
|
476
|
-
// border: 2px solid #FFD700;
|
|
477
|
-
// background: linear-gradient(white, #FFF8DC);
|
|
478
|
-
// box-shadow: 0 4px 12px rgba(255, 215, 0, 0.4);
|
|
479
|
-
}
|
|
480
|
-
#wine-widget-container .somm-selection-badge {
|
|
481
|
-
position: absolute;
|
|
482
|
-
top: -10px;
|
|
483
|
-
left: 10px;
|
|
484
|
-
/* Вместо ярко-жёлтого градиента – мягкий пастельный */
|
|
485
|
-
color: #FFD700; /* более мягкий жёлто-коричневый цвет текста */
|
|
486
|
-
border: 2px solid #FFD700;
|
|
487
|
-
font-size: 12px;
|
|
488
|
-
font-weight: 300;
|
|
489
|
-
padding: 4px 8px;
|
|
490
|
-
border-radius: 5px;
|
|
491
|
-
|
|
492
|
-
/* Уменьшаем или убираем тень */
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
/* ===================== 10) Лоадер и индикатор загрузки ===================== */
|
|
496
|
-
#loading-indicator {
|
|
497
|
-
position: absolute;
|
|
498
|
-
top: 50%;
|
|
499
|
-
left: 50%;
|
|
500
|
-
transform: translate(-50%, -50%);
|
|
501
|
-
z-index: 10000;
|
|
502
|
-
text-align: center;
|
|
503
|
-
}
|
|
504
|
-
#loading-indicator.hidden {
|
|
505
|
-
display: none;
|
|
506
|
-
}
|
|
507
|
-
#loading-indicator img {
|
|
508
|
-
width: 100px;
|
|
509
|
-
height: 100px;
|
|
510
|
-
animation: spin 1s linear infinite;
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
.typing-indicator {
|
|
514
|
-
display: flex;
|
|
515
|
-
justify-content: center;
|
|
516
|
-
align-items: center;
|
|
517
|
-
height: 0;
|
|
518
|
-
visibility: hidden;
|
|
519
|
-
background-color: white;
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
#loading-indicator .typing-indicator {
|
|
523
|
-
visibility: visible;
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
.typing-indicator span {
|
|
527
|
-
display: block;
|
|
528
|
-
width: 8px;
|
|
529
|
-
height: 8px;
|
|
530
|
-
margin: 0 3px;
|
|
531
|
-
border-radius: 50%;
|
|
532
|
-
background: linear-gradient(90deg, var(--wineater-color), var(--wineater-corp-color));
|
|
533
|
-
opacity: 0.7;
|
|
534
|
-
animation: typing 1s infinite;
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
@keyframes typing {
|
|
538
|
-
0%, 100% {
|
|
539
|
-
transform: translateY(0);
|
|
540
|
-
opacity: 0.7;
|
|
541
|
-
}
|
|
542
|
-
50% {
|
|
543
|
-
transform: translateY(-8px);
|
|
544
|
-
opacity: 1;
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
/* Staggered animation for typing dots */
|
|
549
|
-
.typing-indicator span:nth-child(1) {
|
|
550
|
-
animation-delay: 0s;
|
|
551
|
-
}
|
|
552
|
-
.typing-indicator span:nth-child(2) {
|
|
553
|
-
animation-delay: 0.15s;
|
|
554
|
-
}
|
|
555
|
-
.typing-indicator span:nth-child(3) {
|
|
556
|
-
animation-delay: 0.3s;
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
/* Show the typing indicator */
|
|
560
|
-
.typing-indicator.visible {
|
|
561
|
-
visibility: visible;
|
|
562
|
-
height: 40px;
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
/* ===================== 11) keyframes анимации ===================== */
|
|
566
|
-
@keyframes spin {
|
|
567
|
-
from { transform: rotate(0deg); }
|
|
568
|
-
to { transform: rotate(360deg); }
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
/* ===================== 12) Бар-версия (при необходимости) ===================== */
|
|
572
|
-
/* Грид блюд бара */
|
|
573
|
-
#wine-widget-container .dish-grid {
|
|
574
|
-
display: grid;
|
|
575
|
-
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
|
576
|
-
gap: 12px;
|
|
577
|
-
margin: 16px 0;
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
/* Плитка блюда */
|
|
581
|
-
#wine-widget-container .dish-tile {
|
|
582
|
-
display: flex;
|
|
583
|
-
justify-content: center;
|
|
584
|
-
align-items: center;
|
|
585
|
-
padding: 16px;
|
|
586
|
-
font-size: 14px;
|
|
587
|
-
font-weight: 500;
|
|
588
|
-
border: 1px solid #ccc;
|
|
589
|
-
border-radius: 8px;
|
|
590
|
-
background-color: #fff;
|
|
591
|
-
cursor: pointer;
|
|
592
|
-
transition: all 0.2s ease;
|
|
593
|
-
}
|
|
594
|
-
#wine-widget-container .dish-tile:hover {
|
|
595
|
-
transform: scale(1.05);
|
|
596
|
-
box-shadow: 0 4px 8px rgba(123, 43, 235, 0.15);
|
|
597
|
-
}
|
|
598
|
-
#wine-widget-container .dish-tile.selected {
|
|
599
|
-
background: linear-gradient(90deg, var(--wineater-color), var(--wineater-corp-color));
|
|
600
|
-
color: #fff;
|
|
601
|
-
}
|
|
602
|
-
|
|
603
|
-
/* Кнопки для бара */
|
|
604
|
-
#bar-controls {
|
|
605
|
-
display: flex;
|
|
606
|
-
align-items: stretch;
|
|
607
|
-
gap: 8px;
|
|
608
|
-
margin-top: 16px;
|
|
609
|
-
}
|
|
610
|
-
#bar-controls input,
|
|
611
|
-
#bar-controls button {
|
|
612
|
-
height: 44px;
|
|
613
|
-
box-sizing: border-box;
|
|
614
|
-
}
|
|
615
|
-
#bar-notes-input {
|
|
616
|
-
flex: 1;
|
|
617
|
-
padding: 0 12px;
|
|
618
|
-
border: 1px solid #ccc;
|
|
619
|
-
border-radius: 6px;
|
|
620
|
-
font-size: 14px;
|
|
621
|
-
outline: none;
|
|
622
|
-
}
|
|
623
|
-
#bar-send-button,
|
|
624
|
-
#bar-reset-button {
|
|
625
|
-
padding: 0 20px;
|
|
626
|
-
border-radius: 6px;
|
|
627
|
-
background: linear-gradient(90deg, var(--wineater-color), var(--wineater-corp-color));
|
|
628
|
-
font-size: 14px;
|
|
629
|
-
cursor: pointer;
|
|
630
|
-
white-space: nowrap;
|
|
631
|
-
color: white;
|
|
632
|
-
border: none;
|
|
633
|
-
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
634
|
-
}
|
|
635
|
-
#bar-send-button:hover,
|
|
636
|
-
#bar-reset-button:hover {
|
|
637
|
-
transform: scale(1.05);
|
|
638
|
-
box-shadow: 0 4px 8px rgba(123, 43, 235, 0.15);
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
/* ===================== 13) Блок Powered by ===================== */
|
|
642
|
-
#powered-by-widget {
|
|
643
|
-
position: relative;
|
|
644
|
-
border-top: 2px solid #f6f7fd;
|
|
645
|
-
font-family: 'Bricolage Grotesque', sans-serif;
|
|
646
|
-
font-weight: 200;
|
|
647
|
-
padding: 12px 24px;
|
|
648
|
-
min-height: 40px;
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
#powered-by-widget .powered-by-center {
|
|
652
|
-
position: absolute;
|
|
653
|
-
left: 50%;
|
|
654
|
-
transform: translateX(-50%);
|
|
655
|
-
text-align: center;
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
#powered-by-widget .powered-by-lang {
|
|
659
|
-
position: absolute;
|
|
660
|
-
right: 0px;
|
|
661
|
-
top: 50%;
|
|
662
|
-
transform: translateY(-50%);
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
.language-dropdown {
|
|
666
|
-
padding: 4px;
|
|
667
|
-
border-radius: 6px;
|
|
668
|
-
border: 2px solid var(--wineater-color);
|
|
669
|
-
background-color: white;
|
|
670
|
-
color: var(--wineater-color);
|
|
671
|
-
font-weight: 500;
|
|
672
|
-
font-family: 'Bricolage Grotesque', sans-serif;
|
|
673
|
-
font-size: 12px;
|
|
674
|
-
cursor: pointer;
|
|
675
|
-
transition: all 0.2sease;
|
|
676
|
-
}
|
|
677
|
-
.language-dropdown:hover {
|
|
678
|
-
box-shadow: 0 4px 8px rgba(123, 43, 235, 0.2);
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
#powered-by-widget a {
|
|
682
|
-
text-decoration: none;
|
|
683
|
-
display: flex;
|
|
684
|
-
align-items: center;
|
|
685
|
-
white-space: nowrap;
|
|
686
|
-
gap: 8px;
|
|
687
|
-
color: #a8a8a8;
|
|
688
|
-
font-size: 12px;
|
|
689
|
-
line-height: 16px;
|
|
690
|
-
transition: opacity 0.2s ease;
|
|
691
|
-
}
|
|
692
|
-
#powered-by-widget a:hover {
|
|
693
|
-
opacity: 0.8;
|
|
694
|
-
}
|
|
695
|
-
#powered-by-widget img {
|
|
696
|
-
height: 16px;
|
|
697
|
-
width: auto;
|
|
698
|
-
color: #a8a8a8;
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
/* ===================== 14) Адаптивная верстка (Media Queries) ===================== */
|
|
702
|
-
@media screen and (max-width: 768px) {
|
|
703
|
-
#wine-widget-container {
|
|
704
|
-
flex-direction: column;
|
|
705
|
-
padding: 0px 16px;
|
|
706
|
-
min-width: 100vw;
|
|
707
|
-
}
|
|
708
|
-
#wine-widget-header h1 {
|
|
709
|
-
display: none;
|
|
710
|
-
}
|
|
711
|
-
#wine-placeholder {
|
|
712
|
-
display: flex;
|
|
713
|
-
gap: 8px;
|
|
714
|
-
overflow-x: auto;
|
|
715
|
-
scroll-snap-type: x mandatory;
|
|
716
|
-
padding: 8px 0;
|
|
717
|
-
width: calc(100vw - 32px);
|
|
718
|
-
min-width: calc(100vw - 32px);
|
|
719
|
-
}
|
|
720
|
-
#wine-widget-header p {
|
|
721
|
-
display: none; /* скрываем подзаголовок на мобильных, если не нужен */
|
|
722
|
-
}
|
|
723
|
-
#wine-widget-container .wine-recommendation-tile {
|
|
724
|
-
flex: 0 0 auto;
|
|
725
|
-
scroll-snap-align: center;
|
|
726
|
-
width: 240px;
|
|
727
|
-
text-align: center;
|
|
728
|
-
}
|
|
729
|
-
#wine-widget-container .tile-details {
|
|
730
|
-
text-align: center;
|
|
731
|
-
}
|
|
732
|
-
.powered-by-sommelier {
|
|
733
|
-
display:none;
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
.card-popup {
|
|
738
|
-
position: absolute;
|
|
739
|
-
top: 0;
|
|
740
|
-
left: 0;
|
|
741
|
-
z-index: 10;
|
|
742
|
-
width: 100%;
|
|
743
|
-
background-color: white;
|
|
744
|
-
padding: 16px;
|
|
745
|
-
border-radius: 16px;
|
|
746
|
-
box-shadow: 0 6px 30px rgba(0,0,0,0.2);
|
|
747
|
-
text-align: left;
|
|
748
|
-
font-size: 14px;
|
|
749
|
-
box-sizing: border-box;
|
|
750
|
-
display: flex;
|
|
751
|
-
flex-direction: column;
|
|
752
|
-
}
|
|
753
|
-
|
|
754
|
-
.card-popup p {
|
|
755
|
-
margin: 5px 0;
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
.card-popup.hidden {
|
|
759
|
-
display: none;
|
|
760
|
-
}
|
|
761
|
-
|
|
762
|
-
.card-popup-header {
|
|
763
|
-
display: flex;
|
|
764
|
-
justify-content: space-between;
|
|
765
|
-
align-items: flex-start;
|
|
766
|
-
gap: 12px;
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
.card-popup-header h2 {
|
|
770
|
-
font-size: 16px;
|
|
771
|
-
font-weight: 600;
|
|
772
|
-
margin: 0;
|
|
773
|
-
flex: 1;
|
|
774
|
-
line-height: 1.3;
|
|
775
|
-
}
|
|
776
|
-
|
|
777
|
-
.card-popup-close {
|
|
778
|
-
font-size: 20px;
|
|
779
|
-
font-weight: bold;
|
|
780
|
-
cursor: pointer;
|
|
781
|
-
color: #999;
|
|
782
|
-
border: none;
|
|
783
|
-
background: transparent;
|
|
784
|
-
line-height: 1;
|
|
785
|
-
}
|
|
786
|
-
.card-popup-close:hover {
|
|
787
|
-
color: #000;
|
|
788
|
-
}
|
|
789
|
-
|
|
790
|
-
.global-card-popup {
|
|
791
|
-
position: fixed;
|
|
792
|
-
top: 0;
|
|
793
|
-
left: 0;
|
|
794
|
-
right: 0;
|
|
795
|
-
bottom: 0;
|
|
796
|
-
z-index: 10000;
|
|
797
|
-
padding: 24px 16px;
|
|
798
|
-
background-color: #fff;
|
|
799
|
-
overflow-y: auto;
|
|
800
|
-
border-radius: 0;
|
|
801
|
-
font-size: 14px;
|
|
802
|
-
box-shadow: 0 6px 20px rgba(0,0,0,0.2);
|
|
803
|
-
display: flex;
|
|
804
|
-
flex-direction: column;
|
|
805
|
-
gap: 12px;
|
|
806
|
-
max-width: 100vw;
|
|
807
|
-
max-height: 100vh;
|
|
808
|
-
}
|
|
809
|
-
|
|
810
|
-
.global-card-popup .card-popup-header {
|
|
811
|
-
display: flex;
|
|
812
|
-
justify-content: space-between;
|
|
813
|
-
align-items: flex-start;
|
|
814
|
-
}
|
|
815
|
-
|
|
816
|
-
.global-card-popup .card-popup-close {
|
|
817
|
-
font-size: 24px;
|
|
818
|
-
font-weight: bold;
|
|
819
|
-
cursor: pointer;
|
|
820
|
-
background: transparent;
|
|
821
|
-
border: none;
|
|
822
|
-
}
|
|
823
|
-
|
|
824
|
-
.mobile-fullscreen-popup {
|
|
825
|
-
font-family: 'Bricolage Grotesque', sans-serif;
|
|
826
|
-
position: fixed;
|
|
827
|
-
width: calc(100% - 20px);
|
|
828
|
-
top: 50px;
|
|
829
|
-
left: 10px;
|
|
830
|
-
z-index: 10000;
|
|
831
|
-
background-color: #fff;
|
|
832
|
-
padding: 24px;
|
|
833
|
-
overflow-y: auto;
|
|
834
|
-
border-radius: 0;
|
|
835
|
-
border-radius: 16px;
|
|
836
|
-
font-size: 14px;
|
|
837
|
-
display: flex;
|
|
838
|
-
flex-direction: column;
|
|
839
|
-
gap: 12px;
|
|
840
|
-
}
|
|
841
|
-
.mobile-fullscreen-popup .card-popup-header {
|
|
842
|
-
display: flex;
|
|
843
|
-
justify-content: space-between;
|
|
844
|
-
align-items: flex-start;
|
|
845
|
-
}
|
|
846
|
-
.mobile-fullscreen-overlay {
|
|
847
|
-
position: absolute;
|
|
848
|
-
top: 0;
|
|
849
|
-
left: 0;
|
|
850
|
-
right: 0;
|
|
851
|
-
bottom: 0;
|
|
852
|
-
background: #fff;
|
|
853
|
-
opacity: 0.96;
|
|
854
|
-
z-index: 0;
|
|
855
|
-
}
|
|
856
|
-
.mobile-fullscreen-popup .card-popup-close {
|
|
857
|
-
font-size: 24px;
|
|
858
|
-
font-weight: bold;
|
|
859
|
-
cursor: pointer;
|
|
860
|
-
background: transparent;
|
|
861
|
-
border: none;
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
/* Пример более узких экранов (i.e. <480px) можно добавить при необходимости */
|
|
865
|
-
`,yn=document.createElement("link");yn.rel="stylesheet",yn.href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,200..800&display=swap",document.head.appendChild(yn);const ci=document.createElement("style");document.documentElement.style.setProperty("--wineater-color",((hi=window==null?void 0:window.wineaterData)==null?void 0:hi.COLOR)||"#7B2BEB"),ci.textContent=ma,document.head.appendChild(ci);const va=[],ba="HeUw6IXuhvz6tRuXdPEGEbj3SGQ3Q2YtEc1Z8jd41Kg9LtyPb4Epu0to31SYIadG";class li{constructor(e){var n;this.baseURL="https://wineater-backend.vercel.app/",this.store=va.find(s=>window.location.href.includes(s)),this.token=((n=window==null?void 0:window.wineaterData)==null?void 0:n.CLIENT_TOKEN)||ba}async getStoreConfig(e){console.log(e);try{const n=await fetch(`${this.baseURL}stores/store`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.token}`},body:JSON.stringify({store:e})});if(console.log(n),!n.ok)throw new Error(`HTTP error! Status: ${n.status}`);return await n.json()}catch(n){throw console.error("Error fetching store configuration:",n),n}}async getWineRecommendations(e){console.log(window.location.href);try{const n=await fetch(`${this.baseURL}dish/recommendations`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.token}`},body:JSON.stringify({text:e,store:this.store?this.store.toString().charAt(0).toUpperCase()+this.store.slice(1):void 0})}),s=await n.json();if(!n.ok)throw new Error(`API call failed with status ${n.status}: ${s.message||"No additional error information"}`);return s}catch(n){throw console.error("Fetching wine recommendations failed:",n.message),new Error(`Error in getWineRecommendations: ${n.message}`)}}async getWineRecommendationsSearch(e){console.log(window.location.href);try{const n=await fetch(`${this.baseURL}dish/recommendations/search`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.token}`},body:JSON.stringify({text:e})}),s=await n.json();if(!n.ok)throw new Error(`API call failed with status ${n.status}: ${s.message||"No additional error information"}`);return s}catch(n){throw console.error("Fetching wine recommendations failed:",n.message),new Error(`Error in getWineRecommendations: ${n.message}`)}}async getPossibleDishesWithMeta(e,n){try{const s=await fetch(`${this.baseURL}dish/possible_dishes`,{method:"POST",headers:{Authorization:`Bearer ${this.token}`,"Content-Type":"application/json"},body:JSON.stringify({title:e,description:n})}),i=await s.json();if(console.log(i),!s.ok)throw new Error(`API call failed with status ${s.status}: ${i.message||"No additional error information"}`);return i}catch(s){throw console.error("Error fetching possible dishes:",s),s}}async getInstantRecommendations(){console.log("Fetching instant recommendations...");try{const e=await fetch(`${this.baseURL}dish/recommendations/instant`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.token}`},body:JSON.stringify({store:this.store})}),n=await e.json();if(!e.ok)throw new Error(`API call failed with status ${e.status}: ${n.message||"No additional error information"}`);return console.log("Instant recommendations:",n),n}catch(e){throw console.error("Fetching instant recommendations failed:",e.message),new Error(`Error in getInstantRecommendations: ${e.message}`)}}}class ya{constructor(){this.api=new li,this.language="en",this.currency="USD",this.currencies={USD:{label:"$"},EUR:{label:"€"},MXN:{label:"$"}},this.translations={fr:{lang:"fr",welcomeMessage:"Quel plat allez-vous déguster ? Décrivez-le-moi et je vous proposerai le vin qui l'accompagnera parfaitement.",noResultsFound:"Aucun résultat trouvé.",somethingWentWrong:"Désolé, quelque chose a mal tourné.",chatButton1:"Trouvez l'accord parfait",chatButton2:"Associez le vin",chatButton3:"Obtenez des conseils",chatTitle:"Accord Mets & Vins 🍷",chatSubtitle:"Décrivez votre plat et obtenez une recommandation en 30 secondes",inputPlaceholder:"ex., Salade de thon",sendButton:"Accorder",poweredBy:"Propulsé par",price:"Prix",region:"Région",type:"Type",reason:"Suggestion",moreInfo:"Plus d'infos",winePairingIntro:"Pour ce vin, voici quelques suggestions de plats :",askForDinner:"Que voulez-vous manger ce soir?",clearChatButton:"Effacer le chat",widgetTitle:"TROUVEZ VOTRE VIN PARFAIT",widgetSubtitle:"Partagez tout ce que vous avez en tête—votre repas, humeur, budget ou occasion—et notre sommelier IA vous recommandera le vin parfait en quelques secondes",searchPlaceholder:"Entrez un mot-clé ou une description",wineDetails:{reason:"Raison",price:"Prix",region:"Région",type:"Type",moreInfo:"Plus d'infos",sommSelection:"Sélection Somm",code:"Code",buy:"Acheter"},searchButton:"Rechercher",priceRange:"Gamme de prix",wineColor:"Couleur du vin",intensity:"Intensité",red:"Rouge",white:"Blanc",rose:"Rosé",light:"Léger",medium:"Moyen",full:"Puissant",barTitle:"Sélection du bar",barSubtitle:"Choisissez vos plats ci-dessous et cliquez sur «Envoyer»",barSendButton:"Envoyer",barResetButton:"Réinitialiser",barName:"Nom du bar",barNotesPlaceholder:"Entrez vos souhaits ici...",placeholderSuggestions:["Vin pour les pâtes","Parfait avec du poisson","Recommandé pour une soirée"],headerLine1:"Partagez tout ce qui vous passe par la tête —",headerLine2:"— et obtenez des recommandations de vin parfait en quelques secondes",headerMeal:"repas",headerMood:"humeur",headerBudget:"budget",headerOccasion:"occasion",headerOr:"ou"},es:{lang:"es",welcomeMessage:"¿Qué vas a comer? Cuéntame tu plato y te recomendaré el maridaje perfecto.",noResultsFound:"No se encontraron resultados.",somethingWentWrong:"Lo sentimos, algo salió mal.",chatButton1:"Encuentra tu maridaje",chatButton2:"Combina vino ya",chatButton3:"Recibe asesoría ahora",chatTitle:"Maridaje de Vinos 🍷",chatSubtitle:"Describe tu comida y obtén una recomendación en 30 segundos",inputPlaceholder:"ej., Ensalada de atún",sendButton:"Combinar",poweredBy:"Desarrollado por",price:"Precio",region:"Región",type:"Tipo",reason:"Sugerencia",moreInfo:"Más info",winePairingIntro:"Para este vino, aquí tienes algunas sugerencias de platos:",askForDinner:"¿Qué te gustaría cenar?",clearChatButton:"Limpiar el chat",widgetTitle:"ENCUENTRA TU VINO PERFECTO",widgetSubtitle:"Comparte cualquier cosa que tengas en mente—tu comida, estado de ánimo, presupuesto o evento—y nuestro sommelier de IA te recomendará el vino perfecto en segundos",searchPlaceholder:"Escribe una palabra clave o descripción",wineDetails:{reason:"Razón",price:"Precio",region:"Región",type:"Tipo",code:"Código",moreInfo:"Más información",sommSelection:"Selección Somm",buy:"Comprar"},searchButton:"Buscar",priceRange:"Rango de precios",wineColor:"Color del vino",intensity:"Intensidad",red:"Tinto",white:"Blanco",rose:"Rosado",light:"Ligero",medium:"Medio",full:"Intenso",barTitle:"Platos de Bar",barSubtitle:"Selecciona de la lista y presiona «Enviar»",barSendButton:"Enviar",barResetButton:"Reiniciar",barName:"Nombre del bar",barNotesPlaceholder:"Agrega tus comentarios aquí...",placeholderSuggestions:["Vino para pasta","Perfecto con pescado","Recomendado para una fiesta"],headerLine1:"Comparte cualquier cosa que tengas en mente —",headerLine2:"— y obtén recomendaciones del vino perfecto en cuestión de segundos",headerMeal:"comida",headerMood:"estado de ánimo",headerBudget:"presupuesto",headerOccasion:"ocasión",headerOr:"o"},en:{lang:"en",welcomeMessage:"What are you planning to eat? Share your dish and I'll recommend the perfect wine pairing for your meal.",noResultsFound:"No results found.",somethingWentWrong:"Sorry, something went wrong.",chatButton1:"Find Your Pairing",chatButton2:"Pair Wine Now",chatButton3:"Get Wine Advice",chatTitle:"Wine Pairing Assistant 🍷",chatSubtitle:"Describe your meal and get a recommendation in 30 seconds",inputPlaceholder:"e.g., Tuna salad",sendButton:"Match",poweredBy:"Powered by",price:"Price",region:"Region",type:"Type",reason:"Suggestion",moreInfo:"More info",winePairingIntro:"For this wine, here are some suggested dishes:",askForDinner:"What would you like to have for dinner?",clearChatButton:"Clear Chat",widgetTitle:"FIND YOUR PERFECT WINE",widgetSubtitle:"Share anything on your mind—your meal, mood, budget, or occasion—and our AI sommelier will recommend the perfect wine in seconds",searchPlaceholder:"Enter a keyword or description",wineDetails:{price:"Price",region:"Region",type:"Type",moreInfo:"More info",reason:"Reason",sommSelection:"Somm Selection",code:"Code",buy:"Buy"},searchButton:"Search",priceRange:"Price Range",wineColor:"Wine Color",intensity:"Intensity",red:"Red",white:"White",rose:"Rosé",light:"Light",medium:"Medium",full:"Full",barTitle:"Bar Dishes",barSubtitle:"Select dishes below and click 'Send'",barSendButton:"Send",barResetButton:"Reset",barName:"Bar Name",barNotesPlaceholder:"Add your wishes here...",placeholderSuggestions:["Wine for pasta","Perfect with fish","Recommended for a party"],headerLine1:"Share anything on your mind —",headerLine2:"— and get recommendations of the perfect wine in seconds",headerMeal:"meal",headerMood:"mood",headerBudget:"budget",headerOccasion:"occasion",headerOr:"or"},sr:{lang:"sr",welcomeMessage:"Šta planirate da jedete? Podelite svoje jelo i preporučiću vam savršeno vino uz obrok.",noResultsFound:"Nema rezultata.",somethingWentWrong:"Izvinite, nešto je pošlo po zlu.",chatButton1:"Pronađi vino",chatButton2:"Upari vino sada",chatButton3:"Zatraži preporuku",chatTitle:"Asistent za uparivanje vina 🍷",chatSubtitle:"Opišite svoj obrok i dobijte preporuku za 30 sekundi",inputPlaceholder:"npr. Tuna salata",sendButton:"Upari",poweredBy:"Pokreće",price:"Cena",region:"Regija",type:"Tip",reason:"Preporuka",moreInfo:"Više informacija",winePairingIntro:"Za ovo vino, preporučuju se sledeća jela:",askForDinner:"Šta biste želeli za večeru?",clearChatButton:"Obriši razgovor",widgetTitle:"PRONAĐITE SAVRŠENO VINO",widgetSubtitle:"Podelite bilo šta — obrok, raspoloženje, budžet ili priliku — i naš AI somelijer će vam za par sekundi preporučiti vino",searchPlaceholder:"Unesite ključnu reč ili opis",wineDetails:{price:"Cena",region:"Regija",type:"Tip",moreInfo:"Više informacija",reason:"Razlog",sommSelection:"Izbor somelijera",code:"Šifra",buy:"Kupi"},searchButton:"Pretraga",priceRange:"Cenovni raspon",wineColor:"Boja vina",intensity:"Intenzitet",red:"Crveno",white:"Belo",rose:"Roze",light:"Lako",medium:"Srednje",full:"Puno",barTitle:"Jela iz bara",barSubtitle:"Izaberite jela ispod i kliknite 'Pošalji'",barSendButton:"Pošalji",barResetButton:"Resetuj",barName:"Naziv bara",barNotesPlaceholder:"Dodajte svoje želje ovde...",placeholderSuggestions:["Vino uz pastu","Savršeno uz ribu","Preporuka za žurku"],headerLine1:"Podelite bilo šta što vam je na umu —",headerLine2:"— i dobijte preporuke za savršeno vino za par sekundi",headerMeal:"obrok",headerMood:"raspoloženje",headerBudget:"budžet",headerOccasion:"prilika",headerOr:"ili"},de:{lang:"de",welcomeMessage:"Was möchten Sie essen? Beschreiben Sie Ihr Gericht und ich empfehle Ihnen den perfekten Wein dazu.",noResultsFound:"Keine Ergebnisse gefunden.",somethingWentWrong:"Entschuldigung, etwas ist schief gelaufen.",chatButton1:"Finde Dein Pairing",chatButton2:"Wein jetzt wählen",chatButton3:"Erhalte Weinberatung",chatTitle:"Wein & Speisen 🍷",chatSubtitle:"Beschreiben Sie Ihr Gericht und erhalten Sie in 30 Sekunden eine Empfehlung",inputPlaceholder:"z.B., Thunfischsalat",sendButton:"Kombinieren",poweredBy:"Unterstützt von",price:"Preis",region:"Region",type:"Typ",reason:"Anregung",moreInfo:"Mehr Info",winePairingIntro:"Für diesen Wein gibt es folgende Essensvorschläge:",askForDinner:"Was möchten Sie zum Abendessen essen?",clearChatButton:"Chat löschen",widgetTitle:"FINDEN SIE IHREN PERFEKTEN WEIN",widgetSubtitle:"Teilen Sie alles, was Ihnen in den Sinn kommt—Ihre Mahlzeit, Stimmung, Ihr Budget oder Anlass—und unser KI-Sommelier empfiehlt Ihnen in Sekunden den perfekten Wein",placeholderSuggestions:["Wein für Pasta","Perfekt zu Fisch","Empfohlen für eine Party"],searchPlaceholder:"Geben Sie ein Stichwort oder eine Beschreibung ein",wineDetails:{price:"Preis",region:"Region",type:"Typ",moreInfo:"Mehr Infos",sommSelection:"Somm-Auswahl",reason:"Grund",code:"Code",buy:"Kaufen"},searchButton:"Suche",priceRange:"Preisspanne",wineColor:"Weinfarbe",intensity:"Intensität",red:"Rot",white:"Weiß",rose:"Rosé",light:"Leicht",medium:"Mittel",full:"Voll",barTitle:"Bar-Auswahl",barSubtitle:"Wählen Sie Ihre Gerichte und klicken Sie auf 'Senden'",barSendButton:"Senden",barResetButton:"Zurücksetzen",barName:"Name der Bar",headerLine1:"Teilen Sie alles, was Ihnen durch den Kopf geht —",headerLine2:"— und erhalten Sie in Sekundenschnelle Empfehlungen für den perfekten Wein",headerMeal:"Mahlzeit",headerMood:"Stimmung",headerBudget:"Budget",headerOccasion:"Anlass",headerOr:"oder"},ukr:{lang:"ukr",welcomeMessage:"Що ви збираєтесь їсти? Опишіть свою страву, і я порекомендую вам ідеальне вино.",noResultsFound:"Результатів не знайдено.",somethingWentWrong:"Вибачте, щось пішло не так.",chatButton1:"Знайти ідеальне поєднання",chatButton2:"Підібрати вино",chatButton3:"Отримати пораду",chatTitle:"Сомельє-помічник 🍷",chatSubtitle:"Опишіть свою страву і отримайте рекомендацію за 30 секунд",inputPlaceholder:"наприклад, Тунець із салатом",sendButton:"Підібрати",poweredBy:"Розроблено на основі",price:"Ціна",region:"Регіон",type:"Тип",reason:"Рекомендація",moreInfo:"Докладніше",winePairingIntro:"До цього вина підходять такі страви:",askForDinner:"Що ви хочете на вечерю?",clearChatButton:"Очистити чат",widgetTitle:"ЗНАЙДІТЬ ІДЕАЛЬНЕ ВИНО",widgetSubtitle:"Поділіться тим, що у вас на думці—їжа, настрій, бюджет чи подія—і наш AI-сомельє порекомендує вам ідеальне вино за секунди",searchPlaceholder:"Введіть ключове слово або опис",wineDetails:{reason:"Причина",price:"Ціна",region:"Регіон",type:"Тип",moreInfo:"Докладніше",sommSelection:"Вибір сомельє",code:"Код",buy:"Купити"},searchButton:"Пошук",priceRange:"Діапазон цін",wineColor:"Колір вина",intensity:"Інтенсивність",red:"Червоне",white:"Біле",rose:"Рожеве",light:"Легке",medium:"Середнє",full:"Повне",barTitle:"Закуски до вина",barSubtitle:"Виберіть страви нижче та натисніть «Надіслати»",barSendButton:"Надіслати",barResetButton:"Скинути",barName:"Назва бару",barNotesPlaceholder:"Додайте ваші побажання тут...",placeholderSuggestions:["Вино до пасти","Ідеально до риби","Рекомендуємо для вечірки"],headerLine1:"Поділіться будь-якими вашими думками —",headerLine2:"— і отримайте рекомендації щодо ідеального вина за секунди",headerMeal:"страва",headerMood:"настрій",headerBudget:"бюджет",headerOccasion:"подія",headerOr:"або"},ru:{lang:"ru",welcomeMessage:"Что вы планируете поесть? Напишите ваше блюдо, и я подберу идеальное вино к нему.",noResultsFound:"Результаты не найдены.",somethingWentWrong:"Извините, что-то пошло не так.",chatButton1:"Найти сочетание",chatButton2:"Подобрать вино",chatButton3:"Получить совет",chatTitle:"Ассистент по подбору вина 🍷",chatSubtitle:"Опишите ваше блюдо и получите рекомендацию за 30 секунд",inputPlaceholder:"например, Тунец с салатом",sendButton:"Подобрать",poweredBy:"Powered by",price:"Цена",region:"Регион",type:"Тип",reason:"Рекомендация",moreInfo:"Подробнее",winePairingIntro:"К этому вину подходят следующие блюда:",askForDinner:"Что бы вы хотели на ужин?",clearChatButton:"Очистить чат",widgetTitle:"НАЙДИТЬ ИДЕАЛЬНОЕ ВИНО",widgetSubtitle:"Поделитесь вашими предпочтениями — блюдом, настроением, бюджетом или случаем — и наш AI-сомелье подберёт идеальное вино за секунды",searchPlaceholder:"Введите ключевое слово или описание",wineDetails:{price:"Цена",region:"Регион",type:"Тип",moreInfo:"Подробнее",reason:"Причина",sommSelection:"Выбор сомелье",code:"Код",buy:"Купить"},searchButton:"Поиск",priceRange:"Диапазон цен",wineColor:"Цвет вина",intensity:"Интенсивность",red:"Красное",white:"Белое",rose:"Розовое",light:"Лёгкое",medium:"Среднее",full:"Полное",barTitle:"Закуски к вину",barSubtitle:"Выберите блюда ниже и нажмите 'Отправить'",barSendButton:"Отправить",barResetButton:"Сбросить",barName:"Название бара",barNotesPlaceholder:"Добавьте ваши пожелания здесь...",placeholderSuggestions:["Вино для пасты","Идеально к рыбе","Рекомендуем для вечеринки"],headerLine1:"Поделитесь любыми вашими мыслями —",headerLine2:"— и получите рекомендации по идеальному вину за считанные секунды",headerMeal:"блюдо",headerMood:"настроение",headerBudget:"бюджет",headerOccasion:"случай",headerOr:"или"},kk:{lang:"kk",welcomeMessage:"Сіз не жегіңіз келеді? Тағамыңызды сипаттаңыз, мен оған керемет шарап ұсынамын.",noResultsFound:"Нәтижелер табылмады.",somethingWentWrong:"Кешіріңіз, бірдеңе дұрыс болмады.",chatButton1:"Сәйкестік табу",chatButton2:"Шарап таңдау",chatButton3:"Кеңес алу",chatTitle:"Шарап таңдаушы көмекші 🍷",chatSubtitle:"Тағамыңызды сипаттаңыз — 30 секундта ұсыныс алыңыз",inputPlaceholder:"мысалы, тунец салатымен",sendButton:"Таңдау",poweredBy:"Powered by",price:"Бағасы",region:"Өңір",type:"Түрі",reason:"Ұсыныс",moreInfo:"Толығырақ",winePairingIntro:"Бұл шарапқа келесі тағамдар сәйкес келеді:",askForDinner:"Кешкі асқа не қалайсыз?",clearChatButton:"Чатты тазалау",widgetTitle:"КЕРЕМЕТ ШАРАПТЫ ТАБЫҢЫЗ",widgetSubtitle:"Таңдауларыңызды бөлісіңіз — тағам, көңіл-күй, бюджет немесе жағдай — және біздің AI-сомелье сізге бірнеше секундта шарап ұсынады",searchPlaceholder:"Кілт сөзді немесе сипаттаманы енгізіңіз",wineDetails:{price:"Бағасы",region:"Өңір",type:"Түрі",moreInfo:"Толығырақ",reason:"Себебі",sommSelection:"Сомелье таңдауы",code:"Код",buy:"Сатып алу"},searchButton:"Іздеу",priceRange:"Баға диапазоны",wineColor:"Шарап түсі",intensity:"Қанықтылық",red:"Қызыл",white:"Ақ",rose:"Розалық",light:"Жеңіл",medium:"Орташа",full:"Толық",barTitle:"Шарапқа арналған тіскебасарлар",barSubtitle:"Төмендегі тағамдарды таңдаңыз және 'Жіберу' батырмасын басыңыз",barSendButton:"Жіберу",barResetButton:"Қалпына келтіру",barName:"Бар атауы",barNotesPlaceholder:"Мұнда өз тілектеріңізді жазыңыз...",placeholderSuggestions:["Пастаға арналған шарап","Балыққа тамаша үйлеседі","Кешке ұсынуға болады"],headerLine1:"Ойларыңызбен бөлісіңіз —",headerLine2:"— және бірнеше секундта мінсіз шарап ұсынысын алыңыз",headerMeal:"тағам",headerMood:"көңіл-күй",headerBudget:"бюджет",headerOccasion:"жағдай",headerOr:"немесе"}}}async fetchConfig(e){console.log("storeName",e);try{const n=await this.api.getStoreConfig(e);this.storeLanguage=n.lang,this.storeId=n.id,this.supportedLanguages=n.available_languages,this.OpenAIApiKey=n.open_ai_key,console.log("this.storeId",this.storeId);const s=new URLSearchParams(window.location.search),i=s.get("lang")||s.get("language");return i&&this.translations[i]?this.language=i:n.lang&&this.translations[n.lang]?this.language=n.lang:this.language="en",this.currency=n.currency||"USD",n}catch{const s=new URLSearchParams(window.location.search),i=s.get("lang")||s.get("language");return this.language=this.translations[i]?i:"en",this.currency="USD",config}}getStoreId(){return this.storeId}getCurrency(e){const n=e.split(".");let s=this.currencies[this.currency];for(const i of n)if(s&&typeof s=="object"&&i in s)s=s[i];else return this.currency;return s}translate(e){const n=e.split(".");let s=this.translations[this.language];for(const i of n)if(s&&typeof s=="object"&&i in s)s=s[i];else return e;return s}getSupportedLanguages(){return this.supportedLanguages}getLangFromURL(){const e=new URLSearchParams(window.location.search),n=e.get("lang")||e.get("language");return n&&this.translations[n]?n:null}async translateTexts(e){var c,l,a,d;if(this.storeLanguage===this.language||!this.supportedLanguages)return console.log("gривет"),e;const n=this.OpenAIApiKey,s="https://api.openai.com/v1/chat/completions",i={"Content-Type":"application/json",Authorization:`Bearer ${n}`},r=Object.entries(e).map(([p,v])=>({key:p,text:v})),o=`
|
|
866
|
-
You are a professional translator.
|
|
867
|
-
|
|
868
|
-
The input texts are written in language with code "${this.storeLanguage}". Your task is to translate them strictly to the target language with code "${this.language}".
|
|
869
|
-
|
|
870
|
-
⚠️ DO NOT leave the original text.
|
|
871
|
-
⚠️ DO NOT skip any entry.
|
|
872
|
-
⚠️ Preserve the original order and keys exactly.
|
|
873
|
-
|
|
874
|
-
Translate only the "text" fields of the JSON array. Return an array of the same length and structure, like this:
|
|
875
|
-
|
|
876
|
-
Input:
|
|
877
|
-
[
|
|
878
|
-
{ "key": "shortDescription", "text": "Red wine with rich cherry notes." },
|
|
879
|
-
{ "key": "tags", "text": "fruity, dry, elegant" }
|
|
880
|
-
]
|
|
881
|
-
|
|
882
|
-
Output:
|
|
883
|
-
[
|
|
884
|
-
{ "key": "shortDescription", "text": "..." },
|
|
885
|
-
{ "key": "tags", "text": "..." }
|
|
886
|
-
]
|
|
887
|
-
|
|
888
|
-
Now translate the following input:
|
|
889
|
-
${JSON.stringify(r,null,2)}
|
|
890
|
-
`,u=JSON.stringify({model:"gpt-3.5-turbo",messages:[{role:"system",content:"You are a professional translator."},{role:"user",content:o}],temperature:.2,max_tokens:1e3});try{const w=(d=(a=(l=(c=(await(await fetch(s,{method:"POST",headers:i,body:u})).json()).choices)==null?void 0:c[0])==null?void 0:l.message)==null?void 0:a.content)==null?void 0:d.trim();if(!w)throw new Error("No response from OpenAI");const y=JSON.parse(w),x={};return y.forEach(C=>{C.key&&C.text!==void 0&&(x[C.key]=C.text)}),x}catch(p){return console.error("Error translating texts:",p),e}}}const X=new ya,pe={WIDGET_INITIALIZED:"widget_initialized",WIDGET_LOADED:"widget_loaded",SEARCH_PERFORMED:"search_performed",SEARCH_RESULTS_DISPLAYED:"search_results_displayed",NO_RESULTS_FOUND:"no_results_found",WINE_CARD_HOVER:"wine_card_hover",WINE_CARD_CLICK:"wine_card_click",WINE_DETAILS_VIEWED:"wine_details_viewed",WINE_DETAILS_CLOSED:"wine_details_closed",BUY_BUTTON_CLICKED:"buy_button_clicked",FILTER_APPLIED:"filter_applied",LANGUAGE_CHANGED:"language_changed",ERROR_OCCURRED:"error_occurred",MOBILE_VIEW_ACTIVATED:"mobile_view_activated"};class wa{constructor(e){this.widget=e}getTitle(e){return e?`<h1 class="wine-widget-big-title">${e}</h1>`:`<h1 class="wine-widget-big-title">
|
|
891
|
-
${X.translate("headerLine1")}
|
|
892
|
-
<span class="icon icon-meal"></span>
|
|
893
|
-
<span class="icon-label">${X.translate("headerMeal")}</span>,
|
|
894
|
-
<span class="icon icon-mood"></span>
|
|
895
|
-
<span class="icon-label">${X.translate("headerMood")}</span>
|
|
896
|
-
</br>
|
|
897
|
-
${X.translate("headerOr")}
|
|
898
|
-
<span class="icon icon-occasion"></span>
|
|
899
|
-
<span class="icon-label">${X.translate("headerOccasion")}</span>
|
|
900
|
-
${X.translate("headerLine2")}
|
|
901
|
-
</h1>`}initializeWidget(){const e=document.getElementById(this.widget.widgetWrapper),n=`
|
|
902
|
-
<div id="wine-widget-container">
|
|
903
|
-
<div class="wine-widget-wrapper">
|
|
904
|
-
<div id="wine-widget-header">
|
|
905
|
-
${this.getTitle(this.widget.titleText)}
|
|
906
|
-
</div>
|
|
907
|
-
|
|
908
|
-
<div id="wine-widget-search">
|
|
909
|
-
<span class="search-icon"></span>
|
|
910
|
-
<input
|
|
911
|
-
type="text"
|
|
912
|
-
id="wine-search-input"
|
|
913
|
-
placeholder="${X.translate("searchPlaceholder")}"
|
|
914
|
-
>
|
|
915
|
-
<button id="wine-search-button">
|
|
916
|
-
${X.translate("searchButton")}
|
|
917
|
-
</button>
|
|
918
|
-
</div>
|
|
919
|
-
|
|
920
|
-
<div id="wine-widget-right">
|
|
921
|
-
<div id="loading-indicator" class="hidden">
|
|
922
|
-
<div id="typing-indicator" class="typing-indicator">
|
|
923
|
-
<span></span>
|
|
924
|
-
<span></span>
|
|
925
|
-
<span></span>
|
|
926
|
-
</div>
|
|
927
|
-
</div>
|
|
928
|
-
<div id="wine-placeholder"></div>
|
|
929
|
-
</div>
|
|
930
|
-
|
|
931
|
-
<div id="powered-by-widget">
|
|
932
|
-
<div class="powered-by-center">
|
|
933
|
-
<a href="https://wineater.com" target="_blank">
|
|
934
|
-
<span>${X.translate("poweredBy")}</span>
|
|
935
|
-
<img
|
|
936
|
-
src="${this.widget.countryCode==="ru"?"https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media/divino_logo.svg?x=5":"https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media/logo_medium_gray.svg"}"
|
|
937
|
-
alt="Wineater Logo"
|
|
938
|
-
>
|
|
939
|
-
<span class="powered-by-sommelier">${X.translate("AI sommelier")}</span>
|
|
940
|
-
</a>
|
|
941
|
-
</div>
|
|
942
|
-
<div class="powered-by-lang"></div>
|
|
943
|
-
</div>
|
|
944
|
-
</div>
|
|
945
|
-
</div>
|
|
946
|
-
`;e.insertAdjacentHTML("beforeend",n)}showLoadingIndicator(){document.getElementById("loading-indicator").classList.remove("hidden")}hideLoadingIndicator(){document.getElementById("loading-indicator").classList.add("hidden")}displayNoResultsMessage(){const e=document.getElementById("wine-placeholder");e.innerHTML=`
|
|
947
|
-
<div class="no-results">
|
|
948
|
-
<p>${X.translate("noResultsMessage")||"No recommendations found for your query."}</p>
|
|
949
|
-
</div>
|
|
950
|
-
`}displayErrorMessage(){const e=document.getElementById("wine-placeholder");e.innerHTML=`
|
|
951
|
-
<div class="error-message">
|
|
952
|
-
<p>${X.translate("errorMessage")||"Something went wrong. Please try again later."}</p>
|
|
953
|
-
</div>
|
|
954
|
-
`}animateCardDisappearance(){const e=document.querySelectorAll(".wine-recommendation-tile");e.forEach((n,s)=>{setTimeout(()=>{n.style.opacity="0",n.style.transform="translateY(-20px)"},s*100)}),setTimeout(()=>{document.getElementById("wine-placeholder").innerHTML="",this.showLoadingIndicator()},e.length*100+300)}initializeSearchAnimation(){const e=document.getElementById("wine-search-input"),n=X.translate("placeholderSuggestions");let s=0,i=0,r=!0,o=!1;const u=()=>{o||(r?(e.placeholder=n[s].substring(0,i++),i>n[s].length?(r=!1,setTimeout(u,2e3)):setTimeout(u,100)):(e.placeholder=n[s].substring(0,i--),i<0?(r=!0,s=(s+1)%n.length,setTimeout(u,500)):setTimeout(u,50)))};u(),e.addEventListener("focus",()=>{e.placeholder="",o=!0}),e.addEventListener("blur",()=>{o=!1,i=0,r=!0,u()})}enableHoverPopups(){document.querySelectorAll(".wine-recommendation-tile").forEach(n=>{const s=n.querySelector(".wine-hover-popup");s&&(n.addEventListener("mouseenter",()=>{s.style.display="block",s.classList.add("slide-in")}),n.addEventListener("mouseleave",()=>{s.classList.remove("slide-in"),s.style.display="none"}))})}}class Sa{constructor(e){this.widget=e}async handleSearch(){const e=document.getElementById("wine-search-input").value.trim()+";";this.widget.trackEvent(pe.SEARCH_PERFORMED,{query:e}),this.widget.ui.animateCardDisappearance();try{const n=await this.widget.api.getWineRecommendationsSearch(e);n&&n.length>0?(console.log("Recommendations:",n),this.widget.displayResults(n,!0),this.widget.trackEvent(pe.SEARCH_RESULTS_DISPLAYED,{results_count:n.length,results:n.map(s=>s.Title||s.title),query:e})):(console.log("No recommendations found."),this.widget.ui.displayNoResultsMessage(),this.widget.trackEvent(pe.NO_RESULTS_FOUND,{query:e}))}catch(n){console.error("Error fetching wine recommendations:",n.message),this.widget.ui.displayErrorMessage(),this.widget.trackEvent(pe.ERROR_OCCURRED,{error_message:n.message,query:e})}}async loadInstantRecommendations(){this.widget.ui.showLoadingIndicator();try{const e=await this.widget.api.getInstantRecommendations();this.widget.displayResults(e)}catch(e){console.error("Error loading instant recommendations:",e.message)}}addEventListeners(){document.getElementById("wine-search-button").addEventListener("click",()=>{this.handleSearch()}),document.getElementById("wine-search-input").addEventListener("keydown",e=>{e.key==="Enter"&&this.handleSearch()})}}class xa{constructor(e){this.widget=e}createLanguageSwitcher(){const e=document.querySelector("#powered-by-widget .powered-by-lang"),n=X.getSupportedLanguages();if(!n)return;const s=X.language,i=document.createElement("select");i.id="language-dropdown",i.className="language-dropdown",n.forEach(r=>{const o=document.createElement("option");o.value=r,o.textContent=r.toUpperCase(),o.selected=r===s,i.appendChild(o)}),i.onchange=r=>{const o=r.target.value;this.widget.trackEvent(pe.LANGUAGE_CHANGED,{from_language:s,to_language:o});const u=new URL(window.location.href);u.searchParams.set("lang",o),localStorage.setItem("selectedLanguage",o),window.location.href=u.toString()},e.appendChild(i)}async translatePopupContent(e){if(X.language===X.storeLanguage||this.widget.widgetType!=="bar")return;const n=["Short Description","reason","pairing_recommendation","Tags","tags"],s=e[0],i=n.filter(o=>o in s),r=4;for(let o=0;o<e.length;o+=r){const c=e.slice(o,o+r).map(async(l,a)=>{const d=o+a,p=i.map(x=>{const C=l[x]||l[x.toLowerCase()];return C?{key:x,text:Array.isArray(C)?C.join(", "):C}:null}).filter(Boolean);if(p.length===0)return;const v=await X.translateTexts(Object.fromEntries(p.map(x=>[x.key,x.text]))),w=document.querySelector(`.card-popup[data-wine-index="${d}"]`);if(!w)return;if(v["Short Description"]){const x=w.querySelector(".popup-short-desc");x&&(x.textContent=v["Short Description"])}if(v.reason){const x=w.querySelector(".popup-reason");x&&(x.textContent=v.reason)}if(v.pairing_recommendation){const x=w.querySelector(".popup-pairing");x&&(x.textContent=v.pairing_recommendation)}const y=v.tags||v.Tags;if(y){const C=y.split(",").map(R=>R.trim()).map(R=>`<span class="popup-tag">${R}</span>`).join(""),F=w.querySelector(".popup-tags");F&&(F.innerHTML=C)}});await Promise.all(c)}}}class ka{constructor(){var e,n,s,i,r;this.widgetType=((e=window==null?void 0:window.wineaterData)==null?void 0:e.WIDGET_TYPE)||"store",this.countryCode=((n=window==null?void 0:window.wineaterData)==null?void 0:n.COUNTRY_CODE)||null,this.widgetWrapper=((s=window==null?void 0:window.wineaterData)==null?void 0:s.WIDGET_WRAPPER)||"wineater-widget-conteiner",this.titleText=(i=window==null?void 0:window.wineaterData)==null?void 0:i.TITLE_TEXT,this.subtitleText=(r=window==null?void 0:window.wineaterData)==null?void 0:r.SUBTITLE_TEXT,this.storeId=null,this.api=new li,this.ui=new wa(this),this.search=new Sa(this),this.language=new xa(this),this.selectedFilters={price:null,color:null,intensity:null},this.initialized=this.initialize()}async trackEvent(e,n={},s={}){await this.initialized,bi(e,this.storeId,n,s)}async initialize(){await X.fetchConfig("storeName"),this.storeId=X.storeId,this.ui.initializeWidget(),this.search.addEventListeners(),this.ui.initializeSearchAnimation(),this.search.loadInstantRecommendations(),this.language.createLanguageSwitcher(),this.trackEvent(pe.WIDGET_INITIALIZED,{store_id:this.storeId})}displayResults(e,n=!1){const s=document.getElementById("wine-placeholder");this.ui.hideLoadingIndicator(),s.innerHTML="";const i=(l,a)=>l[a]||l[a.charAt(0).toUpperCase()+a.slice(1)],r=(l,a)=>a.map(d=>i(l,d)).filter(Boolean).join(" • "),o=l=>Array.isArray(l)?l.map(a=>`<span class="popup-tag">${a}</span>`).join(""):"",u=l=>{const a=l.tags||l.Tags,d=l.reason||l["Short Description"];return!d&&!a?"":`
|
|
955
|
-
<div class="wine-hover-popup">
|
|
956
|
-
${d?`<div class="popup-reason">${d}</div>`:""}
|
|
957
|
-
${a?`<div class="popup-tags">${o(a)}</div>`:""}
|
|
958
|
-
</div>`},c=l=>(typeof l!="number"&&(l=Number(l)),l.toLocaleString("en-US"));e.forEach(async(l,a)=>{const d=i(l,"title"),p=i(l,"image"),v=i(l,"total"),w=i(l,"url"),y=l.tags||l.Tags,x=r(l,["type","country","region","grape"]),C=y?o(y):"",F=u(l),R=l["Short Description"],E=l.pairing_recommendation,N=l.isSommSelection,D=`
|
|
959
|
-
<div class="wine-recommendation-tile ${N?"somm-selection":""}">
|
|
960
|
-
${N?`<div class="somm-selection-badge">${X.translate("wineDetails.sommSelection")}</div>`:""}
|
|
961
|
-
|
|
962
|
-
<div class="tile-top">
|
|
963
|
-
${p?`<img src="${p}" alt="${d}" class="wine-image" />`:""}
|
|
964
|
-
${v?`<div class="wine-price">${c(v)} ${X.getCurrency("label")}</div>`:""}
|
|
965
|
-
<h3 class="wine-title">${d}</h3>
|
|
966
|
-
</div>
|
|
967
|
-
|
|
968
|
-
${x?`<div class="wine-params">${x}</div>`:""}
|
|
969
|
-
|
|
970
|
-
<div class="bottom-row">
|
|
971
|
-
${w?`<a class="buy-btn" href="${w}" target="_blank">${X.translate("wineDetails.buy")}</a>`:`<button class="buy-btn" data-toggle-info>${X.translate("moreInfo")}</button>`}
|
|
972
|
-
</div>
|
|
973
|
-
|
|
974
|
-
<div class="card-popup hidden" data-wine-index="${a}">
|
|
975
|
-
<div class="card-popup-header">
|
|
976
|
-
<h2>${d}</h2>
|
|
977
|
-
<span class="card-popup-close">×</span>
|
|
978
|
-
</div>
|
|
979
|
-
${R?`<p class="popup-short-desc" data-orig="${R}">${R}</p>`:""}
|
|
980
|
-
${l.reason?`<div class="popup-reason" data-orig="${l.reason}">${l.reason}</div>`:E?`<p class="popup-pairing" data-orig="${E}">${E}</p>`:""}
|
|
981
|
-
${C?`<div class="popup-tags">${C}</div>`:""}
|
|
982
|
-
</div>
|
|
983
|
-
|
|
984
|
-
${F}
|
|
985
|
-
</div>
|
|
986
|
-
`;s.insertAdjacentHTML("beforeend",D);const L=s.children[a];if(L.addEventListener("click",I=>{!I.target.closest(".buy-btn")&&!I.target.closest(".card-popup-close")&&this.trackEvent(pe.WINE_CARD_CLICK,{wine_id:l.ID,wine_title:l.title||l.Title})}),!w&&this.widgetType==="bar"){const I=L.querySelector("[data-toggle-info]"),T=L.querySelector(".card-popup"),P=L.querySelector(".card-popup-close");P==null||P.addEventListener("click",H=>{H.stopPropagation(),T.classList.add("hidden"),this.trackEvent(pe.WINE_DETAILS_CLOSED,{wine_id:l.ID,wine_title:l.title||l.Title})}),document.addEventListener("click",H=>{H.target.closest(".card-popup")||H.target.closest(".mobile-fullscreen-popup")||H.target.closest("[data-toggle-info]")||(document.querySelectorAll(".card-popup").forEach(z=>z.classList.add("hidden")),document.querySelectorAll(".mobile-fullscreen-wrapper").forEach(z=>z.remove()))}),this.widgetType==="store"?(L.addEventListener("mouseenter",()=>{T.classList.remove("hidden"),this.trackEvent(pe.WINE_CARD_HOVER,{wine_id:l.ID,wine_title:l.title||l.Title})}),L.addEventListener("mouseleave",()=>{T.classList.add("hidden")})):I==null||I.addEventListener("click",H=>{var j;if(H.stopPropagation(),document.querySelectorAll(".card-popup").forEach(z=>z.classList.add("hidden")),document.querySelectorAll(".mobile-fullscreen-wrapper").forEach(z=>z.remove()),window.innerWidth<=768){const z=T.innerHTML,_=document.createElement("div");_.className="mobile-fullscreen-wrapper",_.innerHTML=`
|
|
987
|
-
<div class="mobile-fullscreen-overlay"></div>
|
|
988
|
-
<div class="card-popup mobile-fullscreen-popup">${z}</div>
|
|
989
|
-
`,(j=_.querySelector(".card-popup-close"))==null||j.addEventListener("click",()=>_.remove()),document.body.appendChild(_)}else T.classList.remove("hidden");this.trackEvent(pe.WINE_DETAILS_VIEWED,{wine_id:l.ID,wine_title:l.title||l.Title,is_mobile:window.innerWidth<=768})})}else{const I=L.querySelector(".buy-btn");I==null||I.addEventListener("click",()=>{this.trackEvent(pe.BUY_BUTTON_CLICKED,{wine_id:l.ID,wine_title:l.title||l.Title,wine_url:l.url||l.URL})})}setTimeout(()=>{L.style.opacity="1",L.style.transform="translateY(0)"},n?a*200:0)}),this.language.translatePopupContent(e),this.widgetType==="store"&&this.ui.enableHoverPopups()}}const Ea="HeUw6IXuhvz6tRuXdPEGEbj3SGQ3Q2YtEc1Z8jd41Kg9LtyPb4Epu0to31SYIadG";class Ta{constructor(){this.tracker=new ga({projectKey:"PA8j9fAi49i6g2QnvpNs",__DISABLE_SECURE_MODE:!0})}async initTranslator(){const e=this.store?this.store.charAt(0).toUpperCase()+this.store.slice(1):"Test";await X.fetchConfig(e||"Test")}initCookies(){var e;Nt("chatbotToken",((e=window.wineaterData)==null?void 0:e.CLIENT_TOKEN)||Ea,365),Un()}async initialize(){this.tracker.start(),await this.initTranslator(),this.initCookies(),new ka}}document.addEventListener("DOMContentLoaded",()=>{new Ta().initialize()})});
|
|
7
|
+
🎤 Please enable mic and camera if asked, to give us a complete picture.`),o=q("div","button",Cu,"Read guidelines to begin");this.removeGreeting=()=>((s||n)&&this.userRecorder.startRecording(30,ra.Standard,s,n),this.container.removeChild(o),this.container.removeChild(r),this.container.removeChild(i),!1),o.onclick=()=>{var c,u,l,h;this.removeGreeting();const a=(c=this.signalManager)==null?void 0:c.getDurations();a&&this.signalManager&&(a.testStart=this.app.timestamp(),this.signalManager.setDurations(a)),(u=this.signalManager)==null||u.signalTest("begin"),this.container.style.fontFamily='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',Object.assign(this.container.style,En),this.showWidget(((l=this.test)==null?void 0:l.guidelines)||"",((h=this.test)==null?void 0:h.tasks)||[])},this.container.append(i,r,o),this.bg.appendChild(this.container),document.body.appendChild(this.bg)}showWidget(e,s,n){this.container.innerHTML="",Object.assign(this.bg.style,{position:"fixed",zIndex:99999999999999,right:"8px",left:"unset",width:"fit-content",top:"8px",height:"fit-content",background:"unset",display:"unset",alignItems:"unset",justifyContent:"unset"});const i=this.createTitleSection();this.container.style.fontFamily='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',Object.assign(this.container.style,En);const r=this.createDescriptionSection(e),o=this.createTasksSection(s),a=q("div","stop_bn_or",ea,"Abort Session"),c=q("div","stop_ct_or",{fontSize:"13px!important"});c.style.fontSize="13px",c.append(a),this.container.append(i,r,o,c),this.taskSection=o,this.descriptionSection=r,this.stopButton=a,this.stopButtonContainer=c,a.onclick=()=>{var u;this.userRecorder.discard(),(u=this.signalManager)==null||u.signalTest("skipped"),document.body.removeChild(this.bg),window.close()},n?this.toggleDescriptionVisibility():this.hideTaskSection()}createTitleSection(){var a;const e=q("div","title",xu),s=Fu(),n=q("div","title_text",{maxWidth:"19rem",overflow:"hidden",textOverflow:"ellipsis",width:"100%",fontSize:16,lineHeight:"auto",cursor:"pointer"},(a=this.test)==null?void 0:a.title),i=ju();e.append(s,n,i);const r=c=>(this.widgetVisible=c,this.container.style.fontFamily='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',Object.assign(this.container.style,this.widgetVisible?En:{border:"none",background:"none",padding:0}),this.taskSection&&Object.assign(this.taskSection.style,this.widgetVisible?bs:{display:"none"}),this.descriptionSection&&Object.assign(this.descriptionSection.style,this.widgetVisible?bs:{display:"none"}),this.endSection&&Object.assign(this.endSection.style,this.widgetVisible?bs:{display:"none"}),this.stopButton&&Object.assign(this.stopButton.style,this.widgetVisible?ea:{display:"none"}),c),o=()=>{Object.assign(i.style,{transform:this.widgetVisible?"rotate(0deg)":"rotate(180deg)"}),r(!this.widgetVisible)};return n.onclick=o,i.onclick=o,Bu(this.bg,s),this.collapseWidget=()=>r(!1),e}createDescriptionSection(e){const s=q("div","description_section_or",bs),n=q("div","description_s_title_or",Qo),i=q("div","title",{fontSize:13,fontWeight:500,lineHeight:"auto"},"Introduction & Guidelines"),r=q("div","icon",Zo,"-"),o=q("div","content",vs),a=q("div","text_description",{maxHeight:"250px",overflowY:"auto",whiteSpace:"pre-wrap",fontSize:13,color:"#454545",lineHeight:"auto"});a.innerHTML=e;const c=q("div","button_begin_or",$o,"Begin Test");n.append(i,r),o.append(a,c),s.append(n,o);const u=()=>{this.widgetGuidelinesVisible=!this.widgetGuidelinesVisible,r.textContent=this.widgetGuidelinesVisible?"-":"+",Object.assign(o.style,this.widgetGuidelinesVisible?vs:{display:"none"})};return n.onclick=u,this.toggleDescriptionVisibility=()=>{this.widgetGuidelinesVisible=!1,r.textContent=this.widgetGuidelinesVisible?"-":"+",Object.assign(o.style,this.widgetGuidelinesVisible?vs:{display:"none"}),o.removeChild(c)},c.onclick=()=>{var l,h,f;if(u(),this.test){const d=(l=this.signalManager)==null?void 0:l.getDurations(),p=d?d.tasks.findIndex(m=>this.test&&m.taskId===this.test.tasks[0].task_id):null;d&&p===-1&&(d.tasks.push({taskId:this.test.tasks[0].task_id,started:this.app.timestamp()}),(h=this.signalManager)==null||h.setDurations(d)),(f=this.signalManager)==null||f.signalTask(this.test.tasks[0].task_id,"begin")}this.showTaskSection(),o.removeChild(c)},s}createTasksSection(e){this.container.style.fontFamily='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',Object.assign(this.container.style,En);const s=q("div","task_section_or",bs),n=q("div","description_t_title_or",Qo),i=q("div","title",{fontSize:"13px",fontWeight:"500",lineHeight:"auto"},"Tasks"),r=q("div","icon",Zo,"-"),o=q("div","content",vs),a=q("div","pagination",Ru),c=q("div","taskCard",sa),u=q("div","taskText",na),l=q("div","taskDescription",Ou),h=q("div","taskButtons",Au),f=q("div","taskText",na);f.textContent="Your answer";const d=q("textarea","taskDescription",{resize:"vertical"}),p=q("div","inputArea",sa);p.append(f,d);const m=q("div","closePanelButton",ia,"Collapse Panel"),_=q("div","nextButton",Mu,"Done, Next");n.append(i,r),c.append(u,l),h.append(m,_),o.append(a,c,p,h),s.append(n,o);const C=()=>{const g=e[this.currentTaskIndex];u.textContent=g.title,l.textContent=g.description,g.allow_typing?p.style.display="flex":p.style.display="none"};e.forEach((g,v)=>{const I=q("span",`or_task_${v}`,{outline:"1px solid #efefef",fontSize:"13px",height:"24px",width:"24px",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",borderRadius:"6.25em"},(v+1).toString());I.id=`or_task_${v}`,a.append(I)});const T=()=>{this.widgetTasksVisible=!this.widgetTasksVisible,r.textContent=this.widgetTasksVisible?"-":"+",Object.assign(o.style,this.widgetTasksVisible?vs:{display:"none"})};this.hideTaskSection=()=>(r.textContent="+",Object.assign(o.style,{display:"none"}),this.widgetTasksVisible=!1,!1),this.showTaskSection=()=>(r.textContent="-",Object.assign(o.style,vs),this.widgetTasksVisible=!0,!0);const y=()=>{const g=document.getElementById(`or_task_${this.currentTaskIndex}`);g&&Object.assign(g.style,ta);for(let v=0;v<this.currentTaskIndex;v++){const I=document.getElementById(`or_task_${v}`);I&&Object.assign(I.style,Du)}};return n.onclick=T,m.onclick=this.collapseWidget,_.onclick=()=>{var v,I,x,S;const g=e[this.currentTaskIndex].allow_typing?d.value:void 0;if(d.value="",(v=this.signalManager)==null||v.signalTask(e[this.currentTaskIndex].task_id,"done",g),this.currentTaskIndex<e.length-1){this.currentTaskIndex++,C();const k=(I=this.signalManager)==null?void 0:I.getDurations();k&&k.tasks.findIndex(A=>A.taskId===e[this.currentTaskIndex].task_id)===-1&&(k.tasks.push({taskId:e[this.currentTaskIndex].task_id,started:this.app.timestamp()}),(x=this.signalManager)==null||x.setDurations(k)),(S=this.signalManager)==null||S.signalTask(e[this.currentTaskIndex].task_id,"begin"),y()}else this.showEndSection();this.app.localStorage.setItem("or_uxt_task_index",this.currentTaskIndex.toString())},setTimeout(()=>{const g=document.getElementById("or_task_0");g&&Object.assign(g.style,ta),C(),y()},1),s}showEndSection(){var a,c,u,l;let e=!0;(a=this.signalManager)==null||a.signalTest("done");const s=q("div","end_section_or",Nu),n=q("div","end_title_or",{fontSize:"1.25rem",fontWeight:"500"},"Thank you! 👍"),i=q("div","end_description_or",{},((c=this.test)==null?void 0:c.conclusion)??`Thank you for participating in our usability test. Your feedback has been captured and will be used to enhance our website.
|
|
8
|
+
|
|
9
|
+
We appreciate your time and valuable input.`),r=q("div","end_button_or",$o,"Submitting Feedback"),o=zu();r.appendChild(o),(u=this.test)!=null&&u.reqMic||(l=this.test)!=null&&l.reqCamera?this.userRecorder.sendToAPI().then(()=>{r.removeChild(o),r.textContent="End Session",e=!1}).catch(h=>{console.error(h),r.removeChild(o),r.textContent="End Session",e=!1}):(r.removeChild(o),r.textContent="End Session",e=!1),this.taskSection&&this.container.removeChild(this.taskSection),this.descriptionSection&&this.container.removeChild(this.descriptionSection),this.stopButton&&this.stopButtonContainer&&this.container.removeChild(this.stopButtonContainer),r.onclick=()=>{e||(window.close(),document.body.removeChild(this.bg))},s.append(n,i,r),this.endSection=s,this.container.append(s)}}function oa(t){return!!t&&t.nodeType!=null}function ji(t){return t.namespaceURI==="http://www.w3.org/2000/svg"}function gt(t){return t.nodeType===Node.ELEMENT_NODE}function Vu(t){return t.nodeType===Node.COMMENT_NODE}function Ui(t){return t.nodeType===Node.TEXT_NODE}function Cn(t){return t.nodeType===Node.DOCUMENT_NODE}function xn(t){return t.nodeType===Node.DOCUMENT_NODE||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function he(t,e){return t.localName===e}class Gu{constructor(e,s){this.app=e,this.options=s,this.snapshots={},this.intervals=[],this.restartTracking=()=>{this.clear(),this.app.nodes.scanTree(this.captureCanvas)},this.captureCanvas=n=>{const i=this.app.nodes.getID(n);if(!i||!he(n,"canvas")||this.app.sanitizer.isObscured(i)||this.app.sanitizer.isHidden(i)||!he(n,"canvas")||this.snapshots[i])return;new IntersectionObserver(a=>{a.forEach(c=>{c.isIntersecting&&(c.target?this.snapshots[i]&&this.snapshots[i].createdAt?this.snapshots[i].paused=!1:this.recordCanvas(c.target,i):this.snapshots[i]&&(this.snapshots[i].paused=!0))})}).observe(n)},this.recordCanvas=(n,i)=>{const r=this.app.timestamp();this.snapshots[i]={images:[],createdAt:r,paused:!1,dummy:document.createElement("canvas")};const o=bu(i.toString(),r);this.app.send(o);const a=u=>{Ku(u,this.options.quality,this.snapshots[i].dummy,this.options.fixedScaling,this.fileExt,l=>{if(l){if(!this.snapshots[i])return this.app.debug.warn("Canvas not present in snapshots after capture:",this.snapshots,i);this.snapshots[i].images.push({id:this.app.timestamp(),data:l}),this.snapshots[i].images.length>9&&(this.sendSnaps(this.snapshots[i].images,i,this.snapshots[i].createdAt),this.snapshots[i].images=[])}})},c=setInterval(()=>{const u=this.app.nodes.getID(n),l=u?this.app.nodes.getNode(u):void 0;if(!this.snapshots[i]){this.app.debug.log("Canvas is not present in {snapshots}"),clearInterval(c);return}if(!l||!he(l,"canvas")||l!==n){this.app.debug.log("Canvas element not in sync",l,n),clearInterval(c);return}else this.snapshots[i].paused||(this.options.useAnimationFrame?requestAnimationFrame(()=>{a(l)}):a(l))},this.interval);this.intervals.push(c)},this.fileExt=s.fileExt??"webp",this.interval=1e3/s.fps}startTracking(){setTimeout(()=>{this.app.nodes.scanTree(this.captureCanvas),this.app.nodes.attachNodeCallback(this.captureCanvas)},250)}sendSnaps(e,s,n){if(Object.keys(this.snapshots).length===0)return;const i=new FormData;e.forEach(o=>{const a=o.data;a&&(i.append("snapshot",a,`${n}_${s}_${o.id}.${this.fileExt}`),this.options.isDebug&&Xu(a,`${n}_${s}_${o.id}.${this.fileExt}`))});const r=()=>{this.app.debug.log("Restarting tracker; token expired"),this.app.stop(!1),setTimeout(()=>{this.app.start({},!0)},250)};fetch(this.app.options.ingestPoint+"/v1/web/images",{method:"POST",headers:{Authorization:`Bearer ${this.app.session.getSessionToken()??""}`},body:i}).then(o=>o.status===401?r():!0).catch(o=>{this.app.debug.error("error saving canvas",o)})}clear(){this.intervals.forEach(e=>clearInterval(e)),this.snapshots={}}}const aa={low:.35,medium:.55,high:.8};function Ku(t,e="medium",s,n=!1,i,r){const o=`image/${i}`;if(n){const a=window.devicePixelRatio||1;s.width=t.width/a,s.height=t.height/a;const c=s.getContext("2d");if(!c)return"";c.clearRect(0,0,s.width,s.height),c.drawImage(t,0,0,s.width,s.height),s.toBlob(r,o,aa[e])}else t.toBlob(r,o,aa[e])}function Xu(t,e){const s=URL.createObjectURL(t),n=document.createElement("a");n.href=s,n.download=e,n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)}const ys={Verbose:5,Log:4,Warnings:3,Errors:2,Silent:0};class Ju{constructor(e=ys.Silent){this.shouldLog=s=>this.level>=s,this.info=(...s)=>{this.shouldLog(ys.Verbose)&&console.info(...s)},this.log=(...s)=>{this.shouldLog(ys.Log)&&console.log(...s)},this.warn=(...s)=>{this.shouldLog(ys.Warnings)&&console.warn(...s)},this.error=(...s)=>{this.shouldLog(ys.Errors)&&console.error(...s)},this.level=e}}const Yu=1e3;function Qu(t,e,s){const n=t.entries();function i(){const r=[];let o=n.next();for(;!o.done&&r.length<e;)r.push(o.value),o=n.next();r.length>0&&(r.forEach(([a,c])=>{c&&s(c)}),setTimeout(i,50))}i()}function Zu(t){var e;try{if(!t.isConnected)return[!1,"not connected"];const s=t.nodeType===Node.DOCUMENT_NODE,n=s?t.defaultView:(e=t.ownerDocument)==null?void 0:e.defaultView,i=s?t:t.ownerDocument;return n?n.closed?[!1,"window closed"]:i!=null&&i.documentElement.isConnected?[!0,"ok"]:[!1,"documentElement not connected"]:[!1,"no window"]}catch(s){return[!1,s]}}const $u={interval:Yu*30,batchSize:2500,enabled:!0};class eh{constructor(e,s,n){this.nodes=e,this.unregisterNode=s,this.start=()=>{this.options.enabled&&(this.stop(),this.interval=setInterval(()=>{Qu(this.nodes,this.options.batchSize,i=>{Zu(i)[0]||this.unregisterNode(i)})},this.options.interval))},this.stop=()=>{this.interval&&clearInterval(this.interval)},this.options={...$u,...n}}}class th{constructor(e){this.nodes=new Map,this.totalNodeAmount=0,this.nodeCallbacks=[],this.elementListeners=new Map,this.nextNodeId=0,this.scanTree=s=>{this.nodes.forEach(n=>n?s(n):void 0)},this.attachNodeListener=(s,n,i,r=!0)=>{const o=this.getID(s);if(o===void 0)return;Bo(s,n,i,r,this.forceNgOff);let a=this.elementListeners.get(o);a===void 0&&(a=[],this.elementListeners.set(o,a)),a.push([n,i,r])},this.unregisterNode=s=>{const n=s[this.node_id];if(n!==void 0){s[this.node_id]=void 0,delete s[this.node_id],this.nodes.delete(n);const i=this.elementListeners.get(n);i!==void 0&&(this.elementListeners.delete(n),i.forEach(r=>Fo(s,r[0],r[1],r[2],this.forceNgOff))),this.totalNodeAmount--}return n},this.node_id=e.node_id,this.forceNgOff=e.forceNgOff,this.maintainer=new eh(this.nodes,this.unregisterNode,e.maintainer),this.maintainer.start()}syntheticMode(e){const s=Number.MAX_SAFE_INTEGER,i=99999999*e;if(i>s)throw new Error("Placeholder id overflow");this.nextNodeId=i}attachNodeCallback(e){return this.nodeCallbacks.push(e)}registerNode(e){let s=e[this.node_id];const n=s===void 0;return n&&(s=this.nextNodeId,this.totalNodeAmount++,this.nextNodeId++,this.nodes.set(s,e),e[this.node_id]=s),[s,n]}cleanTree(){for(const[e,s]of this.nodes)s&&!document.contains(s)&&this.unregisterNode(s)}callNodeCallbacks(e,s){this.nodeCallbacks.forEach(n=>n(e,s))}getID(e){if(e)return e[this.node_id]}getNode(e){return this.nodes.get(e)}getNodeCount(){return this.totalNodeAmount}clear(){for(const[e,s]of this.nodes)s&&this.unregisterNode(s);this.nextNodeId=0,this.nodes.clear()}}function Nn(t){if(Vu(t))return!0;if(Ui(t))return!1;if(!gt(t))return!0;const e=t.tagName.toUpperCase();if(e==="LINK"){const s=t.getAttribute("rel"),n=t.getAttribute("as");return!(s!=null&&s.includes("stylesheet")||n==="style"||n==="font")}return e==="SCRIPT"||e==="NOSCRIPT"||e==="META"||e==="TITLE"||e==="BASE"}function zi(t){return xn(t)?!0:!Nn(t)}var st;(function(t){t[t.New=0]="New",t[t.Removed=1]="Removed",t[t.Changed=2]="Changed"})(st||(st={}));class Wi{constructor(e,s=!1){this.app=e,this.isTopContext=s,this.commited=[],this.recents=new Map,this.indexes=[],this.attributesMap=new Map,this.textSet=new Set,this.observer=Lo(this.app.safe(n=>{for(const i of n){const r=i.target,o=i.type;if(!zi(r))continue;if(o==="childList"){for(let c=0;c<i.removedNodes.length;c++)zi(i.removedNodes[c])&&this.bindNode(i.removedNodes[c]);for(let c=0;c<i.addedNodes.length;c++)this.bindTree(i.addedNodes[c]);continue}const a=this.app.nodes.getID(r);if(a!==void 0){if(this.recents.has(a)||this.recents.set(a,st.Changed),o==="attributes"){const c=i.attributeName;if(c===null)continue;let u=this.attributesMap.get(a);u===void 0&&this.attributesMap.set(a,u=new Set),u.add(c);continue}o==="characterData"&&this.textSet.add(a)}}this.commitNodes()}),this.app.options.forceNgOff)}clear(){this.commited.length=0,this.recents.clear(),this.indexes.length=1,this.attributesMap.clear(),this.textSet.clear()}handleIframeSrcChange(e){const s=e.contentDocument;if(s&&this.app.nodes.getID(s)!==void 0){const i=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT+NodeFilter.SHOW_TEXT,{acceptNode:c=>Nn(c)||this.app.nodes.getID(c)===void 0?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},!1);let r=0;const o=this.app.nodes.getNodeCount();for(;i.nextNode();)e.contentDocument.contains(i.currentNode)||(r+=1,this.app.nodes.unregisterNode(i.currentNode));const a=Math.floor(r/o*100);a>30&&this.app.send(Xo(a))}}sendNodeAttribute(e,s,n,i){if(ji(s)){n.substring(0,6)==="xlink:"&&(n=n.substring(6)),i===null?this.app.send(Uo(e,n)):n==="href"?(i.length>1e5&&(i=""),this.app.send(Ri(e,n,i,this.app.getBaseHref()))):this.app.attributeSender.sendSetAttribute(e,n,i);return}if(!(n==="src"||n==="srcset"||n==="integrity"||n==="crossorigin"||n==="autocomplete"||n.substring(0,2)==="on")&&!(n==="value"&&he(s,"input")&&s.type!=="button"&&s.type!=="reset"&&s.type!=="submit")){if(i===null){this.app.send(Uo(e,n));return}if(n==="style"||n==="href"&&he(s,"link")){this.app.send(Ri(e,n,i,this.app.getBaseHref()));return}(n==="href"||i.length>1e5)&&(i=""),this.app.attributeSender.sendSetAttribute(e,n,i)}}sendNodeData(e,s,n){if(he(s,"style")){this.app.send(uu(e,n,this.app.getBaseHref()));return}n=this.app.sanitizer.sanitize(e,n),this.app.send(Yc(e,n))}bindNode(e){const[s,n]=this.app.nodes.registerNode(e);n?this.recents.set(s,st.New):this.recents.get(s)!==st.New&&this.recents.set(s,st.Removed)}bindTree(e){if(!zi(e))return;this.bindNode(e);const s=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT+NodeFilter.SHOW_TEXT,{acceptNode:n=>(this.app.nodes.getID(n)!==void 0&&this.app.debug.error("! Node is already bound",n),Nn(n)||this.app.nodes.getID(n)!==void 0?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT)},!1);for(;s.nextNode();)this.bindNode(s.currentNode)}unbindTree(e){const s=this.app.nodes.unregisterNode(e);if(s!==void 0&&this.recents.get(s)===st.Removed){this.app.send(Jc(s));const n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT+NodeFilter.SHOW_TEXT,{acceptNode:a=>Nn(a)||this.app.nodes.getID(a)===void 0?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},!1);let i=0;const r=this.app.nodes.getNodeCount();for(;n.nextNode();)i+=1,this.app.nodes.unregisterNode(n.currentNode);const o=Math.floor(i/r*100);o>30&&this.app.send(Xo(o))}}_commitNode(e,s){if(xn(s))return!0;const n=s.parentNode;let i;if(!he(s,"html")||!this.isTopContext){if(n===null)return this.unbindTree(s),!1;if(i=this.app.nodes.getID(n),i===void 0)return this.unbindTree(s),!1;if(!this.commitNode(i))return this.unbindTree(s),!1;if(this.app.sanitizer.handleNode(e,i,s),this.app.sanitizer.isHidden(i))return!1}let r=s.previousSibling;for(;r!==null;){const l=this.app.nodes.getID(r);if(l!==void 0){this.commitNode(l),this.indexes[e]=this.indexes[l]+1;break}r=r.previousSibling}r===null&&(this.indexes[e]=0);const o=this.recents.get(e),a=o===st.New,c=this.indexes[e];if(c===void 0)throw"commitNode: missing node index";if(a){if(gt(s)){let l=s;if(i!==void 0){if(this.app.sanitizer.isHidden(e)){const h=l.clientWidth,f=l.clientHeight;l=s.cloneNode(),l.style.width=`${h}px`,l.style.height=`${f}px`}this.app.send(Gc(e,i,c,l.tagName,ji(s)))}for(let h=0;h<l.attributes.length;h++){const f=l.attributes[h];this.sendNodeAttribute(e,l,f.nodeName,f.value)}}else Ui(s)&&(this.app.send(Kc(e,i,c)),this.sendNodeData(e,n,s.data));return!0}o===st.Removed&&i!==void 0&&this.app.send(Xc(e,i,c));const u=this.attributesMap.get(e);if(u!==void 0){if(!gt(s))throw"commitNode: node is not an element";for(const l of u)this.sendNodeAttribute(e,s,l,s.getAttribute(l))}if(this.textSet.has(e)){if(!Ui(s))throw"commitNode: node is not a text";this.sendNodeData(e,n,s.data)}return!0}commitNode(e){const s=this.app.nodes.getNode(e);if(s===void 0)return!1;const n=this.commited[e];return n!==void 0?n:this.commited[e]=this._commitNode(e,s)}commitNodes(e=!1){let s;this.recents.forEach((n,i)=>{this.commitNode(i),n===st.New&&(s=this.app.nodes.getNode(i))&&this.app.nodes.callNodeCallbacks(s,e)}),this.clear()}observeRoot(e,s,n=e){this.observer.observe(e,{childList:!0,attributes:!0,characterData:!0,subtree:!0,attributeOldValue:!1,characterDataOldValue:!1}),this.bindTree(n),s(this.app.nodes.getID(e)),this.commitNodes(!0)}disconnect(){this.observer.disconnect(),this.clear()}}class la extends Wi{observe(e){const s=e.contentDocument,n=this.app.nodes.getID(e);!s||n===void 0||this.observeRoot(s,i=>{if(i===void 0){this.app.debug.log("OpenReplay: Iframe document not bound");return}this.docId=i,this.app.send(Di(n,i))})}syntheticObserve(e,s){this.observeRoot(s,n=>{if(n===void 0){this.app.debug.log("OpenReplay: Iframe document not bound");return}this.app.send(Di(e,n))})}}class sh extends Wi{observe(e){const s=e.shadowRoot,n=this.app.nodes.getID(e);!s||n===void 0||this.observeRoot(s,i=>{if(i===void 0){this.app.debug.error("OpenReplay: Shadow Root was not bound");return}this.app.send(Di(n,i))})}}class nh{constructor(){this.states=new WeakMap}calcOffset(e){let s=0,n=0;if(e.parent&&([s,n]=this.calcOffset(e.parent)),!e.offset){const{left:o,top:a}=e.iFrame.getBoundingClientRect();e.offset=[o,a]}const[i,r]=e.offset;return[s+i,n+r]}getDocumentOffset(e){const s=this.states.get(e);return s?this.calcOffset(s):[0,0]}observe(e){var a;const s=e.contentDocument;if(!s)return;const n=e.ownerDocument,i=this.states.get(n),r={offset:null,iFrame:e,parent:i||null,clear:()=>{var c;n.removeEventListener("scroll",o),(c=n.defaultView)==null||c.removeEventListener("resize",o)}},o=()=>{r.offset=null};n.addEventListener("scroll",o),(a=n.defaultView)==null||a.addEventListener("resize",o),this.states.set(s,r)}clear(){this.states=new WeakMap}}const Hi=tt?Element.prototype.attachShadow:()=>new ShadowRoot;class ih extends Wi{constructor(e){super(e.app,!0),this.iframeOffsets=new nh,this.contextCallbacks=[],this.contextsSet=new WeakSet,this.iframeObserversArr=[],this.iframeObservers=new WeakMap,this.docObservers=new WeakMap,this.shadowRootObservers=new WeakMap,this.app=e.app,this.options=Object.assign({captureIFrames:!0},e.options),this.app.nodes.attachNodeCallback(s=>{he(s,"iframe")&&(this.options.captureIFrames&&!qt(s,"obscured")||qt(s,"capture"))&&this.handleIframe(s)}),this.app.nodes.attachNodeCallback(s=>{gt(s)&&s.shadowRoot!==null&&this.handleShadowRoot(s.shadowRoot)})}attachContextCallback(e){this.contextCallbacks.push(e)}getDocumentOffset(e){return this.iframeOffsets.getDocumentOffset(e)}handleIframe(e){const s=this.app.safe(()=>setTimeout(()=>{const n=this.app.nodes.getID(e);if(n===void 0||!Fc(e))return;const i=e.contentWindow,r=e.contentDocument;if(!r){this.app.debug.warn("no doc for iframe found",e);return}if(r&&this.docObservers.has(r)){this.app.debug.info("doc already observed for",n);return}const o=new la(this.app);this.iframeObservers.set(e,o),this.docObservers.set(r,o),this.iframeObserversArr.push(o),o.observe(e),this.iframeOffsets.observe(e),i&&i===i.window&&!this.contextsSet.has(i)&&(this.contextsSet.add(i),this.contextCallbacks.forEach(a=>a(i)))},250));e.addEventListener("load",s),s()}handleShadowRoot(e){const s=new sh(this.app);this.shadowRootObservers.set(e,s),s.observe(e.host)}observe(){const e=this;Element.prototype.attachShadow=function(){const s=Hi.apply(this,arguments);return e.handleShadowRoot(s),s},this.app.nodes.clear(),this.observeRoot(window.document,()=>{this.app.send(Vc()),this.app.nodes.callNodeCallbacks(document,!0)},window.document.documentElement)}crossdomainObserve(e,s){const n=this;Element.prototype.attachShadow=function(){const r=Hi.apply(this,arguments);return n.handleShadowRoot(r),r},this.app.nodes.clear(),this.app.nodes.syntheticMode(s);const i=new la(this.app);this.iframeObservers.set(window.document,i),i.syntheticObserve(e,window.document)}disconnect(){this.iframeOffsets.clear(),Element.prototype.attachShadow=Hi,this.iframeObserversArr.forEach(e=>e.disconnect()),this.iframeObserversArr=[],this.iframeObservers=new WeakMap,this.shadowRootObservers=new WeakMap,this.docObservers=new WeakMap,super.disconnect()}}var Rn;(function(t){t[t.Plain=0]="Plain",t[t.Obscured=1]="Obscured",t[t.Hidden=2]="Hidden"})(Rn||(Rn={}));const rh=t=>t.trim().replace(/[^\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]/g,"█");class oh{constructor(e){this.obscured=new Set,this.hidden=new Set,this.app=e.app,this.options=Object.assign({obscureTextEmails:!0,obscureTextNumbers:!1},e.options)}handleNode(e,s,n){if((this.obscured.has(s)||gt(n)&&(qt(n,"masked")||qt(n,"obscured")))&&this.obscured.add(e),(this.hidden.has(s)||gt(n)&&(qt(n,"htmlmasked")||qt(n,"hidden")))&&this.hidden.add(e),this.options.domSanitizer!==void 0&>(n)){const i=this.options.domSanitizer(n);i===Rn.Obscured&&this.obscured.add(e),i===Rn.Hidden&&this.hidden.add(e)}}sanitize(e,s){return this.obscured.has(e)?rh(s):(this.options.obscureTextNumbers&&(s=s.replace(/\d/g,"0")),this.options.obscureTextEmails&&(s=s.replace(/^\w+([+.-]\w+)*@\w+([.-]\w+)*\.\w{2,3}$/g,n=>{const[i,r]=n.split("@"),[o,a]=r.split(".");return`${Ci(i)}@${Ci(o)}.${Ci(a)}`})),s)}isObscured(e){return this.obscured.has(e)}isHidden(e){return this.hidden.has(e)}getInnerTextSecure(e){const s=this.app.nodes.getID(e);return s?this.sanitize(s,e.innerText):""}clear(){this.obscured.clear(),this.hidden.clear()}}class ah{constructor(e){this.metadata={},this.userID=null,this.callbacks=[],this.timestamp=0,this.app=e.app,this.options=e.options,this.createTabId()}attachUpdateCallback(e){this.callbacks.push(e)}handleUpdate(e){e.userID==null&&delete e.userID,e.sessionID==null&&delete e.sessionID,this.callbacks.forEach(s=>s(e))}assign(e){e.userID!==void 0&&(this.userID=e.userID),e.metadata!==void 0&&Object.entries(e.metadata).forEach(([s,n])=>this.metadata[s]=n),e.sessionID!==void 0&&(this.sessionID=e.sessionID),e.timestamp!==void 0&&(this.timestamp=e.timestamp),e.projectID!==void 0&&(this.projectID=e.projectID),this.handleUpdate(e)}setMetadata(e,s){this.metadata[e]=s,this.handleUpdate({metadata:{[e]:s}})}setUserID(e){this.userID=e,this.handleUpdate({userID:e})}setUserInfo(e){this.userInfo=e}getPageNumber(){const e=this.app.sessionStorage.getItem(this.options.session_pageno_key);if(e!=null)return parseInt(e)}incPageNo(){let e=this.getPageNumber();return e===void 0?e=0:e++,this.app.sessionStorage.setItem(this.options.session_pageno_key,e.toString()),e}getSessionToken(){return this.token||this.app.sessionStorage.getItem(this.options.session_token_key)||void 0}setSessionToken(e){this.token=e,this.app.sessionStorage.setItem(this.options.session_token_key,e)}applySessionHash(e){const s=decodeURI(e).split("&");let n=e,i="100500";s.length==2&&([i,n]=s),!(!i||!n)&&(this.app.sessionStorage.setItem(this.options.session_token_key,n),this.app.sessionStorage.setItem(this.options.session_pageno_key,i))}getSessionHash(){const e=this.getPageNumber(),s=this.getSessionToken();if(!(e===void 0||s===void 0))return encodeURI(String(e)+"&"+s)}getTabId(){return this.tabId||this.createTabId(),this.tabId}regenerateTabId(){const e=jc(12);this.app.sessionStorage.setItem(this.options.session_tabid_key,e),this.tabId=e}createTabId(){const e=this.app.sessionStorage.getItem(this.options.session_tabid_key);e?this.tabId=e:this.regenerateTabId()}getInfo(){return{sessionID:this.sessionID,metadata:this.metadata,userID:this.userID,timestamp:this.timestamp,projectID:this.projectID}}reset(){this.app.sessionStorage.removeItem(this.options.session_token_key),this.metadata={},this.userID=null,this.sessionID=void 0,this.timestamp=0}}function lh(t,e){let s=0;return()=>{s++>=e&&(s=0,t())}}class ch{constructor(e){this.app=e,this.timer=null,this.callbacks=[]}attach(e,s=0,n=!0,i){i&&(e=e.bind(i)),n&&(e=this.app.safe(e)),this.callbacks.unshift(s?lh(e,s):e)-1}start(){this.timer===null&&(this.timer=setInterval(()=>this.callbacks.forEach(e=>{e&&e()}),30))}stop(){this.timer!==null&&(clearInterval(this.timer),this.timer=null)}}const uh='!function(){"use strict";class t{constructor(t,s,i,e=10,n=250,h,r){this.onUnauthorised=s,this.onFailure=i,this.MAX_ATTEMPTS_COUNT=e,this.ATTEMPT_TIMEOUT=n,this.onCompress=h,this.pageNo=r,this.attemptsCount=0,this.busy=!1,this.queue=[],this.token=null,this.lastBatchNum=0,this.ingestURL=t+"/v1/web/i",this.isCompressing=void 0!==h}getQueueStatus(){return 0===this.queue.length&&!this.busy}authorise(t){this.token=t,this.busy||this.sendNext()}push(t){if(this.busy||!this.token)this.queue.push(t);else if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}}sendNext(){const t=this.queue.shift();if(t)if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}else this.busy=!1}retry(t,s,i){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure(`Failed to send batch after ${this.attemptsCount} attempts.`):(this.attemptsCount++,setTimeout((()=>this.sendBatch(t,s,i)),this.ATTEMPT_TIMEOUT*this.attemptsCount))}sendBatch(t,s,i){var e;const n=null==i?void 0:i.toString().replace(/^([^_]+)_([^_]+).*/,"$1_$2_$3");this.busy=!0;const h={Authorization:`Bearer ${this.token}`};s&&(h["Content-Encoding"]="gzip"),null!==this.token?fetch(`${this.ingestURL}?batch=${null!==(e=this.pageNo)&&void 0!==e?e:"noPageNum"}_${null!=n?n:"noBatchNum"}`,{body:t,method:"POST",headers:h,keepalive:t.length<65536}).then((e=>{if(401===e.status)return this.busy=!1,void this.onUnauthorised();e.status>=400?this.retry(t,s,`${null!=i?i:"noBatchNum"}_network:${e.status}`):(this.attemptsCount=0,this.sendNext())})).catch((e=>{console.warn("OpenReplay:",e),this.retry(t,s,`${null!=i?i:"noBatchNum"}_reject:${e.message}`)})):setTimeout((()=>{this.sendBatch(t,s,`${null!=i?i:"noBatchNum"}_newToken`)}),500)}sendCompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!0,s)}sendUncompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}clean(){this.sendNext(),setTimeout((()=>{this.token=null,this.queue.length=0}),10)}}const s="function"==typeof TextEncoder?new TextEncoder:{encode(t){const s=t.length,i=new Uint8Array(3*s);let e=-1;for(let n=0,h=0,r=0;r!==s;){if(n=t.charCodeAt(r),r+=1,n>=55296&&n<=56319){if(r===s){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;break}if(h=t.charCodeAt(r),!(h>=56320&&h<=57343)){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;continue}if(n=1024*(n-55296)+h-56320+65536,r+=1,n>65535){i[e+=1]=240|n>>>18,i[e+=1]=128|n>>>12&63,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n;continue}}n<=127?i[e+=1]=0|n:n<=2047?(i[e+=1]=192|n>>>6,i[e+=1]=128|63&n):(i[e+=1]=224|n>>>12,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n)}return i.subarray(0,e+1)}};class i{constructor(t){this.size=t,this.offset=0,this.checkpointOffset=0,this.data=new Uint8Array(t)}getCurrentOffset(){return this.offset}checkpoint(){this.checkpointOffset=this.offset}get isEmpty(){return 0===this.offset}skip(t){return this.offset+=t,this.offset<=this.size}set(t,s){this.data.set(t,s)}boolean(t){return this.data[this.offset++]=+t,this.offset<=this.size}uint(t){for((t<0||t>Number.MAX_SAFE_INTEGER)&&(t=0);t>=128;)this.data[this.offset++]=t%256|128,t=Math.floor(t/128);return this.data[this.offset++]=t,this.offset<=this.size}int(t){return t=Math.round(t),this.uint(t>=0?2*t:-2*t-1)}string(t){const i=s.encode(t),e=i.byteLength;return!(!this.uint(e)||this.offset+e>this.size)&&(this.data.set(i,this.offset),this.offset+=e,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}class e extends i{encode(t){switch(t[0]){case 0:case 11:case 114:case 115:return this.uint(t[1]);case 4:case 44:case 47:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3]);case 5:case 20:case 38:case 70:case 75:case 76:case 77:case 82:return this.uint(t[1])&&this.uint(t[2]);case 6:return this.int(t[1])&&this.int(t[2]);case 7:return!0;case 8:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.string(t[4])&&this.boolean(t[5]);case 9:case 10:case 24:case 51:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3]);case 12:case 61:case 71:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3]);case 13:case 14:case 17:case 50:case 54:return this.uint(t[1])&&this.string(t[2]);case 16:return this.uint(t[1])&&this.int(t[2])&&this.int(t[3]);case 18:return this.uint(t[1])&&this.string(t[2])&&this.int(t[3]);case 19:return this.uint(t[1])&&this.boolean(t[2]);case 21:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8]);case 22:case 27:case 30:case 41:case 45:case 46:case 63:case 64:case 79:return this.string(t[1])&&this.string(t[2]);case 23:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 28:case 29:case 42:case 117:case 118:return this.string(t[1]);case 37:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3]);case 39:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7]);case 40:return this.string(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 48:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.int(t[5]);case 49:return this.int(t[1])&&this.int(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 53:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8]);case 55:return this.boolean(t[1]);case 57:case 60:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 58:case 120:return this.int(t[1]);case 59:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6])&&this.string(t[7]);case 67:case 73:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 68:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6]);case 69:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 78:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 81:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.int(t[4])&&this.string(t[5]);case 83:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 84:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6]);case 112:return this.uint(t[1])&&this.string(t[2])&&this.boolean(t[3])&&this.string(t[4])&&this.int(t[5])&&this.int(t[6]);case 113:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3]);case 116:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8])&&this.uint(t[9])&&this.boolean(t[10]);case 119:return this.string(t[1])&&this.uint(t[2]);case 121:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 122:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 123:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])}}}class n{constructor(t,s,i,n,h,r){this.pageNo=t,this.timestamp=s,this.url=i,this.onBatch=n,this.tabId=h,this.onOfflineEnd=r,this.nextIndex=0,this.beaconSize=2e5,this.encoder=new e(this.beaconSize),this.sizeBuffer=new Uint8Array(3),this.isEmpty=!0,this.beaconSizeLimit=1e6,this.prepare()}writeType(t){return this.encoder.uint(t[0])}writeFields(t){return this.encoder.encode(t)}writeSizeAt(t,s){for(let s=0;s<3;s++)this.sizeBuffer[s]=t>>8*s;this.encoder.set(this.sizeBuffer,s)}prepare(){if(!this.encoder.isEmpty)return;const t=[81,1,this.pageNo,this.nextIndex,this.timestamp,this.url],s=[118,this.tabId];this.writeType(t),this.writeFields(t),this.writeWithSize(s),this.isEmpty=!0}writeWithSize(t){const s=this.encoder;if(!this.writeType(t)||!s.skip(3))return!1;const i=s.getCurrentOffset(),e=this.writeFields(t);if(e){const e=s.getCurrentOffset()-i;if(e>16777215)return console.warn("OpenReplay: max message size overflow."),!1;this.writeSizeAt(e,i-3),s.checkpoint(),this.isEmpty=this.isEmpty&&0===t[0],this.nextIndex++}return e}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(t){if("q_end"===t[0])return this.finaliseBatch(),this.onOfflineEnd();0===t[0]&&(this.timestamp=t[1]),122===t[0]&&(this.url=t[1]),this.writeWithSize(t)||(this.finaliseBatch(),this.writeWithSize(t)||(this.encoder=new e(this.beaconSizeLimit),this.prepare(),this.writeWithSize(t)?this.finaliseBatch():console.warn("OpenReplay: beacon size overflow. Skipping large message.",t,this),this.encoder=new e(this.beaconSize),this.prepare()))}finaliseBatch(){if(this.isEmpty)return;const t=this.encoder.flush();this.onBatch(t),this.prepare()}clean(){this.encoder.reset()}}var h;!function(t){t[t.NotActive=0]="NotActive",t[t.Starting=1]="Starting",t[t.Stopping=2]="Stopping",t[t.Active=3]="Active",t[t.Stopped=4]="Stopped"}(h||(h={}));let r=null,u=null,a=h.NotActive;function o(){u&&u.finaliseBatch()}function c(){return new Promise((t=>{a=h.Stopping,null!==p&&(clearInterval(p),p=null),u&&(u.clean(),u=null),r&&(r.clean(),setTimeout((()=>{r=null}),20)),setTimeout((()=>{a=h.NotActive,t(null)}),100)}))}function g(){[h.Stopped,h.Stopping].includes(a)||(postMessage("a_stop"),c().then((()=>{postMessage("a_start")})))}let l,p=null;self.onmessage=({data:s})=>{if(null!=s){if("stop"===s)return o(),void c().then((()=>{a=h.Stopped}));if("forceFlushBatch"!==s){if(!Array.isArray(s)){if("compressed"===s.type){if(!r)return console.debug("OR WebWorker: sender not initialised. Compressed batch."),void g();s.batch&&r.sendCompressed(s.batch)}if("uncompressed"===s.type){if(!r)return console.debug("OR WebWorker: sender not initialised. Uncompressed batch."),void g();s.batch&&r.sendUncompressed(s.batch)}return"start"===s.type?(a=h.Starting,r=new t(s.ingestPoint,(()=>{g()}),(t=>{!function(t){postMessage({type:"failure",reason:t}),c()}(t)}),s.connAttemptCount,s.connAttemptGap,(t=>{postMessage({type:"compress",batch:t},[t.buffer])}),s.pageNo),u=new n(s.pageNo,s.timestamp,s.url,(t=>{r&&r.push(t)}),s.tabId,(()=>postMessage({type:"queue_empty"}))),null===p&&(p=setInterval(o,1e4)),a=h.Active):"auth"===s.type?r?u?(r.authorise(s.token),void(s.beaconSizeLimit&&u.setBeaconSizeLimit(s.beaconSizeLimit))):(console.debug("OR WebWorker: writer not initialised. Received auth."),void g()):(console.debug("OR WebWorker: sender not initialised. Received auth."),void g()):void 0}if(u){const t=u;s.forEach((s=>{55===s[0]&&(s[1]?l=setTimeout((()=>g()),18e5):clearTimeout(l)),t.writeMessage(s)}))}else postMessage("not_init"),g()}else o()}else o()}}();\n',Hs="canceled",ca="or_uxt_active",qi="or_buffer_1",mt=t=>({reason:t,success:!1}),ua=t=>({...t,success:!0});var le;(function(t){t[t.NotActive=0]="NotActive",t[t.Starting=1]="Starting",t[t.Active=2]="Active",t[t.ColdStart=3]="ColdStart"})(le||(le={}));const ha="https://api.openreplay.com/ingest";function Vi(){const t=new Date().getTimezoneOffset()*-1,e=t>=0?"+":"-",s=Math.floor(Math.abs(t)/60),n=Math.abs(t)%60;return`UTC${e}${String(s).padStart(2,"0")}:${String(n).padStart(2,"0")}`}const hh=t=>new Promise(e=>setTimeout(e,t)),ce={ask:"never-gonna-give-you-up",resp:"never-gonna-let-you-down",reg:"never-gonna-run-around-and-desert-you",iframeSignal:"tracker inside a child iframe",iframeId:"getting node id for child iframe",iframeBatch:"batch of messages from an iframe window",parentAlive:"signal that parent is live",killIframe:"stop tracker inside frame",startIframe:"start tracker inside frame",polling:"hello-how-are-you-im-under-the-water-please-help-me"};let fh=class{constructor(e,s,n,i,r){var c,u;this.signalError=i,this.insideIframe=r,this.messages=[],this.bufferedMessages1=[],this.bufferedMessages2=[],this.startCallbacks=[],this.stopCallbacks=[],this.commitCallbacks=[],this.activityState=le.NotActive,this.version="14.0.14",this.socketMode=!1,this.compressionThreshold=24*1e3,this.bc=null,this.canvasRecorder=null,this.conditionsManager=null,this.canStart=!1,this.rootId=null,this.pageFrames=[],this.frameOderNumber=0,this.features={"feature-flags":!0,"usability-test":!0},this.parentActive=!1,this.checkStatus=()=>this.parentActive,this.parentCrossDomainFrameListener=l=>{const{data:h}=l;if(!(!h||l.source===window)){if(h.line===ce.startIframe){if(this.active())return;try{this.allowAppStart(),this.start()}catch(f){console.error("children frame restart failed:",f)}}h.line===ce.parentAlive&&(this.parentActive=!0),h.line===ce.iframeId&&(this.parentActive=!0,this.rootId=h.id,this.session.setSessionToken(h.token),this.frameOderNumber=h.frameOrderNumber,this.debug.log("starting iframe tracking",h),this.allowAppStart()),h.line===ce.killIframe&&this.active()&&this.stop()}},this.trackedFrames=[],this.crossDomainIframeListener=l=>{var f,d;if(!this.active()||l.source===window)return;const{data:h}=l;if(h){if(h.line===ce.iframeSignal&&((f=l.source)==null||f.postMessage({ping:!0,line:ce.parentAlive},"*"),(async()=>{var _;if(l.source===null)return console.error("Couldnt connect to event.source for child iframe tracking");const m=await this.checkNodeId(l.source);if(!m){this.debug.log("Couldnt get node id for iframe",l.source);return}try{this.trackedFrames.includes(h.context)?this.debug.log("Trying to observe already added iframe; ignore if its a restart"):this.trackedFrames.push(h.context),await this.waitStarted();const C=this.session.getSessionToken(),T=this.trackedFrames.findIndex(g=>g===h.context)+1;T===0&&this.debug.error("Couldnt get order number for iframe",h.context,this.trackedFrames);const y={line:ce.iframeId,id:m,token:C,frameOrderNumber:T};this.debug.log("Got child frame signal; nodeId",m,l.source,y),(_=l.source)==null||_.postMessage(y,"*")}catch(C){console.error(C)}})()),h.line===ce.iframeBatch){const m=h.messages.map(_=>{if(_[0]===20){let C=_;return this.pageFrames.forEach(T=>{if(T.contentWindow===l.source){const[y,g,v]=_,{left:I,top:x}=T.getBoundingClientRect();C=[y,g+I,v+x]}}),C}if(_[0]===68){let C=_;return this.pageFrames.forEach(T=>{if(T.contentWindow===l.source){const[y,g,v,I,x,S,k]=_,{left:A,top:j,width:F,height:G}=T.getBoundingClientRect(),U=document.documentElement.scrollWidth,E=document.documentElement.scrollHeight,R=S/100*F+A,O=k/100*G+j,N=R/U,V=O/E;C=[y,g,v,I,x,Math.round(N*1e3)/10,Math.round(V*1e3)/10]}}),C}return _});this.messages.push(...m)}if(h.line===ce.polling){if(!this.pollingQueue.order.length)return;const p=this.pollingQueue.order[0];if(p&&this.pollingQueue[p].length===0){this.pollingQueue.order=this.pollingQueue.order.filter(m=>m!==p);return}this.pollingQueue[p].includes(h.context)&&(this.pollingQueue[p]=this.pollingQueue[p].filter(m=>m!==h.context),(d=l.source)==null||d.postMessage({line:p},"*"),this.pollingQueue[p].length===0&&this.pollingQueue.order.shift())}}},this.pollingQueue={order:[]},this.addCommand=l=>{this.pollingQueue.order.push(l),this.pollingQueue[l]=[...this.trackedFrames]},this.bootChildrenFrames=async()=>{await this.waitStarted(),this.addCommand(ce.startIframe)},this.killChildrenFrames=()=>{this.addCommand(ce.killIframe)},this.signalIframeTracker=()=>{var C;const l=this.session.getTabId();window.parent.postMessage({line:ce.iframeSignal,source:l,context:this.contextId},((C=this.options.crossdomain)==null?void 0:C.parentDomain)??"*");const h=10;let f=0,d=250,p=0,m=!1;const _=()=>{var T;if(m||this.checkStatus()){m=!0;return}window.parent.postMessage({line:ce.iframeSignal,source:l,context:this.contextId},((T=this.options.crossdomain)==null?void 0:T.parentDomain)??"*"),this.debug.info("Trying to signal to parent, attempt:",f+1),f++};for(let T=0;T<h;T++){if(this.checkStatus()){m=!0;break}p+=d,setTimeout(()=>{_()},p),d*=1.5}},this.startTimeout=null,this.coldStartCommitN=0,this.delay=0,this.attachStartCallback=(l,h=!1)=>{h&&(l=this.safe(l)),this.startCallbacks.push(l)},this.attachStopCallback=(l,h=!1)=>{h&&(l=this.safe(l)),this.stopCallbacks.push(l)},this.attachEventListener=(l,h,f,d=!0,p=!0)=>{d&&(f=this.safe(f));const m=()=>l?Bo(l,h,f,p,this.options.forceNgOff):null,_=()=>l?Fo(l,h,f,p,this.options.forceNgOff):null;this.attachStartCallback(m,d),this.attachStopCallback(_,d)},this.coldInterval=null,this.orderNumber=0,this.coldStartTs=0,this.singleBuffer=!1,this.onSessionSent=()=>{},this.prevOpts={},this.restartCanvasTracking=()=>{var l;(l=this.canvasRecorder)==null||l.restartTracking()},this.flushBuffer=async l=>new Promise(h=>{let f=!1;const d=[l.shift()];for(;!f;){const p=l[0];!p||p[0]===0?f=!0:d.push(l.shift())}this.postToWorker(d),h(null)}),this.onUxtCb=[],this.contextId=Math.random().toString(36).slice(2),this.projectKey=e,Object.keys(n).findIndex(l=>["fixedCanvasScaling","disableCanvas"].includes(l))!==-1&&(console.warn('Openreplay: canvas options are moving to separate key "canvas" in next update. Please update your configuration.'),n={...n,canvas:{__save_canvas_locally:n.__save_canvas_locally,fixedCanvasScaling:n.fixedCanvasScaling,disableCanvas:n.disableCanvas}}),this.networkOptions=n.network;const o={revID:"",node_id:"__openreplay_id",session_token_key:"__openreplay_token",session_pageno_key:"__openreplay_pageno",session_reset_key:"__openreplay_reset",session_tabid_key:"__openreplay_tabid",local_uuid_key:"__openreplay_uuid",ingestPoint:ha,resourceBaseHref:null,__is_snippet:!1,__debug_report_edp:null,__debug__:ys.Silent,__save_canvas_locally:!1,localStorage:null,sessionStorage:null,disableStringDict:!1,forceSingleTab:!1,assistSocketHost:"",fixedCanvasScaling:!1,disableCanvas:!1,captureIFrames:!0,obscureTextEmails:!0,obscureTextNumbers:!1,crossdomain:{parentDomain:"*"},canvas:{disableCanvas:!1,fixedCanvasScaling:!1,__save_canvas_locally:!1,useAnimationFrame:!1},forceNgOff:!1};if(this.options=jo(o,n),!this.insideIframe&&!this.options.forceSingleTab&&globalThis&&"BroadcastChannel"in globalThis){const l=location.hostname.split(".").slice(-2).join("_");this.bc=new BroadcastChannel(`rick_${l}`)}this.revID=this.options.revID,this.localStorage=this.options.localStorage??window.localStorage,this.sessionStorage=this.options.sessionStorage??window.sessionStorage,this.sanitizer=new oh({app:this,options:n}),this.nodes=new th({node_id:this.options.node_id,forceNgOff:!!n.forceNgOff,maintainer:(c=this.options.nodes)==null?void 0:c.maintainer}),this.observer=new ih({app:this,options:n}),this.ticker=new ch(this),this.ticker.attach(()=>this.commit()),this.debug=new Ju(this.options.__debug__),this.session=new ah({app:this,options:this.options}),this.attributeSender=new Oc({app:this,isDictDisabled:!!(this.options.disableStringDict||(u=this.options.crossdomain)!=null&&u.enabled)}),this.featureFlags=new Pc(this),this.tagWatcher=new _u({sessionStorage:this.sessionStorage,errLog:this.debug.error,onTag:l=>this.send(yu(l))}),this.session.attachUpdateCallback(({userID:l,metadata:h})=>{l!=null&&this.send(ru(l)),h!=null&&Object.entries(h).forEach(([f,d])=>this.send(zo(f,d)))}),s!=null&&this.session.applySessionHash(s);const a=this.session.getTabId();this.insideIframe?(window.addEventListener("message",this.parentCrossDomainFrameListener),setInterval(()=>{var l;document.hidden||window.parent.postMessage({line:ce.polling,context:this.contextId},((l=n.crossdomain)==null?void 0:l.parentDomain)??"*")},250)):(this.initWorker(),window.addEventListener("message",this.crossDomainIframeListener)),this.bc!==null&&(this.bc.postMessage({line:ce.ask,source:a,context:this.contextId}),this.startTimeout=setTimeout(()=>{this.allowAppStart()},250),this.bc.onmessage=l=>{if(l.data.context!==this.contextId){if(l.data.line===ce.resp){const h=l.data.token;this.session.setSessionToken(h),this.allowAppStart()}if(l.data.line===ce.reg){const h=l.data.token;this.session.regenerateTabId(),this.session.setSessionToken(h),this.allowAppStart()}if(l.data.line===ce.ask){const h=this.session.getSessionToken();h&&this.bc&&this.bc.postMessage({line:l.data.source===a?ce.reg:ce.resp,token:h,source:a,context:this.contextId})}}})}allowAppStart(){this.canStart=!0,this.startTimeout&&(clearTimeout(this.startTimeout),this.startTimeout=null)}async checkNodeId(e){let s;if(this.pageFrames.length>0&&(s=this.pageFrames.find(i=>i.contentWindow===e)),!s||!this.pageFrames.length){const i=Array.from(document.querySelectorAll("iframe"));this.pageFrames=i,s=i.find(r=>r.contentWindow===e)}if(!s)return null;let n=0;for(;n<100;){const i=s[this.options.node_id];if(i!==void 0)return n=100,i;n++,await hh(100)}return null}initWorker(){try{this.worker=new Worker(URL.createObjectURL(new Blob([uh],{type:"text/javascript"}))),this.worker.onerror=s=>{this._debug("webworker_error",s)},this.worker.onmessage=({data:s})=>{this.handleWorkerMsg(s)};const e=()=>{this.worker&&this.worker.postMessage(null)};this.attachEventListener(window,"beforeunload",e,!1),this.attachEventListener(document.body,"mouseleave",e,!1,!1),this.attachEventListener(document,"visibilitychange",e,!1)}catch(e){this._debug("worker_start",e)}}handleWorkerMsg(e){var s;if(e==="a_stop")this.stop(!1);else if(e==="a_start")this.waitStatus(le.NotActive).then(()=>{this.allowAppStart(),this.start(this.prevOpts,!0).then(n=>{this.debug.info("Worker restarted, session was too long",n)}).catch(n=>{this.debug.error("Worker restart failed",n)})});else if(e==="not_init")this.debug.warn("OR WebWorker: writer not initialised. Restarting tracker");else if(e.type==="failure")this.stop(!1),this.debug.error("worker_failed",e.reason),this._debug("worker_failed",e.reason);else if(e.type==="compress"){const n=e.batch;n.byteLength>this.compressionThreshold?Nc(e.batch,{mtime:0},(r,o)=>{var a,c;r?(this.debug.error("Openreplay compression error:",r),(a=this.worker)==null||a.postMessage({type:"uncompressed",batch:n})):(c=this.worker)==null||c.postMessage({type:"compressed",batch:o})}):(s=this.worker)==null||s.postMessage({type:"uncompressed",batch:n})}else e.type==="queue_empty"&&this.onSessionSent()}_debug(e,s){this.options.__debug_report_edp!==null&&fetch(this.options.__debug_report_edp,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({context:e,error:`${s}`})}),this.debug.error("OpenReplay error: ",e,s)}send(e,s=!1){var n;this.activityState!==le.NotActive&&(this.activityState===le.ColdStart?(this.bufferedMessages1.push(e),this.singleBuffer||this.bufferedMessages2.push(e),(n=this.conditionsManager)==null||n.processMessage(e)):this.messages.push(e),this.activityState===le.Active&&s&&this.commit())}_nCommit(){var e;if(this.socketMode){this.messages.unshift(Gt(this.session.getTabId())),this.messages.unshift(Vt(this.timestamp())),this.commitCallbacks.forEach(s=>s(this.messages)),this.messages.length=0;return}if(this.insideIframe){window.parent.postMessage({line:ce.iframeBatch,messages:this.messages},((e=this.options.crossdomain)==null?void 0:e.parentDomain)??"*"),this.commitCallbacks.forEach(s=>s(this.messages)),this.messages.length=0;return}if(!(this.worker===void 0||!this.messages.length))try{Wc(()=>{var s;this.messages.unshift(Gt(this.session.getTabId())),this.messages.unshift(Vt(this.timestamp())),(s=this.worker)==null||s.postMessage(this.messages),this.commitCallbacks.forEach(n=>n(this.messages)),this.messages.length=0})}catch(s){this._debug("worker_commit",s),this.stop(!0),setTimeout(()=>{this.start()},500)}}_cStartCommit(){this.coldStartCommitN+=1,this.coldStartCommitN===2&&(this.bufferedMessages1.push(Vt(this.timestamp())),this.bufferedMessages1.push(Gt(this.session.getTabId())),this.bufferedMessages2.push(Vt(this.timestamp())),this.bufferedMessages2.push(Gt(this.session.getTabId())),this.coldStartCommitN=0)}commit(){this.activityState===le.ColdStart?this._cStartCommit():this._nCommit()}postToWorker(e){var s;(s=this.worker)==null||s.postMessage(e),this.commitCallbacks.forEach(n=>n(e)),e.length=0}timestamp(){return Ke()+this.delay}safe(e){const s=this;return function(...n){try{e.apply(this,n)}catch(i){s._debug("safe_fn_call",i)}}}attachCommitCallback(e){this.commitCallbacks.push(e)}checkRequiredVersion(e){const s=e.split(/[.-]/),n=this.version.split(/[.-]/);for(let i=0;i<3;i++){if(isNaN(Number(n[i]))||isNaN(Number(s[i])))return!1;if(Number(n[i])>Number(s[i]))return!0;if(Number(n[i])<Number(s[i]))return!1}return!0}getTrackerInfo(){return{userUUID:this.localStorage.getItem(this.options.local_uuid_key),projectKey:this.projectKey,revID:this.revID,trackerVersion:this.version,isSnippet:this.options.__is_snippet}}getSessionInfo(){return{...this.session.getInfo(),...this.getTrackerInfo()}}getSessionToken(){return this.session.getSessionToken()}getSessionID(){return this.session.getInfo().sessionID||void 0}getSessionURL(e){const{projectID:s,sessionID:n,timestamp:i}=this.session.getInfo();if(!s||!n){this.debug.error("OpenReplay error: Unable to build session URL");return}const r=this.options.ingestPoint,c=(/api\.openreplay\.com/.test(r)?"https://app.openreplay.com/ingest":r).replace(/ingest$/,`${s}/session/${n}`);if(e!=null&&e.withCurrentTime){const u=Ke()-i;return`${c}?jumpto=${u}`}return c}getHost(){return new URL(this.options.ingestPoint).host}getProjectKey(){return this.projectKey}getBaseHref(){var e,s;return typeof this.options.resourceBaseHref=="string"?this.options.resourceBaseHref:(this.options.resourceBaseHref,document.baseURI?document.baseURI:((s=(e=document.head)==null?void 0:e.getElementsByTagName("base")[0])==null?void 0:s.getAttribute("href"))||location.origin+location.pathname)}resolveResourceURL(e){const s=new URL(this.getBaseHref());return s.pathname+="/"+new URL(e).pathname,s.pathname.replace(/\/+/g,"/"),s.toString()}isServiceURL(e){return e.startsWith(this.options.ingestPoint)}active(){return this.activityState===le.Active}resetNextPageSession(e){e?this.sessionStorage.setItem(this.options.session_reset_key,"t"):this.sessionStorage.removeItem(this.options.session_reset_key)}checkSessionToken(e){const s=this.sessionStorage.getItem(this.options.session_reset_key)!==null,n=e||s,i=this.session.getSessionToken();return n||!i}async coldStart(e={},s){this.singleBuffer=!1;const n=1e3,i=this.checkSessionToken(e.forceNew);s&&await this.setupConditionalStart(e);const r=()=>{this.orderNumber+=1,Ii(),this.coldStartTs=Ke(),this.orderNumber%2===0?(this.bufferedMessages1.length=0,this.bufferedMessages1.push(Vt(this.timestamp())),this.bufferedMessages1.push(Gt(this.session.getTabId()))):(this.bufferedMessages2.length=0,this.bufferedMessages2.push(Vt(this.timestamp())),this.bufferedMessages2.push(Gt(this.session.getTabId()))),this.stop(!1),this.activityState=le.ColdStart,e.sessionHash&&this.session.applySessionHash(e.sessionHash),e.forceNew&&this.session.reset(),this.session.assign({userID:e.userID,metadata:e.metadata}),i||(this.debug.log("continuing session on new tab",this.session.getTabId()),this.send(Tn(this.session.getTabId()))),this.observer.observe(),this.ticker.start()};this.coldInterval=setInterval(()=>{r()},30*n),r()}async setupConditionalStart(e){var d,p;this.conditionsManager=new Mc(this,e);const s=await fetch(this.options.ingestPoint+"/v1/web/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...this.getTrackerInfo(),timestamp:Ke(),doNotRecord:!0,bufferDiff:0,userID:this.session.getInfo().userID,token:void 0,deviceMemory:Pi,jsHeapSizeLimit:Li,timezone:Vi(),width:window.screen.width,height:window.screen.height})}),{token:n,userBrowser:i,userCity:r,userCountry:o,userDevice:a,userOS:c,userState:u,projectID:l,features:h}=await s.json();this.features=h||this.features,this.session.assign({projectID:l}),this.session.setUserInfo({userBrowser:i,userCity:r,userCountry:o,userDevice:a,userOS:c,userState:u});const f={sessionToken:n,userUUID:"",sessionID:""};this.startCallbacks.forEach(m=>m(f)),await((d=this.conditionsManager)==null?void 0:d.fetchConditions(l,n)),this.features["feature-flags"]&&(await this.featureFlags.reloadFlags(n),(p=this.conditionsManager)==null||p.processFlags(this.featureFlags.flags)),await this.tagWatcher.fetchTags(this.options.ingestPoint,n)}offlineRecording(e={},s){this.onSessionSent=s,this.singleBuffer=!0;const n=this.checkSessionToken(e.forceNew);Ii(),this.coldStartTs=Ke();const i=this.localStorage.getItem(qi);if(i){const o=JSON.parse(i);this.bufferedMessages1=Array.isArray(o)?o:this.bufferedMessages1,this.localStorage.removeItem(qi)}this.bufferedMessages1.push(Vt(this.timestamp())),this.bufferedMessages1.push(Gt(this.session.getTabId())),this.activityState=le.ColdStart,e.sessionHash&&this.session.applySessionHash(e.sessionHash),e.forceNew&&this.session.reset(),this.session.assign({userID:e.userID,metadata:e.metadata});const r={sessionToken:"",userUUID:"",sessionID:""};return this.startCallbacks.forEach(o=>o(r)),n||this.send(Tn(this.session.getTabId())),this.observer.observe(),this.ticker.start(),{saveBuffer:this.saveBuffer,getBuffer:this.getBuffer,setBuffer:this.setBuffer}}saveBuffer(){this.localStorage.setItem(qi,JSON.stringify(this.bufferedMessages1))}getBuffer(){return this.bufferedMessages1}setBuffer(e){this.bufferedMessages1=e}async uploadOfflineRecording(){var f,d;this.stop(!1);const e=Ke();(f=this.worker)==null||f.postMessage({type:"start",pageNo:this.session.incPageNo(),ingestPoint:this.options.ingestPoint,timestamp:this.coldStartTs,url:document.URL,connAttemptCount:this.options.connAttemptCount,connAttemptGap:this.options.connAttemptGap,tabId:this.session.getTabId()});const s=await fetch(this.options.ingestPoint+"/v1/web/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...this.getTrackerInfo(),timestamp:e,doNotRecord:!1,bufferDiff:e-this.coldStartTs,userID:this.session.getInfo().userID,token:void 0,deviceMemory:Pi,jsHeapSizeLimit:Li,timezone:Vi()})}),{token:n,userBrowser:i,userCity:r,userCountry:o,userDevice:a,userOS:c,userState:u,beaconSizeLimit:l,projectID:h}=await s.json();for((d=this.worker)==null||d.postMessage({type:"auth",token:n,beaconSizeLimit:l}),this.session.assign({projectID:h}),this.session.setUserInfo({userBrowser:i,userCity:r,userCountry:o,userDevice:a,userOS:c,userState:u});this.bufferedMessages1.length>0;)await this.flushBuffer(this.bufferedMessages1);this.postToWorker([["q_end"]]),this.clearBuffers()}async _start(e={},s=!1,n){var c,u,l,h,f;Object.keys(e).length!==0&&(this.prevOpts=e);const i=this.activityState===le.ColdStart;if(i&&this.coldInterval&&clearInterval(this.coldInterval),!this.worker&&!this.insideIframe){const d="No worker found: perhaps, CSP is not set.";return this.signalError(d,[]),Promise.resolve(mt(d))}if(this.activityState===le.Active||this.activityState===le.Starting)return Promise.resolve(mt("OpenReplay: trying to call `start()` on the instance that has been started already."));this.activityState=le.Starting,i||Ii(),e.sessionHash&&this.session.applySessionHash(e.sessionHash),e.forceNew&&this.session.reset(),this.session.assign({userID:e.userID,metadata:e.metadata});const r=Ke();(c=this.worker)==null||c.postMessage({type:"start",pageNo:this.session.incPageNo(),ingestPoint:this.options.ingestPoint,timestamp:i?this.coldStartTs:r,url:document.URL,connAttemptCount:this.options.connAttemptCount,connAttemptGap:this.options.connAttemptGap,tabId:this.session.getTabId()});const o=this.session.getSessionToken(),a=this.checkSessionToken(e.forceNew);this.sessionStorage.removeItem(this.options.session_reset_key),this.debug.log("OpenReplay: starting session; need new session id?",a,"session token: ",o);try{const d=await window.fetch(this.options.ingestPoint+"/v1/web/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...this.getTrackerInfo(),timestamp:r,doNotRecord:!1,bufferDiff:r-this.coldStartTs,userID:this.session.getInfo().userID,token:a?void 0:o,deviceMemory:Pi,jsHeapSizeLimit:Li,timezone:Vi(),condition:n,assistOnly:e.assistOnly??this.socketMode,width:window.screen.width,height:window.screen.height})});if(d.status!==200){const N=await d.text(),V=N===Hs?Hs:`Server error: ${d.status}. ${N}`;return mt(V)}if(!this.worker&&!this.insideIframe){const N="no worker found after start request (this should not happen in real world)";return this.signalError(N,[]),mt(N)}const{token:p,userUUID:m,projectID:_,beaconSizeLimit:C,compressionThreshold:T,delay:y,sessionID:g,startTimestamp:v,userBrowser:I,userCity:x,userCountry:S,userDevice:k,userOS:A,userState:j,canvasEnabled:F,canvasQuality:G,canvasFPS:U,assistOnly:E,features:R}=await d.json();if(this.features=R||this.features,typeof p!="string"||typeof m!="string"||typeof v!="number"&&typeof v<"u"||typeof g!="string"||typeof y!="number"||typeof C!="number"&&typeof C<"u"){const N=`Incorrect server response: ${JSON.stringify(d)}`;return this.signalError(N,[]),mt(N)}this.delay=y,this.session.setSessionToken(p),this.session.setUserInfo({userBrowser:I,userCity:x,userCountry:S,userDevice:k,userOS:A,userState:j}),this.session.assign({sessionID:g,timestamp:v||r,projectID:_}),E?(this.socketMode=!0,(u=this.worker)==null||u.postMessage("stop")):(l=this.worker)==null||l.postMessage({type:"auth",token:p,beaconSizeLimit:C}),!a&&p===o&&(this.debug.log("continuing session on new tab",this.session.getTabId()),this.send(Tn(this.session.getTabId()))),Object.entries(this.session.getInfo().metadata).forEach(([N,V])=>this.send(zo(N,V))),this.localStorage.setItem(this.options.local_uuid_key,m),this.compressionThreshold=T;const O={sessionToken:p,userUUID:m,sessionID:g};if(this.startCallbacks.forEach(N=>N(O)),e.startCallback&&e.startCallback(ua(O)),this.features["feature-flags"]&&this.featureFlags.reloadFlags(),await this.tagWatcher.fetchTags(this.options.ingestPoint,p),this.activityState=le.Active,(h=this.options.crossdomain)!=null&&h.enabled&&!this.insideIframe&&this.bootChildrenFrames(),F&&!this.options.canvas.disableCanvas&&(this.canvasRecorder=this.canvasRecorder??new Gu(this,{fps:U,quality:G,isDebug:this.options.canvas.__save_canvas_locally,fixedScaling:this.options.canvas.fixedCanvasScaling,useAnimationFrame:this.options.canvas.useAnimationFrame})),i){const N=this.bufferedMessages1.length>this.bufferedMessages2.length?this.bufferedMessages1:this.bufferedMessages2;for(;N.length>0;)await this.flushBuffer(N);this.clearBuffers(),this.commit()}else this.insideIframe&&this.rootId?this.observer.crossdomainObserve(this.rootId,this.frameOderNumber):this.observer.observe(),this.ticker.start();if((f=this.canvasRecorder)==null||f.startTracking(),this.features["usability-test"]&&!this.insideIframe){this.uxtManager=this.uxtManager?this.uxtManager:new qu(this,ca);let N;const V=this.localStorage.getItem(ca);if(V&&(N=parseInt(V,10)),location!=null&&location.search){const J=new URLSearchParams(location.search);if(J.has("oruxt")){const se=J.get("oruxt");N=se?parseInt(se,10):void 0}}N&&(this.uxtManager.isActive?this.onUxtCb.forEach(J=>J(N)):this.uxtManager.getTest(N,p,!!V).then(J=>{J&&this.onUxtCb.forEach(se=>se(J))}))}return ua(O)}catch(d){if(this.stop(),this.session.reset(),!d)return console.error("Unknown error during start"),this.signalError("Unknown error",[]),mt("Unknown error");if(d===Hs)return this.signalError(Hs,[]),mt(Hs);this._debug("session_start",d);const p=d instanceof Error?d.message:d.toString();return this.signalError(p,[]),mt(p)}}addOnUxtCb(e){this.onUxtCb.push(e)}getUxtId(){var e;return(e=this.uxtManager)==null?void 0:e.getTestId()}async waitStart(){return new Promise(e=>{const s=setInterval(()=>{this.canStart&&(clearInterval(s),e(!0))},100)})}async waitStarted(){return this.waitStatus(le.Active)}async waitStatus(e){return new Promise(s=>{const n=()=>{this.activityState===e?s(!0):setTimeout(n,25)};n()})}async start(...e){return this.activityState===le.Active||this.activityState===le.Starting?Promise.resolve(mt("OpenReplay: trying to call `start()` on the instance that has been started already.")):(this.insideIframe&&this.signalIframeTracker(),document.hidden?new Promise(s=>{const n=async()=>{document.hidden||(await this.waitStart(),document.removeEventListener("visibilitychange",n),s(this._start(...e)))};document.addEventListener("visibilitychange",n)}):(await this.waitStart(),this._start(...e)))}forceFlushBatch(){var e;(e=this.worker)==null||e.postMessage("forceFlushBatch")}getTabId(){return this.session.getTabId()}clearBuffers(){this.bufferedMessages1.length=0,this.bufferedMessages2.length=0}trackWs(e){const s=e;return(n,i,r="down")=>{typeof n!="string"||typeof i!="string"||i.length>5*1024*1024||n.length>255||this.send(gu("websocket",s,i,this.timestamp(),r,n))}}stop(e=!0){var s,n;if(this.activityState!==le.NotActive)try{!this.insideIframe&&((s=this.options.crossdomain)!=null&&s.enabled)&&this.killChildrenFrames(),this.attributeSender.clear(),this.sanitizer.clear(),this.observer.disconnect(),this.nodes.clear(),this.ticker.stop(),this.stopCallbacks.forEach(i=>i()),this.tagWatcher.clear(),this.worker&&e&&this.worker.postMessage("stop"),(n=this.canvasRecorder)==null||n.clear(),this.messages.length=0,this.parentActive=!1}finally{this.activityState=le.NotActive,this.debug.log("OpenReplay tracking stopped.")}}};function dh(t){const e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;if(e===void 0)return;const s=()=>t.send(lu(Math.round(e.downlink*1e3),e.type||"unknown"));s(),e.addEventListener("change",s)}const fa=tt&&"InstallTrigger"in window?t=>t.message+`
|
|
10
|
+
`+t.stack:t=>t.stack||t.message;function Gi(t){return t===void 0?"undefined":t===null?"null":t instanceof Error?fa(t):Array.isArray(t)?`Array(${t.length})`:String(t)}function ph(t){return typeof t!="number"?"NaN":t.toString()}function gh(t){return typeof t!="number"?"NaN":Math.floor(t).toString()}function da(t){if(t===void 0)return"undefined";if(t===null)return"null";if(t instanceof Error)return fa(t);if(Array.isArray(t)){const e=t.length,s=t.slice(0,10).map(Gi).join(", ");return`Array(${e})[${s}]`}if(typeof t=="object"){const e=[];let s=0;for(const n in t){if(++s===10)break;const i=t[n];e.push(n+": "+Gi(i))}return"{"+e.join(", ")+"}"}return t.toString()}function mh(t){return typeof t[0]=="string"&&t.unshift(t.shift().replace(/%(o|s|f|d|i)/g,(e,s)=>{const n=t.shift();if(n===void 0)return e;switch(s){case"o":return da(n);case"s":return Gi(n);case"f":return ph(n);case"d":case"i":return gh(n);default:return e}})),t.map(da).join(" ")}const pa=["log","info","warn","error","debug","assert"];function vh(t,e){const s=Object.assign({consoleMethods:pa,consoleThrottling:30},e);if(!Array.isArray(s.consoleMethods)||s.consoleMethods.length===0)return;const n=t.safe((c,u)=>t.send(tu(c,mh(u))));let i=0;const r=()=>{i=0};t.attachStartCallback(r),t.ticker.attach(r,33,!1);const o=(c,u)=>{const l={apply:function(h,f,d){Reflect.apply(h,u,d),i=i+1,!(i>s.consoleThrottling)&&n(h.name,d)}};s.consoleMethods.forEach(h=>{if(pa.indexOf(h)===-1){t.debug.error(`OpenReplay: unsupported console method "${h}"`);return}const f=u.console[h];c[h]=new Proxy(f,l)})},a=t.safe(c=>o(c.console,c));a(window),t.observer.attachContextCallback(a)}const bh=/(^|@)\S+:\d+/,ga=/^\s*at .*(\S+:\d+|\(native\))/m,yh=/^(eval@)?(\[native code\])?$/;function wh(t,e){if(typeof t.stacktrace<"u"||typeof t["opera#sourceloc"]<"u")return Eh(t);if(t.stack&&t.stack.match(ga))return Sh(t);if(t.stack)return kh(t);throw new Error("Cannot parse given Error object")}function Ki(t){if(!t.includes(":"))return[t,void 0,void 0];const s=/(.+?)(?::(\d+))?(?::(\d+))?$/.exec(t.replace(/[()]/g,""));return[s[1],s[2]||void 0,s[3]||void 0]}function qs(t,e){return t}function Sh(t,e){return _h(t.stack)}function _h(t,e){return qs(t.split(`
|
|
11
|
+
`).filter(n=>!!n.match(ga))).map(n=>{n.includes("(eval ")&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));let i=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,"");const r=i.match(/ (\(.+\)$)/);i=r?i.replace(r[0],""):i;const o=Ki(r?r[1]:i),a=r&&i||void 0,c=["eval","<anonymous>"].includes(o[0])?void 0:o[0];return{function:a,file:c,line:o[1]?+o[1]:void 0,col:o[2]?+o[2]:void 0,raw:n}})}function kh(t,e){return Th(t.stack)}function Th(t,e){return qs(t.split(`
|
|
12
|
+
`).filter(n=>!n.match(yh))).map(n=>{if(n.includes(" > eval")&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),!n.includes("@")&&!n.includes(":"))return{function:n};{const i=/(([^\n\r"\u2028\u2029]*".[^\n\r"\u2028\u2029]*"[^\n\r@\u2028\u2029]*(?:@[^\n\r"\u2028\u2029]*"[^\n\r@\u2028\u2029]*)*(?:[\n\r\u2028\u2029][^@]*)?)?[^@]*)@/,r=n.match(i),o=r&&r[1]?r[1]:void 0,a=Ki(n.replace(i,""));return{function:o,file:a[0],line:a[1]?+a[1]:void 0,col:a[2]?+a[2]:void 0,raw:n}}})}function Eh(t,e){return!t.stacktrace||t.message.includes(`
|
|
13
|
+
`)&&t.message.split(`
|
|
14
|
+
`).length>t.stacktrace.split(`
|
|
15
|
+
`).length?Ih(t):t.stack?xh(t):Ch(t)}function Ih(t,e){const s=/Line (\d+).*script (?:in )?(\S+)/i,n=t.message.split(`
|
|
16
|
+
`),i=[];for(let r=2,o=n.length;r<o;r+=2){const a=s.exec(n[r]);a&&i.push({file:a[2],line:+a[1],raw:n[r]})}return qs(i)}function Ch(t,e){const s=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,n=t.stacktrace.split(`
|
|
17
|
+
`),i=[];for(let r=0,o=n.length;r<o;r+=2){const a=s.exec(n[r]);a&&i.push({function:a[3]||void 0,file:a[2],line:a[1]?+a[1]:void 0,raw:n[r]})}return qs(i)}function xh(t,e){return qs(t.stack.split(`
|
|
18
|
+
`).filter(n=>!!n.match(bh)&&!n.match(/^Error created at/))).map(n=>{const i=n.split("@"),r=Ki(i.pop()),o=i.shift()||"",a=o.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^)]*\)/g,"")||void 0;let c;o.match(/\(([^)]*)\)/)&&(c=o.replace(/^[^(]+\(([^)]*)\)$/,"$1"));const u=c===void 0||c==="[arguments not available]"?void 0:c.split(",");return{function:a,args:u,file:r[0],line:r[1]?+r[1]:void 0,col:r[2]?+r[2]:void 0,raw:n}})}function Nh(t){return t.map(e=>({functionName:e.function,args:e.args,fileName:e.file,lineNumber:e.line,columnNumber:e.col,source:e.raw}))}function Rh(t,e){return Nh(wh(t))}function ma(t){return[{columnNumber:t.colno,lineNumber:t.lineno,fileName:t.filename,functionName:"",source:""}]}function Dn(t,e,s={}){let n=e;try{n=Rh(t)}catch{}return Mi(t.name,t.message,JSON.stringify(n),JSON.stringify(s))}function va(t,e=window,s={}){if(t instanceof ErrorEvent){if(t.error instanceof Error)return Dn(t.error,ma(t),s);{let[n,i]=t.message.split(":");return i||(n="Error",i=t.message),Mi(n,i,JSON.stringify(ma(t)),JSON.stringify(s))}}else if("PromiseRejectionEvent"in e&&t instanceof e.PromiseRejectionEvent){if(t.reason instanceof Error)return Dn(t.reason,[],s);{let n;try{n=JSON.stringify(t.reason)}catch{n=String(t.reason)}return Mi("Unhandled Promise Rejection",n,"[]",JSON.stringify(s))}}return null}function Dh(t,e){const s=Object.assign({captureExceptions:!0},e);function n(i){function r(o){const a=va(o,i);a!=null&&t.send(a)}try{t.attachEventListener(i,"unhandledrejection",r),t.attachEventListener(i,"error",r)}catch(o){console.error("Error while attaching to error proto contexts",o)}}s.captureExceptions&&(t.observer.attachContextCallback(n),n(window))}function ba(t,e=document.location){return t=t.trim(),t.startsWith("//")||t.startsWith("http://")||t.startsWith("https://")||t.startsWith("data:")?t:t.startsWith("/")?e.origin+t:e.origin+e.pathname+t}function Oh(t){return Lc&&(t.startsWith("data:image/svg+xml")||t.match(/.svg$|/i))}const Mh="https://static.openreplay.com/tracker/placeholder.jpeg";function Ah(t){function e(a,c){t.attributeSender.sendSetAttribute(a,"src",Mh);const{width:u,height:l}=c.getBoundingClientRect();c.hasAttribute("width")||t.attributeSender.sendSetAttribute(a,"width",String(u)),c.hasAttribute("height")||t.attributeSender.sendSetAttribute(a,"height",String(l))}const s=function(a,c){const{srcset:u}=c;if(!u)return;const l=u.split(u.match(/,\s+/)?/,\s+/:",").map(h=>ba(h)).join(", ");t.attributeSender.sendSetAttribute(a,"srcset",l)},n=function(a,c){c.src.length>Bc&&e(a,c),t.send(Ri(a,"src",c.src,t.getBaseHref()))},i=t.safe(function(a){const c=ba(a.src||"");Do(c)&&t.send(Jo(t.timestamp(),0,0,0,0,0,c,"img",0,!1))}),r=t.safe(function(a){const c=t.nodes.getID(a);c!==void 0&&a.complete&&(a.naturalHeight===0&&a.naturalWidth===0&&!Oh(a.src)?i(a):t.sanitizer.isHidden(c)||t.sanitizer.isObscured(c)?e(c,a):(n(c,a),s(c,a)))}),o=Lo(t.safe(a=>{for(const c of a)if(c.type==="attributes"){const u=c.target,l=t.nodes.getID(u);if(l===void 0)return;c.attributeName==="src"&&n(l,u),c.attributeName==="srcset"&&s(l,u)}}),t.options.forceNgOff);t.attachStopCallback(()=>{o.disconnect()}),t.nodes.attachNodeCallback(a=>{he(a,"img")&&(t.nodes.attachNodeListener(a,"error",()=>i(a)),t.nodes.attachNodeListener(a,"load",()=>r(a)),r(a),o.observe(a,{attributes:!0,attributeFilter:["src","srcset"]}))})}const Ph=["text","password","email","search","number","range","date","tel","time"];function Lh(t){return he(t,"textarea")?!0:he(t,"input")?Ph.includes(t.type):!1}function Bh(t){if(!he(t,"input"))return!1;const e=t.type;return e==="checkbox"||e==="radio"}const Fh=tt&&"labels"in HTMLInputElement.prototype?t=>{let e=t;for(;(e=e.parentNode)!==null;)if(he(e,"label"))return e;const s=t.labels;if(s!==null&&s.length===1)return s[0]}:t=>{let e=t;for(;(e=e.parentNode)!==null;)if(he(e,"label"))return e;const s=t.id;if(s){const n=t.ownerDocument.querySelectorAll('label[for="'+s+'"]');if(n!==null&&n.length===1)return n[0]}};function ya(t){let e=xi(t);if(e===null){const s=Fh(t);e=s&&s.innerText||t.placeholder||t.name||t.id||t.className||t.type}return Ro(e).slice(0,100)}const ws={Plain:0,Obscured:1,Hidden:2};function jh(t,e){const s=Object.assign({obscureInputNumbers:!0,obscureInputEmails:!0,defaultInputMode:ws.Obscured,obscureInputDates:!1},e);function n(l,h){let f=h.value,d=s.defaultInputMode;h.type==="password"||t.sanitizer.isHidden(l)?d=ws.Hidden:(t.sanitizer.isObscured(l)||d===ws.Plain&&(s.obscureInputNumbers&&h.type!=="date"&&/\d\d\d\d/.test(f)||s.obscureInputDates&&h.type==="date"||s.obscureInputEmails&&(h.type==="email"||~f.indexOf("@"))))&&(d=ws.Obscured);let p=0;switch(d){case ws.Hidden:p=-1,f="";break;case ws.Obscured:p=f.length,f="";break}return{value:f,mask:p}}function i(l,h){const{value:f,mask:d}=n(l,h);t.send(Zc(l,f,d))}const r=new Map,o=new Map;t.attachStopCallback(()=>{r.clear(),o.clear()});function a(l,h){r.get(l)!==h.value&&(r.set(l,h.value),i(l,h))}function c(l,h){o.get(l)!==h&&(o.set(l,h),t.send($c(l,h)))}t.ticker.attach(()=>{r.forEach((l,h)=>{const f=t.nodes.getNode(h);if(!f)return r.delete(h);a(h,f)}),o.forEach((l,h)=>{const f=t.nodes.getNode(h);if(!f)return o.delete(h);c(h,f.checked)})},3);function u(l,h,f,d){const{value:p,mask:m}=n(l,h),_=ya(h);t.send(mu(l,p,m!==0,_,f,d))}t.nodes.attachNodeCallback(t.safe(l=>{const h=t.nodes.getID(l);if(h!==void 0){if(he(l,"select")&&(i(h,l),t.nodes.attachNodeListener(l,"change",()=>i(h,l))),Lh(l)){a(h,l);let f=0,d=0,p=0;const m=()=>{f=Ke()},_=()=>{d===0&&f!==0&&(d=Ke()-f)},C=()=>{f!==0&&(p=Ke()-f),u(h,l,d,p),d=0,p=0,f=0};t.nodes.attachNodeListener(l,"focus",m),t.nodes.attachNodeListener(l,"input",_),t.nodes.attachNodeListener(l,"change",C);return}if(Bh(l)){c(h,l.checked),t.nodes.attachNodeListener(l,"change",()=>c(h,l.checked));return}}}))}let je,Xi,wa;function Uh(t,e){if(wa=new Date,t.nodeType!==Node.ELEMENT_NODE)throw new Error("Can't generate CSS selector for non-element node type.");if(t.tagName.toLowerCase()==="html")return"html";const s={root:document.body,idName:i=>!0,className:i=>!0,tagName:i=>!0,attr:(i,r)=>!1,seedMinLength:1,optimizedMinLength:2,threshold:1e3,maxNumberOfTries:1e4,timeoutMs:void 0};je={...s,...e},Xi=zh(je.root,s);let n=On(t,"all",()=>On(t,"two",()=>On(t,"one",()=>On(t,"none"))));if(n){const i=Ia(Ca(n,t));return i.length>0&&(n=i[0]),Mn(n)}else throw new Error("Selector was not found.")}function zh(t,e){return t.nodeType===Node.DOCUMENT_NODE?t:t===e.root?t.ownerDocument:t}function On(t,e,s){let n=null,i=[],r=t,o=0;for(;r;){const a=new Date().getTime()-wa.getTime();if(je.timeoutMs!==void 0&&a>je.timeoutMs)throw new Error(`Timeout: Can't find a unique selector after ${a}ms`);let c=Pn(Wh(r))||Pn(...Hh(r))||Pn(...qh(r))||Pn(Vh(r))||[Ta()];const u=Gh(r);if(e=="all")u&&(c=c.concat(c.filter(Ji).map(l=>An(l,u))));else if(e=="two")c=c.slice(0,1),u&&(c=c.concat(c.filter(Ji).map(l=>An(l,u))));else if(e=="one"){const[l]=c=c.slice(0,1);u&&Ji(l)&&(c=[An(l,u)])}else e=="none"&&(c=[Ta()],u&&(c=[An(c[0],u)]));for(let l of c)l.level=o;if(i.push(c),i.length>=je.seedMinLength&&(n=Sa(i,s),n))break;r=r.parentElement,o++}return n||(n=Sa(i,s)),!n&&s?s():n}function Sa(t,e){const s=Ia(Ea(t));if(s.length>je.threshold)return e?e():null;for(let n of s)if(ka(n))return n;return null}function Mn(t){let e=t[0],s=e.name;for(let n=1;n<t.length;n++){const i=t[n].level||0;e.level===i-1?s=`${t[n].name} > ${s}`:s=`${t[n].name} ${s}`,e=t[n]}return s}function _a(t){return t.map(e=>e.penalty).reduce((e,s)=>e+s,0)}function ka(t){const e=Mn(t);switch(Xi.querySelectorAll(e).length){case 0:throw new Error(`Can't select any node with this selector: ${e}`);case 1:return!0;default:return!1}}function Wh(t){const e=t.getAttribute("id");return e&&je.idName(e)?{name:"#"+CSS.escape(e),penalty:0}:null}function Hh(t){return Array.from(t.attributes).filter(s=>je.attr(s.name,s.value)).map(s=>({name:`[${CSS.escape(s.name)}="${CSS.escape(s.value)}"]`,penalty:.5}))}function qh(t){return Array.from(t.classList).filter(je.className).map(s=>({name:"."+CSS.escape(s),penalty:1}))}function Vh(t){const e=t.tagName.toLowerCase();return je.tagName(e)?{name:e,penalty:2}:null}function Ta(){return{name:"*",penalty:3}}function Gh(t){const e=t.parentNode;if(!e)return null;let s=e.firstChild;if(!s)return null;let n=0;for(;s&&(s.nodeType===Node.ELEMENT_NODE&&n++,s!==t);)s=s.nextSibling;return n}function An(t,e){return{name:t.name+`:nth-child(${e})`,penalty:t.penalty+1}}function Ji(t){return t.name!=="html"&&!t.name.startsWith("#")}function Pn(...t){const e=t.filter(Kh);return e.length>0?e:null}function Kh(t){return t!=null}function*Ea(t,e=[]){if(t.length>0)for(let s of t[0])yield*Ea(t.slice(1,t.length),e.concat(s));else yield e}function Ia(t){return[...t].sort((e,s)=>_a(e)-_a(s))}function*Ca(t,e,s={counter:0,visited:new Map}){if(t.length>2&&t.length>je.optimizedMinLength)for(let n=1;n<t.length-1;n++){if(s.counter>je.maxNumberOfTries)return;s.counter+=1;const i=[...t];i.splice(n,1);const r=Mn(i);if(s.visited.has(r))return;ka(i)&&Xh(i,e)&&(yield i,s.visited.set(r,!0),yield*Ca(i,e,s))}}function Xh(t,e){return Xi.querySelector(Mn(t))===e}function Jh(t,e,s){return Uh(t,{root:e.body,seedMinLength:3,optimizedMinLength:(s==null?void 0:s.minSelectorDepth)||2,threshold:(s==null?void 0:s.nthThreshold)||1e3,maxNumberOfTries:(s==null?void 0:s.maxOptimiseTries)||1e4})}function Yi(t){const e=t.tagName.toUpperCase();return e==="BUTTON"||e==="A"||e==="LI"||e==="SELECT"||e==="TR"||e==="TH"||t.onclick!=null||t.getAttribute("role")==="button"}function xa(t,e){return t instanceof Element?Yh(t,e):null}function Yh(t,e){let s=t;for(;s!==null&&s!==e.documentElement;){if(qt(s,"masked"))return null;s=s.parentElement}if(ji(t)){let n=t.ownerSVGElement;for(;n!==null;)t=n,n=n.ownerSVGElement}for(s=t;s!==null&&s!==e.documentElement;){const n=s.tagName.toUpperCase();if(n==="LABEL")return null;if(n==="INPUT"||Yi(s)||xi(s)!==null)return s;s=s.parentElement}return t===e.documentElement?null:t}function Qh(t,e){const{disableClickmaps:s=!1}=e||{};function n(g){const v=xi(g);if(v!==null)return v;if(he(g,"input"))return ya(g);if(Yi(g)){let I="";return g instanceof HTMLElement&&(I=t.sanitizer.getInnerTextSecure(g)),I=I||g.id||g.className,Ro(I).slice(0,100)}return""}let i=-1,r=-1,o=!1,a=null,c=0,u={},l=0,h=0,f=0,d=0,p;const m=.008,_=225;function C(){const g=d/_;if(!l){l=g;return}const v=(g-l)/_;f>4&&v>m&&t.send(vu(Ke())),d=0,f=0,l=g}t.attachStartCallback(()=>{p=setInterval(()=>C(),_)}),t.attachStopCallback(()=>{i=-1,r=-1,o=!1,a=null,u={},p&&clearInterval(p)});const T=()=>{o&&(t.send(eu(i,r)),o=!1)},y=(g,v=!1)=>{function I(S,k,A){return u[S]=u[S]||Jh(k,g,A)}const x=v?t.attachEventListener.bind(t):t.nodes.attachNodeListener.bind(t.nodes);x(g.documentElement,"mouseover",S=>{const k=xa(S.target,g);k!==a&&(a=k,c=performance.now())}),x(g,"mousemove",S=>{const[k,A]=t.observer.getDocumentOffset(g);i=S.clientX+k,r=S.clientY+A,o=!0;const j=Math.sign(S.movementX);d+=Math.abs(S.movementX)+Math.abs(S.movementY),j!==h&&(h=j,f++)},!1),x(g,"click",S=>{const k=xa(S.target,g);if(!S.clientX&&!S.clientY||k===null)return;const A=t.nodes.getID(k);if(A!==void 0){const j=S.pageX,F=S.pageY,G=g.documentElement.scrollWidth,U=g.documentElement.scrollHeight,E=Na(j/G),R=Na(F/U);T(),t.send(du(A,a===k?Math.round(performance.now()-c):0,n(k),Yi(k)&&!s?I(A,k,e):"",E,R),!0)}a=null})};t.nodes.attachNodeCallback(g=>{Cn(g)&&y(g)}),y(document,!0),t.ticker.attach(T,(e==null?void 0:e.trackingOffset)||7)}function Na(t){return Math.round(t*1e4)}function Zh(t){const e=[],s=document.getElementsByTagName("*"),n=/url\(("[^"]*"|'[^']*'|[^)]*)\)/i;for(let i=0;i<s.length;i++){const r=s[i];let o="";if(he(r,"img")&&(o=r.currentSrc||r.src),!o){const p=getComputedStyle(r).getPropertyValue("background-image");if(p){const m=n.exec(p);m!==null&&(o=m[1],(o.startsWith('"')||o.startsWith("'"))&&(o=o.substr(1,o.length-2)))}}if(!o)continue;const a=o.substr(0,10)==="data:image"?0:t[o];if(a===void 0)continue;const c=r.getBoundingClientRect(),u=Math.max(c.top,0),l=Math.max(c.left,0),h=Math.min(c.bottom,window.innerHeight||document.documentElement&&document.documentElement.clientHeight||0),f=Math.min(c.right,window.innerWidth||document.documentElement&&document.documentElement.clientWidth||0);if(h<=u||f<=l)continue;const d=(h-u)*(f-l);e.push({time:a,area:d})}return e}function $h(t,e){let s=Math.max(document.documentElement&&document.documentElement.clientWidth||0,window.innerWidth||0)*Math.max(document.documentElement&&document.documentElement.clientHeight||0,window.innerHeight||0)/10,n=s*t;for(let i=0;i<e.length;i++){const{time:r,area:o}=e[i];s+=o,n+=o*(r>t?r:t)}return s===0?0:n/s}function ef(t,e){const s=Object.assign({captureResourceTimings:!0,capturePageLoadTimings:!0,capturePageRenderTimings:!0,excludedResourceUrls:[]},e);if("PerformanceObserver"in window||(s.captureResourceTimings=!1),!s.captureResourceTimings)return;let n={};function i(u){var h;if(u.duration<0||!Do(u.name)||t.isServiceURL(u.name))return;n!==null&&(n[u.name]=u.startTime+u.duration);let l=!1;(h=s.excludedResourceUrls)==null||h.forEach(f=>{if(u.name.startsWith(f)){l=!0;return}}),!l&&t.send(Jo(u.startTime+ms(),u.duration,u.responseStart&&u.startTime?u.responseStart-u.startTime:0,u.transferSize>u.encodedBodySize?u.transferSize-u.encodedBodySize:0,u.encodedBodySize||0,u.decodedBodySize||0,u.name,u.initiatorType,u.transferSize,u.responseStatus&&u.responseStatus===304||u.transferSize===0))}const r=new PerformanceObserver(u=>u.getEntries().forEach(i));let o;t.attachStartCallback(function({sessionID:u}){u!==o&&(performance.getEntriesByType("resource").forEach(i),o=u),r.observe({entryTypes:["resource"]})}),t.attachStopCallback(function(){r.disconnect()});let a=0,c=0;if(s.capturePageLoadTimings){let u=!1;t.ticker.attach(()=>{if(!u&&((a===0||c===0)&&performance.getEntriesByType("paint").forEach(l=>{const{name:h,startTime:f}=l;switch(h){case"first-paint":a=f;break;case"first-contentful-paint":c=f;break}}),performance.timing.loadEventEnd||performance.now()>3e4)){u=!0;const{navigationStart:l,requestStart:h,responseStart:f,responseEnd:d,domContentLoadedEventStart:p,domContentLoadedEventEnd:m,loadEventStart:_,loadEventEnd:C}=performance.timing;t.send(su(h-l||0,f-l||0,d-l||0,p-l||0,m-l||0,_-l||0,C-l||0,a,c))}},30)}if(s.capturePageRenderTimings){let u=0,l=0,h=0,f=null,d=!1;t.ticker.attach(()=>{if(d)return;const p=performance.now();if(n!==null&&(u=Math.max.apply(null,Object.keys(n).map(m=>n[m])),p-u>1e3&&(f=Zh(n),n=null)),h!==null&&(p-h>50&&(l=p),h=p-l>5e3?null:p),f!==null&&h===null||p>3e4){d=!0,n=null;const m=f===null?0:$h(c||a,f),{domContentLoadedEventEnd:_,navigationStart:C}=performance.timing,T=h===null?Math.max(l,c,_-C||0):0;t.send(nu(m,c>u?c:u,T))}})}}function Qi(t){const e=t.defaultView;return[e&&e.scrollX||t.documentElement&&t.documentElement.scrollLeft||t.body&&t.body.scrollLeft||0,e&&e.scrollY||t.documentElement&&t.documentElement.scrollTop||t.body&&t.body.scrollTop||0]}function tf(t,e){let s=!1;const n=new Map;function i(a){oa(a)&&(gt(a)&&n.set(a,[a.scrollLeft,a.scrollTop]),Cn(a)&&n.set(a,Qi(a)))}const r=t.safe(()=>{e||t.send(qc(...Qi(document)))}),o=t.safe((a,c)=>{const u=t.nodes.getID(c);u!==void 0&&t.send(Qc(u,a[0],a[1]))});t.attachStartCallback(r),t.attachStopCallback(()=>{s=!1,n.clear()}),t.nodes.attachNodeCallback((a,c)=>{c&&(gt(a)&&a.scrollLeft+a.scrollTop>0?n.set(a,[a.scrollLeft,a.scrollTop]):Cn(a)&&n.set(a,Qi(a))),xn(a)&&t.nodes.attachNodeListener(a,"scroll",u=>{i(u.target)})}),t.attachEventListener(document,"scroll",a=>{const c=a.target;if(c===document){s=!0;return}i(c)}),t.ticker.attach(()=>{s&&(r(),s=!1),n.forEach(o),n.clear()},5,!1)}function sf(t){let e,s,n,i,r=document.referrer;const o=t.safe(()=>{const{URL:u}=document;u!==e&&(e=u,t.send(wu(e,r,i,document.title)),i=0,r=e)}),a=t.safe(()=>{const{innerWidth:u,innerHeight:l}=window;(u!==s||l!==n)&&(s=u,n=l,t.send(Hc(s,n)))}),c=document.hidden===void 0?Function.prototype:t.safe(()=>t.send(cu(document.hidden)));t.attachStartCallback(()=>{e=null,i=ms(),s=n=-1,o(),a(),c()}),document.hidden!==void 0&&t.attachEventListener(document,"visibilitychange",c,!1,!1),t.ticker.attach(o,1,!1),t.ticker.attach(a,5,!1)}function Ra(t){return xn(t)&&!!t.adoptedStyleSheets}let nf=15;function Da(){return nf++}const Ln=new Map;function rf(t){if(t===null||!Ra(document))return;const e=new Map,s=new Map,n=o=>setTimeout(()=>{let a=t.nodes.getID(o);if(o===document&&(a=0),a===void 0)return;let c=s.get(a);c||(c=[]);const u=[],l=o.adoptedStyleSheets;if(l&&Symbol.iterator in l)for(const h of l){let f=e.get(h);const d=!f;if(f||(f=Da(),e.set(h,f)),c.includes(f)||t.send(Go(f,a)),d){const p=h.cssRules;for(let m=0;m<p.length;m++)t.send(Oi(f,p[m].cssText,m,t.getBaseHref()))}u.push(f)}if(Symbol.iterator in c)for(const h of c)u.includes(h)||t.send(pu(h,a));s.set(a,u)},20);function i(o){const a=Object.getOwnPropertyDescriptor(o,"adoptedStyleSheets");a&&Object.defineProperty(o,"adoptedStyleSheets",{...a,set:function(c){const u=a.set.call(this,c);return n(this),u}})}const r=o=>{if(o.__openreplay_adpss_patched__)return;o.__openreplay_adpss_patched__=!0,i(o.Document.prototype),i(o.ShadowRoot.prototype);const{replace:a,replaceSync:c}=o.CSSStyleSheet.prototype;o.CSSStyleSheet.prototype.replace=function(u){return a.call(this,u).then(l=>{const h=e.get(this);return h&&t.send(qo(h,u,t.getBaseHref())),l})},o.CSSStyleSheet.prototype.replaceSync=function(u){const l=e.get(this);return l&&t.send(qo(l,u,t.getBaseHref())),c.call(this,u)}};r(window),t.observer.attachContextCallback(t.safe(r)),t.attachStopCallback(()=>{e.clear(),s.clear()}),t.attachStartCallback(()=>{n(document)}),t.nodes.attachNodeCallback(o=>{Ra(o)&&n(o)})}function of(t){if(t===null)return;if(!window.CSSStyleSheet){t.send(hu("no_stylesheet_prototype_in_window",""));return}const e=t.safe((i,r,o)=>{const a=Ln.get(i);a&&(typeof o=="string"?t.send(Oi(a,o,r,t.getBaseHref())):t.send(Vo(a,r)))}),s=t.safe(i=>{let r=i;for(;r.parentRule;)r=r.parentRule;const o=r.parentStyleSheet;if(!o){t.debug.warn("No parent StyleSheet found for",r,i);return}const a=Ln.get(o);if(!a){t.debug.warn("No sheedID found for",o,Ln);return}const c=r.cssText,u=o.cssRules,l=Array.from(u).indexOf(r);l>=0?(t.send(Oi(a,c,l,t.getBaseHref())),t.send(Vo(a,l+1))):t.debug.warn("Rule index not found in",o,r)}),n=t.safe(i=>{const{insertRule:r,deleteRule:o}=i.CSSStyleSheet.prototype,{insertRule:a,deleteRule:c}=i.CSSGroupingRule.prototype;i.CSSStyleSheet.prototype.insertRule=function(u,l=0){return e(this,l,u),r.call(this,u,l)},i.CSSStyleSheet.prototype.deleteRule=function(u){return e(this,u),o.call(this,u)},i.CSSGroupingRule.prototype.insertRule=function(u,l=0){const h=a.call(this,u,l);return s(this),h},i.CSSGroupingRule.prototype.deleteRule=function(u=0){const l=c.call(this,u);return s(this),l}});n(window),t.observer.attachContextCallback(n),t.nodes.attachNodeCallback(i=>{if(!he(i,"style")||!i.sheet||i.textContent!==null&&i.textContent.trim().length>0)return;const r=t.nodes.getID(i);if(!r)return;const o=i.sheet,a=Da();Ln.set(o,a),t.send(Go(a,r));const c=o.cssRules;for(let u=0;u<c.length;u++)e(o,u,c[u].cssText)})}function af(t){function e(n){const i=t.nodes.getID(n);i!==void 0&&t.send(Ho(i))}let s=!1;t.nodes.attachNodeCallback(n=>{he(n,"body")&&(t.nodes.attachNodeListener(n,"focus",i=>{oa(i.target)&&(e(i.target),s=!1)}),t.nodes.attachNodeListener(n,"blur",i=>{i.relatedTarget===null&&(s=!0,setTimeout(()=>{s&&t.send(Ho(-1))},0))}))}),t.attachStartCallback(()=>{let n=document.activeElement;for(;n&&he(n,"iframe")&&n.contentDocument;)n=n.contentDocument.activeElement;n&&n!==n.ownerDocument.body&&e(n)},!0)}function lf(t){if(!window.FontFace)return;const e=new Map,s=n=>{class i extends n.FontFace{constructor(...o){if(typeof o[1]=="string"){let a="";o[2]&&t.safe(()=>{a=JSON.stringify(o[2])});const c=[o[0],o[1],a],u=e.get(n.document)||[];u.push(c),e.set(n.document,u);const l=n===window?0:t.nodes.getID(n.document);if(l===void 0)return;t.active()&&t.send(Wo(l,...c))}super(...o)}}n.FontFace=i};t.observer.attachContextCallback(s),s(window),t.nodes.attachNodeCallback(t.safe(n=>{if(!Cn(n))return;const i=e.get(n);if(!i)return;const r=n.defaultView===window?0:t.nodes.getID(n);r!==void 0&&i.forEach(o=>{t.send(Wo(r,...o))})}))}function cf(t,e,s,n,i){t.debug.log("Openreplay: attaching axios spy to instance",e);function r(f){t.debug.log("Openreplay: capturing axios response data",f);const{headers:d,data:p,method:m,url:_,baseURL:C}=f.config,{data:T,headers:y,status:g,response:v}=f,{data:I,headers:x,status:S}=v||{},k=s.ignoreHeaders,A=Array.isArray(k)?N=>k.includes(N):()=>k;function j(N,V){A(V[0])||(N[V[0]]=V[1])}let F={},G={};d.toJSON?F=d.toJSON():d instanceof Headers?d.forEach((N,V)=>j(F,[V,N])):Array.isArray(d)?d.forEach(N=>j(F,N)):typeof d=="object"&&Object.entries(d).forEach(N=>j(F,N));const U=x||y;U.toJSON?G=U.toJSON():U instanceof Headers?U.forEach((N,V)=>j(G,[V,N])):Array.isArray(U)?U.forEach(N=>j(G,N)):typeof U=="object"&&Object.entries(U).forEach(([N,V])=>{A(N)||(G[N]=V)});const E=n({url:_,method:m||"",status:g||S||0,request:{headers:F,body:p},response:{headers:G,body:I||T}});if(!E){t.debug.log("Openreplay: empty request/response info, skipping");return}const R=f.config.__openreplay_timing,O=performance.now()-R;t.debug.log("Openreplay: final req object",E),t.send(kn("xhr",String(m),String(E.url),i(E.request),i(E.response),E.status,R+ms(),O,0))}function o(f){if(t.debug.log("Openreplay: capturing API request",f),f.__openreplay_timing=performance.now(),s.sessionTokenHeader){const d=typeof s.sessionTokenHeader=="string"?s.sessionTokenHeader:"X-OpenReplay-Session-Token",p=t.getSessionToken();p&&f.headers.set(d,p)}return f}function a(f){return s.failuresOnly||r(f),f}function c(f){return t.debug.log("Openreplay: capturing API request error",f),uf(f)&&f.response?r(f.response):f instanceof Error&&t.send(Dn(f,[])),Promise.reject(f)}function u(f){t.debug.log("Openreplay: failed API request, skipping",f)}const l=e.interceptors.request.use(o,u,{synchronous:!0}),h=e.interceptors.response.use(a,c,{synchronous:!0});t.attachStopCallback(()=>{var f,d,p,m;(d=(f=e.interceptors.request).eject)==null||d.call(f,l),(m=(p=e.interceptors.response).eject)==null||m.call(p,h)})}function uf(t){return hf(t)&&t.isAxiosError===!0}function hf(t){return t!==null&&typeof t=="object"}class Zi{constructor(e=[],s,n){this.ignoredHeaders=e,this.setSessionTokenHeader=s,this.sanitize=n,this.id="",this.name="",this.method="",this.url="",this.status=0,this.statusText="",this.cancelState=0,this.readyState=0,this.header={},this.responseType="",this.requestType="xhr",this.requestHeader={},this.responseSize=0,this.responseSizeText="",this.startTime=0,this.endTime=0,this.duration=0,this.getData={},this.requestData=null}getMessage(){const{reqHs:e,resHs:s}=this.writeHeaders(),n={headers:e,body:this.method==="GET"?JSON.stringify(this.getData):this.requestData},i={headers:s,body:this.response},r=this.sanitize({url:this.url,method:this.method,status:this.status,request:n,response:i});if(!r)return null;if(r.url.includes("/graphql")&&r.response.body&&typeof r.response.body=="string"){const a=r.response.body.includes("errors");r.status=a?400:200,this.requestType="graphql"}return{requestType:this.requestType,method:r.method,url:r.url,request:JSON.stringify(r.request),response:JSON.stringify(r.response),status:r.status,startTime:this.startTime,duration:this.duration,responseSize:this.responseSize}}writeHeaders(){const e={};Object.entries(this.requestHeader).forEach(([n,i])=>{this.isHeaderIgnored(n)||(e[n]=i)}),this.setSessionTokenHeader((n,i)=>{e[n]=i});const s={};return Object.entries(this.header).forEach(([n,i])=>{this.isHeaderIgnored(n)||(s[n]=i)}),{reqHs:e,resHs:s}}isHeaderIgnored(e){return Array.isArray(this.ignoredHeaders)?this.ignoredHeaders.map(s=>s.toLowerCase()).includes(e.toLowerCase()):this.ignoredHeaders}}const Vs=(t,e)=>{let s="";switch(t){case"":case"text":case"json":typeof e=="string"?s=e:er(e)||Array.isArray(e)?s=JSON.stringify(e):typeof e<"u"&&(s=Object.prototype.toString.call(e));break;case"blob":case"document":case"arraybuffer":default:typeof e<"u"&&(s=Object.prototype.toString.call(e));break}return s},$i=t=>{if(!t)return null;let e;if(typeof t=="string"){(t[0]==="{"||t[0]==="[")&&(e=t);const s=t.split("&");s.length===1?e=t:e=s.join(",")}else if(df(t)){const s=[];for(const[n,i]of t)s.push(`${n}=${typeof i=="string"?i:"[object Object]"}`);e=s.join(",")}else t instanceof Blob||t instanceof ReadableStream||t instanceof ArrayBuffer?e="byte data":er(t)?e=t:e=`can't parse body ${typeof t}`;return e},ff=(t,e={})=>{er(e)||(e={});let s=t?t.split("?"):[];if(s.shift(),s.length>0){s=s.join("?").split("&");for(const n of s){const i=n.split("=");try{e[i[0]]=decodeURIComponent(i[1])}catch{e[i[0]]=i[1]}}}return e};function er(t){return t!==null&&typeof t=="object"}function df(t){return t==null||ArrayBuffer.isView(t)?!1:typeof Symbol<"u"&&typeof t[Symbol.iterator]=="function"}function Bn(t){return t<=0?"":t>=1e3*1e3?(t/1e3/1e3).toFixed(1)+" MB":t>=1e3?(t/1e3).toFixed(1)+" KB":`${t}B`}const tr=t=>(t.startsWith("//")&&(t=`${new URL(window.location.href).protocol}${t}`),t.startsWith("http")?new URL(t):new URL(t,window.location.href)),pf=t=>t instanceof Blob?t.type:t instanceof FormData?"multipart/form-data":t instanceof URLSearchParams?"application/x-www-form-urlencoded;charset=UTF-8":"text/plain;charset=UTF-8";class gf{constructor(e,s,n,i,r){this.ignoredHeaders=e,this.setSessionTokenHeader=s,this.sanitize=n,this.sendMessage=i,this.isServiceUrl=r}apply(e,s,n){const i=n[0],r=n[1],o=new Zi(this.ignoredHeaders,this.setSessionTokenHeader,this.sanitize);if(this.isServiceUrl(i))return e.apply(s,n);const a=tr(i);if(o.method="POST",o.url=i,o.name=(a.pathname.split("/").pop()||"")+a.search,o.requestType="beacon",o.requestHeader={"Content-Type":pf(r)},o.status=0,o.statusText="Pending",a.search&&a.searchParams){o.getData={};for(const[l,h]of a.searchParams)o.getData[l]=h}o.requestData=$i(r),o.startTime||(o.startTime=performance.now());const c=e.apply(s,n);c?(o.endTime=performance.now(),o.duration=o.endTime-(o.startTime||o.endTime),o.status=0,o.statusText="Sent",o.readyState=4):(o.status=500,o.statusText="Unknown");const u=o.getMessage();return u&&this.sendMessage(u),c}}class mf{static create(e,s,n,i,r,o){if(e)return new Proxy(e,new gf(s,n,i,r,o))}}var nt;(function(t){t[t.UNSENT=0]="UNSENT",t[t.OPENED=1]="OPENED",t[t.HEADERS_RECEIVED=2]="HEADERS_RECEIVED",t[t.LOADING=3]="LOADING",t[t.DONE=4]="DONE"})(nt||(nt={}));class vf{constructor(e,s){this.resp=e,this.item=s,this.mockReader()}set(e,s,n){return Reflect.set(e,s,n)}get(e,s){const n=Reflect.get(e,s);switch(s){case"arrayBuffer":case"blob":case"formData":case"json":case"text":return()=>(this.item.responseType=s.toLowerCase(),n.apply(e).then(i=>(this.item.response=Vs(this.item.responseType,i),i)))}return typeof n=="function"?n.bind(e):n}mockReader(){let e;if(!this.resp.body||typeof this.resp.body.getReader!="function")return;const s=this.resp.body.getReader;this.resp.body.getReader=()=>{const n=s.apply(this.resp.body);if(this.item.readyState===nt.DONE)return n;const i=n.read,r=n.cancel;return this.item.responseType="arraybuffer",n.read=()=>i.apply(n).then(o=>{if(!e)e=new Uint8Array(o.value);else{const a=new Uint8Array(e.length+o.value.length);a.set(e),a.set(o.value,e.length),e=a}return this.item.endTime=performance.now(),this.item.duration=this.item.endTime-(this.item.startTime||this.item.endTime),this.item.readyState=o.done?4:3,this.item.statusText=o.done?String(this.item.status):"Loading",this.item.responseSize=e.length,this.item.responseSizeText=Bn(this.item.responseSize),o.done&&(this.item.response=Vs(this.item.responseType,e)),o}),n.cancel=(...o)=>(this.item.cancelState=2,this.item.statusText="Cancel",this.item.endTime=performance.now(),this.item.duration=this.item.endTime-(this.item.startTime||this.item.endTime),this.item.response=Vs(this.item.responseType,e),r.apply(n,o)),n}}}class bf{constructor(e,s,n,i,r,o){this.ignoredHeaders=e,this.setSessionTokenHeader=s,this.sanitize=n,this.sendMessage=i,this.isServiceUrl=r,this.tokenUrlMatcher=o}apply(e,s,n){const i=n[0],r=n[1];if(!i||typeof i!="string"&&!(i!=null&&i.url)||(i instanceof URL||typeof i=="string"?this.isServiceUrl(String(i)):this.isServiceUrl(String(i.url))))return e.apply(window,n);const a=new Zi(this.ignoredHeaders,this.setSessionTokenHeader,this.sanitize);return this.beforeFetch(a,i,r),this.setSessionTokenHeader((c,u)=>{if(!(this.tokenUrlMatcher!==void 0&&!this.tokenUrlMatcher(a.url))){if(n[1]===void 0&&n[0]instanceof Request)return n[0].headers.append(c,u);n[1]||(n[1]={}),n[1].headers===void 0&&(n[1]=Object.assign(Object.assign({},n[1]),{headers:{}})),n[1].headers instanceof Headers?n[1].headers.append(c,u):Array.isArray(n[1].headers)?n[1].headers.push([c,u]):n[1].headers[c]=u}}),e.apply(window,n).then(this.afterFetch(a)).catch(c=>{throw a.endTime=performance.now(),a.duration=a.endTime-(a.startTime||a.endTime),c})}beforeFetch(e,s,n){let i,r="GET",o={};if(typeof s=="string"?(r=(n==null?void 0:n.method)||"GET",i=tr(s),o=(n==null?void 0:n.headers)||{}):(r=s.method||"GET",i=tr(s.url),o=s.headers),e.method=r,e.requestType="fetch",e.requestHeader=o,e.url=i.toString(),e.name=(i.pathname.split("/").pop()||"")+i.search,e.status=0,e.statusText="Pending",e.readyState=1,e.startTime||(e.startTime=performance.now()),Object.prototype.toString.call(o)==="[object Headers]"){e.requestHeader={};for(const[a,c]of o)e.requestHeader[a]=c}else e.requestHeader=o;if(i.search&&i.searchParams){e.getData={};for(const[a,c]of i.searchParams)e.getData[a]=c}n!=null&&n.body&&(e.requestData=$i(n.body))}afterFetch(e){return s=>{e.endTime=performance.now(),e.duration=e.endTime-(e.startTime||e.endTime),e.status=s.status,e.statusText=String(s.status);let n=!1;e.header={};for(const[i,r]of s.headers)e.header[i]=r,n=r.toLowerCase().indexOf("chunked")>-1?!0:n;return n?e.readyState=3:(e.readyState=4,this.handleResponseBody(s.clone(),e).then(i=>{e.responseSize=typeof i=="string"?i.length:i.byteLength,e.responseSizeText=Bn(e.responseSize),e.response=Vs(e.responseType,i);const r=e.getMessage();r&&this.sendMessage(r)}).catch(i=>{if(i.name!=="AbortError")throw i})),new Proxy(s,new vf(s,e))}}handleResponseBody(e,s){const n=e.headers.get("content-type");return n&&n.includes("application/json")?(s.responseType="json",e.text()):n&&(n.includes("text/html")||n.includes("text/plain"))?(s.responseType="text",e.text()):(s.responseType="arraybuffer",e.arrayBuffer())}}class yf{static create(e,s,n,i,r,o){return new Proxy(fetch,new bf(e,s,n,i,r,o))}}class wf{constructor(e,s,n,i,r,o,a){this.ignoredHeaders=s,this.setSessionTokenHeader=n,this.sanitize=i,this.sendMessage=r,this.isServiceUrl=o,this.tokenUrlMatcher=a,this.XMLReq=e,this.XMLReq.onreadystatechange=()=>{this.onReadyStateChange()},this.XMLReq.onabort=()=>{this.onAbort()},this.XMLReq.ontimeout=()=>{this.onTimeout()},this.item=new Zi(s,n,i),this.item.requestType="xhr"}get(e,s){switch(s){case"open":return this.getOpen(e);case"send":return this.setSessionTokenHeader((i,r)=>{this.tokenUrlMatcher!==void 0&&!this.tokenUrlMatcher(this.item.url)||e.setRequestHeader(i,r)}),this.getSend(e);case"setRequestHeader":return this.getSetRequestHeader(e);default:const n=Reflect.get(e,s);return typeof n=="function"?n.bind(e):n}}set(e,s,n){switch(s){case"onreadystatechange":return this.setOnReadyStateChange(e,s,n);case"onabort":return this.setOnAbort(e,s,n);case"ontimeout":return this.setOnTimeout(e,s,n)}return Reflect.set(e,s,n)}onReadyStateChange(){if(!(this.item.url&&this.isServiceUrl(this.item.url))&&(this.item.readyState=this.XMLReq.readyState,this.item.responseType=this.XMLReq.responseType,this.item.endTime=performance.now(),this.item.duration=this.item.endTime-this.item.startTime,this.updateItemByReadyState(),setTimeout(()=>{this.item.response=Vs(this.item.responseType,this.item.response)},0),this.XMLReq.readyState===nt.DONE)){const e=this.item.getMessage();e&&this.sendMessage(e)}}onAbort(){this.item.cancelState=1,this.item.statusText="Abort";const e=this.item.getMessage();e&&this.sendMessage(e)}onTimeout(){this.item.cancelState=3,this.item.statusText="Timeout";const e=this.item.getMessage();e&&this.sendMessage(e)}getOpen(e){const s=Reflect.get(e,"open");return(...n)=>{var i,r,o;const a=n[0],c=n[1];return this.item.method=a?a.toUpperCase():"GET",this.item.url=((i=c.toString)===null||i===void 0?void 0:i.call(c))||"",this.item.name=(o=(r=this.item.url)===null||r===void 0?void 0:r.replace(new RegExp("/*$"),"").split("/").pop())!==null&&o!==void 0?o:"",this.item.getData=ff(this.item.url,{}),s.apply(e,n)}}getSend(e){const s=Reflect.get(e,"send");return(...n)=>{const i=n[0];return this.item.requestData=$i(i),s.apply(e,n)}}getSetRequestHeader(e){const s=Reflect.get(e,"setRequestHeader");return(...n)=>(this.item.requestHeader||(this.item.requestHeader={}),this.item.requestHeader[n[0]]=n[1],s.apply(e,n))}setOnReadyStateChange(e,s,n){return Reflect.set(e,s,(...i)=>{this.onReadyStateChange(),n==null||n.apply(e,i)})}setOnAbort(e,s,n){return Reflect.set(e,s,(...i)=>{this.onAbort(),n.apply(e,i)})}setOnTimeout(e,s,n){return Reflect.set(e,s,(...i)=>{this.onTimeout(),n.apply(e,i)})}updateItemByReadyState(){switch(this.XMLReq.readyState){case nt.UNSENT:case nt.OPENED:this.item.status=nt.UNSENT,this.item.statusText="Pending",this.item.startTime||(this.item.startTime=performance.now());break;case nt.HEADERS_RECEIVED:this.item.status=this.XMLReq.status,this.item.statusText="Loading",this.item.header={};const e=this.XMLReq.getAllResponseHeaders()||"",s=e.split(`
|
|
19
|
+
`);for(let n=0;n<s.length;n++){const i=s[n];if(!i)continue;const r=i.split(": "),o=r[0];this.item.header[o]=r.slice(1).join(": ")}break;case nt.LOADING:this.item.status=this.XMLReq.status,this.item.statusText="Loading",this.XMLReq.response&&this.XMLReq.response.length&&(this.item.responseSize=this.XMLReq.response.length,this.item.responseSizeText=Bn(this.item.responseSize));break;case nt.DONE:this.item.status=this.XMLReq.status||this.item.status||0,this.item.statusText=String(this.item.status),this.item.endTime=performance.now(),this.item.duration=this.item.endTime-(this.item.startTime||this.item.endTime),this.item.response=this.XMLReq.response,this.XMLReq.response&&this.XMLReq.response.length&&(this.item.responseSize=this.XMLReq.response.length,this.item.responseSizeText=Bn(this.item.responseSize));break;default:this.item.status=this.XMLReq.status,this.item.statusText="Unknown";break}}}class Sf{static create(e,s,n,i,r,o){return new Proxy(XMLHttpRequest,{construct(a){const c=new a;return new Proxy(c,new wf(c,e,s,n,i,r,o))}})}}const Oa=t=>{const e=`Openreplay: Can't find ${t} in global context.`;console.warn(e)};function _f(t,e,s,n,i,r,o={xhr:!0,fetch:!0,beacon:!0},a){var c;if(t&&(o.xhr&&(t.XMLHttpRequest?t.XMLHttpRequest=Sf.create(e,s,n,i,r,a):Oa("XMLHttpRequest")),o.fetch&&(t.fetch?t.fetch=yf.create(e,s,n,i,r,a):Oa("fetch")),o.beacon&&!((c=t.navigator)===null||c===void 0)&&c.sendBeacon)){const u=t.navigator.sendBeacon;t.navigator.sendBeacon=mf.create(u,e,s,n,i,r)}}function sr(t){return t.__or_req_data__||(t.__or_req_data__={body:void 0,headers:{}}),t.__or_req_data__}function Ma(t){return typeof t=="string"?t.toUpperCase():"GET"}function kf(t,e={}){const s=Object.assign({failuresOnly:!1,ignoreHeaders:["cookie","set-cookie","authorization"],capturePayload:!1,sessionTokenHeader:!1,captureInIframes:!0,axiosInstances:void 0,useProxy:!0},e);s.useProxy===!1&&t.debug.warn("Network module is migrating to proxy api, to gradually migrate and test it set useProxy to true");const n=s.ignoreHeaders,i=Array.isArray(n)?l=>n.includes(l):()=>n,r=s.sessionTokenHeader===!0?"X-OpenReplay-SessionToken":s.sessionTokenHeader;function o(l){if(r){const h=t.getSessionToken();h&&t.safe(l)(r,h)}}function a(l){if(s.capturePayload||(delete l.request.body,delete l.response.body),s.sanitizer){const h=l.response.body;if(typeof h=="string")try{l.response.body=JSON.parse(h)}catch{}return s.sanitizer(l)}return l}function c(l){if(l&&typeof l.body!="string")try{l.body=JSON.stringify(l.body)}catch{l.body="<unable to stringify>",t.notify.warn("Openreplay fetch couldn't stringify body:",l.body)}return JSON.stringify(l)}const u=l=>{if(s.useProxy)return _f(l,s.ignoreHeaders,o,a,y=>{t.send(kn(y.requestType,y.method,y.url,y.request,y.response,y.status,y.startTime+ms(),y.duration,y.responseSize))},y=>t.isServiceURL(y),{xhr:!0,fetch:!0,beacon:!0},s.tokenUrlMatcher);const h=l.fetch.bind(l),f=(y,g={})=>{if(!(typeof y=="string"||y instanceof URL)||t.isServiceURL(String(y)))return h(y,g);o(function(I,x){g.headers===void 0&&(g.headers={}),g.headers instanceof Headers?g.headers.append(I,x):Array.isArray(g.headers)?g.headers.push([I,x]):g.headers[I]=x});const v=performance.now();return h(y,g).then(I=>{const x=performance.now()-v;if(s.failuresOnly&&I.status<400)return I;const S=I.clone();return S.text().then(k=>{const A={},j={};if(n!==!0){const U=([E,R])=>{i(E)||(A[E]=R)};g.headers instanceof Headers?g.headers.forEach((E,R)=>U([R,E])):Array.isArray(g.headers)?g.headers.forEach(U):typeof g.headers=="object"&&Object.entries(g.headers).forEach(U),S.headers.forEach((E,R)=>{i(R)||(j[R]=E)})}const F=Ma(g.method),G=a({url:String(y),method:F,status:S.status,request:{headers:A,body:g.body||null},response:{headers:j,body:k}});G&&t.send(kn("fetch",F,String(G.url),c(G.request),c(G.response),S.status,v+ms(),x,0))}).catch(k=>t.debug.error("Could not process Fetch response:",k)),I})};l.fetch=f;const d=l.XMLHttpRequest.prototype.open,p=l.XMLHttpRequest.prototype.setRequestHeader,m=l.XMLHttpRequest.prototype.send;function _(y,g){const v=this;o((x,S)=>v.setRequestHeader(x,S));let I=0;return v.addEventListener("loadstart",x=>{I=x.timeStamp}),v.addEventListener("load",t.safe(x=>{const{headers:S,body:k}=sr(v),A=I>0?x.timeStamp-I:0,F=(v.getAllResponseHeaders()||"").trim().split(/[\r\n]+/),G={};F.forEach(function(R){const O=R.split(": "),N=O.shift();i(N)||(G[N]=O.join(": "))});const U=Ma(y),E=a({url:String(g),method:U,status:v.status,request:{headers:S,body:k||null},response:{headers:G,body:v.response}});E&&t.send(kn("xhr",U,String(E.url),c(E.request),c(E.response),v.status,I+ms(),A,0))})),d.apply(this,arguments)}function C(y){const g=sr(this);return g.body=y,m.apply(this,arguments)}function T(y,g){if(!i(y)){const v=sr(this);v.headers[y]=g}return p.apply(this,arguments)}s.axiosInstances||(l.XMLHttpRequest.prototype.open=_,l.XMLHttpRequest.prototype.send=C,l.XMLHttpRequest.prototype.setRequestHeader=T)};u(window),s.axiosInstances&&s.axiosInstances.forEach(l=>{cf(t,l,s,a,c)}),s.captureInIframes&&t.observer.attachContextCallback(t.safe(u))}function Tf(t){t.attachEventListener(document,"selectionchange",()=>{const e=document.getSelection();if(e!==null&&!e.isCollapsed){const s=t.nodes.getID(e.anchorNode),n=t.nodes.getID(e.focusNode),i=e.toString().replace(/\s+/g," ");s&&n&&t.send(Ko(s,n,i))}else t.send(Ko(-1,-1,""))})}function Ef(t){function e(){document.hidden||(t.debug.log("Openreplay: tab change to"+t.session.getTabId()),t.send(Tn(t.session.getTabId())))}t.attachEventListener(window,"focus",e,!1,!1)}const Fn="/installation/javascript-sdk";function If(t){if(t==null)return console.error(`OpenReplay: invalid options argument type. Please, check documentation on ${_n}${Fn}`),!1;if(typeof t.projectKey!="string")if(typeof t.projectKey!="number"){if(typeof t.projectID!="number")return console.error(`OpenReplay: projectKey is missing or wrong type (string is expected). Please, check ${_n}${Fn} for more information.`),!1;t.projectKey=t.projectID.toString(),It("`projectID` option","`projectKey` option",Fn)}else console.warn("OpenReplay: projectKey is expected to have a string type."),t.projectKey=t.projectKey.toString();return t.sessionToken!=null&&It("`sessionToken` option","`sessionHash` start() option","/"),!0}const Cf=()=>{try{return!!window.top}catch{return!1}};class xf{constructor(e){var a,c;if(this.options=e,this.app=null,this.crossdomainMode=!1,this.checkDoNotTrack=()=>this.options.respectDoNotTrack&&(navigator.doNotTrack=="1"||window.doNotTrack=="1"),this.signalStartIssue=(u,l)=>{const h=this.checkDoNotTrack(),f=new XMLHttpRequest,d=this.options.ingestPoint||ha;f.open("POST",d+"/v1/web/not-started"),f.send(JSON.stringify({trackerVersion:"14.0.14",projectKey:this.options.projectKey,doNotTrack:h,reason:l.length?`missing api: ${l.join(",")}`:u}))},this.restartCanvasTracking=()=>{this.app!==null&&this.app.restartCanvasTracking()},this.handleError=(u,l={})=>{if(this.app!==null){if(u instanceof Error){const h=Dn(u,[],l);this.app.send(h)}else if(u instanceof ErrorEvent||"PromiseRejectionEvent"in window&&u instanceof PromiseRejectionEvent){const h=va(u,void 0,l);h!=null&&this.app.send(h)}}},this.crossdomainMode=!!(Po()&&((a=e.crossdomain)!=null&&a.enabled)),!tt||!If(e)){console.error("OpenReplay: tracker called in a non-browser environment or with invalid options");return}if(window.__OPENREPLAY__||!this.crossdomainMode&&Po()&&Cf()&&((c=window.top)!=null&&c.__OPENREPLAY__)){console.error("OpenReplay: one tracker instance has been initialised already");return}if(!e.__DISABLE_SECURE_MODE&&location.protocol!=="https:"){console.error("OpenReplay: Your website must be publicly accessible and running on SSL in order for OpenReplay to properly capture and replay the user session. You can disable this check by setting `__DISABLE_SECURE_MODE` option to `true` if you are testing in localhost. Keep in mind, that asset files on a local machine are not available to the outside world. This might affect tracking if you use css files.");return}const s=this.checkDoNotTrack(),n=[],i=["Map","Set","MutationObserver","performance","timing","startsWith","Blob","Worker"];if(s)n.push("doNotTrack");else for(const u of i)if(u==="timing"){if("performance"in window&&!(u in performance)){n.push(u);break}}else if(u==="startsWith"){if(!(u in String.prototype)){n.push(u);break}}else if(!(u in window)){n.push(u);break}if(n.length>0){const u=n.join(",");console.error(`OpenReplay: browser doesn't support API required for tracking or doNotTrack is set to 1. Reason: ${u}`),this.signalStartIssue("missing_api",n);return}const r=new fh(e.projectKey,e.sessionToken,e,this.signalStartIssue,this.crossdomainMode);this.app=r,this.crossdomainMode||(sf(r),dh(r),Su(r,e),Ef(r)),Qh(r,e.mouse),tf(r,this.crossdomainMode),of(r),rf(r),vh(r,e),Dh(r,e),Ah(r),jh(r,e),ef(r,e),af(r),lf(r),kf(r,e.network),Tf(r),window.__OPENREPLAY__=this,e.flags&&e.flags.onFlagsLoad&&this.onFlagsLoad(e.flags.onFlagsLoad);const o=window.open;(e.autoResetOnWindowOpen||e.resetTabOnWindowOpen)&&(r.attachStartCallback(()=>{const u=r.getTabId(),l=r.sessionStorage??window.sessionStorage;window.open=function(...h){return e.autoResetOnWindowOpen&&r.resetNextPageSession(!0),e.resetTabOnWindowOpen&&l.removeItem(e.session_tabid_key||"__openreplay_tabid"),r.resetNextPageSession(!1),l.setItem(e.session_tabid_key||"__openreplay_tabid",u),o.call(window,...h)}}),r.attachStopCallback(()=>{window.open=o}))}isFlagEnabled(e){return this.featureFlags.isFlagEnabled(e)}onFlagsLoad(e){var s;(s=this.app)==null||s.featureFlags.onFlagsLoad(e)}clearPersistFlags(){var e;(e=this.app)==null||e.featureFlags.clearPersistFlags()}reloadFlags(){var e;return(e=this.app)==null?void 0:e.featureFlags.reloadFlags()}getFeatureFlag(e){var s;return(s=this.app)==null?void 0:s.featureFlags.getFeatureFlag(e)}getAllFeatureFlags(){var e;return(e=this.app)==null?void 0:e.featureFlags.flags}use(e){return e(this.app,this.options)}isActive(){return this.app===null?!1:this.app.active()}trackWs(e){if(this.app!==null)return this.app.trackWs(e)}start(e){return this.browserEnvCheck()?this.app===null?Promise.reject("Browser doesn't support required api, or doNotTrack is active."):this.app.start(e):Promise.reject("Trying to start not in browser.")}browserEnvCheck(){return tt?!0:(console.error(`OpenReplay: you are trying to start Tracker on a node.js environment. If you want to use OpenReplay with SSR, please, use componentDidMount or useEffect API for placing the \`tracker.start()\` line. Check documentation on ${_n}${Fn}`),!1)}coldStart(e,s){if(this.browserEnvCheck()){if(this.app===null)return Promise.reject("Tracker not initialized");this.app.coldStart(e,s)}else return Promise.reject("Trying to start not in browser.")}startOfflineRecording(e,s){return this.browserEnvCheck()?this.app===null?Promise.reject("Tracker not initialized"):this.app.offlineRecording(e,s):Promise.reject("Trying to start not in browser.")}uploadOfflineRecording(){if(this.app!==null)return this.app.uploadOfflineRecording()}stop(){if(this.app!==null)return this.app.stop(),this.app.session.getSessionHash()}forceFlushBatch(){this.app!==null&&this.app.forceFlushBatch()}getSessionToken(){return this.app===null?null:this.app.getSessionToken()}getSessionInfo(){return this.app===null?null:this.app.session.getInfo()}getSessionID(){return this.app===null?null:this.app.getSessionID()}getTabId(){return this.app===null?null:this.app.getTabId()}getUxId(){return this.app===null?null:this.app.getUxtId()}sessionID(){return It("'sessionID' method","'getSessionID' method","/"),this.getSessionID()}getSessionURL(e){if(this.app!==null)return this.app.getSessionURL(e)}setUserID(e){typeof e=="string"&&this.app!==null&&this.app.session.setUserID(e)}userID(e){It("'userID' method","'setUserID' method","/"),this.setUserID(e)}setUserAnonymousID(e){typeof e=="string"&&this.app!==null&&this.app.send(ou(e))}userAnonymousID(e){It("'userAnonymousID' method","'setUserAnonymousID' method","/"),this.setUserAnonymousID(e)}setMetadata(e,s){typeof e=="string"&&typeof s=="string"&&this.app!==null&&this.app.session.setMetadata(e,s)}metadata(e,s){It("'metadata' method","'setMetadata' method","/"),this.setMetadata(e,s)}event(e,s=null,n=!1){if(typeof e=="string"&&this.app!==null){if(n)return this.issue(e,s);try{s=JSON.stringify(s)}catch{return}this.app.send(iu(e,s))}}issue(e,s=null){if(typeof e=="string"&&this.app!==null){try{s=JSON.stringify(s)}catch{return}this.app.send(fu(e,s))}}}function Nf(t){return{id:String(t.ID),appellation:t.Appellation||null,country:t.Country||null,grape:t.Grape,image:t.Image,price:Number(t.Price),producer:t.Producer||null,region:t.Region,score:t.Score?Number(t.Score):null,shortDescription:t["Short Description"]||null,store:t.Store,storeId:t.Store_id||null,tags:Array.isArray(t.Tags)?t.Tags.map(String):[],title:t.Title,type:t.Type,url:t.Url||null,vintage:t.Vintage?Number(t.Vintage):null,pairingRecommendation:t.pairing_recommendation||null,total:t.Total?Number(t.Total):null,itemId:t.item_id||null,isPromote:t.is_promote?!!t.is_promote:null,stock:t.stock?Number(t.stock):null}}function Rf(t){return{id:String(t.id),title:String(t.title),description:String(t.description),region:String(t.region),price:Number(t.price),grape:String(t.grape),appellation:t.appellation?String(t.appellation):null,url:t.url?String(t.url):null,store:String(t.store),storeId:t.storeId?String(t.storeId):null,image:String(t.image),country:t.country?String(t.country):null,vintage:t.vintage?Number(t.vintage):null,tags:Array.isArray(t.tags)?t.tags.map(String):[],score:t.score?Number(t.score):null,total:t.total?Number(t.total):null,isPromote:t.is_promote?!!t.is_promote:null,stock:t.stock?Number(t.stock):null,distance:Number(t.distance),reason:String(t.reason),type:String(t.type)}}class Df{constructor(e){K(this,Is,"https://wineater-backend.vercel.app/");K(this,Qt);B(this,Qt,e)}async getInstantRecommendations(){try{const e=await fetch(`${b(this,Is)}dish/recommendations/instant`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${b(this,Qt)}`}}),s=await e.json();if(!e.ok)throw new Error(`API call failed with status ${e.status}: ${s.message||"No additional error information"}`);return s.map(Nf)}catch(e){throw new Error(`Error in getInstantRecommendations: ${e.message}`)}}async getWineRecommendationsSearch(e){try{const s=await fetch(`${b(this,Is)}dish/recommendations/search`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${b(this,Qt)}`},body:JSON.stringify({text:e})}),n=await s.json();if(!s.ok)throw new Error(`API call failed with status ${s.status}: ${n.message||"No additional error information"}`);return n.map(Rf)}catch(s){throw new Error(`Error in getWineRecommendations: ${s.message}`)}}async getStoreConfig(){try{const e=await fetch(`${b(this,Is)}stores/store`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${b(this,Qt)}`}});if(!e.ok)throw new Error(`HTTP error! Status: ${e.status}`);return await e.json()}catch(e){throw console.error("Error fetching store configuration:",e),e}}}Is=new WeakMap,Qt=new WeakMap;const Of=((La=window==null?void 0:window.wineaterData)==null?void 0:La.CLIENT_TOKEN)||"HeUw6IXuhvz6tRuXdPEGEbj3SGQ3Q2YtEc1Z8jd41Kg9LtyPb4Epu0to31SYIadG",nr=new Df(Of),it={WIDGET_INITIALIZED:"widget_initialized",WIDGET_LOADED:"widget_loaded",SEARCH_PERFORMED:"search_performed",SEARCH_RESULTS_DISPLAYED:"search_results_displayed",NO_RESULTS_FOUND:"no_results_found",WINE_CARD_HOVER:"wine_card_hover",WINE_CARD_CLICK:"wine_card_click",WINE_DETAILS_VIEWED:"wine_details_viewed",WINE_DETAILS_CLOSED:"wine_details_closed",BUY_BUTTON_CLICKED:"buy_button_clicked",FILTER_APPLIED:"filter_applied",LANGUAGE_CHANGED:"language_changed",ERROR_OCCURRED:"error_occurred",MOBILE_VIEW_ACTIVATED:"mobile_view_activated"},Mf={fr:{lang:"fr",welcomeMessage:"Quel plat allez-vous déguster ? Décrivez-le-moi et je vous proposerai le vin qui l'accompagnera parfaitement.",noResultsFound:"Aucun résultat trouvé.",somethingWentWrong:"Désolé, quelque chose a mal tourné.",chatButton1:"Trouvez l'accord parfait",chatButton2:"Associez le vin",chatButton3:"Obtenez des conseils",chatTitle:"Accord Mets & Vins 🍷",chatSubtitle:"Décrivez votre plat et obtenez une recommandation en 30 secondes",inputPlaceholder:"ex., Salade de thon",sendButton:"Accorder",poweredBy:"Propulsé par",price:"Prix",region:"Région",type:"Type",reason:"Suggestion",moreInfo:"Plus d'infos",winePairingIntro:"Pour ce vin, voici quelques suggestions de plats :",askForDinner:"Que voulez-vous manger ce soir?",clearChatButton:"Effacer le chat",widgetTitle:"TROUVEZ VOTRE VIN PARFAIT",widgetSubtitle:"Partagez tout ce que vous avez en tête—votre repas, humeur, budget ou occasion—et notre sommelier IA vous recommandera le vin parfait en quelques secondes",searchPlaceholder:"Entrez un mot-clé ou une description",wineDetails:{reason:"Raison",price:"Prix",region:"Région",type:"Type",moreInfo:"Plus d'infos",code:"Code",buy:"Acheter"},searchButton:"Rechercher",priceRange:"Gamme de prix",wineColor:"Couleur du vin",intensity:"Intensité",red:"Rouge",white:"Blanc",rose:"Rosé",light:"Léger",medium:"Moyen",full:"Puissant",barTitle:"Sélection du bar",barSubtitle:"Choisissez vos plats ci-dessous et cliquez sur «Envoyer»",barSendButton:"Envoyer",barResetButton:"Réinitialiser",barName:"Nom du bar",barNotesPlaceholder:"Entrez vos souhaits ici...",placeholderSuggestions:["Vin pour les pâtes","Parfait avec du poisson","Recommandé pour une soirée"],headerLine1:"Partagez tout ce qui vous passe par la tête —",headerLine2:"— et obtenez des recommandations de vin parfait en quelques secondes",headerMeal:"repas",headerMood:"humeur",headerBudget:"budget",headerOccasion:"occasion",headerOr:"ou",errorMessage:"Une erreur est survenue. Veuillez réessayer plus tard.",noResultsMessage:"Aucun résultat trouvé pour votre recherche. Veuillez essayer une autre requête.",ai_sommelier:"AI sommelier"},es:{lang:"es",welcomeMessage:"¿Qué vas a comer? Cuéntame tu plato y te recomendaré el maridaje perfecto.",noResultsFound:"No se encontraron resultados.",somethingWentWrong:"Lo sentimos, algo salió mal.",chatButton1:"Encuentra tu maridaje",chatButton2:"Combina vino ya",chatButton3:"Recibe asesoría ahora",chatTitle:"Maridaje de Vinos 🍷",chatSubtitle:"Describe tu comida y obtén una recomendación en 30 segundos",inputPlaceholder:"ej., Ensalada de atún",sendButton:"Combinar",poweredBy:"Desarrollado por",price:"Precio",region:"Región",type:"Tipo",reason:"Sugerencia",moreInfo:"Más info",winePairingIntro:"Para este vino, aquí tienes algunas sugerencias de platos:",askForDinner:"¿Qué te gustaría cenar?",clearChatButton:"Limpiar el chat",widgetTitle:"ENCUENTRA TU VINO PERFECTO",widgetSubtitle:"Comparte cualquier cosa que tengas en mente—tu comida, estado de ánimo, presupuesto o evento—y nuestro sommelier de IA te recomendará el vino perfecto en segundos",searchPlaceholder:"Escribe una palabra clave o descripción",wineDetails:{reason:"Razón",price:"Precio",region:"Región",type:"Tipo",code:"Código",moreInfo:"Más información",buy:"Comprar"},searchButton:"Buscar",priceRange:"Rango de precios",wineColor:"Color del vino",intensity:"Intensidad",red:"Tinto",white:"Blanco",rose:"Rosado",light:"Ligero",medium:"Medio",full:"Intenso",barTitle:"Platos de Bar",barSubtitle:"Selecciona de la lista y presiona «Enviar»",barSendButton:"Enviar",barResetButton:"Reiniciar",barName:"Nombre del bar",barNotesPlaceholder:"Agrega tus comentarios aquí...",placeholderSuggestions:["Vino para pasta","Perfecto con pescado","Recomendado para una fiesta"],headerLine1:"Comparte cualquier cosa que tengas en mente —",headerLine2:"— y obtén recomendaciones del vino perfecto en cuestión de segundos",headerMeal:"comida",headerMood:"estado de ánimo",headerBudget:"presupuesto",headerOccasion:"ocasión",headerOr:"o",errorMessage:"Algo salió mal. Por favor, inténtalo de nuevo más tarde.",noResultsMessage:"No se encontraron resultados para tu búsqueda. Por favor, intenta con otra consulta.",ai_sommelier:"AI sommelier"},en:{lang:"en",welcomeMessage:"What are you planning to eat? Share your dish and I'll recommend the perfect wine pairing for your meal.",noResultsFound:"No results found.",somethingWentWrong:"Sorry, something went wrong.",chatButton1:"Find Your Pairing",chatButton2:"Pair Wine Now",chatButton3:"Get Wine Advice",chatTitle:"Wine Pairing Assistant 🍷",chatSubtitle:"Describe your meal and get a recommendation in 30 seconds",inputPlaceholder:"e.g., Tuna salad",sendButton:"Match",poweredBy:"Powered by",price:"Price",region:"Region",type:"Type",reason:"Suggestion",moreInfo:"More info",winePairingIntro:"For this wine, here are some suggested dishes:",askForDinner:"What would you like to have for dinner?",clearChatButton:"Clear Chat",widgetTitle:"FIND YOUR PERFECT WINE",widgetSubtitle:"Share anything on your mind—your meal, mood, budget, or occasion—and our AI sommelier will recommend the perfect wine in seconds",searchPlaceholder:"Enter a keyword or description",wineDetails:{price:"Price",region:"Region",type:"Type",moreInfo:"More info",reason:"Reason",code:"Code",buy:"Buy"},searchButton:"Search",priceRange:"Price Range",wineColor:"Wine Color",intensity:"Intensity",red:"Red",white:"White",rose:"Rosé",light:"Light",medium:"Medium",full:"Full",barTitle:"Bar Dishes",barSubtitle:"Select dishes below and click 'Send'",barSendButton:"Send",barResetButton:"Reset",barName:"Bar Name",barNotesPlaceholder:"Add your wishes here...",placeholderSuggestions:["Wine for pasta","Perfect with fish","Recommended for a party"],headerLine1:"Share anything on your mind —",headerLine2:"— and get recommendations of the perfect wine in seconds",headerMeal:"meal",headerMood:"mood",headerBudget:"budget",headerOccasion:"occasion",headerOr:"or",errorMessage:"Something went wrong. Please try again later.",noResultsMessage:"No results found for your search. Please try a different query.",ai_sommelier:"AI sommelier"},sr:{lang:"sr",welcomeMessage:"Šta planirate da jedete? Podelite svoje jelo i preporučiću vam savršeno vino uz obrok.",noResultsFound:"Nema rezultata.",somethingWentWrong:"Izvinite, nešto je pošlo po zlu.",chatButton1:"Pronađi vino",chatButton2:"Upari vino sada",chatButton3:"Zatraži preporuku",chatTitle:"Asistent za uparivanje vina 🍷",chatSubtitle:"Opišite svoj obrok i dobijte preporuku za 30 sekundi",inputPlaceholder:"npr. Tuna salata",sendButton:"Upari",poweredBy:"Pokreće",price:"Cena",region:"Regija",type:"Tip",reason:"Preporuka",moreInfo:"Više informacija",winePairingIntro:"Za ovo vino, preporučuju se sledeća jela:",askForDinner:"Šta biste želeli za večeru?",clearChatButton:"Obriši razgovor",widgetTitle:"PRONAĐITE SAVRŠENO VINO",widgetSubtitle:"Podelite bilo šta — obrok, raspoloženje, budžet ili priliku — i naš AI somelijer će vam za par sekundi preporučiti vino",searchPlaceholder:"Unesite ključnu reč ili opis",wineDetails:{price:"Cena",region:"Regija",type:"Tip",moreInfo:"Više informacija",reason:"Razlog",code:"Šifra",buy:"Kupi"},searchButton:"Pretraga",priceRange:"Cenovni raspon",wineColor:"Boja vina",intensity:"Intenzitet",red:"Crveno",white:"Belo",rose:"Roze",light:"Lako",medium:"Srednje",full:"Puno",barTitle:"Jela iz bara",barSubtitle:"Izaberite jela ispod i kliknite 'Pošalji'",barSendButton:"Pošalji",barResetButton:"Resetuj",barName:"Naziv bara",barNotesPlaceholder:"Dodajte svoje želje ovde...",placeholderSuggestions:["Vino uz pastu","Savršeno uz ribu","Preporuka za žurku"],headerLine1:"Podelite bilo šta što vam je na umu —",headerLine2:"— i dobijte preporuke za savršeno vino za par sekundi",headerMeal:"obrok",headerMood:"raspoloženje",headerBudget:"budžet",headerOccasion:"prilika",headerOr:"ili",errorMessage:"Nešto je pošlo po zlu. Molimo pokušajte ponovo kasnije.",noResultsMessage:"Nema rezultata za vašu pretragu. Molimo pokušajte sa drugačijim upitom.",ai_sommelier:"AI sommelier"},de:{lang:"de",welcomeMessage:"Was möchten Sie essen? Beschreiben Sie Ihr Gericht und ich empfehle Ihnen den perfekten Wein dazu.",noResultsFound:"Keine Ergebnisse gefunden.",somethingWentWrong:"Entschuldigung, etwas ist schief gelaufen.",chatButton1:"Finde Dein Pairing",chatButton2:"Wein jetzt wählen",chatButton3:"Erhalte Weinberatung",chatTitle:"Wein & Speisen 🍷",chatSubtitle:"Beschreiben Sie Ihr Gericht und erhalten Sie in 30 Sekunden eine Empfehlung",inputPlaceholder:"z.B., Thunfischsalat",sendButton:"Kombinieren",poweredBy:"Unterstützt von",price:"Preis",region:"Region",type:"Typ",reason:"Anregung",moreInfo:"Mehr Info",winePairingIntro:"Für diesen Wein gibt es folgende Essensvorschläge:",askForDinner:"Was möchten Sie zum Abendessen essen?",clearChatButton:"Chat löschen",widgetTitle:"FINDEN SIE IHREN PERFEKTEN WEIN",widgetSubtitle:"Teilen Sie alles, was Ihnen in den Sinn kommt—Ihre Mahlzeit, Stimmung, Ihr Budget oder Anlass—und unser KI-Sommelier empfiehlt Ihnen in Sekunden den perfekten Wein",placeholderSuggestions:["Wein für Pasta","Perfekt zu Fisch","Empfohlen für eine Party"],searchPlaceholder:"Geben Sie ein Stichwort oder eine Beschreibung ein",wineDetails:{price:"Preis",region:"Region",type:"Typ",moreInfo:"Mehr Infos",reason:"Grund",code:"Code",buy:"Kaufen"},searchButton:"Suche",priceRange:"Preisspanne",wineColor:"Weinfarbe",intensity:"Intensität",red:"Rot",white:"Weiß",rose:"Rosé",light:"Leicht",medium:"Mittel",full:"Voll",barTitle:"Bar-Auswahl",barSubtitle:"Wählen Sie Ihre Gerichte und klicken Sie auf 'Senden'",barSendButton:"Senden",barResetButton:"Zurücksetzen",barName:"Name der Bar",headerLine1:"Teilen Sie alles, was Ihnen durch den Kopf geht —",headerLine2:"— und erhalten Sie in Sekundenschnelle Empfehlungen für den perfekten Wein",headerMeal:"Mahlzeit",headerMood:"Stimmung",headerBudget:"Budget",headerOccasion:"Anlass",headerOr:"oder",errorMessage:"Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.",noResultsMessage:"Keine Ergebnisse für Ihre Suche gefunden. Bitte versuchen Sie es mit einer anderen Anfrage.",ai_sommelier:"AI sommelier"},ukr:{lang:"ukr",welcomeMessage:"Що ви збираєтесь їсти? Опишіть свою страву, і я порекомендую вам ідеальне вино.",noResultsFound:"Результатів не знайдено.",somethingWentWrong:"Вибачте, щось пішло не так.",chatButton1:"Знайти ідеальне поєднання",chatButton2:"Підібрати вино",chatButton3:"Отримати пораду",chatTitle:"Сомельє-помічник 🍷",chatSubtitle:"Опишіть свою страву і отримайте рекомендацію за 30 секунд",inputPlaceholder:"наприклад, Тунець із салатом",sendButton:"Підібрати",poweredBy:"Розроблено на основі",price:"Ціна",region:"Регіон",type:"Тип",reason:"Рекомендація",moreInfo:"Докладніше",winePairingIntro:"До цього вина підходять такі страви:",askForDinner:"Що ви хочете на вечерю?",clearChatButton:"Очистити чат",widgetTitle:"ЗНАЙДІТЬ ІДЕАЛЬНЕ ВИНО",widgetSubtitle:"Поділіться тим, що у вас на думці—їжа, настрій, бюджет чи подія—і наш AI-сомельє порекомендує вам ідеальне вино за секунди",searchPlaceholder:"Введіть ключове слово або опис",wineDetails:{reason:"Причина",price:"Ціна",region:"Регіон",type:"Тип",moreInfo:"Докладніше",code:"Код",buy:"Купити"},searchButton:"Пошук",priceRange:"Діапазон цін",wineColor:"Колір вина",intensity:"Інтенсивність",red:"Червоне",white:"Біле",rose:"Рожеве",light:"Легке",medium:"Середнє",full:"Повне",barTitle:"Закуски до вина",barSubtitle:"Виберіть страви нижче та натисніть «Надіслати»",barSendButton:"Надіслати",barResetButton:"Скинути",barName:"Назва бару",barNotesPlaceholder:"Додайте ваші побажання тут...",placeholderSuggestions:["Вино до пасти","Ідеально до риби","Рекомендуємо для вечірки"],headerLine1:"Поділіться будь-якими вашими думками —",headerLine2:"— і отримайте рекомендації щодо ідеального вина за секунди",headerMeal:"страва",headerMood:"настрій",headerBudget:"бюджет",headerOccasion:"подія",headerOr:"або",errorMessage:"Щось пішло не так. Будь ласка, спробуйте пізніше.",noResultsMessage:"За вашим запитом не знайдено результатів. Спробуйте інший запит.",ai_sommelier:"AI sommelier"},ru:{lang:"ru",welcomeMessage:"Что вы планируете поесть? Напишите ваше блюдо, и я подберу идеальное вино к нему.",noResultsFound:"Результаты не найдены.",somethingWentWrong:"Извините, что-то пошло не так.",chatButton1:"Найти сочетание",chatButton2:"Подобрать вино",chatButton3:"Получить совет",chatTitle:"Ассистент по подбору вина 🍷",chatSubtitle:"Опишите ваше блюдо и получите рекомендацию за 30 секунд",inputPlaceholder:"например, Тунец с салатом",sendButton:"Подобрать",poweredBy:"Powered by",price:"Цена",region:"Регион",type:"Тип",reason:"Рекомендация",moreInfo:"Подробнее",winePairingIntro:"К этому вину подходят следующие блюда:",askForDinner:"Что бы вы хотели на ужин?",clearChatButton:"Очистить чат",widgetTitle:"НАЙДИТЬ ИДЕАЛЬНОЕ ВИНО",widgetSubtitle:"Поделитесь вашими предпочтениями — блюдом, настроением, бюджетом или случаем — и наш AI-сомелье подберёт идеальное вино за секунды",searchPlaceholder:"Введите ключевое слово или описание",wineDetails:{price:"Цена",region:"Регион",type:"Тип",moreInfo:"Подробнее",reason:"Причина",code:"Код",buy:"Купить"},searchButton:"Поиск",priceRange:"Диапазон цен",wineColor:"Цвет вина",intensity:"Интенсивность",red:"Красное",white:"Белое",rose:"Розовое",light:"Лёгкое",medium:"Среднее",full:"Полное",barTitle:"Закуски к вину",barSubtitle:"Выберите блюда ниже и нажмите 'Отправить'",barSendButton:"Отправить",barResetButton:"Сбросить",barName:"Название бара",barNotesPlaceholder:"Добавьте ваши пожелания здесь...",placeholderSuggestions:["Вино для пасты","Идеально к рыбе","Рекомендуем для вечеринки"],headerLine1:"Поделитесь любыми вашими мыслями —",headerLine2:"— и получите рекомендации по идеальному вину за считанные секунды",headerMeal:"блюдо",headerMood:"настроение",headerBudget:"бюджет",headerOccasion:"случай",headerOr:"или",errorMessage:"Что-то пошло не так. Пожалуйста, попробуйте позже.",noResultsMessage:"По вашему запросу не найдено результатов. Попробуйте другой запрос.",ai_sommelier:"AI sommelier"},kk:{lang:"kk",welcomeMessage:"Сіз не жегіңіз келеді? Тағамыңызды сипаттаңыз, мен оған керемет шарап ұсынамын.",noResultsFound:"Нәтижелер табылмады.",somethingWentWrong:"Кешіріңіз, бірдеңе дұрыс болмады.",chatButton1:"Сәйкестік табу",chatButton2:"Шарап таңдау",chatButton3:"Кеңес алу",chatTitle:"Шарап таңдаушы көмекші 🍷",chatSubtitle:"Тағамыңызды сипаттаңыз — 30 секундта ұсыныс алыңыз",inputPlaceholder:"мысалы, тунец салатымен",sendButton:"Таңдау",poweredBy:"Powered by",price:"Бағасы",region:"Өңір",type:"Түрі",reason:"Ұсыныс",moreInfo:"Толығырақ",winePairingIntro:"Бұл шарапқа келесі тағамдар сәйкес келеді:",askForDinner:"Кешкі асқа не қалайсыз?",clearChatButton:"Чатты тазалау",widgetTitle:"КЕРЕМЕТ ШАРАПТЫ ТАБЫҢЫЗ",widgetSubtitle:"Таңдауларыңызды бөлісіңіз — тағам, көңіл-күй, бюджет немесе жағдай — және біздің AI-сомелье сізге бірнеше секундта шарап ұсынады",searchPlaceholder:"Кілт сөзді немесе сипаттаманы енгізіңіз",wineDetails:{price:"Бағасы",region:"Өңір",type:"Түрі",moreInfo:"Толығырақ",reason:"Себебі",code:"Код",buy:"Сатып алу"},searchButton:"Іздеу",priceRange:"Баға диапазоны",wineColor:"Шарап түсі",intensity:"Қанықтылық",red:"Қызыл",white:"Ақ",rose:"Розалық",light:"Жеңіл",medium:"Орташа",full:"Толық",barTitle:"Шарапқа арналған тіскебасарлар",barSubtitle:"Төмендегі тағамдарды таңдаңыз және 'Жіберу' батырмасын басыңыз",barSendButton:"Жіберу",barResetButton:"Қалпына келтіру",barName:"Бар атауы",barNotesPlaceholder:"Мұнда өз тілектеріңізді жазыңыз...",placeholderSuggestions:["Пастаға арналған шарап","Балыққа тамаша үйлеседі","Кешке ұсынуға болады"],headerLine1:"Ойларыңызбен бөлісіңіз —",headerLine2:"— және бірнеше секундта мінсіз шарап ұсынысын алыңыз",headerMeal:"тағам",headerMood:"көңіл-күй",headerBudget:"бюджет",headerOccasion:"жағдай",headerOr:"немесе",errorMessage:"Бірдеңе дұрыс болмады. Кейінірек қайта көріңіз.",noResultsMessage:"Іздеуіңізге сәйкес нәтиже табылмады. Басқа сұрау қолданып көріңіз.",ai_sommelier:"AI sommelier"}},Af={en:"en-US",de:"de-DE",fr:"fr-FR",es:"es-ES",it:"it-IT",ja:"ja-JP",zh:"zh-CN",ru:"ru-RU",kk:"kk-KZ",pt:"pt-PT"};function Pf(t,e,s="en"){try{return new Intl.NumberFormat(Af[s]||"en-US",{style:"currency",currency:e,currencyDisplay:"narrowSymbol"}).format(t)}catch{return t.toString()}}function Se({key:t,lang:e}){const s=Mf;if(s[e]&&s[e][t])return s[e][t];throw new Error(`Translation for key "${t}" not found in language "${e}".`)}async function Lf({sourceLang:t,targetLang:e,texts:s,apiKey:n}){var u,l,h,f;if(!n||!t||!e||t===e)return s;const i="https://api.openai.com/v1/chat/completions",r={"Content-Type":"application/json",Authorization:`Bearer ${n}`},o=Object.entries(s).map(([d,p])=>({key:d,text:p})),a=`
|
|
20
|
+
You are a professional translator.
|
|
21
|
+
|
|
22
|
+
The input texts are written in language with code "${t}". Your task is to translate them strictly to the target language with code "${e}".
|
|
23
|
+
|
|
24
|
+
⚠️ DO NOT leave the original text.
|
|
25
|
+
⚠️ DO NOT skip any entry.
|
|
26
|
+
⚠️ Preserve the original order and keys exactly.
|
|
27
|
+
|
|
28
|
+
Translate only the "text" fields of the JSON array. Return an array of the same length and structure, like this:
|
|
29
|
+
|
|
30
|
+
Input:
|
|
31
|
+
[
|
|
32
|
+
{ "key": "shortDescription", "text": "Red wine with rich cherry notes." },
|
|
33
|
+
{ "key": "tags", "text": "fruity, dry, elegant" }
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
Output:
|
|
37
|
+
[
|
|
38
|
+
{ "key": "shortDescription", "text": "..." },
|
|
39
|
+
{ "key": "tags", "text": "..." }
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
Now translate the following input:
|
|
43
|
+
${JSON.stringify(o,null,2)}
|
|
44
|
+
`,c=JSON.stringify({model:"gpt-3.5-turbo",messages:[{role:"system",content:"You are a professional translator."},{role:"user",content:a}],temperature:.2,max_tokens:1e3});try{const p=await(await fetch(i,{method:"POST",headers:r,body:c})).json(),m=(f=(h=(l=(u=p==null?void 0:p.choices)==null?void 0:u[0])==null?void 0:l.message)==null?void 0:h.content)==null?void 0:f.trim();if(!m)throw new Error("No response from OpenAI");const _=JSON.parse(m),C={};return _.forEach(T=>{T.key&&T.text!==void 0&&(C[T.key]=T.text)}),{...s,...C}}catch(d){return console.error("Error translating texts:",d),s}}let _e=dt({storeConfig:null,currentLanguage:"en",isConfigLoaded:!1});const ke={getLanguageFromURL(){return new URLSearchParams(window.location.search).get("lang")},getAppLanguage(){return(_e==null?void 0:_e.currentLanguage)??"en"},getStoreLanguage(){var t;return((t=_e.storeConfig)==null?void 0:t.lang)??null},getApiKey(){var t;return((t=_e.storeConfig)==null?void 0:t.open_ai_key)??null},getStoreId(){var t;return((t=_e.storeConfig)==null?void 0:t.id)??null},setStoreLanguage(t){if(_e.storeConfig&&_e.storeConfig.available_languages.includes(t)){_e.currentLanguage=t;const e=new URLSearchParams(window.location.search);e.set("lang",t);const s=`${window.location.pathname}?${e.toString()}`;window.history.replaceState({},"",s)}else throw new Error(`Language ${t} is not available in store configuration.`)},getSupportedLanguages(){var t;return((t=_e.storeConfig)==null?void 0:t.available_languages)??["en"]},getCurrency(){var t;return((t=_e.storeConfig)==null?void 0:t.currency)??"USD"},async initializeStore(){try{const t=await nr.getStoreConfig();_e.storeConfig=t,_e.currentLanguage=t.lang;const e=this.getLanguageFromURL();e&&t.available_languages.includes(e)?this.setStoreLanguage(e):this.setStoreLanguage(t.lang),_e.isConfigLoaded=!0}catch(t){console.error("Failed to initialize store:",t),_e.isConfigLoaded=!1}},isInitialized(){return _e.isConfigLoaded}};var Bf=X('<h1 class="wine-widget-big-title svelte-oiwvqb"> </h1>'),Ff=X('<h1 class="wine-widget-big-title svelte-oiwvqb"> <span class="icon icon-meal svelte-oiwvqb"></span> <span class="icon-label svelte-oiwvqb"> </span>, <span class="icon icon-mood svelte-oiwvqb"></span> <span class="icon-label svelte-oiwvqb"> </span> <br/> <span class="icon icon-occasion svelte-oiwvqb"></span> <span class="icon-label svelte-oiwvqb"> </span> </h1>'),jf=X('<div id="wine-widget-header" class="svelte-oiwvqb"><!></div>');function Uf(t,e){var c;Lt(e,!0);let s=pe(()=>ke.getAppLanguage());const n=((c=window==null?void 0:window.wineaterData)==null?void 0:c.TITLE_TEXT)||null;var i=jf(),r=L(i);{var o=u=>{var l=Bf(),h=L(l);te(()=>Z(h,n)),W(u,l)},a=u=>{var l=Ff(),h=L(l),f=Y(h,3),d=L(f),p=Y(f,4),m=L(p),_=Y(p,3),C=Y(_,3),T=L(C),y=Y(C);te((g,v,I,x,S,k)=>{Z(h,`${g??""} `),Z(d,v),Z(m,I),Z(_,` ${x??""} `),Z(T,S),Z(y,` ${k??""}`)},[()=>Se({key:"headerLine1",lang:w(s)}),()=>Se({key:"headerMeal",lang:w(s)}),()=>Se({key:"headerMood",lang:w(s)}),()=>Se({key:"headerOr",lang:w(s)}),()=>Se({key:"headerOccasion",lang:w(s)}),()=>Se({key:"headerLine2",lang:w(s)})]),W(u,l)};ie(r,u=>{n?u(o):u(a,!1)})}W(t,i),Bt()}function zf(t,e,s){const i=t.target.value;$e(it.LANGUAGE_CHANGED,w(e),{from_language:w(s),to_language:i}),ke.setStoreLanguage(i)}var Wf=X("<option> </option>"),Hf=X('<select id="language-dropdown" class="language-dropdown svelte-1sr6y3t"></select>'),qf=X('<div id="powered-by-widget" class="svelte-1sr6y3t"><div class="powered-by-center svelte-1sr6y3t"><a href="https://wineater.com" target="_blank" class="svelte-1sr6y3t"><span> </span> <img alt="Wineater Logo" class="svelte-1sr6y3t"/> <span class="powered-by-sommelier svelte-1sr6y3t"> </span></a></div> <div class="powered-by-lang svelte-1sr6y3t"><!></div></div>');function Vf(t,e){Lt(e,!0);let s=lo(e,"countryCode",3,null),n=pe(()=>ke.getAppLanguage()),i=pe(()=>ke.getSupportedLanguages()),r=pe(()=>ke.getStoreId());var o=qf(),a=L(o),c=L(a),u=L(c),l=L(u),h=Y(u,2),f=Y(h,2),d=L(f),p=Y(a,2),m=L(p);{var _=C=>{var T=Hf();T.__change=[zf,r,n],zs(T,21,()=>w(i),Us,(g,v)=>{var I=Wf(),x=L(I),S={};te(k=>{fc(I,w(v)===w(n)),Z(x,k),S!==(S=w(v))&&(I.value=(I.__value=w(v))??"")},[()=>w(v).toUpperCase()]),W(g,I)});var y;cc(T),te(()=>{y!==(y=w(n))&&(T.value=(T.__value=w(n))??"",io(T,w(n)))}),W(C,T)};ie(m,C=>{w(i).length>1&&C(_)})}te((C,T)=>{Z(l,C),hn(h,"src",s()==="ru"?"https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media/divino_logo.svg?x=5":"https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media/logo_medium_gray.svg"),Z(d,T)},[()=>Se({key:"poweredBy",lang:w(n)}),()=>Se({key:"ai_sommelier",lang:w(n)})]),W(t,o),Bt()}ci(["change"]);var Gf=X('<form id="wine-widget-search" class="svelte-1wah7ro"><span class="search-icon svelte-1wah7ro"></span> <input id="wine-search-input" type="text" class="svelte-1wah7ro"/> <button id="wine-search-button" type="submit" class="svelte-1wah7ro"> </button></form>');function Kf(t,e){Lt(e,!0);let s=lo(e,"searchQuery",15),n,i=oe(!1),r=oe(0),o=oe(0),a=oe(!0),c=oe(!1),u=pe(()=>ke.getAppLanguage()),l=0;function h(){return n}function f(){const v=++l,I=Se({key:"placeholderSuggestions",lang:w(u)});if(!n||!I.length)return;M(c,!0);const x=()=>{if(v!==l||!n||!w(c)||w(i)||s().length)return;const S=I[w(r)];if(w(a)){if(n.placeholder=S.substring(0,xr(o)),w(o)>S.length){M(a,!1),setTimeout(x,1600);return}setTimeout(x,90)}else{if(n.placeholder=S.substring(0,xr(o,-1)),w(o)<0){M(a,!0),M(r,(w(r)+1)%I.length),setTimeout(x,450);return}setTimeout(x,45)}};x()}function d(){M(c,!1)}function p(){M(i,!0),d(),n&&(n.placeholder="")}function m(){M(i,!1),M(o,0),M(a,!0),M(c,!1)}an(()=>{if(!n||s().length>0)return;l++,M(c,!1),M(r,0),M(o,0),M(a,!0);const v=Se({key:"placeholderSuggestions",lang:w(u)});v&&v.length?n.placeholder=v[0]:n.placeholder=Se({key:"searchPlaceholder",lang:w(u)})}),an(()=>{n&&e.initialized&&!w(i)&&!s().length&&!w(c)&&f(),s().length>0&&w(c)&&(M(c,!1),l++)}),hi(()=>{});var _={getSearchElement:h},C=Gf(),T=Y(L(C),2);mc(T,v=>n=v,()=>n);var y=Y(T,2),g=L(y);return te(v=>Z(g,v),[()=>Se({key:"searchButton",lang:w(u)})]),Bs("submit",C,function(...v){var I;(I=e.onSubmit)==null||I.apply(this,v)}),Bs("focus",T,p),Bs("blur",T,m),gc(T,s),W(t,C),Bt(_)}wl();var Xf=X('<div id="loading-indicator" class="svelte-li6gfl"><div id="typing-indicator" class="typing-indicator svelte-li6gfl"><span class="svelte-li6gfl"></span> <span class="svelte-li6gfl"></span> <span class="svelte-li6gfl"></span></div></div>');function Jf(t){var e=Xf();W(t,e)}var Yf=X('<p class="popup-short-desc svelte-17gehox"> </p>'),Qf=X('<div class="popup-reason svelte-17gehox"> </div>'),Zf=X('<p class="popup-pairing svelte-17gehox"> </p>'),$f=X('<span class="popup-tag svelte-17gehox"> </span>'),ed=X('<div class="popup-tags svelte-17gehox"></div>'),td=X('<div class="mobile-fullscreen-wrapper svelte-17gehox"><div class="mobile-fullscreen-overlay svelte-17gehox"></div> <div class="mobile-fullscreen-popup svelte-17gehox"><div class="card-popup svelte-17gehox"><div class="card-popup-header svelte-17gehox"><h2 class="svelte-17gehox"> </h2> <button class="card-popup-close svelte-17gehox">×</button></div> <!> <!> <!></div></div></div>'),sd=X('<p class="popup-short-desc svelte-17gehox"> </p>'),nd=X('<div class="popup-reason svelte-17gehox"> </div>'),id=X('<p class="popup-pairing svelte-17gehox"> </p>'),rd=X('<span class="popup-tag svelte-17gehox"> </span>'),od=X('<div class="popup-tags svelte-17gehox"></div>'),ad=X('<div class="card-popup svelte-17gehox"><div class="card-popup-header svelte-17gehox"><h2 class="svelte-17gehox"> </h2> <button class="card-popup-close svelte-17gehox">×</button></div> <!> <!> <!></div>');function Aa(t,e){Lt(e,!0);const s=!!e.isMobile;var n=js(),i=ls(n);{var r=a=>{var c=td(),u=L(c);u.__click=function(...x){var S;(S=e.onClose)==null||S.apply(this,x)};var l=Y(u,2),h=L(l),f=L(h),d=L(f),p=L(d),m=Y(d,2);m.__click=function(...x){var S;(S=e.onClose)==null||S.apply(this,x)};var _=Y(f,2);{var C=x=>{var S=Yf(),k=L(S);te(()=>Z(k,e.shortDescription)),W(x,S)};ie(_,x=>{e.shortDescription&&x(C)})}var T=Y(_,2);{var y=x=>{var S=Qf(),k=L(S);te(()=>Z(k,e.reason)),W(x,S)},g=x=>{var S=js(),k=ls(S);{var A=j=>{var F=Zf(),G=L(F);te(()=>Z(G,e.pairing)),W(j,F)};ie(k,j=>{e.pairing&&j(A)},!0)}W(x,S)};ie(T,x=>{e.reason?x(y):x(g,!1)})}var v=Y(T,2);{var I=x=>{var S=ed();zs(S,21,()=>e.tags,Us,(k,A)=>{var j=$f(),F=L(j);te(()=>Z(F,w(A))),W(k,j)}),W(x,S)};ie(v,x=>{e.tags&&e.tags.length&&x(I)})}te(()=>Z(p,e.title)),W(a,c)},o=a=>{var c=ad(),u=L(c),l=L(u),h=L(l),f=Y(l,2);f.__click=function(...g){var v;(v=e.onClose)==null||v.apply(this,g)};var d=Y(u,2);{var p=g=>{var v=sd(),I=L(v);te(()=>Z(I,e.shortDescription)),W(g,v)};ie(d,g=>{e.shortDescription&&g(p)})}var m=Y(d,2);{var _=g=>{var v=nd(),I=L(v);te(()=>Z(I,e.reason)),W(g,v)},C=g=>{var v=js(),I=ls(v);{var x=S=>{var k=id(),A=L(k);te(()=>Z(A,e.pairing)),W(S,k)};ie(I,S=>{e.pairing&&S(x)},!0)}W(g,v)};ie(m,g=>{e.reason?g(_):g(C,!1)})}var T=Y(m,2);{var y=g=>{var v=od();zs(v,21,()=>e.tags,Us,(I,x)=>{var S=rd(),k=L(S);te(()=>Z(k,w(x))),W(I,S)}),W(g,v)};ie(T,g=>{e.tags&&e.tags.length&&g(y)})}te(()=>Z(h,e.title)),W(a,c)};ie(i,a=>{s?a(r):a(o,!1)})}W(t,n),Bt()}ci(["click"]);var ld=(t,e)=>e.onTileClick(t,e.wine),cd=X('<img class="wine-image svelte-yk3emv"/>'),ud=X('<div class="wine-price svelte-yk3emv"> </div>'),hd=X('<div class="wine-params svelte-yk3emv"> </div>'),fd=X('<a class="buy-btn svelte-yk3emv" target="_blank"> </a>'),dd=(t,e)=>e.onBuyClick(e.wine,e.index),pd=X('<button class="buy-btn svelte-yk3emv" type="button"> </button>'),gd=X('<div class="popup-reason svelte-yk3emv"> </div>'),md=X('<span class="popup-tag svelte-yk3emv"> </span>'),vd=X('<div class="popup-tags svelte-yk3emv"></div>'),bd=X("<div><!> <!></div>"),yd=X('<div><div class="tile-top svelte-yk3emv"><!> <!> <h3 class="wine-title svelte-yk3emv"> </h3></div> <!> <div class="bottom-row svelte-yk3emv"><!></div> <!> <!></div> <!>',1);function wd(t,e){Lt(e,!0);let s=pe(()=>ke.getAppLanguage());const n=(E,R)=>E[R]||E[R.charAt(0).toUpperCase()+R.slice(1)],i=(E,R)=>R.map(O=>n(E,O)).filter(Boolean).join(" • ");function r(E){var R;return Pf(E,((R=ke.getCurrency)==null?void 0:R.call(ke))||"USD",w(s))}function o(E){return e.selectedWineId===E}function a(E){return!!(E.reason||E.shortDescription||E.tags)}function c(E,R){let O=(E==null?void 0:E.tags)||R.tags;return O?(Array.isArray(O)&&(O=O.join(",")),typeof O!="string"?[]:O.split(",").map(N=>N.trim()).filter(Boolean)):[]}let u=oe(!1);hi(()=>{const E=()=>{M(u,window.innerWidth<=768)};return E(),window.addEventListener("resize",E),()=>{window.removeEventListener("resize",E)}});var l=yd(),h=ls(l);h.__click=[ld,e];var f=L(h),d=L(f);{var p=E=>{var R=cd();te(()=>{hn(R,"src",e.wine.image),hn(R,"alt",e.wine.title)}),W(E,R)};ie(d,E=>{e.wine.image&&E(p)})}var m=Y(d,2);{var _=E=>{var R=ud(),O=L(R);te(N=>Z(O,N),[()=>r(e.wine.total)]),W(E,R)};ie(m,E=>{e.wine.total&&E(_)})}var C=Y(m,2),T=L(C),y=Y(f,2);{var g=E=>{var R=hd(),O=L(R);te(N=>Z(O,N),[()=>i(e.wine,["type","country","region","grape"])]),W(E,R)};ie(y,E=>{i(e.wine,["type","country","region","grape"])&&E(g)})}var v=Y(y,2),I=L(v);{var x=E=>{var R=fd(),O=L(R);te(N=>{hn(R,"href",e.wine.url),Z(O,N)},[()=>Se({key:"wineDetails.buy",lang:w(s)})]),W(E,R)},S=E=>{var R=pd();R.__click=[dd,e];var O=L(R);te(N=>Z(O,N),[()=>Se({key:"moreInfo",lang:w(s)})]),W(E,R)};ie(I,E=>{e.wine.url?E(x):E(S,!1)})}var k=Y(v,2);{var A=E=>{{let R=pe(()=>{var J;return((J=e.translatedPopup)==null?void 0:J.shortDescription)||e.wine.shortDescription}),O=pe(()=>{var J;return((J=e.translatedPopup)==null?void 0:J.reason)||e.wine.reason}),N=pe(()=>{var J;return((J=e.translatedPopup)==null?void 0:J.pairingRecommendation)||e.wine.pairingRecommendation}),V=pe(()=>c(e.translatedPopup,e.wine));Aa(E,{get title(){return e.wine.title},get shortDescription(){return w(R)},get reason(){return w(O)},get pairing(){return w(N)},get tags(){return w(V)},get onClose(){return e.onPopupClose},isMobile:!1})}};ie(k,E=>{o(e.wine.id)&&!w(u)&&E(A)})}var j=Y(k,2);{var F=E=>{var R=bd(),O=L(R);{var N=se=>{var fe=gd(),ge=L(fe);te(()=>{var D,P;return Z(ge,((D=e.translatedPopup)==null?void 0:D.reason)||((P=e.translatedPopup)==null?void 0:P.shortDescription)||e.wine.reason||e.wine.shortDescription)}),W(se,fe)};ie(O,se=>{var fe,ge;((fe=e.translatedPopup)!=null&&fe.reason||(ge=e.translatedPopup)!=null&&ge.shortDescription||e.wine.reason||e.wine.shortDescription)&&se(N)})}var V=Y(O,2);{var J=se=>{var fe=vd();zs(fe,21,()=>c(e.translatedPopup,e.wine),Us,(ge,D)=>{var P=md(),re=L(P);te(()=>Z(re,w(D))),W(ge,P)}),W(se,fe)};ie(V,se=>{var fe,ge;((fe=e.translatedPopup)!=null&&fe.tags||(ge=e.translatedPopup)!=null&&ge.Tags||e.wine.tags)&&se(J)})}te(()=>no(R,1,`wine-hover-popup ${e.hoveredWineId===e.wine.id?"slide-in visible":""}`,"svelte-yk3emv")),W(E,R)};ie(j,E=>{a(e.wine)&&E(F)})}var G=Y(h,2);{var U=E=>{{let R=pe(()=>{var J;return((J=e.translatedPopup)==null?void 0:J.shortDescription)||e.wine.shortDescription}),O=pe(()=>{var J;return((J=e.translatedPopup)==null?void 0:J.reason)||e.wine.reason}),N=pe(()=>{var J;return((J=e.translatedPopup)==null?void 0:J.pairingRecommendation)||e.wine.pairingRecommendation}),V=pe(()=>c(e.translatedPopup,e.wine));Aa(E,{get title(){return e.wine.title},get shortDescription(){return w(R)},get reason(){return w(O)},get pairing(){return w(N)},get tags(){return w(V)},get onClose(){return e.onPopupClose},isMobile:!0})}};ie(G,E=>{o(e.wine.id)&&w(u)&&E(U)})}te(()=>{no(h,1,`wine-recommendation-tile ${e.isAnimating?"ww-slide-up":""}`,"svelte-yk3emv"),Z(T,e.wine.title)}),Bs("mouseenter",h,()=>e.onTileEnter(e.wine)),Bs("mouseleave",h,()=>e.onTileLeave(e.wine)),W(t,l),Bt()}ci(["click"]);var Sd=X('<div class="error-message svelte-1n46o8q"><p> </p></div>'),_d=X('<div id="wine-placeholder" class="svelte-1n46o8q"></div>'),kd=X('<div id="wine-widget-container" class="svelte-wineater-widget-container svelte-1n46o8q"><div class="wine-widget-wrapper svelte-1n46o8q"><!> <!> <!> <div id="wine-widget-right" class="svelte-1n46o8q"><!></div> <!></div></div>');function Td(t,e){var se,fe,ge;Lt(e,!0);function s(){var D;gi("chatbotToken",((D=window.wineaterData)==null?void 0:D.CLIENT_TOKEN)||n,365),uo()}const n="HeUw6IXuhvz6tRuXdPEGEbj3SGQ3Q2YtEc1Z8jd41Kg9LtyPb4Epu0to31SYIadG";new xf({projectKey:"PA8j9fAi49i6g2QnvpNs",__DISABLE_SECURE_MODE:!0}).start(),s();const r=((se=window==null?void 0:window.wineaterData)==null?void 0:se.WIDGET_TYPE)||"store",o=((fe=window==null?void 0:window.wineaterData)==null?void 0:fe.COUNTRY_CODE)||null;(ge=window==null?void 0:window.wineaterData)!=null&&ge.WIDGET_WRAPPER;let a=oe(!1),c=oe(!1),u=oe(dt([])),l=oe(null),h=oe(""),f=oe(null),d=oe(!1),p=oe(null),m=oe(dt([])),_=pe(()=>ke.getAppLanguage()),C=pe(()=>ke.getStoreLanguage()),T=pe(()=>ke.getApiKey()),y=pe(()=>ke.getStoreId()),g=pe(()=>ke.isInitialized());function v(){M(f,Se({key:"errorMessage",lang:w(_)}),!0)}const I=()=>M(f,null);async function x(D){if(w(_)===w(C)||r!=="bar")return D.map(()=>({}));const P=["shortDescription","reason","pairingRecommendation","tags"],re=D[0];if(!re)return D.map(()=>({}));const yt=P.filter(Je=>Je in re),wt=4,Zt=[];for(let Je=0;Je<D.length;Je+=wt){const xs=D.slice(Je,Je+wt).map(async Rt=>{const Wn=yt.map(He=>{const Dt=Rt[He]||Rt[He.toLowerCase()];return Dt?{key:He,text:Array.isArray(Dt)?Dt.join(", "):Dt}:null}).filter(Boolean);return Wn.length===0?{}:await Lf({sourceLang:w(C),targetLang:w(_),texts:Object.fromEntries(Wn.map(He=>[He.key,He.text])),apiKey:w(T)})}),$t=await Promise.all(xs);Zt.push(...$t)}return Zt}async function S(){M(c,!0);try{M(u,await nr.getInstantRecommendations(),!0)}catch{v()}finally{M(c,!1)}}function k(D=220){return!w(u)||w(u).length===0?Promise.resolve():(M(d,!0),new Promise(P=>{setTimeout(()=>{P()},D)}))}async function A(D){D.preventDefault();let P="";try{M(c,!0),I(),await k(220),M(u,[],!0),M(d,!1),P=w(h).trim()+";";try{$e(it.SEARCH_PERFORMED,w(y),{query:P})}catch(yt){console.error("Error tracking search event:",yt)}const re=await nr.getWineRecommendationsSearch(P);!re||re.length===0?(M(u,[],!0),M(m,[],!0),M(f,Se({key:"noResultsMessage",lang:w(_)}),!0),$e(it.NO_RESULTS_FOUND,w(y),{query:P})):(M(u,re,!0),$e(it.SEARCH_RESULTS_DISPLAYED,w(y),{results_count:re.length,results:re,query:P}))}catch(re){M(u,[],!0),$e(it.ERROR_OCCURRED,w(y),{error_message:re==null?void 0:re.message,query:P}),v()}finally{M(c,!1)}}an(async()=>{if(!w(u)||w(u).length===0){M(m,[],!0);return}try{const D=await x(w(u));w(u)&&w(u).length>0&&M(m,D,!0)}catch(D){console.error("translatePopupContent failed",D)}});function j(D,P){w(l)&&w(l)!==D.id&&M(l,null),M(l,D.id,!0),$e(it.WINE_DETAILS_VIEWED,w(y),{wine_id:D.id,wine_title:D.title,is_mobile:window.innerWidth<=768})}function F(){const D=w(u).find(P=>P.id===w(l));$e(it.WINE_DETAILS_CLOSED,w(y),{wine_id:w(l),wine_title:D.title}),M(l,null)}function G(D){return!!(D.reason||D.shortDescription||D.tags)}function U(D){r==="store"&&G(D)&&(M(p,D.id,!0),$e(it.WINE_CARD_HOVER,w(y),{wine_id:D.id,wine_title:D.title}))}function E(D){r==="store"&&w(p)===D.id&&M(p,null)}function R(D,P){D.target.closest(".buy-btn")||D.target.closest(".card-popup-close")||$e(it.WINE_CARD_CLICK,w(y),{wine_id:P.id,wine_title:P.title})}function O(D){const P=D.target;P.closest(".card-popup")||P.closest(".buy-btn")||M(l,null)}hi(async()=>{var P;if(await ke.initializeStore(),!w(g))return;const D=((P=window==null?void 0:window.wineaterData)==null?void 0:P.COLOR)||"#7B2BEB";return document.documentElement.style.setProperty("--wineater-color",D),await S(),$e(it.WIDGET_INITIALIZED,w(y)),M(a,!0),document.addEventListener("click",O),()=>{document.removeEventListener("click",O)}});var N=js(),V=ls(N);{var J=D=>{var P=kd(),re=L(P),yt=L(re);Uf(yt,{});var wt=Y(yt,2);Kf(wt,{onSubmit:A,get initialized(){return w(a)},get searchQuery(){return w(h)},set searchQuery(Pe){M(h,Pe,!0)}});var Zt=Y(wt,2);{var Je=Pe=>{Jf(Pe)};ie(Zt,Pe=>{w(c)&&Pe(Je)})}var Cs=Y(Zt,2),xs=L(Cs);{var $t=Pe=>{var He=Sd(),Dt=L(He),rr=L(Dt);te(()=>Z(rr,w(f))),W(Pe,He)},Rt=Pe=>{var He=js(),Dt=ls(He);{var rr=or=>{var Ba=_d();zs(Ba,21,()=>w(u),Us,(Ed,Id,Fa)=>{wd(Ed,{get wine(){return w(Id)},index:Fa,get hoveredWineId(){return w(p)},get selectedWineId(){return w(l)},get isAnimating(){return w(d)},get translatedPopup(){return w(m)[Fa]},onBuyClick:j,onPopupClose:F,onTileEnter:U,onTileLeave:E,onTileClick:R})}),W(or,Ba)};ie(Dt,or=>{w(u)&&w(u).length>0&&or(rr)},!0)}W(Pe,He)};ie(xs,Pe=>{w(f)?Pe($t):Pe(Rt,!1)})}var Wn=Y(Cs,2);Vf(Wn,{get countryCode(){return o}}),W(D,P)};ie(V,D=>{w(g)&&D(J)})}W(t,N),Bt()}return tc(Td,{target:document.getElementById("wineater-widget-conteiner")})});
|