@frigade/react 1.32.73 → 1.32.74

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 ht,{createContext as za,useEffect as ko,useState as Ne}from"react";import{ThemeProvider as Wa}from"styled-components";import gt,{useContext as Ua,useEffect as Fo,useState as or}from"react";import{useCallback as mt,useContext as ll,useEffect as al}from"react";import $o,{useMemo as Xs}from"react";var Sr="1.32.73 ";var be="https://api.frigade.com/v1/public/",Ae="NOT_STARTED_STEP",J="COMPLETED_FLOW",lo="ABORTED_FLOW",ct="STARTED_FLOW",Le="NOT_STARTED_FLOW",Oe="COMPLETED_STEP",ao="STARTED_STEP";function Me(){let{publicApiKey:e,userId:t}=$o.useContext(Y);return{config:Xs(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Sr,"X-Frigade-SDK-Platform":"React"}}),[e,t])}}var Js="frigade-last-call-at-",Qs="frigade-last-call-data-";function Tt(){let{shouldGracefullyDegrade:e}=$o.useContext(Y);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),Wt();let i=Js+t,n=Qs+t;if(window&&window.localStorage&&o&&o.body&&o.method==="POST"){let s=window.localStorage.getItem(i),p=window.localStorage.getItem(n);if(s&&p&&p==o.body){let c=new Date(s);if(new Date().getTime()-c.getTime()<1e3)return Wt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,o.body)}let r;try{r=await fetch(t,o)}catch(s){return Wt(s)}return r?r.ok?r:Wt(r.statusText):Wt()}}function Wt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ft(){let{publicApiKey:e,shouldGracefullyDegrade:t}=$o.useContext(Y);function o(){if(t){console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize");return}e||console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider")}return{verifySDKInitiated:o}}import{useContext as il,useState as yr}from"react";import{useContext as Rs,useEffect as el,useState as tl}from"react";import ol from"swr";import{useContext as Zs}from"react";function Pe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:n}=Zs(Y);function r(d,u=!1){return e[d]??u}function s(d,u){t(y=>({...y,[d]:u}))}function p(d){t(u=>{let{[d]:y,...E}=u;return{...E}})}function c(d){n.includes(d)||i(u=>[...u,d])}function a(d){return n.includes(d)}function C(d){return Object.entries(e).some(([u,y])=>y&&u!=d)||o}return{getOpenFlowState:r,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:C,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}var rl="unknown";function Ie(){let{config:e}=Me(),{publicApiKey:t,userId:o,organizationId:i,flows:n,setShouldGracefullyDegrade:r}=Rs(Y),{resetOpenFlowState:s}=Pe(),[p,c]=tl(!1),a={data:n.map(S=>({flowId:S.id,flowState:J,lastStepId:null,userId:o,foreignUserId:o,stepStates:{},shouldTrigger:!1}))},C=S=>fetch(S,e).then(m=>{if(m.ok)return m.json();throw new Error("Failed to fetch user flow states")}).catch(m=>(console.log(`Error fetching ${S}: ${m}. Will gracefully degrade and hide Frigade`),r(!0),a)),{data:d,isLoading:u,mutate:y,error:E}=ol(t&&n&&o?`${be}userFlowStates?foreignUserId=${encodeURIComponent(o)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,C,{revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>a,onLoadingSlow:()=>a}),f=d==null?void 0:d.data;el(()=>{!p&&!u&&f&&c(!0)},[f,p,u]);async function x(S){if(f){let m=f.find(h=>h.flowId===S);m&&m.flowState!==J&&(m.flowState=J),await y(Promise.resolve({...d,data:f}),{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1})}}async function k(S,m,h){if(f){let w=f.find(I=>I.flowId===S);w&&(w.stepStates[m]=h,w.flowState=ct),await y(Promise.resolve({...d,data:f}),{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1})}}async function P(S,m,h){if(f){let w=f.find(I=>I.flowId===S);w&&(w.lastStepId=m,w.stepStates[m]=h,w.flowState=ct),await y({...d,data:f},{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1})}}async function B(S){if(f){let m=f.find(h=>h.flowId===S);m&&m.flowState!==Le&&(m.flowState=Le,m.lastStepId=rl,Object.keys(m.stepStates).forEach(h=>{m.stepStates[h].actionType=Ae,m.stepStates[h].createdAt=new Date().toISOString()}),await y({...d,data:f},{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1}),s(S))}}async function F(S,m){if(f){let h=f.find(w=>w.flowId===S);h&&h.stepStates[m]!==Ae&&(h.stepStates[m]=Ae),await y({...d,data:f},{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:f,isLoadingUserFlowStateData:!p,mutateUserFlowState:y,optimisticallyMarkFlowCompleted:x,optimisticallyMarkFlowNotStarted:B,optimisticallyMarkStepCompleted:k,optimisticallyMarkStepNotStarted:F,optimisticallyMarkStepStarted:P,error:E}}function Ht(){let{config:e}=Me(),{userFlowStatesData:t,mutateUserFlowState:o}=Ie(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:r,setFlowResponses:s}=il(Y),[p,c]=yr(new Set),[a,C]=yr(new Set),d=Tt();function u(f){let x=JSON.stringify(f);if(p.has(x))return null;p.add(x),c(p),a.add(f),C(a);let k=r==null?void 0:r.find(P=>P.flowSlug===f.flowSlug&&P.stepId===f.stepId&&P.actionType===f.actionType&&P.createdAt===f.createdAt);return d(`${be}flowResponses`,{...e,method:"POST",body:x}).then(P=>{P.status!==200&&P.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...i,f])):k||s(B=>[...B??[],f])})}async function y(f){f.foreignUserId&&(f.actionType===ct||f.actionType===Le?await u(f):f.actionType===J?await u(f):f.actionType===ao?await u(f):f.actionType===Oe?await u(f):f.actionType===lo?await u(f):f.actionType===Ae&&await u(f))}function E(){let f=[];return t==null||t.forEach(x=>{if(x&&x.stepStates&&Object.keys(x.stepStates).length!==0)for(let k in x.stepStates){let P=x.stepStates[k];f.push({foreignUserId:x.foreignUserId,flowSlug:x.flowId,stepId:P.stepId,actionType:P.actionType,data:{},createdAt:new Date(P.createdAt),blocked:P.blocked,hidden:P.hidden})}}),[...f,...r]}return{addResponse:y,setFlowResponses:s,getFlowResponses:E}}import pl from"swr";var nl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,br=e=>{let t=nl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,n)=>{let r=sl(i,"'","");r.startsWith("flow_")&&(o=r)}),o},sl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Q(){let{config:e}=Me(),{flows:t,setFlows:o,userId:i,publicApiKey:n,customVariables:r,setCustomVariables:s,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:c,setFlowResponses:a,setShouldGracefullyDegrade:C}=ll(Y),d={data:[]},{verifySDKInitiated:u}=Ft(),{addResponse:y,getFlowResponses:E}=Ht(),f=g=>fetch(g,e).then(b=>b.ok?b.json():(console.log(`Error fetching ${g} (${b.status}): ${b.statusText}. .Will gracefully degrade and hide Frigade`),C(!0),d)).catch(b=>(console.log(`Error fetching ${g}: ${b}. Will gracefully degrade and hide Frigade`),C(!0),d)),{userFlowStatesData:x,isLoadingUserFlowStateData:k,optimisticallyMarkFlowCompleted:P,optimisticallyMarkFlowNotStarted:B,optimisticallyMarkStepCompleted:F,optimisticallyMarkStepNotStarted:S,optimisticallyMarkStepStarted:m}=Ie(),{data:h,error:w,isLoading:I}=pl(n?`${be}flows`:null,f,{keepPreviousData:!0});al(()=>{if(w){console.error(w);return}h&&h.data&&(h.data=o(h.data))},[h,w]);function W(g){if(I)return null;let b=t.find(v=>v.slug===g);return!b&&t.length>0&&!k&&!I?(console.log(`Flow with slug ${g} not found`),null):(b==null?void 0:b.active)===!1?null:b}function H(g){var _;if(!W(g))return[];let b=W(g).data;return b?(b=A(b),(((_=JSON.parse(b))==null?void 0:_.data)??[]).map(de=>{let z=K(de);return{handleSecondaryButtonClick:()=>{de.skippable===!0&&D(g,de.id,{skipped:!0})},...de,complete:N(g,de.id)===Oe||z>=1,blocked:j(g,de.id),hidden:fe(g,de.id),handlePrimaryButtonClick:()=>{(!de.completionCriteria&&(de.autoMarkCompleted||de.autoMarkCompleted===void 0)||de.completionCriteria&&de.autoMarkCompleted===!0)&&D(g,de.id)},progress:z}}).filter(de=>de.hidden!==!0)):[]}function A(g){return g.replaceAll(/\${(.*?)}/g,(b,v)=>r[v]===void 0?"":String(r[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(g){if(!W(g))return[];let b=W(g).data;return b?(b=A(b),JSON.parse(b)??{}):[]}function $(g,b){s(v=>({...v,[g]:b}))}function O(g){!k&&!I&&g&&JSON.stringify(r)!=JSON.stringify({...r,...g})&&Object.keys(g).forEach(b=>{$(b,g[b])})}let se=mt(async(g,b,v)=>{u();let _={foreignUserId:i,flowSlug:g,stepId:b,actionType:ao,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(_)&&(await m(g,b,_),y(_))},[i,x]),pe=mt(async(g,b,v)=>{u();let _={foreignUserId:i,flowSlug:g,stepId:b,actionType:Ae,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(_)&&(await S(g,b),y(_))},[i,x]),D=mt(async(g,b,v)=>{u();let _={foreignUserId:i,flowSlug:g,stepId:b,actionType:Oe,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(_)&&(await F(g,b,_),y(_))},[i,x]),Te=mt(async(g,b)=>{if(u(),X(g)===Le)return;let v={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Le,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};await B(g),re(v)&&y(v)},[i,x]),Fe=mt(async(g,b)=>{u();let v={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:ct,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&y(v)},[i,x]),ee=mt(async(g,b)=>{u();let v={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:J,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&(await P(g),y(v))},[i,x]),q=mt(async(g,b)=>{u();let v={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:lo,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&(await P(g),y(v))},[i,x]);function re(g){var b;if(!x&&g.actionType===Ae)return!1;if(x){let v=x.find(_=>_.flowId===g.flowSlug);if(g.actionType===Ae&&(!(v!=null&&v.stepStates[g.stepId])||v.stepStates[g.stepId].actionType===Ae)||v&&((b=v.stepStates[g.stepId])==null?void 0:b.actionType)===g.actionType||v&&v.flowState===J&&g.actionType===J)return!1}return!0}function N(g,b){let v=ke(g,b);return k?null:v?v.actionType:Ae}function j(g,b){let v=ke(g,b);return v?v.blocked:!1}function fe(g,b){let v=ke(g,b);return v?v.hidden:!1}function ke(g,b){if(k)return null;let v=x==null?void 0:x.find(_=>_.flowId===g);return!v||!v.stepStates[b]?null:v.stepStates[b]??null}function G(g){var v;if(k||!x)return null;if(X(g)===Le)return H(g)[0]??null;let b=(v=x.find(_=>_.flowId===g))==null?void 0:v.lastStepId;return b?H(g).find(_=>_.id===b):null}function ge(g){let b=G(g);if(!b)return 0;let v=H(g).findIndex(_=>_.id===b.id)??0;return N(g,b.id)===Oe&&v<H(g).length-1?v+1:v}function K(g){if(!g.completionCriteria)return;let b=br(g.completionCriteria);if(b===null)return;let v=je(b),_=Ge(b);return _===0?void 0:v/_}function X(g){let b=x==null?void 0:x.find(v=>v.flowId===g);return b?b.flowState:null}function je(g){let b=H(g);return b.length===0?0:b.filter(_=>N(g,_.id)===Oe).length}function Ge(g){return H(g).length}function wt(g){return JSON.parse(t.find(b=>b.slug===g).data)}function V(g){if(k)return!0;if(g!=null&&g.targetingLogic&&x){let b=x.find(v=>v.flowId===g.slug);if(b)return b.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&i&&i.startsWith("guest_"))}function Be(g){return!V(W(g))}return{getFlow:W,getFlowData:wt,isLoading:k||I,getStepStatus:N,getFlowSteps:H,getCurrentStepIndex:ge,markStepStarted:se,markStepCompleted:D,markFlowNotStarted:Te,markFlowStarted:Fe,markFlowCompleted:ee,markFlowAborted:q,markStepNotStarted:pe,getFlowStatus:X,getNumberOfStepsCompleted:je,getNumberOfSteps:Ge,targetingLogicShouldHideFlow:V,setCustomVariable:$,updateCustomVariables:O,customVariables:r,getStepOptionalProgress:K,getFlowMetadata:U,isStepBlocked:j,isStepHidden:fe,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:c,isFlowAvailableToUser:Be}}import{useCallback as wr,useContext as dl,useEffect as cl}from"react";var kt="guest_";function Vt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:n}=dl(Y),{config:r}=Me(),{mutateUserFlowState:s}=Ie(),p=Tt(),{verifySDKInitiated:c}=Ft();cl(()=>{if(e&&!t){if(e.startsWith(kt))return;let d=`frigade-user-registered-${e}`;localStorage.getItem(d)||(p(`${be}users`,{...r,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(d,"true"))}},[e,n,t]);let a=wr(async d=>{c();let u={foreignId:e,properties:d};await p(`${be}users`,{...r,method:"POST",body:JSON.stringify(u)}),i(y=>({...y,...d})),s()},[e,r,n,s]),C=wr(async(d,u)=>{c();let E={foreignId:e,events:[{event:d,properties:u}]};await p(`${be}users`,{...r,method:"POST",body:JSON.stringify(E)}),s()},[e,r,s]);return{userId:e,setUserId:o,addPropertiesToUser:a,trackEventForUser:C}}import{v4 as _a}from"uuid";import _e,{useEffect as Oa,useState as Da}from"react";import De,{useEffect as Cl}from"react";import mo from"styled-components";import ml from"react";import ul from"styled-components";var Tr="fr-",jt="cfr-";function l(e,t){let o=`${Tr}${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+" "+jt+e}return o}function T(e){if(!e.className||e.className.indexOf(jt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Tr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Mo(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=>`${Mo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function xe(...e){return e.filter(Boolean).join(" ")}function Gt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var fl=ul.div`
2
+ import ht,{createContext as za,useEffect as ko,useState as Ne}from"react";import{ThemeProvider as Wa}from"styled-components";import gt,{useContext as Ua,useEffect as Fo,useState as or}from"react";import{useCallback as mt,useContext as ll,useEffect as al}from"react";import $o,{useMemo as Xs}from"react";var Sr="1.32.74 ";var be="https://api.frigade.com/v1/public/",Ae="NOT_STARTED_STEP",J="COMPLETED_FLOW",lo="ABORTED_FLOW",ct="STARTED_FLOW",Le="NOT_STARTED_FLOW",Oe="COMPLETED_STEP",ao="STARTED_STEP";function Me(){let{publicApiKey:e,userId:t}=$o.useContext(Y);return{config:Xs(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Sr,"X-Frigade-SDK-Platform":"React"}}),[e,t])}}var Js="frigade-last-call-at-",Qs="frigade-last-call-data-";function Tt(){let{shouldGracefullyDegrade:e}=$o.useContext(Y);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),Wt();let i=Js+t,n=Qs+t;if(window&&window.localStorage&&o&&o.body&&o.method==="POST"){let s=window.localStorage.getItem(i),p=window.localStorage.getItem(n);if(s&&p&&p==o.body){let c=new Date(s);if(new Date().getTime()-c.getTime()<1e3)return Wt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,o.body)}let r;try{r=await fetch(t,o)}catch(s){return Wt(s)}return r?r.ok?r:Wt(r.statusText):Wt()}}function Wt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ft(){let{publicApiKey:e,shouldGracefullyDegrade:t}=$o.useContext(Y);function o(){if(t){console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize");return}e||console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider")}return{verifySDKInitiated:o}}import{useContext as il,useState as yr}from"react";import{useContext as Rs,useEffect as el,useState as tl}from"react";import ol from"swr";import{useContext as Zs}from"react";function Pe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:n}=Zs(Y);function r(d,u=!1){return e[d]??u}function s(d,u){t(y=>({...y,[d]:u}))}function p(d){t(u=>{let{[d]:y,...E}=u;return{...E}})}function c(d){n.includes(d)||i(u=>[...u,d])}function a(d){return n.includes(d)}function C(d){return Object.entries(e).some(([u,y])=>y&&u!=d)||o}return{getOpenFlowState:r,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:C,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}var rl="unknown";function Ie(){let{config:e}=Me(),{publicApiKey:t,userId:o,organizationId:i,flows:n,setShouldGracefullyDegrade:r}=Rs(Y),{resetOpenFlowState:s}=Pe(),[p,c]=tl(!1),a={data:n.map(S=>({flowId:S.id,flowState:J,lastStepId:null,userId:o,foreignUserId:o,stepStates:{},shouldTrigger:!1}))},C=S=>fetch(S,e).then(m=>{if(m.ok)return m.json();throw new Error("Failed to fetch user flow states")}).catch(m=>(console.log(`Error fetching ${S}: ${m}. Will gracefully degrade and hide Frigade`),r(!0),a)),{data:d,isLoading:u,mutate:y,error:E}=ol(t&&n&&o?`${be}userFlowStates?foreignUserId=${encodeURIComponent(o)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,C,{revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>a,onLoadingSlow:()=>a}),f=d==null?void 0:d.data;el(()=>{!p&&!u&&f&&c(!0)},[f,p,u]);async function x(S){if(f){let m=f.find(h=>h.flowId===S);m&&m.flowState!==J&&(m.flowState=J),await y(Promise.resolve({...d,data:f}),{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1})}}async function k(S,m,h){if(f){let w=f.find(I=>I.flowId===S);w&&(w.stepStates[m]=h,w.flowState=ct),await y(Promise.resolve({...d,data:f}),{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1})}}async function P(S,m,h){if(f){let w=f.find(I=>I.flowId===S);w&&(w.lastStepId=m,w.stepStates[m]=h,w.flowState=ct),await y({...d,data:f},{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1})}}async function B(S){if(f){let m=f.find(h=>h.flowId===S);m&&m.flowState!==Le&&(m.flowState=Le,m.lastStepId=rl,Object.keys(m.stepStates).forEach(h=>{m.stepStates[h].actionType=Ae,m.stepStates[h].createdAt=new Date().toISOString()}),await y({...d,data:f},{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1}),s(S))}}async function F(S,m){if(f){let h=f.find(w=>w.flowId===S);h&&h.stepStates[m]!==Ae&&(h.stepStates[m]=Ae),await y({...d,data:f},{optimisticData:{...d,data:f},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:f,isLoadingUserFlowStateData:!p,mutateUserFlowState:y,optimisticallyMarkFlowCompleted:x,optimisticallyMarkFlowNotStarted:B,optimisticallyMarkStepCompleted:k,optimisticallyMarkStepNotStarted:F,optimisticallyMarkStepStarted:P,error:E}}function Ht(){let{config:e}=Me(),{userFlowStatesData:t,mutateUserFlowState:o}=Ie(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:r,setFlowResponses:s}=il(Y),[p,c]=yr(new Set),[a,C]=yr(new Set),d=Tt();function u(f){let x=JSON.stringify(f);if(p.has(x))return null;p.add(x),c(p),a.add(f),C(a);let k=r==null?void 0:r.find(P=>P.flowSlug===f.flowSlug&&P.stepId===f.stepId&&P.actionType===f.actionType&&P.createdAt===f.createdAt);return d(`${be}flowResponses`,{...e,method:"POST",body:x}).then(P=>{P.status!==200&&P.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...i,f])):k||s(B=>[...B??[],f])})}async function y(f){f.foreignUserId&&(f.actionType===ct||f.actionType===Le?await u(f):f.actionType===J?await u(f):f.actionType===ao?await u(f):f.actionType===Oe?await u(f):f.actionType===lo?await u(f):f.actionType===Ae&&await u(f))}function E(){let f=[];return t==null||t.forEach(x=>{if(x&&x.stepStates&&Object.keys(x.stepStates).length!==0)for(let k in x.stepStates){let P=x.stepStates[k];f.push({foreignUserId:x.foreignUserId,flowSlug:x.flowId,stepId:P.stepId,actionType:P.actionType,data:{},createdAt:new Date(P.createdAt),blocked:P.blocked,hidden:P.hidden})}}),[...f,...r]}return{addResponse:y,setFlowResponses:s,getFlowResponses:E}}import pl from"swr";var nl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,br=e=>{let t=nl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,n)=>{let r=sl(i,"'","");r.startsWith("flow_")&&(o=r)}),o},sl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Q(){let{config:e}=Me(),{flows:t,setFlows:o,userId:i,publicApiKey:n,customVariables:r,setCustomVariables:s,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:c,setFlowResponses:a,setShouldGracefullyDegrade:C}=ll(Y),d={data:[]},{verifySDKInitiated:u}=Ft(),{addResponse:y,getFlowResponses:E}=Ht(),f=g=>fetch(g,e).then(b=>b.ok?b.json():(console.log(`Error fetching ${g} (${b.status}): ${b.statusText}. .Will gracefully degrade and hide Frigade`),C(!0),d)).catch(b=>(console.log(`Error fetching ${g}: ${b}. Will gracefully degrade and hide Frigade`),C(!0),d)),{userFlowStatesData:x,isLoadingUserFlowStateData:k,optimisticallyMarkFlowCompleted:P,optimisticallyMarkFlowNotStarted:B,optimisticallyMarkStepCompleted:F,optimisticallyMarkStepNotStarted:S,optimisticallyMarkStepStarted:m}=Ie(),{data:h,error:w,isLoading:I}=pl(n?`${be}flows`:null,f,{keepPreviousData:!0});al(()=>{if(w){console.error(w);return}h&&h.data&&(h.data=o(h.data))},[h,w]);function W(g){if(I)return null;let b=t.find(v=>v.slug===g);return!b&&t.length>0&&!k&&!I?(console.log(`Flow with slug ${g} not found`),null):(b==null?void 0:b.active)===!1?null:b}function H(g){var _;if(!W(g))return[];let b=W(g).data;return b?(b=A(b),(((_=JSON.parse(b))==null?void 0:_.data)??[]).map(de=>{let z=K(de);return{handleSecondaryButtonClick:()=>{de.skippable===!0&&D(g,de.id,{skipped:!0})},...de,complete:N(g,de.id)===Oe||z>=1,blocked:j(g,de.id),hidden:fe(g,de.id),handlePrimaryButtonClick:()=>{(!de.completionCriteria&&(de.autoMarkCompleted||de.autoMarkCompleted===void 0)||de.completionCriteria&&de.autoMarkCompleted===!0)&&D(g,de.id)},progress:z}}).filter(de=>de.hidden!==!0)):[]}function A(g){return g.replaceAll(/\${(.*?)}/g,(b,v)=>r[v]===void 0?"":String(r[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(g){if(!W(g))return[];let b=W(g).data;return b?(b=A(b),JSON.parse(b)??{}):[]}function $(g,b){s(v=>({...v,[g]:b}))}function O(g){!k&&!I&&g&&JSON.stringify(r)!=JSON.stringify({...r,...g})&&Object.keys(g).forEach(b=>{$(b,g[b])})}let se=mt(async(g,b,v)=>{u();let _={foreignUserId:i,flowSlug:g,stepId:b,actionType:ao,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(_)&&(await m(g,b,_),y(_))},[i,x]),pe=mt(async(g,b,v)=>{u();let _={foreignUserId:i,flowSlug:g,stepId:b,actionType:Ae,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(_)&&(await S(g,b),y(_))},[i,x]),D=mt(async(g,b,v)=>{u();let _={foreignUserId:i,flowSlug:g,stepId:b,actionType:Oe,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(_)&&(await F(g,b,_),y(_))},[i,x]),Te=mt(async(g,b)=>{if(u(),X(g)===Le)return;let v={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Le,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};await B(g),re(v)&&y(v)},[i,x]),Fe=mt(async(g,b)=>{u();let v={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:ct,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&y(v)},[i,x]),ee=mt(async(g,b)=>{u();let v={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:J,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&(await P(g),y(v))},[i,x]),q=mt(async(g,b)=>{u();let v={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:lo,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&(await P(g),y(v))},[i,x]);function re(g){var b;if(!x&&g.actionType===Ae)return!1;if(x){let v=x.find(_=>_.flowId===g.flowSlug);if(g.actionType===Ae&&(!(v!=null&&v.stepStates[g.stepId])||v.stepStates[g.stepId].actionType===Ae)||v&&((b=v.stepStates[g.stepId])==null?void 0:b.actionType)===g.actionType||v&&v.flowState===J&&g.actionType===J)return!1}return!0}function N(g,b){let v=ke(g,b);return k?null:v?v.actionType:Ae}function j(g,b){let v=ke(g,b);return v?v.blocked:!1}function fe(g,b){let v=ke(g,b);return v?v.hidden:!1}function ke(g,b){if(k)return null;let v=x==null?void 0:x.find(_=>_.flowId===g);return!v||!v.stepStates[b]?null:v.stepStates[b]??null}function G(g){var v;if(k||!x)return null;if(X(g)===Le)return H(g)[0]??null;let b=(v=x.find(_=>_.flowId===g))==null?void 0:v.lastStepId;return b?H(g).find(_=>_.id===b):null}function ge(g){let b=G(g);if(!b)return 0;let v=H(g).findIndex(_=>_.id===b.id)??0;return N(g,b.id)===Oe&&v<H(g).length-1?v+1:v}function K(g){if(!g.completionCriteria)return;let b=br(g.completionCriteria);if(b===null)return;let v=je(b),_=Ge(b);return _===0?void 0:v/_}function X(g){let b=x==null?void 0:x.find(v=>v.flowId===g);return b?b.flowState:null}function je(g){let b=H(g);return b.length===0?0:b.filter(_=>N(g,_.id)===Oe).length}function Ge(g){return H(g).length}function wt(g){return JSON.parse(t.find(b=>b.slug===g).data)}function V(g){if(k)return!0;if(g!=null&&g.targetingLogic&&x){let b=x.find(v=>v.flowId===g.slug);if(b)return b.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&i&&i.startsWith("guest_"))}function Be(g){return!V(W(g))}return{getFlow:W,getFlowData:wt,isLoading:k||I,getStepStatus:N,getFlowSteps:H,getCurrentStepIndex:ge,markStepStarted:se,markStepCompleted:D,markFlowNotStarted:Te,markFlowStarted:Fe,markFlowCompleted:ee,markFlowAborted:q,markStepNotStarted:pe,getFlowStatus:X,getNumberOfStepsCompleted:je,getNumberOfSteps:Ge,targetingLogicShouldHideFlow:V,setCustomVariable:$,updateCustomVariables:O,customVariables:r,getStepOptionalProgress:K,getFlowMetadata:U,isStepBlocked:j,isStepHidden:fe,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:c,isFlowAvailableToUser:Be}}import{useCallback as wr,useContext as dl,useEffect as cl}from"react";var kt="guest_";function Vt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:n}=dl(Y),{config:r}=Me(),{mutateUserFlowState:s}=Ie(),p=Tt(),{verifySDKInitiated:c}=Ft();cl(()=>{if(e&&!t){if(e.startsWith(kt))return;let d=`frigade-user-registered-${e}`;localStorage.getItem(d)||(p(`${be}users`,{...r,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(d,"true"))}},[e,n,t]);let a=wr(async d=>{c();let u={foreignId:e,properties:d};await p(`${be}users`,{...r,method:"POST",body:JSON.stringify(u)}),i(y=>({...y,...d})),s()},[e,r,n,s]),C=wr(async(d,u)=>{c();let E={foreignId:e,events:[{event:d,properties:u}]};await p(`${be}users`,{...r,method:"POST",body:JSON.stringify(E)}),s()},[e,r,s]);return{userId:e,setUserId:o,addPropertiesToUser:a,trackEventForUser:C}}import{v4 as _a}from"uuid";import _e,{useEffect as Oa,useState as Da}from"react";import De,{useEffect as Cl}from"react";import mo from"styled-components";import ml from"react";import ul from"styled-components";var Tr="fr-",jt="cfr-";function l(e,t){let o=`${Tr}${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+" "+jt+e}return o}function T(e){if(!e.className||e.className.indexOf(jt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Tr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Mo(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=>`${Mo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function xe(...e){return e.filter(Boolean).join(" ")}function Gt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var fl=ul.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;
@@ -1346,7 +1346,7 @@ ${i=>i.inlineStyles.map(([n,r])=>`.${jt}${n}.${jt}${n} { ${Object.entries(r).map
1346
1346
  `,rd=no(ys)`
1347
1347
  width: ${Ut+12}px;
1348
1348
  height: ${Ut+12}px;
1349
- `,id=({steps:e=[],onDismiss:t,onComplete:o=()=>{},tooltipPosition:i="auto",showHighlight:n=!0,primaryColor:r="#000000",offset:s={x:0,y:0},visible:p=!0,containerStyle:c={},selectedStep:a=0,customStepTypes:C,appearance:d,dismissible:u=!1,showHighlightOnly:y,showStepCount:E=!0,completedStepsCount:f=0,showFrigadeBranding:x=!1})=>{var X,je,Ge,wt;let[k,P]=io(),[B,F]=io(new Date),S=Zp(null),[m,h]=io(document.querySelector(e[a].selector)),w=hs(m,B),[I,W]=io(),[H,A]=io(!y),U=(je=(X=e[a])==null?void 0:X.props)!=null&&je.position?e[a].props.position:"absolute",$=((wt=(Ge=e[a])==null?void 0:Ge.props)==null?void 0:wt.zIndex)??90,O=(k==null?void 0:k.width)??Cs,se=(k==null?void 0:k.height)??Ss;xs(()=>{S.current&&P({width:S.current.clientWidth,height:S.current.clientHeight})},[a,B,U]),Lo(()=>{y||A(!0)},[a]);let pe=i==="auto"?"right":i,D=mr(w,pe,O,s,U),Te=w.right+O>(window.innerWidth||document.documentElement.clientWidth),Fe=w.bottom+Ss>(window.innerHeight||document.documentElement.clientHeight);Te&&i==="auto"&&(D=mr(w,"left",O,s,U),pe="left");let ee=window.location.pathname.split("/").pop(),q=()=>{let V=document.querySelector(e[a].selector);I&&I===JSON.stringify(V==null?void 0:V.getBoundingClientRect())||(h(V),F(new Date),V&&W(JSON.stringify(V.getBoundingClientRect())))};if(Lo(()=>{let V=new MutationObserver(q);return V.observe(document.body,{subtree:!0,childList:!0}),()=>V.disconnect()},[q]),Lo(()=>{let V=new MutationObserver(q);return V.observe(document.body,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["style","class"]}),()=>V.disconnect()},[q]),Lo(()=>{let V=setInterval(()=>{q()},10);return()=>clearInterval(V)},[q]),xs(()=>{setTimeout(()=>{q()},Rp),q()},[a,ee]),m===null)return L.createElement(L.Fragment,null);if(D.x==0&&D.y==0)return L.createElement(L.Fragment,null);if(!p)return L.createElement(L.Fragment,null);let re=()=>{let V=()=>{if(e[a].handlePrimaryButtonClick&&(e[a].handlePrimaryButtonClick(),A(!1),setTimeout(()=>{q()},30)),f===e.length-1)return o()},Be=()=>{e[a].handleSecondaryButtonClick&&(e[a].handleSecondaryButtonClick(),y&&A(!1))};return L.createElement(L.Fragment,null,E&&L.createElement(Ar,null,L.createElement(Nr,{className:l("tooltipStepCounter",d)},a+1," of ",e.length)),L.createElement(Ir,{showStepCount:E,className:l("tooltipCTAContainer",d)},e[a].secondaryButtonTitle&&L.createElement(te,{title:e[a].secondaryButtonTitle,appearance:d,onClick:Be,size:"small",withMargin:!1,secondary:!0}),e[a].primaryButtonTitle&&L.createElement(te,{title:e[a].primaryButtonTitle,appearance:d,onClick:V,withMargin:!1,size:"small"})))},N=()=>L.createElement(L.Fragment,null,u&&L.createElement(Pr,{"data-testid":"tooltip-dismiss",onClick:()=>{t&&t()},className:l("tooltipClose",d)},L.createElement(ve,null)),e[a].imageUri&&L.createElement(vr,{dismissible:u,appearance:d,src:e[a].imageUri,className:l("tooltipImageContainer",d)}),e[a].videoUri&&!e[a].imageUri&&L.createElement(Er,{dismissible:u,appearance:d,className:l("tooltipVideoContainer",d)},L.createElement(Bt,{appearance:d,videoUri:e[a].videoUri})),L.createElement(Ce,{appearance:d,title:e[a].title,subtitle:e[a].subtitle,size:"small"}),L.createElement(Br,{className:l("tooltipFooter",d)},L.createElement(re,null))),fe={...{default:V=>{var Be;if((Be=e[a])!=null&&Be.StepContent){let g=e[a].StepContent;return L.createElement("div",null,g)}return L.createElement(N,null)}},...C},ke=()=>{var V;return e?!((V=e[a])!=null&&V.type)||!fe[e[a].type]?fe.default(e[a]):fe[e[a].type]({stepData:e[a],primaryColor:r}):L.createElement(L.Fragment,null)};if(y&&e[a].complete===!0)return null;let G={top:(D==null?void 0:D.y)-Ut,left:(pe=="left"?w.x+s.x:(D==null?void 0:D.x)-Ut)??0,cursor:y?"pointer":"default",position:U},ge=()=>{let Be=G.left+(pe=="left"?-O:24);return Math.min(Math.max(Be,20),window.innerWidth-O-20)},K=()=>{y&&(F(new Date),A(!H))};return L.createElement(od,null,L.createElement(rd,{style:G,zIndex:$,className:l("tourHighlightContainer",d)},n&&e[a].showHighlight!==!1&&L.createElement(L.Fragment,null,L.createElement(td,{style:{position:U},onClick:K,primaryColor:d.theme.colorPrimary}),L.createElement(ed,{style:{position:"absolute"},onClick:K,primaryColor:d.theme.colorPrimary}))),L.createElement(ys,{style:{...G,left:ge()},zIndex:$+1,className:l("tooltipContainerWrapper",d)},H&&L.createElement(L.Fragment,null,L.createElement(po,{ref:S,layoutId:"tooltip-container",style:{position:"relative",width:"max-content",right:0,top:12,...c},appearance:d,className:l("tooltipContainer",d),maxWidth:Cs,zIndex:$+10},L.createElement(ke,null)),x&&L.createElement(Or,{className:l("poweredByFrigadeTooltipRibbon",d),appearance:d,zIndex:$+10},L.createElement(co,{appearance:d})))))},Oo=id;import{Portal as ld}from"react-portal";var ad=({flowId:e,customVariables:t,appearance:o,onStepCompletion:i,onButtonClick:n,showTooltipsSimultaneously:r=!1,onDismiss:s,dismissible:p,tooltipPosition:c="auto",showHighlightOnly:a=!1,dismissBehavior:C="complete-flow",onComplete:d,...u})=>{let{getFlow:y,getFlowSteps:E,isLoading:f,targetingLogicShouldHideFlow:x,markStepCompleted:k,markStepStarted:P,markFlowCompleted:B,updateCustomVariables:F,getCurrentStepIndex:S,getStepStatus:m,isStepBlocked:h,getFlowStatus:w,getNumberOfStepsCompleted:I}=Q(),{isLoadingUserFlowStateData:W}=Ie(),{primaryCTAClickSideEffects:H,secondaryCTAClickSideEffects:A}=ie(),{hasOpenModals:U}=Pe(),$=S(e),{openFlowStates:O}=nd(Y),{mergeAppearanceWithDefault:se}=Z();if(o=se(o),sd(()=>{F(t)},[t,f]),W)return null;let pe=y(e);if(!pe||x(pe)||w(e)==J||U())return null;let D=E(e);if(Object.keys(O).length>0){let N=Object.keys(O).find(j=>O[j]===!0);if(N!==void 0&&N!==e)return _t.createElement(_t.Fragment,null)}async function Te(N){if(await k(e,N.id),D.map(j=>m(e,j.id)).every(j=>j===Oe)){await B(e);return}if(!a&&$+1<D.length){if(h(e,D[$+1].id))return;await P(e,D[$+1].id)}}function Fe(N,j,fe){let ke=$+1<D.length?D[$+1]:null;n&&n(N,$,j,ke),i&&i(N,fe,ke)}function ee(){return D.map(N=>({...N,handleSecondaryButtonClick:async()=>{A(N),N.skippable===!0&&await k(e,N.id,{skipped:!0}),Fe(N,"secondary",$)},handlePrimaryButtonClick:async()=>{(!N.completionCriteria&&(N.autoMarkCompleted||N.autoMarkCompleted===void 0)||N.completionCriteria&&N.autoMarkCompleted===!0)&&await Te(N),Fe(N,"primary",$),H(N)}}))}async function q(N){s&&s(),C==="complete-flow"?await B(e):await k(e,N.id)}function re(){d&&d()}return _t.createElement(ld,null,_t.createElement(oe,{appearance:o}),r?D.map((N,j)=>_t.createElement(Oo,{key:N.id,appearance:o,steps:ee(),selectedStep:j,showTooltipsSimultaneously:r,dismissible:p,onDismiss:()=>q(N),tooltipPosition:c,showHighlightOnly:a,completedStepsCount:I(e),onComplete:re,...u})):_t.createElement(Oo,{appearance:o,steps:ee(),selectedStep:$,showTooltipsSimultaneously:r,dismissible:p,onDismiss:()=>q(D[$]),tooltipPosition:c,completedStepsCount:I(e),showHighlightOnly:a,onComplete:re,...u}))};import ye,{useEffect as pd,useRef as dd,useState as cd}from"react";import{Portal as md}from"react-portal";import bt from"styled-components";var bs=bt.button`
1349
+ `,id=({steps:e=[],onDismiss:t,onComplete:o=()=>{},tooltipPosition:i="auto",showHighlight:n=!0,primaryColor:r="#000000",offset:s={x:0,y:0},visible:p=!0,containerStyle:c={},selectedStep:a=0,customStepTypes:C,appearance:d,dismissible:u=!1,showHighlightOnly:y,showStepCount:E=!0,completedStepsCount:f=0,showFrigadeBranding:x=!1})=>{var X,je,Ge,wt;let[k,P]=io(),[B,F]=io(new Date),S=Zp(null),[m,h]=io(document.querySelector(e[a].selector)),w=hs(m,B),[I,W]=io(),[H,A]=io(!y),U=(je=(X=e[a])==null?void 0:X.props)!=null&&je.position?e[a].props.position:"absolute",$=((wt=(Ge=e[a])==null?void 0:Ge.props)==null?void 0:wt.zIndex)??90,O=(k==null?void 0:k.width)??Cs,se=(k==null?void 0:k.height)??Ss;xs(()=>{S.current&&P({width:S.current.clientWidth,height:S.current.clientHeight})},[a,B,U]),Lo(()=>{y||A(!0)},[a]);let pe=i==="auto"?"right":i,D=mr(w,pe,O,s,U),Te=w.right+O>(window.innerWidth||document.documentElement.clientWidth),Fe=w.bottom+Ss>(window.innerHeight||document.documentElement.clientHeight);Te&&i==="auto"&&(D=mr(w,"left",O,s,U),pe="left");let ee=window.location.pathname.split("/").pop(),q=()=>{let V=document.querySelector(e[a].selector);I&&I===JSON.stringify(V==null?void 0:V.getBoundingClientRect())||(h(V),F(new Date),V&&W(JSON.stringify(V.getBoundingClientRect())))};if(Lo(()=>{let V=new MutationObserver(q);return V.observe(document.body,{subtree:!0,childList:!0}),()=>V.disconnect()},[q]),Lo(()=>{let V=new MutationObserver(q);return V.observe(document.body,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["style","class"]}),()=>V.disconnect()},[q]),Lo(()=>{let V=setInterval(()=>{q()},10);return()=>clearInterval(V)},[q]),xs(()=>{setTimeout(()=>{q()},Rp),q()},[a,ee]),m===null)return L.createElement(L.Fragment,null);if(D.x==0&&D.y==0)return L.createElement(L.Fragment,null);if(!p)return L.createElement(L.Fragment,null);let re=()=>{let V=()=>{if(e[a].handlePrimaryButtonClick&&(e[a].handlePrimaryButtonClick(),A(!1),setTimeout(()=>{q()},30)),f===e.length-1)return o()},Be=()=>{e[a].handleSecondaryButtonClick&&(e[a].handleSecondaryButtonClick(),y&&A(!1))};return L.createElement(L.Fragment,null,E&&L.createElement(Ar,null,L.createElement(Nr,{className:l("tooltipStepCounter",d)},a+1," of ",e.length)),L.createElement(Ir,{showStepCount:E,className:l("tooltipCTAContainer",d)},e[a].secondaryButtonTitle&&L.createElement(te,{title:e[a].secondaryButtonTitle,appearance:d,onClick:Be,size:"small",withMargin:!1,secondary:!0}),e[a].primaryButtonTitle&&L.createElement(te,{title:e[a].primaryButtonTitle,appearance:d,onClick:V,withMargin:!1,size:"small"})))},N=()=>L.createElement(L.Fragment,null,u&&L.createElement(Pr,{"data-testid":"tooltip-dismiss",onClick:()=>{t&&t()},className:l("tooltipClose",d)},L.createElement(ve,null)),e[a].imageUri&&L.createElement(vr,{dismissible:u,appearance:d,src:e[a].imageUri,className:l("tooltipImageContainer",d)}),e[a].videoUri&&!e[a].imageUri&&L.createElement(Er,{dismissible:u,appearance:d,className:l("tooltipVideoContainer",d)},L.createElement(Bt,{appearance:d,videoUri:e[a].videoUri})),L.createElement(Ce,{appearance:d,title:e[a].title,subtitle:e[a].subtitle,size:"small"}),L.createElement(Br,{className:l("tooltipFooter",d)},L.createElement(re,null))),fe={...{default:V=>{var Be;if((Be=e[a])!=null&&Be.StepContent){let g=e[a].StepContent;return L.createElement("div",null,g)}return L.createElement(N,null)}},...C},ke=()=>{var V;return e?!((V=e[a])!=null&&V.type)||!fe[e[a].type]?fe.default(e[a]):fe[e[a].type]({stepData:e[a],primaryColor:r}):L.createElement(L.Fragment,null)};if(y&&e[a].complete===!0)return null;let G={top:(D==null?void 0:D.y)-Ut,left:(pe=="left"?w.x+s.x:(D==null?void 0:D.x)-Ut)??0,cursor:y?"pointer":"default",position:U},ge=()=>{let Be=G.left+(pe=="left"?-O:24);return Math.min(Math.max(Be,20),window.innerWidth-O-20)},K=()=>{y&&(F(new Date),A(!H))};return L.createElement(od,null,L.createElement(rd,{style:G,zIndex:$,className:l("tourHighlightContainer",d)},n&&e[a].showHighlight!==!1&&L.createElement(L.Fragment,null,L.createElement(td,{style:{position:U},onClick:K,primaryColor:d.theme.colorPrimary,className:l("tourHighlightInnerCircle",d)}),L.createElement(ed,{style:{position:"absolute"},onClick:K,primaryColor:d.theme.colorPrimary,className:l("tourHighlightOuterCircle",d)}))),L.createElement(ys,{style:{...G,left:ge()},zIndex:$+1,className:l("tooltipContainerWrapper",d)},H&&L.createElement(L.Fragment,null,L.createElement(po,{ref:S,layoutId:"tooltip-container",style:{position:"relative",width:"max-content",right:0,top:12,...c},appearance:d,className:l("tooltipContainer",d),maxWidth:Cs,zIndex:$+10},L.createElement(ke,null)),x&&L.createElement(Or,{className:l("poweredByFrigadeTooltipRibbon",d),appearance:d,zIndex:$+10},L.createElement(co,{appearance:d})))))},Oo=id;import{Portal as ld}from"react-portal";var ad=({flowId:e,customVariables:t,appearance:o,onStepCompletion:i,onButtonClick:n,showTooltipsSimultaneously:r=!1,onDismiss:s,dismissible:p,tooltipPosition:c="auto",showHighlightOnly:a=!1,dismissBehavior:C="complete-flow",onComplete:d,...u})=>{let{getFlow:y,getFlowSteps:E,isLoading:f,targetingLogicShouldHideFlow:x,markStepCompleted:k,markStepStarted:P,markFlowCompleted:B,updateCustomVariables:F,getCurrentStepIndex:S,getStepStatus:m,isStepBlocked:h,getFlowStatus:w,getNumberOfStepsCompleted:I}=Q(),{isLoadingUserFlowStateData:W}=Ie(),{primaryCTAClickSideEffects:H,secondaryCTAClickSideEffects:A}=ie(),{hasOpenModals:U}=Pe(),$=S(e),{openFlowStates:O}=nd(Y),{mergeAppearanceWithDefault:se}=Z();if(o=se(o),sd(()=>{F(t)},[t,f]),W)return null;let pe=y(e);if(!pe||x(pe)||w(e)==J||U())return null;let D=E(e);if(Object.keys(O).length>0){let N=Object.keys(O).find(j=>O[j]===!0);if(N!==void 0&&N!==e)return _t.createElement(_t.Fragment,null)}async function Te(N){if(await k(e,N.id),D.map(j=>m(e,j.id)).every(j=>j===Oe)){await B(e);return}if(!a&&$+1<D.length){if(h(e,D[$+1].id))return;await P(e,D[$+1].id)}}function Fe(N,j,fe){let ke=$+1<D.length?D[$+1]:null;n&&n(N,$,j,ke),i&&i(N,fe,ke)}function ee(){return D.map(N=>({...N,handleSecondaryButtonClick:async()=>{A(N),N.skippable===!0&&await k(e,N.id,{skipped:!0}),Fe(N,"secondary",$)},handlePrimaryButtonClick:async()=>{(!N.completionCriteria&&(N.autoMarkCompleted||N.autoMarkCompleted===void 0)||N.completionCriteria&&N.autoMarkCompleted===!0)&&await Te(N),Fe(N,"primary",$),H(N)}}))}async function q(N){s&&s(),C==="complete-flow"?await B(e):await k(e,N.id)}function re(){d&&d()}return _t.createElement(ld,null,_t.createElement(oe,{appearance:o}),r?D.map((N,j)=>_t.createElement(Oo,{key:N.id,appearance:o,steps:ee(),selectedStep:j,showTooltipsSimultaneously:r,dismissible:p,onDismiss:()=>q(N),tooltipPosition:c,showHighlightOnly:a,completedStepsCount:I(e),onComplete:re,...u})):_t.createElement(Oo,{appearance:o,steps:ee(),selectedStep:$,showTooltipsSimultaneously:r,dismissible:p,onDismiss:()=>q(D[$]),tooltipPosition:c,completedStepsCount:I(e),showHighlightOnly:a,onComplete:re,...u}))};import ye,{useEffect as pd,useRef as dd,useState as cd}from"react";import{Portal as md}from"react-portal";import bt from"styled-components";var bs=bt.button`
1350
1350
  ${e=>T(e)} {
1351
1351
  // Anything inside this block will be ignored if the user provides a custom class
1352
1352