@frigade/react 1.32.52 → 1.32.53

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 gt,{createContext as Da,useEffect as Ro,useState as Ne}from"react";import{ThemeProvider as $a}from"styled-components";import ft,{useContext as La,useEffect as Fo,useState as Zo}from"react";import{useCallback as pt,useContext as nl,useEffect as sl}from"react";import Do,{useMemo as Ks}from"react";var gr="1.32.52 ";var Te="https://api.frigade.com/v1/public/",Ae="NOT_STARTED_STEP",Y="COMPLETED_FLOW",no="ABORTED_FLOW",at="STARTED_FLOW",Le="NOT_STARTED_FLOW",Oe="COMPLETED_STEP",so="STARTED_STEP";function Me(){let{publicApiKey:e,userId:t}=Do.useContext(q);return{config:Ks(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":gr,"X-Frigade-SDK-Platform":"React"}}),[e,t])}}var Ys="frigade-last-call-at-",Xs="frigade-last-call-data-";function Tt(){let{shouldGracefullyDegrade:e}=Do.useContext(q);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),zt();let i=Ys+t,n=Xs+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 d=new Date(s);if(new Date().getTime()-d.getTime()<1e3)return zt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,o.body)}let r;try{r=await fetch(t,o)}catch(s){return zt(s)}return r?r.ok?r:zt(r.statusText):zt()}}function zt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ft(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Do.useContext(q);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 ol,useState as hr}from"react";import{useContext as Qs,useEffect as Zs,useState as Rs}from"react";import el from"swr";import{useContext as Js}from"react";function Pe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:n}=Js(q);function r(c,u=!1){return e[c]??u}function s(c,u){t(w=>({...w,[c]:u}))}function p(c){t(u=>{let{[c]:w,...T}=u;return{...T}})}function d(c){n.includes(c)||i(u=>[...u,c])}function a(c){return n.includes(c)}function f(){return Object.values(e).some(c=>c)||o}return{getOpenFlowState:r,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:f,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var tl="unknown";function Ie(){let{config:e}=Me(),{publicApiKey:t,userId:o,flows:i,setShouldGracefullyDegrade:n}=Qs(q),{resetOpenFlowState:r}=Pe(),[s,p]=Rs(!1),d={data:i.map(y=>({flowId:y.id,flowState:Y,lastStepId:null,userId:o,foreignUserId:o,stepStates:{},shouldTrigger:!1}))},a=y=>fetch(y,e).then(h=>{if(h.ok)return h.json();throw new Error("Failed to fetch user flow states")}).catch(h=>(console.log(`Error fetching ${y}: ${h}. Will gracefully degrade and hide Frigade`),n(!0),d)),{data:f,isLoading:c,mutate:u,error:w}=el(t&&i&&o?`${Te}userFlowStates?foreignUserId=${encodeURIComponent(o)}`:null,a,{revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),T=f==null?void 0:f.data;Zs(()=>{!s&&!c&&T&&p(!0)},[T,s,c]);async function S(y){if(T){let h=T.find(m=>m.flowId===y);h&&h.flowState!==Y&&(h.flowState=Y),await u(Promise.resolve({...f,data:T}),{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1})}}async function C(y,h,m){if(T){let x=T.find(F=>F.flowId===y);x&&(x.stepStates[h]=m,x.flowState=at),await u(Promise.resolve({...f,data:T}),{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1})}}async function P(y,h,m){if(T){let x=T.find(F=>F.flowId===y);x&&(x.lastStepId=h,x.stepStates[h]=m,x.flowState=at),await u({...f,data:T},{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1})}}async function v(y){if(T){let h=T.find(m=>m.flowId===y);h&&h.flowState!==Le&&(h.flowState=Le,h.lastStepId=tl,Object.keys(h.stepStates).forEach(m=>{h.stepStates[m].actionType=Ae,h.stepStates[m].createdAt=new Date().toISOString()}),await u({...f,data:T},{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1}),r(y))}}async function B(y,h){if(T){let m=T.find(x=>x.flowId===y);m&&m.stepStates[h]!==Ae&&(m.stepStates[h]=Ae),await u({...f,data:T},{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:T,isLoadingUserFlowStateData:!s,mutateUserFlowState:u,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:v,optimisticallyMarkStepCompleted:C,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:P,error:w}}function Wt(){let{config:e}=Me(),{userFlowStatesData:t,mutateUserFlowState:o}=Ie(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:r,setFlowResponses:s}=ol(q),[p,d]=hr(new Set),[a,f]=hr(new Set),c=Tt();function u(S){let C=JSON.stringify(S);if(p.has(C))return null;p.add(C),d(p),a.add(S),f(a);let P=r==null?void 0:r.find(v=>v.flowSlug===S.flowSlug&&v.stepId===S.stepId&&v.actionType===S.actionType&&v.createdAt===S.createdAt);return c(`${Te}flowResponses`,{...e,method:"POST",body:C}).then(v=>{v.status!==200&&v.status!==201?(console.log("Failed to send flow response for step "+S.stepId+". Will retry again later."),n([...i,S])):P||s(B=>[...B??[],S])})}async function w(S){S.foreignUserId&&(S.actionType===at||S.actionType===Le?await u(S):S.actionType===Y?await u(S):S.actionType===so?await u(S):S.actionType===Oe?await u(S):S.actionType===no?await u(S):S.actionType===Ae&&await u(S))}function T(){let S=[];return t==null||t.forEach(C=>{if(C&&C.stepStates&&Object.keys(C.stepStates).length!==0)for(let P in C.stepStates){let v=C.stepStates[P];S.push({foreignUserId:C.foreignUserId,flowSlug:C.flowId,stepId:v.stepId,actionType:v.actionType,data:{},createdAt:new Date(v.createdAt),blocked:v.blocked,hidden:v.hidden})}}),[...S,...r]}return{addResponse:w,setFlowResponses:s,getFlowResponses:T}}import ll from"swr";var rl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,xr=e=>{let t=rl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,n)=>{let r=il(i,"'","");r.startsWith("flow_")&&(o=r)}),o},il=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function X(){let{config:e}=Me(),{flows:t,setFlows:o,userId:i,publicApiKey:n,customVariables:r,setCustomVariables:s,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:d,setFlowResponses:a,setShouldGracefullyDegrade:f}=nl(q),c={data:[]},{verifySDKInitiated:u}=Ft(),{addResponse:w,getFlowResponses:T}=Wt(),S=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`),f(!0),c)).catch(b=>(console.log(`Error fetching ${g}: ${b}. Will gracefully degrade and hide Frigade`),f(!0),c)),{userFlowStatesData:C,isLoadingUserFlowStateData:P,optimisticallyMarkFlowCompleted:v,optimisticallyMarkFlowNotStarted:B,optimisticallyMarkStepCompleted:y,optimisticallyMarkStepNotStarted:h,optimisticallyMarkStepStarted:m}=Ie(),{data:x,error:F,isLoading:D}=ll(n?`${Te}flows`:null,S,{keepPreviousData:!0});sl(()=>{if(F){console.error(F);return}x&&x.data&&(x.data=o(x.data))},[x,F]);function _(g){if(D)return null;let b=t.find(E=>E.slug===g);return!b&&t.length>0&&!P&&!D?(console.log(`Flow with slug ${g} not found`),null):(b==null?void 0:b.active)===!1?null:b}function z(g){var V;if(!_(g))return[];let b=_(g).data;return b?(b=A(b),(((V=JSON.parse(b))==null?void 0:V.data)??[]).map(de=>{let W=R(de);return{handleSecondaryButtonClick:()=>{de.skippable===!0&&O(g,de.id,{skipped:!0})},...de,complete:I(g,de.id)===Oe||W>=1,blocked:ne(g,de.id),hidden:fe(g,de.id),handlePrimaryButtonClick:()=>{(!de.completionCriteria&&(de.autoMarkCompleted||de.autoMarkCompleted===void 0)||de.completionCriteria&&de.autoMarkCompleted===!0)&&O(g,de.id)},progress:W}}).filter(de=>de.hidden!==!0)):[]}function A(g){return g.replace(/\${(.*?)}/g,(b,E)=>r[E]!==void 0?String(r[E]):"")}function U(g){if(!_(g))return[];let b=_(g).data;return b?(b=A(b),JSON.parse(b)??{}):[]}function $(g,b){s(E=>({...E,[g]:b}))}function L(g){!P&&!D&&g&&JSON.stringify(r)!=JSON.stringify({...r,...g})&&Object.keys(g).forEach(b=>{$(b,g[b])})}let ie=pt(async(g,b,E)=>{u();let V={foreignUserId:i,flowSlug:g,stepId:b,actionType:so,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};oe(V)&&(await m(g,b,V),w(V))},[i,C]),pe=pt(async(g,b,E)=>{u();let V={foreignUserId:i,flowSlug:g,stepId:b,actionType:Ae,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};oe(V)&&(await h(g,b),w(V))},[i,C]),O=pt(async(g,b,E)=>{u();let V={foreignUserId:i,flowSlug:g,stepId:b,actionType:Oe,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};oe(V)&&(await y(g,b,V),w(V))},[i,C]),we=pt(async(g,b)=>{if(u(),K(g)===Le)return;let E={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Le,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};await B(g),oe(E)&&w(E)},[i,C]),xe=pt(async(g,b)=>{u();let E={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:at,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};oe(E)&&w(E)},[i,C]),ee=pt(async(g,b)=>{u();let E={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Y,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};oe(E)&&(await v(g),w(E))},[i,C]),j=pt(async(g,b)=>{u();let E={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:no,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};oe(E)&&(await v(g),w(E))},[i,C]);function oe(g){var b;if(!C&&g.actionType===Ae)return!1;if(C){let E=C.find(V=>V.flowId===g.flowSlug);if(g.actionType===Ae&&(!(E!=null&&E.stepStates[g.stepId])||E.stepStates[g.stepId].actionType===Ae)||E&&((b=E.stepStates[g.stepId])==null?void 0:b.actionType)===g.actionType||E&&E.flowState===Y&&g.actionType===Y)return!1}return!0}function I(g,b){let E=ke(g,b);return P?null:E?E.actionType:Ae}function ne(g,b){let E=ke(g,b);return E?E.blocked:!1}function fe(g,b){let E=ke(g,b);return E?E.hidden:!1}function ke(g,b){if(P)return null;let E=C==null?void 0:C.find(V=>V.flowId===g);return!E||!E.stepStates[b]?null:E.stepStates[b]??null}function G(g){var E;if(P||!C)return null;if(K(g)===Le)return z(g)[0]??null;let b=(E=C.find(V=>V.flowId===g))==null?void 0:E.lastStepId;return b?z(g).find(V=>V.id===b):null}function ge(g){let b=G(g);if(!b)return 0;let E=z(g).findIndex(V=>V.id===b.id)??0;return I(g,b.id)===Oe&&E<z(g).length-1?E+1:E}function R(g){if(!g.completionCriteria)return;let b=xr(g.completionCriteria);if(b===null)return;let E=je(b),V=Ge(b);return V===0?void 0:E/V}function K(g){let b=C==null?void 0:C.find(E=>E.flowId===g);return b?b.flowState:null}function je(g){let b=z(g);return b.length===0?0:b.filter(V=>I(g,V.id)===Oe).length}function Ge(g){return z(g).length}function wt(g){return JSON.parse(t.find(b=>b.slug===g).data)}function H(g){if(P)return!0;if(g!=null&&g.targetingLogic&&C){let b=C.find(E=>E.flowId===g.slug);if(b)return b.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&i&&i.startsWith("guest_"))}function Be(g){return!H(_(g))}return{getFlow:_,getFlowData:wt,isLoading:P||D,getStepStatus:I,getFlowSteps:z,getCurrentStepIndex:ge,markStepStarted:ie,markStepCompleted:O,markFlowNotStarted:we,markFlowStarted:xe,markFlowCompleted:ee,markFlowAborted:j,markStepNotStarted:pe,getFlowStatus:K,getNumberOfStepsCompleted:je,getNumberOfSteps:Ge,targetingLogicShouldHideFlow:H,setCustomVariable:$,updateCustomVariables:L,customVariables:r,getStepOptionalProgress:R,getFlowMetadata:U,isStepBlocked:ne,isStepHidden:fe,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:d,isFlowAvailableToUser:Be}}import{useCallback as Cr,useContext as al,useEffect as pl}from"react";var kt="guest_";function Ht(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:n}=al(q),{config:r}=Me(),{mutateUserFlowState:s}=Ie(),p=Tt(),{verifySDKInitiated:d}=Ft();pl(()=>{if(e&&!t){if(e.startsWith(kt))return;let c=`frigade-user-registered-${e}`;localStorage.getItem(c)||(p(`${Te}users`,{...r,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(c,"true"))}},[e,n,t]);let a=Cr(async c=>{d();let u={foreignId:e,properties:c};await p(`${Te}users`,{...r,method:"POST",body:JSON.stringify(u)}),i(w=>({...w,...c})),s()},[e,r,n,s]),f=Cr(async(c,u)=>{d();let T={foreignId:e,events:[{event:c,properties:u}]};await p(`${Te}users`,{...r,method:"POST",body:JSON.stringify(T)}),s()},[e,r,s]);return{userId:e,setUserId:o,addPropertiesToUser:a,trackEventForUser:f}}import{v4 as Oa}from"uuid";import _e,{useEffect as Ba,useState as Aa}from"react";import De,{useEffect as hl}from"react";import co from"styled-components";import dl from"react";import cl from"styled-components";var Sr="fr-",Vt="cfr-";function l(e,t){let o=`${Sr}${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+" "+Vt+e}return o}function k(e){if(!e.className||e.className.indexOf(Vt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Sr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function $o(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function dt(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${$o(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ce(...e){return e.filter(Boolean).join(" ")}function yr(e){return e.charAt(0).toUpperCase()+e.slice(1)}var ml=cl.div`
2
+ import gt,{createContext as Da,useEffect as Ro,useState as Ne}from"react";import{ThemeProvider as $a}from"styled-components";import ft,{useContext as La,useEffect as Fo,useState as Zo}from"react";import{useCallback as pt,useContext as nl,useEffect as sl}from"react";import Do,{useMemo as Ks}from"react";var gr="1.32.53 ";var Te="https://api.frigade.com/v1/public/",Ae="NOT_STARTED_STEP",Y="COMPLETED_FLOW",no="ABORTED_FLOW",at="STARTED_FLOW",Le="NOT_STARTED_FLOW",Oe="COMPLETED_STEP",so="STARTED_STEP";function Me(){let{publicApiKey:e,userId:t}=Do.useContext(q);return{config:Ks(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":gr,"X-Frigade-SDK-Platform":"React"}}),[e,t])}}var Ys="frigade-last-call-at-",Xs="frigade-last-call-data-";function Tt(){let{shouldGracefullyDegrade:e}=Do.useContext(q);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),zt();let i=Ys+t,n=Xs+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 d=new Date(s);if(new Date().getTime()-d.getTime()<1e3)return zt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,o.body)}let r;try{r=await fetch(t,o)}catch(s){return zt(s)}return r?r.ok?r:zt(r.statusText):zt()}}function zt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ft(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Do.useContext(q);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 ol,useState as hr}from"react";import{useContext as Qs,useEffect as Zs,useState as Rs}from"react";import el from"swr";import{useContext as Js}from"react";function Pe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:n}=Js(q);function r(c,u=!1){return e[c]??u}function s(c,u){t(w=>({...w,[c]:u}))}function p(c){t(u=>{let{[c]:w,...T}=u;return{...T}})}function d(c){n.includes(c)||i(u=>[...u,c])}function a(c){return n.includes(c)}function f(){return Object.values(e).some(c=>c)||o}return{getOpenFlowState:r,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:f,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var tl="unknown";function Ie(){let{config:e}=Me(),{publicApiKey:t,userId:o,flows:i,setShouldGracefullyDegrade:n}=Qs(q),{resetOpenFlowState:r}=Pe(),[s,p]=Rs(!1),d={data:i.map(y=>({flowId:y.id,flowState:Y,lastStepId:null,userId:o,foreignUserId:o,stepStates:{},shouldTrigger:!1}))},a=y=>fetch(y,e).then(h=>{if(h.ok)return h.json();throw new Error("Failed to fetch user flow states")}).catch(h=>(console.log(`Error fetching ${y}: ${h}. Will gracefully degrade and hide Frigade`),n(!0),d)),{data:f,isLoading:c,mutate:u,error:w}=el(t&&i&&o?`${Te}userFlowStates?foreignUserId=${encodeURIComponent(o)}`:null,a,{revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),T=f==null?void 0:f.data;Zs(()=>{!s&&!c&&T&&p(!0)},[T,s,c]);async function S(y){if(T){let h=T.find(m=>m.flowId===y);h&&h.flowState!==Y&&(h.flowState=Y),await u(Promise.resolve({...f,data:T}),{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1})}}async function C(y,h,m){if(T){let x=T.find(F=>F.flowId===y);x&&(x.stepStates[h]=m,x.flowState=at),await u(Promise.resolve({...f,data:T}),{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1})}}async function P(y,h,m){if(T){let x=T.find(F=>F.flowId===y);x&&(x.lastStepId=h,x.stepStates[h]=m,x.flowState=at),await u({...f,data:T},{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1})}}async function v(y){if(T){let h=T.find(m=>m.flowId===y);h&&h.flowState!==Le&&(h.flowState=Le,h.lastStepId=tl,Object.keys(h.stepStates).forEach(m=>{h.stepStates[m].actionType=Ae,h.stepStates[m].createdAt=new Date().toISOString()}),await u({...f,data:T},{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1}),r(y))}}async function B(y,h){if(T){let m=T.find(x=>x.flowId===y);m&&m.stepStates[h]!==Ae&&(m.stepStates[h]=Ae),await u({...f,data:T},{optimisticData:{...f,data:T},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:T,isLoadingUserFlowStateData:!s,mutateUserFlowState:u,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:v,optimisticallyMarkStepCompleted:C,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:P,error:w}}function Wt(){let{config:e}=Me(),{userFlowStatesData:t,mutateUserFlowState:o}=Ie(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:r,setFlowResponses:s}=ol(q),[p,d]=hr(new Set),[a,f]=hr(new Set),c=Tt();function u(S){let C=JSON.stringify(S);if(p.has(C))return null;p.add(C),d(p),a.add(S),f(a);let P=r==null?void 0:r.find(v=>v.flowSlug===S.flowSlug&&v.stepId===S.stepId&&v.actionType===S.actionType&&v.createdAt===S.createdAt);return c(`${Te}flowResponses`,{...e,method:"POST",body:C}).then(v=>{v.status!==200&&v.status!==201?(console.log("Failed to send flow response for step "+S.stepId+". Will retry again later."),n([...i,S])):P||s(B=>[...B??[],S])})}async function w(S){S.foreignUserId&&(S.actionType===at||S.actionType===Le?await u(S):S.actionType===Y?await u(S):S.actionType===so?await u(S):S.actionType===Oe?await u(S):S.actionType===no?await u(S):S.actionType===Ae&&await u(S))}function T(){let S=[];return t==null||t.forEach(C=>{if(C&&C.stepStates&&Object.keys(C.stepStates).length!==0)for(let P in C.stepStates){let v=C.stepStates[P];S.push({foreignUserId:C.foreignUserId,flowSlug:C.flowId,stepId:v.stepId,actionType:v.actionType,data:{},createdAt:new Date(v.createdAt),blocked:v.blocked,hidden:v.hidden})}}),[...S,...r]}return{addResponse:w,setFlowResponses:s,getFlowResponses:T}}import ll from"swr";var rl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,xr=e=>{let t=rl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,n)=>{let r=il(i,"'","");r.startsWith("flow_")&&(o=r)}),o},il=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function X(){let{config:e}=Me(),{flows:t,setFlows:o,userId:i,publicApiKey:n,customVariables:r,setCustomVariables:s,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:d,setFlowResponses:a,setShouldGracefullyDegrade:f}=nl(q),c={data:[]},{verifySDKInitiated:u}=Ft(),{addResponse:w,getFlowResponses:T}=Wt(),S=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`),f(!0),c)).catch(b=>(console.log(`Error fetching ${g}: ${b}. Will gracefully degrade and hide Frigade`),f(!0),c)),{userFlowStatesData:C,isLoadingUserFlowStateData:P,optimisticallyMarkFlowCompleted:v,optimisticallyMarkFlowNotStarted:B,optimisticallyMarkStepCompleted:y,optimisticallyMarkStepNotStarted:h,optimisticallyMarkStepStarted:m}=Ie(),{data:x,error:F,isLoading:D}=ll(n?`${Te}flows`:null,S,{keepPreviousData:!0});sl(()=>{if(F){console.error(F);return}x&&x.data&&(x.data=o(x.data))},[x,F]);function _(g){if(D)return null;let b=t.find(E=>E.slug===g);return!b&&t.length>0&&!P&&!D?(console.log(`Flow with slug ${g} not found`),null):(b==null?void 0:b.active)===!1?null:b}function z(g){var V;if(!_(g))return[];let b=_(g).data;return b?(b=A(b),(((V=JSON.parse(b))==null?void 0:V.data)??[]).map(de=>{let W=R(de);return{handleSecondaryButtonClick:()=>{de.skippable===!0&&O(g,de.id,{skipped:!0})},...de,complete:I(g,de.id)===Oe||W>=1,blocked:ne(g,de.id),hidden:fe(g,de.id),handlePrimaryButtonClick:()=>{(!de.completionCriteria&&(de.autoMarkCompleted||de.autoMarkCompleted===void 0)||de.completionCriteria&&de.autoMarkCompleted===!0)&&O(g,de.id)},progress:W}}).filter(de=>de.hidden!==!0)):[]}function A(g){return g.replace(/\${(.*?)}/g,(b,E)=>r[E]!==void 0?String(r[E]):"")}function U(g){if(!_(g))return[];let b=_(g).data;return b?(b=A(b),JSON.parse(b)??{}):[]}function $(g,b){s(E=>({...E,[g]:b}))}function L(g){!P&&!D&&g&&JSON.stringify(r)!=JSON.stringify({...r,...g})&&Object.keys(g).forEach(b=>{$(b,g[b])})}let ie=pt(async(g,b,E)=>{u();let V={foreignUserId:i,flowSlug:g,stepId:b,actionType:so,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};oe(V)&&(await m(g,b,V),w(V))},[i,C]),pe=pt(async(g,b,E)=>{u();let V={foreignUserId:i,flowSlug:g,stepId:b,actionType:Ae,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};oe(V)&&(await h(g,b),w(V))},[i,C]),O=pt(async(g,b,E)=>{u();let V={foreignUserId:i,flowSlug:g,stepId:b,actionType:Oe,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};oe(V)&&(await y(g,b,V),w(V))},[i,C]),we=pt(async(g,b)=>{if(u(),K(g)===Le)return;let E={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Le,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};await B(g),oe(E)&&w(E)},[i,C]),xe=pt(async(g,b)=>{u();let E={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:at,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};oe(E)&&w(E)},[i,C]),ee=pt(async(g,b)=>{u();let E={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Y,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};oe(E)&&(await v(g),w(E))},[i,C]),j=pt(async(g,b)=>{u();let E={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:no,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};oe(E)&&(await v(g),w(E))},[i,C]);function oe(g){var b;if(!C&&g.actionType===Ae)return!1;if(C){let E=C.find(V=>V.flowId===g.flowSlug);if(g.actionType===Ae&&(!(E!=null&&E.stepStates[g.stepId])||E.stepStates[g.stepId].actionType===Ae)||E&&((b=E.stepStates[g.stepId])==null?void 0:b.actionType)===g.actionType||E&&E.flowState===Y&&g.actionType===Y)return!1}return!0}function I(g,b){let E=ke(g,b);return P?null:E?E.actionType:Ae}function ne(g,b){let E=ke(g,b);return E?E.blocked:!1}function fe(g,b){let E=ke(g,b);return E?E.hidden:!1}function ke(g,b){if(P)return null;let E=C==null?void 0:C.find(V=>V.flowId===g);return!E||!E.stepStates[b]?null:E.stepStates[b]??null}function G(g){var E;if(P||!C)return null;if(K(g)===Le)return z(g)[0]??null;let b=(E=C.find(V=>V.flowId===g))==null?void 0:E.lastStepId;return b?z(g).find(V=>V.id===b):null}function ge(g){let b=G(g);if(!b)return 0;let E=z(g).findIndex(V=>V.id===b.id)??0;return I(g,b.id)===Oe&&E<z(g).length-1?E+1:E}function R(g){if(!g.completionCriteria)return;let b=xr(g.completionCriteria);if(b===null)return;let E=je(b),V=Ge(b);return V===0?void 0:E/V}function K(g){let b=C==null?void 0:C.find(E=>E.flowId===g);return b?b.flowState:null}function je(g){let b=z(g);return b.length===0?0:b.filter(V=>I(g,V.id)===Oe).length}function Ge(g){return z(g).length}function wt(g){return JSON.parse(t.find(b=>b.slug===g).data)}function H(g){if(P)return!0;if(g!=null&&g.targetingLogic&&C){let b=C.find(E=>E.flowId===g.slug);if(b)return b.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&i&&i.startsWith("guest_"))}function Be(g){return!H(_(g))}return{getFlow:_,getFlowData:wt,isLoading:P||D,getStepStatus:I,getFlowSteps:z,getCurrentStepIndex:ge,markStepStarted:ie,markStepCompleted:O,markFlowNotStarted:we,markFlowStarted:xe,markFlowCompleted:ee,markFlowAborted:j,markStepNotStarted:pe,getFlowStatus:K,getNumberOfStepsCompleted:je,getNumberOfSteps:Ge,targetingLogicShouldHideFlow:H,setCustomVariable:$,updateCustomVariables:L,customVariables:r,getStepOptionalProgress:R,getFlowMetadata:U,isStepBlocked:ne,isStepHidden:fe,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:d,isFlowAvailableToUser:Be}}import{useCallback as Cr,useContext as al,useEffect as pl}from"react";var kt="guest_";function Ht(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:n}=al(q),{config:r}=Me(),{mutateUserFlowState:s}=Ie(),p=Tt(),{verifySDKInitiated:d}=Ft();pl(()=>{if(e&&!t){if(e.startsWith(kt))return;let c=`frigade-user-registered-${e}`;localStorage.getItem(c)||(p(`${Te}users`,{...r,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(c,"true"))}},[e,n,t]);let a=Cr(async c=>{d();let u={foreignId:e,properties:c};await p(`${Te}users`,{...r,method:"POST",body:JSON.stringify(u)}),i(w=>({...w,...c})),s()},[e,r,n,s]),f=Cr(async(c,u)=>{d();let T={foreignId:e,events:[{event:c,properties:u}]};await p(`${Te}users`,{...r,method:"POST",body:JSON.stringify(T)}),s()},[e,r,s]);return{userId:e,setUserId:o,addPropertiesToUser:a,trackEventForUser:f}}import{v4 as Oa}from"uuid";import _e,{useEffect as Ba,useState as Aa}from"react";import De,{useEffect as hl}from"react";import co from"styled-components";import dl from"react";import cl from"styled-components";var Sr="fr-",Vt="cfr-";function l(e,t){let o=`${Sr}${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+" "+Vt+e}return o}function k(e){if(!e.className||e.className.indexOf(Vt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Sr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function $o(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function dt(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${$o(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ce(...e){return e.filter(Boolean).join(" ")}function yr(e){return e.charAt(0).toUpperCase()+e.slice(1)}var ml=cl.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;
@@ -458,7 +458,7 @@ import gt,{createContext as Da,useEffect as Ro,useState as Ne}from"react";import
458
458
  margin-right: 8px;
459
459
  }
460
460
  }
461
- `,Z=({onClick:e,title:t,style:o,disabled:i,type:n="inline",size:r="medium",secondary:s=!1,appearance:p,withMargin:d=!0,classPrefix:a=""})=>{function f(){let c=s?"buttonSecondary":"button";return a===""?c:`${a}${yr(c)}`}return jl.createElement(Gl,{secondary:s,appearance:p,disabled:i,onClick:e,style:o,type:n,withMargin:d,size:r,className:l(f(),p)},t)};var ni=({step:e,canContinue:t,appearance:o,onPrimaryClick:i,onSecondaryClick:n,formType:r,selectedStep:s,steps:p,onBack:d,allowBackNavigation:a,errorMessage:f})=>{let c=r==="inline"?"inline":"full-width",u=p.length>1&&s!=0&&a;return rt.createElement(rt.Fragment,null,f&&rt.createElement(Zr,{appearance:o,className:l("formCTAError",o)},f),rt.createElement(Qr,{showBackButton:u,className:l("formCTAContainer",o)},u&&rt.createElement(Z,{title:"\u2190",onClick:d,secondary:!0,withMargin:!1,type:c,appearance:o}),rt.createElement(Rr,{className:l("ctaWrapper",o)},e.secondaryButtonTitle?rt.createElement(Z,{title:e.secondaryButtonTitle,onClick:n,secondary:!0,withMargin:!1,type:c,appearance:o}):null," ",e.primaryButtonTitle?rt.createElement(Z,{disabled:!t,withMargin:!1,title:e.primaryButtonTitle,onClick:i,type:c,appearance:o}):null)))};import qo from"react";import ql from"styled-components";var Kl=ql.div`
461
+ `,Z=({onClick:e,title:t,style:o,disabled:i,type:n="inline",size:r="medium",secondary:s=!1,appearance:p,withMargin:d=!0,classPrefix:a=""})=>{function f(){let c=s?"buttonSecondary":"button";return a===""?c:`${a}${yr(c)}`}return jl.createElement(Gl,{secondary:s,appearance:p,disabled:i,onClick:e,style:o,type:n,withMargin:d,size:r,className:l(f(),p)},t)};var ni=({step:e,canContinue:t,appearance:o,onPrimaryClick:i,onSecondaryClick:n,formType:r,selectedStep:s,steps:p,onBack:d,allowBackNavigation:a,errorMessage:f})=>{let c=r==="inline"?"inline":"full-width",u=p.length>1&&s!=0&&a;return rt.createElement(rt.Fragment,null,f&&rt.createElement(Zr,{appearance:o,className:l("formCTAError",o)},f),rt.createElement(Qr,{showBackButton:u,className:l("formCTAContainer",o)},u&&rt.createElement(Z,{title:"\u2190",onClick:d,secondary:!0,withMargin:!1,type:c,appearance:o,style:{maxWidth:"90px"}}),rt.createElement(Rr,{className:l("ctaWrapper",o)},e.secondaryButtonTitle?rt.createElement(Z,{title:e.secondaryButtonTitle,onClick:n,secondary:!0,withMargin:!1,type:c,appearance:o}):null," ",e.primaryButtonTitle?rt.createElement(Z,{disabled:!t,withMargin:!1,title:e.primaryButtonTitle,onClick:i,type:c,appearance:o}):null)))};import qo from"react";import ql from"styled-components";var Kl=ql.div`
462
462
  text-align: center;
463
463
  `,si=({stepCount:e=0,currentStep:t=0,className:o,appearance:i})=>{let{theme:n}=J().mergeAppearanceWithDefault(i);return qo.createElement(Kl,{className:o},qo.createElement("svg",{width:16*e-8,height:8,viewBox:`0 0 ${16*e-8} 8`,fill:"none"},Array(e).fill(null).map((r,s)=>qo.createElement("rect",{key:s,x:16*s,y:0,width:8,height:8,rx:4,fill:t===s?n.colorPrimary:"#E6E6E6"}))))};import mt from"react";import vt from"styled-components";import{useContext as Yl}from"react";function re(){let e=Yl(q);function t(n){i(n.primaryButtonUri,n.primaryButtonUriTarget)}function o(n){i(n.secondaryButtonUri,n.secondaryButtonUriTarget)}function i(n,r){if(!n)return;let s=n.startsWith("http")?"_blank":"_self";r&&r!=="_blank"&&(s="_self"),e.navigate(n,s)}return{primaryCTAClickSideEffects:t,secondaryCTAClickSideEffects:o,handleUrl:i}}var Xl=vt.div`
464
464
  display: flex;