@frigade/react 1.34.0 → 1.34.1

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 St,{createContext as Fp,useEffect as Io,useState as Oe}from"react";import{ThemeProvider as kp}from"styled-components";import Ct,{useContext as Ra,useEffect as Eo,useState as dr}from"react";import{useCallback as ft,useContext as Pl,useEffect as vl}from"react";import jo,{useMemo as Ir}from"react";var Ar="1.34.0 ";var Ne="NOT_STARTED_STEP",R="COMPLETED_FLOW",mo="ABORTED_FLOW",ut="STARTED_FLOW",$e="NOT_STARTED_FLOW",Me="COMPLETED_STEP",uo="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=jo.useContext(G);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 fl="frigade-last-call-at-",gl="frigade-last-call-data-";function Pt(){let{shouldGracefullyDegrade:e,readonly:t}=jo.useContext(G);return async(o,r)=>{if(t&&(r.method==="POST"||r.method==="PUT"||r.method==="DELETE"))return kt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),kt();let i=fl+o,n=gl+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 kt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,r.body)}let s;try{s=await fetch(o,r)}catch(p){return kt(p)}return s?s.ok?s:kt(s.statusText):kt()}}function kt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function vt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=jo.useContext(G);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 Tl,useState as Nr}from"react";import{useContext as hl,useEffect as Cl,useState as Sl}from"react";import yl from"swr";import{useContext as xl}from"react";function ve(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:r,completedFlowsToKeepOpenDuringSession:i}=xl(G);function n(d,h=!1){return e[d]??h}function s(d,h){t(S=>({...S,[d]:h}))}function p(d){t(h=>{let{[d]:S,...w}=h;return{...w}})}function c(d){i.includes(d)||r(h=>[...h,d])}function a(d){return i.includes(d)}function x(d){return Object.entries(e).some(([h,S])=>S&&h!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import bl from"swr/immutable";var wl="unknown";function Be(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:r,organizationId:i,flows:n,setShouldGracefullyDegrade:s,readonly:p}=hl(G),{resetOpenFlowState:c}=ve(),[a,x]=Sl(!1),d={data:n.map(b=>({flowId:b.id,flowState:R,lastStepId:null,userId:r,foreignUserId:r,stepStates:{},shouldTrigger:!1}))},h=b=>fetch(b,e).then(F=>{if(F.ok)return F.json();throw new Error("Failed to fetch user flow states")}).catch(F=>(console.log(`Error fetching ${b}: ${F}. Will gracefully degrade and hide Frigade`),s(!0),d)),S=o&&n&&r?`${t}userFlowStates?foreignUserId=${encodeURIComponent(r)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,{data:w,isLoading:P,mutate:u,error:E}=p?bl(S,h):yl(S,h,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),g=w==null?void 0:w.data;Cl(()=>{!a&&!P&&g&&x(!0)},[g,a,P]);async function T(b){if(g&&!p){let F=g.find(O=>O.flowId===b);F&&F.flowState!==R&&(F.flowState=R),await u(Promise.resolve({...w,data:g}),{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1})}}async function N(b,F,O){if(g){let I=g.find(D=>D.flowId===b);I&&(I.stepStates[F]=O,I.flowState=ut),await u(Promise.resolve({...w,data:g}),{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1})}}async function C(b,F,O){if(g){let I=g.find(D=>D.flowId===b);I&&(I.lastStepId=F,I.stepStates[F]=O,I.flowState=ut),await u({...w,data:g},{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1})}}async function m(b){if(g){let F=g.find(O=>O.flowId===b);F&&F.flowState!==$e&&(F.flowState=$e,F.lastStepId=wl,Object.keys(F.stepStates).forEach(O=>{F.stepStates[O].actionType=Ne,F.stepStates[O].createdAt=new Date().toISOString()}),await u({...w,data:g},{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1}),c(b))}}async function B(b,F){if(g){let O=g.find(I=>I.flowId===b);O&&O.stepStates[F]!==Ne&&(O.stepStates[F]=Ne),await u({...w,data:g},{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:g,isLoadingUserFlowStateData:!a,mutateUserFlowState:u,optimisticallyMarkFlowCompleted:T,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:N,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:C,error:E}}function Gt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:r}=Be(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Tl(G),[c,a]=Nr(new Set),[x,d]=Nr(new Set),h=Pt();function S(u){let E=JSON.stringify(u);if(c.has(E))return null;c.add(E),a(c),x.add(u),d(x);let g=s==null?void 0:s.find(T=>T.flowSlug===u.flowSlug&&T.stepId===u.stepId&&T.actionType===u.actionType&&T.createdAt===u.createdAt);return h(`${t}flowResponses`,{...e,method:"POST",body:E}).then(T=>{T.status!==200&&T.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),n([...i,u])):g||p(N=>[...N??[],u])})}async function w(u){u.foreignUserId&&(u.actionType===ut||u.actionType===$e?await S(u):u.actionType===R?await S(u):u.actionType===uo?await S(u):u.actionType===Me?await S(u):u.actionType===mo?await S(u):u.actionType===Ne&&await S(u))}function P(){let u=[];return o==null||o.forEach(E=>{if(E&&E.stepStates&&Object.keys(E.stepStates).length!==0)for(let g in E.stepStates){let T=E.stepStates[g];u.push({foreignUserId:E.foreignUserId,flowSlug:E.flowId,stepId:T.stepId,actionType:T.actionType,data:{},createdAt:new Date(T.createdAt),blocked:T.blocked,hidden:T.hidden})}}),[...u,...s]}return{addResponse:w,setFlowResponses:p,getFlowResponses:P}}import Bl from"swr";var Fl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Or=e=>{let t=Fl.exec(e);if(t===null)return null;let o=null;return t.forEach((r,i)=>{let n=kl(r,"'","");n.startsWith("flow_")&&(o=n)}),o},kl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function ee(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:r,userId:i,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:x,setShouldGracefullyDegrade:d,readonly:h}=Pl(G),S={data:[]},{verifySDKInitiated:w}=vt(),{addResponse:P,getFlowResponses:u}=Gt(),E=f=>fetch(f,e).then(y=>y.ok?y.json():(console.log(`Error fetching ${f} (${y.status}): ${y.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),S)).catch(y=>(console.log(`Error fetching ${f}: ${y}. Will gracefully degrade and hide Frigade`),d(!0),S)),{userFlowStatesData:g,isLoadingUserFlowStateData:T,optimisticallyMarkFlowCompleted:N,optimisticallyMarkFlowNotStarted:C,optimisticallyMarkStepCompleted:m,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:b}=Be(),{data:F,error:O,isLoading:I}=Bl(n?`${t}flows${h?"?readonly=true":""}`:null,E,{keepPreviousData:!0});vl(()=>{if(O){console.error(O);return}F&&F.data&&r(F.data)},[F,O]);function D(f){if(I)return null;let y=o.find(v=>v.slug===f);return!y&&o.length>0&&!T&&!I?(console.log(`Flow with slug ${f} not found`),null):(y==null?void 0:y.active)===!1?null:y}function L(f){var A;if(!D(f))return[];let y=D(f).data;return y?(y=_(y),(((A=JSON.parse(y))==null?void 0:A.data)??[]).map(Z=>{let mt=de(Z);return{handleSecondaryButtonClick:()=>{Z.skippable===!0&&K(f,Z.id,{skipped:!0})},...Z,complete:Q(f,Z.id)===Me||mt>=1,blocked:M(f,Z.id),hidden:$(f,Z.id),handlePrimaryButtonClick:()=>{(!Z.completionCriteria&&(Z.autoMarkCompleted||Z.autoMarkCompleted===void 0)||Z.completionCriteria&&Z.autoMarkCompleted===!0)&&K(f,Z.id)},progress:mt}}).filter(Z=>Z.hidden!==!0)):[]}function _(f){return f.replaceAll(/\${(.*?)}/g,(y,v)=>s[v]===void 0?"":String(s[v]).replace(/[\u00A0-\u9999<>\&]/g,function(A){return"&#"+A.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 H(f){if(!D(f))return[];let y=D(f).data;return y?(y=_(y),JSON.parse(y)??{}):[]}function X(f,y){p(v=>({...v,[f]:y}))}function se(f){!T&&!I&&f&&JSON.stringify(s)!=JSON.stringify({...s,...f})&&Object.keys(f).forEach(y=>{X(y,f[y])})}let q=ft(async(f,y,v)=>{if(!w())return;let A={foreignUserId:i,flowSlug:f,stepId:y,actionType:uo,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(A)&&(await b(f,y,A),P(A))},[i,g]),V=ft(async(f,y,v)=>{if(!w())return;let A={foreignUserId:i,flowSlug:f,stepId:y,actionType:Ne,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(A)&&(await B(f,y),P(A))},[i,g]),K=ft(async(f,y,v)=>{if(!w())return;let A={foreignUserId:i,flowSlug:f,stepId:y,actionType:Me,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(A)&&(await m(f,y,A),P(A))},[i,g]),J=ft(async(f,y)=>{if(!w()||te(f)===$e)return;let v={foreignUserId:i,flowSlug:f,stepId:"unknown",actionType:$e,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};await C(f),re(v)&&P(v)},[i,g]),Se=ft(async(f,y)=>{if(!w())return;let v={foreignUserId:i,flowSlug:f,stepId:"unknown",actionType:ut,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&P(v)},[i,g]),Pe=ft(async(f,y)=>{if(!w())return;let v={foreignUserId:i,flowSlug:f,stepId:"unknown",actionType:R,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&(await N(f),P(v))},[i,g]),ye=ft(async(f,y)=>{if(!w())return;let v={foreignUserId:i,flowSlug:f,stepId:"unknown",actionType:mo,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&(await N(f),P(v))},[i,g]);function re(f){var y;if(!g&&f.actionType===Ne)return!1;if(g){let v=g.find(A=>A.flowId===f.flowSlug);if(f.actionType===Ne&&(!(v!=null&&v.stepStates[f.stepId])||v.stepStates[f.stepId].actionType===Ne)||v&&((y=v.stepStates[f.stepId])==null?void 0:y.actionType)===f.actionType||v&&v.flowState===R&&f.actionType===R)return!1}return!0}function Q(f,y){let v=me(f,y);return T?null:v?v.actionType:Ne}function M(f,y){let v=me(f,y);return v?v.blocked:!1}function $(f,y){let v=me(f,y);return v?v.hidden:!1}function me(f,y){if(T)return null;let v=g==null?void 0:g.find(A=>A.flowId===f);return!v||!v.stepStates[y]?null:v.stepStates[y]??null}function ue(f){var v;if(T||!g)return null;if(te(f)===$e)return L(f)[0]??null;let y=(v=g.find(A=>A.flowId===f))==null?void 0:v.lastStepId;return y?L(f).find(A=>A.id===y):null}function z(f){let y=ue(f);if(!y)return 0;let v=L(f).findIndex(A=>A.id===y.id)??0;return Q(f,y.id)===Me&&v<L(f).length-1?v+1:v}function de(f){if(!f.completionCriteria)return;let y=Or(f.completionCriteria);if(y===null)return;let v=be(y),A=De(y);return A===0?void 0:v/A}function te(f){let y=g==null?void 0:g.find(v=>v.flowId===f);return y?y.flowState:null}function be(f){let y=L(f);return y.length===0?0:y.filter(A=>Q(f,A.id)===Me).length}function De(f){return L(f).length}function j(f){let y=o.find(v=>v.slug===f);return y?JSON.parse(y.data):null}function xe(f){if(h)return!1;if(T)return!0;if(f!=null&&f.targetingLogic&&g){let y=g.find(v=>v.flowId===f.slug);if(y)return y.shouldTrigger===!1}return!!(f!=null&&f.targetingLogic&&i&&i.startsWith("guest_"))}function jt(f){return!xe(D(f))}return{getFlow:D,getFlowData:j,isLoading:T||I,getStepStatus:Q,getFlowSteps:L,getCurrentStepIndex:z,markStepStarted:q,markStepCompleted:K,markFlowNotStarted:J,markFlowStarted:Se,markFlowCompleted:Pe,markFlowAborted:ye,markStepNotStarted:V,getFlowStatus:te,getNumberOfStepsCompleted:be,getNumberOfSteps:De,targetingLogicShouldHideFlow:xe,setCustomVariable:X,updateCustomVariables:se,customVariables:s,getStepOptionalProgress:de,getFlowMetadata:H,isStepBlocked:M,isStepHidden:$,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:jt}}import{useCallback as Lr,useContext as El,useEffect as Al}from"react";var Bt="guest_";function Kt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:r,shouldGracefullyDegrade:i}=El(G),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=Be(),c=Pt(),{verifySDKInitiated:a}=vt();Al(()=>{if(e&&!t){if(e.startsWith(Bt))return;let h=`frigade-user-registered-${e}`;localStorage.getItem(h)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(h,"true"))}},[e,i,t]);let x=Lr(async h=>{if(!a())return;let S={foreignId:e,properties:h};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(S)}),r(w=>({...w,...h})),p()},[e,n,i,p]),d=Lr(async(h,S)=>{if(!a())return;let P={foreignId:e,events:[{event:h,properties:S}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(P)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:x,trackEventForUser:d}}import{v4 as ep}from"uuid";import He,{useEffect as Xa,useState as Ja}from"react";import Ue,{useEffect as Ml}from"react";import xo from"styled-components";import Il from"react";import Nl 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 Ge(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Go(t)}: ${e.styleOverrides[t]};`).join(" "):""}function we(...e){return e.filter(Boolean).join(" ")}function Yt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ol=Nl.div`
2
+ import St,{createContext as Fp,useEffect as Io,useState as Oe}from"react";import{ThemeProvider as kp}from"styled-components";import Ct,{useContext as Ra,useEffect as Eo,useState as dr}from"react";import{useCallback as ft,useContext as Pl,useEffect as vl}from"react";import jo,{useMemo as Ir}from"react";var Ar="1.34.1 ";var Ne="NOT_STARTED_STEP",R="COMPLETED_FLOW",mo="ABORTED_FLOW",ut="STARTED_FLOW",$e="NOT_STARTED_FLOW",Me="COMPLETED_STEP",uo="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=jo.useContext(G);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 fl="frigade-last-call-at-",gl="frigade-last-call-data-";function Pt(){let{shouldGracefullyDegrade:e,readonly:t}=jo.useContext(G);return async(o,r)=>{if(t&&(r.method==="POST"||r.method==="PUT"||r.method==="DELETE"))return kt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),kt();let i=fl+o,n=gl+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 kt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,r.body)}let s;try{s=await fetch(o,r)}catch(p){return kt(p)}return s?s.ok?s:kt(s.statusText):kt()}}function kt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function vt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=jo.useContext(G);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 Tl,useState as Nr}from"react";import{useContext as hl,useEffect as Cl,useState as Sl}from"react";import yl from"swr";import{useContext as xl}from"react";function ve(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:r,completedFlowsToKeepOpenDuringSession:i}=xl(G);function n(d,h=!1){return e[d]??h}function s(d,h){t(S=>({...S,[d]:h}))}function p(d){t(h=>{let{[d]:S,...w}=h;return{...w}})}function c(d){i.includes(d)||r(h=>[...h,d])}function a(d){return i.includes(d)}function x(d){return Object.entries(e).some(([h,S])=>S&&h!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import bl from"swr/immutable";var wl="unknown";function Be(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:r,organizationId:i,flows:n,setShouldGracefullyDegrade:s,readonly:p}=hl(G),{resetOpenFlowState:c}=ve(),[a,x]=Sl(!1),d={data:n.map(b=>({flowId:b.id,flowState:R,lastStepId:null,userId:r,foreignUserId:r,stepStates:{},shouldTrigger:!1}))},h=b=>fetch(b,e).then(F=>{if(F.ok)return F.json();throw new Error("Failed to fetch user flow states")}).catch(F=>(console.log(`Error fetching ${b}: ${F}. Will gracefully degrade and hide Frigade`),s(!0),d)),S=o&&n&&r?`${t}userFlowStates?foreignUserId=${encodeURIComponent(r)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,{data:w,isLoading:P,mutate:u,error:E}=p?bl(S,h):yl(S,h,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),g=w==null?void 0:w.data;Cl(()=>{!a&&!P&&g&&x(!0)},[g,a,P]);async function T(b){if(g&&!p){let F=g.find(O=>O.flowId===b);F&&F.flowState!==R&&(F.flowState=R),await u(Promise.resolve({...w,data:g}),{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1})}}async function N(b,F,O){if(g){let I=g.find(D=>D.flowId===b);I&&(I.stepStates[F]=O,I.flowState=ut),await u(Promise.resolve({...w,data:g}),{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1})}}async function C(b,F,O){if(g){let I=g.find(D=>D.flowId===b);I&&(I.lastStepId=F,I.stepStates[F]=O,I.flowState=ut),await u({...w,data:g},{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1})}}async function m(b){if(g){let F=g.find(O=>O.flowId===b);F&&F.flowState!==$e&&(F.flowState=$e,F.lastStepId=wl,Object.keys(F.stepStates).forEach(O=>{F.stepStates[O].actionType=Ne,F.stepStates[O].createdAt=new Date().toISOString()}),await u({...w,data:g},{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1}),c(b))}}async function B(b,F){if(g){let O=g.find(I=>I.flowId===b);O&&O.stepStates[F]!==Ne&&(O.stepStates[F]=Ne),await u({...w,data:g},{optimisticData:{...w,data:g},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:g,isLoadingUserFlowStateData:!a,mutateUserFlowState:u,optimisticallyMarkFlowCompleted:T,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:N,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:C,error:E}}function Gt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:r}=Be(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Tl(G),[c,a]=Nr(new Set),[x,d]=Nr(new Set),h=Pt();function S(u){let E=JSON.stringify(u);if(c.has(E))return null;c.add(E),a(c),x.add(u),d(x);let g=s==null?void 0:s.find(T=>T.flowSlug===u.flowSlug&&T.stepId===u.stepId&&T.actionType===u.actionType&&T.createdAt===u.createdAt);return h(`${t}flowResponses`,{...e,method:"POST",body:E}).then(T=>{T.status!==200&&T.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),n([...i,u])):g||p(N=>[...N??[],u])})}async function w(u){u.foreignUserId&&(u.actionType===ut||u.actionType===$e?await S(u):u.actionType===R?await S(u):u.actionType===uo?await S(u):u.actionType===Me?await S(u):u.actionType===mo?await S(u):u.actionType===Ne&&await S(u))}function P(){let u=[];return o==null||o.forEach(E=>{if(E&&E.stepStates&&Object.keys(E.stepStates).length!==0)for(let g in E.stepStates){let T=E.stepStates[g];u.push({foreignUserId:E.foreignUserId,flowSlug:E.flowId,stepId:T.stepId,actionType:T.actionType,data:{},createdAt:new Date(T.createdAt),blocked:T.blocked,hidden:T.hidden})}}),[...u,...s]}return{addResponse:w,setFlowResponses:p,getFlowResponses:P}}import Bl from"swr";var Fl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Or=e=>{let t=Fl.exec(e);if(t===null)return null;let o=null;return t.forEach((r,i)=>{let n=kl(r,"'","");n.startsWith("flow_")&&(o=n)}),o},kl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function ee(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:r,userId:i,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:x,setShouldGracefullyDegrade:d,readonly:h}=Pl(G),S={data:[]},{verifySDKInitiated:w}=vt(),{addResponse:P,getFlowResponses:u}=Gt(),E=f=>fetch(f,e).then(y=>y.ok?y.json():(console.log(`Error fetching ${f} (${y.status}): ${y.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),S)).catch(y=>(console.log(`Error fetching ${f}: ${y}. Will gracefully degrade and hide Frigade`),d(!0),S)),{userFlowStatesData:g,isLoadingUserFlowStateData:T,optimisticallyMarkFlowCompleted:N,optimisticallyMarkFlowNotStarted:C,optimisticallyMarkStepCompleted:m,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:b}=Be(),{data:F,error:O,isLoading:I}=Bl(n?`${t}flows${h?"?readonly=true":""}`:null,E,{keepPreviousData:!0});vl(()=>{if(O){console.error(O);return}F&&F.data&&r(F.data)},[F,O]);function D(f){if(I)return null;let y=o.find(v=>v.slug===f);return!y&&o.length>0&&!T&&!I?(console.log(`Flow with slug ${f} not found`),null):(y==null?void 0:y.active)===!1?null:y}function L(f){var A;if(!D(f))return[];let y=D(f).data;return y?(y=_(y),(((A=JSON.parse(y))==null?void 0:A.data)??[]).map(Z=>{let mt=de(Z);return{handleSecondaryButtonClick:()=>{Z.skippable===!0&&K(f,Z.id,{skipped:!0})},...Z,complete:Q(f,Z.id)===Me||mt>=1,blocked:M(f,Z.id),hidden:$(f,Z.id),handlePrimaryButtonClick:()=>{(!Z.completionCriteria&&(Z.autoMarkCompleted||Z.autoMarkCompleted===void 0)||Z.completionCriteria&&Z.autoMarkCompleted===!0)&&K(f,Z.id)},progress:mt}}).filter(Z=>Z.hidden!==!0)):[]}function _(f){return f.replaceAll(/\${(.*?)}/g,(y,v)=>s[v]===void 0?"":String(s[v]).replace(/[\u00A0-\u9999<>\&]/g,function(A){return"&#"+A.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 H(f){if(!D(f))return[];let y=D(f).data;return y?(y=_(y),JSON.parse(y)??{}):[]}function X(f,y){p(v=>({...v,[f]:y}))}function se(f){!T&&!I&&f&&JSON.stringify(s)!=JSON.stringify({...s,...f})&&Object.keys(f).forEach(y=>{X(y,f[y])})}let q=ft(async(f,y,v)=>{if(!w())return;let A={foreignUserId:i,flowSlug:f,stepId:y,actionType:uo,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(A)&&(await b(f,y,A),P(A))},[i,g]),V=ft(async(f,y,v)=>{if(!w())return;let A={foreignUserId:i,flowSlug:f,stepId:y,actionType:Ne,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(A)&&(await B(f,y),P(A))},[i,g]),K=ft(async(f,y,v)=>{if(!w())return;let A={foreignUserId:i,flowSlug:f,stepId:y,actionType:Me,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};re(A)&&(await m(f,y,A),P(A))},[i,g]),J=ft(async(f,y)=>{if(!w()||te(f)===$e)return;let v={foreignUserId:i,flowSlug:f,stepId:"unknown",actionType:$e,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};await C(f),re(v)&&P(v)},[i,g]),Se=ft(async(f,y)=>{if(!w())return;let v={foreignUserId:i,flowSlug:f,stepId:"unknown",actionType:ut,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&P(v)},[i,g]),Pe=ft(async(f,y)=>{if(!w())return;let v={foreignUserId:i,flowSlug:f,stepId:"unknown",actionType:R,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&(await N(f),P(v))},[i,g]),ye=ft(async(f,y)=>{if(!w())return;let v={foreignUserId:i,flowSlug:f,stepId:"unknown",actionType:mo,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(v)&&(await N(f),P(v))},[i,g]);function re(f){var y;if(!g&&f.actionType===Ne)return!1;if(g){let v=g.find(A=>A.flowId===f.flowSlug);if(f.actionType===Ne&&(!(v!=null&&v.stepStates[f.stepId])||v.stepStates[f.stepId].actionType===Ne)||v&&((y=v.stepStates[f.stepId])==null?void 0:y.actionType)===f.actionType||v&&v.flowState===R&&f.actionType===R)return!1}return!0}function Q(f,y){let v=me(f,y);return T?null:v?v.actionType:Ne}function M(f,y){let v=me(f,y);return v?v.blocked:!1}function $(f,y){let v=me(f,y);return v?v.hidden:!1}function me(f,y){if(T)return null;let v=g==null?void 0:g.find(A=>A.flowId===f);return!v||!v.stepStates[y]?null:v.stepStates[y]??null}function ue(f){var v;if(T||!g)return null;if(te(f)===$e)return L(f)[0]??null;let y=(v=g.find(A=>A.flowId===f))==null?void 0:v.lastStepId;return y?L(f).find(A=>A.id===y):null}function z(f){let y=ue(f);if(!y)return 0;let v=L(f).findIndex(A=>A.id===y.id)??0;return Q(f,y.id)===Me&&v<L(f).length-1?v+1:v}function de(f){if(!f.completionCriteria)return;let y=Or(f.completionCriteria);if(y===null)return;let v=be(y),A=De(y);return A===0?void 0:v/A}function te(f){let y=g==null?void 0:g.find(v=>v.flowId===f);return y?y.flowState:null}function be(f){let y=L(f);return y.length===0?0:y.filter(A=>Q(f,A.id)===Me).length}function De(f){return L(f).length}function j(f){let y=o.find(v=>v.slug===f);return y?JSON.parse(y.data):null}function xe(f){if(h)return!1;if(T)return!0;if(f!=null&&f.targetingLogic&&g){let y=g.find(v=>v.flowId===f.slug);if(y)return y.shouldTrigger===!1}return!!(f!=null&&f.targetingLogic&&i&&i.startsWith("guest_"))}function jt(f){return!xe(D(f))}return{getFlow:D,getFlowData:j,isLoading:T||I,getStepStatus:Q,getFlowSteps:L,getCurrentStepIndex:z,markStepStarted:q,markStepCompleted:K,markFlowNotStarted:J,markFlowStarted:Se,markFlowCompleted:Pe,markFlowAborted:ye,markStepNotStarted:V,getFlowStatus:te,getNumberOfStepsCompleted:be,getNumberOfSteps:De,targetingLogicShouldHideFlow:xe,setCustomVariable:X,updateCustomVariables:se,customVariables:s,getStepOptionalProgress:de,getFlowMetadata:H,isStepBlocked:M,isStepHidden:$,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:jt}}import{useCallback as Lr,useContext as El,useEffect as Al}from"react";var Bt="guest_";function Kt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:r,shouldGracefullyDegrade:i}=El(G),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=Be(),c=Pt(),{verifySDKInitiated:a}=vt();Al(()=>{if(e&&!t){if(e.startsWith(Bt))return;let h=`frigade-user-registered-${e}`;localStorage.getItem(h)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(h,"true"))}},[e,i,t]);let x=Lr(async h=>{if(!a())return;let S={foreignId:e,properties:h};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(S)}),r(w=>({...w,...h})),p()},[e,n,i,p]),d=Lr(async(h,S)=>{if(!a())return;let P={foreignId:e,events:[{event:h,properties:S}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(P)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:x,trackEventForUser:d}}import{v4 as ep}from"uuid";import He,{useEffect as Xa,useState as Ja}from"react";import Ue,{useEffect as Ml}from"react";import xo from"styled-components";import Il from"react";import Nl 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 Ge(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Go(t)}: ${e.styleOverrides[t]};`).join(" "):""}function we(...e){return e.filter(Boolean).join(" ")}function Yt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ol=Nl.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;
@@ -1104,7 +1104,7 @@ ${r=>r.inlineStyles.map(([i,n])=>`.${qt}${i}.${qt}${i} { ${Object.entries(n).map
1104
1104
  flex-direction: row;
1105
1105
  justify-content: flex-start;
1106
1106
  align-items: center;
1107
- `;var Jn=({stepData:e,collapsed:t,onClick:o,onPrimaryButtonClick:r,onSecondaryButtonClick:i,appearance:n,customStepTypes:s})=>{var d,h;let p=t?{}:{transform:"rotate(90deg)"},c=t?{overflow:"hidden",maxHeight:"0px",transition:"max-height 0.1s ease-out"}:{overflow:"hidden",maxHeight:"1000px",transition:"max-height 0.1s ease-in"};function a(){return he.createElement(he.Fragment,null,e.imageUri||e.videoUri?he.createElement(Vn,{className:l("stepMediaContainer",n)},e.imageUri?he.createElement(jn,{className:l("stepImage",n),src:e.imageUri,style:e.imageStyle}):null,e.videoUri?he.createElement(st,{appearance:n,videoUri:e.videoUri}):null):null,he.createElement(Yn,{className:l("stepSubtitle",n),appearance:n,dangerouslySetInnerHTML:fe(e.subtitle)}),he.createElement(To,{className:l("checklistCTAContainer",n)},e.secondaryButtonTitle?he.createElement(ie,{secondary:!0,title:e.secondaryButtonTitle,onClick:()=>i(),appearance:n}):null,he.createElement(ie,{title:e.primaryButtonTitle??"Continue",onClick:()=>r(),appearance:n})))}function x(){if(!s)return null;let S=s[e.type];return S?S(e,n):null}return he.createElement(Hn,{"data-testid":`step-${e.id}`,className:l("checklistStepContainer",n),appearance:n},he.createElement(Gn,{className:l("stepHeader",n)},he.createElement(Xn,null,he.createElement(No,{value:e.complete,style:{width:"auto",borderTop:0},primaryColor:(d=n==null?void 0:n.theme)==null?void 0:d.colorPrimary,appearance:n}),he.createElement(Kn,{appearance:n,className:l("stepTitle",n),dangerouslySetInnerHTML:fe(e.title),onClick:()=>o()})),he.createElement(qn,{className:l("stepChevronContainer",n),onClick:()=>o()},he.createElement(Ut,{style:{...p,transition:"transform 0.1s ease-in-out"},color:(h=n==null?void 0:n.theme)==null?void 0:h.colorTextSecondary}))),he.createElement("div",{key:e.id,style:{...c}},x()??a()))};import zt from"styled-components";var ZC=zt.div`
1107
+ `;var Jn=({stepData:e,collapsed:t,onClick:o,onPrimaryButtonClick:r,onSecondaryButtonClick:i,appearance:n,customStepTypes:s})=>{var d,h;let p=t?{}:{transform:"rotate(90deg)"},c=t?{overflow:"hidden",maxHeight:"0px",transition:"max-height 0.2s ease-out"}:{overflow:"hidden",maxHeight:"1000px",transition:"max-height 0.15s ease-in"};function a(){return he.createElement(he.Fragment,null,e.imageUri||e.videoUri?he.createElement(Vn,{className:l("stepMediaContainer",n)},e.imageUri?he.createElement(jn,{className:l("stepImage",n),src:e.imageUri,style:e.imageStyle}):null,e.videoUri?he.createElement(st,{appearance:n,videoUri:e.videoUri}):null):null,he.createElement(Yn,{className:l("stepSubtitle",n),appearance:n,dangerouslySetInnerHTML:fe(e.subtitle)}),he.createElement(To,{className:l("checklistCTAContainer",n)},e.secondaryButtonTitle?he.createElement(ie,{secondary:!0,title:e.secondaryButtonTitle,onClick:()=>i(),appearance:n}):null,he.createElement(ie,{title:e.primaryButtonTitle??"Continue",onClick:()=>r(),appearance:n})))}function x(){if(!s)return null;let S=s[e.type];return S?S(e,n):null}return he.createElement(Hn,{"data-testid":`step-${e.id}`,className:l("checklistStepContainer",n),appearance:n},he.createElement(Gn,{className:l("stepHeader",n)},he.createElement(Xn,null,he.createElement(No,{value:e.complete,style:{width:"auto",borderTop:0},primaryColor:(d=n==null?void 0:n.theme)==null?void 0:d.colorPrimary,appearance:n}),he.createElement(Kn,{appearance:n,className:l("stepTitle",n),dangerouslySetInnerHTML:fe(e.title),onClick:()=>o()})),he.createElement(qn,{className:l("stepChevronContainer",n),onClick:()=>o()},he.createElement(Ut,{style:{...p,transition:"transform 0.1s ease-in-out"},color:(h=n==null?void 0:n.theme)==null?void 0:h.colorTextSecondary}))),he.createElement("div",{key:e.id,style:{...c}},x()??a()))};import zt from"styled-components";var ZC=zt.div`
1108
1108
  background: #ffffff;
1109
1109
  box-shadow: 0px 6px 25px rgba(0, 0, 0, 0.06);
1110
1110
  border-radius: 6px;