@frigade/react 1.34.4 → 1.34.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import yt,{createContext as kp,useEffect as No,useState as Oe}from"react";import{ThemeProvider as Pp}from"styled-components";import St,{useContext as ep,useEffect as Ao,useState as dr}from"react";import{useCallback as gt,useContext as vl,useEffect as Bl}from"react";import jo,{useMemo as Ir}from"react";var Ar="1.34.4 ";var Ne="NOT_STARTED_STEP",Q="COMPLETED_FLOW",uo="ABORTED_FLOW",ft="STARTED_FLOW",$e="NOT_STARTED_FLOW",Me="COMPLETED_STEP",fo="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=jo.useContext(K);return{config:Ir(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Ar,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Ir(()=>`${o}/v1/public/`,[o])}}var gl="frigade-last-call-at-",xl="frigade-last-call-data-";function vt(){let{shouldGracefullyDegrade:e,readonly:t}=jo.useContext(K);return async(o,r)=>{if(t&&(r.method==="POST"||r.method==="PUT"||r.method==="DELETE"))return Pt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Pt();let i=gl+o,n=xl+o;if(window&&window.localStorage&&r&&r.body&&r.method==="POST"){let p=window.localStorage.getItem(i),c=window.localStorage.getItem(n);if(p&&c&&c==r.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Pt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,r.body)}let s;try{s=await fetch(o,r)}catch(p){return Pt(p)}return s?s.ok?s:Pt(s.statusText):Pt()}}function Pt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Bt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=jo.useContext(K);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as Fl,useState as Nr}from"react";import{useContext as Cl,useEffect as Sl,useState as yl}from"react";import bl from"swr";import{useContext as hl}from"react";function Pe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:r,completedFlowsToKeepOpenDuringSession:i}=hl(K);function n(d,x=!1){return e[d]??x}function s(d,x){t(y=>({...y,[d]:x}))}function p(d){t(x=>{let{[d]:y,...w}=x;return{...w}})}function c(d){i.includes(d)||r(x=>[...x,d])}function a(d){return i.includes(d)}function g(d){return Object.entries(e).some(([x,y])=>y&&x!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:g,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import wl from"swr/immutable";var Tl="unknown";function ve(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:r,organizationId:i,flows:n,setShouldGracefullyDegrade:s,readonly:p}=Cl(K),{resetOpenFlowState:c}=Pe(),[a,g]=yl(!1),d={data:n.map(F=>({flowId:F.id,flowState:Q,lastStepId:null,userId:r,foreignUserId:r,stepStates:{},shouldTrigger:!1}))},x=F=>fetch(F,e).then(T=>{if(T.ok)return T.json();throw new Error("Failed to fetch user flow states")}).catch(T=>(console.log(`Error fetching ${F}: ${T}. Will gracefully degrade and hide Frigade`),s(!0),d)),y=o&&n&&r?`${t}userFlowStates?foreignUserId=${encodeURIComponent(r)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,{data:w,isLoading:P,mutate:f,error:E}=p?wl(y,x):bl(y,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),b=w==null?void 0:w.data;Sl(()=>{!a&&!P&&b&&g(!0)},[b,a,P]);async function S(F){if(b&&!p){let T=b.find(O=>O.flowId===F);T&&T.flowState!==Q&&(T.flowState=Q),await f(Promise.resolve({...w,data:b}),{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function A(F,T,O){if(b){let I=b.find(M=>M.flowId===F);I&&(I.stepStates[T]=O,I.flowState=ft),await f(Promise.resolve({...w,data:b}),{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function C(F,T,O){if(b){let I=b.find(M=>M.flowId===F);I&&(I.lastStepId=T,I.stepStates[T]=O,I.flowState=ft),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function m(F){if(b){let T=b.find(O=>O.flowId===F);T&&T.flowState!==$e&&(T.flowState=$e,T.lastStepId=Tl,Object.keys(T.stepStates).forEach(O=>{T.stepStates[O].actionType=Ne,T.stepStates[O].createdAt=new Date().toISOString()}),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1}),c(F))}}async function B(F,T){if(b){let O=b.find(I=>I.flowId===F);O&&O.stepStates[T]!==Ne&&(O.stepStates[T]=Ne),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:b,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:A,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:C,error:E}}function Gt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:r}=ve(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Fl(K),[c,a]=Nr(new Set),[g,d]=Nr(new Set),x=vt();function y(f){let E=JSON.stringify(f);if(c.has(E))return null;c.add(E),a(c),g.add(f),d(g);let b=s==null?void 0:s.find(S=>S.flowSlug===f.flowSlug&&S.stepId===f.stepId&&S.actionType===f.actionType&&S.createdAt===f.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:E}).then(S=>{S.status!==200&&S.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...i,f])):b||p(A=>[...A??[],f])})}async function w(f){f.foreignUserId&&(f.actionType===ft||f.actionType===$e?await y(f):f.actionType===Q?await y(f):f.actionType===fo?await y(f):f.actionType===Me?await y(f):f.actionType===uo?await y(f):f.actionType===Ne&&await y(f))}function P(){let f=[];return o==null||o.forEach(E=>{if(E&&E.stepStates&&Object.keys(E.stepStates).length!==0)for(let b in E.stepStates){let S=E.stepStates[b];f.push({foreignUserId:E.foreignUserId,flowSlug:E.flowId,stepId:S.stepId,actionType:S.actionType,data:{},createdAt:new Date(S.createdAt),blocked:S.blocked,hidden:S.hidden})}}),[...f,...s]}return{addResponse:w,setFlowResponses:p,getFlowResponses:P}}import El from"swr";var kl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Or=e=>{let t=kl.exec(e);if(t===null)return null;let o=null;return t.forEach((r,i)=>{let n=Pl(r,"'","");n.startsWith("flow_")&&(o=n)}),o},Pl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Z(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:r,userId:i,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:g,setShouldGracefullyDegrade:d,readonly:x}=vl(K),y={data:[]},{verifySDKInitiated:w}=Bt(),{addResponse:P,getFlowResponses:f}=Gt(),E=u=>fetch(u,e).then(h=>h.ok?h.json():(console.log(`Error fetching ${u} (${h.status}): ${h.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),y)).catch(h=>(console.log(`Error fetching ${u}: ${h}. Will gracefully degrade and hide Frigade`),d(!0),y)),{mutateUserFlowState:b,userFlowStatesData:S,isLoadingUserFlowStateData:A,optimisticallyMarkFlowCompleted:C,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:B,optimisticallyMarkStepNotStarted:F,optimisticallyMarkStepStarted:T}=ve(),{data:O,error:I,isLoading:M}=El(n?`${t}flows${x?"?readonly=true":""}`:null,E,{keepPreviousData:!0});Bl(()=>{if(I){console.error(I);return}O&&O.data&&r(O.data)},[O,I]);function D(u){if(M)return null;let h=o.find(v=>v.slug===u);return!h&&o.length>0&&!A&&!M?(console.log(`Flow with slug ${u} not found`),null):(h==null?void 0:h.active)===!1?null:h}function L(u){var _;if(!D(u))return[];let h=D(u).data;return h?(h=ee(h),(((_=JSON.parse(h))==null?void 0:_.data)??[]).map(Ce=>{let Er=ne(Ce);return{handleSecondaryButtonClick:()=>{Ce.skippable===!0&&H(u,Ce.id,{skipped:!0})},...Ce,complete:ge(u,Ce.id)===Me||Er>=1,blocked:te(u,Ce.id),hidden:N(u,Ce.id),handlePrimaryButtonClick:()=>{(!Ce.completionCriteria&&(Ce.autoMarkCompleted||Ce.autoMarkCompleted===void 0)||Ce.completionCriteria&&Ce.autoMarkCompleted===!0)&&H(u,Ce.id)},progress:Er}}).filter(Ce=>Ce.hidden!==!0)):[]}function ee(u){return u.replaceAll(/\${(.*?)}/g,(h,v)=>s[v]===void 0?"":String(s[v]).replace(/[\u00A0-\u9999<>\&]/g,function(_){return"&#"+_.charCodeAt(0)+";"}).replaceAll(/[\\]/g,"\\\\").replaceAll(/[\"]/g,'\\"').replaceAll(/[\/]/g,"\\/").replaceAll(/[\b]/g,"\\b").replaceAll(/[\f]/g,"\\f").replaceAll(/[\n]/g,"\\n").replaceAll(/[\r]/g,"\\r").replaceAll(/[\t]/g,"\\t"))}function U(u){if(!D(u))return[];let h=D(u).data;return h?(h=ee(h),JSON.parse(h)??{}):[]}function J(u,h){p(v=>({...v,[u]:h}))}function fe(u){!A&&!M&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(h=>{J(h,u[h])})}let q=gt(async(u,h,v)=>{if(!w())return;let _={foreignUserId:i,flowSlug:u,stepId:h,actionType:fo,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await T(u,h,_),P(_))},[i,S]),W=gt(async(u,h,v)=>{if(!w())return;let _={foreignUserId:i,flowSlug:u,stepId:h,actionType:Ne,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await F(u,h),P(_))},[i,S]),H=gt(async(u,h,v)=>{if(!w())return;let _={foreignUserId:i,flowSlug:u,stepId:h,actionType:Me,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await B(u,h,_),P(_))},[i,S]),he=gt(async(u,h)=>{if(!w()||le(u)===$e)return;let v={foreignUserId:i,flowSlug:u,stepId:"unknown",actionType:$e,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),Y(v)&&P(v)},[i,S]),Ie=gt(async(u,h)=>{if(!w())return;let v={foreignUserId:i,flowSlug:u,stepId:"unknown",actionType:ft,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};Y(v)&&P(v)},[i,S]),ye=gt(async(u,h)=>{if(!w())return;let v={foreignUserId:i,flowSlug:u,stepId:"unknown",actionType:Q,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};Y(v)&&(await C(u),P(v))},[i,S]),ce=gt(async(u,h)=>{if(!w())return;let v={foreignUserId:i,flowSlug:u,stepId:"unknown",actionType:uo,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};Y(v)&&(await C(u),P(v))},[i,S]);function Y(u){var h;if(!S&&u.actionType===Ne)return!1;if(S){let v=S.find(_=>_.flowId===u.flowSlug);if(u.actionType===Ne&&(!(v!=null&&v.stepStates[u.stepId])||v.stepStates[u.stepId].actionType===Ne)||v&&((h=v.stepStates[u.stepId])==null?void 0:h.actionType)===u.actionType||v&&v.flowState===Q&&u.actionType===Q)return!1}return!0}function ge(u,h){let v=V(u,h);return A?null:v?v.actionType:Ne}function te(u,h){let v=V(u,h);return v?v.blocked:!1}function N(u,h){let v=V(u,h);return v?v.hidden:!1}function V(u,h){if(A)return null;let v=S==null?void 0:S.find(_=>_.flowId===u);return!v||!v.stepStates[h]?null:v.stepStates[h]??null}function j(u){var v;if(A||!S)return null;if(le(u)===$e)return L(u)[0]??null;let h=(v=S.find(_=>_.flowId===u))==null?void 0:v.lastStepId;return h?L(u).find(_=>_.id===h):null}function ie(u){let h=j(u);if(!h)return 0;let v=L(u).findIndex(_=>_.id===h.id)??0;return ge(u,h.id)===Me&&v<L(u).length-1?v+1:v}function ne(u){if(!u.completionCriteria)return;let h=Or(u.completionCriteria);if(h===null)return;let v=Ge(h),_=De(h);return _===0?void 0:v/_}function le(u){let h=S==null?void 0:S.find(v=>v.flowId===u);return h?h.flowState:null}function Ge(u){let h=L(u);return h.length===0?0:h.filter(_=>ge(u,_.id)===Me).length}function De(u){return L(u).length}function G(u){let h=o.find(v=>v.slug===u);return h?JSON.parse(h.data):null}function ke(u){if(x)return!1;if(A)return!0;if(u!=null&&u.targetingLogic&&S){let h=S.find(v=>v.flowId===u.slug);if(h)return h.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&i&&i.startsWith("guest_"))}function jt(u){return!ke(D(u))}function mo(){i&&b()}return{getFlow:D,getFlowData:G,isLoading:A||M,getStepStatus:ge,getFlowSteps:L,getCurrentStepIndex:ie,markStepStarted:q,markStepCompleted:H,markFlowNotStarted:he,markFlowStarted:Ie,markFlowCompleted:ye,markFlowAborted:ce,markStepNotStarted:W,getFlowStatus:le,getNumberOfStepsCompleted:Ge,getNumberOfSteps:De,targetingLogicShouldHideFlow:ke,setCustomVariable:J,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:ne,getFlowMetadata:U,isStepBlocked:te,isStepHidden:N,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:jt,refresh:mo}}import{useCallback as Lr,useContext as Al,useEffect as Il}from"react";var Et="guest_";function Kt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:r,shouldGracefullyDegrade:i}=Al(K),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=ve(),c=vt(),{verifySDKInitiated:a}=Bt();Il(()=>{if(e&&!t){if(e.startsWith(Et))return;let x=`frigade-user-registered-${e}`;localStorage.getItem(x)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(x,"true"))}},[e,i,t]);let g=Lr(async x=>{if(!a())return;let y={foreignId:e,properties:x};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(y)}),r(w=>({...w,...x})),p()},[e,n,i,p]),d=Lr(async(x,y)=>{if(!a())return;let P={foreignId:e,events:[{event:x,properties:y}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(P)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:g,trackEventForUser:d}}import{v4 as tp}from"uuid";import He,{useEffect as Ja,useState as Qa}from"react";import Ue,{useEffect as Ul}from"react";import ho from"styled-components";import Nl from"react";import Ol from"styled-components";var Dr="fr-",qt="cfr-";function l(e,t){let o=`${Dr}${e}`;if(!t)return o;if(t.styleOverrides&&t.styleOverrides[e]){if(typeof t.styleOverrides[e]=="string")return o+" "+t.styleOverrides[e];if(typeof t.styleOverrides[e]=="object")return o+" "+qt+e}return o}function k(e){if(!e.className||e.className.indexOf(qt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Dr)?"":`:not(${o.map(r=>`.${r}`).join(", ")})`}function Go(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Ke(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Go(t)}: ${e.styleOverrides[t]};`).join(" "):""}function be(...e){return e.filter(Boolean).join(" ")}function Yt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ll=Ol.div`
2
+ import yt,{createContext as kp,useEffect as No,useState as Oe}from"react";import{ThemeProvider as Pp}from"styled-components";import St,{useContext as ep,useEffect as Ao,useState as dr}from"react";import{useCallback as gt,useContext as vl,useEffect as Bl}from"react";import jo,{useMemo as Ir}from"react";var Ar="1.34.5 ";var Ne="NOT_STARTED_STEP",Q="COMPLETED_FLOW",uo="ABORTED_FLOW",ft="STARTED_FLOW",$e="NOT_STARTED_FLOW",Me="COMPLETED_STEP",fo="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=jo.useContext(K);return{config:Ir(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Ar,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Ir(()=>`${o}/v1/public/`,[o])}}var gl="frigade-last-call-at-",xl="frigade-last-call-data-";function vt(){let{shouldGracefullyDegrade:e,readonly:t}=jo.useContext(K);return async(o,r)=>{if(t&&(r.method==="POST"||r.method==="PUT"||r.method==="DELETE"))return Pt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Pt();let i=gl+o,n=xl+o;if(window&&window.localStorage&&r&&r.body&&r.method==="POST"){let p=window.localStorage.getItem(i),c=window.localStorage.getItem(n);if(p&&c&&c==r.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Pt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,r.body)}let s;try{s=await fetch(o,r)}catch(p){return Pt(p)}return s?s.ok?s:Pt(s.statusText):Pt()}}function Pt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Bt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=jo.useContext(K);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as Fl,useState as Nr}from"react";import{useContext as Cl,useEffect as Sl,useState as yl}from"react";import bl from"swr";import{useContext as hl}from"react";function Pe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:r,completedFlowsToKeepOpenDuringSession:i}=hl(K);function n(d,x=!1){return e[d]??x}function s(d,x){t(y=>({...y,[d]:x}))}function p(d){t(x=>{let{[d]:y,...w}=x;return{...w}})}function c(d){i.includes(d)||r(x=>[...x,d])}function a(d){return i.includes(d)}function g(d){return Object.entries(e).some(([x,y])=>y&&x!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:g,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import wl from"swr/immutable";var Tl="unknown";function ve(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:r,organizationId:i,flows:n,setShouldGracefullyDegrade:s,readonly:p}=Cl(K),{resetOpenFlowState:c}=Pe(),[a,g]=yl(!1),d={data:n.map(F=>({flowId:F.id,flowState:Q,lastStepId:null,userId:r,foreignUserId:r,stepStates:{},shouldTrigger:!1}))},x=F=>fetch(F,e).then(T=>{if(T.ok)return T.json();throw new Error("Failed to fetch user flow states")}).catch(T=>(console.log(`Error fetching ${F}: ${T}. Will gracefully degrade and hide Frigade`),s(!0),d)),y=o&&n&&r?`${t}userFlowStates?foreignUserId=${encodeURIComponent(r)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,{data:w,isLoading:P,mutate:f,error:E}=p?wl(y,x):bl(y,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),b=w==null?void 0:w.data;Sl(()=>{!a&&!P&&b&&g(!0)},[b,a,P]);async function S(F){if(b&&!p){let T=b.find(O=>O.flowId===F);T&&T.flowState!==Q&&(T.flowState=Q),await f(Promise.resolve({...w,data:b}),{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function A(F,T,O){if(b){let I=b.find(M=>M.flowId===F);I&&(I.stepStates[T]=O,I.flowState=ft),await f(Promise.resolve({...w,data:b}),{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function C(F,T,O){if(b){let I=b.find(M=>M.flowId===F);I&&(I.lastStepId=T,I.stepStates[T]=O,I.flowState=ft),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function m(F){if(b){let T=b.find(O=>O.flowId===F);T&&T.flowState!==$e&&(T.flowState=$e,T.lastStepId=Tl,Object.keys(T.stepStates).forEach(O=>{T.stepStates[O].actionType=Ne,T.stepStates[O].createdAt=new Date().toISOString()}),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1}),c(F))}}async function B(F,T){if(b){let O=b.find(I=>I.flowId===F);O&&O.stepStates[T]!==Ne&&(O.stepStates[T]=Ne),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:b,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:A,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:C,error:E}}function Gt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:r}=ve(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Fl(K),[c,a]=Nr(new Set),[g,d]=Nr(new Set),x=vt();function y(f){let E=JSON.stringify(f);if(c.has(E))return null;c.add(E),a(c),g.add(f),d(g);let b=s==null?void 0:s.find(S=>S.flowSlug===f.flowSlug&&S.stepId===f.stepId&&S.actionType===f.actionType&&S.createdAt===f.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:E}).then(S=>{S.status!==200&&S.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...i,f])):b||p(A=>[...A??[],f])})}async function w(f){f.foreignUserId&&(f.actionType===ft||f.actionType===$e?await y(f):f.actionType===Q?await y(f):f.actionType===fo?await y(f):f.actionType===Me?await y(f):f.actionType===uo?await y(f):f.actionType===Ne&&await y(f))}function P(){let f=[];return o==null||o.forEach(E=>{if(E&&E.stepStates&&Object.keys(E.stepStates).length!==0)for(let b in E.stepStates){let S=E.stepStates[b];f.push({foreignUserId:E.foreignUserId,flowSlug:E.flowId,stepId:S.stepId,actionType:S.actionType,data:{},createdAt:new Date(S.createdAt),blocked:S.blocked,hidden:S.hidden})}}),[...f,...s]}return{addResponse:w,setFlowResponses:p,getFlowResponses:P}}import El from"swr";var kl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Or=e=>{let t=kl.exec(e);if(t===null)return null;let o=null;return t.forEach((r,i)=>{let n=Pl(r,"'","");n.startsWith("flow_")&&(o=n)}),o},Pl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Z(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:r,userId:i,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:g,setShouldGracefullyDegrade:d,readonly:x}=vl(K),y={data:[]},{verifySDKInitiated:w}=Bt(),{addResponse:P,getFlowResponses:f}=Gt(),E=u=>fetch(u,e).then(h=>h.ok?h.json():(console.log(`Error fetching ${u} (${h.status}): ${h.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),y)).catch(h=>(console.log(`Error fetching ${u}: ${h}. Will gracefully degrade and hide Frigade`),d(!0),y)),{mutateUserFlowState:b,userFlowStatesData:S,isLoadingUserFlowStateData:A,optimisticallyMarkFlowCompleted:C,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:B,optimisticallyMarkStepNotStarted:F,optimisticallyMarkStepStarted:T}=ve(),{data:O,error:I,isLoading:M}=El(n?`${t}flows${x?"?readonly=true":""}`:null,E,{keepPreviousData:!0});Bl(()=>{if(I){console.error(I);return}O&&O.data&&r(O.data)},[O,I]);function D(u){if(M)return null;let h=o.find(v=>v.slug===u);return!h&&o.length>0&&!A&&!M?(console.log(`Flow with slug ${u} not found`),null):(h==null?void 0:h.active)===!1?null:h}function L(u){var _;if(!D(u))return[];let h=D(u).data;return h?(h=ee(h),(((_=JSON.parse(h))==null?void 0:_.data)??[]).map(Ce=>{let Er=ne(Ce);return{handleSecondaryButtonClick:()=>{Ce.skippable===!0&&H(u,Ce.id,{skipped:!0})},...Ce,complete:ge(u,Ce.id)===Me||Er>=1,blocked:te(u,Ce.id),hidden:N(u,Ce.id),handlePrimaryButtonClick:()=>{(!Ce.completionCriteria&&(Ce.autoMarkCompleted||Ce.autoMarkCompleted===void 0)||Ce.completionCriteria&&Ce.autoMarkCompleted===!0)&&H(u,Ce.id)},progress:Er}}).filter(Ce=>Ce.hidden!==!0)):[]}function ee(u){return u.replaceAll(/\${(.*?)}/g,(h,v)=>s[v]===void 0?"":String(s[v]).replace(/[\u00A0-\u9999<>\&]/g,function(_){return"&#"+_.charCodeAt(0)+";"}).replaceAll(/[\\]/g,"\\\\").replaceAll(/[\"]/g,'\\"').replaceAll(/[\/]/g,"\\/").replaceAll(/[\b]/g,"\\b").replaceAll(/[\f]/g,"\\f").replaceAll(/[\n]/g,"\\n").replaceAll(/[\r]/g,"\\r").replaceAll(/[\t]/g,"\\t"))}function U(u){if(!D(u))return[];let h=D(u).data;return h?(h=ee(h),JSON.parse(h)??{}):[]}function J(u,h){p(v=>({...v,[u]:h}))}function fe(u){!A&&!M&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(h=>{J(h,u[h])})}let q=gt(async(u,h,v)=>{if(!w())return;let _={foreignUserId:i,flowSlug:u,stepId:h,actionType:fo,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await T(u,h,_),P(_))},[i,S]),W=gt(async(u,h,v)=>{if(!w())return;let _={foreignUserId:i,flowSlug:u,stepId:h,actionType:Ne,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await F(u,h),P(_))},[i,S]),H=gt(async(u,h,v)=>{if(!w())return;let _={foreignUserId:i,flowSlug:u,stepId:h,actionType:Me,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await B(u,h,_),P(_))},[i,S]),he=gt(async(u,h)=>{if(!w()||le(u)===$e)return;let v={foreignUserId:i,flowSlug:u,stepId:"unknown",actionType:$e,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),Y(v)&&P(v)},[i,S]),Ie=gt(async(u,h)=>{if(!w())return;let v={foreignUserId:i,flowSlug:u,stepId:"unknown",actionType:ft,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};Y(v)&&P(v)},[i,S]),ye=gt(async(u,h)=>{if(!w())return;let v={foreignUserId:i,flowSlug:u,stepId:"unknown",actionType:Q,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};Y(v)&&(await C(u),P(v))},[i,S]),ce=gt(async(u,h)=>{if(!w())return;let v={foreignUserId:i,flowSlug:u,stepId:"unknown",actionType:uo,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};Y(v)&&(await C(u),P(v))},[i,S]);function Y(u){var h;if(!S&&u.actionType===Ne)return!1;if(S){let v=S.find(_=>_.flowId===u.flowSlug);if(u.actionType===Ne&&(!(v!=null&&v.stepStates[u.stepId])||v.stepStates[u.stepId].actionType===Ne)||v&&((h=v.stepStates[u.stepId])==null?void 0:h.actionType)===u.actionType||v&&v.flowState===Q&&u.actionType===Q)return!1}return!0}function ge(u,h){let v=V(u,h);return A?null:v?v.actionType:Ne}function te(u,h){let v=V(u,h);return v?v.blocked:!1}function N(u,h){let v=V(u,h);return v?v.hidden:!1}function V(u,h){if(A)return null;let v=S==null?void 0:S.find(_=>_.flowId===u);return!v||!v.stepStates[h]?null:v.stepStates[h]??null}function j(u){var v;if(A||!S)return null;if(le(u)===$e)return L(u)[0]??null;let h=(v=S.find(_=>_.flowId===u))==null?void 0:v.lastStepId;return h?L(u).find(_=>_.id===h):null}function ie(u){let h=j(u);if(!h)return 0;let v=L(u).findIndex(_=>_.id===h.id)??0;return ge(u,h.id)===Me&&v<L(u).length-1?v+1:v}function ne(u){if(!u.completionCriteria)return;let h=Or(u.completionCriteria);if(h===null)return;let v=Ge(h),_=De(h);return _===0?void 0:v/_}function le(u){let h=S==null?void 0:S.find(v=>v.flowId===u);return h?h.flowState:null}function Ge(u){let h=L(u);return h.length===0?0:h.filter(_=>ge(u,_.id)===Me).length}function De(u){return L(u).length}function G(u){let h=o.find(v=>v.slug===u);return h?JSON.parse(h.data):null}function ke(u){if(x)return!1;if(A)return!0;if(u!=null&&u.targetingLogic&&S){let h=S.find(v=>v.flowId===u.slug);if(h)return h.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&i&&i.startsWith("guest_"))}function jt(u){return!ke(D(u))}function mo(){i&&b()}return{getFlow:D,getFlowData:G,isLoading:A||M,getStepStatus:ge,getFlowSteps:L,getCurrentStepIndex:ie,markStepStarted:q,markStepCompleted:H,markFlowNotStarted:he,markFlowStarted:Ie,markFlowCompleted:ye,markFlowAborted:ce,markStepNotStarted:W,getFlowStatus:le,getNumberOfStepsCompleted:Ge,getNumberOfSteps:De,targetingLogicShouldHideFlow:ke,setCustomVariable:J,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:ne,getFlowMetadata:U,isStepBlocked:te,isStepHidden:N,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:jt,refresh:mo}}import{useCallback as Lr,useContext as Al,useEffect as Il}from"react";var Et="guest_";function Kt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:r,shouldGracefullyDegrade:i}=Al(K),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=ve(),c=vt(),{verifySDKInitiated:a}=Bt();Il(()=>{if(e&&!t){if(e.startsWith(Et))return;let x=`frigade-user-registered-${e}`;localStorage.getItem(x)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(x,"true"))}},[e,i,t]);let g=Lr(async x=>{if(!a())return;let y={foreignId:e,properties:x};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(y)}),r(w=>({...w,...x})),p()},[e,n,i,p]),d=Lr(async(x,y)=>{if(!a())return;let P={foreignId:e,events:[{event:x,properties:y}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(P)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:g,trackEventForUser:d}}import{v4 as tp}from"uuid";import He,{useEffect as Ja,useState as Qa}from"react";import Ue,{useEffect as Ul}from"react";import ho from"styled-components";import Nl from"react";import Ol from"styled-components";var Dr="fr-",qt="cfr-";function l(e,t){let o=`${Dr}${e}`;if(!t)return o;if(t.styleOverrides&&t.styleOverrides[e]){if(typeof t.styleOverrides[e]=="string")return o+" "+t.styleOverrides[e];if(typeof t.styleOverrides[e]=="object")return o+" "+qt+e}return o}function k(e){if(!e.className||e.className.indexOf(qt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Dr)?"":`:not(${o.map(r=>`.${r}`).join(", ")})`}function Go(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Ke(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Go(t)}: ${e.styleOverrides[t]};`).join(" "):""}function be(...e){return e.filter(Boolean).join(" ")}function Yt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ll=Ol.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;
@@ -1392,7 +1392,7 @@ ${r=>r.inlineStyles.map(([i,n])=>`.${qt}${i}.${qt}${i} { ${Object.entries(n).map
1392
1392
  `,Nd=co(zs)`
1393
1393
  width: ${Ht+12}px;
1394
1394
  height: ${Ht+12}px;
1395
- `,Od=({steps:e=[],onDismiss:t,onComplete:o=()=>{},tooltipPosition:r="auto",showHighlight:i=!0,primaryColor:n="#000000",offset:s={x:0,y:0},visible:p=!0,containerStyle:c={},selectedStep:a=0,customStepTypes:g,appearance:d,dismissible:x=!1,showHighlightOnly:y,showStepCount:w=!0,completedStepsCount:P=0,showFrigadeBranding:f=!1,cssPosition:E="absolute"})=>{var ne,le,Ge,De;let[b,S]=po(),[A,C]=po(new Date),m=vd(null),[B,F]=po(document.querySelector(e[a].selector)),T=Ds(B,A),[O,I]=po(),[M,D]=po(!y),L=(le=(ne=e[a])==null?void 0:ne.props)!=null&&le.position?e[a].props.position:E,ee=((De=(Ge=e[a])==null?void 0:Ge.props)==null?void 0:De.zIndex)??90,U=(b==null?void 0:b.width)??Ms,J=(b==null?void 0:b.height)??Us,fe=window.location.pathname.split("/").pop();$s(()=>{m.current&&S({width:m.current.clientWidth,height:m.current.clientHeight})},[a,A,L]),_o(()=>{y||D(!0)},[a]);let q=()=>{let G=document.querySelector(e[a].selector);if(!G){I(void 0),F(null);return}O&&O===JSON.stringify(G==null?void 0:G.getBoundingClientRect())||(F(G),C(new Date),G&&I(JSON.stringify(G.getBoundingClientRect())))};if(_o(()=>{let G=new MutationObserver(q);return G.observe(document.body,{subtree:!0,childList:!0}),()=>G.disconnect()},[q]),_o(()=>{let G=new MutationObserver(q);return G.observe(document.body,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["style","class"]}),()=>G.disconnect()},[q]),_o(()=>{let G=setInterval(()=>{q()},10);return()=>clearInterval(G)},[q]),$s(()=>{setTimeout(()=>{q()},Bd),q()},[a,fe]),B===null||!p||T.height===0&&T.width===0&&L!=="fixed")return null;let W=r==="auto"?"right":r,H=wr(T,W,U,s,L),he=T.right+U>(window.innerWidth||document.documentElement.clientWidth),Ie=T.bottom+Us>(window.innerHeight||document.documentElement.clientHeight);he&&r==="auto"&&(H=wr(T,"left",U,s,L),W="left");let ye=()=>{let G=()=>{if(e[a].handlePrimaryButtonClick&&(e[a].handlePrimaryButtonClick(),D(!1),setTimeout(()=>{q()},30)),P===e.length-1)return o()},ke=()=>{e[a].handleSecondaryButtonClick&&(e[a].handleSecondaryButtonClick(),y&&!e[a].secondaryButtonUri&&D(!1))};return z.createElement(z.Fragment,null,w&&e.length>1&&z.createElement(Hr,null,z.createElement(jr,{className:l("tooltipStepCounter",d)},a+1," of ",e.length)),z.createElement(Vr,{showStepCount:w,className:l("tooltipCTAContainer",d)},e[a].secondaryButtonTitle&&z.createElement(oe,{title:e[a].secondaryButtonTitle,appearance:d,onClick:ke,size:"small",withMargin:!1,secondary:!0}),e[a].primaryButtonTitle&&z.createElement(oe,{title:e[a].primaryButtonTitle,appearance:d,onClick:G,withMargin:!1,size:"small"})))},ce=()=>z.createElement(z.Fragment,null,x&&z.createElement(Ur,{"data-testid":"tooltip-dismiss",onClick:()=>{t&&t()},className:l("tooltipClose",d)},z.createElement(Be,null)),e[a].imageUri&&z.createElement(zr,{dismissible:x,appearance:d,src:e[a].imageUri,className:l("tooltipImageContainer",d)}),e[a].videoUri&&!e[a].imageUri&&z.createElement(_r,{dismissible:x,appearance:d,className:l("tooltipVideoContainer",d)},z.createElement(lt,{appearance:d,videoUri:e[a].videoUri})),z.createElement(we,{appearance:d,title:e[a].title,subtitle:e[a].subtitle,size:"small"}),z.createElement(Wr,{className:l("tooltipFooter",d)},z.createElement(ye,null))),ge={...{default:G=>{var ke;if((ke=e[a])!=null&&ke.StepContent){let jt=e[a].StepContent;return z.createElement("div",null,jt)}return z.createElement(ce,null)}},...g},te=()=>{var G;return e?!((G=e[a])!=null&&G.type)||!ge[e[a].type]?ge.default(e[a]):ge[e[a].type]({stepData:e[a],primaryColor:n}):z.createElement(z.Fragment,null)};if(y&&e[a].complete===!0)return null;let N={top:(H==null?void 0:H.y)-Ht,left:(W=="left"?T.x+s.x:(H==null?void 0:H.x)-Ht)??0,cursor:y?"pointer":"default",position:L},V=()=>{let ke=N.left+(W=="left"?-U:24);return Math.min(Math.max(ke,20),window.innerWidth-U-20)},j=()=>{if(L==="fixed")return N.top;let G=N.top+J,ke=20;return G>window.innerHeight-ke?N.top+-J:N.top},ie=()=>{y&&(C(new Date),D(!M))};return z.createElement(Id,null,z.createElement(Nd,{style:N,zIndex:ee,className:l("tourHighlightContainer",d)},i&&e[a].showHighlight!==!1&&z.createElement(z.Fragment,null,z.createElement(Ad,{style:{position:L},onClick:ie,primaryColor:d.theme.colorPrimary,className:l("tourHighlightInnerCircle",d)}),z.createElement(Ed,{style:{position:"absolute"},onClick:ie,primaryColor:d.theme.colorPrimary,className:l("tourHighlightOuterCircle",d)}))),z.createElement(zs,{style:{...N,left:V(),top:j()},zIndex:ee+1,className:l("tooltipContainerWrapper",d)},M&&z.createElement(z.Fragment,null,z.createElement(go,{ref:m,layoutId:"tooltip-container",style:{position:"relative",width:"max-content",right:0,top:12,...c},appearance:d,className:l("tooltipContainer",d),maxWidth:Ms,zIndex:ee+10},z.createElement(te,null)),f&&z.createElement(Kr,{className:l("poweredByFrigadeTooltipRibbon",d),appearance:d,zIndex:ee+10},z.createElement(xo,{appearance:d})))))},Wo=Od;import{Portal as $d}from"react-portal";var Md=({flowId:e,customVariables:t,appearance:o,onStepCompletion:r,onButtonClick:i,showTooltipsSimultaneously:n=!1,onDismiss:s,dismissible:p,tooltipPosition:c="auto",showHighlightOnly:a=!1,dismissBehavior:g="complete-flow",onComplete:d,skipIfNotFound:x=!1,cssPosition:y="absolute",...w})=>{let{getFlow:P,getFlowSteps:f,isLoading:E,targetingLogicShouldHideFlow:b,markStepCompleted:S,markStepStarted:A,markFlowCompleted:C,updateCustomVariables:m,getCurrentStepIndex:B,getStepStatus:F,isStepBlocked:T,getFlowStatus:O,getNumberOfStepsCompleted:I}=Z(),{isLoadingUserFlowStateData:M}=ve(),{primaryCTAClickSideEffects:D,secondaryCTAClickSideEffects:L}=ae(),{hasOpenModals:ee}=Pe(),U=B(e),{openFlowStates:J}=Ld(K),{mergeAppearanceWithDefault:fe}=R();if(o=fe(o),Dd(()=>{m(t)},[t,E]),M)return null;let q=P(e);if(!q||b(q)||O(e)==Q||ee())return null;let W=f(e);if(Object.keys(J).length>0){let N=Object.keys(J).find(V=>J[V]===!0);if(N!==void 0&&N!==e)return ut.createElement(ut.Fragment,null)}async function H(N){if(await S(e,N.id),W.map(V=>F(e,V.id)).every(V=>V===Me)){await C(e);return}if(!a&&U+1<W.length){if(T(e,W[U+1].id))return;await A(e,W[U+1].id)}}function he(N,V,j){let ie=U+1<W.length?W[U+1]:null;i&&i(N,U,V,ie),r&&r(N,j,ie)}function Ie(){return W.map(N=>({...N,handleSecondaryButtonClick:async()=>{L(N),N.skippable===!0&&await S(e,N.id,{skipped:!0}),he(N,"secondary",U)},handlePrimaryButtonClick:async()=>{(!N.completionCriteria&&(N.autoMarkCompleted||N.autoMarkCompleted===void 0)||N.completionCriteria&&N.autoMarkCompleted===!0)&&await H(N),he(N,"primary",U),D(N)}}))}async function ye(N){s&&s(),g==="complete-flow"?await C(e):await S(e,N.id)}function ce(){d&&d()}let Y=!document.querySelector(W[U].selector);function ge(){let N=W.findIndex(V=>!!document.querySelector(V.selector));return W.map((V,j)=>Y&&!n&&j!==N&&x?null:ut.createElement(Wo,{key:V.id,appearance:o,steps:Ie(),selectedStep:j,showTooltipsSimultaneously:n,dismissible:p,onDismiss:()=>ye(V),tooltipPosition:c,showHighlightOnly:a,completedStepsCount:I(e),onComplete:ce,cssPosition:y,...w}))}function te(){return ut.createElement(ut.Fragment,null,ut.createElement(re,{appearance:o}),n||Y&&x?ge():ut.createElement(Wo,{appearance:o,steps:Ie(),selectedStep:U,showTooltipsSimultaneously:n,dismissible:p,onDismiss:()=>ye(W[U]),tooltipPosition:c,completedStepsCount:I(e),showHighlightOnly:a,onComplete:ce,cssPosition:y,...w}))}return y==="relative"?te():ut.createElement($d,null,te())};import Ae,{useEffect as Ud,useRef as zd,useState as _d}from"react";import{Portal as Wd}from"react-portal";import kt from"styled-components";var _s=kt.button`
1395
+ `,Od=({steps:e=[],onDismiss:t,onComplete:o=()=>{},tooltipPosition:r="auto",showHighlight:i=!0,primaryColor:n="#000000",offset:s={x:0,y:0},visible:p=!0,containerStyle:c={},selectedStep:a=0,customStepTypes:g,appearance:d,dismissible:x=!1,showHighlightOnly:y,showStepCount:w=!0,completedStepsCount:P=0,showFrigadeBranding:f=!1,cssPosition:E="absolute"})=>{var ne,le,Ge,De;let[b,S]=po(),[A,C]=po(new Date),m=vd(null),[B,F]=po(document.querySelector(e[a].selector)),T=Ds(B,A),[O,I]=po(),[M,D]=po(!y),L=(le=(ne=e[a])==null?void 0:ne.props)!=null&&le.position?e[a].props.position:E,ee=((De=(Ge=e[a])==null?void 0:Ge.props)==null?void 0:De.zIndex)??90,U=(b==null?void 0:b.width)??Ms,J=(b==null?void 0:b.height)??Us,fe=window.location.pathname.split("/").pop();$s(()=>{m.current&&S({width:m.current.clientWidth,height:m.current.clientHeight})},[a,A,L]),_o(()=>{y||D(!0)},[a]);let q=()=>{let G=document.querySelector(e[a].selector);if(!G){I(void 0),F(null);return}O&&O===JSON.stringify(G==null?void 0:G.getBoundingClientRect())||(F(G),C(new Date),G&&I(JSON.stringify(G.getBoundingClientRect())))};if(_o(()=>{let G=new MutationObserver(q);return G.observe(document.body,{subtree:!0,childList:!0}),()=>G.disconnect()},[q]),_o(()=>{let G=new MutationObserver(q);return G.observe(document.body,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["style","class"]}),()=>G.disconnect()},[q]),_o(()=>{let G=setInterval(()=>{q()},10);return()=>clearInterval(G)},[q]),$s(()=>{setTimeout(()=>{q()},Bd),q()},[a,fe]),B===null||!p||T.height===0&&T.width===0&&L!=="fixed")return null;let W=r==="auto"?"right":r,H=wr(T,W,U,s,L),he=T.right+U>(window.innerWidth||document.documentElement.clientWidth),Ie=T.bottom+Us>(window.innerHeight||document.documentElement.clientHeight);he&&r==="auto"&&(H=wr(T,"left",U,s,L),W="left");let ye=()=>{let G=()=>{if(e[a].handlePrimaryButtonClick&&(e[a].handlePrimaryButtonClick(),D(!1),setTimeout(()=>{q()},30)),P===e.length-1)return o()},ke=()=>{e[a].handleSecondaryButtonClick&&(e[a].handleSecondaryButtonClick(),y&&!e[a].secondaryButtonUri&&D(!1))};return z.createElement(z.Fragment,null,w&&e.length>1&&z.createElement(Hr,null,z.createElement(jr,{className:l("tooltipStepCounter",d)},a+1," of ",e.length)),z.createElement(Vr,{showStepCount:w,className:l("tooltipCTAContainer",d)},e[a].secondaryButtonTitle&&z.createElement(oe,{title:e[a].secondaryButtonTitle,appearance:d,onClick:ke,size:"small",withMargin:!1,secondary:!0}),e[a].primaryButtonTitle&&z.createElement(oe,{title:e[a].primaryButtonTitle,appearance:d,onClick:G,withMargin:!1,size:"small"})))},ce=()=>z.createElement(z.Fragment,null,x&&z.createElement(Ur,{"data-testid":"tooltip-dismiss",onClick:()=>{t&&t()},className:l("tooltipClose",d)},z.createElement(Be,null)),e[a].imageUri&&z.createElement(zr,{dismissible:x,appearance:d,src:e[a].imageUri,className:l("tooltipImageContainer",d)}),e[a].videoUri&&!e[a].imageUri&&z.createElement(_r,{dismissible:x,appearance:d,className:l("tooltipVideoContainer",d)},z.createElement(lt,{appearance:d,videoUri:e[a].videoUri})),z.createElement(we,{appearance:d,title:e[a].title,subtitle:e[a].subtitle,size:"small"}),z.createElement(Wr,{className:l("tooltipFooter",d)},z.createElement(ye,null))),ge={...{default:G=>{var ke;if((ke=e[a])!=null&&ke.StepContent){let jt=e[a].StepContent;return z.createElement("div",null,jt)}return z.createElement(ce,null)}},...g},te=()=>{var G;return e?!((G=e[a])!=null&&G.type)||!ge[e[a].type]?ge.default(e[a]):ge[e[a].type]({stepData:e[a],primaryColor:n}):z.createElement(z.Fragment,null)};if(y&&e[a].complete===!0)return null;let N={top:(H==null?void 0:H.y)-Ht,left:(W=="left"?T.x+s.x:(H==null?void 0:H.x)-Ht)??0,cursor:y?"pointer":"default",position:L},V=()=>{let ke=N.left+(W=="left"?-U:24);return Math.min(Math.max(ke,20),window.innerWidth-U-20)},j=()=>{if(L==="fixed")return N.top;let G=N.top+J,ke=20;return G>window.innerHeight-ke?N.top+-J:N.top},ie=()=>{y&&(C(new Date),D(!M))};return z.createElement(Id,null,z.createElement(Nd,{style:N,zIndex:ee,className:l("tourHighlightContainer",d)},i&&e[a].showHighlight!==!1&&E!=="static"&&z.createElement(z.Fragment,null,z.createElement(Ad,{style:{position:L},onClick:ie,primaryColor:d.theme.colorPrimary,className:l("tourHighlightInnerCircle",d)}),z.createElement(Ed,{style:{position:"absolute"},onClick:ie,primaryColor:d.theme.colorPrimary,className:l("tourHighlightOuterCircle",d)}))),z.createElement(zs,{style:{...N,left:V(),top:j()},zIndex:ee+1,className:l("tooltipContainerWrapper",d)},M&&z.createElement(z.Fragment,null,z.createElement(go,{ref:m,layoutId:"tooltip-container",style:{position:"relative",width:"max-content",right:0,top:E!=="static"?12:0,...c},appearance:d,className:l("tooltipContainer",d),maxWidth:Ms,zIndex:ee+10},z.createElement(te,null)),f&&z.createElement(Kr,{className:l("poweredByFrigadeTooltipRibbon",d),appearance:d,zIndex:ee+10},z.createElement(xo,{appearance:d})))))},Wo=Od;import{Portal as $d}from"react-portal";var Md=({flowId:e,customVariables:t,appearance:o,onStepCompletion:r,onButtonClick:i,showTooltipsSimultaneously:n=!1,onDismiss:s,dismissible:p,tooltipPosition:c="auto",showHighlightOnly:a=!1,dismissBehavior:g="complete-flow",onComplete:d,skipIfNotFound:x=!1,cssPosition:y="absolute",...w})=>{let{getFlow:P,getFlowSteps:f,isLoading:E,targetingLogicShouldHideFlow:b,markStepCompleted:S,markStepStarted:A,markFlowCompleted:C,updateCustomVariables:m,getCurrentStepIndex:B,getStepStatus:F,isStepBlocked:T,getFlowStatus:O,getNumberOfStepsCompleted:I}=Z(),{isLoadingUserFlowStateData:M}=ve(),{primaryCTAClickSideEffects:D,secondaryCTAClickSideEffects:L}=ae(),{hasOpenModals:ee}=Pe(),U=B(e),{openFlowStates:J}=Ld(K),{mergeAppearanceWithDefault:fe}=R();if(o=fe(o),Dd(()=>{m(t)},[t,E]),M)return null;let q=P(e);if(!q||b(q)||O(e)==Q||ee())return null;let W=f(e);if(Object.keys(J).length>0){let N=Object.keys(J).find(V=>J[V]===!0);if(N!==void 0&&N!==e)return ut.createElement(ut.Fragment,null)}async function H(N){if(await S(e,N.id),W.map(V=>F(e,V.id)).every(V=>V===Me)){await C(e);return}if(!a&&U+1<W.length){if(T(e,W[U+1].id))return;await A(e,W[U+1].id)}}function he(N,V,j){let ie=U+1<W.length?W[U+1]:null;i&&i(N,U,V,ie),r&&r(N,j,ie)}function Ie(){return W.map(N=>({...N,handleSecondaryButtonClick:async()=>{L(N),N.skippable===!0&&await S(e,N.id,{skipped:!0}),he(N,"secondary",U)},handlePrimaryButtonClick:async()=>{(!N.completionCriteria&&(N.autoMarkCompleted||N.autoMarkCompleted===void 0)||N.completionCriteria&&N.autoMarkCompleted===!0)&&await H(N),he(N,"primary",U),D(N)}}))}async function ye(N){s&&s(),g==="complete-flow"?await C(e):await S(e,N.id)}function ce(){d&&d()}let Y=!document.querySelector(W[U].selector);function ge(){let N=W.findIndex(V=>!!document.querySelector(V.selector));return W.map((V,j)=>Y&&!n&&j!==N&&x?null:ut.createElement(Wo,{key:V.id,appearance:o,steps:Ie(),selectedStep:j,showTooltipsSimultaneously:n,dismissible:p,onDismiss:()=>ye(V),tooltipPosition:c,showHighlightOnly:a,completedStepsCount:I(e),onComplete:ce,cssPosition:y,...w}))}function te(){return ut.createElement(ut.Fragment,null,ut.createElement(re,{appearance:o}),n||Y&&x?ge():ut.createElement(Wo,{appearance:o,steps:Ie(),selectedStep:U,showTooltipsSimultaneously:n,dismissible:p,onDismiss:()=>ye(W[U]),tooltipPosition:c,completedStepsCount:I(e),showHighlightOnly:a,onComplete:ce,cssPosition:y,...w}))}return y==="static"?te():ut.createElement($d,null,te())};import Ae,{useEffect as Ud,useRef as zd,useState as _d}from"react";import{Portal as Wd}from"react-portal";import kt from"styled-components";var _s=kt.button`
1396
1396
  ${e=>k(e)} {
1397
1397
  // Anything inside this block will be ignored if the user provides a custom class
1398
1398