@frigade/react 1.34.2 → 1.34.3

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 bt,{createContext as kp,useEffect as Io,useState as Oe}from"react";import{ThemeProvider as Pp}from"styled-components";import yt,{useContext as ep,useEffect as Eo,useState as mr}from"react";import{useCallback as xt,useContext as vl,useEffect as Bl}from"react";import Ko,{useMemo as Nr}from"react";var Ir="1.34.2 ";var Ne="NOT_STARTED_STEP",Q="COMPLETED_FLOW",mo="ABORTED_FLOW",gt="STARTED_FLOW",$e="NOT_STARTED_FLOW",Me="COMPLETED_STEP",uo="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=Ko.useContext(K);return{config:Nr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Ir,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Nr(()=>`${o}/v1/public/`,[o])}}var gl="frigade-last-call-at-",xl="frigade-last-call-data-";function Bt(){let{shouldGracefullyDegrade:e,readonly:t}=Ko.useContext(K);return async(o,r)=>{if(t&&(r.method==="POST"||r.method==="PUT"||r.method==="DELETE"))return vt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),vt();let i=gl+o,n=xl+o;if(window&&window.localStorage&&r&&r.body&&r.method==="POST"){let p=window.localStorage.getItem(i),c=window.localStorage.getItem(n);if(p&&c&&c==r.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return vt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,r.body)}let s;try{s=await fetch(o,r)}catch(p){return vt(p)}return s?s.ok?s:vt(s.statusText):vt()}}function vt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Et(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Ko.useContext(K);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as Fl,useState as Or}from"react";import{useContext as Cl,useEffect as Sl,useState as yl}from"react";import bl from"swr";import{useContext as hl}from"react";function Pe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:r,completedFlowsToKeepOpenDuringSession:i}=hl(K);function n(d,h=!1){return e[d]??h}function s(d,h){t(y=>({...y,[d]:h}))}function p(d){t(h=>{let{[d]:y,...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,y])=>y&&h!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import wl from"swr/immutable";var Tl="unknown";function ve(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:r,organizationId:i,flows:n,setShouldGracefullyDegrade:s,readonly:p}=Cl(K),{resetOpenFlowState:c}=Pe(),[a,x]=yl(!1),d={data:n.map(k=>({flowId:k.id,flowState:Q,lastStepId:null,userId:r,foreignUserId:r,stepStates:{},shouldTrigger:!1}))},h=k=>fetch(k,e).then(T=>{if(T.ok)return T.json();throw new Error("Failed to fetch user flow states")}).catch(T=>(console.log(`Error fetching ${k}: ${T}. Will gracefully degrade and hide Frigade`),s(!0),d)),y=o&&n&&r?`${t}userFlowStates?foreignUserId=${encodeURIComponent(r)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,{data:w,isLoading:v,mutate:f,error:E}=p?wl(y,h):bl(y,h,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),b=w==null?void 0:w.data;Sl(()=>{!a&&!v&&b&&x(!0)},[b,a,v]);async function S(k){if(b&&!p){let T=b.find(N=>N.flowId===k);T&&T.flowState!==Q&&(T.flowState=Q),await f(Promise.resolve({...w,data:b}),{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function A(k,T,N){if(b){let I=b.find(U=>U.flowId===k);I&&(I.stepStates[T]=N,I.flowState=gt),await f(Promise.resolve({...w,data:b}),{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function C(k,T,N){if(b){let I=b.find(U=>U.flowId===k);I&&(I.lastStepId=T,I.stepStates[T]=N,I.flowState=gt),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function m(k){if(b){let T=b.find(N=>N.flowId===k);T&&T.flowState!==$e&&(T.flowState=$e,T.lastStepId=Tl,Object.keys(T.stepStates).forEach(N=>{T.stepStates[N].actionType=Ne,T.stepStates[N].createdAt=new Date().toISOString()}),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1}),c(k))}}async function B(k,T){if(b){let N=b.find(I=>I.flowId===k);N&&N.stepStates[T]!==Ne&&(N.stepStates[T]=Ne),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:b,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:A,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:C,error:E}}function Gt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:r}=ve(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Fl(K),[c,a]=Or(new Set),[x,d]=Or(new Set),h=Bt();function y(f){let E=JSON.stringify(f);if(c.has(E))return null;c.add(E),a(c),x.add(f),d(x);let b=s==null?void 0:s.find(S=>S.flowSlug===f.flowSlug&&S.stepId===f.stepId&&S.actionType===f.actionType&&S.createdAt===f.createdAt);return h(`${t}flowResponses`,{...e,method:"POST",body:E}).then(S=>{S.status!==200&&S.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...i,f])):b||p(A=>[...A??[],f])})}async function w(f){f.foreignUserId&&(f.actionType===gt||f.actionType===$e?await y(f):f.actionType===Q?await y(f):f.actionType===uo?await y(f):f.actionType===Me?await y(f):f.actionType===mo?await y(f):f.actionType===Ne&&await y(f))}function v(){let f=[];return o==null||o.forEach(E=>{if(E&&E.stepStates&&Object.keys(E.stepStates).length!==0)for(let b in E.stepStates){let S=E.stepStates[b];f.push({foreignUserId:E.foreignUserId,flowSlug:E.flowId,stepId:S.stepId,actionType:S.actionType,data:{},createdAt:new Date(S.createdAt),blocked:S.blocked,hidden:S.hidden})}}),[...f,...s]}return{addResponse:w,setFlowResponses:p,getFlowResponses:v}}import El from"swr";var kl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Lr=e=>{let t=kl.exec(e);if(t===null)return null;let o=null;return t.forEach((r,i)=>{let n=Pl(r,"'","");n.startsWith("flow_")&&(o=n)}),o},Pl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Z(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:r,userId:i,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:x,setShouldGracefullyDegrade:d,readonly:h}=vl(K),y={data:[]},{verifySDKInitiated:w}=Et(),{addResponse:v,getFlowResponses:f}=Gt(),E=g=>fetch(g,e).then(u=>u.ok?u.json():(console.log(`Error fetching ${g} (${u.status}): ${u.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),y)).catch(u=>(console.log(`Error fetching ${g}: ${u}. Will gracefully degrade and hide Frigade`),d(!0),y)),{mutateUserFlowState:b,userFlowStatesData:S,isLoadingUserFlowStateData:A,optimisticallyMarkFlowCompleted:C,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:B,optimisticallyMarkStepNotStarted:k,optimisticallyMarkStepStarted:T}=ve(),{data:N,error:I,isLoading:U}=El(n?`${t}flows${h?"?readonly=true":""}`:null,E,{keepPreviousData:!0});Bl(()=>{if(I){console.error(I);return}N&&N.data&&r(N.data)},[N,I]);function $(g){if(U)return null;let u=o.find(F=>F.slug===g);return!u&&o.length>0&&!A&&!U?(console.log(`Flow with slug ${g} not found`),null):(u==null?void 0:u.active)===!1?null:u}function L(g){var _;if(!$(g))return[];let u=$(g).data;return u?(u=ee(u),(((_=JSON.parse(u))==null?void 0:_.data)??[]).map(ce=>{let Go=oe(ce);return{handleSecondaryButtonClick:()=>{ce.skippable===!0&&V(g,ce.id,{skipped:!0})},...ce,complete:ge(g,ce.id)===Me||Go>=1,blocked:te(g,ce.id),hidden:O(g,ce.id),handlePrimaryButtonClick:()=>{(!ce.completionCriteria&&(ce.autoMarkCompleted||ce.autoMarkCompleted===void 0)||ce.completionCriteria&&ce.autoMarkCompleted===!0)&&V(g,ce.id)},progress:Go}}).filter(ce=>ce.hidden!==!0)):[]}function ee(g){return g.replaceAll(/\${(.*?)}/g,(u,F)=>s[F]===void 0?"":String(s[F]).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 z(g){if(!$(g))return[];let u=$(g).data;return u?(u=ee(u),JSON.parse(u)??{}):[]}function J(g,u){p(F=>({...F,[g]:u}))}function fe(g){!A&&!U&&g&&JSON.stringify(s)!=JSON.stringify({...s,...g})&&Object.keys(g).forEach(u=>{J(u,g[u])})}let q=xt(async(g,u,F)=>{if(!w())return;let _={foreignUserId:i,flowSlug:g,stepId:u,actionType:uo,data:F??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await T(g,u,_),v(_))},[i,S]),H=xt(async(g,u,F)=>{if(!w())return;let _={foreignUserId:i,flowSlug:g,stepId:u,actionType:Ne,data:F??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await k(g,u),v(_))},[i,S]),V=xt(async(g,u,F)=>{if(!w())return;let _={foreignUserId:i,flowSlug:g,stepId:u,actionType:Me,data:F??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await B(g,u,_),v(_))},[i,S]),he=xt(async(g,u)=>{if(!w()||Ce(g)===$e)return;let F={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:$e,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};await m(g),Y(F)&&v(F)},[i,S]),Ie=xt(async(g,u)=>{if(!w())return;let F={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:gt,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};Y(F)&&v(F)},[i,S]),ye=xt(async(g,u)=>{if(!w())return;let F={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Q,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};Y(F)&&(await C(g),v(F))},[i,S]),de=xt(async(g,u)=>{if(!w())return;let F={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:mo,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};Y(F)&&(await C(g),v(F))},[i,S]);function Y(g){var u;if(!S&&g.actionType===Ne)return!1;if(S){let F=S.find(_=>_.flowId===g.flowSlug);if(g.actionType===Ne&&(!(F!=null&&F.stepStates[g.stepId])||F.stepStates[g.stepId].actionType===Ne)||F&&((u=F.stepStates[g.stepId])==null?void 0:u.actionType)===g.actionType||F&&F.flowState===Q&&g.actionType===Q)return!1}return!0}function ge(g,u){let F=G(g,u);return A?null:F?F.actionType:Ne}function te(g,u){let F=G(g,u);return F?F.blocked:!1}function O(g,u){let F=G(g,u);return F?F.hidden:!1}function G(g,u){if(A)return null;let F=S==null?void 0:S.find(_=>_.flowId===g);return!F||!F.stepStates[u]?null:F.stepStates[u]??null}function D(g){var F;if(A||!S)return null;if(Ce(g)===$e)return L(g)[0]??null;let u=(F=S.find(_=>_.flowId===g))==null?void 0:F.lastStepId;return u?L(g).find(_=>_.id===u):null}function ne(g){let u=D(g);if(!u)return 0;let F=L(g).findIndex(_=>_.id===u.id)??0;return ge(g,u.id)===Me&&F<L(g).length-1?F+1:F}function oe(g){if(!g.completionCriteria)return;let u=Lr(g.completionCriteria);if(u===null)return;let F=De(u),_=Ge(u);return _===0?void 0:F/_}function Ce(g){let u=S==null?void 0:S.find(F=>F.flowId===g);return u?u.flowState:null}function De(g){let u=L(g);return u.length===0?0:u.filter(_=>ge(g,_.id)===Me).length}function Ge(g){return L(g).length}function j(g){let u=o.find(F=>F.slug===g);return u?JSON.parse(u.data):null}function ke(g){if(h)return!1;if(A)return!0;if(g!=null&&g.targetingLogic&&S){let u=S.find(F=>F.flowId===g.slug);if(u)return u.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&i&&i.startsWith("guest_"))}function ft(g){return!ke($(g))}function jo(){i&&b()}return{getFlow:$,getFlowData:j,isLoading:A||U,getStepStatus:ge,getFlowSteps:L,getCurrentStepIndex:ne,markStepStarted:q,markStepCompleted:V,markFlowNotStarted:he,markFlowStarted:Ie,markFlowCompleted:ye,markFlowAborted:de,markStepNotStarted:H,getFlowStatus:Ce,getNumberOfStepsCompleted:De,getNumberOfSteps:Ge,targetingLogicShouldHideFlow:ke,setCustomVariable:J,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:oe,getFlowMetadata:z,isStepBlocked:te,isStepHidden:O,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:ft,refresh:jo}}import{useCallback as Dr,useContext as Al,useEffect as Il}from"react";var At="guest_";function Kt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:r,shouldGracefullyDegrade:i}=Al(K),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=ve(),c=Bt(),{verifySDKInitiated:a}=Et();Il(()=>{if(e&&!t){if(e.startsWith(At))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=Dr(async h=>{if(!a())return;let y={foreignId:e,properties:h};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(y)}),r(w=>({...w,...h})),p()},[e,n,i,p]),d=Dr(async(h,y)=>{if(!a())return;let v={foreignId:e,events:[{event:h,properties:y}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:x,trackEventForUser:d}}import{v4 as tp}from"uuid";import He,{useEffect as Ja,useState as Qa}from"react";import Ue,{useEffect as Ul}from"react";import xo from"styled-components";import Nl from"react";import Ol from"styled-components";var $r="fr-",qt="cfr-";function l(e,t){let o=`${$r}${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 P(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($r)?"":`:not(${o.map(r=>`.${r}`).join(", ")})`}function qo(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=>`${qo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function be(...e){return e.filter(Boolean).join(" ")}function Yt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ll=Ol.div`
2
+ import bt,{createContext as kp,useEffect as Io,useState as Oe}from"react";import{ThemeProvider as Pp}from"styled-components";import yt,{useContext as ep,useEffect as Eo,useState as mr}from"react";import{useCallback as xt,useContext as vl,useEffect as Bl}from"react";import Ko,{useMemo as Nr}from"react";var Ir="1.34.3 ";var Ne="NOT_STARTED_STEP",Q="COMPLETED_FLOW",mo="ABORTED_FLOW",gt="STARTED_FLOW",$e="NOT_STARTED_FLOW",Me="COMPLETED_STEP",uo="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=Ko.useContext(K);return{config:Nr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Ir,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Nr(()=>`${o}/v1/public/`,[o])}}var gl="frigade-last-call-at-",xl="frigade-last-call-data-";function Bt(){let{shouldGracefullyDegrade:e,readonly:t}=Ko.useContext(K);return async(o,r)=>{if(t&&(r.method==="POST"||r.method==="PUT"||r.method==="DELETE"))return vt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),vt();let i=gl+o,n=xl+o;if(window&&window.localStorage&&r&&r.body&&r.method==="POST"){let p=window.localStorage.getItem(i),c=window.localStorage.getItem(n);if(p&&c&&c==r.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return vt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,r.body)}let s;try{s=await fetch(o,r)}catch(p){return vt(p)}return s?s.ok?s:vt(s.statusText):vt()}}function vt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Et(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Ko.useContext(K);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as Fl,useState as Or}from"react";import{useContext as Cl,useEffect as Sl,useState as yl}from"react";import bl from"swr";import{useContext as hl}from"react";function Pe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:r,completedFlowsToKeepOpenDuringSession:i}=hl(K);function n(d,h=!1){return e[d]??h}function s(d,h){t(y=>({...y,[d]:h}))}function p(d){t(h=>{let{[d]:y,...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,y])=>y&&h!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import wl from"swr/immutable";var Tl="unknown";function ve(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:r,organizationId:i,flows:n,setShouldGracefullyDegrade:s,readonly:p}=Cl(K),{resetOpenFlowState:c}=Pe(),[a,x]=yl(!1),d={data:n.map(k=>({flowId:k.id,flowState:Q,lastStepId:null,userId:r,foreignUserId:r,stepStates:{},shouldTrigger:!1}))},h=k=>fetch(k,e).then(T=>{if(T.ok)return T.json();throw new Error("Failed to fetch user flow states")}).catch(T=>(console.log(`Error fetching ${k}: ${T}. Will gracefully degrade and hide Frigade`),s(!0),d)),y=o&&n&&r?`${t}userFlowStates?foreignUserId=${encodeURIComponent(r)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,{data:w,isLoading:v,mutate:f,error:E}=p?wl(y,h):bl(y,h,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),b=w==null?void 0:w.data;Sl(()=>{!a&&!v&&b&&x(!0)},[b,a,v]);async function S(k){if(b&&!p){let T=b.find(N=>N.flowId===k);T&&T.flowState!==Q&&(T.flowState=Q),await f(Promise.resolve({...w,data:b}),{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function A(k,T,N){if(b){let I=b.find(U=>U.flowId===k);I&&(I.stepStates[T]=N,I.flowState=gt),await f(Promise.resolve({...w,data:b}),{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function C(k,T,N){if(b){let I=b.find(U=>U.flowId===k);I&&(I.lastStepId=T,I.stepStates[T]=N,I.flowState=gt),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}async function m(k){if(b){let T=b.find(N=>N.flowId===k);T&&T.flowState!==$e&&(T.flowState=$e,T.lastStepId=Tl,Object.keys(T.stepStates).forEach(N=>{T.stepStates[N].actionType=Ne,T.stepStates[N].createdAt=new Date().toISOString()}),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1}),c(k))}}async function B(k,T){if(b){let N=b.find(I=>I.flowId===k);N&&N.stepStates[T]!==Ne&&(N.stepStates[T]=Ne),await f({...w,data:b},{optimisticData:{...w,data:b},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:b,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:A,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:C,error:E}}function Gt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:r}=ve(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Fl(K),[c,a]=Or(new Set),[x,d]=Or(new Set),h=Bt();function y(f){let E=JSON.stringify(f);if(c.has(E))return null;c.add(E),a(c),x.add(f),d(x);let b=s==null?void 0:s.find(S=>S.flowSlug===f.flowSlug&&S.stepId===f.stepId&&S.actionType===f.actionType&&S.createdAt===f.createdAt);return h(`${t}flowResponses`,{...e,method:"POST",body:E}).then(S=>{S.status!==200&&S.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...i,f])):b||p(A=>[...A??[],f])})}async function w(f){f.foreignUserId&&(f.actionType===gt||f.actionType===$e?await y(f):f.actionType===Q?await y(f):f.actionType===uo?await y(f):f.actionType===Me?await y(f):f.actionType===mo?await y(f):f.actionType===Ne&&await y(f))}function v(){let f=[];return o==null||o.forEach(E=>{if(E&&E.stepStates&&Object.keys(E.stepStates).length!==0)for(let b in E.stepStates){let S=E.stepStates[b];f.push({foreignUserId:E.foreignUserId,flowSlug:E.flowId,stepId:S.stepId,actionType:S.actionType,data:{},createdAt:new Date(S.createdAt),blocked:S.blocked,hidden:S.hidden})}}),[...f,...s]}return{addResponse:w,setFlowResponses:p,getFlowResponses:v}}import El from"swr";var kl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Lr=e=>{let t=kl.exec(e);if(t===null)return null;let o=null;return t.forEach((r,i)=>{let n=Pl(r,"'","");n.startsWith("flow_")&&(o=n)}),o},Pl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Z(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:r,userId:i,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:x,setShouldGracefullyDegrade:d,readonly:h}=vl(K),y={data:[]},{verifySDKInitiated:w}=Et(),{addResponse:v,getFlowResponses:f}=Gt(),E=g=>fetch(g,e).then(u=>u.ok?u.json():(console.log(`Error fetching ${g} (${u.status}): ${u.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),y)).catch(u=>(console.log(`Error fetching ${g}: ${u}. Will gracefully degrade and hide Frigade`),d(!0),y)),{mutateUserFlowState:b,userFlowStatesData:S,isLoadingUserFlowStateData:A,optimisticallyMarkFlowCompleted:C,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:B,optimisticallyMarkStepNotStarted:k,optimisticallyMarkStepStarted:T}=ve(),{data:N,error:I,isLoading:U}=El(n?`${t}flows${h?"?readonly=true":""}`:null,E,{keepPreviousData:!0});Bl(()=>{if(I){console.error(I);return}N&&N.data&&r(N.data)},[N,I]);function $(g){if(U)return null;let u=o.find(F=>F.slug===g);return!u&&o.length>0&&!A&&!U?(console.log(`Flow with slug ${g} not found`),null):(u==null?void 0:u.active)===!1?null:u}function L(g){var _;if(!$(g))return[];let u=$(g).data;return u?(u=ee(u),(((_=JSON.parse(u))==null?void 0:_.data)??[]).map(ce=>{let Go=oe(ce);return{handleSecondaryButtonClick:()=>{ce.skippable===!0&&V(g,ce.id,{skipped:!0})},...ce,complete:ge(g,ce.id)===Me||Go>=1,blocked:te(g,ce.id),hidden:O(g,ce.id),handlePrimaryButtonClick:()=>{(!ce.completionCriteria&&(ce.autoMarkCompleted||ce.autoMarkCompleted===void 0)||ce.completionCriteria&&ce.autoMarkCompleted===!0)&&V(g,ce.id)},progress:Go}}).filter(ce=>ce.hidden!==!0)):[]}function ee(g){return g.replaceAll(/\${(.*?)}/g,(u,F)=>s[F]===void 0?"":String(s[F]).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 z(g){if(!$(g))return[];let u=$(g).data;return u?(u=ee(u),JSON.parse(u)??{}):[]}function J(g,u){p(F=>({...F,[g]:u}))}function fe(g){!A&&!U&&g&&JSON.stringify(s)!=JSON.stringify({...s,...g})&&Object.keys(g).forEach(u=>{J(u,g[u])})}let q=xt(async(g,u,F)=>{if(!w())return;let _={foreignUserId:i,flowSlug:g,stepId:u,actionType:uo,data:F??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await T(g,u,_),v(_))},[i,S]),H=xt(async(g,u,F)=>{if(!w())return;let _={foreignUserId:i,flowSlug:g,stepId:u,actionType:Ne,data:F??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await k(g,u),v(_))},[i,S]),V=xt(async(g,u,F)=>{if(!w())return;let _={foreignUserId:i,flowSlug:g,stepId:u,actionType:Me,data:F??{},createdAt:new Date,blocked:!1,hidden:!1};Y(_)&&(await B(g,u,_),v(_))},[i,S]),he=xt(async(g,u)=>{if(!w()||Ce(g)===$e)return;let F={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:$e,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};await m(g),Y(F)&&v(F)},[i,S]),Ie=xt(async(g,u)=>{if(!w())return;let F={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:gt,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};Y(F)&&v(F)},[i,S]),ye=xt(async(g,u)=>{if(!w())return;let F={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Q,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};Y(F)&&(await C(g),v(F))},[i,S]),de=xt(async(g,u)=>{if(!w())return;let F={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:mo,data:u??{},createdAt:new Date,blocked:!1,hidden:!1};Y(F)&&(await C(g),v(F))},[i,S]);function Y(g){var u;if(!S&&g.actionType===Ne)return!1;if(S){let F=S.find(_=>_.flowId===g.flowSlug);if(g.actionType===Ne&&(!(F!=null&&F.stepStates[g.stepId])||F.stepStates[g.stepId].actionType===Ne)||F&&((u=F.stepStates[g.stepId])==null?void 0:u.actionType)===g.actionType||F&&F.flowState===Q&&g.actionType===Q)return!1}return!0}function ge(g,u){let F=G(g,u);return A?null:F?F.actionType:Ne}function te(g,u){let F=G(g,u);return F?F.blocked:!1}function O(g,u){let F=G(g,u);return F?F.hidden:!1}function G(g,u){if(A)return null;let F=S==null?void 0:S.find(_=>_.flowId===g);return!F||!F.stepStates[u]?null:F.stepStates[u]??null}function D(g){var F;if(A||!S)return null;if(Ce(g)===$e)return L(g)[0]??null;let u=(F=S.find(_=>_.flowId===g))==null?void 0:F.lastStepId;return u?L(g).find(_=>_.id===u):null}function ne(g){let u=D(g);if(!u)return 0;let F=L(g).findIndex(_=>_.id===u.id)??0;return ge(g,u.id)===Me&&F<L(g).length-1?F+1:F}function oe(g){if(!g.completionCriteria)return;let u=Lr(g.completionCriteria);if(u===null)return;let F=De(u),_=Ge(u);return _===0?void 0:F/_}function Ce(g){let u=S==null?void 0:S.find(F=>F.flowId===g);return u?u.flowState:null}function De(g){let u=L(g);return u.length===0?0:u.filter(_=>ge(g,_.id)===Me).length}function Ge(g){return L(g).length}function j(g){let u=o.find(F=>F.slug===g);return u?JSON.parse(u.data):null}function ke(g){if(h)return!1;if(A)return!0;if(g!=null&&g.targetingLogic&&S){let u=S.find(F=>F.flowId===g.slug);if(u)return u.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&i&&i.startsWith("guest_"))}function ft(g){return!ke($(g))}function jo(){i&&b()}return{getFlow:$,getFlowData:j,isLoading:A||U,getStepStatus:ge,getFlowSteps:L,getCurrentStepIndex:ne,markStepStarted:q,markStepCompleted:V,markFlowNotStarted:he,markFlowStarted:Ie,markFlowCompleted:ye,markFlowAborted:de,markStepNotStarted:H,getFlowStatus:Ce,getNumberOfStepsCompleted:De,getNumberOfSteps:Ge,targetingLogicShouldHideFlow:ke,setCustomVariable:J,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:oe,getFlowMetadata:z,isStepBlocked:te,isStepHidden:O,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:ft,refresh:jo}}import{useCallback as Dr,useContext as Al,useEffect as Il}from"react";var At="guest_";function Kt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:r,shouldGracefullyDegrade:i}=Al(K),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=ve(),c=Bt(),{verifySDKInitiated:a}=Et();Il(()=>{if(e&&!t){if(e.startsWith(At))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=Dr(async h=>{if(!a())return;let y={foreignId:e,properties:h};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(y)}),r(w=>({...w,...h})),p()},[e,n,i,p]),d=Dr(async(h,y)=>{if(!a())return;let v={foreignId:e,events:[{event:h,properties:y}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:x,trackEventForUser:d}}import{v4 as tp}from"uuid";import He,{useEffect as Ja,useState as Qa}from"react";import Ue,{useEffect as Ul}from"react";import xo from"styled-components";import Nl from"react";import Ol from"styled-components";var $r="fr-",qt="cfr-";function l(e,t){let o=`${$r}${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 P(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($r)?"":`:not(${o.map(r=>`.${r}`).join(", ")})`}function qo(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=>`${qo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function be(...e){return e.filter(Boolean).join(" ")}function Yt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ll=Ol.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;
@@ -252,7 +252,7 @@ import bt,{createContext as kp,useEffect as Io,useState as Oe}from"react";import
252
252
  align-items: flex-start;
253
253
  justify-content: left;
254
254
  margin-bottom: 10px;
255
- `;import Qo from"react";var qe={theme:{colorPrimary:"#000000",colorSecondary:"#EEEEEE",colorText:"#000000",colorBackground:"#ffffff",colorBackgroundSecondary:"#d2d2d2",colorTextOnPrimaryBackground:"#ffffff",colorTextSecondary:"#505050",colorTextDisabled:"#C7C7C7",colorBorder:"#E5E5E5",colorTextError:"#c00000",borderRadius:20}};function nt({title:e,required:t,appearance:o=qe}){return e?Qo.createElement(So,null,t?Qo.createElement(Rr,{className:l("formLabelRequired",o),appearance:o},"*"):null,Qo.createElement(Qr,{className:l("formLabel",o)},e)):null}import ei from"react";function It({title:e,appearance:t}){return e?ei.createElement(So,null,ei.createElement(Zr,{className:l("formSubLabel",t)},e)):null}import{z as Zo}from"zod";function ti(e,t){try{if(t){if(t.type=="number"){let o=Zo.number();if(t.props)for(let r of t.props)r.requirement=="min"?o=o.min(Number(r.value),r.message??"Value is too small"):r.requirement=="max"?o=o.max(Number(r.value),r.message??"Value is too large"):r.requirement=="positive"?o=o.positive(r.message??"Value must be positive"):r.requirement=="negative"&&(o=o.nonpositive(r.message??"Value must be negative"));o.parse(Number(e))}if(t.type=="string"){let o=Zo.string();if(t.props)for(let r of t.props)r.requirement=="min"?o=o.min(Number(r.value),r.message??"Value is too short"):r.requirement=="max"?o=o.max(Number(r.value),r.message??"Value is too long"):r.requirement=="regex"&&(o=o.regex(new RegExp(String(r.value)),r.message??"Value does not match requirements"));o.parse(e)}return}}catch(o){if(o instanceof Zo.ZodError)return o.issues&&o.issues.length>0?o.issues[0].message:null;console.error("Frigade Form validation failed for rule ",t,o)}return null}var Zl=Ro.div`
255
+ `;import Qo from"react";var qe={theme:{colorPrimary:"#0171F8",colorSecondary:"#EEEEEE",colorText:"#000000",colorBackground:"#ffffff",colorBackgroundSecondary:"#d2d2d2",colorTextOnPrimaryBackground:"#ffffff",colorTextSecondary:"#505050",colorTextDisabled:"#C7C7C7",colorBorder:"#E5E5E5",colorTextError:"#c00000",borderRadius:20}};function nt({title:e,required:t,appearance:o=qe}){return e?Qo.createElement(So,null,t?Qo.createElement(Rr,{className:l("formLabelRequired",o),appearance:o},"*"):null,Qo.createElement(Qr,{className:l("formLabel",o)},e)):null}import ei from"react";function It({title:e,appearance:t}){return e?ei.createElement(So,null,ei.createElement(Zr,{className:l("formSubLabel",t)},e)):null}import{z as Zo}from"zod";function ti(e,t){try{if(t){if(t.type=="number"){let o=Zo.number();if(t.props)for(let r of t.props)r.requirement=="min"?o=o.min(Number(r.value),r.message??"Value is too small"):r.requirement=="max"?o=o.max(Number(r.value),r.message??"Value is too large"):r.requirement=="positive"?o=o.positive(r.message??"Value must be positive"):r.requirement=="negative"&&(o=o.nonpositive(r.message??"Value must be negative"));o.parse(Number(e))}if(t.type=="string"){let o=Zo.string();if(t.props)for(let r of t.props)r.requirement=="min"?o=o.min(Number(r.value),r.message??"Value is too short"):r.requirement=="max"?o=o.max(Number(r.value),r.message??"Value is too long"):r.requirement=="regex"&&(o=o.regex(new RegExp(String(r.value)),r.message??"Value does not match requirements"));o.parse(e)}return}}catch(o){if(o instanceof Zo.ZodError)return o.issues&&o.issues.length>0?o.issues[0].message:null;console.error("Frigade Form validation failed for rule ",t,o)}return null}var Zl=Ro.div`
256
256
  display: flex;
257
257
  flex-direction: column;
258
258
  width: 100%;