@frigade/react 1.35.16 → 1.35.17

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 wt,{createContext as Gp,useEffect as $o,useState as Oe}from"react";import{ThemeProvider as Kp}from"styled-components";import bt,{useContext as Sp,useEffect as Lo,useState as Sr}from"react";import{useCallback as ht,useContext as Vl,useEffect as Gl}from"react";import Yo,{useMemo as _r}from"react";var Wr="1.35.16 ";var Ne="NOT_STARTED_STEP",q="COMPLETED_FLOW",xo="ABORTED_FLOW",xt="STARTED_FLOW",Me="NOT_STARTED_FLOW",Ue="COMPLETED_STEP",ho="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=Yo.useContext(K);return{config:_r(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Wr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:_r(()=>`${o}/v1/public/`,[o])}}var Nl="frigade-last-call-at-",Ol="frigade-last-call-data-";function Nt(){let{shouldGracefullyDegrade:e,readonly:t}=Yo.useContext(K);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return It();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),It();let r=Nl+o,n=Ol+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),c=window.localStorage.getItem(n);if(p&&c&&c==i.body){let l=new Date(p);if(new Date().getTime()-l.getTime()<1e3)return It()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return It(p)}return s?s.ok?s:It(s.statusText):It()}}function It(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ot(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Yo.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 _l,useState as Hr}from"react";import{useContext as Dl,useEffect as $l,useState as Ml}from"react";import Ul from"swr";import{useContext as Ll}from"react";function we(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=Ll(K);function n(d,x=!1){return e[d]??x}function s(d,x){t(b=>({...b,[d]:x}))}function p(d){t(x=>{let{[d]:b,...h}=x;return{...h}})}function c(d){r.includes(d)||i(x=>[...x,d])}function l(d){return r.includes(d)}function g(d){return Object.entries(e).some(([x,b])=>b&&x!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:g,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:l}}import zl from"swr/immutable";var Wl="unknown";function Be(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=Dl(K),{resetOpenFlowState:c}=we(),[l,g]=Ml(!1),d={data:n.map(k=>({flowId:k.id,flowState:q,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},x=k=>fetch(k,e).then(P=>{if(P.ok)return P.json();throw new Error("Failed to fetch user flow states")}).catch(P=>(console.log(`Error fetching ${k}: ${P}. Will gracefully degrade and hide Frigade`),s(!0),d)),b=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:h,isLoading:T,mutate:f,error:B}=p?zl(b,x):Ul(b,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),w=h==null?void 0:h.data;$l(()=>{!l&&!T&&w&&g(!0)},[w,l,T]);async function S(k){if(w&&!p){let P=w.find(O=>O.flowId===k);P&&P.flowState!==q&&(P.flowState=q),await f(Promise.resolve({...h,data:w}),{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1})}}async function A(k,P,O){if(w){let I=w.find(N=>N.flowId===k);I&&(I.stepStates[P]=O,I.flowState=xt),await f(Promise.resolve({...h,data:w}),{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1})}}async function y(k,P,O){if(w){let I=w.find(N=>N.flowId===k);I&&(I.lastStepId=P,I.stepStates[P]=O,I.flowState=xt),await f({...h,data:w},{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1})}}async function m(k){if(w){let P=w.find(O=>O.flowId===k);P&&P.flowState!==Me&&(P.flowState=Me,P.lastStepId=Wl,Object.keys(P.stepStates).forEach(O=>{P.stepStates[O].actionType=Ne,P.stepStates[O].createdAt=new Date().toISOString()}),await f({...h,data:w},{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1}),c(k))}}async function E(k,P){if(w){let O=w.find(I=>I.flowId===k);O&&O.stepStates[P]!==Ne&&(O.stepStates[P]=Ne),await f({...h,data:w},{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:w,isLoadingUserFlowStateData:!l,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:A,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:y,error:B}}function Xt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:i}=Be(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=_l(K),[c,l]=Hr(new Set),[g,d]=Hr(new Set),x=Nt();function b(f){let B=JSON.stringify(f);if(c.has(B))return null;c.add(B),l(c),g.add(f),d(g);let w=s==null?void 0:s.find(S=>S.flowSlug===f.flowSlug&&S.stepId===f.stepId&&S.actionType===f.actionType&&S.createdAt===f.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:B}).then(S=>{S.status!==200&&S.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...r,f])):w||p(A=>[...A??[],f])})}async function h(f){f.foreignUserId&&(f.actionType===xt||f.actionType===Me?await b(f):f.actionType===q?await b(f):f.actionType===ho?await b(f):f.actionType===Ue?await b(f):f.actionType===xo?await b(f):f.actionType===Ne&&await b(f))}function T(){let f=[];return o==null||o.forEach(B=>{if(B&&B.stepStates&&Object.keys(B.stepStates).length!==0)for(let w in B.stepStates){let S=B.stepStates[w];f.push({foreignUserId:B.foreignUserId,flowSlug:B.flowId,stepId:S.stepId,actionType:S.actionType,data:{},createdAt:new Date(S.createdAt),blocked:S.blocked,hidden:S.hidden})}}),[...f,...s]}return{addResponse:h,setFlowResponses:p,getFlowResponses:T}}import Kl from"swr";var Hl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,jr=e=>{let t=Hl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=jl(i,"'","");n.startsWith("flow_")&&(o=n)}),o},jl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Xo(e){try{return JSON.parse(e)}catch(t){return console.error("Failed to parse Frigade config.yml to JSON",t),null}}var Jo=(l=>(l.CHECKLIST="CHECKLIST",l.FORM="FORM",l.TOUR="TOUR",l.SUPPORT="SUPPORT",l.CUSTOM="CUSTOM",l.BANNER="BANNER",l.EMBEDDED_TIP="EMBEDDED_TIP",l.NPS_SURVEY="NPS_SURVEY",l.ANNOUNCEMENT="ANNOUNCEMENT",l))(Jo||{});function Y(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,setFlowResponses:g,setShouldGracefullyDegrade:d,readonly:x}=Vl(K),b={data:[]},{verifySDKInitiated:h}=Ot(),{addResponse:T,getFlowResponses:f}=Xt(),B=u=>fetch(u,e).then(C=>C.ok?C.json():(console.log(`Error fetching ${u} (${C.status}): ${C.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),b)).catch(C=>(console.log(`Error fetching ${u}: ${C}. Will gracefully degrade and hide Frigade`),d(!0),b)),{mutateUserFlowState:w,userFlowStatesData:S,isLoadingUserFlowStateData:A,optimisticallyMarkFlowCompleted:y,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:E,optimisticallyMarkStepNotStarted:k,optimisticallyMarkStepStarted:P}=Be(),{data:O,error:I,isLoading:N}=Kl(n?`${t}flows${x?"?readonly=true":""}`:null,B,{keepPreviousData:!0});Gl(()=>{if(I){console.error(I);return}O&&O.data&&i(O.data)},[O,I]);function $(u){if(N)return null;let C=o.find(v=>v.slug===u);return!C&&o.length>0&&!A&&!N?(console.log(`Flow with id ${u} not found`),null):(C==null?void 0:C.active)===!1?null:C}function D(u){var W;if(!$(u))return[];let C=$(u).data;return C?(C=ee(C),(((W=Xo(C))==null?void 0:W.data)??[]).map(M=>{let $e=se(M);return{handleSecondaryButtonClick:()=>{M.skippable===!0&&j(u,M.id,{skipped:!0})},...M,complete:ge(u,M.id)===Ue||$e>=1,blocked:re(u,M.id),hidden:L(u,M.id),handlePrimaryButtonClick:()=>{(!M.completionCriteria&&(M.autoMarkCompleted||M.autoMarkCompleted===void 0)||M.completionCriteria&&M.autoMarkCompleted===!0)&&j(u,M.id)},progress:$e}}).filter(M=>M.hidden!==!0)):[]}function ee(u){return u.replaceAll(/\${(.*?)}/g,(C,v)=>s[v]===void 0?"":String(s[v]).replace(/[\u00A0-\u9999<>\&]/g,function(W){return"&#"+W.charCodeAt(0)+";"}).replaceAll(/[\\]/g,"\\\\").replaceAll(/[\"]/g,'\\"').replaceAll(/[\/]/g,"\\/").replaceAll(/[\b]/g,"\\b").replaceAll(/[\f]/g,"\\f").replaceAll(/[\n]/g,"\\n").replaceAll(/[\r]/g,"\\r").replaceAll(/[\t]/g,"\\t"))}function U(u){if(!$(u))return[];let C=$(u).data;return C?(C=ee(C),JSON.parse(C)??{}):[]}function te(u,C){p(v=>({...v,[u]:C}))}function fe(u){!A&&!N&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(C=>{te(C,u[C])})}let X=ht(async(u,C,v)=>{if(!h())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:ho,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await P(u,C,W),T(W))},[r,S]),H=ht(async(u,C,v)=>{if(!h())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:Ne,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await k(u,C),T(W))},[r,S]),j=ht(async(u,C,v)=>{if(!h())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:Ue,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await E(u,C,W),T(W))},[r,S]),Ce=ht(async(u,C)=>{if(!h()||pe(u)===Me)return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Me,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),J(v)&&T(v)},[r,S]),Ie=ht(async(u,C)=>{if(!h())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xt,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};J(v)&&T(v)},[r,S]),be=ht(async(u,C)=>{if(!h())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:q,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};J(v)&&(await y(u),T(v))},[r,S]),me=ht(async(u,C)=>{if(!h())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xo,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};J(v)&&(await y(u),T(v))},[r,S]);function J(u){var C;if(!S&&u.actionType===Ne)return!1;if(S){let v=S.find(W=>W.flowId===u.flowSlug);if(u.actionType===Ne&&(!(v!=null&&v.stepStates[u.stepId])||v.stepStates[u.stepId].actionType===Ne)||v&&((C=v.stepStates[u.stepId])==null?void 0:C.actionType)===u.actionType||v&&v.flowState===q&&u.actionType===q)return!1}return!0}function ge(u,C){let v=V(u,C);return A?null:v?v.actionType:Ne}function re(u,C){let v=V(u,C);return v?v.blocked:!1}function L(u,C){let v=V(u,C);return v?v.hidden:!1}function V(u,C){if(A)return null;let v=S==null?void 0:S.find(W=>W.flowId===u);return!v||!v.stepStates[C]?null:v.stepStates[C]??null}function G(u){var v;if(A||!S)return null;if(pe(u)===Me)return D(u)[0]??null;let C=(v=S.find(W=>W.flowId===u))==null?void 0:v.lastStepId;return C?D(u).find(W=>W.id===C):null}function ne(u){let C=G(u);if(!C)return 0;let v=D(u).findIndex(W=>W.id===C.id)??0;return ge(u,C.id)===Ue&&v<D(u).length-1?v+1:v}function se(u){if(!u.completionCriteria)return;let C=jr(u.completionCriteria);if(C===null)return;let v=Ye(C),W=De(C);return W===0?void 0:v/W}function pe(u){let C=S==null?void 0:S.find(v=>v.flowId===u);return C?C.flowState:null}function Ye(u){let C=D(u);return C.length===0?0:C.filter(W=>ge(u,W.id)===Ue).length}function De(u){return D(u).length}function Et(u){let C=o.find(v=>v.slug===u);return C?Xo(C.data):null}function ft(u){if(x)return!1;if(A)return!0;if(u!=null&&u.targetingLogic&&S){let C=S.find(v=>v.flowId===u.slug);if(C)return C.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function At(u){return!ft($(u))}function gt(){r&&w()}return{getFlow:$,getFlowData:Et,isLoading:A||N,getStepStatus:ge,getFlowSteps:D,getCurrentStepIndex:ne,markStepStarted:X,markStepCompleted:j,markFlowNotStarted:Ce,markFlowStarted:Ie,markFlowCompleted:be,markFlowAborted:me,markStepNotStarted:H,getFlowStatus:pe,getNumberOfStepsCompleted:Ye,getNumberOfSteps:De,targetingLogicShouldHideFlow:ft,setCustomVariable:te,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:se,getFlowMetadata:U,isStepBlocked:re,isStepHidden:L,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,isFlowAvailableToUser:At,refresh:gt}}import{useCallback as Qo,useContext as ql,useEffect as Yl}from"react";var Lt="guest_";function Jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=ql(K),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=Be(),c=Nt(),{verifySDKInitiated:l}=Ot();function g(h){return`frigade-user-registered-${h}`}Yl(()=>{if(e&&!t){if(e.startsWith(Lt))return;let h=g(e);localStorage.getItem(h)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(h,"true"))}},[e,r,t]);let d=Qo(async h=>{if(!l())return;let T={foreignId:e,properties:h};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(T)}),i(f=>({...f,...h})),p()},[e,n,r,p]),x=Qo(async(h,T)=>{if(!l())return;let B={foreignId:e,events:[{event:h,properties:T}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),p()},[e,n,p]),b=Qo(async(h,T)=>{if(l())if(T){let f=g(h);localStorage.setItem(f,"true"),o(h);let B={foreignId:h,properties:T};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),i(w=>({...w,...T})),p()}else o(h)},[n,r,p]);return{userId:e,setUserId:o,setUserIdWithProperties:b,addPropertiesToUser:d,trackEventForUser:x}}import{v4 as bp}from"uuid";import Ge,{useEffect as xp,useState as hp}from"react";import ze,{useEffect as or,useState as ra}from"react";import So from"styled-components";import Xl from"react";import Jl from"styled-components";var Vr="fr-",Qt="cfr-";function a(e,t){let o=`${Vr}${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 F(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(Vr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Zo(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=>`${Zo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function xe(...e){return e.filter(Boolean).join(" ")}function Zt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ql=Jl.div`
2
+ import wt,{createContext as Gp,useEffect as $o,useState as Oe}from"react";import{ThemeProvider as Kp}from"styled-components";import bt,{useContext as Sp,useEffect as Lo,useState as Sr}from"react";import{useCallback as ht,useContext as Vl,useEffect as Gl}from"react";import Yo,{useMemo as _r}from"react";var Wr="1.35.17 ";var Ne="NOT_STARTED_STEP",q="COMPLETED_FLOW",xo="ABORTED_FLOW",xt="STARTED_FLOW",Me="NOT_STARTED_FLOW",Ue="COMPLETED_STEP",ho="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=Yo.useContext(K);return{config:_r(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Wr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:_r(()=>`${o}/v1/public/`,[o])}}var Nl="frigade-last-call-at-",Ol="frigade-last-call-data-";function Nt(){let{shouldGracefullyDegrade:e,readonly:t}=Yo.useContext(K);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return It();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),It();let r=Nl+o,n=Ol+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),c=window.localStorage.getItem(n);if(p&&c&&c==i.body){let l=new Date(p);if(new Date().getTime()-l.getTime()<1e3)return It()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return It(p)}return s?s.ok?s:It(s.statusText):It()}}function It(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ot(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Yo.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 _l,useState as Hr}from"react";import{useContext as Dl,useEffect as $l,useState as Ml}from"react";import Ul from"swr";import{useContext as Ll}from"react";function we(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=Ll(K);function n(d,x=!1){return e[d]??x}function s(d,x){t(b=>({...b,[d]:x}))}function p(d){t(x=>{let{[d]:b,...h}=x;return{...h}})}function c(d){r.includes(d)||i(x=>[...x,d])}function l(d){return r.includes(d)}function g(d){return Object.entries(e).some(([x,b])=>b&&x!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:g,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:l}}import zl from"swr/immutable";var Wl="unknown";function Be(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=Dl(K),{resetOpenFlowState:c}=we(),[l,g]=Ml(!1),d={data:n.map(k=>({flowId:k.id,flowState:q,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},x=k=>fetch(k,e).then(P=>{if(P.ok)return P.json();throw new Error("Failed to fetch user flow states")}).catch(P=>(console.log(`Error fetching ${k}: ${P}. Will gracefully degrade and hide Frigade`),s(!0),d)),b=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:h,isLoading:T,mutate:f,error:B}=p?zl(b,x):Ul(b,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),w=h==null?void 0:h.data;$l(()=>{!l&&!T&&w&&g(!0)},[w,l,T]);async function S(k){if(w&&!p){let P=w.find(O=>O.flowId===k);P&&P.flowState!==q&&(P.flowState=q),await f(Promise.resolve({...h,data:w}),{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1})}}async function A(k,P,O){if(w){let I=w.find(N=>N.flowId===k);I&&(I.stepStates[P]=O,I.flowState=xt),await f(Promise.resolve({...h,data:w}),{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1})}}async function y(k,P,O){if(w){let I=w.find(N=>N.flowId===k);I&&(I.lastStepId=P,I.stepStates[P]=O,I.flowState=xt),await f({...h,data:w},{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1})}}async function m(k){if(w){let P=w.find(O=>O.flowId===k);P&&P.flowState!==Me&&(P.flowState=Me,P.lastStepId=Wl,Object.keys(P.stepStates).forEach(O=>{P.stepStates[O].actionType=Ne,P.stepStates[O].createdAt=new Date().toISOString()}),await f({...h,data:w},{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1}),c(k))}}async function E(k,P){if(w){let O=w.find(I=>I.flowId===k);O&&O.stepStates[P]!==Ne&&(O.stepStates[P]=Ne),await f({...h,data:w},{optimisticData:{...h,data:w},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:w,isLoadingUserFlowStateData:!l,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:A,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:y,error:B}}function Xt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:i}=Be(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=_l(K),[c,l]=Hr(new Set),[g,d]=Hr(new Set),x=Nt();function b(f){let B=JSON.stringify(f);if(c.has(B))return null;c.add(B),l(c),g.add(f),d(g);let w=s==null?void 0:s.find(S=>S.flowSlug===f.flowSlug&&S.stepId===f.stepId&&S.actionType===f.actionType&&S.createdAt===f.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:B}).then(S=>{S.status!==200&&S.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...r,f])):w||p(A=>[...A??[],f])})}async function h(f){f.foreignUserId&&(f.actionType===xt||f.actionType===Me?await b(f):f.actionType===q?await b(f):f.actionType===ho?await b(f):f.actionType===Ue?await b(f):f.actionType===xo?await b(f):f.actionType===Ne&&await b(f))}function T(){let f=[];return o==null||o.forEach(B=>{if(B&&B.stepStates&&Object.keys(B.stepStates).length!==0)for(let w in B.stepStates){let S=B.stepStates[w];f.push({foreignUserId:B.foreignUserId,flowSlug:B.flowId,stepId:S.stepId,actionType:S.actionType,data:{},createdAt:new Date(S.createdAt),blocked:S.blocked,hidden:S.hidden})}}),[...f,...s]}return{addResponse:h,setFlowResponses:p,getFlowResponses:T}}import Kl from"swr";var Hl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,jr=e=>{let t=Hl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=jl(i,"'","");n.startsWith("flow_")&&(o=n)}),o},jl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Xo(e){try{return JSON.parse(e)}catch(t){return console.error("Failed to parse Frigade config.yml to JSON",t),null}}var Jo=(l=>(l.CHECKLIST="CHECKLIST",l.FORM="FORM",l.TOUR="TOUR",l.SUPPORT="SUPPORT",l.CUSTOM="CUSTOM",l.BANNER="BANNER",l.EMBEDDED_TIP="EMBEDDED_TIP",l.NPS_SURVEY="NPS_SURVEY",l.ANNOUNCEMENT="ANNOUNCEMENT",l))(Jo||{});function Y(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,setFlowResponses:g,setShouldGracefullyDegrade:d,readonly:x}=Vl(K),b={data:[]},{verifySDKInitiated:h}=Ot(),{addResponse:T,getFlowResponses:f}=Xt(),B=u=>fetch(u,e).then(C=>C.ok?C.json():(console.log(`Error fetching ${u} (${C.status}): ${C.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),b)).catch(C=>(console.log(`Error fetching ${u}: ${C}. Will gracefully degrade and hide Frigade`),d(!0),b)),{mutateUserFlowState:w,userFlowStatesData:S,isLoadingUserFlowStateData:A,optimisticallyMarkFlowCompleted:y,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:E,optimisticallyMarkStepNotStarted:k,optimisticallyMarkStepStarted:P}=Be(),{data:O,error:I,isLoading:N}=Kl(n?`${t}flows${x?"?readonly=true":""}`:null,B,{keepPreviousData:!0});Gl(()=>{if(I){console.error(I);return}O&&O.data&&i(O.data)},[O,I]);function $(u){if(N)return null;let C=o.find(v=>v.slug===u);return!C&&o.length>0&&!A&&!N?(console.log(`Flow with id ${u} not found`),null):(C==null?void 0:C.active)===!1?null:C}function D(u){var W;if(!$(u))return[];let C=$(u).data;return C?(C=ee(C),(((W=Xo(C))==null?void 0:W.data)??[]).map(M=>{let $e=se(M);return{handleSecondaryButtonClick:()=>{M.skippable===!0&&j(u,M.id,{skipped:!0})},...M,complete:ge(u,M.id)===Ue||$e>=1,blocked:re(u,M.id),hidden:L(u,M.id),handlePrimaryButtonClick:()=>{(!M.completionCriteria&&(M.autoMarkCompleted||M.autoMarkCompleted===void 0)||M.completionCriteria&&M.autoMarkCompleted===!0)&&j(u,M.id)},progress:$e}}).filter(M=>M.hidden!==!0)):[]}function ee(u){return u.replaceAll(/\${(.*?)}/g,(C,v)=>s[v]===void 0?"":String(s[v]).replace(/[\u00A0-\u9999<>\&]/g,function(W){return"&#"+W.charCodeAt(0)+";"}).replaceAll(/[\\]/g,"\\\\").replaceAll(/[\"]/g,'\\"').replaceAll(/[\/]/g,"\\/").replaceAll(/[\b]/g,"\\b").replaceAll(/[\f]/g,"\\f").replaceAll(/[\n]/g,"\\n").replaceAll(/[\r]/g,"\\r").replaceAll(/[\t]/g,"\\t"))}function U(u){if(!$(u))return[];let C=$(u).data;return C?(C=ee(C),JSON.parse(C)??{}):[]}function te(u,C){p(v=>({...v,[u]:C}))}function fe(u){!A&&!N&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(C=>{te(C,u[C])})}let X=ht(async(u,C,v)=>{if(!h())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:ho,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await P(u,C,W),T(W))},[r,S]),H=ht(async(u,C,v)=>{if(!h())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:Ne,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await k(u,C),T(W))},[r,S]),j=ht(async(u,C,v)=>{if(!h())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:Ue,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await E(u,C,W),T(W))},[r,S]),Ce=ht(async(u,C)=>{if(!h()||pe(u)===Me)return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Me,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),J(v)&&T(v)},[r,S]),Ie=ht(async(u,C)=>{if(!h())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xt,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};J(v)&&T(v)},[r,S]),be=ht(async(u,C)=>{if(!h())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:q,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};J(v)&&(await y(u),T(v))},[r,S]),me=ht(async(u,C)=>{if(!h())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xo,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};J(v)&&(await y(u),T(v))},[r,S]);function J(u){var C;if(!S&&u.actionType===Ne)return!1;if(S){let v=S.find(W=>W.flowId===u.flowSlug);if(u.actionType===Ne&&(!(v!=null&&v.stepStates[u.stepId])||v.stepStates[u.stepId].actionType===Ne)||v&&((C=v.stepStates[u.stepId])==null?void 0:C.actionType)===u.actionType||v&&v.flowState===q&&u.actionType===q)return!1}return!0}function ge(u,C){let v=V(u,C);return A?null:v?v.actionType:Ne}function re(u,C){let v=V(u,C);return v?v.blocked:!1}function L(u,C){let v=V(u,C);return v?v.hidden:!1}function V(u,C){if(A)return null;let v=S==null?void 0:S.find(W=>W.flowId===u);return!v||!v.stepStates[C]?null:v.stepStates[C]??null}function G(u){var v;if(A||!S)return null;if(pe(u)===Me)return D(u)[0]??null;let C=(v=S.find(W=>W.flowId===u))==null?void 0:v.lastStepId;return C?D(u).find(W=>W.id===C):null}function ne(u){let C=G(u);if(!C)return 0;let v=D(u).findIndex(W=>W.id===C.id)??0;return ge(u,C.id)===Ue&&v<D(u).length-1?v+1:v}function se(u){if(!u.completionCriteria)return;let C=jr(u.completionCriteria);if(C===null)return;let v=Ye(C),W=De(C);return W===0?void 0:v/W}function pe(u){let C=S==null?void 0:S.find(v=>v.flowId===u);return C?C.flowState:null}function Ye(u){let C=D(u);return C.length===0?0:C.filter(W=>ge(u,W.id)===Ue).length}function De(u){return D(u).length}function Et(u){let C=o.find(v=>v.slug===u);return C?Xo(C.data):null}function ft(u){if(x)return!1;if(A)return!0;if(u!=null&&u.targetingLogic&&S){let C=S.find(v=>v.flowId===u.slug);if(C)return C.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function At(u){return!ft($(u))}function gt(){r&&w()}return{getFlow:$,getFlowData:Et,isLoading:A||N,getStepStatus:ge,getFlowSteps:D,getCurrentStepIndex:ne,markStepStarted:X,markStepCompleted:j,markFlowNotStarted:Ce,markFlowStarted:Ie,markFlowCompleted:be,markFlowAborted:me,markStepNotStarted:H,getFlowStatus:pe,getNumberOfStepsCompleted:Ye,getNumberOfSteps:De,targetingLogicShouldHideFlow:ft,setCustomVariable:te,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:se,getFlowMetadata:U,isStepBlocked:re,isStepHidden:L,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,isFlowAvailableToUser:At,refresh:gt}}import{useCallback as Qo,useContext as ql,useEffect as Yl}from"react";var Lt="guest_";function Jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=ql(K),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=Be(),c=Nt(),{verifySDKInitiated:l}=Ot();function g(h){return`frigade-user-registered-${h}`}Yl(()=>{if(e&&!t){if(e.startsWith(Lt))return;let h=g(e);localStorage.getItem(h)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(h,"true"))}},[e,r,t]);let d=Qo(async h=>{if(!l())return;let T={foreignId:e,properties:h};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(T)}),i(f=>({...f,...h})),p()},[e,n,r,p]),x=Qo(async(h,T)=>{if(!l())return;let B={foreignId:e,events:[{event:h,properties:T}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),p()},[e,n,p]),b=Qo(async(h,T)=>{if(l())if(T){let f=g(h);localStorage.setItem(f,"true"),o(h);let B={foreignId:h,properties:T};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),i(w=>({...w,...T})),p()}else o(h)},[n,r,p]);return{userId:e,setUserId:o,setUserIdWithProperties:b,addPropertiesToUser:d,trackEventForUser:x}}import{v4 as bp}from"uuid";import Ge,{useEffect as xp,useState as hp}from"react";import ze,{useEffect as or,useState as ra}from"react";import So from"styled-components";import Xl from"react";import Jl from"styled-components";var Vr="fr-",Qt="cfr-";function a(e,t){let o=`${Vr}${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 F(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(Vr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Zo(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=>`${Zo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function xe(...e){return e.filter(Boolean).join(" ")}function Zt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ql=Jl.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;