userflow.js-self-hosted 0.1.1007691 → 0.1.1007772

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.
@@ -1,2 +1,2 @@
1
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="b5892d03-9729-4ceb-915d-dfcb602f942c",e._sentryDebugIdIdentifier="sentry-dbid-b5892d03-9729-4ceb-915d-dfcb602f942c")}catch(n){}}();import{F as e,d as t,c as n,t as o,a as r,b as s,T as i,e as l,g as c,o as a,u,f}from"./userflow.js";import"./vendor.react.js";import{i as d,a as m,b as p,p as h,c as w,s as v}from"./vendor.date-fns.js";class E extends Error{constructor(e,t){const n=`Unreachable case: ${e}`;super(t=t?`${t} (${n})`:n)}}const g=/(\\*)\{\{([a-zA-Z0-9_.\\/]+)\}\}/g;function y(e,t){return(e||"").replace(g,((e,n,o)=>{const r=n.length;return r%2==0?"\\".repeat(r/2)+(t(o)||""):"\\".repeat((r-1)/2)+"{{"+o+"}}"}))}function b(e){let t=null;return n=>(t||(t=new Map,e.forEach((({name:e,value:n})=>t.set(e,Array.isArray(n)?n[0]:n)))),t.get(n)||null)}function T(e,t){const n=b(t);return y(e,(e=>n(e)))}function S(e,t){const n=A(e,t),o=e.nearSelector&&A(e.nearSelector,t);return e===n&&e.nearSelector===o?e:e.nearSelector===o?n:{...n,nearSelector:o}}function A(e,t){if(!e.text)return e;const n=T(e.text,t);return n===e.text?e:{...e,text:n}}function L(e){const t=function(e){const t=e.match(/^(([a-z\d]+):\/\/)?([^/?#]+)?(\/[^?#]*)?(\?([^#]*))?(#.*)?$/i);if(!t)return null;const[,,n,o,r,,s,i]=t;return{scheme:n||"",domain:o||"",path:r||"",query:s||"",fragment:i||""}}(e);if(!t)return console.error("Userflow: Invalid URL pattern:",e),null;const{scheme:n,domain:o,path:r,query:s,fragment:i}=t;let l,c;l=n?x(n):"[a-z\\d]+",c=o?N(o,"[^/]","."):"[^/]*";let a,u,f;a=r?N(r,"[^?#]","/"):"/[^?#]*",s?(u="",new URLSearchParams(s).forEach(((e,t)=>{let n;n=""===e?"=?":"*"===e?"(=[^&#]*)?":"="+N(e=e.split(/\*/g).map((e=>encodeURI(e))).join("*"),"[^#]"),u+="(?=.*[?&]"+x(t)+n+"([&#]|$))"})),u+="\\?[^#]*"):u="(\\?[^#]*)?",f=i?N(i,".","/"):"(#.*)?";return new RegExp("^"+l+"://"+c+"(:\\d+)?"+a+u+f+"$")}function N(e,t,n){return e=(e=x(e)).replace(/\\\*/g,t+"*"),n&&(e=e.replace(/:[a-zA-Z0-9_]+/g,"[^"+n+"]+")),e}function x(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}const k={[e.ABSOLUTE_EQ]:{compare:({condition:e,value:t})=>{const n=C(t),o=I(e.value,"00:00:00.000"),r=I(e.value,"23:59:59.999");return null!=n&&null!=o&&null!=r&&!d(n,o)&&!m(n,r)}},[e.ABSOLUTE_GT]:{compare:({condition:e,value:t})=>{const n=C(t),o=I(e.value,"23:59:59.999");return null!=n&&null!=o&&m(n,o)}},[e.ABSOLUTE_LT]:{compare:({condition:e,value:t})=>{const n=C(t),o=I(e.value,"00:00:00.000");return null!=n&&null!=o&&d(n,o)}},[e.AND]:{compare:()=>D("AND.compare")},[e.BETWEEN]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&!!e.value2&&parseFloat(U(t))>=parseFloat(e.value)&&parseFloat(U(t))<=parseFloat(e.value2)},[e.CONTAINS]:{compare:({sessionData:e,condition:t,value:n})=>!!n&&U(n).toLowerCase().includes(T(t.value||"",e).toLowerCase())},[e.EMPTY]:{compare:({value:e})=>null==e||""===e||Array.isArray(e)&&0===e.length},[e.ENDS_WITH]:{compare:({sessionData:e,condition:t,value:n})=>!!n&&U(n).toLowerCase().endsWith(T(t.value||"",e).toLowerCase())},[e.EQ]:{compare:({sessionData:e,condition:t,value:n})=>T(t.value||"",e)===U(n)},[e.EXCLUDES_ALL]:{compare:({condition:e,value:t})=>{const n=new Set(R(t));return!(e.values||[]).some((e=>n.has(e)))}},[e.EXCLUDES_ANY]:{compare:({condition:e,value:t})=>{const n=new Set(R(t));return!(e.values||[]).every((e=>n.has(e)))}},[e.FALSE]:{compare:({value:e})=>"false"===U(e).toLowerCase()},[e.GT]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&parseFloat(U(t))>parseFloat(e.value)},[e.GTE]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&parseFloat(U(t))>=parseFloat(e.value)},[e.INCLUDES_ALL]:{compare:({condition:e,value:t})=>{const n=new Set(R(t));return(e.values||[]).every((e=>n.has(e)))}},[e.INCLUDES_ANY]:{compare:({condition:e,value:t})=>{const n=new Set(R(t));return(e.values||[]).some((e=>n.has(e)))}},[e.LT]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&parseFloat(U(t))<parseFloat(e.value)},[e.LTE]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&parseFloat(U(t))<=parseFloat(e.value)},[e.NE]:{compare:({sessionData:e,condition:t,value:n})=>T(t.value||"",e)!==U(n)},[e.NOT_CONTAINS]:{compare:({sessionData:e,condition:t,value:n})=>!n||!U(n).toLowerCase().includes(T(t.value||"",e).toLowerCase())},[e.NOT_EMPTY]:{compare:({value:e})=>null!=e&&""!==e&&(!Array.isArray(e)||e.length>0)},[e.NOT_REGEX]:{compare:({condition:e,value:t})=>!M(e,t)},[e.OR]:{compare:()=>D("OR.compare")},[e.REGEX]:{compare:({condition:e,value:t})=>M(e,t)},[e.RELATIVE_EQ]:{compare:({condition:e,value:t})=>{const n=C(t),o=_(e.value);return null!=n&&null!=o&&(!d(n,o)&&d(n,p(o,1)))}},[e.RELATIVE_GT]:{compare:({condition:e,value:t})=>{const n=C(t),o=_(e.value);return null!=n&&null!=o&&m(n,o)}},[e.RELATIVE_LT]:{compare:({condition:e,value:t})=>{const n=C(t),o=_(e.value);return null!=n&&null!=o&&d(n,o)}},[e.STARTS_WITH]:{compare:({sessionData:e,condition:t,value:n})=>!!n&&U(n).toLowerCase().startsWith(T(t.value||"",e).toLowerCase())},[e.TRUE]:{compare:({value:e})=>"true"===U(e).toLowerCase()},[e.URL]:{compare:({condition:e,value:t})=>{return!(!e.urlPattern||null==t)&&(n=e.urlPattern,o=U(t),(0!==n.includes.length||0!==n.excludes.length)&&(0===n.includes.length||n.includes.some((e=>{const t=L(e);return t&&o.match(t)})))&&!n.excludes.some((e=>{const t=L(e);return t&&o.match(t)})));var n,o}}};function D(e){throw new Error(`conditionOperators.${e} is not supported`)}function C(e){if(Array.isArray(e)&&(e=e[0]),!e)return null;e.match(/(Z|((\+|-)\d\d:\d\d))$/i)||(e+="Z");const t=h(e);return w(t)?t:null}function I(e,t){if(!e)return null;const n=h(e+="T"+t+"Z");return w(n)?n:null}function _(e){if(!e)return null;const t=parseInt(e,10);return isNaN(t)?null:v(Date.now(),t)}function M(e,t){if(!e.value)return!1;return new RegExp(e.value).test(U(t))}function U(e){return Array.isArray(e)?e[0]:null==e?"":e}function R(e){return Array.isArray(e)?e:""===e||null==e?[]:[e]}let O=window.MutationObserver;const F=window;if(F.Zone&&"function"==typeof F.Zone.__symbol__){const e=F.Zone.__symbol__("MutationObserver");e&&"string"==typeof e&&F.hasOwnProperty(e)&&"function"==typeof F[e]&&(O=F[e])}function V(e,t){const n=e.left,o=e.top,r=n+e.width,s=o+e.height,i=t.left,l=t.top;return function(e,t,n,o,r,s,i,l){const c=i<e,a=n<r,u=l<t,f=o<s;return f&&c?B(e,o,i,s):c&&u?B(e,t,i,l):u&&a?B(n,t,r,l):a&&f?B(n,o,r,s):c?e-i:a?r-n:u?t-l:f?s-o:0}(n,o,r,s,i,l,i+t.width,l+t.height)}function B(e,t,n,o){return Math.sqrt(Math.pow(n-e,2)+Math.pow(o-t,2))}function $(e){window.performance.mark&&window.performance.mark(e)}function j(e,t,n){window.performance.measure&&window.performance.measure(e,t,n)}function P(e){return Y(),W(e)}let q;function W(e){return null==q&&(q=function(){const e=window.getComputedStyle(window.document.body);if(e.zoom&&"1"!==e.zoom){const t=parseFloat(e.zoom);if(!isNaN(t))return t}return 1}()),1==q?e:e/q}function Y(){q=null}function G(){return("BackCompat"==document.compatMode?document.body:document.documentElement).clientWidth||window.innerWidth}function z(){return("BackCompat"==document.compatMode?document.body:document.documentElement).clientHeight||window.innerHeight}function X(e){return e?parseFloat(e.replace(/px$/,"")):0}function Z(e){return null==e?void 0:e+"px"}const H=new Set(["left","start","justify","justify-all"]);class Q{constructor(e){this.ctx=e,this.rectCache=new Map,this.isLabelLikeCache=new Map,this.hasPlaceholderCache=new Map}calcScore(e,t){const n=this.getRect(e),o=this.getRect(t),r=this.distBetween(e,t),s=be(t)?100:50;if(r>s)return 0;const i=this.isLabelLike(e),l=this.isCloserToOtherInput(e,t),c=window.getComputedStyle(e).textAlign||"",a=n.top+n.height<=o.top,u=Math.abs(n.left-o.left)<25&&(!c||H.has(c)),f=n.left+n.width<=o.left,d=Math.abs(n.top-o.top)<25,m=a&&u||f&&d,p=n.height>=z()/2,h=Se(t);if(h&&n.top>=o.top+o.height)return 0;let w=1;const v=e.htmlFor;return v&&v===t.id&&(w+=Math.pow(1e3,4)),!h||p||l||(i&&m?w+=Math.pow(1e3,3):t===e&&this.hasPlaceholder(t)?w+=Math.pow(1e3,2):!i&&m&&(w+=Math.pow(1e3,1))),w+=s-r,w}getRect(e){let t=this.rectCache.get(e);return t||(t=ke(e),this.rectCache.set(e,t)),t}isLabelLike(e){let t=this.isLabelLikeCache.get(e);if(void 0===t){const n="a, button, h1, h2, h3, h4, h5, h6, input";t=!e.closest(n)&&!e.querySelector(n),this.isLabelLikeCache.set(e,t)}return t}hasPlaceholder(e){let t=this.hasPlaceholderCache.get(e);return void 0===t&&(t=!!me(e),this.hasPlaceholderCache.set(e,t)),t}getAllInputs(){return this.allInputs||(this.allInputs=Array.from(document.querySelectorAll(ve())).filter((e=>Ae(e,this.ctx)))),this.allInputs}distBetween(e,t){return Math.round(V(this.getRect(e),this.getRect(t)))}isCloserToOtherInput(e,t){let n=this.distBetween(e,t);for(let o of this.getAllInputs()){if(o===t)continue;if(this.distBetween(e,o)<n)return!0}return!1}}function J(e,n={}){const o=performance.now();let i;$("userflow:inferSelector:start"),t.groupCollapsed("inferSelector for",e,n);try{i=function(e,{elementType:n}={}){const o={minorVersion:te};let i=Se(e);const l=function(e){let t=e.parentNode;for(;t&&"BODY"!==t.tagName&&!Ie(t);){if(Te(t))return t;t=t.parentNode}return null}(e);if(n!==r.INPUT||i)l&&(e=l,i=!0);else{if(!l)return t("not an input"),null;e=l,i=!0,t("use custom input parent",l)}const c=function(e){let t=[],n=e;for(;n;){let e=n.getRootNode();if(Ie(e)){const{host:o}=e;t.unshift(o.tagName.toLowerCase()),n=o;continue}const o=Ce(n);if(!o)break;{let e=o.tagName.toLowerCase();const r=o.getAttribute("name");r?e+=`[name="${r}"]`:o.id&&!o.id.match(/\d$/)&&(e+="#"+o.id),t.unshift(e),n=o}}if(0===t.length)return;return t}(e);let a=null;i||(a=de(e),a&&a.length>250&&(a=null));t("text is:"+a);let u=new Map,f=new Map;const d=new Map,m=new ee(c,null,o),p=new ee(c,a,o),h=(e,n,o,r,s)=>{if(r<0)return;let i=e.get(n);i||(i=[],e.set(n,i)),i.push({css:o,offset:r,complexity:s}),t(`use css=${o}, cardinality=${n}, offset=${r}`)},w=function(e){const t=new Map;t.set(null,0);let n=e.parentNode;for(;n&&"BODY"!==n.tagName&&!Ie(n);){for(const e of K(n)){if(t.has(e))continue;const n=le(document.body,e);if(n){const o=n.length;t.set(e,o)}}n=n.parentNode}const o=20;return Array.from(t.entries()).sort((([,e],[,t])=>e-t)).slice(0,o).map((([e])=>e))}(e),v=[e.tagName.toLowerCase(),...K(e)];t("shadowRootSelectors:",c),t("ancestorCssSelectors:",w),t("ownCssSelectors:",v);for(const r of v)for(const n of w){const o=n?`${n} ${r}`:r,s=n?2:1,i=m.query(o),l=Array.from(i),c=l.length;if(c>100){t(`cardinality too high css=${o}, cardinality=${c}`);continue}d.set(o,c);if(h(u,c,o,l.indexOf(e),s),a){const t=p.query(o),n=Array.from(t),r=n.indexOf(e);h(f,n.length,o,r,s)}}if(u.size>0||f.size>0){const r=e=>Array.from(e.entries()).map((([e,t])=>({cardinality:e,cssSelectors:t.sort(((e,t)=>{const n=d.get(e.css),o=d.get(t.css);return n!==o?n?o?n-o:-1:1:e.complexity!==t.complexity?t.complexity-e.complexity:e.css.localeCompare(t.css)})).map((({css:e,offset:t})=>({css:e,offset:t})))}))).sort(((e,t)=>e.cardinality-t.cardinality)),i={version:"v1",minorVersion:o.minorVersion,shadowRootSelectors:c,notextGroups:r(u),textGroups:r(f)},l={el:e,selector:{type:s.AUTO,autoData:JSON.stringify(i),text:a,elementType:n}};return t("inference result",l),l}return t("no selector inferred "),null}(e,n)}catch(l){console.error("Userflow findElement error:",l),i=null}return t("time",performance.now()-o),t.groupEnd(),$("userflow:inferSelector:end"),j("userflow:inferSelector","userflow:inferSelector:start","userflow:inferSelector:end"),i}function K(e){const t=[],r=e.tagName.toLowerCase();return n.inferenceAttributeNames.forEach((s=>{const i=e.getAttribute(s);if(!i)return;const l=n.inferenceAttributeFilters[s];if(!l||o(l,i))if("id"===s)t.push(`#${i}`);else{const e="name"===s||"placeholder"===s?r:"";t.push(`${e}[${s}="${i}"]`)}})),e.classList.forEach((e=>{o(n.inferenceClassNameFilters,e)&&(e=e.replace(/:/g,"\\:").trim(),t.push(`.${e}`))})),t}(window.userflow||{}).__inferSelector=J;class ee{constructor(e,t,n){this.shadowRootSelectors=e,this.text=t,this.ctx=n,this.isVisibleCache=new Map,this.textCache=new Map}*query(e){const n=le(document.body,e,this.shadowRootSelectors);if(t("found",n),!n)return;const{text:o}=this;for(let r=0;r<n.length;r++){const e=n[r];if(o){let n=this.textCache.get(e);if(null==n&&(n=pe(e,o),this.textCache.set(e,n)),!n){t("skip, text mismatch",e);continue}}let s=this.isVisibleCache.get(e);null==s&&(s=Ae(e,this.ctx),this.isVisibleCache.set(e,s)),s?(t("yield",e),yield e):t("skip, not visible",e)}}}const te=5,ne=window.userflow||{};function oe(e){const n=performance.now();let o;$("userflow:findAllElements:start"),t.groupCollapsed("findAllElements",e);try{if(e.type===s.MANUAL)o=function(e){const n={minorVersion:null==e.minorVersion?1:e.minorVersion};let{css:o,text:s,elementType:i,offset:l}=e;s=s&&he(s);const c="nearSelector"in e?e.nearSelector:null;t("findAllElementsManual",e),null!=l&&null!=c&&console.warn("Userflow.js: Both selector.offset and selector.nearSelector was set; ignoring nearSelector.");let a;if(s&&!o){if(a=[],n.minorVersion>=2)for(const e of Fe())ie(e,s,a);else ie(document.body,s,a);t("els after traverseElementForText",a)}else if(o){if(n.minorVersion>=2){a=[];for(const e of Fe()){const t=le(e,o);t&&t.length>0&&a.push(...t)}}else a=Array.from(le(document.body,o)||[]);t("els after safeQueryAll",a),s&&(a=function(e,t){const n=[];for(let o=e.length-1;o>=0;o--){const r=e[o];n.some((e=>e.contains(r)))||pe(r,t)&&n.push(r)}return n.reverse()}(a,s),t("els after filterElementsByText",a))}else console.warn("Userflow.js: findAllElements() requires least one of `css` and `text` to be set."),a=[];a.length>0&&(a=a.filter((e=>Ae(e,n))),t("els after isVisible",a));a.length>0&&i===r.INPUT&&(a=function(e,n){const o=new Set,r=new Q(n),s=ve();for(const i of e){if(i.matches(s)){o.add(i);continue}let e=null,n=null;r.getAllInputs().forEach((o=>{const s=r.calcScore(i,o);t("input",s,o),0!==s&&(e&&n&&s<=n||(t("input is best so far"),e=o,n=s))})),e&&(t("best input was",e),o.add(e))}return Array.from(o)}(a,n),t("els after mapElementsToInputs",a));a.length>0&&(a.sort(((e,t)=>{const n=ke(e),o=ke(t);return n.top<o.top?-1:n.top>o.top?1:n.left-o.left})),t("els after sort",a));if(a.length>0)if(null!=l)a=a[l]?[a[l]]:[],t("els after offset",a);else if(null!=c){const e=oe(c);let n=null,o=0;for(const t of a)for(const r of e){const e=V(ke(t),ke(r));(!n||e<o)&&(n=t,o=e)}a=n?[n]:[],t("els after nearSelector",a)}return a}(e);else if(e.autoData){const n=JSON.parse(e.autoData);let r;if("v1"!==n.version)throw new E(n.version,"Unknown autoData version: "+n.version);r=function(e,n){const{text:o,excludeText:r,precision:s}=e,i={minorVersion:n.minorVersion||0},l=null!=o&&!r,c=l?n.textGroups:n.notextGroups,a=Math.max(1,Math.min(c.length,Math.ceil((1-parseFloat(s||"1"))*c.length))),u=new ee(n.shadowRootSelectors,l&&o||null,i);t("findElementAutoV1",{text:o,excludeText:r,precision:s,groups:c,groupCount:a});for(let f=0;f<a;f++){const e=c[f];let n=new Map,o=0,r=null;t.group(`group cardinality=${e.cardinality}`,e);try{for(let s=0;s<e.cssSelectors.length;s++){const{css:i,offset:l}=e.cssSelectors[s];t(`css=${i}, offset=${l}`);let c=u.query(i),a=null;for(let e=0;e<=l;e++){const e=c.next();if(e.done)break;a=e.value}if(!a)continue;const f=(n.get(a)||0)+1;if(n.set(a,f),t(`el with frequency=${f}`+(f>o&&a!==r?" NEW BEST":""),a),f>o&&(o=f,r=a,f>=Math.ceil(e.cssSelectors.length/2)))return t("early winner",r),r}}finally{t.groupEnd()}if(r)return t("winner",r),r}return t("element not found"),null}(e,n),o=r?[r]:[]}else o=[]}catch(i){console.error("Userflow findElement error:",i),o=[]}return t("time",performance.now()-n),t.groupEnd(),$("userflow:findAllElements:end"),j("userflow:findAllElements","userflow:findAllElements:start","userflow:findAllElements:end"),o}function re(e){return oe(e)[0]||null}function se(e,n){const o=performance.now();let r;$("userflow:elementMatchesSelector:start"),t.groupCollapsed("elementMatchesSelector",e,n);try{if(n.type===s.MANUAL)r=function(e,t){null!=t.offset&&console.warn("Userflow.js: selector.offset is not supported for elementMatchesSelector yet");"nearSelector"in t&&null!=t.nearSelector&&console.warn("Userflow.js: selector.nearSelector is not supported for elementMatchesSelector yet");let{css:n,text:o}=t;o=o&&he(o);let r=!1,s=e;for(;s&&"BODY"!==s.tagName;){if((!n||s.matches(n))&&(!o||pe(s,o))){r=!0;break}s=s.parentElement}return r}(e,n);else{const t=re(n);r=null!=t&&t.contains(e)}}catch(i){console.error("Userflow findElement error:",i),r=!1}return t(r?"match":"not match"),t("time",performance.now()-o),t.groupEnd(),$("userflow:elementMatchesSelector:end"),j("userflow:elementMatchesSelector","userflow:elementMatchesSelector:start","userflow:elementMatchesSelector:end"),r}function ie(e,t,n){if(_e(e)){const{tagName:t}=e;if("SCRIPT"===t||"STYLE"===t)return!1}let o=!1;for(let r=0;r<e.children.length;r++)ie(e.children[r],t,n)&&(o=!0);return!o&&_e(e)&&pe(e,t)&&(n.push(e),o=!0),o}function le(e,t,n){try{if(null==n)return e.querySelectorAll(t);return ce(t,n,0,e)}catch(o){return console.warn("Userflow.js: Invalid CSS selector: ",t),null}}function ce(e,t,n,o){if(n>=t.length)return Array.from(o.querySelectorAll(e));const r=t[n],s=o.querySelectorAll(r),i=[];return s.forEach((o=>{let r;if(o.shadowRoot)r=o.shadowRoot;else{if(!Me(o))return;let e=null;try{e=o.contentDocument}catch(s){}if(!e)return;r=e.body}i.push(...ce(e,t,n+1,r))})),i}const ae={email:!0,number:!0,password:!0,search:!0,tel:!0,text:!0,url:!0},ue={date:!0,"datetime-local":!0,month:!0,time:!0,week:!0},fe={button:!0,email:!0,reset:!0,search:!0,submit:!0,tel:!0,text:!0,url:!0};function de(e){let t=e.innerText;return void 0===t&&"SELECT"!==e.tagName&&(t=e.textContent),t=he(t),t||null}function me(e){if(Ee(e)||ge(e)){const t=he(e.getAttribute("placeholder")),n=e.value||"";if(t&&!n)return t;const o=he(n);if(o&&function(e){if(ge(e))return!0;const t=(e.getAttribute("type")||"").toLowerCase();return fe[t]}(e))return o}if(ye(e)&&e.selectedIndex>=0){const t=he(e.options[e.selectedIndex].text);if(t)return t}return de(e)}function pe(e,t){const n=me(e);return!!n&&function(e,t){const n=e.toLowerCase();if(t.toLowerCase()===n)return!0;return!1}(t,n)}function he(e){return e?e.length>250?null:e.replace(/^[\s\uFEFF\xA0\u200B*]+|[\s\uFEFF\xA0\u200B*]+$/g,"").replace(/\s+/g," "):null}function we(e){for(const{cssSelector:o,getValue:r}of n.customInputs)if(e.matches(o)){if(!r)return me(e)||"";try{return(r(e)||"").trim()}catch(t){return console.error(`Userflow.js: getValue function for custom input '${o}' failed:`,t),""}}return ye(e)?-1==e.selectedIndex?"":e.options[e.selectedIndex].text:be(e)?me(e)||"":e.value}function ve(){return"input, select, textarea, [contenteditable]"+n.customInputs.map((({cssSelector:e})=>`, ${e}`)).join("")}function Ee(e){if("INPUT"!==e.tagName)return!1;const t=e.getAttribute("type");return null==t||!0===ae[(t||"").toLowerCase()]}function ge(e){return"TEXTAREA"===e.tagName}function ye(e){return"SELECT"===e.tagName}function be(e){return"hasAttribute"in e&&e.hasAttribute("contenteditable")}function Te(e){return!!be(e)||!!n.customInputs.some((({cssSelector:t})=>e.matches(t)))}function Se(e){return Ee(e)||function(e){if("INPUT"!==e.tagName)return!1;const t=(e.getAttribute("type")||"").toLowerCase();return!0===ue[t]}(e)||ge(e)||ye(e)||Te(e)}function Ae(e,n){const o=ke(e);let r=e,s=!0,i=!1,l=!1,c=!1,a=!1;for(;r;){const u=r===document.body,f="BODY"===r.tagName,d=window.getComputedStyle(r);let m=null;if(s){if(d.visibility&&"visible"!==d.visibility)return t("not visible because visibility is",d.visibility,e,{cur:r}),!1;s=!1}if("none"===d.display)return t("not visible because display is",d.display,e,{cur:r}),!1;if(null!=d.opacity&&parseFloat(d.opacity)<.01)return t("not visible because opacity is",d.opacity,e,{cur:r}),!1;if("absolute"===d.position?c=!0:"relative"!==d.position&&"fixed"!==d.position&&"sticky"!==d.position||(c=!1),n.minorVersion>=4&&!i&&!f&&(!a||"static"!==d.position)&&(Le(d.overflowX)||Le(d.overflowY))&&(m=m||ke(r),0===m.width||0===m.height))return t("not visible because width/height (v1.4 check) is",m.width,m.height,e,{cur:r}),!1;if(!l&&Ne(d.display)&&(n.minorVersion<1||f||"static"!==d.position)){const s=f||Le(d.overflow),i=s||Le(d.overflowX),a=s||Le(d.overflowY),{scrollLeft:u,scrollTop:p}=f?r.ownerDocument.documentElement:r,h=!f&&!c;if(i){if(m=m||ke(r),h&&0===m.width)return t("not visible because width is",m.width,e,{cur:r}),!1;const s=n.minorVersion>=5?o.width/2:0,i=Math.round(o.left+s),l=Math.round(m.left-u);if(i<l)return t("not visible because it's clipped left",e,{elX:i,curLeft:l,cur:r}),!1}if(a){if(m=m||ke(r),h&&0===m.height)return t("not visible because height is",m.height,e,{cur:r}),!1;const s=n.minorVersion>=5?o.height/2:0,i=Math.round(o.top+s),l=Math.round(m.top-p);if(i<l)return t("not visible because it's clipped top",e,{elY:i,curTop:l,cur:r}),!1}(i||a)&&(l=!0)}if("fixed"===d.position&&(i=!0,l=!0),n.minorVersion>=3&&(r.scrollTop>0||r.scrollLeft>0)&&(l=!0),u)break;f?(r=Ce(r),s=!0):r=r.parentElement,a=c}return!0}function Le(e){return"hidden"===e||"clip"===e||"scroll"===e||"auto"===e}function Ne(e){return!e||!e.includes("inline")&&"contents"!==e}function xe(e){let t=e.parentNode,n=!1;for(;t&&"BODY"!==t.tagName;){Ie(t)&&(t=t.host);const o=window.getComputedStyle(t);if("absolute"===o.position?n=!0:"relative"!==o.position&&"fixed"!==o.position&&"sticky"!==o.position||(n=!1),!n&&Ne(o.display)&&(Le(o.overflow)||Le(o.overflowY)))return t;if("fixed"===o.position)return e.ownerDocument.documentElement;t=t.parentNode}return e.ownerDocument.documentElement}function ke(e){if("HTML"===e.tagName){const t=Ce(e);if(t)return ke(t)}let t=e.getBoundingClientRect(),n=e;for(;n&&(n=Ce(n),n);){const e=n.getBoundingClientRect();t={width:t.width,height:t.height,left:t.left+e.left,right:t.right+e.left,top:t.top+e.top,bottom:t.bottom+e.top}}return t}const De=new WeakSet;function Ce(e){const t=e.ownerDocument?.defaultView;if(!t)return null;if(De.has(t))return null;{const e=t.frameElement;return e||De.add(t),e}}function Ie(e){return"object"==typeof e&&null!=e&&"nodeType"in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&"host"in e&&"mode"in e}function _e(e){return"object"==typeof e&&null!=e&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function Me(e){return _e(e)&&"IFRAME"===e.tagName}ne.__findElement=re,ne.__findAllElements=oe,ne.__elementMatchesSelector=se,ne.__getElementText=me,ne.__getInputValue=we;const Ue=new Set,Re=new Map,Oe=new Set;function Fe(){return je(),Ue}function Ve(e,t){je();for(const o of Ue)e(o);const n={setup:e,teardown:t};return Oe.add(n),()=>{Oe.delete(n);for(const e of Ue)t(e)}}let Be=!1,$e=null;function je(){if(qe(),!Be){t("roots started"),Be=!0,$e=document.body,Ye($e);for(const e of i)document.addEventListener(e,Pe);window.setInterval(qe,1e4)}}function Pe(){$e&&!document.contains($e)&&(t("roots detected new Turbo body"),Ge($e),$e=document.body,Ye($e))}function qe(){for(const e of Ue)Ie(e)&&(We(e)||(t("roots clean before removeRoot",e),Ge(e)));t("roots clean finished, remaining=",Ue.size)}function We(e){if(!e.ownerDocument.defaultView)return!1;let t=e.host;for(;t;){if(Ie(t)&&(t=t.host),_e(t)&&"BODY"===t.tagName)return!0;t=t.parentNode}return!1}function Ye(e){if(!Ue.has(e)){t("roots addRoot",e),Ue.add(e),function(e){let t;const n=()=>{ze(e)},o=new O((()=>{window.cancelAnimationFrame(t),t=window.requestAnimationFrame(n)}));o.observe(e,{childList:!0,subtree:!0}),Re.set(e,o)}(e),ze(e),function(e){const n=e.ownerDocument.defaultView;if(n.__userflowAttachShadowInstalled)return;n.__userflowAttachShadowInstalled=!0;const o=n.Element.prototype.attachShadow;null!=o&&(n.Element.prototype.attachShadow=function(e){const n=o.call(this,e);return this.shadowRoot&&(t("roots monitorShadowDom before addRoot",this,this.shadowRoot),Ye(this.shadowRoot)),n})}(e),function(e){const n=e=>{e.childNodes.forEach((e=>{_e(e)&&e.shadowRoot&&(t("roots queryShadowDom before addRoot",e,e.shadowRoot),Ye(e.shadowRoot)),n(e)}))};n(e)}(e);for(const{setup:t}of Oe)t(e)}}function Ge(e){if(Ue.has(e)){t("roots removeRoot",e),Re.get(e)?.disconnect(),Re.delete(e),Ue.delete(e);for(const{teardown:t}of Oe)t(e)}}function ze(e){const t=_e(e)?e.ownerDocument.getElementsByTagName("iframe"):e.querySelectorAll("iframe");for(const n of t)Ze(n)}const Xe=new WeakSet;function Ze(e){if(Xe.has(e))return;if(e.closest("#userflow-ui"))return;e.addEventListener("load",He);const n=e.contentWindow,o=e.contentDocument;if(!n||!o)return void Xe.add(e);const r=o.body;r&&(n.addEventListener("pagehide",Qe),t("roots setupFrame before addRoot",e,o,r),Ye(r))}function He(e){const t=e.target;t&&Me(t)&&Ze(t)}function Qe(e){const n=e.currentTarget.document.body;t("roots onFrameUnload before removeRoot",n),Ge(n)}function Je(e,t={}){let n,o;const r=()=>{o=void 0,e()},s=()=>{if(window.clearTimeout(n),null==o)o=Date.now();else if(Date.now()-o>1e3)return void r();n=window.setTimeout(r,50)},i=e=>{const t=e.target;if(!t||!Ke(t))return;const n=document.getElementById("userflow-ui");n&&n.contains(t)||s()},l=new O((e=>{(function(e){const t=document.getElementById("userflow-ui");for(const n of e){const{target:e}=n;if(Ke(e)&&(t&&t.contains(e)))return!0}return!1})(e)||s()})),c=Ve((e=>{l.observe(e,{attributes:!0,subtree:!0,childList:!0,characterData:!0}),e.addEventListener("animationend",i),e.addEventListener("transitionend",i),t.observeInput&&(e.addEventListener("input",s),e.addEventListener("keypress",s),e.addEventListener("change",s))}),(e=>{e.removeEventListener("animationend",i),e.removeEventListener("transitionend",i),t.observeInput&&(e.removeEventListener("input",s),e.removeEventListener("keypress",s),e.removeEventListener("change",s))}));return{disconnect:()=>{window.clearTimeout(n),l.disconnect(),c()}}}function Ke(e){return e.nodeType===Node.ELEMENT_NODE}const et={[l.ALWAYS_TRUE]:{track:({callback:e})=>(e(!0),()=>{})},[l.ATTRIBUTE]:{track:({sessionData:e,condition:t,callback:n})=>{const o=()=>{let o=!1;if(e&&t.operator){const n=e.value.find((e=>e.name===t.attributeName)),r=n?n.value:null;o=k[t.operator].compare({sessionData:e.value,condition:t,value:r})}n(o)};o();const r=e.observe(o);return()=>{r()}}},[l.CLAUSE]:{isExpensive:e=>{for(const t of e.conditions){const e=et[t.type];if(e.isExpensive&&e.isExpensive(t))return!0}return!1},track:({sessionData:t,condition:n,flipBackEvents:o,callback:r,description:s})=>{let i,l,c=null;const a=n.conditions.map((e=>{const t=et[e.type];return{condition:e,typeDef:t,expensive:!!t.isExpensive&&t.isExpensive(e),active:!1,isTrue:null}})),u=e=>{for(const n of a){const r=!o||!n.expensive||e;r&&!n.active?(n.active=!0,n.isTrue=!1,n.untrack=n.typeDef.track({sessionData:t,condition:n.condition,flipBackEvents:o,callback:(e,t={})=>{n.isTrue=e,window.clearTimeout(i),t.immediate?f({immediate:!0}):i=window.setTimeout(f,0)},description:s})):!r&&n.active&&(n.untrack&&n.untrack(),n.active=!1,n.isTrue=null,n.untrack=void 0)}},f=(t={})=>{if(0===a.length)return void d(!1,t);let o,r;if(n.operator===e.AND){o=!0,r=!0;for(const e of a)!1===e.isTrue?(o=!1,e.expensive||(r=!1)):!1!==o&&null===e.isTrue&&(o=null)}else{o=!1,r=!0;for(const e of a)!0===e.isTrue?(o=!0,e.expensive||(r=!1)):!0!==o&&null===e.isTrue&&(o=null)}null!==o&&o!==c&&(c=o,d(o,t)),u(r)},d=(e,t)=>{if(e&&null!=n.waitTime&&"0"!=n.waitTime){if(!l){const e=1e3*parseFloat(n.waitTime);l=window.setTimeout((()=>{r(!0,{})}),e)}}else window.clearTimeout(l),l=void 0,r(e,t)};return u(!1),f(),()=>{window.clearTimeout(i),window.clearTimeout(l);for(const e of a)e.untrack&&e.untrack()}}},[l.ELEMENT]:{isExpensive:()=>!0,track:e=>{const{elementState:t}=e.condition;if(!t)return()=>{};const n=function(e){switch(e){case f.CLICK:return{kind:"event",eventName:"click",valueWhenOccurred:!0};case f.DISABLED:return{kind:"observer",checkElement:e=>!!e&&e.disabled};case f.MOUSEDOWN:return{kind:"event",eventName:"mousedown",valueWhenOccurred:!0};case f.NOT_CLICK:return{kind:"event",eventName:"click",valueWhenOccurred:!1};case f.NOT_DISABLED:return{kind:"observer",checkElement:e=>!!e&&!e.disabled};case f.NOT_PRESENT:return{kind:"observer",checkElement:e=>!e};case f.PRESENT:return{kind:"observer",checkElement:e=>!!e}}}(t);switch(n.kind){case"observer":return function({sessionData:e,condition:t,callback:n},o){const r=()=>{if(!t.elementState)return void console.warn("Userflow.js: ELEMENT_STATE condition missing elementState",t);if(!t.selector)return void console.warn("Userflow.js: ELEMENT_STATE condition missing selector",t);let r=!1;const s=oe(S(t.selector,e.value));if(s.length>0){for(const e of s)if(o(e)){r=!0;break}}else o(null)&&(r=!0);n(r)};r();const s=e.observe(r),{disconnect:i}=Je(r);return()=>{s(),i()}}(e,n.checkElement);case"event":return function({condition:e,flipBackEvents:t,callback:n},o,r){const{selector:s}=e;if(!s)return()=>{};let i;n(!r);const l=e=>{const o=e.target;o&&se(o,s)&&(t?(n(r,{immediate:!0}),n(!r,{immediate:!0})):n(r))},c={capture:!0},a=Ve((e=>e.addEventListener(o,l,c)),(e=>e.removeEventListener(o,l,c)));return()=>{a(),window.clearTimeout(i)}}(e,n.eventName,n.valueWhenOccurred)}}},[l.FILLED_IN_INPUT]:{isExpensive:()=>!0,track:({sessionData:e,condition:t,callback:n})=>{let o,r=null;const s=()=>{if(!t.selector)return void console.warn("Userflow.js: INPUT_VALUE condition missing selector",t);const s=oe(S(t.selector,e.value));let i=null;for(const e of s){const t=we(e);if(t){i=t;break}}i?i!=r&&(window.clearTimeout(o),o=window.setTimeout((()=>{n(!0)}),1e3)):(n(!1),window.clearTimeout(o)),r=i};s();const i=e.observe(s),{disconnect:l}=Je(s,{observeInput:!0});return()=>{i(),l(),window.clearTimeout(o)}}},[l.FLOW]:{track:()=>(console.warn("Userflow.js: Flow conditions do not work client-side"),()=>{})},[l.INPUT_VALUE]:{isExpensive:()=>!0,track:({sessionData:e,condition:t,callback:n})=>{const o=()=>{if(!t.operator)return void console.warn("Userflow.js: INPUT_VALUE condition missing operator",t);if(!t.selector)return void console.warn("Userflow.js: INPUT_VALUE condition missing selector",t);let o=!1;const r=k[t.operator],s=oe(S(t.selector,e.value));if(s.length>0)for(const n of s){const s=we(n);if(r.compare({sessionData:e.value,condition:t,value:s})){o=!0;break}}else r.compare({sessionData:e.value,condition:t,value:""})&&(o=!0);n(o)};o();const r=e.observe(o),{disconnect:s}=Je(o,{observeInput:!0});return()=>{r(),s()}}},[l.PAGE]:{track:({sessionData:e,condition:t,callback:n})=>{const o=()=>{let o=!1;if(t.operator){const n=c();o=k[t.operator].compare({sessionData:e.value,condition:t,value:n})}n(o)};let r=c();const s=()=>{const e=c();e!==r&&(r=e,o())};a(s),o();const i=e.observe(o);return()=>{i(),u(s)}}},[l.SEGMENT]:{track:({description:e,callback:t})=>(console.error("Userflow.js: Segment conditions are not supported in "+(e||"unknown content item")+"."),t(!1),()=>{})},[l.TIME]:{track:({condition:e,callback:t})=>{let n=null;const o=e.value?new Date(e.value):null,r=e.value2?new Date(e.value2):null,s=()=>{let e=!0;(o&&!isNaN(o.valueOf())&&Date.now()<o.valueOf()||r&&!isNaN(r.valueOf())&&Date.now()>=r.valueOf())&&(e=!1),e!==n&&(n=e,t(e))};s();const i=window.setInterval(s,1e4);return()=>{window.clearInterval(i)}}}};var tt=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",conditionTypes:et});export{O as M,E as U,z as a,b,et as c,y as d,_e as e,Z as f,G as g,re as h,T as i,xe as j,Y as k,W as l,Ve as m,Ie as n,Je as o,Ce as p,J as q,ke as r,X as s,S as t,Me as u,tt as v,P as z};
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="0e3ac705-ca9c-44bb-a0d2-0fbce6cbaf38",e._sentryDebugIdIdentifier="sentry-dbid-0e3ac705-ca9c-44bb-a0d2-0fbce6cbaf38")}catch(n){}}();import{F as e,d as t,c as n,t as o,a as r,b as s,T as i,e as l,g as a,o as c,u,f}from"./userflow.js";import"./vendor.react.js";import{i as d,a as m,b as p,p as h,c as w,s as v}from"./vendor.date-fns.js";class E extends Error{constructor(e,t){const n=`Unreachable case: ${e}`;super(t=t?`${t} (${n})`:n)}}const g=/(\\*)\{\{([a-zA-Z0-9_.\\/]+)\}\}/g;function y(e,t){return(e||"").replace(g,((e,n,o)=>{const r=n.length;return r%2==0?"\\".repeat(r/2)+(t(o)||""):"\\".repeat((r-1)/2)+"{{"+o+"}}"}))}function b(e){let t=null;return n=>(t||(t=new Map,e.forEach((({name:e,value:n})=>t.set(e,Array.isArray(n)?n[0]:n)))),t.get(n)||null)}function T(e,t){const n=b(t);return y(e,(e=>n(e)))}function S(e,t){const n=A(e,t),o=e.nearSelector&&A(e.nearSelector,t);return e===n&&e.nearSelector===o?e:e.nearSelector===o?n:{...n,nearSelector:o}}function A(e,t){if(!e.text)return e;const n=T(e.text,t);return n===e.text?e:{...e,text:n}}function L(e){const t=function(e){const t=e.match(/^(([a-z\d]+):\/\/)?([^/?#]+)?(\/[^?#]*)?(\?([^#]*))?(#.*)?$/i);if(!t)return null;const[,,n,o,r,,s,i]=t;return{scheme:n||"",domain:o||"",path:r||"",query:s||"",fragment:i||""}}(e);if(!t)return console.error("Userflow: Invalid URL pattern:",e),null;const{scheme:n,domain:o,path:r,query:s,fragment:i}=t;let l,a;l=n?x(n):"[a-z\\d]+",a=o?N(o,"[^/]","."):"[^/]*";let c,u,f;c=r?N(r,"[^?#]","/"):"/[^?#]*",s?(u="",new URLSearchParams(s).forEach(((e,t)=>{let n;n=""===e?"=?":"*"===e?"(=[^&#]*)?":"="+N(e=e.split(/\*/g).map((e=>encodeURI(e))).join("*"),"[^#]"),u+="(?=.*[?&]"+x(t)+n+"([&#]|$))"})),u+="\\?[^#]*"):u="(\\?[^#]*)?",f=i?N(i,".","/"):"(#.*)?";return new RegExp("^"+l+"://"+a+"(:\\d+)?"+c+u+f+"$")}function N(e,t,n){return e=(e=x(e)).replace(/\\\*/g,t+"*"),n&&(e=e.replace(/:[a-zA-Z0-9_]+/g,"[^"+n+"]+")),e}function x(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}const k={[e.ABSOLUTE_EQ]:{compare:({condition:e,value:t})=>{const n=C(t),o=I(e.value,"00:00:00.000"),r=I(e.value,"23:59:59.999");return null!=n&&null!=o&&null!=r&&!d(n,o)&&!m(n,r)}},[e.ABSOLUTE_GT]:{compare:({condition:e,value:t})=>{const n=C(t),o=I(e.value,"23:59:59.999");return null!=n&&null!=o&&m(n,o)}},[e.ABSOLUTE_LT]:{compare:({condition:e,value:t})=>{const n=C(t),o=I(e.value,"00:00:00.000");return null!=n&&null!=o&&d(n,o)}},[e.AND]:{compare:()=>D("AND.compare")},[e.BETWEEN]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&!!e.value2&&parseFloat(U(t))>=parseFloat(e.value)&&parseFloat(U(t))<=parseFloat(e.value2)},[e.CONTAINS]:{compare:({sessionData:e,condition:t,value:n})=>!!n&&U(n).toLowerCase().includes(T(t.value||"",e).toLowerCase())},[e.EMPTY]:{compare:({value:e})=>null==e||""===e||Array.isArray(e)&&0===e.length},[e.ENDS_WITH]:{compare:({sessionData:e,condition:t,value:n})=>!!n&&U(n).toLowerCase().endsWith(T(t.value||"",e).toLowerCase())},[e.EQ]:{compare:({sessionData:e,condition:t,value:n})=>T(t.value||"",e)===U(n)},[e.EXCLUDES_ALL]:{compare:({condition:e,value:t})=>{const n=new Set(R(t));return!(e.values||[]).some((e=>n.has(e)))}},[e.EXCLUDES_ANY]:{compare:({condition:e,value:t})=>{const n=new Set(R(t));return!(e.values||[]).every((e=>n.has(e)))}},[e.FALSE]:{compare:({value:e})=>"false"===U(e).toLowerCase()},[e.GT]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&parseFloat(U(t))>parseFloat(e.value)},[e.GTE]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&parseFloat(U(t))>=parseFloat(e.value)},[e.INCLUDES_ALL]:{compare:({condition:e,value:t})=>{const n=new Set(R(t));return(e.values||[]).every((e=>n.has(e)))}},[e.INCLUDES_ANY]:{compare:({condition:e,value:t})=>{const n=new Set(R(t));return(e.values||[]).some((e=>n.has(e)))}},[e.LT]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&parseFloat(U(t))<parseFloat(e.value)},[e.LTE]:{compare:({condition:e,value:t})=>!!t&&!!e.value&&parseFloat(U(t))<=parseFloat(e.value)},[e.NE]:{compare:({sessionData:e,condition:t,value:n})=>T(t.value||"",e)!==U(n)},[e.NOT_CONTAINS]:{compare:({sessionData:e,condition:t,value:n})=>!n||!U(n).toLowerCase().includes(T(t.value||"",e).toLowerCase())},[e.NOT_EMPTY]:{compare:({value:e})=>null!=e&&""!==e&&(!Array.isArray(e)||e.length>0)},[e.NOT_REGEX]:{compare:({condition:e,value:t})=>!M(e,t)},[e.OR]:{compare:()=>D("OR.compare")},[e.REGEX]:{compare:({condition:e,value:t})=>M(e,t)},[e.RELATIVE_EQ]:{compare:({condition:e,value:t})=>{const n=C(t),o=_(e.value);return null!=n&&null!=o&&(!d(n,o)&&d(n,p(o,1)))}},[e.RELATIVE_GT]:{compare:({condition:e,value:t})=>{const n=C(t),o=_(e.value);return null!=n&&null!=o&&m(n,o)}},[e.RELATIVE_LT]:{compare:({condition:e,value:t})=>{const n=C(t),o=_(e.value);return null!=n&&null!=o&&d(n,o)}},[e.STARTS_WITH]:{compare:({sessionData:e,condition:t,value:n})=>!!n&&U(n).toLowerCase().startsWith(T(t.value||"",e).toLowerCase())},[e.TRUE]:{compare:({value:e})=>"true"===U(e).toLowerCase()},[e.URL]:{compare:({condition:e,value:t})=>{return!(!e.urlPattern||null==t)&&(n=e.urlPattern,o=U(t),(0!==n.includes.length||0!==n.excludes.length)&&(0===n.includes.length||n.includes.some((e=>{const t=L(e);return t&&o.match(t)})))&&!n.excludes.some((e=>{const t=L(e);return t&&o.match(t)})));var n,o}}};function D(e){throw new Error(`conditionOperators.${e} is not supported`)}function C(e){if(Array.isArray(e)&&(e=e[0]),!e)return null;e.match(/(Z|((\+|-)\d\d:\d\d))$/i)||(e+="Z");const t=h(e);return w(t)?t:null}function I(e,t){if(!e)return null;const n=h(e+="T"+t+"Z");return w(n)?n:null}function _(e){if(!e)return null;const t=parseInt(e,10);return isNaN(t)?null:v(Date.now(),t)}function M(e,t){if(!e.value)return!1;return new RegExp(e.value).test(U(t))}function U(e){return Array.isArray(e)?e[0]:null==e?"":e}function R(e){return Array.isArray(e)?e:""===e||null==e?[]:[e]}let O=window.MutationObserver;const F=window;if(F.Zone&&"function"==typeof F.Zone.__symbol__){const e=F.Zone.__symbol__("MutationObserver");e&&"string"==typeof e&&F.hasOwnProperty(e)&&"function"==typeof F[e]&&(O=F[e])}function V(e,t){const n=e.left,o=e.top,r=n+e.width,s=o+e.height,i=t.left,l=t.top;return function(e,t,n,o,r,s,i,l){const a=i<e,c=n<r,u=l<t,f=o<s;return f&&a?B(e,o,i,s):a&&u?B(e,t,i,l):u&&c?B(n,t,r,l):c&&f?B(n,o,r,s):a?e-i:c?r-n:u?t-l:f?s-o:0}(n,o,r,s,i,l,i+t.width,l+t.height)}function B(e,t,n,o){return Math.sqrt(Math.pow(n-e,2)+Math.pow(o-t,2))}function $(e){window.performance.mark&&window.performance.mark(e)}function j(e,t,n){window.performance.measure&&window.performance.measure(e,t,n)}function P(e){return Y(),W(e)}let q;function W(e){return null==q&&(q=function(){const e=window.getComputedStyle(window.document.body);if(e.zoom&&"1"!==e.zoom){const t=parseFloat(e.zoom);if(!isNaN(t))return t}return 1}()),1==q?e:e/q}function Y(){q=null}function G(){return("BackCompat"==document.compatMode?document.body:document.documentElement).clientWidth||window.innerWidth}function z(){return("BackCompat"==document.compatMode?document.body:document.documentElement).clientHeight||window.innerHeight}function X(e){return e?parseFloat(e.replace(/px$/,"")):0}function Z(e){return null==e?void 0:e+"px"}const H=new Set(["left","start","justify","justify-all"]);class Q{constructor(e){this.ctx=e,this.rectCache=new Map,this.isLabelLikeCache=new Map,this.hasPlaceholderCache=new Map}calcScore(e,t){const n=this.getRect(e),o=this.getRect(t),r=this.distBetween(e,t),s=be(t)?100:50;if(r>s)return 0;const i=this.isLabelLike(e),l=this.isCloserToOtherInput(e,t),a=window.getComputedStyle(e).textAlign||"",c=n.top+n.height<=o.top,u=Math.abs(n.left-o.left)<25&&(!a||H.has(a)),f=n.left+n.width<=o.left,d=Math.abs(n.top-o.top)<25,m=c&&u||f&&d,p=n.height>=z()/2,h=Se(t);if(h&&n.top>=o.top+o.height)return 0;let w=1;const v=e.htmlFor;return v&&v===t.id&&(w+=Math.pow(1e3,4)),!h||p||l||(i&&m?w+=Math.pow(1e3,3):t===e&&this.hasPlaceholder(t)?w+=Math.pow(1e3,2):!i&&m&&(w+=Math.pow(1e3,1))),w+=s-r,w}getRect(e){let t=this.rectCache.get(e);return t||(t=ke(e),this.rectCache.set(e,t)),t}isLabelLike(e){let t=this.isLabelLikeCache.get(e);if(void 0===t){const n="a, button, h1, h2, h3, h4, h5, h6, input";t=!e.closest(n)&&!e.querySelector(n),this.isLabelLikeCache.set(e,t)}return t}hasPlaceholder(e){let t=this.hasPlaceholderCache.get(e);return void 0===t&&(t=!!me(e),this.hasPlaceholderCache.set(e,t)),t}getAllInputs(){return this.allInputs||(this.allInputs=Array.from(document.querySelectorAll(ve())).filter((e=>Ae(e,this.ctx)))),this.allInputs}distBetween(e,t){return Math.round(V(this.getRect(e),this.getRect(t)))}isCloserToOtherInput(e,t){let n=this.distBetween(e,t);for(let o of this.getAllInputs()){if(o===t)continue;if(this.distBetween(e,o)<n)return!0}return!1}}function J(e,n={}){const o=performance.now();let i;$("userflow:inferSelector:start"),t.groupCollapsed("inferSelector for",e,n);try{i=function(e,{elementType:n}={}){const o={minorVersion:te};let i=Se(e);const l=function(e){let t=e.parentNode;for(;t&&"BODY"!==t.tagName&&!Ie(t);){if(Te(t))return t;t=t.parentNode}return null}(e);if(n!==r.INPUT||i)l&&(e=l,i=!0);else{if(!l)return t("not an input"),null;e=l,i=!0,t("use custom input parent",l)}const a=function(e){let t=[],n=e;for(;n;){let e=n.getRootNode();if(Ie(e)){const{host:o}=e;t.unshift(o.tagName.toLowerCase()),n=o;continue}const o=Ce(n);if(!o)break;{let e=o.tagName.toLowerCase();const r=o.getAttribute("name");r?e+=`[name="${r}"]`:o.id&&!o.id.match(/\d$/)&&(e+="#"+o.id),t.unshift(e),n=o}}if(0===t.length)return;return t}(e);let c=null;i||(c=de(e),c&&c.length>250&&(c=null));t("text is:"+c);let u=new Map,f=new Map;const d=new Map,m=new ee(a,null,o),p=new ee(a,c,o),h=(e,n,o,r,s)=>{if(r<0)return;let i=e.get(n);i||(i=[],e.set(n,i)),i.push({css:o,offset:r,complexity:s}),t(`use css=${o}, cardinality=${n}, offset=${r}`)},w=function(e){const t=new Map;t.set(null,0);let n=e.parentNode;for(;n&&"BODY"!==n.tagName&&!Ie(n);){for(const e of K(n)){if(t.has(e))continue;const n=le(document.body,e);if(n){const o=n.length;t.set(e,o)}}n=n.parentNode}const o=20;return Array.from(t.entries()).sort((([,e],[,t])=>e-t)).slice(0,o).map((([e])=>e))}(e),v=[e.tagName.toLowerCase(),...K(e)];t("shadowRootSelectors:",a),t("ancestorCssSelectors:",w),t("ownCssSelectors:",v);for(const r of v)for(const n of w){const o=n?`${n} ${r}`:r,s=n?2:1,i=m.query(o),l=Array.from(i),a=l.length;if(a>100){t(`cardinality too high css=${o}, cardinality=${a}`);continue}d.set(o,a);if(h(u,a,o,l.indexOf(e),s),c){const t=p.query(o),n=Array.from(t),r=n.indexOf(e);h(f,n.length,o,r,s)}}if(u.size>0||f.size>0){const r=e=>Array.from(e.entries()).map((([e,t])=>({cardinality:e,cssSelectors:t.sort(((e,t)=>{const n=d.get(e.css),o=d.get(t.css);return n!==o?n?o?n-o:-1:1:e.complexity!==t.complexity?t.complexity-e.complexity:e.css.localeCompare(t.css)})).map((({css:e,offset:t})=>({css:e,offset:t})))}))).sort(((e,t)=>e.cardinality-t.cardinality)),i={version:"v1",minorVersion:o.minorVersion,shadowRootSelectors:a,notextGroups:r(u),textGroups:r(f)},l={el:e,selector:{type:s.AUTO,autoData:JSON.stringify(i),text:c,elementType:n}};return t("inference result",l),l}return t("no selector inferred "),null}(e,n)}catch(l){console.error("Userflow findElement error:",l),i=null}return t("time",performance.now()-o),t.groupEnd(),$("userflow:inferSelector:end"),j("userflow:inferSelector","userflow:inferSelector:start","userflow:inferSelector:end"),i}function K(e){const t=[],r=e.tagName.toLowerCase();return n.inferenceAttributeNames.forEach((s=>{const i=e.getAttribute(s);if(!i)return;const l=n.inferenceAttributeFilters[s];if(!l||o(l,i))if("id"===s)t.push(`#${i}`);else{const e="name"===s||"placeholder"===s?r:"";t.push(`${e}[${s}="${i}"]`)}})),e.classList.forEach((e=>{o(n.inferenceClassNameFilters,e)&&(e=e.replace(/:/g,"\\:").trim(),t.push(`.${e}`))})),t}(window.userflow||{}).__inferSelector=J;class ee{constructor(e,t,n){this.shadowRootSelectors=e,this.text=t,this.ctx=n,this.isVisibleCache=new Map,this.textCache=new Map}*query(e){const n=le(document.body,e,this.shadowRootSelectors);if(t("found",n),!n)return;const{text:o}=this;for(let r=0;r<n.length;r++){const e=n[r];if(o){let n=this.textCache.get(e);if(null==n&&(n=pe(e,o),this.textCache.set(e,n)),!n){t("skip, text mismatch",e);continue}}let s=this.isVisibleCache.get(e);null==s&&(s=Ae(e,this.ctx),this.isVisibleCache.set(e,s)),s?(t("yield",e),yield e):t("skip, not visible",e)}}}const te=5,ne=window.userflow||{};function oe(e){const n=performance.now();let o;$("userflow:findAllElements:start"),t.groupCollapsed("findAllElements",e);try{if(e.type===s.MANUAL)o=function(e){const n={minorVersion:null==e.minorVersion?1:e.minorVersion};let{css:o,text:s,elementType:i,offset:l}=e;s=s&&he(s);const a="nearSelector"in e?e.nearSelector:null;t("findAllElementsManual",e),null!=l&&null!=a&&console.warn("Userflow.js: Both selector.offset and selector.nearSelector was set; ignoring nearSelector.");let c;if(s&&!o){if(c=[],n.minorVersion>=2)for(const e of Fe())ie(e,s,c);else ie(document.body,s,c);t("els after traverseElementForText",c)}else if(o){if(n.minorVersion>=2){c=[];for(const e of Fe()){const t=le(e,o);t&&t.length>0&&c.push(...t)}}else c=Array.from(le(document.body,o)||[]);t("els after safeQueryAll",c),s&&(c=function(e,t){const n=[];for(let o=e.length-1;o>=0;o--){const r=e[o];n.some((e=>e.contains(r)))||pe(r,t)&&n.push(r)}return n.reverse()}(c,s),t("els after filterElementsByText",c))}else console.warn("Userflow.js: findAllElements() requires least one of `css` and `text` to be set."),c=[];c.length>0&&(c=c.filter((e=>Ae(e,n))),t("els after isVisible",c));c.length>0&&i===r.INPUT&&(c=function(e,n){const o=new Set,r=new Q(n),s=ve();for(const i of e){if(i.matches(s)){o.add(i);continue}let e=null,n=null;r.getAllInputs().forEach((o=>{const s=r.calcScore(i,o);t("input",s,o),0!==s&&(e&&n&&s<=n||(t("input is best so far"),e=o,n=s))})),e&&(t("best input was",e),o.add(e))}return Array.from(o)}(c,n),t("els after mapElementsToInputs",c));c.length>0&&(c.sort(((e,t)=>{const n=ke(e),o=ke(t);return n.top<o.top?-1:n.top>o.top?1:n.left-o.left})),t("els after sort",c));if(c.length>0)if(null!=l)c=c[l]?[c[l]]:[],t("els after offset",c);else if(null!=a){const e=oe(a);let n=null,o=0;for(const t of c)for(const r of e){const e=V(ke(t),ke(r));(!n||e<o)&&(n=t,o=e)}c=n?[n]:[],t("els after nearSelector",c)}return c}(e);else if(e.autoData){const n=JSON.parse(e.autoData);let r;if("v1"!==n.version)throw new E(n.version,"Unknown autoData version: "+n.version);r=function(e,n){const{text:o,excludeText:r,precision:s}=e,i={minorVersion:n.minorVersion||0},l=null!=o&&!r,a=l?n.textGroups:n.notextGroups,c=Math.max(1,Math.min(a.length,Math.ceil((1-parseFloat(s||"1"))*a.length))),u=new ee(n.shadowRootSelectors,l&&o||null,i);t("findElementAutoV1",{text:o,excludeText:r,precision:s,groups:a,groupCount:c});for(let f=0;f<c;f++){const e=a[f];let n=new Map,o=0,r=null;t.group(`group cardinality=${e.cardinality}`,e);try{for(let s=0;s<e.cssSelectors.length;s++){const{css:i,offset:l}=e.cssSelectors[s];t(`css=${i}, offset=${l}`);let a=u.query(i),c=null;for(let e=0;e<=l;e++){const e=a.next();if(e.done)break;c=e.value}if(!c)continue;const f=(n.get(c)||0)+1;if(n.set(c,f),t(`el with frequency=${f}`+(f>o&&c!==r?" NEW BEST":""),c),f>o&&(o=f,r=c,f>=Math.ceil(e.cssSelectors.length/2)))return t("early winner",r),r}}finally{t.groupEnd()}if(r)return t("winner",r),r}return t("element not found"),null}(e,n),o=r?[r]:[]}else o=[]}catch(i){console.error("Userflow findElement error:",i),o=[]}return t("time",performance.now()-n),t.groupEnd(),$("userflow:findAllElements:end"),j("userflow:findAllElements","userflow:findAllElements:start","userflow:findAllElements:end"),o}function re(e){return oe(e)[0]||null}function se(e,n){const o=performance.now();let r;$("userflow:elementMatchesSelector:start"),t.groupCollapsed("elementMatchesSelector",e,n);try{if(n.type===s.MANUAL)r=function(e,t){null!=t.offset&&console.warn("Userflow.js: selector.offset is not supported for elementMatchesSelector yet");"nearSelector"in t&&null!=t.nearSelector&&console.warn("Userflow.js: selector.nearSelector is not supported for elementMatchesSelector yet");let{css:n,text:o}=t;o=o&&he(o);let r=!1,s=e;for(;s&&"BODY"!==s.tagName;){if((!n||s.matches(n))&&(!o||pe(s,o))){r=!0;break}s=s.parentElement}return r}(e,n);else{const t=re(n);r=null!=t&&t.contains(e)}}catch(i){console.error("Userflow findElement error:",i),r=!1}return t(r?"match":"not match"),t("time",performance.now()-o),t.groupEnd(),$("userflow:elementMatchesSelector:end"),j("userflow:elementMatchesSelector","userflow:elementMatchesSelector:start","userflow:elementMatchesSelector:end"),r}function ie(e,t,n){if(_e(e)){const{tagName:t}=e;if("SCRIPT"===t||"STYLE"===t)return!1}let o=!1;for(let r=0;r<e.children.length;r++)ie(e.children[r],t,n)&&(o=!0);return!o&&_e(e)&&pe(e,t)&&(n.push(e),o=!0),o}function le(e,t,n){try{if(null==n)return e.querySelectorAll(t);return ae(t,n,0,e)}catch(o){return console.info("Userflow.js: Invalid CSS selector: ",t),null}}function ae(e,t,n,o){if(n>=t.length)return Array.from(o.querySelectorAll(e));const r=t[n],s=o.querySelectorAll(r),i=[];return s.forEach((o=>{let r;if(o.shadowRoot)r=o.shadowRoot;else{if(!Me(o))return;let e=null;try{e=o.contentDocument}catch(s){}if(!e)return;r=e.body}i.push(...ae(e,t,n+1,r))})),i}const ce={email:!0,number:!0,password:!0,search:!0,tel:!0,text:!0,url:!0},ue={date:!0,"datetime-local":!0,month:!0,time:!0,week:!0},fe={button:!0,email:!0,reset:!0,search:!0,submit:!0,tel:!0,text:!0,url:!0};function de(e){let t=e.innerText;return void 0===t&&"SELECT"!==e.tagName&&(t=e.textContent),t=he(t),t||null}function me(e){if(Ee(e)||ge(e)){const t=he(e.getAttribute("placeholder")),n=e.value||"";if(t&&!n)return t;const o=he(n);if(o&&function(e){if(ge(e))return!0;const t=(e.getAttribute("type")||"").toLowerCase();return fe[t]}(e))return o}if(ye(e)&&e.selectedIndex>=0){const t=he(e.options[e.selectedIndex].text);if(t)return t}return de(e)}function pe(e,t){const n=me(e);return!!n&&function(e,t){const n=e.toLowerCase();if(t.toLowerCase()===n)return!0;return!1}(t,n)}function he(e){return e?e.length>250?null:e.replace(/^[\s\uFEFF\xA0\u200B*]+|[\s\uFEFF\xA0\u200B*]+$/g,"").replace(/\s+/g," "):null}function we(e){for(const{cssSelector:o,getValue:r}of n.customInputs)if(e.matches(o)){if(!r)return me(e)||"";try{return(r(e)||"").trim()}catch(t){return console.error(`Userflow.js: getValue function for custom input '${o}' failed:`,t),""}}return ye(e)?-1==e.selectedIndex?"":e.options[e.selectedIndex].text:be(e)?me(e)||"":e.value}function ve(){return"input, select, textarea, [contenteditable]"+n.customInputs.map((({cssSelector:e})=>`, ${e}`)).join("")}function Ee(e){if("INPUT"!==e.tagName)return!1;const t=e.getAttribute("type");return null==t||!0===ce[(t||"").toLowerCase()]}function ge(e){return"TEXTAREA"===e.tagName}function ye(e){return"SELECT"===e.tagName}function be(e){return"hasAttribute"in e&&e.hasAttribute("contenteditable")}function Te(e){return!!be(e)||!!n.customInputs.some((({cssSelector:t})=>e.matches(t)))}function Se(e){return Ee(e)||function(e){if("INPUT"!==e.tagName)return!1;const t=(e.getAttribute("type")||"").toLowerCase();return!0===ue[t]}(e)||ge(e)||ye(e)||Te(e)}function Ae(e,n){const o=ke(e);let r=e,s=!0,i=!1,l=!1,a=!1,c=!1;for(;r;){const u=r===document.body,f="BODY"===r.tagName,d=window.getComputedStyle(r);let m=null;if(s){if(d.visibility&&"visible"!==d.visibility)return t("not visible because visibility is",d.visibility,e,{cur:r}),!1;s=!1}if("none"===d.display)return t("not visible because display is",d.display,e,{cur:r}),!1;if(null!=d.opacity&&parseFloat(d.opacity)<.01)return t("not visible because opacity is",d.opacity,e,{cur:r}),!1;if("absolute"===d.position?a=!0:"relative"!==d.position&&"fixed"!==d.position&&"sticky"!==d.position||(a=!1),n.minorVersion>=4&&!i&&!f&&(!c||"static"!==d.position)&&(Le(d.overflowX)||Le(d.overflowY))&&(m=m||ke(r),0===m.width||0===m.height))return t("not visible because width/height (v1.4 check) is",m.width,m.height,e,{cur:r}),!1;if(!l&&Ne(d.display)&&(n.minorVersion<1||f||"static"!==d.position)){const s=f||Le(d.overflow),i=s||Le(d.overflowX),c=s||Le(d.overflowY),{scrollLeft:u,scrollTop:p}=f?r.ownerDocument.documentElement:r,h=!f&&!a;if(i){if(m=m||ke(r),h&&0===m.width)return t("not visible because width is",m.width,e,{cur:r}),!1;const s=n.minorVersion>=5?o.width/2:0,i=Math.round(o.left+s),l=Math.round(m.left-u);if(i<l)return t("not visible because it's clipped left",e,{elX:i,curLeft:l,cur:r}),!1}if(c){if(m=m||ke(r),h&&0===m.height)return t("not visible because height is",m.height,e,{cur:r}),!1;const s=n.minorVersion>=5?o.height/2:0,i=Math.round(o.top+s),l=Math.round(m.top-p);if(i<l)return t("not visible because it's clipped top",e,{elY:i,curTop:l,cur:r}),!1}(i||c)&&(l=!0)}if("fixed"===d.position&&(i=!0,l=!0),n.minorVersion>=3&&(r.scrollTop>0||r.scrollLeft>0)&&(l=!0),u)break;f?(r=Ce(r),s=!0):r=r.parentElement,c=a}return!0}function Le(e){return"hidden"===e||"clip"===e||"scroll"===e||"auto"===e}function Ne(e){return!e||!e.includes("inline")&&"contents"!==e}function xe(e){let t=e.parentNode,n=!1;for(;t&&"BODY"!==t.tagName;){Ie(t)&&(t=t.host);const o=window.getComputedStyle(t);if("absolute"===o.position?n=!0:"relative"!==o.position&&"fixed"!==o.position&&"sticky"!==o.position||(n=!1),!n&&Ne(o.display)&&(Le(o.overflow)||Le(o.overflowY)))return t;if("fixed"===o.position)return e.ownerDocument.documentElement;t=t.parentNode}return e.ownerDocument.documentElement}function ke(e){if("HTML"===e.tagName){const t=Ce(e);if(t)return ke(t)}let t=e.getBoundingClientRect(),n=e;for(;n&&(n=Ce(n),n);){const e=n.getBoundingClientRect();t={width:t.width,height:t.height,left:t.left+e.left,right:t.right+e.left,top:t.top+e.top,bottom:t.bottom+e.top}}return t}const De=new WeakSet;function Ce(e){const t=e.ownerDocument?.defaultView;if(!t)return null;if(De.has(t))return null;{const e=t.frameElement;return e||De.add(t),e}}function Ie(e){return"object"==typeof e&&null!=e&&"nodeType"in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&"host"in e&&"mode"in e}function _e(e){return"object"==typeof e&&null!=e&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function Me(e){return _e(e)&&"IFRAME"===e.tagName}ne.__findElement=re,ne.__findAllElements=oe,ne.__elementMatchesSelector=se,ne.__getElementText=me,ne.__getInputValue=we;const Ue=new Set,Re=new Map,Oe=new Set;function Fe(){return je(),Ue}function Ve(e,t){je();for(const o of Ue)e(o);const n={setup:e,teardown:t};return Oe.add(n),()=>{Oe.delete(n);for(const e of Ue)t(e)}}let Be=!1,$e=null;function je(){if(qe(),!Be){t("roots started"),Be=!0,$e=document.body,Ye($e);for(const e of i)document.addEventListener(e,Pe);window.setInterval(qe,1e4)}}function Pe(){$e&&!document.contains($e)&&(t("roots detected new Turbo body"),Ge($e),$e=document.body,Ye($e))}function qe(){for(const e of Ue)Ie(e)&&(We(e)||(t("roots clean before removeRoot",e),Ge(e)));t("roots clean finished, remaining=",Ue.size)}function We(e){if(!e.ownerDocument.defaultView)return!1;let t=e.host;for(;t;){if(Ie(t)&&(t=t.host),_e(t)&&"BODY"===t.tagName)return!0;t=t.parentNode}return!1}function Ye(e){if(!Ue.has(e)){t("roots addRoot",e),Ue.add(e),function(e){let t;const n=()=>{ze(e)},o=new O((()=>{window.cancelAnimationFrame(t),t=window.requestAnimationFrame(n)}));o.observe(e,{childList:!0,subtree:!0}),Re.set(e,o)}(e),ze(e),function(e){const n=e.ownerDocument.defaultView;if(n.__userflowAttachShadowInstalled)return;n.__userflowAttachShadowInstalled=!0;const o=n.Element.prototype.attachShadow;null!=o&&(n.Element.prototype.attachShadow=function(e){const n=o.call(this,e);return this.shadowRoot&&(t("roots monitorShadowDom before addRoot",this,this.shadowRoot),Ye(this.shadowRoot)),n})}(e),function(e){const n=e=>{e.childNodes.forEach((e=>{_e(e)&&e.shadowRoot&&(t("roots queryShadowDom before addRoot",e,e.shadowRoot),Ye(e.shadowRoot)),n(e)}))};n(e)}(e);for(const{setup:t}of Oe)t(e)}}function Ge(e){if(Ue.has(e)){t("roots removeRoot",e),Re.get(e)?.disconnect(),Re.delete(e),Ue.delete(e);for(const{teardown:t}of Oe)t(e)}}function ze(e){const t=_e(e)?e.ownerDocument.getElementsByTagName("iframe"):e.querySelectorAll("iframe");for(const n of t)Ze(n)}const Xe=new WeakSet;function Ze(e){if(Xe.has(e))return;if(e.closest("#userflow-ui"))return;e.addEventListener("load",He);const n=e.contentWindow,o=e.contentDocument;if(!n||!o)return void Xe.add(e);const r=o.body;r&&(n.addEventListener("pagehide",Qe),t("roots setupFrame before addRoot",e,o,r),Ye(r))}function He(e){const t=e.target;t&&Me(t)&&Ze(t)}function Qe(e){const n=e.currentTarget.document.body;t("roots onFrameUnload before removeRoot",n),Ge(n)}function Je(e,t={}){let n,o;const r=()=>{o=void 0,e()},s=()=>{if(window.clearTimeout(n),null==o)o=Date.now();else if(Date.now()-o>1e3)return void r();n=window.setTimeout(r,50)},i=e=>{const t=e.target;if(!t||!Ke(t))return;const n=document.getElementById("userflow-ui");n&&n.contains(t)||s()},l=new O((e=>{(function(e){const t=document.getElementById("userflow-ui");for(const n of e){const{target:e}=n;if(Ke(e)&&(t&&t.contains(e)))return!0}return!1})(e)||s()})),a=Ve((e=>{l.observe(e,{attributes:!0,subtree:!0,childList:!0,characterData:!0}),e.addEventListener("animationend",i),e.addEventListener("transitionend",i),t.observeInput&&(e.addEventListener("input",s),e.addEventListener("keypress",s),e.addEventListener("change",s))}),(e=>{e.removeEventListener("animationend",i),e.removeEventListener("transitionend",i),t.observeInput&&(e.removeEventListener("input",s),e.removeEventListener("keypress",s),e.removeEventListener("change",s))}));return{disconnect:()=>{window.clearTimeout(n),l.disconnect(),a()}}}function Ke(e){return e.nodeType===Node.ELEMENT_NODE}const et={[l.ALWAYS_TRUE]:{track:({callback:e})=>(e(!0),()=>{})},[l.ATTRIBUTE]:{track:({sessionData:e,condition:t,callback:n})=>{const o=()=>{let o=!1;if(e&&t.operator){const n=e.value.find((e=>e.name===t.attributeName)),r=n?n.value:null;o=k[t.operator].compare({sessionData:e.value,condition:t,value:r})}n(o)};o();const r=e.observe(o);return()=>{r()}}},[l.CLAUSE]:{isExpensive:e=>{for(const t of e.conditions){const e=et[t.type];if(e.isExpensive&&e.isExpensive(t))return!0}return!1},track:({sessionData:t,condition:n,flipBackEvents:o,callback:r,description:s})=>{let i,l,a=null;const c=n.conditions.map((e=>{const t=et[e.type];return{condition:e,typeDef:t,expensive:!!t.isExpensive&&t.isExpensive(e),active:!1,isTrue:null}})),u=e=>{for(const n of c){const r=!o||!n.expensive||e;r&&!n.active?(n.active=!0,n.isTrue=!1,n.untrack=n.typeDef.track({sessionData:t,condition:n.condition,flipBackEvents:o,callback:(e,t={})=>{n.isTrue=e,window.clearTimeout(i),t.immediate?f({immediate:!0}):i=window.setTimeout(f,0)},description:s})):!r&&n.active&&(n.untrack&&n.untrack(),n.active=!1,n.isTrue=null,n.untrack=void 0)}},f=(t={})=>{if(0===c.length)return void d(!1,t);let o,r;if(n.operator===e.AND){o=!0,r=!0;for(const e of c)!1===e.isTrue?(o=!1,e.expensive||(r=!1)):!1!==o&&null===e.isTrue&&(o=null)}else{o=!1,r=!0;for(const e of c)!0===e.isTrue?(o=!0,e.expensive||(r=!1)):!0!==o&&null===e.isTrue&&(o=null)}null!==o&&o!==a&&(a=o,d(o,t)),u(r)},d=(e,t)=>{if(e&&null!=n.waitTime&&"0"!=n.waitTime){if(!l){const e=1e3*parseFloat(n.waitTime);l=window.setTimeout((()=>{r(!0,{})}),e)}}else window.clearTimeout(l),l=void 0,r(e,t)};return u(!1),f(),()=>{window.clearTimeout(i),window.clearTimeout(l);for(const e of c)e.untrack&&e.untrack()}}},[l.ELEMENT]:{isExpensive:()=>!0,track:e=>{const{elementState:t}=e.condition;if(!t)return()=>{};const n=function(e){switch(e){case f.CLICK:return{kind:"event",eventName:"click",valueWhenOccurred:!0};case f.DISABLED:return{kind:"observer",checkElement:e=>!!e&&e.disabled};case f.MOUSEDOWN:return{kind:"event",eventName:"mousedown",valueWhenOccurred:!0};case f.NOT_CLICK:return{kind:"event",eventName:"click",valueWhenOccurred:!1};case f.NOT_DISABLED:return{kind:"observer",checkElement:e=>!!e&&!e.disabled};case f.NOT_PRESENT:return{kind:"observer",checkElement:e=>!e};case f.PRESENT:return{kind:"observer",checkElement:e=>!!e}}}(t);switch(n.kind){case"observer":return function({sessionData:e,condition:t,callback:n},o){const r=()=>{if(!t.elementState)return void console.warn("Userflow.js: ELEMENT_STATE condition missing elementState",t);if(!t.selector)return void console.warn("Userflow.js: ELEMENT_STATE condition missing selector",t);let r=!1;const s=oe(S(t.selector,e.value));if(s.length>0){for(const e of s)if(o(e)){r=!0;break}}else o(null)&&(r=!0);n(r)};r();const s=e.observe(r),{disconnect:i}=Je(r);return()=>{s(),i()}}(e,n.checkElement);case"event":return function({condition:e,flipBackEvents:t,callback:n},o,r){const{selector:s}=e;if(!s)return()=>{};let i;n(!r);const l=e=>{const o=e.target;o&&se(o,s)&&(t?(n(r,{immediate:!0}),n(!r,{immediate:!0})):n(r))},a={capture:!0},c=Ve((e=>e.addEventListener(o,l,a)),(e=>e.removeEventListener(o,l,a)));return()=>{c(),window.clearTimeout(i)}}(e,n.eventName,n.valueWhenOccurred)}}},[l.FILLED_IN_INPUT]:{isExpensive:()=>!0,track:({sessionData:e,condition:t,callback:n})=>{let o,r=null;const s=()=>{if(!t.selector)return void console.warn("Userflow.js: INPUT_VALUE condition missing selector",t);const s=oe(S(t.selector,e.value));let i=null;for(const e of s){const t=we(e);if(t){i=t;break}}i?i!=r&&(window.clearTimeout(o),o=window.setTimeout((()=>{n(!0)}),1e3)):(n(!1),window.clearTimeout(o)),r=i};s();const i=e.observe(s),{disconnect:l}=Je(s,{observeInput:!0});return()=>{i(),l(),window.clearTimeout(o)}}},[l.FLOW]:{track:()=>(console.warn("Userflow.js: Flow conditions do not work client-side"),()=>{})},[l.INPUT_VALUE]:{isExpensive:()=>!0,track:({sessionData:e,condition:t,callback:n})=>{const o=()=>{if(!t.operator)return void console.warn("Userflow.js: INPUT_VALUE condition missing operator",t);if(!t.selector)return void console.warn("Userflow.js: INPUT_VALUE condition missing selector",t);let o=!1;const r=k[t.operator],s=oe(S(t.selector,e.value));if(s.length>0)for(const n of s){const s=we(n);if(r.compare({sessionData:e.value,condition:t,value:s})){o=!0;break}}else r.compare({sessionData:e.value,condition:t,value:""})&&(o=!0);n(o)};o();const r=e.observe(o),{disconnect:s}=Je(o,{observeInput:!0});return()=>{r(),s()}}},[l.PAGE]:{track:({sessionData:e,condition:t,callback:n})=>{const o=()=>{let o=!1;if(t.operator){const n=a();o=k[t.operator].compare({sessionData:e.value,condition:t,value:n})}n(o)};let r=a();const s=()=>{const e=a();e!==r&&(r=e,o())};c(s),o();const i=e.observe(o);return()=>{i(),u(s)}}},[l.SEGMENT]:{track:({description:e,callback:t})=>(console.error("Userflow.js: Segment conditions are not supported in "+(e||"unknown content item")+"."),t(!1),()=>{})},[l.TIME]:{track:({condition:e,callback:t})=>{let n=null;const o=e.value?new Date(e.value):null,r=e.value2?new Date(e.value2):null,s=()=>{let e=!0;(o&&!isNaN(o.valueOf())&&Date.now()<o.valueOf()||r&&!isNaN(r.valueOf())&&Date.now()>=r.valueOf())&&(e=!1),e!==n&&(n=e,t(e))};s();const i=window.setInterval(s,1e4);return()=>{window.clearInterval(i)}}}};var tt=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",conditionTypes:et});export{O as M,E as U,z as a,b,et as c,y as d,_e as e,Z as f,G as g,re as h,T as i,xe as j,Y as k,W as l,Ve as m,Ie as n,Je as o,Ce as p,J as q,ke as r,X as s,S as t,Me as u,tt as v,P as z};
2
2
  //# sourceMappingURL=flow-condition-types.js.map
package/hash.txt CHANGED
@@ -1 +1 @@
1
- 6f2a1e0ca0c53c604a4fcc716168697487d08687
1
+ 7f8df08ce8355c42523971f68213050f81f02c3d
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "userflow.js-self-hosted",
3
- "version": "0.1.1007691",
3
+ "version": "0.1.1007772",
4
4
  "description": "Self-hosted version of Userflow.js",
5
5
  "main": "userflow.js"
6
6
  }
package/userflow.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="f2f5131d-1ff4-43d2-9a96-4a11a0cbaf47",e._sentryDebugIdIdentifier="sentry-dbid-f2f5131d-1ff4-43d2-9a96-4a11a0cbaf47")}catch(s){}}();import{S as e}from"./vendor.phoenix.js";import"./vendor.react.js";import{v as t}from"./vendor.uuid.js";import"./vendor.object-assign.js";let s;const i={},n=function(e,t){if(!t)return e();if(void 0===s){const e=document.createElement("link").relList;s=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in i)return;i[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":s,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};class o extends Error{constructor(e,t,s){super(e),Object.setPrototypeOf(this,o.prototype),this.name="UserflowError",this.code=t,this.humanMessage=s}}class r{constructor(e){this.type=e,this.testState={}}formatKey(e){return`userflow:${e}`}isSupported(){if("undefined"==typeof window)return!1;try{return null!=window[this.type]}catch{return!1}}getItem(e){return e=this.formatKey(e),this.isSupported()?window[this.type].getItem(e):null}setItem(e,t){e=this.formatKey(e),this.isSupported()&&window[this.type].setItem(e,t)}removeItem(e){if(e=this.formatKey(e),this.isSupported())return window[this.type].removeItem(e)}clear(){if(this.isSupported())return window[this.type].clear()}}const a=new r("localStorage"),c=new r("sessionStorage");function l(e){window.location.href=e}function d(){return window.location.href}var h,u,E;function T(e){window.postMessage(e,window.origin)}function f(e){const t=t=>{if(t.source!==window||t.origin!==window.origin)return;const i=t.data;i&&"object"==typeof i&&"string"==typeof i.kind&&i.kind.startsWith("userflow:")&&!0===e(i)&&s()};window.addEventListener("message",t);const s=()=>window.removeEventListener("message",t);return s}(h||(h={})).INPUT="INPUT",(E=u||(u={})).AUTO="AUTO",E.MANUAL="MANUAL";const S=new Set;let w=!1;function p(e){return function(){if(w)return;w=!0;const{history:e}=window,t=t=>{const s=e[t];e[t]=(...t)=>{const i=s.apply(e,t);return I(),i}};window.__userflowStatePatched?(window.addEventListener("userflow:pushstate",(()=>{I()})),window.addEventListener("userflow:replacestate",(()=>{I()}))):(t("pushState"),t("replaceState"));window.addEventListener("popstate",(()=>{I()}))}(),S.add(e),()=>{g(e)}}function g(e){S.delete(e)}function I(){S.forEach((e=>e()))}class C{destroy(){this.unregisterOnMessage&&this.unregisterOnMessage()}postBuilderMessage(e){T({kind:"userflow:crxSendProxyMessage",direction:"targetToBuilder",message:e})}onBuilderMessage(e){return this.unregisterOnMessage=f(e),!1}async captureScreenshot(e,t,s,i){T({kind:"userflow:crxScreenshot",x:e,y:t,width:s,height:i,devicePixelRatio:window.devicePixelRatio});var n;return(await(n=e=>"userflow:crxScreenshotResult"===e.kind?e:null,new Promise((e=>{f((t=>{const s=n(t);return!!s&&(e(s),!0)}))})))).imageDataUrl}}var m,k,A,U,L,R,N,v,y,O,_,b,D,M,F,B,P,x,H,G,W,$,V,j,K,z,Y,J,X,Z,Q,q,ee,te,se,ie,ne,oe,re,ae,ce,le,de,he,ue,Ee,Te,fe,Se,we,pe,ge,Ie,Ce,me,ke,Ae,Ue,Le,Re,Ne,ve,ye,Oe,_e,be,De,Me,Fe,Be,Pe,xe,He,Ge,We,$e,Ve,je,Ke,ze,Ye,Je,Xe,Ze,Qe,qe;(k=m||(m={})).ACTION="ACTION",k.LAUNCHER_DEACTIVATED="LAUNCHER_DEACTIVATED",k.REPLACED="REPLACED",k.SNOOZED="SNOOZED",k.TOOLTIP_TARGET_MISSING="TOOLTIP_TARGET_MISSING",k.USERFLOWJS="USERFLOWJS",k.USER_CLOSED="USER_CLOSED",(U=A||(A={})).SECOND="SECOND",U.MINUTE="MINUTE",U.HOUR="HOUR",U.DAY="DAY",(R=L||(L={})).ACTION="ACTION",R.DRAFT="DRAFT",R.LINK="LINK",R.LAUNCHER_SEEN="LAUNCHER_SEEN",R.RESOURCE_CENTER="RESOURCE_CENTER",R.USERFLOWJS="USERFLOWJS",(v=N||(N={})).LIKE="LIKE",v.DISLIKE="DISLIKE",(O=y||(y={})).STRING="STRING",O.BOOLEAN="BOOLEAN",O.NUMBER="NUMBER",O.DATETIME="DATETIME",O.LIST="LIST",O.RANDOM_AB="RANDOM_AB",O.RANDOM_NUMBER="RANDOM_NUMBER",(b=_||(_={})).FLOW="FLOW",b.BANNER="BANNER",b.CHECKLIST="CHECKLIST",b.LAUNCHER="LAUNCHER",b.RESOURCE_CENTER="RESOURCE_CENTER",(M=D||(D={})).ALWAYS_TRUE="ALWAYS_TRUE",M.ATTRIBUTE="ATTRIBUTE",M.CLAUSE="CLAUSE",M.ELEMENT="ELEMENT",M.FILLED_IN_INPUT="FILLED_IN_INPUT",M.FLOW="FLOW",M.INPUT_VALUE="INPUT_VALUE",M.PAGE="PAGE",M.SEGMENT="SEGMENT",M.TIME="TIME",function(e){e.AUTO="AUTO",e.MANUAL="MANUAL"}(F||(F={})),(B||(B={})).INPUT="INPUT",(x=P||(P={})).ABSOLUTE_EQ="ABSOLUTE_EQ",x.ABSOLUTE_GT="ABSOLUTE_GT",x.ABSOLUTE_LT="ABSOLUTE_LT",x.AND="AND",x.BETWEEN="BETWEEN",x.CONTAINS="CONTAINS",x.EMPTY="EMPTY",x.ENDS_WITH="ENDS_WITH",x.EQ="EQ",x.EXCLUDES_ALL="EXCLUDES_ALL",x.EXCLUDES_ANY="EXCLUDES_ANY",x.FALSE="FALSE",x.GT="GT",x.GTE="GTE",x.INCLUDES_ALL="INCLUDES_ALL",x.INCLUDES_ANY="INCLUDES_ANY",x.LT="LT",x.LTE="LTE",x.NE="NE",x.NOT_CONTAINS="NOT_CONTAINS",x.NOT_EMPTY="NOT_EMPTY",x.NOT_REGEX="NOT_REGEX",x.OR="OR",x.REGEX="REGEX",x.RELATIVE_EQ="RELATIVE_EQ",x.RELATIVE_GT="RELATIVE_GT",x.RELATIVE_LT="RELATIVE_LT",x.STARTS_WITH="STARTS_WITH",x.TRUE="TRUE",x.URL="URL",(G=H||(H={})).CLICK="CLICK",G.DISABLED="DISABLED",G.MOUSEDOWN="MOUSEDOWN",G.NOT_CLICK="NOT_CLICK",G.NOT_DISABLED="NOT_DISABLED",G.NOT_PRESENT="NOT_PRESENT",G.PRESENT="PRESENT",($=W||(W={})).ASSET="ASSET",$.CARTOON="CARTOON",$.NONE="NONE",$.URL="URL",(j=V||(V={})).INSIDE="INSIDE",j.OUTSIDE="OUTSIDE",(z=K||(K={})).TOP_LEFT="TOP_LEFT",z.TOP_CENTER="TOP_CENTER",z.TOP_RIGHT="TOP_RIGHT",z.BOTTOM_RIGHT="BOTTOM_RIGHT",z.BOTTOM_CENTER="BOTTOM_CENTER",z.BOTTOM_LEFT="BOTTOM_LEFT",z.CENTER="CENTER",(J=Y||(Y={})).GOOGLE="GOOGLE",J.STANDARD="STANDARD",(Z=X||(X={})).DISMISS_FIRST_MENU_AFTER="DISMISS_FIRST_MENU_AFTER",Z.DISMISS="DISMISS",(q=Q||(Q={})).DISMISS="DISMISS",q.NONE="NONE",(te=ee||(ee={})).DEFAULT="DEFAULT",te.PLAINTEXT="PLAINTEXT",te.CUSTOM="CUSTOM",(ie=se||(se={})).CHECKLIST_OVERRIDE="CHECKLIST_OVERRIDE",ie.RESOURCE_CENTER_ONLY="RESOURCE_CENTER_ONLY",ie.NONE="NONE",(oe=ne||(ne={})).BUBBLE="BUBBLE",oe.END="END",oe.ERROR="ERROR",oe.FLAG="FLAG",(ae=re||(re={})).MANUAL="MANUAL",ae.NONE="NONE",ae.SYNTHETIC="SYNTHETIC",(le=ce||(ce={})).BUBBLE="BUBBLE",le.HIDDEN="HIDDEN",le.MODAL="MODAL",le.TOOLTIP="TOOLTIP",(he=de||(de={})).ABOVE="ABOVE",he.BELOW="BELOW",he.LEFT="LEFT",he.RIGHT="RIGHT",(Ee=ue||(ue={})).CLOSE_FLOW="CLOSE_FLOW",Ee.EVAL_JS="EVAL_JS",Ee.GO_TO_STEP="GO_TO_STEP",Ee.NAVIGATE="NAVIGATE",Ee.SET_ATTRIBUTE="SET_ATTRIBUTE",Ee.SNOOZE="SNOOZE",Ee.START_FLOW="START_FLOW",(fe=Te||(Te={})).NEW_TAB="NEW_TAB",fe.SAME_TAB="SAME_TAB",(we=Se||(Se={})).SET="SET",we.SET_DATETIME="SET_DATETIME",we.SET_DATETIME_ONCE="SET_DATETIME_ONCE",we.SET_ONCE="SET_ONCE",we.ADD="ADD",we.SUBTRACT="SUBTRACT",we.APPEND="APPEND",we.PREPEND="PREPEND",we.REMOVE="REMOVE",we.UNSET="UNSET",(ge=pe||(pe={})).MULTILINE_TEXT="MULTILINE_TEXT",ge.MULTIPLE_CHOICE="MULTIPLE_CHOICE",ge.NPS="NPS",ge.SCALE="SCALE",ge.STARS="STARS",ge.TEXT="TEXT",(Ce=Ie||(Ie={})).ACTION="ACTION",Ce.ANNOUNCEMENTS="ANNOUNCEMENTS",Ce.ASSISTANT="ASSISTANT",Ce.CHECKLIST="CHECKLIST",Ce.CONTACT="CONTACT",Ce.DIVIDER="DIVIDER",Ce.FLOWS="FLOWS",Ce.KNOWLEDGE_BASE="KNOWLEDGE_BASE",Ce.MESSAGE="MESSAGE",Ce.SUBPAGE="SUBPAGE",(ke=me||(me={})).CRISP="CRISP",ke.CUSTOM="CUSTOM",ke.FRESHCHAT="FRESHCHAT",ke.HELPSCOUT="HELPSCOUT",ke.HUBSPOT="HUBSPOT",ke.INTERCOM="INTERCOM",ke.ZENDESK="ZENDESK",ke.ZENDESK_MESSENGER="ZENDESK_MESSENGER",(Ue=Ae||(Ae={})).BUTTON="BUTTON",Ue.INPUT="INPUT",(Re=Le||(Le={})).EMAIL="EMAIL",Re.PHONE="PHONE",Re.CHAT="CHAT",(ve=Ne||(Ne={})).SILENT="SILENT",ve.BADGE="BADGE",ve.POPOUT="POPOUT",(Oe=ye||(ye={})).LAUNCHER_CLICK="LAUNCHER_CLICK",Oe.LAUNCHER_HOVER="LAUNCHER_HOVER",Oe.TARGET_CLICK="TARGET_CLICK",Oe.TARGET_HOVER="TARGET_HOVER",Oe.LAUNCHER_TARGET_CLICK="LAUNCHER_TARGET_CLICK",Oe.LAUNCHER_TARGET_HOVER="LAUNCHER_TARGET_HOVER",(be=_e||(_e={})).ACTIVATE="ACTIVATE",be.DEACTIVATE="DEACTIVATE",be.NEVER="NEVER",(Me=De||(De={})).AUTO="AUTO",Me.TOP="TOP",Me.RIGHT="RIGHT",Me.BOTTOM="BOTTOM",Me.LEFT="LEFT",(Be=Fe||(Fe={})).START="START",Be.CENTER="CENTER",Be.END="END",(xe=Pe||(Pe={})).PERCENT="PERCENT",xe.PX="PX",(Ge=He||(He={})).BEACON="BEACON",Ge.BUTTON="BUTTON",Ge.HIDDEN="HIDDEN",Ge.ICON="ICON",($e=We||(We={})).LAUNCHER="LAUNCHER",$e.TARGET="TARGET",(je=Ve||(Ve={})).BODY_FIRST="BODY_FIRST",je.BODY_LAST="BODY_LAST",je.ELEMENT_FIRST="ELEMENT_FIRST",je.ELEMENT_LAST="ELEMENT_LAST",je.ELEMENT_BEFORE="ELEMENT_BEFORE",je.ELEMENT_AFTER="ELEMENT_AFTER",(ze=Ke||(Ke={})).START="START",ze.CENTER="CENTER",ze.SPACE_BETWEEN="SPACE_BETWEEN",(Je=Ye||(Ye={})).NONE="NONE",Je.LIKE="LIKE",Je.SCALE="SCALE",(Ze=Xe||(Xe={})).ACTIVE="ACTIVE",Ze.COMPLETED="COMPLETED",Ze.ENDED="ENDED",Ze.NOT_SEEN="NOT_SEEN",(qe=Qe||(Qe={})).HIGHLIGHT="HIGHLIGHT",qe.MODAL="MODAL",qe.HIGHLIGHT_MODAL="HIGHLIGHT_MODAL";const et={customInputs:[],customNavigate:null,urlFilter:null,linkUrlDecorator:null,customScrollIntoView:null,scrollPadding:null,inferenceAttributeNames:["data-for","data-id","data-testid","data-test-id","for","id","name","placeholder","role"],inferenceAttributeFilters:{id:[e=>!e.match(/\d$/)],"data-id":[e=>!e.match(/\d$/)]},inferenceClassNameFilters:[e=>!e.startsWith("css-")],baseZIndex:1234500,evalJsDisabled:!1};function tt(e){return Array.isArray(e)||(e=e?[e]:[]),e=e.map((e=>"string"==typeof e?new RegExp(e):e))}function st(e,t){return e.every((e=>"function"==typeof e?e(t):!(e instanceof RegExp)||e.test(t)))}function it(){let e=d();if(et.urlFilter){if(e=et.urlFilter(e),"string"!=typeof e)throw new o("Userflow.js: URL filter returned non-string value. Please check your userflow.setUrlFilter() implementation.");try{new URL(e)}catch(t){throw new o("Userflow.js: URL filter returned an invalid URL. Please check your userflow.setUrlFilter() implementation.\nReturned URL: "+e+"\nError message: "+t.message)}}return e}let nt="";try{nt=localStorage.getItem("debug")||""}catch(St){}const ot=nt.split(",").some((e=>"*"===e||e.startsWith("userflow:*"))),rt=ct("log");let at;function ct(e){return function(t,...s){if(ot){const i=performance.now(),n=at?Math.round(i-at):0;at=i,console[e](`%cuserflow %c${t} %c+${n}ms`,"color:#1a57e6;","","color:#1a57e6;",...s)}}}rt.group=ct("group"),rt.groupCollapsed=ct("groupCollapsed"),rt.groupEnd=function(){ot&&console.groupEnd()};const lt=()=>n((()=>import("./ResourceCenterApp.js").then((function(e){return e.R}))),[new URL("ResourceCenterApp.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("flow-host.styl.js",import.meta.url).toString(),new URL("bubble-frame.styl.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("use-window-resize.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("logomark.js",import.meta.url).toString(),new URL("ChecklistUI.js",import.meta.url).toString(),new URL("BubbleToolbar.js",import.meta.url).toString(),new URL("use-element-rect.js",import.meta.url).toString()]);function dt(e){const t=e.version.checklist.tasks.length;return Math.max(0,t-e.taskCompletions.length)}class ht{constructor(e){this.observers=new Set,this._value=e}get value(){return this._value}update(e){if(e!==this._value){this._value=e;for(const e of this.observers)e()}}observe(e){return this.observers.add(e),()=>this.observers.delete(e)}}const ut=["page:before-change","page:change","turbo:before-cache","turbo:load","turbo:visit","turbolinks:before-cache","turbolinks:load","turbolinks:visit"],Et=()=>n((()=>import("./BannerApp.js")),[new URL("BannerApp.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("bubble-frame.styl.js",import.meta.url).toString(),new URL("flow-host.styl.js",import.meta.url).toString(),new URL("use-selector-element-monitoring.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("use-window-resize.js",import.meta.url).toString(),new URL("use-element-rect.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString()]),Tt=import.meta.url;class ft{constructor(){this.clientToken=null,this.externalId=null,this.signature=null,this.groupId=null,this.groupSignature=null,this._socketStatus="disconnected",this.socket=null,this.channel=null,this.featureFlags=new Set,this.logrocketAppId=null,this.debounceInactiveDisconnectTimeout=void 0,this.inBatch=!1,this.endBatchTimeout=void 0,this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=0,this.clientClock=1,this.serverClock=1,this.flowSession=null,this.flowSessionClock=0,this.checklistSession=null,this.checklistExpanded=!1,this.checklistExpandPending=!1,this.checklistSessionClock=0,this.bannerSession=null,this.resourceCenterSession=null,this.resourceCenterOpen=!1,this.resourceCenterLauncherHidden=!1,this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.notificationIdCounter=0,this.sessionStorageState=null,this.clientContext=null,this.flushUrlChangeTimeout=void 0,this.onFirstIdentifyRun=!1,this.onFirstIdentifyTimeout=void 0,this.firstIdentifyCallback=null,this.ui=null,this.unackedTasks=new Set,this.clientConditions=new Map,this.trackers=new Map,this.conditionWaitTimers=new Map,this.listeners=new Map,this.targetEnv=null,this.idempotencyKeysSeen=new Set,this.testUserIdentified=!1,this.cspIssueReported=!1,this.uiDisabled=!1,this.audio=null,this.audioReady=!1,this.pageTrackingDisabled=!1,this.refCounter=1,this.onBuilderMessage=e=>(this.handleBuilderMessage(e),!1),this.handleBuilderMessage=async e=>{rt(`builder ${e.kind} message received`,e);const t="idempotencyKey"in e&&"string"==typeof e.idempotencyKey?e.idempotencyKey:null;if(t&&this.idempotencyKeysSeen.has(t))return;const s=()=>{t&&this.idempotencyKeysSeen.add(t)};switch(e.kind){case"userflow:selectElement":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:selectElementAck",idempotencyKey:e.idempotencyKey}),void this.setSessionStorageState((t=>({...t,isTargetTab:!0,activeApp:"elementSelection",elementSelection:{mode:"select",elementType:e.elementType}})));case"userflow:selectElementCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,elementSelection:null})));case"userflow:startFlowWithToken":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:startFlowWithTokenAck",idempotencyKey:e.idempotencyKey}),this.setSessionStorageState((e=>({...e,isTargetTab:!0,activeApp:null,testStartConditionToken:void 0}))),c.setItem("previewFlowId",e.flowId),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void(e.testStartCondition?this.setSessionStorageState((t=>({...t,activeApp:"startConditionTesting",testStartConditionToken:e.token}))):this.onceIdentified((()=>{if(this.startFlowWithToken(e.token),e.isResourceCenter){const t=()=>{const s=this.resourceCenterSession;s&&s.draftMode&&s.flow.id===e.flowId&&(this.openResourceCenter(),this.off("resourceCenterChanged",t))};this.on("resourceCenterChanged",t),t()}})));case"userflow:testTracker":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:testTrackerAck",idempotencyKey:e.idempotencyKey}),this.setSessionStorageState((e=>({...e,isTargetTab:!0}))),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.setSessionStorageState((t=>({...t,activeApp:"trackerTesting",trackerTesting:{trackerName:e.trackerName,token:e.token,events:0}})));case"userflow:testTrackerCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,trackerTesting:null})))}},this.onUrlChange=()=>{this.externalId&&(window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=window.setTimeout((()=>this.flushUrlChange()),50))},this.onUserActivity=()=>this.ensureConnected(),this.remountIfNecessary=()=>{this.ui?.container&&!document.contains(this.ui.container)&&(rt("remounting UI because container was missing"),this.remount())},rt("constructor, build=1007691"),p(this.onUrlChange),this.setTargetEnv(new C),this.checkTestUserAtBoot(),this.toggleUI();for(const e of ut)document.addEventListener(e,this.remountIfNecessary)}get socketStatus(){return this._socketStatus}destroy(){rt("destroy"),this.reset(),g(this.onUrlChange),this.destroyTargetEnv();for(const e of ut)document.removeEventListener(e,this.remountIfNecessary)}setTargetEnv(e){this.destroyTargetEnv(),this.targetEnv=e,e.onBuilderMessage(this.onBuilderMessage)}destroyTargetEnv(){this.targetEnv&&(this.targetEnv.destroy(),this.targetEnv=null)}getTargetEnv(){if(!this.targetEnv)throw new o("Userflow.js: Cannot call getTargetEnv when protocol is not set");return this.targetEnv}setSessionStorageState(e){const t=e(this.getSessionStorageState());c.setItem("userflowClientState",JSON.stringify(t)),this.sessionStorageState=t,this.toggleUI()}getSessionStorageState(){let e=this.sessionStorageState;if(!e){const t=c.getItem("userflowClientState");if(t)try{e=JSON.parse(t)}catch(St){console.error("Userflow.js: Parse ElementSelectionState error:",St)}e||(e={testUser:null,activeApp:null,elementSelection:null,trackerTesting:null}),this.sessionStorageState=e}return e}checkTestUserAtBoot(){const e=this.getSessionStorageState().testUser;e&&(rt("checkTestUserAtBoot identifying test user"),this.identifyTestUser(e))}async identifyTestUser(e){this.setSessionStorageState((t=>({...t,testUser:e}))),this.reset(),this.init(e.clientToken),this.testUserIdentified=!0,this.externalId=e.id;const t=[this.identify(e.id,{name:e.name,email:e.email,signed_up_at:{set_once:(new Date).toISOString(),data_type:"datetime"}},{signature:e.signature})],{group:s}=e;s&&(this.groupId=s.id,t.push(this.group(s.id,{name:s.name},{signature:s.signature}))),await Promise.all(t)}resetTestUser(){this.setSessionStorageState((e=>({...e,testUser:null})))}init(e){if(rt("init",e),!e)throw new o("userflow.init() was called but missing Userflow.js Token");this.clientToken!==e&&(this.testUserIdentified?rt("init() ignoring new token since a test user has been identified"):(this.clientToken&&(rt("init() resetting due to new client token"),this.reset()),this.clientToken=e))}ensureInit(){if(!this.clientToken)throw new o("You must call userflow.init() first")}ensureIdentified(){if(this.ensureInit(),!this.externalId)throw new o("You must call userflow.identify() first");return this.externalId}ensureGroup(){if(this.ensureIdentified(),!this.groupId)throw new o("You must call userflow.group() first");return this.groupId}ensureConnected(){if(!this.clientToken||!this.externalId)return;if(this.debounceInactiveDisconnect(),this.socket)return;this._socketStatus="connecting",rt("connecting to socket");let t=et.serverEndpoint||"e.userflow.com";"js.getuserflow.com"===new URL(Tt).hostname&&"e.userflow.com"===t&&(t="e.getuserflow.com");const s="wss://"+t+"/end-users/"+this.clientToken+"/socket";this.socket=new e(s,{reconnectAfterMs:e=>[100,500,1e3,5e3][e-1]||1e4,timeout:2e4}),this.socket.connect(),this.socket.onOpen((()=>{rt("socket opened")})),this.socket.onClose((()=>{this.emit("private:disconnect")})),this.socket.onError((e=>{console.log("Userflow.js socket error",e),this.reportCspIssue()})),this.channel=this.socket.channel(`end_users:${this.externalId}`,(()=>this.makeChannelJoinPayload())),this.channel.join().receive("ok",(e=>{this.logrocketAppId=e.logrocketAppId,this.featureFlags=new Set(e.featureFlags),rt("channel joined"),"connected"!==this._socketStatus&&(this._socketStatus="connected")})).receive("error",(e=>{["company_closed","invalid_client_token","invalid_user_external_id","incorrect_user_signature","rate_limit_exceeded","user_signature_required"].includes(e.code)?(console.error(`Userflow.js resetting due to: [${e.code}] ${e.message}`),this.reset(),this.clientToken=null):"invalid_protocol_version"===e.code?(console.error(`Userflow.js destroying due to: [${e.code}] ${e.message}`),this.destroy()):console.log("Userflow.js channel join error",e)})),this.channel.on("server_message",(e=>this.handleServerMessage(e))),this.channel.on("server_error",(e=>{console.log(`Userflow.js server error (${e.code}): ${e.message}`+(e.details&&e.details.length>0?"\nDetails:\n"+e.details.map((e=>(e.path?`${e.path}: `:"")+e.message)):""))}))}makeChannelJoinPayload(){const e=this.buildClientContext();this.clientContext=e;const t={protocolVersion:2,userflowClientBuild:"1007691",signature:this.signature,groupExternalId:this.groupId,groupSignature:this.groupSignature,flowSessionId:this.flowSession?.id||null,checklistSessionId:this.checklistSession?.id||null,bannerSessionId:this.bannerSession?.id||null,resourceCenterSessionId:this.resourceCenterSession?.id||null,launchers:this.launcherSessions.map((e=>({flowId:e.flow.id}))),trackers:Array.from(this.trackers.values()).map((e=>({flowId:e.tracker.flowId}))),hasDraftSession:this.hasDraftSession(),clientConditions:Array.from(this.clientConditions.values()).map((e=>({conditionId:e.condition.id,isTrue:e.isTrue}))),previewFlowId:c.getItem("previewFlowId"),clientContext:e};return rt("channel join payload",t),t}disconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.socket&&this.socket.disconnect(),this._socketStatus="disconnected",this.socket=null,this.channel=null}debounceInactiveDisconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.debounceInactiveDisconnectTimeout=window.setTimeout((()=>{this.hasDraftSession()||this.assistantMessageInProgress?this.debounceInactiveDisconnect():(rt("disconnecting from socket due to inactivity"),this.disconnect())}),3e5)}hasDraftSession(){return!!this.flowSession?.draftMode||!!this.checklistSession?.draftMode||!!this.bannerSession?.draftMode||!!this.resourceCenterSession?.draftMode||this.launcherSessions.some((e=>e.draftMode))}async send(e,{batch:t,endBatch:s,handlesRejection:i}={}){return this.inBatch&&["ToggleClientCondition","UpdateClientContext"].includes(e.kind)||this.checkPushRateLimit(),this.ensureConnected(),t&&!this.inBatch&&(this.inBatch=!0,this.sendRaw({kind:"BeginBatch"})),this.inBatch&&(window.clearTimeout(this.endBatchTimeout),s?this.endBatch():this.endBatchTimeout=window.setTimeout((()=>{this.endBatch()}),50)),this.sendRaw(e,{handlesRejection:i})}async sendRaw(e,{handlesRejection:t}={}){return new Promise(((s,i)=>{if(!this.channel){const s=`Userflow.js: send() should not be called if channel is not set. Message kind=${e.kind}`;if(t)throw Error(s);return void console.log(s,"\nClient message:",e)}rt(`push ${e.kind} message`,e);const n=this.clientClock,r=()=>{this.serverClock=n,this.channel?.off("phx_error",a)},a=this.channel.on("phx_error",(s=>{r();const n=`Userflow.js send ${e.kind} got phx_error`;"connected"===this._socketStatus&&console.log(n,"\nClient message:",e,"\nError:",s),t&&i(new o(n))}));this.channel.push("client_message",e).receive("ok",(e=>{r(),s(e)})).receive("error",(s=>{r();const n=`Userflow.js error reply (${s.code}): ${s.message}`;console.log(n,"\nClient message:",e,"\nError:",s),t&&i(new o(n,s.code,s.message))}))}))}endBatch(){this.inBatch=!1,this.sendRaw({kind:"EndBatch"})}checkPushRateLimit(){const e=Date.now();if(this.pushRateLimitMinuteExpires<e&&(this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=e+6e4),this.pushRateLimitMinute>=100)throw new o("This Userflow.js client has reached a maximum of 100 operations in the last 1 minute. This is usually due to one of the following:\n\n - Excessive calls to Userflow.js. Check if any of userflow.track(), userflow.identify(), userflow.updateUser() or similar are called repeatedly.\n - The URL changing too frequently. Look into https://userflow.com/docs/userflow-js#seturlfilter and filter out the changing part of the URL.\n - The user legitimately being very active, in which case you can just ignore this error.\n \n If in doubt, reach out to us at support@userflow.com.");this.pushRateLimitMinute++}handleServerMessage(e){rt(`received ${e.kind} message`,e);const{serverClock:t,flowSession:s,flowSessionClock:i,checklistSession:n,checklistSessionClock:o,bannerSession:r,resourceCenterSession:a}=this;switch(e.kind){case"CheckSessionsAck":case"ServerDebug":return;case"AddLauncher":{const{session:t}=e,s=this.launcherSessions.findIndex((e=>e.flow.id===t.flow.id));return this.launcherSessions=-1===s?[...this.launcherSessions,t]:[...this.launcherSessions.slice(0,s),t,...this.launcherSessions.slice(s+1)],void this.toggleUI()}case"AddTracker":return void this.addTracker(e.tracker);case"AssistantMessageEventWrapper":return void this.emit("private:assistantMessageEvent",e);case"CancelConditionWaitTimer":return window.clearTimeout(this.conditionWaitTimers.get(e.conditionId)),void this.conditionWaitTimers.delete(e.conditionId);case"ChecklistTaskCompleted":return void this.unackedTasks.add(e.taskCvid);case"ForceGoToStep":return i>t?void rt(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&this.emit("gotostep",{session:s,step:{id:e.stepId}}));case"RemoveLauncher":return void(this.removeLauncher(e.flowId)&&this.toggleUI());case"RemoveTracker":return void this.removeTracker(e.flowId);case"SetBannerSession":return this.setBannerSession(e.session),void this.toggleUI();case"SetChecklistSession":return void(o<=t||n?.id===e.session.id?(this.setChecklistSession(e.session,t),this.toggleUI()):rt(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`));case"SetFlowSession":return void(i<=t||s?.id===e.session.id?(this.setFlowSession(e.session,t),this.toggleUI()):rt(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`));case"SetResourceCenterSession":return this.setResourceCenterSession(e.session),void this.toggleUI();case"StartConditionWaitTimer":if(!this.conditionWaitTimers.has(e.conditionId)){const t=window.setTimeout((()=>{this.conditionWaitTimers.delete(e.conditionId),this.send({kind:"FireConditionWaitTimer",conditionId:e.conditionId},{batch:!0})}),1e3*parseFloat(e.waitTime));this.conditionWaitTimers.set(e.conditionId,t)}return;case"TestStartConditionSuccess":return void this.emit("private:testStartConditionSuccess");case"TrackClientCondition":return void this.trackClientCondition(e.condition);case"UnsetBannerSession":return void(r?.id===e.sessionId&&(this.setBannerSession(null),this.toggleUI()));case"UnsetChecklistSession":return o>t?void rt(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`):void(n?.id===e.sessionId&&(this.setChecklistSession(null,t),this.toggleUI()));case"UnsetFlowSession":return i>t?void rt(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&(this.setFlowSession(null,t),this.toggleUI()));case"UnsetResourceCenterSession":return void(a?.id===e.sessionId&&(this.setResourceCenterSession(null),this.toggleUI()));case"UntrackClientCondition":return void this.untrackClientCondition(e.conditionId);default:return void console.warn("Userflow.js: Received unknown message",e)}}async identify(e,t={},{signature:s}={}){if(rt("identify",e),this.ensureInit(),this.testUserIdentified&&e!==this.externalId)rt("identify() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.identify: First argument must be a non-empty string representing the user's ID in your database. Value received: ${JSON.stringify(e)}`);this.externalId&&e!==this.externalId&&(rt("identify resetting due to new externalId"),this.reset()),this.externalId=e,this.signature=s||null,this.observeUserActivity(),await Promise.all([this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(t)},{batch:!0}),this.onFirstIdentify()]),this.emit("private:identified")}}async identifyAnonymous(e={},s={}){if(!a.isSupported())throw new o("userflow.identifyAnonymous() is not supported when localStorage access is denied.");const i="anonymousId";let n=a.getItem(i);n||(n="anon-"+t(),a.setItem(i,n)),await this.identify(n,e,s)}async updateUser(e={},t={}){rt("updateUser"),this.ensureIdentified(),await this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(e)},{batch:!0})}async group(e,t={},{signature:s,membership:i}={}){if(rt("group",e),this.ensureIdentified(),this.testUserIdentified&&e!==this.groupId)rt("group() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.group: First argument must be a non-empty string representing the group's ID in your database. Value received: ${JSON.stringify(e)}`);this.groupId=e,this.groupSignature=s||null,await this.send({kind:"UpsertGroup",groupExternalId:e,groupSignature:this.groupSignature,groupAttributes:this.normalizeAttributes(t),membershipAttributes:this.normalizeAttributes(i)},{batch:!0})}}async updateGroup(e={},t={}){rt("updateGroup");const s=this.ensureGroup();await this.send({kind:"UpsertGroup",groupExternalId:s,groupSignature:this.groupSignature,membershipAttributes:this.normalizeAttributes(t.membership),groupAttributes:this.normalizeAttributes(e)},{batch:!0})}normalizeAttributes(e){if(null==e)return{};if("object"!=typeof e)throw new o("Userflow: 'attributes' must be an object.");const t={};for(const s in e){if(!e.hasOwnProperty(s))continue;if("traits"===s){const i=e[s];Object.assign(t,this.extractLegacyTraits(i));continue}let i=e[s];if("string"==typeof i||"number"==typeof i||"boolean"==typeof i||null==i||Array.isArray(i))t[s]=this.normalizeAttributeLiteralOrList(s,i);else{if("object"!=typeof i||null==i)throw new o(`Userflow: Invalid value for '${s}' attribute.`);if("set"in i)t[s]={set:this.normalizeAttributeLiteralOrList(s,i.set),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("set_once"in i||"setOnce"in i)t[s]={setOnce:this.normalizeAttributeLiteralOrList(s,i.set_once??i.setOnce),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("add"in i){const e=i.add;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'add' value for '${s}' attribute. Must be a number or string.`);t[s]={add:e}}else if("subtract"in i){const e=i.subtract;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'subtract' value for '${s}' attribute. Must be a number or string.`);t[s]={subtract:e}}else if("append"in i)t[s]={append:this.normalizeAttributeLiteralOrList(s,i.append)};else if("prepend"in i)t[s]={prepend:this.normalizeAttributeLiteralOrList(s,i.prepend)};else{if(!("remove"in i))throw new o(`Userflow: Invalid value for '${s}' attribute.`);t[s]={remove:this.normalizeAttributeLiteralOrList(s,i.remove)}}}}return t}normalizeAttributeLiteralOrList(e,t){return Array.isArray(t)?t.map((t=>this.normalizeAttributeLiteral(e,t))):this.normalizeAttributeLiteral(e,t)}normalizeAttributeLiteral(e,t){if(null==t)return null;if("string"==typeof t||"number"==typeof t||"boolean"==typeof t)return t;throw new o(`Userflow: Invalid value for '${e}' attribute.`)}normalizeDataType(e,t){if(!t)return null;switch(t){case"string":return y.STRING;case"number":return y.NUMBER;case"boolean":return y.BOOLEAN;case"datetime":return y.DATETIME}throw new o(`Userflow: Invalid data_type for '${e}' attribute.`)}extractLegacyTraits(e){if(!e)return{};if(!Array.isArray(e)){const t=[];for(const s in e)e.hasOwnProperty(s)&&t.push({name:s,value:e[s]});e=t}return e.reduce(((e,{name:t,value:s,dataType:i})=>{if("string"!=typeof t||t.length>100||!t.match(/^[a-z0-9_]+$/))return this.warn("Userflow.identify: Invalid trait name (must be string, no more than 100 characters, and only consist of a-z, 0-9 and underscores). The trait will be ignored. Name was:",t),e;if("string"==typeof s);else if("boolean"==typeof s)i||(i="boolean"),s=s?"true":"false";else{if("number"!=typeof s)return this.warn(`userflow.identify: The value of trait '${t}' is invalid (must be a string, a boolean or a number). The trait will be ignored. Value was:`,s),e;i||(i=Number.isInteger(s)?"integer":"decimal"),s=String(s)}let n=null;if(i)switch(i){case"string":n=y.STRING;break;case"boolean":n=y.BOOLEAN;break;case"integer":case"decimal":n=y.NUMBER;break;case"datetime":n=y.DATETIME;break;default:return this.warn(`userflow.identify: The data type of trait '${t}' is invalid (must be a 'string', 'boolean', 'integer', 'decimal' or 'datetime'). The trait will be ignored. Data type was:`,i),e}return e[t]={set:s,dataType:n},e}),{})}async track(e,t={},{userOnly:s}={}){rt(`track '${e}'`,t),this.ensureIdentified(),await this.send({kind:"TrackEvent",userOnly:!!s,name:e,attributes:this.normalizeEventAttributes(t)},{batch:!0})}normalizeEventAttributes(e){const t=this.normalizeAttributes(e);for(const s in t){if(!t.hasOwnProperty(s))continue;const e=t[s];if(null!=e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Array.isArray(e)&&!("set"in e))throw new o(`Userflow: Invalid value for '${s}' attribute. Event attributes only support literal values, list values and 'set' changes.`)}return t}onFirstIdentify(){this.onFirstIdentifyRun||(this.onFirstIdentifyRun=!0,this.onFirstIdentifyTimeout=window.setTimeout((()=>{this.trackPageViewed(),this.firstIdentifyCallback?(this.firstIdentifyCallback(),this.firstIdentifyCallback=null):this.checkUrlForStartFlow()}),0))}onceIdentified(e){this.isIdentified()?e():this.firstIdentifyCallback=e}checkUrlForStartFlow(){const e=new URL(d()),t=e.searchParams.get("userflow")||e.searchParams.get("studio1_flow")||e.searchParams.get("studio1_walkthrough");t&&(rt(`url contained flow ${t}`),this.startFlow({flowId:t,startReason:L.LINK,batch:!0}),e.searchParams.delete("userflow"),e.searchParams.delete("studio1_flow"),e.searchParams.delete("studio1_walkthrough"),window.history.replaceState({},"",e.toString()),this.clientContext=this.buildClientContext(),this.pushUpdateClientContext())}flushUrlChange(){const e=this.buildClientContext();this.clientContext&&e.pageUrl===this.clientContext.pageUrl||(this.clientContext=e,this.pushUpdateClientContext(),this.trackPageViewed(),this.checkUrlForStartFlow())}async trackPageViewed(){this.pageTrackingDisabled||this.track("page_viewed",{})}buildClientContext(){return{pageUrl:it(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}}pushUpdateClientContext(){this.send({kind:"UpdateClientContext",clientContext:this.clientContext},{batch:!0})}ackCompletedTask(e){this.unackedTasks.delete(e)}taskIsUnacked(e){return this.unackedTasks.has(e)}isIdentified(){return null!=this.externalId}on(e,t){let s=this.listeners.get(e);s||(s=new Set,this.listeners.set(e,s)),s.add(t)}off(e,t){const s=this.listeners.get(e);s&&s.delete(t)}emit(e,...t){const s=this.listeners.get(e);if(s){Array.from(s).forEach((e=>e(...t)))}}observeUserActivity(){document.addEventListener("mouseover",this.onUserActivity),document.addEventListener("pointerdown",this.onUserActivity),document.addEventListener("keydown",this.onUserActivity)}unobserveUserActivity(){document.removeEventListener("mouseover",this.onUserActivity),document.removeEventListener("pointerdown",this.onUserActivity),document.removeEventListener("keydown",this.onUserActivity)}reset(){rt("reset"),this.externalId=null,this.groupId=null,this.sessionStorageState=null,this.setFlowSession(null,0),this.setChecklistSession(null,0),this.setBannerSession(null),this.setResourceCenterSession(null),this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.unackedTasks=new Set,this.onFirstIdentifyRun=!1,window.clearTimeout(this.onFirstIdentifyTimeout),this.onFirstIdentifyTimeout=void 0,this.clientContext=null,this.unobserveUserActivity(),window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=void 0,this.clientConditions.forEach(((e,t)=>{this.untrackClientCondition(t)})),this.firstIdentifyCallback=null,this.testUserIdentified=!1,a.removeItem("anonymousId"),this.unmountUI(),this.disconnect(),this.inBatch=!1,window.clearTimeout(this.endBatchTimeout),this.endBatchTimeout=void 0,this.clientClock=1,this.serverClock=1,this.titleMonitored=void 0,this.titleObserver&&(this.titleObserver.disconnect(),this.titleObserver=void 0)}async startFlow({flowId:e,stepCvid:t,startReason:s,once:i,batch:n,replaceCurrent:o}){if(this.ensureIdentified(),o&&this.flowSession&&this.endFlow(this.flowSession,{endReason:m.REPLACED,batch:!0}),rt(`startFlow ${e}`,{startReason:s}),this.checklistSession?.flow.id===e)return rt("startFlow matches current checklist, so showing it instead"),void this.showChecklist();const r={kind:"StartFlow",flowId:e,stepCvid:t,startReason:s,once:!!i};await this.send(r,{batch:n})}async startFlowWithToken(e){this.ensureIdentified(),rt("startFlowWithToken",{token:e}),await this.send({kind:"StartFlowWithToken",token:e},{batch:!0})}optimisticClockUIUpdate(e){this.clientClock++,e(),this.toggleUI()}async showChecklist(){this.resourceCenterEmbedsChecklist()?this.openResourceCenter():(this.unmarkExpandPending(),this.checklistSession&&!this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!0,this.toggleUI(),c.setItem(`checklistExpanded:${this.checklistSession.id}`,"1"),await this.send({kind:"ShowChecklist",sessionId:this.checklistSession.id},{batch:!0})))}async hideChecklist(){this.resourceCenterEmbedsChecklist()?this.closeResourceCenter():this.checklistSession&&this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!1,this.toggleUI(),c.removeItem(`checklistExpanded:${this.checklistSession.id}`),await this.send({kind:"HideChecklist",sessionId:this.checklistSession.id},{batch:!0}))}async unmarkExpandPending(){this.checklistSession&&this.checklistExpandPending&&(this.checklistExpandPending=!1,await this.send({kind:"UnmarkExpandPending",sessionId:this.checklistSession.id},{batch:!0}))}async openResourceCenter(){this.resourceCenterEmbedsChecklist()&&this.unmarkExpandPending(),this.resourceCenterSession&&!this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!0,this.toggleUI(),this.emit("resourceCenterChanged"),c.setItem(`resourceCenterOpen:${this.resourceCenterSession.id}`,"1"),await this.send({kind:"OpenResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}async closeResourceCenter(){this.resourceCenterSession&&this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!1,this.toggleUI(),this.emit("resourceCenterChanged"),c.removeItem(`resourceCenterOpen:${this.resourceCenterSession.id}`),await this.send({kind:"CloseResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}toggleResourceCenter(){this.resourceCenterOpen?this.closeResourceCenter():this.openResourceCenter()}setResourceCenterLauncherHidden(e){this.resourceCenterLauncherHidden=e,this.toggleUI()}getResourceCenterState(){if(!this.resourceCenterSession)return null;const e=this.resourceCenterEmbedsChecklist(),{checklistSession:t}=this,s=this.resourceCenterSession.version.resourceCenter?.blocks.find((e=>e.type===Ie.ANNOUNCEMENTS));return{isOpen:this.resourceCenterOpen,hasChecklist:e,uncompletedChecklistTaskCount:e&&t?dt(t):0,unreadAnnouncementCount:s?.unreadAnnouncementCount||0}}resourceCenterEmbedsChecklist(){const e=this.resourceCenterSession;return!!e&&!!e.version.resourceCenter?.blocks.some((e=>e.type===Ie.CHECKLIST))}async endFlow(e,{endReason:t,batch:s}){this.ensureIdentified(),this.optimisticClockUIUpdate((()=>{const{clientClock:t}=this;this.flowSession?.id===e.id&&this.setFlowSession(null,t),this.checklistSession?.id===e.id&&this.setChecklistSession(null,t),this.bannerSession?.id===e.id&&this.setBannerSession(null),this.resourceCenterSession?.id===e.id&&this.setResourceCenterSession(null)}));const{flow:i}=e,n={id:i.id,type:i.type.toLowerCase()};i.type===_.CHECKLIST?this.emit("checklistEnded",{checklist:n,endReason:t}):i.type===_.FLOW&&this.emit("flowEnded",{flow:n,endReason:t});const o={kind:"EndFlow",sessionId:e.id,endReason:t};await this.send(o,{batch:s})}async goToStep(e,t){rt("goToStep",e.id,t.name||t.id),this.ensureIdentified();const s=this.send({kind:"GoToStep",sessionId:e.id,stepId:t.id});e.currentStep=t,this.emit("gotostep",{session:e,step:t}),await s}async endAllFlows(){rt("endAllFlows"),this.optimisticClockUIUpdate((()=>{const{clientClock:e}=this;this.setFlowSession(null,e),this.setChecklistSession(null,e)})),await this.send({kind:"EndAllFlows"})}async endChecklist(){rt("endChecklist");const e=this.checklistSession||this.flowSession;e?.flow.type===_.CHECKLIST&&this.endFlow(e,{endReason:m.USERFLOWJS})}setFlowSession(e,t=this.clientClock){const s=this.flowSession;this.flowSession=e,this.flowSessionClock=t,e&&!s&&(this.hideChecklist(),this.closeResourceCenter()),null==e&&this.originalActiveElement&&("function"==typeof this.originalActiveElement.focus&&this.originalActiveElement.focus(),this.originalActiveElement=void 0)}setChecklistSession(e,t=this.clientClock){const s=this.checklistSession;this.checklistSession=e,this.checklistSessionClock=t,null===e&&(this.checklistExpanded=!1,this.checklistExpandPending=!1),e&&e.id!==s?.id&&(this.checklistExpanded=!!c.getItem(`checklistExpanded:${e.id}`),e.expandPending&&(this.checklistExpandPending=!0)),this.emit("checklistChanged"),this.emit("resourceCenterChanged")}setBannerSession(e){this.bannerSession=e}setResourceCenterSession(e){const t=this.resourceCenterSession;e="function"==typeof e?e(this.resourceCenterSession):e,this.resourceCenterSession=e,null===e&&(this.resourceCenterOpen=!1),t&&t.id!==e?.id&&c.removeItem(`resourceCenterOpen:${t.id}`),e&&e.id!==t?.id&&(this.resourceCenterOpen=!!c.getItem(`resourceCenterOpen:${e.id}`)),this.emit("resourceCenterChanged")}launcherSeen(e){this.send({kind:"StartFlow",flowId:e,startReason:L.LAUNCHER_SEEN,once:!1})}activateLauncher(e){const t=this.activeLauncherFlowId&&this.launcherSessions.find((e=>e.flow.id===this.activeLauncherFlowId));t&&this.deactivateLauncher(t),this.activeLauncherFlowId=e.flow.id,this.toggleUI(),this.send({kind:"ActivateLauncher",flowId:e.flow.id})}deactivateLauncher(e){const{launcher:t}=e.version;e.flow.id===this.activeLauncherFlowId&&(t?.dismissOn===_e.DEACTIVATE?this.dismissLauncher(e,{endReason:m.LAUNCHER_DEACTIVATED}):(this.activeLauncherFlowId=null,this.toggleUI()))}dismissLauncher(e,{endReason:t}){const s=e.flow.id;this.removeLauncher(s),this.toggleUI(),this.send({kind:"DismissLauncher",flowId:s,endReason:t})}removeLauncher(e){const t=this.launcherSessions.findIndex((t=>t.flow.id===e));return-1!==t&&(this.launcherSessions=[...this.launcherSessions.slice(0,t),...this.launcherSessions.slice(t+1)],e===this.activeLauncherFlowId&&(this.activeLauncherFlowId=null),!0)}async toggleUI(){const e=this.getSessionStorageState();this.flowSession||!this.checklistExpandPending&&!this.checklistSession?.version.checklist?.tasks.some((e=>this.taskIsUnacked(e.cvid)))||this.showChecklist(),e.isTargetTab&&this.monitorTitle(),this.emit("uistatechange"),this.shouldBeMounted()?await this.mountUI():this.unmountUI()}shouldBeMounted(){if(this.uiDisabled)return!1;return!!this.getSessionStorageState().activeApp||!!this.flowSession||!!this.checklistSession&&(this.checklistExpanded||!!this.checklistSession?.version.checklist?.launcherEnabled)||!!this.bannerSession||!!this.resourceCenterSession&&(this.resourceCenterOpen||!this.resourceCenterLauncherHidden)||this.launcherSessions.length>0||this.notifications.length>0}async mountUI(){if(!this.ui){const e=await this.createUI();this.shouldBeMounted()&&!this.ui&&(rt("mount UI"),this.ui=e,this.ui.mount())}}unmountUI(){this.ui&&(rt("unmount UI"),this.ui.unmount(),this.ui=null)}remount(){this.unmountUI(),this.toggleUI()}async createUI(){try{const e=n((()=>import("./ui.js")),[new URL("ui.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString()]);this.bannerSession&&Et(),this.resourceCenterSession&&lt();const{RealUI:t}=await e;return new t(this)}catch(St){throw this.reportCspIssue(),St}}async trackClientCondition(e){if(this.clientConditions.has(e.id))return;rt("track client condition",e),this.clientConditions.set(e.id,{condition:e,isTrue:null});const{conditionTypes:t}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.v}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),s=t[e.type],i=this.clientConditions.get(e.id);i&&(i.untrack=s.track({sessionData:new ht([]),condition:e,callback:t=>{i.isTrue!==t&&(rt("client condition truthiness changed",t,i.condition),i.isTrue=t,this.send({kind:"ToggleClientCondition",conditionId:e.id,isTrue:t},{batch:!0}))}}))}untrackClientCondition(e){const t=this.clientConditions.get(e);t&&(rt("untrack client condition",t.condition),t.untrack&&t.untrack(),this.clientConditions.delete(e))}async addTracker(e){let t=this.trackers.get(e.flowId);t?t.tracker=e:this.trackers.set(e.flowId,{tracker:e,isTrue:!1});const{conditionTypes:s}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.v}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),i=this.trackers.get(e.flowId);if(!i)return;const{tracker:o}=i,{condition:r}=o,a=s[r.type];i.untrack&&i.untrack(),i.untrack=a.track({sessionData:new ht(o.data),condition:r,flipBackEvents:!0,callback:e=>{const t=i.isTrue;i.isTrue=e,!t&&e&&this.send({kind:"TrackTrackerEvent",token:o.token},{batch:!0})},description:`event tracker ${o.flowId}`}),this.emit("private:trackerStarted")}removeTracker(e){const t=this.trackers.get(e);t&&(t.untrack&&t.untrack(),this.trackers.delete(e),this.emit("private:trackerStopped"))}monitorTitle(){if(this.titleMonitored)return;this.titleMonitored=!0,this.fixTitle();const e=document.querySelector("title");if(e){const t=new MutationObserver((()=>{this.fixTitle()}));t.observe(e,{childList:!0}),this.titleObserver=t}}fixTitle(){const e=document.title,t="[Userflow Preview] "+e.replace(/\[Userflow Preview\] /,"");e!==t&&(document.title=t)}reportCspIssue(){const e=this.getSessionStorageState();!this.testUserIdentified&&!e.activeApp||this.cspIssueReported||(this.cspIssueReported=!0,rt("csp issue detected"),T({kind:"userflow:crxCspIssueDetected"}))}getAudio(){return this.audio||(this.audio=new Audio),this.audio}playAudio(e){if(document.hidden)return;const t=this.getAudio();e&&(t.src=e);const s=t.play();this.audioReady=!0,s&&s.catch((e=>{e.name}))}pauseAudio(){const e=this.audio;e&&!e.paused&&e.pause()}async getStepSpeech(e,t){return(await this.send({kind:"GetStepSpeechV2",syntheticVoice:e,text:t})).url}featureFlagEnabled(e){return this.featureFlags.has(e)}showNotification(e,t,s){const i={id:++this.notificationIdCounter,label:e,message:t,type:s};this.notifications=[...this.notifications,i],this.toggleUI()}dismissNotification(e){this.notifications=this.notifications.filter((t=>t.id!==e)),this.toggleUI()}warn(...e){console.warn(...e)}nextRef(){return this.refCounter++}}if(void 0===window.userflow||window.userflow._stubbed){const e=Object.assign(window.userflow||{},function(){const e=new ft;return{_stubbed:!1,init(t){e.init(t)},identify:(t,s={},i={})=>e.identify(t,s,i),identifyAnonymous:(t={},s={})=>e.identifyAnonymous(t,s),isIdentified:()=>e.isIdentified(),updateUser:(t,s={})=>e.updateUser(t,s),group:(t,s={},i={})=>e.group(t,s,i),updateGroup:(t,s={})=>e.updateGroup(t,s),track:(t,s={},i={})=>e.track(t,s,i),start:(t,{once:s}={})=>e.startFlow({flowId:t,startReason:L.USERFLOWJS,once:s}),startFlow:e=>(console.warn("Userflow.js: userflow.startFlow() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),startWalk:e=>(console.warn("Userflow.js: userflow.startWalk() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),endAll:()=>e.endAllFlows(),endChecklist:()=>e.endChecklist(),endAllFlows:()=>window.userflow.endAll(),async endFlow(){console.warn("Userflow.js: userflow.endFlow() has been deprecated and no longer has any effect.")},async endWalk(){console.warn("Userflow.js: userflow.endWalk() has been deprecated and no longer has any effect.")},openResourceCenter(){e.openResourceCenter()},closeResourceCenter(){e.closeResourceCenter()},toggleResourceCenter(){e.toggleResourceCenter()},setResourceCenterLauncherHidden(t){e.setResourceCenterLauncherHidden(t)},getResourceCenterState:()=>e.getResourceCenterState(),setWalkPosition(){console.warn("Userflow.js: userflow.setWalkPosition() has been deprecated and no longer has any effect.")},reset(){e.reset()},remount(){e.remount()},on(t,s){e.on(t,s)},off(t,s){e.off(t,s)},setCustomInputSelector(e){console.warn("Userflow.js: userflow.setCustomInputSelector() has been deprecated. Use userflow.registerCustomInput() instead. See docs: https://userflow.com/docs/userflow-js"),e&&et.customInputs.push({cssSelector:e})},registerCustomInput(e,t){et.customInputs.push({cssSelector:e,getValue:t})},setCustomNavigate(e){et.customNavigate=e},setUrlFilter(e){et.urlFilter=e},setLinkUrlDecorator(t){et.linkUrlDecorator=t,e.emit("uistatechange")},setInferenceAttributeNames(e){et.inferenceAttributeNames=e},setInferenceAttributeFilter(e,t){et.inferenceAttributeFilters[e]=tt(t)},setInferenceClassNameFilter(e){et.inferenceClassNameFilters=tt(e)},setScrollPadding(e){et.scrollPadding=e},setCustomScrollIntoView(e){et.customScrollIntoView=e},prepareAudio(){e.playAudio(null)},setShadowDomEnabled(e){console.warn("Userflow.js: userflow.setShadowDomEnabled() has been deprecated. Please remove this call from your Userflow.js snippet. Shadow DOM is supported by default now.")},setPageTrackingDisabled(t){e.pageTrackingDisabled=t},setBaseZIndex(e){et.baseZIndex=e},setServerEndpoint(e){et.serverEndpoint=e},disableEvalJs(){et.evalJsDisabled=!0},_setTargetEnv(t){e.setTargetEnv(t)}}}());window.userflow=e,window.studio1=e,function(){const e=window.userflow,t=window.USERFLOWJS_QUEUE;if(delete window.USERFLOWJS_QUEUE,!t||0===t.length)return;rt(`processing ${t.length} items in the queue`);for(const[s,i,n]of t){if("function"!=typeof e[s]){console.error(`Userflow.js: Invalid method '${s}' in queue`);continue}const t=e[s](...n);i&&t&&"function"==typeof t.then&&t.then(i.resolve,i.reject)}rt("queue processed")}()}export{Ye as $,Ne as A,Et as B,me as C,W as D,m as E,P as F,Y as G,a as H,Ve as I,X as J,ne as K,ce as L,Q as M,K as N,de as O,He as P,ye as Q,lt as R,L as S,ut as T,o as U,re as V,De as W,We as X,Fe as Y,Pe as Z,n as _,B as a,N as a0,F as b,et as c,rt as d,D as e,H as f,it as g,Ie as h,c as i,dt as j,se as k,ee as l,ue as m,Ae as n,p as o,_ as p,Le as q,d as r,l as s,st as t,g as u,Te as v,Se as w,pe as x,ht as y,V as z};export default window.userflow;
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="f2f5131d-1ff4-43d2-9a96-4a11a0cbaf47",e._sentryDebugIdIdentifier="sentry-dbid-f2f5131d-1ff4-43d2-9a96-4a11a0cbaf47")}catch(s){}}();import{S as e}from"./vendor.phoenix.js";import"./vendor.react.js";import{v as t}from"./vendor.uuid.js";import"./vendor.object-assign.js";let s;const i={},n=function(e,t){if(!t)return e();if(void 0===s){const e=document.createElement("link").relList;s=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in i)return;i[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":s,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};class o extends Error{constructor(e,t,s){super(e),Object.setPrototypeOf(this,o.prototype),this.name="UserflowError",this.code=t,this.humanMessage=s}}class r{constructor(e){this.type=e,this.testState={}}formatKey(e){return`userflow:${e}`}isSupported(){if("undefined"==typeof window)return!1;try{return null!=window[this.type]}catch{return!1}}getItem(e){return e=this.formatKey(e),this.isSupported()?window[this.type].getItem(e):null}setItem(e,t){e=this.formatKey(e),this.isSupported()&&window[this.type].setItem(e,t)}removeItem(e){if(e=this.formatKey(e),this.isSupported())return window[this.type].removeItem(e)}clear(){if(this.isSupported())return window[this.type].clear()}}const a=new r("localStorage"),c=new r("sessionStorage");function l(e){window.location.href=e}function d(){return window.location.href}var h,u,E;function T(e){window.postMessage(e,window.origin)}function f(e){const t=t=>{if(t.source!==window||t.origin!==window.origin)return;const i=t.data;i&&"object"==typeof i&&"string"==typeof i.kind&&i.kind.startsWith("userflow:")&&!0===e(i)&&s()};window.addEventListener("message",t);const s=()=>window.removeEventListener("message",t);return s}(h||(h={})).INPUT="INPUT",(E=u||(u={})).AUTO="AUTO",E.MANUAL="MANUAL";const S=new Set;let w=!1;function p(e){return function(){if(w)return;w=!0;const{history:e}=window,t=t=>{const s=e[t];e[t]=(...t)=>{const i=s.apply(e,t);return I(),i}};window.__userflowStatePatched?(window.addEventListener("userflow:pushstate",(()=>{I()})),window.addEventListener("userflow:replacestate",(()=>{I()}))):(t("pushState"),t("replaceState"));window.addEventListener("popstate",(()=>{I()}))}(),S.add(e),()=>{g(e)}}function g(e){S.delete(e)}function I(){S.forEach((e=>e()))}class C{destroy(){this.unregisterOnMessage&&this.unregisterOnMessage()}postBuilderMessage(e){T({kind:"userflow:crxSendProxyMessage",direction:"targetToBuilder",message:e})}onBuilderMessage(e){return this.unregisterOnMessage=f(e),!1}async captureScreenshot(e,t,s,i){T({kind:"userflow:crxScreenshot",x:e,y:t,width:s,height:i,devicePixelRatio:window.devicePixelRatio});var n;return(await(n=e=>"userflow:crxScreenshotResult"===e.kind?e:null,new Promise((e=>{f((t=>{const s=n(t);return!!s&&(e(s),!0)}))})))).imageDataUrl}}var m,k,A,U,L,R,N,v,y,O,_,b,D,M,F,B,P,x,H,G,W,$,V,j,K,z,Y,J,X,Z,Q,q,ee,te,se,ie,ne,oe,re,ae,ce,le,de,he,ue,Ee,Te,fe,Se,we,pe,ge,Ie,Ce,me,ke,Ae,Ue,Le,Re,Ne,ve,ye,Oe,_e,be,De,Me,Fe,Be,Pe,xe,He,Ge,We,$e,Ve,je,Ke,ze,Ye,Je,Xe,Ze,Qe,qe;(k=m||(m={})).ACTION="ACTION",k.LAUNCHER_DEACTIVATED="LAUNCHER_DEACTIVATED",k.REPLACED="REPLACED",k.SNOOZED="SNOOZED",k.TOOLTIP_TARGET_MISSING="TOOLTIP_TARGET_MISSING",k.USERFLOWJS="USERFLOWJS",k.USER_CLOSED="USER_CLOSED",(U=A||(A={})).SECOND="SECOND",U.MINUTE="MINUTE",U.HOUR="HOUR",U.DAY="DAY",(R=L||(L={})).ACTION="ACTION",R.DRAFT="DRAFT",R.LINK="LINK",R.LAUNCHER_SEEN="LAUNCHER_SEEN",R.RESOURCE_CENTER="RESOURCE_CENTER",R.USERFLOWJS="USERFLOWJS",(v=N||(N={})).LIKE="LIKE",v.DISLIKE="DISLIKE",(O=y||(y={})).STRING="STRING",O.BOOLEAN="BOOLEAN",O.NUMBER="NUMBER",O.DATETIME="DATETIME",O.LIST="LIST",O.RANDOM_AB="RANDOM_AB",O.RANDOM_NUMBER="RANDOM_NUMBER",(b=_||(_={})).FLOW="FLOW",b.BANNER="BANNER",b.CHECKLIST="CHECKLIST",b.LAUNCHER="LAUNCHER",b.RESOURCE_CENTER="RESOURCE_CENTER",(M=D||(D={})).ALWAYS_TRUE="ALWAYS_TRUE",M.ATTRIBUTE="ATTRIBUTE",M.CLAUSE="CLAUSE",M.ELEMENT="ELEMENT",M.FILLED_IN_INPUT="FILLED_IN_INPUT",M.FLOW="FLOW",M.INPUT_VALUE="INPUT_VALUE",M.PAGE="PAGE",M.SEGMENT="SEGMENT",M.TIME="TIME",function(e){e.AUTO="AUTO",e.MANUAL="MANUAL"}(F||(F={})),(B||(B={})).INPUT="INPUT",(x=P||(P={})).ABSOLUTE_EQ="ABSOLUTE_EQ",x.ABSOLUTE_GT="ABSOLUTE_GT",x.ABSOLUTE_LT="ABSOLUTE_LT",x.AND="AND",x.BETWEEN="BETWEEN",x.CONTAINS="CONTAINS",x.EMPTY="EMPTY",x.ENDS_WITH="ENDS_WITH",x.EQ="EQ",x.EXCLUDES_ALL="EXCLUDES_ALL",x.EXCLUDES_ANY="EXCLUDES_ANY",x.FALSE="FALSE",x.GT="GT",x.GTE="GTE",x.INCLUDES_ALL="INCLUDES_ALL",x.INCLUDES_ANY="INCLUDES_ANY",x.LT="LT",x.LTE="LTE",x.NE="NE",x.NOT_CONTAINS="NOT_CONTAINS",x.NOT_EMPTY="NOT_EMPTY",x.NOT_REGEX="NOT_REGEX",x.OR="OR",x.REGEX="REGEX",x.RELATIVE_EQ="RELATIVE_EQ",x.RELATIVE_GT="RELATIVE_GT",x.RELATIVE_LT="RELATIVE_LT",x.STARTS_WITH="STARTS_WITH",x.TRUE="TRUE",x.URL="URL",(G=H||(H={})).CLICK="CLICK",G.DISABLED="DISABLED",G.MOUSEDOWN="MOUSEDOWN",G.NOT_CLICK="NOT_CLICK",G.NOT_DISABLED="NOT_DISABLED",G.NOT_PRESENT="NOT_PRESENT",G.PRESENT="PRESENT",($=W||(W={})).ASSET="ASSET",$.CARTOON="CARTOON",$.NONE="NONE",$.URL="URL",(j=V||(V={})).INSIDE="INSIDE",j.OUTSIDE="OUTSIDE",(z=K||(K={})).TOP_LEFT="TOP_LEFT",z.TOP_CENTER="TOP_CENTER",z.TOP_RIGHT="TOP_RIGHT",z.BOTTOM_RIGHT="BOTTOM_RIGHT",z.BOTTOM_CENTER="BOTTOM_CENTER",z.BOTTOM_LEFT="BOTTOM_LEFT",z.CENTER="CENTER",(J=Y||(Y={})).GOOGLE="GOOGLE",J.STANDARD="STANDARD",(Z=X||(X={})).DISMISS_FIRST_MENU_AFTER="DISMISS_FIRST_MENU_AFTER",Z.DISMISS="DISMISS",(q=Q||(Q={})).DISMISS="DISMISS",q.NONE="NONE",(te=ee||(ee={})).DEFAULT="DEFAULT",te.PLAINTEXT="PLAINTEXT",te.CUSTOM="CUSTOM",(ie=se||(se={})).CHECKLIST_OVERRIDE="CHECKLIST_OVERRIDE",ie.RESOURCE_CENTER_ONLY="RESOURCE_CENTER_ONLY",ie.NONE="NONE",(oe=ne||(ne={})).BUBBLE="BUBBLE",oe.END="END",oe.ERROR="ERROR",oe.FLAG="FLAG",(ae=re||(re={})).MANUAL="MANUAL",ae.NONE="NONE",ae.SYNTHETIC="SYNTHETIC",(le=ce||(ce={})).BUBBLE="BUBBLE",le.HIDDEN="HIDDEN",le.MODAL="MODAL",le.TOOLTIP="TOOLTIP",(he=de||(de={})).ABOVE="ABOVE",he.BELOW="BELOW",he.LEFT="LEFT",he.RIGHT="RIGHT",(Ee=ue||(ue={})).CLOSE_FLOW="CLOSE_FLOW",Ee.EVAL_JS="EVAL_JS",Ee.GO_TO_STEP="GO_TO_STEP",Ee.NAVIGATE="NAVIGATE",Ee.SET_ATTRIBUTE="SET_ATTRIBUTE",Ee.SNOOZE="SNOOZE",Ee.START_FLOW="START_FLOW",(fe=Te||(Te={})).NEW_TAB="NEW_TAB",fe.SAME_TAB="SAME_TAB",(we=Se||(Se={})).SET="SET",we.SET_DATETIME="SET_DATETIME",we.SET_DATETIME_ONCE="SET_DATETIME_ONCE",we.SET_ONCE="SET_ONCE",we.ADD="ADD",we.SUBTRACT="SUBTRACT",we.APPEND="APPEND",we.PREPEND="PREPEND",we.REMOVE="REMOVE",we.UNSET="UNSET",(ge=pe||(pe={})).MULTILINE_TEXT="MULTILINE_TEXT",ge.MULTIPLE_CHOICE="MULTIPLE_CHOICE",ge.NPS="NPS",ge.SCALE="SCALE",ge.STARS="STARS",ge.TEXT="TEXT",(Ce=Ie||(Ie={})).ACTION="ACTION",Ce.ANNOUNCEMENTS="ANNOUNCEMENTS",Ce.ASSISTANT="ASSISTANT",Ce.CHECKLIST="CHECKLIST",Ce.CONTACT="CONTACT",Ce.DIVIDER="DIVIDER",Ce.FLOWS="FLOWS",Ce.KNOWLEDGE_BASE="KNOWLEDGE_BASE",Ce.MESSAGE="MESSAGE",Ce.SUBPAGE="SUBPAGE",(ke=me||(me={})).CRISP="CRISP",ke.CUSTOM="CUSTOM",ke.FRESHCHAT="FRESHCHAT",ke.HELPSCOUT="HELPSCOUT",ke.HUBSPOT="HUBSPOT",ke.INTERCOM="INTERCOM",ke.ZENDESK="ZENDESK",ke.ZENDESK_MESSENGER="ZENDESK_MESSENGER",(Ue=Ae||(Ae={})).BUTTON="BUTTON",Ue.INPUT="INPUT",(Re=Le||(Le={})).EMAIL="EMAIL",Re.PHONE="PHONE",Re.CHAT="CHAT",(ve=Ne||(Ne={})).SILENT="SILENT",ve.BADGE="BADGE",ve.POPOUT="POPOUT",(Oe=ye||(ye={})).LAUNCHER_CLICK="LAUNCHER_CLICK",Oe.LAUNCHER_HOVER="LAUNCHER_HOVER",Oe.TARGET_CLICK="TARGET_CLICK",Oe.TARGET_HOVER="TARGET_HOVER",Oe.LAUNCHER_TARGET_CLICK="LAUNCHER_TARGET_CLICK",Oe.LAUNCHER_TARGET_HOVER="LAUNCHER_TARGET_HOVER",(be=_e||(_e={})).ACTIVATE="ACTIVATE",be.DEACTIVATE="DEACTIVATE",be.NEVER="NEVER",(Me=De||(De={})).AUTO="AUTO",Me.TOP="TOP",Me.RIGHT="RIGHT",Me.BOTTOM="BOTTOM",Me.LEFT="LEFT",(Be=Fe||(Fe={})).START="START",Be.CENTER="CENTER",Be.END="END",(xe=Pe||(Pe={})).PERCENT="PERCENT",xe.PX="PX",(Ge=He||(He={})).BEACON="BEACON",Ge.BUTTON="BUTTON",Ge.HIDDEN="HIDDEN",Ge.ICON="ICON",($e=We||(We={})).LAUNCHER="LAUNCHER",$e.TARGET="TARGET",(je=Ve||(Ve={})).BODY_FIRST="BODY_FIRST",je.BODY_LAST="BODY_LAST",je.ELEMENT_FIRST="ELEMENT_FIRST",je.ELEMENT_LAST="ELEMENT_LAST",je.ELEMENT_BEFORE="ELEMENT_BEFORE",je.ELEMENT_AFTER="ELEMENT_AFTER",(ze=Ke||(Ke={})).START="START",ze.CENTER="CENTER",ze.SPACE_BETWEEN="SPACE_BETWEEN",(Je=Ye||(Ye={})).NONE="NONE",Je.LIKE="LIKE",Je.SCALE="SCALE",(Ze=Xe||(Xe={})).ACTIVE="ACTIVE",Ze.COMPLETED="COMPLETED",Ze.ENDED="ENDED",Ze.NOT_SEEN="NOT_SEEN",(qe=Qe||(Qe={})).HIGHLIGHT="HIGHLIGHT",qe.MODAL="MODAL",qe.HIGHLIGHT_MODAL="HIGHLIGHT_MODAL";const et={customInputs:[],customNavigate:null,urlFilter:null,linkUrlDecorator:null,customScrollIntoView:null,scrollPadding:null,inferenceAttributeNames:["data-for","data-id","data-testid","data-test-id","for","id","name","placeholder","role"],inferenceAttributeFilters:{id:[e=>!e.match(/\d$/)],"data-id":[e=>!e.match(/\d$/)]},inferenceClassNameFilters:[e=>!e.startsWith("css-")],baseZIndex:1234500,evalJsDisabled:!1};function tt(e){return Array.isArray(e)||(e=e?[e]:[]),e=e.map((e=>"string"==typeof e?new RegExp(e):e))}function st(e,t){return e.every((e=>"function"==typeof e?e(t):!(e instanceof RegExp)||e.test(t)))}function it(){let e=d();if(et.urlFilter){if(e=et.urlFilter(e),"string"!=typeof e)throw new o("Userflow.js: URL filter returned non-string value. Please check your userflow.setUrlFilter() implementation.");try{new URL(e)}catch(t){throw new o("Userflow.js: URL filter returned an invalid URL. Please check your userflow.setUrlFilter() implementation.\nReturned URL: "+e+"\nError message: "+t.message)}}return e}let nt="";try{nt=localStorage.getItem("debug")||""}catch(St){}const ot=nt.split(",").some((e=>"*"===e||e.startsWith("userflow:*"))),rt=ct("log");let at;function ct(e){return function(t,...s){if(ot){const i=performance.now(),n=at?Math.round(i-at):0;at=i,console[e](`%cuserflow %c${t} %c+${n}ms`,"color:#1a57e6;","","color:#1a57e6;",...s)}}}rt.group=ct("group"),rt.groupCollapsed=ct("groupCollapsed"),rt.groupEnd=function(){ot&&console.groupEnd()};const lt=()=>n((()=>import("./ResourceCenterApp.js").then((function(e){return e.R}))),[new URL("ResourceCenterApp.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("flow-host.styl.js",import.meta.url).toString(),new URL("bubble-frame.styl.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("use-window-resize.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("logomark.js",import.meta.url).toString(),new URL("ChecklistUI.js",import.meta.url).toString(),new URL("BubbleToolbar.js",import.meta.url).toString(),new URL("use-element-rect.js",import.meta.url).toString()]);function dt(e){const t=e.version.checklist.tasks.length;return Math.max(0,t-e.taskCompletions.length)}class ht{constructor(e){this.observers=new Set,this._value=e}get value(){return this._value}update(e){if(e!==this._value){this._value=e;for(const e of this.observers)e()}}observe(e){return this.observers.add(e),()=>this.observers.delete(e)}}const ut=["page:before-change","page:change","turbo:before-cache","turbo:load","turbo:visit","turbolinks:before-cache","turbolinks:load","turbolinks:visit"],Et=()=>n((()=>import("./BannerApp.js")),[new URL("BannerApp.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("bubble-frame.styl.js",import.meta.url).toString(),new URL("flow-host.styl.js",import.meta.url).toString(),new URL("use-selector-element-monitoring.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("use-window-resize.js",import.meta.url).toString(),new URL("use-element-rect.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString()]),Tt=import.meta.url;class ft{constructor(){this.clientToken=null,this.externalId=null,this.signature=null,this.groupId=null,this.groupSignature=null,this._socketStatus="disconnected",this.socket=null,this.channel=null,this.featureFlags=new Set,this.logrocketAppId=null,this.debounceInactiveDisconnectTimeout=void 0,this.inBatch=!1,this.endBatchTimeout=void 0,this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=0,this.clientClock=1,this.serverClock=1,this.flowSession=null,this.flowSessionClock=0,this.checklistSession=null,this.checklistExpanded=!1,this.checklistExpandPending=!1,this.checklistSessionClock=0,this.bannerSession=null,this.resourceCenterSession=null,this.resourceCenterOpen=!1,this.resourceCenterLauncherHidden=!1,this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.notificationIdCounter=0,this.sessionStorageState=null,this.clientContext=null,this.flushUrlChangeTimeout=void 0,this.onFirstIdentifyRun=!1,this.onFirstIdentifyTimeout=void 0,this.firstIdentifyCallback=null,this.ui=null,this.unackedTasks=new Set,this.clientConditions=new Map,this.trackers=new Map,this.conditionWaitTimers=new Map,this.listeners=new Map,this.targetEnv=null,this.idempotencyKeysSeen=new Set,this.testUserIdentified=!1,this.cspIssueReported=!1,this.uiDisabled=!1,this.audio=null,this.audioReady=!1,this.pageTrackingDisabled=!1,this.refCounter=1,this.onBuilderMessage=e=>(this.handleBuilderMessage(e),!1),this.handleBuilderMessage=async e=>{rt(`builder ${e.kind} message received`,e);const t="idempotencyKey"in e&&"string"==typeof e.idempotencyKey?e.idempotencyKey:null;if(t&&this.idempotencyKeysSeen.has(t))return;const s=()=>{t&&this.idempotencyKeysSeen.add(t)};switch(e.kind){case"userflow:selectElement":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:selectElementAck",idempotencyKey:e.idempotencyKey}),void this.setSessionStorageState((t=>({...t,isTargetTab:!0,activeApp:"elementSelection",elementSelection:{mode:"select",elementType:e.elementType}})));case"userflow:selectElementCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,elementSelection:null})));case"userflow:startFlowWithToken":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:startFlowWithTokenAck",idempotencyKey:e.idempotencyKey}),this.setSessionStorageState((e=>({...e,isTargetTab:!0,activeApp:null,testStartConditionToken:void 0}))),c.setItem("previewFlowId",e.flowId),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void(e.testStartCondition?this.setSessionStorageState((t=>({...t,activeApp:"startConditionTesting",testStartConditionToken:e.token}))):this.onceIdentified((()=>{if(this.startFlowWithToken(e.token),e.isResourceCenter){const t=()=>{const s=this.resourceCenterSession;s&&s.draftMode&&s.flow.id===e.flowId&&(this.openResourceCenter(),this.off("resourceCenterChanged",t))};this.on("resourceCenterChanged",t),t()}})));case"userflow:testTracker":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:testTrackerAck",idempotencyKey:e.idempotencyKey}),this.setSessionStorageState((e=>({...e,isTargetTab:!0}))),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.setSessionStorageState((t=>({...t,activeApp:"trackerTesting",trackerTesting:{trackerName:e.trackerName,token:e.token,events:0}})));case"userflow:testTrackerCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,trackerTesting:null})))}},this.onUrlChange=()=>{this.externalId&&(window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=window.setTimeout((()=>this.flushUrlChange()),50))},this.onUserActivity=()=>this.ensureConnected(),this.remountIfNecessary=()=>{this.ui?.container&&!document.contains(this.ui.container)&&(rt("remounting UI because container was missing"),this.remount())},rt("constructor, build=1007772"),p(this.onUrlChange),this.setTargetEnv(new C),this.checkTestUserAtBoot(),this.toggleUI();for(const e of ut)document.addEventListener(e,this.remountIfNecessary)}get socketStatus(){return this._socketStatus}destroy(){rt("destroy"),this.reset(),g(this.onUrlChange),this.destroyTargetEnv();for(const e of ut)document.removeEventListener(e,this.remountIfNecessary)}setTargetEnv(e){this.destroyTargetEnv(),this.targetEnv=e,e.onBuilderMessage(this.onBuilderMessage)}destroyTargetEnv(){this.targetEnv&&(this.targetEnv.destroy(),this.targetEnv=null)}getTargetEnv(){if(!this.targetEnv)throw new o("Userflow.js: Cannot call getTargetEnv when protocol is not set");return this.targetEnv}setSessionStorageState(e){const t=e(this.getSessionStorageState());c.setItem("userflowClientState",JSON.stringify(t)),this.sessionStorageState=t,this.toggleUI()}getSessionStorageState(){let e=this.sessionStorageState;if(!e){const t=c.getItem("userflowClientState");if(t)try{e=JSON.parse(t)}catch(St){console.error("Userflow.js: Parse ElementSelectionState error:",St)}e||(e={testUser:null,activeApp:null,elementSelection:null,trackerTesting:null}),this.sessionStorageState=e}return e}checkTestUserAtBoot(){const e=this.getSessionStorageState().testUser;e&&(rt("checkTestUserAtBoot identifying test user"),this.identifyTestUser(e))}async identifyTestUser(e){this.setSessionStorageState((t=>({...t,testUser:e}))),this.reset(),this.init(e.clientToken),this.testUserIdentified=!0,this.externalId=e.id;const t=[this.identify(e.id,{name:e.name,email:e.email,signed_up_at:{set_once:(new Date).toISOString(),data_type:"datetime"}},{signature:e.signature})],{group:s}=e;s&&(this.groupId=s.id,t.push(this.group(s.id,{name:s.name},{signature:s.signature}))),await Promise.all(t)}resetTestUser(){this.setSessionStorageState((e=>({...e,testUser:null})))}init(e){if(rt("init",e),!e)throw new o("userflow.init() was called but missing Userflow.js Token");this.clientToken!==e&&(this.testUserIdentified?rt("init() ignoring new token since a test user has been identified"):(this.clientToken&&(rt("init() resetting due to new client token"),this.reset()),this.clientToken=e))}ensureInit(){if(!this.clientToken)throw new o("You must call userflow.init() first")}ensureIdentified(){if(this.ensureInit(),!this.externalId)throw new o("You must call userflow.identify() first");return this.externalId}ensureGroup(){if(this.ensureIdentified(),!this.groupId)throw new o("You must call userflow.group() first");return this.groupId}ensureConnected(){if(!this.clientToken||!this.externalId)return;if(this.debounceInactiveDisconnect(),this.socket)return;this._socketStatus="connecting",rt("connecting to socket");let t=et.serverEndpoint||"e.userflow.com";"js.getuserflow.com"===new URL(Tt).hostname&&"e.userflow.com"===t&&(t="e.getuserflow.com");const s="wss://"+t+"/end-users/"+this.clientToken+"/socket";this.socket=new e(s,{reconnectAfterMs:e=>[100,500,1e3,5e3][e-1]||1e4,timeout:2e4}),this.socket.connect(),this.socket.onOpen((()=>{rt("socket opened")})),this.socket.onClose((()=>{this.emit("private:disconnect")})),this.socket.onError((e=>{console.log("Userflow.js socket error",e),this.reportCspIssue()})),this.channel=this.socket.channel(`end_users:${this.externalId}`,(()=>this.makeChannelJoinPayload())),this.channel.join().receive("ok",(e=>{this.logrocketAppId=e.logrocketAppId,this.featureFlags=new Set(e.featureFlags),rt("channel joined"),"connected"!==this._socketStatus&&(this._socketStatus="connected")})).receive("error",(e=>{["company_closed","invalid_client_token","invalid_user_external_id","incorrect_user_signature","rate_limit_exceeded","user_signature_required"].includes(e.code)?(console.error(`Userflow.js resetting due to: [${e.code}] ${e.message}`),this.reset(),this.clientToken=null):"invalid_protocol_version"===e.code?(console.error(`Userflow.js destroying due to: [${e.code}] ${e.message}`),this.destroy()):console.log("Userflow.js channel join error",e)})),this.channel.on("server_message",(e=>this.handleServerMessage(e))),this.channel.on("server_error",(e=>{console.log(`Userflow.js server error (${e.code}): ${e.message}`+(e.details&&e.details.length>0?"\nDetails:\n"+e.details.map((e=>(e.path?`${e.path}: `:"")+e.message)):""))}))}makeChannelJoinPayload(){const e=this.buildClientContext();this.clientContext=e;const t={protocolVersion:2,userflowClientBuild:"1007772",signature:this.signature,groupExternalId:this.groupId,groupSignature:this.groupSignature,flowSessionId:this.flowSession?.id||null,checklistSessionId:this.checklistSession?.id||null,bannerSessionId:this.bannerSession?.id||null,resourceCenterSessionId:this.resourceCenterSession?.id||null,launchers:this.launcherSessions.map((e=>({flowId:e.flow.id}))),trackers:Array.from(this.trackers.values()).map((e=>({flowId:e.tracker.flowId}))),hasDraftSession:this.hasDraftSession(),clientConditions:Array.from(this.clientConditions.values()).map((e=>({conditionId:e.condition.id,isTrue:e.isTrue}))),previewFlowId:c.getItem("previewFlowId"),clientContext:e};return rt("channel join payload",t),t}disconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.socket&&this.socket.disconnect(),this._socketStatus="disconnected",this.socket=null,this.channel=null}debounceInactiveDisconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.debounceInactiveDisconnectTimeout=window.setTimeout((()=>{this.hasDraftSession()||this.assistantMessageInProgress?this.debounceInactiveDisconnect():(rt("disconnecting from socket due to inactivity"),this.disconnect())}),3e5)}hasDraftSession(){return!!this.flowSession?.draftMode||!!this.checklistSession?.draftMode||!!this.bannerSession?.draftMode||!!this.resourceCenterSession?.draftMode||this.launcherSessions.some((e=>e.draftMode))}async send(e,{batch:t,endBatch:s,handlesRejection:i}={}){return this.inBatch&&["ToggleClientCondition","UpdateClientContext"].includes(e.kind)||this.checkPushRateLimit(),this.ensureConnected(),t&&!this.inBatch&&(this.inBatch=!0,this.sendRaw({kind:"BeginBatch"})),this.inBatch&&(window.clearTimeout(this.endBatchTimeout),s?this.endBatch():this.endBatchTimeout=window.setTimeout((()=>{this.endBatch()}),50)),this.sendRaw(e,{handlesRejection:i})}async sendRaw(e,{handlesRejection:t}={}){return new Promise(((s,i)=>{if(!this.channel){const s=`Userflow.js: send() should not be called if channel is not set. Message kind=${e.kind}`;if(t)throw Error(s);return void console.log(s,"\nClient message:",e)}rt(`push ${e.kind} message`,e);const n=this.clientClock,r=()=>{this.serverClock=n,this.channel?.off("phx_error",a)},a=this.channel.on("phx_error",(s=>{r();const n=`Userflow.js send ${e.kind} got phx_error`;"connected"===this._socketStatus&&console.log(n,"\nClient message:",e,"\nError:",s),t&&i(new o(n))}));this.channel.push("client_message",e).receive("ok",(e=>{r(),s(e)})).receive("error",(s=>{r();const n=`Userflow.js error reply (${s.code}): ${s.message}`;console.log(n,"\nClient message:",e,"\nError:",s),t&&i(new o(n,s.code,s.message))}))}))}endBatch(){this.inBatch=!1,this.sendRaw({kind:"EndBatch"})}checkPushRateLimit(){const e=Date.now();if(this.pushRateLimitMinuteExpires<e&&(this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=e+6e4),this.pushRateLimitMinute>=100)throw new o("This Userflow.js client has reached a maximum of 100 operations in the last 1 minute. This is usually due to one of the following:\n\n - Excessive calls to Userflow.js. Check if any of userflow.track(), userflow.identify(), userflow.updateUser() or similar are called repeatedly.\n - The URL changing too frequently. Look into https://userflow.com/docs/userflow-js#seturlfilter and filter out the changing part of the URL.\n - The user legitimately being very active, in which case you can just ignore this error.\n \n If in doubt, reach out to us at support@userflow.com.");this.pushRateLimitMinute++}handleServerMessage(e){rt(`received ${e.kind} message`,e);const{serverClock:t,flowSession:s,flowSessionClock:i,checklistSession:n,checklistSessionClock:o,bannerSession:r,resourceCenterSession:a}=this;switch(e.kind){case"CheckSessionsAck":case"ServerDebug":return;case"AddLauncher":{const{session:t}=e,s=this.launcherSessions.findIndex((e=>e.flow.id===t.flow.id));return this.launcherSessions=-1===s?[...this.launcherSessions,t]:[...this.launcherSessions.slice(0,s),t,...this.launcherSessions.slice(s+1)],void this.toggleUI()}case"AddTracker":return void this.addTracker(e.tracker);case"AssistantMessageEventWrapper":return void this.emit("private:assistantMessageEvent",e);case"CancelConditionWaitTimer":return window.clearTimeout(this.conditionWaitTimers.get(e.conditionId)),void this.conditionWaitTimers.delete(e.conditionId);case"ChecklistTaskCompleted":return void this.unackedTasks.add(e.taskCvid);case"ForceGoToStep":return i>t?void rt(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&this.emit("gotostep",{session:s,step:{id:e.stepId}}));case"RemoveLauncher":return void(this.removeLauncher(e.flowId)&&this.toggleUI());case"RemoveTracker":return void this.removeTracker(e.flowId);case"SetBannerSession":return this.setBannerSession(e.session),void this.toggleUI();case"SetChecklistSession":return void(o<=t||n?.id===e.session.id?(this.setChecklistSession(e.session,t),this.toggleUI()):rt(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`));case"SetFlowSession":return void(i<=t||s?.id===e.session.id?(this.setFlowSession(e.session,t),this.toggleUI()):rt(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`));case"SetResourceCenterSession":return this.setResourceCenterSession(e.session),void this.toggleUI();case"StartConditionWaitTimer":if(!this.conditionWaitTimers.has(e.conditionId)){const t=window.setTimeout((()=>{this.conditionWaitTimers.delete(e.conditionId),this.send({kind:"FireConditionWaitTimer",conditionId:e.conditionId},{batch:!0})}),1e3*parseFloat(e.waitTime));this.conditionWaitTimers.set(e.conditionId,t)}return;case"TestStartConditionSuccess":return void this.emit("private:testStartConditionSuccess");case"TrackClientCondition":return void this.trackClientCondition(e.condition);case"UnsetBannerSession":return void(r?.id===e.sessionId&&(this.setBannerSession(null),this.toggleUI()));case"UnsetChecklistSession":return o>t?void rt(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`):void(n?.id===e.sessionId&&(this.setChecklistSession(null,t),this.toggleUI()));case"UnsetFlowSession":return i>t?void rt(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&(this.setFlowSession(null,t),this.toggleUI()));case"UnsetResourceCenterSession":return void(a?.id===e.sessionId&&(this.setResourceCenterSession(null),this.toggleUI()));case"UntrackClientCondition":return void this.untrackClientCondition(e.conditionId);default:return void console.warn("Userflow.js: Received unknown message",e)}}async identify(e,t={},{signature:s}={}){if(rt("identify",e),this.ensureInit(),this.testUserIdentified&&e!==this.externalId)rt("identify() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.identify: First argument must be a non-empty string representing the user's ID in your database. Value received: ${JSON.stringify(e)}`);this.externalId&&e!==this.externalId&&(rt("identify resetting due to new externalId"),this.reset()),this.externalId=e,this.signature=s||null,this.observeUserActivity(),await Promise.all([this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(t)},{batch:!0}),this.onFirstIdentify()]),this.emit("private:identified")}}async identifyAnonymous(e={},s={}){if(!a.isSupported())throw new o("userflow.identifyAnonymous() is not supported when localStorage access is denied.");const i="anonymousId";let n=a.getItem(i);n||(n="anon-"+t(),a.setItem(i,n)),await this.identify(n,e,s)}async updateUser(e={},t={}){rt("updateUser"),this.ensureIdentified(),await this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(e)},{batch:!0})}async group(e,t={},{signature:s,membership:i}={}){if(rt("group",e),this.ensureIdentified(),this.testUserIdentified&&e!==this.groupId)rt("group() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.group: First argument must be a non-empty string representing the group's ID in your database. Value received: ${JSON.stringify(e)}`);this.groupId=e,this.groupSignature=s||null,await this.send({kind:"UpsertGroup",groupExternalId:e,groupSignature:this.groupSignature,groupAttributes:this.normalizeAttributes(t),membershipAttributes:this.normalizeAttributes(i)},{batch:!0})}}async updateGroup(e={},t={}){rt("updateGroup");const s=this.ensureGroup();await this.send({kind:"UpsertGroup",groupExternalId:s,groupSignature:this.groupSignature,membershipAttributes:this.normalizeAttributes(t.membership),groupAttributes:this.normalizeAttributes(e)},{batch:!0})}normalizeAttributes(e){if(null==e)return{};if("object"!=typeof e)throw new o("Userflow: 'attributes' must be an object.");const t={};for(const s in e){if(!e.hasOwnProperty(s))continue;if("traits"===s){const i=e[s];Object.assign(t,this.extractLegacyTraits(i));continue}let i=e[s];if("string"==typeof i||"number"==typeof i||"boolean"==typeof i||null==i||Array.isArray(i))t[s]=this.normalizeAttributeLiteralOrList(s,i);else{if("object"!=typeof i||null==i)throw new o(`Userflow: Invalid value for '${s}' attribute.`);if("set"in i)t[s]={set:this.normalizeAttributeLiteralOrList(s,i.set),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("set_once"in i||"setOnce"in i)t[s]={setOnce:this.normalizeAttributeLiteralOrList(s,i.set_once??i.setOnce),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("add"in i){const e=i.add;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'add' value for '${s}' attribute. Must be a number or string.`);t[s]={add:e}}else if("subtract"in i){const e=i.subtract;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'subtract' value for '${s}' attribute. Must be a number or string.`);t[s]={subtract:e}}else if("append"in i)t[s]={append:this.normalizeAttributeLiteralOrList(s,i.append)};else if("prepend"in i)t[s]={prepend:this.normalizeAttributeLiteralOrList(s,i.prepend)};else{if(!("remove"in i))throw new o(`Userflow: Invalid value for '${s}' attribute.`);t[s]={remove:this.normalizeAttributeLiteralOrList(s,i.remove)}}}}return t}normalizeAttributeLiteralOrList(e,t){return Array.isArray(t)?t.map((t=>this.normalizeAttributeLiteral(e,t))):this.normalizeAttributeLiteral(e,t)}normalizeAttributeLiteral(e,t){if(null==t)return null;if("string"==typeof t||"number"==typeof t||"boolean"==typeof t)return t;throw new o(`Userflow: Invalid value for '${e}' attribute.`)}normalizeDataType(e,t){if(!t)return null;switch(t){case"string":return y.STRING;case"number":return y.NUMBER;case"boolean":return y.BOOLEAN;case"datetime":return y.DATETIME}throw new o(`Userflow: Invalid data_type for '${e}' attribute.`)}extractLegacyTraits(e){if(!e)return{};if(!Array.isArray(e)){const t=[];for(const s in e)e.hasOwnProperty(s)&&t.push({name:s,value:e[s]});e=t}return e.reduce(((e,{name:t,value:s,dataType:i})=>{if("string"!=typeof t||t.length>100||!t.match(/^[a-z0-9_]+$/))return this.warn("Userflow.identify: Invalid trait name (must be string, no more than 100 characters, and only consist of a-z, 0-9 and underscores). The trait will be ignored. Name was:",t),e;if("string"==typeof s);else if("boolean"==typeof s)i||(i="boolean"),s=s?"true":"false";else{if("number"!=typeof s)return this.warn(`userflow.identify: The value of trait '${t}' is invalid (must be a string, a boolean or a number). The trait will be ignored. Value was:`,s),e;i||(i=Number.isInteger(s)?"integer":"decimal"),s=String(s)}let n=null;if(i)switch(i){case"string":n=y.STRING;break;case"boolean":n=y.BOOLEAN;break;case"integer":case"decimal":n=y.NUMBER;break;case"datetime":n=y.DATETIME;break;default:return this.warn(`userflow.identify: The data type of trait '${t}' is invalid (must be a 'string', 'boolean', 'integer', 'decimal' or 'datetime'). The trait will be ignored. Data type was:`,i),e}return e[t]={set:s,dataType:n},e}),{})}async track(e,t={},{userOnly:s}={}){rt(`track '${e}'`,t),this.ensureIdentified(),await this.send({kind:"TrackEvent",userOnly:!!s,name:e,attributes:this.normalizeEventAttributes(t)},{batch:!0})}normalizeEventAttributes(e){const t=this.normalizeAttributes(e);for(const s in t){if(!t.hasOwnProperty(s))continue;const e=t[s];if(null!=e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Array.isArray(e)&&!("set"in e))throw new o(`Userflow: Invalid value for '${s}' attribute. Event attributes only support literal values, list values and 'set' changes.`)}return t}onFirstIdentify(){this.onFirstIdentifyRun||(this.onFirstIdentifyRun=!0,this.onFirstIdentifyTimeout=window.setTimeout((()=>{this.trackPageViewed(),this.firstIdentifyCallback?(this.firstIdentifyCallback(),this.firstIdentifyCallback=null):this.checkUrlForStartFlow()}),0))}onceIdentified(e){this.isIdentified()?e():this.firstIdentifyCallback=e}checkUrlForStartFlow(){const e=new URL(d()),t=e.searchParams.get("userflow")||e.searchParams.get("studio1_flow")||e.searchParams.get("studio1_walkthrough");t&&(rt(`url contained flow ${t}`),this.startFlow({flowId:t,startReason:L.LINK,batch:!0}),e.searchParams.delete("userflow"),e.searchParams.delete("studio1_flow"),e.searchParams.delete("studio1_walkthrough"),window.history.replaceState({},"",e.toString()),this.clientContext=this.buildClientContext(),this.pushUpdateClientContext())}flushUrlChange(){const e=this.buildClientContext();this.clientContext&&e.pageUrl===this.clientContext.pageUrl||(this.clientContext=e,this.pushUpdateClientContext(),this.trackPageViewed(),this.checkUrlForStartFlow())}async trackPageViewed(){this.pageTrackingDisabled||this.track("page_viewed",{})}buildClientContext(){return{pageUrl:it(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}}pushUpdateClientContext(){this.send({kind:"UpdateClientContext",clientContext:this.clientContext},{batch:!0})}ackCompletedTask(e){this.unackedTasks.delete(e)}taskIsUnacked(e){return this.unackedTasks.has(e)}isIdentified(){return null!=this.externalId}on(e,t){let s=this.listeners.get(e);s||(s=new Set,this.listeners.set(e,s)),s.add(t)}off(e,t){const s=this.listeners.get(e);s&&s.delete(t)}emit(e,...t){const s=this.listeners.get(e);if(s){Array.from(s).forEach((e=>e(...t)))}}observeUserActivity(){document.addEventListener("mouseover",this.onUserActivity),document.addEventListener("pointerdown",this.onUserActivity),document.addEventListener("keydown",this.onUserActivity)}unobserveUserActivity(){document.removeEventListener("mouseover",this.onUserActivity),document.removeEventListener("pointerdown",this.onUserActivity),document.removeEventListener("keydown",this.onUserActivity)}reset(){rt("reset"),this.externalId=null,this.groupId=null,this.sessionStorageState=null,this.setFlowSession(null,0),this.setChecklistSession(null,0),this.setBannerSession(null),this.setResourceCenterSession(null),this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.unackedTasks=new Set,this.onFirstIdentifyRun=!1,window.clearTimeout(this.onFirstIdentifyTimeout),this.onFirstIdentifyTimeout=void 0,this.clientContext=null,this.unobserveUserActivity(),window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=void 0,this.clientConditions.forEach(((e,t)=>{this.untrackClientCondition(t)})),this.firstIdentifyCallback=null,this.testUserIdentified=!1,a.removeItem("anonymousId"),this.unmountUI(),this.disconnect(),this.inBatch=!1,window.clearTimeout(this.endBatchTimeout),this.endBatchTimeout=void 0,this.clientClock=1,this.serverClock=1,this.titleMonitored=void 0,this.titleObserver&&(this.titleObserver.disconnect(),this.titleObserver=void 0)}async startFlow({flowId:e,stepCvid:t,startReason:s,once:i,batch:n,replaceCurrent:o}){if(this.ensureIdentified(),o&&this.flowSession&&this.endFlow(this.flowSession,{endReason:m.REPLACED,batch:!0}),rt(`startFlow ${e}`,{startReason:s}),this.checklistSession?.flow.id===e)return rt("startFlow matches current checklist, so showing it instead"),void this.showChecklist();const r={kind:"StartFlow",flowId:e,stepCvid:t,startReason:s,once:!!i};await this.send(r,{batch:n})}async startFlowWithToken(e){this.ensureIdentified(),rt("startFlowWithToken",{token:e}),await this.send({kind:"StartFlowWithToken",token:e},{batch:!0})}optimisticClockUIUpdate(e){this.clientClock++,e(),this.toggleUI()}async showChecklist(){this.resourceCenterEmbedsChecklist()?this.openResourceCenter():(this.unmarkExpandPending(),this.checklistSession&&!this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!0,this.toggleUI(),c.setItem(`checklistExpanded:${this.checklistSession.id}`,"1"),await this.send({kind:"ShowChecklist",sessionId:this.checklistSession.id},{batch:!0})))}async hideChecklist(){this.resourceCenterEmbedsChecklist()?this.closeResourceCenter():this.checklistSession&&this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!1,this.toggleUI(),c.removeItem(`checklistExpanded:${this.checklistSession.id}`),await this.send({kind:"HideChecklist",sessionId:this.checklistSession.id},{batch:!0}))}async unmarkExpandPending(){this.checklistSession&&this.checklistExpandPending&&(this.checklistExpandPending=!1,await this.send({kind:"UnmarkExpandPending",sessionId:this.checklistSession.id},{batch:!0}))}async openResourceCenter(){this.resourceCenterEmbedsChecklist()&&this.unmarkExpandPending(),this.resourceCenterSession&&!this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!0,this.toggleUI(),this.emit("resourceCenterChanged"),c.setItem(`resourceCenterOpen:${this.resourceCenterSession.id}`,"1"),await this.send({kind:"OpenResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}async closeResourceCenter(){this.resourceCenterSession&&this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!1,this.toggleUI(),this.emit("resourceCenterChanged"),c.removeItem(`resourceCenterOpen:${this.resourceCenterSession.id}`),await this.send({kind:"CloseResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}toggleResourceCenter(){this.resourceCenterOpen?this.closeResourceCenter():this.openResourceCenter()}setResourceCenterLauncherHidden(e){this.resourceCenterLauncherHidden=e,this.toggleUI()}getResourceCenterState(){if(!this.resourceCenterSession)return null;const e=this.resourceCenterEmbedsChecklist(),{checklistSession:t}=this,s=this.resourceCenterSession.version.resourceCenter?.blocks.find((e=>e.type===Ie.ANNOUNCEMENTS));return{isOpen:this.resourceCenterOpen,hasChecklist:e,uncompletedChecklistTaskCount:e&&t?dt(t):0,unreadAnnouncementCount:s?.unreadAnnouncementCount||0}}resourceCenterEmbedsChecklist(){const e=this.resourceCenterSession;return!!e&&!!e.version.resourceCenter?.blocks.some((e=>e.type===Ie.CHECKLIST))}async endFlow(e,{endReason:t,batch:s}){this.ensureIdentified(),this.optimisticClockUIUpdate((()=>{const{clientClock:t}=this;this.flowSession?.id===e.id&&this.setFlowSession(null,t),this.checklistSession?.id===e.id&&this.setChecklistSession(null,t),this.bannerSession?.id===e.id&&this.setBannerSession(null),this.resourceCenterSession?.id===e.id&&this.setResourceCenterSession(null)}));const{flow:i}=e,n={id:i.id,type:i.type.toLowerCase()};i.type===_.CHECKLIST?this.emit("checklistEnded",{checklist:n,endReason:t}):i.type===_.FLOW&&this.emit("flowEnded",{flow:n,endReason:t});const o={kind:"EndFlow",sessionId:e.id,endReason:t};await this.send(o,{batch:s})}async goToStep(e,t){rt("goToStep",e.id,t.name||t.id),this.ensureIdentified();const s=this.send({kind:"GoToStep",sessionId:e.id,stepId:t.id});e.currentStep=t,this.emit("gotostep",{session:e,step:t}),await s}async endAllFlows(){rt("endAllFlows"),this.optimisticClockUIUpdate((()=>{const{clientClock:e}=this;this.setFlowSession(null,e),this.setChecklistSession(null,e)})),await this.send({kind:"EndAllFlows"})}async endChecklist(){rt("endChecklist");const e=this.checklistSession||this.flowSession;e?.flow.type===_.CHECKLIST&&this.endFlow(e,{endReason:m.USERFLOWJS})}setFlowSession(e,t=this.clientClock){const s=this.flowSession;this.flowSession=e,this.flowSessionClock=t,e&&!s&&(this.hideChecklist(),this.closeResourceCenter()),null==e&&this.originalActiveElement&&("function"==typeof this.originalActiveElement.focus&&this.originalActiveElement.focus(),this.originalActiveElement=void 0)}setChecklistSession(e,t=this.clientClock){const s=this.checklistSession;this.checklistSession=e,this.checklistSessionClock=t,null===e&&(this.checklistExpanded=!1,this.checklistExpandPending=!1),e&&e.id!==s?.id&&(this.checklistExpanded=!!c.getItem(`checklistExpanded:${e.id}`),e.expandPending&&(this.checklistExpandPending=!0)),this.emit("checklistChanged"),this.emit("resourceCenterChanged")}setBannerSession(e){this.bannerSession=e}setResourceCenterSession(e){const t=this.resourceCenterSession;e="function"==typeof e?e(this.resourceCenterSession):e,this.resourceCenterSession=e,null===e&&(this.resourceCenterOpen=!1),t&&t.id!==e?.id&&c.removeItem(`resourceCenterOpen:${t.id}`),e&&e.id!==t?.id&&(this.resourceCenterOpen=!!c.getItem(`resourceCenterOpen:${e.id}`)),this.emit("resourceCenterChanged")}launcherSeen(e){this.send({kind:"StartFlow",flowId:e,startReason:L.LAUNCHER_SEEN,once:!1})}activateLauncher(e){const t=this.activeLauncherFlowId&&this.launcherSessions.find((e=>e.flow.id===this.activeLauncherFlowId));t&&this.deactivateLauncher(t),this.activeLauncherFlowId=e.flow.id,this.toggleUI(),this.send({kind:"ActivateLauncher",flowId:e.flow.id})}deactivateLauncher(e){const{launcher:t}=e.version;e.flow.id===this.activeLauncherFlowId&&(t?.dismissOn===_e.DEACTIVATE?this.dismissLauncher(e,{endReason:m.LAUNCHER_DEACTIVATED}):(this.activeLauncherFlowId=null,this.toggleUI()))}dismissLauncher(e,{endReason:t}){const s=e.flow.id;this.removeLauncher(s),this.toggleUI(),this.send({kind:"DismissLauncher",flowId:s,endReason:t})}removeLauncher(e){const t=this.launcherSessions.findIndex((t=>t.flow.id===e));return-1!==t&&(this.launcherSessions=[...this.launcherSessions.slice(0,t),...this.launcherSessions.slice(t+1)],e===this.activeLauncherFlowId&&(this.activeLauncherFlowId=null),!0)}async toggleUI(){const e=this.getSessionStorageState();this.flowSession||!this.checklistExpandPending&&!this.checklistSession?.version.checklist?.tasks.some((e=>this.taskIsUnacked(e.cvid)))||this.showChecklist(),e.isTargetTab&&this.monitorTitle(),this.emit("uistatechange"),this.shouldBeMounted()?await this.mountUI():this.unmountUI()}shouldBeMounted(){if(this.uiDisabled)return!1;return!!this.getSessionStorageState().activeApp||!!this.flowSession||!!this.checklistSession&&(this.checklistExpanded||!!this.checklistSession?.version.checklist?.launcherEnabled)||!!this.bannerSession||!!this.resourceCenterSession&&(this.resourceCenterOpen||!this.resourceCenterLauncherHidden)||this.launcherSessions.length>0||this.notifications.length>0}async mountUI(){if(!this.ui){const e=await this.createUI();this.shouldBeMounted()&&!this.ui&&(rt("mount UI"),this.ui=e,this.ui.mount())}}unmountUI(){this.ui&&(rt("unmount UI"),this.ui.unmount(),this.ui=null)}remount(){this.unmountUI(),this.toggleUI()}async createUI(){try{const e=n((()=>import("./ui.js")),[new URL("ui.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString()]);this.bannerSession&&Et(),this.resourceCenterSession&&lt();const{RealUI:t}=await e;return new t(this)}catch(St){throw this.reportCspIssue(),St}}async trackClientCondition(e){if(this.clientConditions.has(e.id))return;rt("track client condition",e),this.clientConditions.set(e.id,{condition:e,isTrue:null});const{conditionTypes:t}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.v}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),s=t[e.type],i=this.clientConditions.get(e.id);i&&(i.untrack=s.track({sessionData:new ht([]),condition:e,callback:t=>{i.isTrue!==t&&(rt("client condition truthiness changed",t,i.condition),i.isTrue=t,this.send({kind:"ToggleClientCondition",conditionId:e.id,isTrue:t},{batch:!0}))}}))}untrackClientCondition(e){const t=this.clientConditions.get(e);t&&(rt("untrack client condition",t.condition),t.untrack&&t.untrack(),this.clientConditions.delete(e))}async addTracker(e){let t=this.trackers.get(e.flowId);t?t.tracker=e:this.trackers.set(e.flowId,{tracker:e,isTrue:!1});const{conditionTypes:s}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.v}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),i=this.trackers.get(e.flowId);if(!i)return;const{tracker:o}=i,{condition:r}=o,a=s[r.type];i.untrack&&i.untrack(),i.untrack=a.track({sessionData:new ht(o.data),condition:r,flipBackEvents:!0,callback:e=>{const t=i.isTrue;i.isTrue=e,!t&&e&&this.send({kind:"TrackTrackerEvent",token:o.token},{batch:!0})},description:`event tracker ${o.flowId}`}),this.emit("private:trackerStarted")}removeTracker(e){const t=this.trackers.get(e);t&&(t.untrack&&t.untrack(),this.trackers.delete(e),this.emit("private:trackerStopped"))}monitorTitle(){if(this.titleMonitored)return;this.titleMonitored=!0,this.fixTitle();const e=document.querySelector("title");if(e){const t=new MutationObserver((()=>{this.fixTitle()}));t.observe(e,{childList:!0}),this.titleObserver=t}}fixTitle(){const e=document.title,t="[Userflow Preview] "+e.replace(/\[Userflow Preview\] /,"");e!==t&&(document.title=t)}reportCspIssue(){const e=this.getSessionStorageState();!this.testUserIdentified&&!e.activeApp||this.cspIssueReported||(this.cspIssueReported=!0,rt("csp issue detected"),T({kind:"userflow:crxCspIssueDetected"}))}getAudio(){return this.audio||(this.audio=new Audio),this.audio}playAudio(e){if(document.hidden)return;const t=this.getAudio();e&&(t.src=e);const s=t.play();this.audioReady=!0,s&&s.catch((e=>{e.name}))}pauseAudio(){const e=this.audio;e&&!e.paused&&e.pause()}async getStepSpeech(e,t){return(await this.send({kind:"GetStepSpeechV2",syntheticVoice:e,text:t})).url}featureFlagEnabled(e){return this.featureFlags.has(e)}showNotification(e,t,s){const i={id:++this.notificationIdCounter,label:e,message:t,type:s};this.notifications=[...this.notifications,i],this.toggleUI()}dismissNotification(e){this.notifications=this.notifications.filter((t=>t.id!==e)),this.toggleUI()}warn(...e){console.warn(...e)}nextRef(){return this.refCounter++}}if(void 0===window.userflow||window.userflow._stubbed){const e=Object.assign(window.userflow||{},function(){const e=new ft;return{_stubbed:!1,init(t){e.init(t)},identify:(t,s={},i={})=>e.identify(t,s,i),identifyAnonymous:(t={},s={})=>e.identifyAnonymous(t,s),isIdentified:()=>e.isIdentified(),updateUser:(t,s={})=>e.updateUser(t,s),group:(t,s={},i={})=>e.group(t,s,i),updateGroup:(t,s={})=>e.updateGroup(t,s),track:(t,s={},i={})=>e.track(t,s,i),start:(t,{once:s}={})=>e.startFlow({flowId:t,startReason:L.USERFLOWJS,once:s}),startFlow:e=>(console.warn("Userflow.js: userflow.startFlow() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),startWalk:e=>(console.warn("Userflow.js: userflow.startWalk() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),endAll:()=>e.endAllFlows(),endChecklist:()=>e.endChecklist(),endAllFlows:()=>window.userflow.endAll(),async endFlow(){console.warn("Userflow.js: userflow.endFlow() has been deprecated and no longer has any effect.")},async endWalk(){console.warn("Userflow.js: userflow.endWalk() has been deprecated and no longer has any effect.")},openResourceCenter(){e.openResourceCenter()},closeResourceCenter(){e.closeResourceCenter()},toggleResourceCenter(){e.toggleResourceCenter()},setResourceCenterLauncherHidden(t){e.setResourceCenterLauncherHidden(t)},getResourceCenterState:()=>e.getResourceCenterState(),setWalkPosition(){console.warn("Userflow.js: userflow.setWalkPosition() has been deprecated and no longer has any effect.")},reset(){e.reset()},remount(){e.remount()},on(t,s){e.on(t,s)},off(t,s){e.off(t,s)},setCustomInputSelector(e){console.warn("Userflow.js: userflow.setCustomInputSelector() has been deprecated. Use userflow.registerCustomInput() instead. See docs: https://userflow.com/docs/userflow-js"),e&&et.customInputs.push({cssSelector:e})},registerCustomInput(e,t){et.customInputs.push({cssSelector:e,getValue:t})},setCustomNavigate(e){et.customNavigate=e},setUrlFilter(e){et.urlFilter=e},setLinkUrlDecorator(t){et.linkUrlDecorator=t,e.emit("uistatechange")},setInferenceAttributeNames(e){et.inferenceAttributeNames=e},setInferenceAttributeFilter(e,t){et.inferenceAttributeFilters[e]=tt(t)},setInferenceClassNameFilter(e){et.inferenceClassNameFilters=tt(e)},setScrollPadding(e){et.scrollPadding=e},setCustomScrollIntoView(e){et.customScrollIntoView=e},prepareAudio(){e.playAudio(null)},setShadowDomEnabled(e){console.warn("Userflow.js: userflow.setShadowDomEnabled() has been deprecated. Please remove this call from your Userflow.js snippet. Shadow DOM is supported by default now.")},setPageTrackingDisabled(t){e.pageTrackingDisabled=t},setBaseZIndex(e){et.baseZIndex=e},setServerEndpoint(e){et.serverEndpoint=e},disableEvalJs(){et.evalJsDisabled=!0},_setTargetEnv(t){e.setTargetEnv(t)}}}());window.userflow=e,window.studio1=e,function(){const e=window.userflow,t=window.USERFLOWJS_QUEUE;if(delete window.USERFLOWJS_QUEUE,!t||0===t.length)return;rt(`processing ${t.length} items in the queue`);for(const[s,i,n]of t){if("function"!=typeof e[s]){console.error(`Userflow.js: Invalid method '${s}' in queue`);continue}const t=e[s](...n);i&&t&&"function"==typeof t.then&&t.then(i.resolve,i.reject)}rt("queue processed")}()}export{Ye as $,Ne as A,Et as B,me as C,W as D,m as E,P as F,Y as G,a as H,Ve as I,X as J,ne as K,ce as L,Q as M,K as N,de as O,He as P,ye as Q,lt as R,L as S,ut as T,o as U,re as V,De as W,We as X,Fe as Y,Pe as Z,n as _,B as a,N as a0,F as b,et as c,rt as d,D as e,H as f,it as g,Ie as h,c as i,dt as j,se as k,ee as l,ue as m,Ae as n,p as o,_ as p,Le as q,d as r,l as s,st as t,g as u,Te as v,Se as w,pe as x,ht as y,V as z};export default window.userflow;
2
2
  //# sourceMappingURL=userflow.js.map
package/vendor.react.js CHANGED
@@ -1,4 +1,4 @@
1
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="14f83edc-848d-4444-9227-3eebddc4b619",e._sentryDebugIdIdentifier="sentry-dbid-14f83edc-848d-4444-9227-3eebddc4b619")}catch(r){}}();import{o as e}from"./vendor.object-assign.js";function t(e){var t={exports:{}};return e(t,t.exports),t.exports
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="04609e7d-de6e-4790-a071-663bec5dcb3d",e._sentryDebugIdIdentifier="sentry-dbid-04609e7d-de6e-4790-a071-663bec5dcb3d")}catch(r){}}();import{o as e}from"./vendor.object-assign.js";function t(e){var t={exports:{}};return e(t,t.exports),t.exports
2
2
  /** @license React v17.0.2
3
3
  * react.production.min.js
4
4
  *
@@ -6,5 +6,5 @@
6
6
  *
7
7
  * This source code is licensed under the MIT license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
- */}("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"d204505636d488da91c152de2e1cbd11c79f060d"};var r=t((function(t,r){var n=60103,o=60106;r.Fragment=60107,r.StrictMode=60108,r.Profiler=60114;var u=60109,f=60110,i=60112;r.Suspense=60113;var a=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var s=Symbol.for;n=s("react.element"),o=s("react.portal"),r.Fragment=s("react.fragment"),r.StrictMode=s("react.strict_mode"),r.Profiler=s("react.profiler"),u=s("react.provider"),f=s("react.context"),i=s("react.forward_ref"),r.Suspense=s("react.suspense"),a=s("react.memo"),c=s("react.lazy")}var l="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r<arguments.length;r++)t+="&args[]="+encodeURIComponent(arguments[r]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var d={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},y={};function v(e,t,r){this.props=e,this.context=t,this.refs=y,this.updater=r||d}function _(){}function h(e,t,r){this.props=e,this.context=t,this.refs=y,this.updater=r||d}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},_.prototype=v.prototype;var b=h.prototype=new _;b.constructor=h,e(b,v.prototype),b.isPureReactComponent=!0;var m={current:null},w=Object.prototype.hasOwnProperty,g={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,r){var o,u={},f=null,i=null;if(null!=t)for(o in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(f=""+t.key),t)w.call(t,o)&&!g.hasOwnProperty(o)&&(u[o]=t[o]);var a=arguments.length-2;if(1===a)u.children=r;else if(1<a){for(var c=Array(a),s=0;s<a;s++)c[s]=arguments[s+2];u.children=c}if(e&&e.defaultProps)for(o in a=e.defaultProps)void 0===u[o]&&(u[o]=a[o]);return{$$typeof:n,type:e,key:f,ref:i,props:u,_owner:m.current}}function E(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var $=/\/+/g;function k(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function R(e,t,r,u,f){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var a=!1;if(null===e)a=!0;else switch(i){case"string":case"number":a=!0;break;case"object":switch(e.$$typeof){case n:case o:a=!0}}if(a)return f=f(a=e),e=""===u?"."+k(a,0):u,Array.isArray(f)?(r="",null!=e&&(r=e.replace($,"$&/")+"/"),R(f,t,r,"",(function(e){return e}))):null!=f&&(E(f)&&(f=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(f,r+(!f.key||a&&a.key===f.key?"":(""+f.key).replace($,"$&/")+"/")+e)),t.push(f)),1;if(a=0,u=""===u?".":u+":",Array.isArray(e))for(var c=0;c<e.length;c++){var s=u+k(i=e[c],c);a+=R(i,t,r,s,f)}else if("function"==typeof(s=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=l&&e[l]||e["@@iterator"])?e:null}(e)))for(e=s.call(e),c=0;!(i=e.next()).done;)a+=R(i=i.value,t,r,s=u+k(i,c++),f);else if("object"===i)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return a}function C(e,t,r){if(null==e)return e;var n=[],o=0;return R(e,n,"","",(function(e){return t.call(r,e,o++)})),n}function j(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var x={current:null};function P(){var e=x.current;if(null===e)throw Error(p(321));return e}var I={ReactCurrentDispatcher:x,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:m,IsSomeRendererActing:{current:!1},assign:e};r.Children={map:C,forEach:function(e,t,r){C(e,(function(){t.apply(this,arguments)}),r)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!E(e))throw Error(p(143));return e}},r.Component=v,r.PureComponent=h,r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,r.cloneElement=function(t,r,o){if(null==t)throw Error(p(267,t));var u=e({},t.props),f=t.key,i=t.ref,a=t._owner;if(null!=r){if(void 0!==r.ref&&(i=r.ref,a=m.current),void 0!==r.key&&(f=""+r.key),t.type&&t.type.defaultProps)var c=t.type.defaultProps;for(s in r)w.call(r,s)&&!g.hasOwnProperty(s)&&(u[s]=void 0===r[s]&&void 0!==c?c[s]:r[s])}var s=arguments.length-2;if(1===s)u.children=o;else if(1<s){c=Array(s);for(var l=0;l<s;l++)c[l]=arguments[l+2];u.children=c}return{$$typeof:n,type:t.type,key:f,ref:i,props:u,_owner:a}},r.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:f,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},r.createElement=S,r.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},r.createRef=function(){return{current:null}},r.forwardRef=function(e){return{$$typeof:i,render:e}},r.isValidElement=E,r.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:j}},r.memo=function(e,t){return{$$typeof:a,type:e,compare:void 0===t?null:t}},r.useCallback=function(e,t){return P().useCallback(e,t)},r.useContext=function(e,t){return P().useContext(e,t)},r.useDebugValue=function(){},r.useEffect=function(e,t){return P().useEffect(e,t)},r.useImperativeHandle=function(e,t,r){return P().useImperativeHandle(e,t,r)},r.useLayoutEffect=function(e,t){return P().useLayoutEffect(e,t)},r.useMemo=function(e,t){return P().useMemo(e,t)},r.useReducer=function(e,t,r){return P().useReducer(e,t,r)},r.useRef=function(e){return P().useRef(e)},r.useState=function(e){return P().useState(e)},r.version="17.0.2"})),n=t((function(e){e.exports=r}));export{t as c,n as r};
9
+ */}("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"5b790407ed8f88101811f71ed613d62ffc795aa1"};var r=t((function(t,r){var n=60103,o=60106;r.Fragment=60107,r.StrictMode=60108,r.Profiler=60114;var u=60109,f=60110,i=60112;r.Suspense=60113;var a=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var s=Symbol.for;n=s("react.element"),o=s("react.portal"),r.Fragment=s("react.fragment"),r.StrictMode=s("react.strict_mode"),r.Profiler=s("react.profiler"),u=s("react.provider"),f=s("react.context"),i=s("react.forward_ref"),r.Suspense=s("react.suspense"),a=s("react.memo"),c=s("react.lazy")}var l="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r<arguments.length;r++)t+="&args[]="+encodeURIComponent(arguments[r]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var d={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},y={};function v(e,t,r){this.props=e,this.context=t,this.refs=y,this.updater=r||d}function _(){}function h(e,t,r){this.props=e,this.context=t,this.refs=y,this.updater=r||d}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},_.prototype=v.prototype;var b=h.prototype=new _;b.constructor=h,e(b,v.prototype),b.isPureReactComponent=!0;var m={current:null},w=Object.prototype.hasOwnProperty,g={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,r){var o,u={},f=null,i=null;if(null!=t)for(o in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(f=""+t.key),t)w.call(t,o)&&!g.hasOwnProperty(o)&&(u[o]=t[o]);var a=arguments.length-2;if(1===a)u.children=r;else if(1<a){for(var c=Array(a),s=0;s<a;s++)c[s]=arguments[s+2];u.children=c}if(e&&e.defaultProps)for(o in a=e.defaultProps)void 0===u[o]&&(u[o]=a[o]);return{$$typeof:n,type:e,key:f,ref:i,props:u,_owner:m.current}}function E(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var $=/\/+/g;function k(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function R(e,t,r,u,f){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var a=!1;if(null===e)a=!0;else switch(i){case"string":case"number":a=!0;break;case"object":switch(e.$$typeof){case n:case o:a=!0}}if(a)return f=f(a=e),e=""===u?"."+k(a,0):u,Array.isArray(f)?(r="",null!=e&&(r=e.replace($,"$&/")+"/"),R(f,t,r,"",(function(e){return e}))):null!=f&&(E(f)&&(f=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(f,r+(!f.key||a&&a.key===f.key?"":(""+f.key).replace($,"$&/")+"/")+e)),t.push(f)),1;if(a=0,u=""===u?".":u+":",Array.isArray(e))for(var c=0;c<e.length;c++){var s=u+k(i=e[c],c);a+=R(i,t,r,s,f)}else if("function"==typeof(s=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=l&&e[l]||e["@@iterator"])?e:null}(e)))for(e=s.call(e),c=0;!(i=e.next()).done;)a+=R(i=i.value,t,r,s=u+k(i,c++),f);else if("object"===i)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return a}function C(e,t,r){if(null==e)return e;var n=[],o=0;return R(e,n,"","",(function(e){return t.call(r,e,o++)})),n}function j(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var x={current:null};function P(){var e=x.current;if(null===e)throw Error(p(321));return e}var I={ReactCurrentDispatcher:x,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:m,IsSomeRendererActing:{current:!1},assign:e};r.Children={map:C,forEach:function(e,t,r){C(e,(function(){t.apply(this,arguments)}),r)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!E(e))throw Error(p(143));return e}},r.Component=v,r.PureComponent=h,r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,r.cloneElement=function(t,r,o){if(null==t)throw Error(p(267,t));var u=e({},t.props),f=t.key,i=t.ref,a=t._owner;if(null!=r){if(void 0!==r.ref&&(i=r.ref,a=m.current),void 0!==r.key&&(f=""+r.key),t.type&&t.type.defaultProps)var c=t.type.defaultProps;for(s in r)w.call(r,s)&&!g.hasOwnProperty(s)&&(u[s]=void 0===r[s]&&void 0!==c?c[s]:r[s])}var s=arguments.length-2;if(1===s)u.children=o;else if(1<s){c=Array(s);for(var l=0;l<s;l++)c[l]=arguments[l+2];u.children=c}return{$$typeof:n,type:t.type,key:f,ref:i,props:u,_owner:a}},r.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:f,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},r.createElement=S,r.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},r.createRef=function(){return{current:null}},r.forwardRef=function(e){return{$$typeof:i,render:e}},r.isValidElement=E,r.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:j}},r.memo=function(e,t){return{$$typeof:a,type:e,compare:void 0===t?null:t}},r.useCallback=function(e,t){return P().useCallback(e,t)},r.useContext=function(e,t){return P().useContext(e,t)},r.useDebugValue=function(){},r.useEffect=function(e,t){return P().useEffect(e,t)},r.useImperativeHandle=function(e,t,r){return P().useImperativeHandle(e,t,r)},r.useLayoutEffect=function(e,t){return P().useLayoutEffect(e,t)},r.useMemo=function(e,t){return P().useMemo(e,t)},r.useReducer=function(e,t,r){return P().useReducer(e,t,r)},r.useRef=function(e){return P().useRef(e)},r.useState=function(e){return P().useState(e)},r.version="17.0.2"})),n=t((function(e){e.exports=r}));export{t as c,n as r};
10
10
  //# sourceMappingURL=vendor.react.js.map