@frigade/react 1.32.9 → 1.32.11

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 ra,useEffect as Uo,useState as Pe}from"react";import{ThemeProvider as ia}from"styled-components";import nt,{useContext as ta,useEffect as so,useState as $o}from"react";import{useCallback as tt,useContext as Es,useEffect as As}from"react";import To,{useMemo as Ss}from"react";var Jo="0.0.1";var ue="https://api.frigade.com/v1/public/",Se="NOT_STARTED_STEP",Q="COMPLETED_FLOW",Kt="ABORTED_FLOW",et="STARTED_FLOW",Ee="NOT_STARTED_FLOW",we="COMPLETED_STEP",Yt="STARTED_STEP";function Ae(){let{publicApiKey:e,userId:t}=To.useContext(q);return{config:Ss(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Jo,"X-Frigade-SDK-Platform":"React"}}),[e,t])}}function mt(){let{shouldGracefullyDegrade:e}=To.useContext(q);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),qt();let i;try{i=await fetch(t,o)}catch(r){return qt(r)}return i?i.ok?i:qt(i.statusText):qt()}}function qt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function ut(){let{publicApiKey:e,shouldGracefullyDegrade:t}=To.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 Ps,useState as Qo}from"react";import{useContext as bs,useEffect as Ts,useState as ws}from"react";import Fs from"swr";import{useContext as ys}from"react";function Fe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o}=ys(q);function i(p,d=!1){return e[p]??d}function r(p,d){t(l=>({...l,[p]:d}))}function n(p){t(d=>{let{[p]:l,...x}=d;return{...x}})}function s(){return Object.values(e).some(p=>p)||o}return{getOpenFlowState:i,setOpenFlowState:r,resetOpenFlowState:n,hasOpenModals:s}}var ks="unknown";function ye(){let{config:e}=Ae(),{publicApiKey:t,userId:o,flows:i,setShouldGracefullyDegrade:r}=bs(q),{resetOpenFlowState:n}=Fe(),[s,p]=ws(!1),d={data:i.map(P=>({flowId:P.id,flowState:Q,lastStepId:null,userId:o,foreignUserId:o,stepStates:{},shouldTrigger:!1}))},l=P=>fetch(P,e).then(c=>{if(c.ok)return c.json();throw new Error("Failed to fetch user flow states")}).catch(c=>(console.log(`Error fetching ${P}: ${c}. Will gracefully degrade and hide Frigade`),r(!0),d)),{data:x,isLoading:m,mutate:f,error:b}=Fs(t&&i&&o?`${ue}userFlowStates?foreignUserId=${encodeURIComponent(o)}`:null,l,{keepPreviousData:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),C=x==null?void 0:x.data;Ts(()=>{!s&&!m&&C&&p(!0)},[C,s,m]);async function S(P){if(C){let c=C.find(g=>g.flowId===P);c&&c.flowState!==Q&&(c.flowState=Q),await f(Promise.resolve({...x,data:C}),{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1})}}async function y(P,c,g){if(C){let T=C.find(v=>v.flowId===P);T&&(T.stepStates[c]=g,T.flowState=et),await f(Promise.resolve({...x,data:C}),{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1})}}async function I(P,c,g){if(C){let T=C.find(v=>v.flowId===P);T&&(T.lastStepId=c,T.stepStates[c]=g,T.flowState=et),await f({...x,data:C},{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1})}}async function k(P){if(C){let c=C.find(g=>g.flowId===P);c&&c.flowState!==Ee&&(c.flowState=Ee,c.lastStepId=ks,Object.keys(c.stepStates).forEach(g=>{c.stepStates[g].actionType=Se,c.stepStates[g].createdAt=new Date().toISOString()}),await f({...x,data:C},{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1}),n(P))}}async function E(P,c){if(C){let g=C.find(T=>T.flowId===P);g&&g.stepStates[c]!==Se&&(g.stepStates[c]=Se),await f({...x,data:C},{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:C,isLoadingUserFlowStateData:!s,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:k,optimisticallyMarkStepCompleted:y,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:I,error:b}}function Et(){let{config:e}=Ae(),{userFlowStatesData:t,mutateUserFlowState:o}=ye(),{failedFlowResponses:i,setFailedFlowResponses:r,flowResponses:n,setFlowResponses:s}=Ps(q),[p,d]=Qo(new Set),[l,x]=Qo(new Set),m=mt();function f(S){let y=JSON.stringify(S);if(p.has(y))return null;p.add(y),d(p),l.add(S),x(l);let I=n==null?void 0:n.find(k=>k.flowSlug===S.flowSlug&&k.stepId===S.stepId&&k.actionType===S.actionType&&k.createdAt===S.createdAt);return m(`${ue}flowResponses`,{...e,method:"POST",body:y}).then(k=>{k.status!==200&&k.status!==201?(console.log("Failed to send flow response for step "+S.stepId+". Will retry again later."),r([...i,S])):I||s(E=>[...E??[],S])})}async function b(S){S.foreignUserId&&(S.actionType===et||S.actionType===Ee?await f(S):S.actionType===Q?await f(S):S.actionType===Yt?await f(S):S.actionType===we?await f(S):S.actionType===Kt?await f(S):S.actionType===Se&&await f(S))}function C(){let S=[];return t==null||t.forEach(y=>{if(y&&y.stepStates&&Object.keys(y.stepStates).length!==0)for(let I in y.stepStates){let k=y.stepStates[I];S.push({foreignUserId:y.foreignUserId,flowSlug:y.flowId,stepId:k.stepId,actionType:k.actionType,data:{},createdAt:new Date(k.createdAt),blocked:k.blocked,hidden:k.hidden})}}),[...S,...n]}return{addResponse:b,setFlowResponses:s,getFlowResponses:C}}import Bs from"swr";var vs=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Zo=e=>{let t=vs.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=Is(i,"'","");n.startsWith("flow_")&&(o=n)}),o},Is=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Y(){let{config:e}=Ae(),{flows:t,setFlows:o,userId:i,publicApiKey:r,customVariables:n,setCustomVariables:s,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:d,setFlowResponses:l,setShouldGracefullyDegrade:x}=Es(q),m={data:[]},{verifySDKInitiated:f}=ut(),{addResponse:b,getFlowResponses:C}=Et(),S=h=>fetch(h,e).then(u=>u.ok?u.json():(console.log(`Error fetching ${h} (${u.status}): ${u.statusText}. .Will gracefully degrade and hide Frigade`),x(!0),m)).catch(u=>(console.log(`Error fetching ${h}: ${u}. Will gracefully degrade and hide Frigade`),x(!0),m)),{userFlowStatesData:y,isLoadingUserFlowStateData:I,optimisticallyMarkFlowCompleted:k,optimisticallyMarkFlowNotStarted:E,optimisticallyMarkStepCompleted:P,optimisticallyMarkStepNotStarted:c,optimisticallyMarkStepStarted:g}=ye(),T=C(),{data:v,error:D,isLoading:U}=Bs(r?`${ue}flows`:null,S,{keepPreviousData:!0});As(()=>{if(D){console.error(D);return}v&&v.data&&(v.data=o(v.data))},[v,D]);function W(h){let u=t.find(w=>w.slug===h);return!u&&t.length>0&&!I&&!U&&console.log(`Flow with slug ${h} not found`),u}function A(h){var M;if(!W(h))return[];let u=W(h).data;return u?(u=_(u),(((M=JSON.parse(u))==null?void 0:M.data)??[]).map(re=>{let bo=Re(re);return{handleSecondaryButtonClick:()=>{re.skippable===!0&&K(h,re.id,{skipped:!0})},...re,complete:Z(h,re.id)===we||bo>=1,blocked:Me(h,re.id),hidden:le(h,re.id),handlePrimaryButtonClick:()=>{(!re.completionCriteria&&(re.autoMarkCompleted||re.autoMarkCompleted===void 0)||re.completionCriteria&&re.autoMarkCompleted===!0)&&K(h,re.id)},progress:bo}}).filter(re=>re.hidden!==!0)):[]}function _(h){return h.replace(/\${(.*?)}/g,(u,w)=>n[w]!==void 0?String(n[w]):"")}function N(h){if(!W(h))return[];let u=W(h).data;return u?(u=_(u),JSON.parse(u)??{}):[]}function z(h,u){s(w=>({...w,[h]:u}))}function G(h){!I&&!U&&h&&JSON.stringify(n)!=JSON.stringify({...n,...h})&&Object.keys(h).forEach(u=>{z(u,h[u])})}let j=tt(async(h,u,w)=>{f();let M={foreignUserId:i,flowSlug:h,stepId:u,actionType:Yt,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};B(M)&&(await g(h,u,M),b(M))},[i,y]),$=tt(async(h,u,w)=>{f();let M={foreignUserId:i,flowSlug:h,stepId:u,actionType:Se,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};B(M)&&(await c(h,u),b(M))},[i,y]),K=tt(async(h,u,w)=>{f();let M={foreignUserId:i,flowSlug:h,stepId:u,actionType:we,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};B(M)&&(await P(h,u,M),b(M))},[i,y]),V=tt(async(h,u)=>{f();let w={foreignUserId:i,flowSlug:h,stepId:"unknown",actionType:Ee,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};await E(h),B(w)&&b(w)},[i,y]),X=tt(async(h,u)=>{f();let w={foreignUserId:i,flowSlug:h,stepId:"unknown",actionType:et,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};B(w)&&b(w)},[i,y]),je=tt(async(h,u)=>{f();let w={foreignUserId:i,flowSlug:h,stepId:"unknown",actionType:Q,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};B(w)&&(await k(h),b(w))},[i,y]),Ie=tt(async(h,u)=>{f();let w={foreignUserId:i,flowSlug:h,stepId:"unknown",actionType:Kt,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};B(w)&&(await k(h),b(w))},[i,y]);function B(h){var u;if(!y&&h.actionType===Se)return!1;if(y){let w=y.find(M=>M.flowId===h.flowSlug);if(h.actionType===Se&&(!(w!=null&&w.stepStates[h.stepId])||w.stepStates[h.stepId].actionType===Se)||w&&((u=w.stepStates[h.stepId])==null?void 0:u.actionType)===h.actionType)return!1}return!0}function Z(h,u){let w=ae(h,u);return I?null:w?w.actionType:Se}function Me(h,u){let w=ae(h,u);return w?w.blocked:!1}function le(h,u){let w=ae(h,u);return w?w.hidden:!1}function ae(h,u){if(I)return null;let w=y==null?void 0:y.find(M=>M.flowId===h);return!w||!w.stepStates[u]?null:w.stepStates[u]??null}function Ve(h){var w;if(I||!y)return null;if(Te(h)===Ee)return A(h)[0]??null;let u=(w=y.find(M=>M.flowId===h))==null?void 0:w.lastStepId;return u?A(h).find(M=>M.id===u):null}function qe(h){let u=Ve(h);if(!u)return 0;let w=A(h).findIndex(M=>M.id===u.id)??0;return Z(h,u.id)===we&&w<A(h).length-1?w+1:w}function Re(h){if(!h.completionCriteria)return;let u=Zo(h.completionCriteria);if(u===null)return;let w=H(u),M=he(u);return M===0?void 0:w/M}function Te(h){let u=y==null?void 0:y.find(w=>w.flowId===h);return u?u.flowState:null}function H(h){let u=A(h);return u.length===0?0:u.filter(M=>Z(h,M.id)===we).length}function he(h){return A(h).length}function It(h){return JSON.parse(t.find(u=>u.slug===h).data)}function Vt(h){if(I)return!0;if(h!=null&&h.targetingLogic&&y){let u=y.find(w=>w.flowId===h.slug);if(u)return u.shouldTrigger===!1}return!!(h!=null&&h.targetingLogic&&i&&i.startsWith("guest_"))}function yo(h){return!Vt(W(h))}return{getFlow:W,getFlowData:It,isLoading:I||U,getStepStatus:Z,getFlowSteps:A,getCurrentStepIndex:qe,markStepStarted:j,markStepCompleted:K,markFlowNotStarted:V,markFlowStarted:X,markFlowCompleted:je,markFlowAborted:Ie,markStepNotStarted:$,getFlowStatus:Te,getNumberOfStepsCompleted:H,getNumberOfSteps:he,targetingLogicShouldHideFlow:Vt,setCustomVariable:z,updateCustomVariables:G,customVariables:n,getStepOptionalProgress:Re,getFlowMetadata:N,isStepBlocked:Me,isStepHidden:le,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:d,isFlowAvailableToUser:yo}}import{useCallback as Ro,useContext as Ls,useEffect as Os}from"react";var ft="guest_";function wo(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=Ls(q),{config:n}=Ae(),{mutateUserFlowState:s}=ye(),p=mt(),{verifySDKInitiated:d}=ut();Os(()=>{if(e&&!t){if(e.startsWith(ft))return;let m=`frigade-user-registered-${e}`;localStorage.getItem(m)||(p(`${ue}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(m,"true"))}},[e,r,t]);let l=Ro(async m=>{d();let f={foreignId:e,properties:m};await p(`${ue}users`,{...n,method:"POST",body:JSON.stringify(f)}),i(b=>({...b,...m})),s()},[e,n,r,s]),x=Ro(async(m,f)=>{d();let C={foreignId:e,events:[{event:m,properties:f}]};await p(`${ue}users`,{...n,method:"POST",body:JSON.stringify(C)}),s()},[e,n,s]);return{userId:e,setUserId:o,addPropertiesToUser:l,trackEventForUser:x}}import{v4 as oa}from"uuid";import Be,{useEffect as Ql,useState as Zl}from"react";import $e,{useEffect as _s}from"react";import Jt from"styled-components";import Ns from"react";import Ds from"styled-components";var er="fr-",At="cfr-";function a(e,t){let o=`${er}${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+" "+At+e}return o}function F(e){if(!e.className||e.className.indexOf(At)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(er)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Fo(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function ot(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Fo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function xe(...e){return e.filter(Boolean).join(" ")}function tr(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ms=Ds.div`
2
+ import st,{createContext as ra,useEffect as Uo,useState as Pe}from"react";import{ThemeProvider as ia}from"styled-components";import nt,{useContext as ta,useEffect as so,useState as $o}from"react";import{useCallback as tt,useContext as Es,useEffect as As}from"react";import To,{useMemo as Ss}from"react";var Jo="1.32.11 ";var ue="https://api.frigade.com/v1/public/",Se="NOT_STARTED_STEP",Q="COMPLETED_FLOW",Kt="ABORTED_FLOW",et="STARTED_FLOW",Ee="NOT_STARTED_FLOW",we="COMPLETED_STEP",Yt="STARTED_STEP";function Ae(){let{publicApiKey:e,userId:t}=To.useContext(q);return{config:Ss(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Jo,"X-Frigade-SDK-Platform":"React"}}),[e,t])}}function mt(){let{shouldGracefullyDegrade:e}=To.useContext(q);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),qt();let i;try{i=await fetch(t,o)}catch(r){return qt(r)}return i?i.ok?i:qt(i.statusText):qt()}}function qt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function ut(){let{publicApiKey:e,shouldGracefullyDegrade:t}=To.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 Ps,useState as Qo}from"react";import{useContext as bs,useEffect as Ts,useState as ws}from"react";import Fs from"swr";import{useContext as ys}from"react";function Fe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o}=ys(q);function i(p,d=!1){return e[p]??d}function r(p,d){t(l=>({...l,[p]:d}))}function n(p){t(d=>{let{[p]:l,...x}=d;return{...x}})}function s(){return Object.values(e).some(p=>p)||o}return{getOpenFlowState:i,setOpenFlowState:r,resetOpenFlowState:n,hasOpenModals:s}}var ks="unknown";function ye(){let{config:e}=Ae(),{publicApiKey:t,userId:o,flows:i,setShouldGracefullyDegrade:r}=bs(q),{resetOpenFlowState:n}=Fe(),[s,p]=ws(!1),d={data:i.map(P=>({flowId:P.id,flowState:Q,lastStepId:null,userId:o,foreignUserId:o,stepStates:{},shouldTrigger:!1}))},l=P=>fetch(P,e).then(c=>{if(c.ok)return c.json();throw new Error("Failed to fetch user flow states")}).catch(c=>(console.log(`Error fetching ${P}: ${c}. Will gracefully degrade and hide Frigade`),r(!0),d)),{data:x,isLoading:m,mutate:f,error:b}=Fs(t&&i&&o?`${ue}userFlowStates?foreignUserId=${encodeURIComponent(o)}`:null,l,{keepPreviousData:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),C=x==null?void 0:x.data;Ts(()=>{!s&&!m&&C&&p(!0)},[C,s,m]);async function S(P){if(C){let c=C.find(g=>g.flowId===P);c&&c.flowState!==Q&&(c.flowState=Q),await f(Promise.resolve({...x,data:C}),{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1})}}async function y(P,c,g){if(C){let T=C.find(v=>v.flowId===P);T&&(T.stepStates[c]=g,T.flowState=et),await f(Promise.resolve({...x,data:C}),{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1})}}async function I(P,c,g){if(C){let T=C.find(v=>v.flowId===P);T&&(T.lastStepId=c,T.stepStates[c]=g,T.flowState=et),await f({...x,data:C},{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1})}}async function k(P){if(C){let c=C.find(g=>g.flowId===P);c&&c.flowState!==Ee&&(c.flowState=Ee,c.lastStepId=ks,Object.keys(c.stepStates).forEach(g=>{c.stepStates[g].actionType=Se,c.stepStates[g].createdAt=new Date().toISOString()}),await f({...x,data:C},{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1}),n(P))}}async function E(P,c){if(C){let g=C.find(T=>T.flowId===P);g&&g.stepStates[c]!==Se&&(g.stepStates[c]=Se),await f({...x,data:C},{optimisticData:{...x,data:C},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:C,isLoadingUserFlowStateData:!s,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:k,optimisticallyMarkStepCompleted:y,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:I,error:b}}function Et(){let{config:e}=Ae(),{userFlowStatesData:t,mutateUserFlowState:o}=ye(),{failedFlowResponses:i,setFailedFlowResponses:r,flowResponses:n,setFlowResponses:s}=Ps(q),[p,d]=Qo(new Set),[l,x]=Qo(new Set),m=mt();function f(S){let y=JSON.stringify(S);if(p.has(y))return null;p.add(y),d(p),l.add(S),x(l);let I=n==null?void 0:n.find(k=>k.flowSlug===S.flowSlug&&k.stepId===S.stepId&&k.actionType===S.actionType&&k.createdAt===S.createdAt);return m(`${ue}flowResponses`,{...e,method:"POST",body:y}).then(k=>{k.status!==200&&k.status!==201?(console.log("Failed to send flow response for step "+S.stepId+". Will retry again later."),r([...i,S])):I||s(E=>[...E??[],S])})}async function b(S){S.foreignUserId&&(S.actionType===et||S.actionType===Ee?await f(S):S.actionType===Q?await f(S):S.actionType===Yt?await f(S):S.actionType===we?await f(S):S.actionType===Kt?await f(S):S.actionType===Se&&await f(S))}function C(){let S=[];return t==null||t.forEach(y=>{if(y&&y.stepStates&&Object.keys(y.stepStates).length!==0)for(let I in y.stepStates){let k=y.stepStates[I];S.push({foreignUserId:y.foreignUserId,flowSlug:y.flowId,stepId:k.stepId,actionType:k.actionType,data:{},createdAt:new Date(k.createdAt),blocked:k.blocked,hidden:k.hidden})}}),[...S,...n]}return{addResponse:b,setFlowResponses:s,getFlowResponses:C}}import Bs from"swr";var vs=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Zo=e=>{let t=vs.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=Is(i,"'","");n.startsWith("flow_")&&(o=n)}),o},Is=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Y(){let{config:e}=Ae(),{flows:t,setFlows:o,userId:i,publicApiKey:r,customVariables:n,setCustomVariables:s,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:d,setFlowResponses:l,setShouldGracefullyDegrade:x}=Es(q),m={data:[]},{verifySDKInitiated:f}=ut(),{addResponse:b,getFlowResponses:C}=Et(),S=h=>fetch(h,e).then(u=>u.ok?u.json():(console.log(`Error fetching ${h} (${u.status}): ${u.statusText}. .Will gracefully degrade and hide Frigade`),x(!0),m)).catch(u=>(console.log(`Error fetching ${h}: ${u}. Will gracefully degrade and hide Frigade`),x(!0),m)),{userFlowStatesData:y,isLoadingUserFlowStateData:I,optimisticallyMarkFlowCompleted:k,optimisticallyMarkFlowNotStarted:E,optimisticallyMarkStepCompleted:P,optimisticallyMarkStepNotStarted:c,optimisticallyMarkStepStarted:g}=ye(),T=C(),{data:v,error:D,isLoading:U}=Bs(r?`${ue}flows`:null,S,{keepPreviousData:!0});As(()=>{if(D){console.error(D);return}v&&v.data&&(v.data=o(v.data))},[v,D]);function W(h){let u=t.find(w=>w.slug===h);return!u&&t.length>0&&!I&&!U&&console.log(`Flow with slug ${h} not found`),u}function A(h){var M;if(!W(h))return[];let u=W(h).data;return u?(u=_(u),(((M=JSON.parse(u))==null?void 0:M.data)??[]).map(re=>{let bo=Re(re);return{handleSecondaryButtonClick:()=>{re.skippable===!0&&K(h,re.id,{skipped:!0})},...re,complete:Z(h,re.id)===we||bo>=1,blocked:Me(h,re.id),hidden:le(h,re.id),handlePrimaryButtonClick:()=>{(!re.completionCriteria&&(re.autoMarkCompleted||re.autoMarkCompleted===void 0)||re.completionCriteria&&re.autoMarkCompleted===!0)&&K(h,re.id)},progress:bo}}).filter(re=>re.hidden!==!0)):[]}function _(h){return h.replace(/\${(.*?)}/g,(u,w)=>n[w]!==void 0?String(n[w]):"")}function N(h){if(!W(h))return[];let u=W(h).data;return u?(u=_(u),JSON.parse(u)??{}):[]}function z(h,u){s(w=>({...w,[h]:u}))}function G(h){!I&&!U&&h&&JSON.stringify(n)!=JSON.stringify({...n,...h})&&Object.keys(h).forEach(u=>{z(u,h[u])})}let j=tt(async(h,u,w)=>{f();let M={foreignUserId:i,flowSlug:h,stepId:u,actionType:Yt,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};B(M)&&(await g(h,u,M),b(M))},[i,y]),$=tt(async(h,u,w)=>{f();let M={foreignUserId:i,flowSlug:h,stepId:u,actionType:Se,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};B(M)&&(await c(h,u),b(M))},[i,y]),K=tt(async(h,u,w)=>{f();let M={foreignUserId:i,flowSlug:h,stepId:u,actionType:we,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};B(M)&&(await P(h,u,M),b(M))},[i,y]),V=tt(async(h,u)=>{f();let w={foreignUserId:i,flowSlug:h,stepId:"unknown",actionType:Ee,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};await E(h),B(w)&&b(w)},[i,y]),X=tt(async(h,u)=>{f();let w={foreignUserId:i,flowSlug:h,stepId:"unknown",actionType:et,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};B(w)&&b(w)},[i,y]),je=tt(async(h,u)=>{f();let w={foreignUserId:i,flowSlug:h,stepId:"unknown",actionType:Q,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};B(w)&&(await k(h),b(w))},[i,y]),Ie=tt(async(h,u)=>{f();let w={foreignUserId:i,flowSlug:h,stepId:"unknown",actionType:Kt,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};B(w)&&(await k(h),b(w))},[i,y]);function B(h){var u;if(!y&&h.actionType===Se)return!1;if(y){let w=y.find(M=>M.flowId===h.flowSlug);if(h.actionType===Se&&(!(w!=null&&w.stepStates[h.stepId])||w.stepStates[h.stepId].actionType===Se)||w&&((u=w.stepStates[h.stepId])==null?void 0:u.actionType)===h.actionType)return!1}return!0}function Z(h,u){let w=ae(h,u);return I?null:w?w.actionType:Se}function Me(h,u){let w=ae(h,u);return w?w.blocked:!1}function le(h,u){let w=ae(h,u);return w?w.hidden:!1}function ae(h,u){if(I)return null;let w=y==null?void 0:y.find(M=>M.flowId===h);return!w||!w.stepStates[u]?null:w.stepStates[u]??null}function Ve(h){var w;if(I||!y)return null;if(Te(h)===Ee)return A(h)[0]??null;let u=(w=y.find(M=>M.flowId===h))==null?void 0:w.lastStepId;return u?A(h).find(M=>M.id===u):null}function qe(h){let u=Ve(h);if(!u)return 0;let w=A(h).findIndex(M=>M.id===u.id)??0;return Z(h,u.id)===we&&w<A(h).length-1?w+1:w}function Re(h){if(!h.completionCriteria)return;let u=Zo(h.completionCriteria);if(u===null)return;let w=H(u),M=he(u);return M===0?void 0:w/M}function Te(h){let u=y==null?void 0:y.find(w=>w.flowId===h);return u?u.flowState:null}function H(h){let u=A(h);return u.length===0?0:u.filter(M=>Z(h,M.id)===we).length}function he(h){return A(h).length}function It(h){return JSON.parse(t.find(u=>u.slug===h).data)}function Vt(h){if(I)return!0;if(h!=null&&h.targetingLogic&&y){let u=y.find(w=>w.flowId===h.slug);if(u)return u.shouldTrigger===!1}return!!(h!=null&&h.targetingLogic&&i&&i.startsWith("guest_"))}function yo(h){return!Vt(W(h))}return{getFlow:W,getFlowData:It,isLoading:I||U,getStepStatus:Z,getFlowSteps:A,getCurrentStepIndex:qe,markStepStarted:j,markStepCompleted:K,markFlowNotStarted:V,markFlowStarted:X,markFlowCompleted:je,markFlowAborted:Ie,markStepNotStarted:$,getFlowStatus:Te,getNumberOfStepsCompleted:H,getNumberOfSteps:he,targetingLogicShouldHideFlow:Vt,setCustomVariable:z,updateCustomVariables:G,customVariables:n,getStepOptionalProgress:Re,getFlowMetadata:N,isStepBlocked:Me,isStepHidden:le,hasActiveFullPageFlow:p,setHasActiveFullPageFlow:d,isFlowAvailableToUser:yo}}import{useCallback as Ro,useContext as Ls,useEffect as Os}from"react";var ft="guest_";function wo(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=Ls(q),{config:n}=Ae(),{mutateUserFlowState:s}=ye(),p=mt(),{verifySDKInitiated:d}=ut();Os(()=>{if(e&&!t){if(e.startsWith(ft))return;let m=`frigade-user-registered-${e}`;localStorage.getItem(m)||(p(`${ue}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(m,"true"))}},[e,r,t]);let l=Ro(async m=>{d();let f={foreignId:e,properties:m};await p(`${ue}users`,{...n,method:"POST",body:JSON.stringify(f)}),i(b=>({...b,...m})),s()},[e,n,r,s]),x=Ro(async(m,f)=>{d();let C={foreignId:e,events:[{event:m,properties:f}]};await p(`${ue}users`,{...n,method:"POST",body:JSON.stringify(C)}),s()},[e,n,s]);return{userId:e,setUserId:o,addPropertiesToUser:l,trackEventForUser:x}}import{v4 as oa}from"uuid";import Be,{useEffect as Ql,useState as Zl}from"react";import $e,{useEffect as _s}from"react";import Jt from"styled-components";import Ns from"react";import Ds from"styled-components";var er="fr-",At="cfr-";function a(e,t){let o=`${er}${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+" "+At+e}return o}function F(e){if(!e.className||e.className.indexOf(At)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(er)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Fo(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function ot(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Fo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function xe(...e){return e.filter(Boolean).join(" ")}function tr(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ms=Ds.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;