@frigade/react 1.34.0 → 1.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- var Ul=Object.create;var No=Object.defineProperty;var zl=Object.getOwnPropertyDescriptor;var _l=Object.getOwnPropertyNames;var Wl=Object.getPrototypeOf,Hl=Object.prototype.hasOwnProperty;var Vl=(e,t)=>{for(var o in t)No(e,o,{get:t[o],enumerable:!0})},Hr=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of _l(t))!Hl.call(e,i)&&i!==o&&No(e,i,{get:()=>t[i],enumerable:!(r=zl(t,i))||r.enumerable});return e};var u=(e,t,o)=>(o=e!=null?Ul(Wl(e)):{},Hr(t||!e||!e.__esModule?No(o,"default",{value:e,enumerable:!0}):o,e)),jl=e=>Hr(No({},"__esModule",{value:!0}),e);var _p={};Vl(_p,{Box:()=>Zt,Button:()=>Ml,CheckBox:()=>rt,FormLabel:()=>ut,FormTextField:()=>jo,FrigadeBanner:()=>vl,FrigadeChecklist:()=>sr,FrigadeDefaultAppearance:()=>tt,FrigadeEmbeddedTip:()=>bl,FrigadeForm:()=>br,FrigadeGuide:()=>Rs,FrigadeHeroChecklist:()=>_s,FrigadeNPSSurvey:()=>Ll,FrigadeProgressBadge:()=>Qs,FrigadeProvider:()=>mn,FrigadeSupportWidget:()=>xl,FrigadeTour:()=>nl,ProgressRing:()=>Nt,Text:()=>ar,tokens:()=>Ro,useFlowOpens:()=>$e,useFlowResponses:()=>Vt,useFlows:()=>R,useOrganization:()=>Jo,useUser:()=>Gt,useUserFlowStates:()=>Me});module.exports=jl(_p);var X=u(require("react")),pn=require("styled-components");var he=u(require("react"));var Ge=require("react");var Et=u(require("react"));var Vr="1.34.0 ";var je="NOT_STARTED_STEP",se="COMPLETED_FLOW",Oo="ABORTED_FLOW",At="STARTED_FLOW",Ye="NOT_STARTED_FLOW",Xe="COMPLETED_STEP",Lo="STARTED_STEP";function et(){let{publicApiKey:e,userId:t,apiUrl:o}=Et.default.useContext(Y);return{config:(0,Et.useMemo)(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Vr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:(0,Et.useMemo)(()=>`${o}/v1/public/`,[o])}}var Gl="frigade-last-call-at-",Kl="frigade-last-call-data-";function _t(){let{shouldGracefullyDegrade:e,readonly:t}=Et.default.useContext(Y);return async(o,r)=>{if(t&&(r.method==="POST"||r.method==="PUT"||r.method==="DELETE"))return zt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),zt();let i=Gl+o,n=Kl+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 zt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,r.body)}let s;try{s=await fetch(o,r)}catch(p){return zt(p)}return s?s.ok?s:zt(s.statusText):zt()}}function zt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Wt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Et.default.useContext(Y);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}}var mo=require("react");var Ht=require("react");var Gr=u(require("swr"));var jr=require("react");function $e(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:r,completedFlowsToKeepOpenDuringSession:i}=(0,jr.useContext)(Y);function n(d,C=!1){return e[d]??C}function s(d,C){t(y=>({...y,[d]:C}))}function p(d){t(C=>{let{[d]:y,...T}=C;return{...T}})}function c(d){i.includes(d)||r(C=>[...C,d])}function a(d){return i.includes(d)}function h(d){return Object.entries(e).some(([C,y])=>y&&C!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:h,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}var Kr=u(require("swr/immutable")),ql="unknown";function Me(){let{config:e,apiUrl:t}=et(),{publicApiKey:o,userId:r,organizationId:i,flows:n,setShouldGracefullyDegrade:s,readonly:p}=(0,Ht.useContext)(Y),{resetOpenFlowState:c}=$e(),[a,h]=(0,Ht.useState)(!1),d={data:n.map(w=>({flowId:w.id,flowState:se,lastStepId:null,userId:r,foreignUserId:r,stepStates:{},shouldTrigger:!1}))},C=w=>fetch(w,e).then(k=>{if(k.ok)return k.json();throw new Error("Failed to fetch user flow states")}).catch(k=>(console.log(`Error fetching ${w}: ${k}. Will gracefully degrade and hide Frigade`),s(!0),d)),y=o&&n&&r?`${t}userFlowStates?foreignUserId=${encodeURIComponent(r)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,{data:T,isLoading:v,mutate:f,error:A}=p?(0,Kr.default)(y,C):(0,Gr.default)(y,C,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),x=T==null?void 0:T.data;(0,Ht.useEffect)(()=>{!a&&!v&&x&&h(!0)},[x,a,v]);async function F(w){if(x&&!p){let k=x.find(D=>D.flowId===w);k&&k.flowState!==se&&(k.flowState=se),await f(Promise.resolve({...T,data:x}),{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1})}}async function O(w,k,D){if(x){let N=x.find(M=>M.flowId===w);N&&(N.stepStates[k]=D,N.flowState=At),await f(Promise.resolve({...T,data:x}),{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1})}}async function S(w,k,D){if(x){let N=x.find(M=>M.flowId===w);N&&(N.lastStepId=k,N.stepStates[k]=D,N.flowState=At),await f({...T,data:x},{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1})}}async function m(w){if(x){let k=x.find(D=>D.flowId===w);k&&k.flowState!==Ye&&(k.flowState=Ye,k.lastStepId=ql,Object.keys(k.stepStates).forEach(D=>{k.stepStates[D].actionType=je,k.stepStates[D].createdAt=new Date().toISOString()}),await f({...T,data:x},{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1}),c(w))}}async function E(w,k){if(x){let D=x.find(N=>N.flowId===w);D&&D.stepStates[k]!==je&&(D.stepStates[k]=je),await f({...T,data:x},{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:x,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:F,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:O,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:S,error:A}}function Vt(){let{config:e,apiUrl:t}=et(),{userFlowStatesData:o,mutateUserFlowState:r}=Me(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=(0,mo.useContext)(Y),[c,a]=(0,mo.useState)(new Set),[h,d]=(0,mo.useState)(new Set),C=_t();function y(f){let A=JSON.stringify(f);if(c.has(A))return null;c.add(A),a(c),h.add(f),d(h);let x=s==null?void 0:s.find(F=>F.flowSlug===f.flowSlug&&F.stepId===f.stepId&&F.actionType===f.actionType&&F.createdAt===f.createdAt);return C(`${t}flowResponses`,{...e,method:"POST",body:A}).then(F=>{F.status!==200&&F.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...i,f])):x||p(O=>[...O??[],f])})}async function T(f){f.foreignUserId&&(f.actionType===At||f.actionType===Ye?await y(f):f.actionType===se?await y(f):f.actionType===Lo?await y(f):f.actionType===Xe?await y(f):f.actionType===Oo?await y(f):f.actionType===je&&await y(f))}function v(){let f=[];return o==null||o.forEach(A=>{if(A&&A.stepStates&&Object.keys(A.stepStates).length!==0)for(let x in A.stepStates){let F=A.stepStates[x];f.push({foreignUserId:A.foreignUserId,flowSlug:A.flowId,stepId:F.stepId,actionType:F.actionType,data:{},createdAt:new Date(F.createdAt),blocked:F.blocked,hidden:F.hidden})}}),[...f,...s]}return{addResponse:T,setFlowResponses:p,getFlowResponses:v}}var Yr=u(require("swr"));var Yl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,qr=e=>{let t=Yl.exec(e);if(t===null)return null;let o=null;return t.forEach((r,i)=>{let n=Xl(r,"'","");n.startsWith("flow_")&&(o=n)}),o},Xl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function R(){let{config:e,apiUrl:t}=et(),{flows:o,setFlows:r,userId:i,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:h,setShouldGracefullyDegrade:d,readonly:C}=(0,Ge.useContext)(Y),y={data:[]},{verifySDKInitiated:T}=Wt(),{addResponse:v,getFlowResponses:f}=Vt(),A=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`),d(!0),y)).catch(b=>(console.log(`Error fetching ${g}: ${b}. Will gracefully degrade and hide Frigade`),d(!0),y)),{userFlowStatesData:x,isLoadingUserFlowStateData:F,optimisticallyMarkFlowCompleted:O,optimisticallyMarkFlowNotStarted:S,optimisticallyMarkStepCompleted:m,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:w}=Me(),{data:k,error:D,isLoading:N}=(0,Yr.default)(n?`${t}flows${C?"?readonly=true":""}`:null,A,{keepPreviousData:!0});(0,Ge.useEffect)(()=>{if(D){console.error(D);return}k&&k.data&&r(k.data)},[k,D]);function M(g){if(N)return null;let b=o.find(B=>B.slug===g);return!b&&o.length>0&&!F&&!N?(console.log(`Flow with slug ${g} not found`),null):(b==null?void 0:b.active)===!1?null:b}function $(g){var I;if(!M(g))return[];let b=M(g).data;return b?(b=V(b),(((I=JSON.parse(b))==null?void 0:I.data)??[]).map(ne=>{let Bt=xe(ne);return{handleSecondaryButtonClick:()=>{ne.skippable===!0&&J(g,ne.id,{skipped:!0})},...ne,complete:ie(g,ne.id)===Xe||Bt>=1,blocked:_(g,ne.id),hidden:z(g,ne.id),handlePrimaryButtonClick:()=>{(!ne.completionCriteria&&(ne.autoMarkCompleted||ne.autoMarkCompleted===void 0)||ne.completionCriteria&&ne.autoMarkCompleted===!0)&&J(g,ne.id)},progress:Bt}}).filter(ne=>ne.hidden!==!0)):[]}function V(g){return g.replaceAll(/\${(.*?)}/g,(b,B)=>s[B]===void 0?"":String(s[B]).replace(/[\u00A0-\u9999<>\&]/g,function(I){return"&#"+I.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 j(g){if(!M(g))return[];let b=M(g).data;return b?(b=V(b),JSON.parse(b)??{}):[]}function oe(g,b){p(B=>({...B,[g]:b}))}function me(g){!F&&!N&&g&&JSON.stringify(s)!=JSON.stringify({...s,...g})&&Object.keys(g).forEach(b=>{oe(b,g[b])})}let Z=(0,Ge.useCallback)(async(g,b,B)=>{if(!T())return;let I={foreignUserId:i,flowSlug:g,stepId:b,actionType:Lo,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};pe(I)&&(await w(g,b,I),v(I))},[i,x]),G=(0,Ge.useCallback)(async(g,b,B)=>{if(!T())return;let I={foreignUserId:i,flowSlug:g,stepId:b,actionType:je,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};pe(I)&&(await E(g,b),v(I))},[i,x]),J=(0,Ge.useCallback)(async(g,b,B)=>{if(!T())return;let I={foreignUserId:i,flowSlug:g,stepId:b,actionType:Xe,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};pe(I)&&(await m(g,b,I),v(I))},[i,x]),re=(0,Ge.useCallback)(async(g,b)=>{if(!T()||le(g)===Ye)return;let B={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Ye,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};await S(g),pe(B)&&v(B)},[i,x]),Ae=(0,Ge.useCallback)(async(g,b)=>{if(!T())return;let B={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:At,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};pe(B)&&v(B)},[i,x]),_e=(0,Ge.useCallback)(async(g,b)=>{if(!T())return;let B={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:se,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};pe(B)&&(await O(g),v(B))},[i,x]),Ie=(0,Ge.useCallback)(async(g,b)=>{if(!T())return;let B={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Oo,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};pe(B)&&(await O(g),v(B))},[i,x]);function pe(g){var b;if(!x&&g.actionType===je)return!1;if(x){let B=x.find(I=>I.flowId===g.flowSlug);if(g.actionType===je&&(!(B!=null&&B.stepStates[g.stepId])||B.stepStates[g.stepId].actionType===je)||B&&((b=B.stepStates[g.stepId])==null?void 0:b.actionType)===g.actionType||B&&B.flowState===se&&g.actionType===se)return!1}return!0}function ie(g,b){let B=ye(g,b);return F?null:B?B.actionType:je}function _(g,b){let B=ye(g,b);return B?B.blocked:!1}function z(g,b){let B=ye(g,b);return B?B.hidden:!1}function ye(g,b){if(F)return null;let B=x==null?void 0:x.find(I=>I.flowId===g);return!B||!B.stepStates[b]?null:B.stepStates[b]??null}function be(g){var B;if(F||!x)return null;if(le(g)===Ye)return $(g)[0]??null;let b=(B=x.find(I=>I.flowId===g))==null?void 0:B.lastStepId;return b?$(g).find(I=>I.id===b):null}function H(g){let b=be(g);if(!b)return 0;let B=$(g).findIndex(I=>I.id===b.id)??0;return ie(g,b.id)===Xe&&B<$(g).length-1?B+1:B}function xe(g){if(!g.completionCriteria)return;let b=qr(g.completionCriteria);if(b===null)return;let B=Ne(b),I=qe(b);return I===0?void 0:B/I}function le(g){let b=x==null?void 0:x.find(B=>B.flowId===g);return b?b.flowState:null}function Ne(g){let b=$(g);return b.length===0?0:b.filter(I=>ie(g,I.id)===Xe).length}function qe(g){return $(g).length}function K(g){let b=o.find(B=>B.slug===g);return b?JSON.parse(b.data):null}function Pe(g){if(C)return!1;if(F)return!0;if(g!=null&&g.targetingLogic&&x){let b=x.find(B=>B.flowId===g.slug);if(b)return b.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&i&&i.startsWith("guest_"))}function co(g){return!Pe(M(g))}return{getFlow:M,getFlowData:K,isLoading:F||N,getStepStatus:ie,getFlowSteps:$,getCurrentStepIndex:H,markStepStarted:Z,markStepCompleted:J,markFlowNotStarted:re,markFlowStarted:Ae,markFlowCompleted:_e,markFlowAborted:Ie,markStepNotStarted:G,getFlowStatus:le,getNumberOfStepsCompleted:Ne,getNumberOfSteps:qe,targetingLogicShouldHideFlow:Pe,setCustomVariable:oe,updateCustomVariables:me,customVariables:s,getStepOptionalProgress:xe,getFlowMetadata:j,isStepBlocked:_,isStepHidden:z,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:co}}var It=require("react");var jt="guest_";function Gt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:r,shouldGracefullyDegrade:i}=(0,It.useContext)(Y),{config:n,apiUrl:s}=et(),{mutateUserFlowState:p}=Me(),c=_t(),{verifySDKInitiated:a}=Wt();(0,It.useEffect)(()=>{if(e&&!t){if(e.startsWith(jt))return;let C=`frigade-user-registered-${e}`;localStorage.getItem(C)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(C,"true"))}},[e,i,t]);let h=(0,It.useCallback)(async C=>{if(!a())return;let y={foreignId:e,properties:C};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(y)}),r(T=>({...T,...C})),p()},[e,n,i,p]),d=(0,It.useCallback)(async(C,y)=>{if(!a())return;let v={foreignId:e,events:[{event:C,properties:y}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:h,trackEventForUser:d}}var Zi=require("uuid");var De=u(require("react"));var Ue=u(require("react")),go=u(require("styled-components"));var Jr=u(require("react")),Qr=u(require("styled-components"));var Xr="fr-",uo="cfr-";function l(e,t){let o=`${Xr}${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+" "+uo+e}return o}function P(e){if(!e.className||e.className.indexOf(uo)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Xr)?"":`:not(${o.map(r=>`.${r}`).join(", ")})`}function dr(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function ct(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${dr(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Oe(...e){return e.filter(Boolean).join(" ")}function fo(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Jl=Qr.default.div`
2
+ var Ul=Object.create;var No=Object.defineProperty;var zl=Object.getOwnPropertyDescriptor;var _l=Object.getOwnPropertyNames;var Wl=Object.getPrototypeOf,Hl=Object.prototype.hasOwnProperty;var Vl=(e,t)=>{for(var o in t)No(e,o,{get:t[o],enumerable:!0})},Hr=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of _l(t))!Hl.call(e,i)&&i!==o&&No(e,i,{get:()=>t[i],enumerable:!(r=zl(t,i))||r.enumerable});return e};var u=(e,t,o)=>(o=e!=null?Ul(Wl(e)):{},Hr(t||!e||!e.__esModule?No(o,"default",{value:e,enumerable:!0}):o,e)),jl=e=>Hr(No({},"__esModule",{value:!0}),e);var _p={};Vl(_p,{Box:()=>Zt,Button:()=>Ml,CheckBox:()=>rt,FormLabel:()=>ut,FormTextField:()=>jo,FrigadeBanner:()=>vl,FrigadeChecklist:()=>sr,FrigadeDefaultAppearance:()=>tt,FrigadeEmbeddedTip:()=>bl,FrigadeForm:()=>br,FrigadeGuide:()=>Rs,FrigadeHeroChecklist:()=>_s,FrigadeNPSSurvey:()=>Ll,FrigadeProgressBadge:()=>Qs,FrigadeProvider:()=>mn,FrigadeSupportWidget:()=>xl,FrigadeTour:()=>nl,ProgressRing:()=>Nt,Text:()=>ar,tokens:()=>Ro,useFlowOpens:()=>$e,useFlowResponses:()=>Vt,useFlows:()=>R,useOrganization:()=>Jo,useUser:()=>Gt,useUserFlowStates:()=>Me});module.exports=jl(_p);var X=u(require("react")),pn=require("styled-components");var he=u(require("react"));var Ge=require("react");var Et=u(require("react"));var Vr="1.34.1 ";var je="NOT_STARTED_STEP",se="COMPLETED_FLOW",Oo="ABORTED_FLOW",At="STARTED_FLOW",Ye="NOT_STARTED_FLOW",Xe="COMPLETED_STEP",Lo="STARTED_STEP";function et(){let{publicApiKey:e,userId:t,apiUrl:o}=Et.default.useContext(Y);return{config:(0,Et.useMemo)(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Vr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:(0,Et.useMemo)(()=>`${o}/v1/public/`,[o])}}var Gl="frigade-last-call-at-",Kl="frigade-last-call-data-";function _t(){let{shouldGracefullyDegrade:e,readonly:t}=Et.default.useContext(Y);return async(o,r)=>{if(t&&(r.method==="POST"||r.method==="PUT"||r.method==="DELETE"))return zt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),zt();let i=Gl+o,n=Kl+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 zt()}window.localStorage.setItem(i,new Date().toISOString()),window.localStorage.setItem(n,r.body)}let s;try{s=await fetch(o,r)}catch(p){return zt(p)}return s?s.ok?s:zt(s.statusText):zt()}}function zt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Wt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Et.default.useContext(Y);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}}var mo=require("react");var Ht=require("react");var Gr=u(require("swr"));var jr=require("react");function $e(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:r,completedFlowsToKeepOpenDuringSession:i}=(0,jr.useContext)(Y);function n(d,C=!1){return e[d]??C}function s(d,C){t(y=>({...y,[d]:C}))}function p(d){t(C=>{let{[d]:y,...T}=C;return{...T}})}function c(d){i.includes(d)||r(C=>[...C,d])}function a(d){return i.includes(d)}function h(d){return Object.entries(e).some(([C,y])=>y&&C!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:h,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}var Kr=u(require("swr/immutable")),ql="unknown";function Me(){let{config:e,apiUrl:t}=et(),{publicApiKey:o,userId:r,organizationId:i,flows:n,setShouldGracefullyDegrade:s,readonly:p}=(0,Ht.useContext)(Y),{resetOpenFlowState:c}=$e(),[a,h]=(0,Ht.useState)(!1),d={data:n.map(w=>({flowId:w.id,flowState:se,lastStepId:null,userId:r,foreignUserId:r,stepStates:{},shouldTrigger:!1}))},C=w=>fetch(w,e).then(k=>{if(k.ok)return k.json();throw new Error("Failed to fetch user flow states")}).catch(k=>(console.log(`Error fetching ${w}: ${k}. Will gracefully degrade and hide Frigade`),s(!0),d)),y=o&&n&&r?`${t}userFlowStates?foreignUserId=${encodeURIComponent(r)}${i?`&foreignUserGroupId=${encodeURIComponent(i)}`:""}`:null,{data:T,isLoading:v,mutate:f,error:A}=p?(0,Kr.default)(y,C):(0,Gr.default)(y,C,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),x=T==null?void 0:T.data;(0,Ht.useEffect)(()=>{!a&&!v&&x&&h(!0)},[x,a,v]);async function F(w){if(x&&!p){let k=x.find(D=>D.flowId===w);k&&k.flowState!==se&&(k.flowState=se),await f(Promise.resolve({...T,data:x}),{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1})}}async function O(w,k,D){if(x){let N=x.find(M=>M.flowId===w);N&&(N.stepStates[k]=D,N.flowState=At),await f(Promise.resolve({...T,data:x}),{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1})}}async function S(w,k,D){if(x){let N=x.find(M=>M.flowId===w);N&&(N.lastStepId=k,N.stepStates[k]=D,N.flowState=At),await f({...T,data:x},{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1})}}async function m(w){if(x){let k=x.find(D=>D.flowId===w);k&&k.flowState!==Ye&&(k.flowState=Ye,k.lastStepId=ql,Object.keys(k.stepStates).forEach(D=>{k.stepStates[D].actionType=je,k.stepStates[D].createdAt=new Date().toISOString()}),await f({...T,data:x},{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1}),c(w))}}async function E(w,k){if(x){let D=x.find(N=>N.flowId===w);D&&D.stepStates[k]!==je&&(D.stepStates[k]=je),await f({...T,data:x},{optimisticData:{...T,data:x},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:x,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:F,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:O,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:S,error:A}}function Vt(){let{config:e,apiUrl:t}=et(),{userFlowStatesData:o,mutateUserFlowState:r}=Me(),{failedFlowResponses:i,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=(0,mo.useContext)(Y),[c,a]=(0,mo.useState)(new Set),[h,d]=(0,mo.useState)(new Set),C=_t();function y(f){let A=JSON.stringify(f);if(c.has(A))return null;c.add(A),a(c),h.add(f),d(h);let x=s==null?void 0:s.find(F=>F.flowSlug===f.flowSlug&&F.stepId===f.stepId&&F.actionType===f.actionType&&F.createdAt===f.createdAt);return C(`${t}flowResponses`,{...e,method:"POST",body:A}).then(F=>{F.status!==200&&F.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...i,f])):x||p(O=>[...O??[],f])})}async function T(f){f.foreignUserId&&(f.actionType===At||f.actionType===Ye?await y(f):f.actionType===se?await y(f):f.actionType===Lo?await y(f):f.actionType===Xe?await y(f):f.actionType===Oo?await y(f):f.actionType===je&&await y(f))}function v(){let f=[];return o==null||o.forEach(A=>{if(A&&A.stepStates&&Object.keys(A.stepStates).length!==0)for(let x in A.stepStates){let F=A.stepStates[x];f.push({foreignUserId:A.foreignUserId,flowSlug:A.flowId,stepId:F.stepId,actionType:F.actionType,data:{},createdAt:new Date(F.createdAt),blocked:F.blocked,hidden:F.hidden})}}),[...f,...s]}return{addResponse:T,setFlowResponses:p,getFlowResponses:v}}var Yr=u(require("swr"));var Yl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,qr=e=>{let t=Yl.exec(e);if(t===null)return null;let o=null;return t.forEach((r,i)=>{let n=Xl(r,"'","");n.startsWith("flow_")&&(o=n)}),o},Xl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function R(){let{config:e,apiUrl:t}=et(),{flows:o,setFlows:r,userId:i,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:h,setShouldGracefullyDegrade:d,readonly:C}=(0,Ge.useContext)(Y),y={data:[]},{verifySDKInitiated:T}=Wt(),{addResponse:v,getFlowResponses:f}=Vt(),A=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`),d(!0),y)).catch(b=>(console.log(`Error fetching ${g}: ${b}. Will gracefully degrade and hide Frigade`),d(!0),y)),{userFlowStatesData:x,isLoadingUserFlowStateData:F,optimisticallyMarkFlowCompleted:O,optimisticallyMarkFlowNotStarted:S,optimisticallyMarkStepCompleted:m,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:w}=Me(),{data:k,error:D,isLoading:N}=(0,Yr.default)(n?`${t}flows${C?"?readonly=true":""}`:null,A,{keepPreviousData:!0});(0,Ge.useEffect)(()=>{if(D){console.error(D);return}k&&k.data&&r(k.data)},[k,D]);function M(g){if(N)return null;let b=o.find(B=>B.slug===g);return!b&&o.length>0&&!F&&!N?(console.log(`Flow with slug ${g} not found`),null):(b==null?void 0:b.active)===!1?null:b}function $(g){var I;if(!M(g))return[];let b=M(g).data;return b?(b=V(b),(((I=JSON.parse(b))==null?void 0:I.data)??[]).map(ne=>{let Bt=xe(ne);return{handleSecondaryButtonClick:()=>{ne.skippable===!0&&J(g,ne.id,{skipped:!0})},...ne,complete:ie(g,ne.id)===Xe||Bt>=1,blocked:_(g,ne.id),hidden:z(g,ne.id),handlePrimaryButtonClick:()=>{(!ne.completionCriteria&&(ne.autoMarkCompleted||ne.autoMarkCompleted===void 0)||ne.completionCriteria&&ne.autoMarkCompleted===!0)&&J(g,ne.id)},progress:Bt}}).filter(ne=>ne.hidden!==!0)):[]}function V(g){return g.replaceAll(/\${(.*?)}/g,(b,B)=>s[B]===void 0?"":String(s[B]).replace(/[\u00A0-\u9999<>\&]/g,function(I){return"&#"+I.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 j(g){if(!M(g))return[];let b=M(g).data;return b?(b=V(b),JSON.parse(b)??{}):[]}function oe(g,b){p(B=>({...B,[g]:b}))}function me(g){!F&&!N&&g&&JSON.stringify(s)!=JSON.stringify({...s,...g})&&Object.keys(g).forEach(b=>{oe(b,g[b])})}let Z=(0,Ge.useCallback)(async(g,b,B)=>{if(!T())return;let I={foreignUserId:i,flowSlug:g,stepId:b,actionType:Lo,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};pe(I)&&(await w(g,b,I),v(I))},[i,x]),G=(0,Ge.useCallback)(async(g,b,B)=>{if(!T())return;let I={foreignUserId:i,flowSlug:g,stepId:b,actionType:je,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};pe(I)&&(await E(g,b),v(I))},[i,x]),J=(0,Ge.useCallback)(async(g,b,B)=>{if(!T())return;let I={foreignUserId:i,flowSlug:g,stepId:b,actionType:Xe,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};pe(I)&&(await m(g,b,I),v(I))},[i,x]),re=(0,Ge.useCallback)(async(g,b)=>{if(!T()||le(g)===Ye)return;let B={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Ye,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};await S(g),pe(B)&&v(B)},[i,x]),Ae=(0,Ge.useCallback)(async(g,b)=>{if(!T())return;let B={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:At,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};pe(B)&&v(B)},[i,x]),_e=(0,Ge.useCallback)(async(g,b)=>{if(!T())return;let B={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:se,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};pe(B)&&(await O(g),v(B))},[i,x]),Ie=(0,Ge.useCallback)(async(g,b)=>{if(!T())return;let B={foreignUserId:i,flowSlug:g,stepId:"unknown",actionType:Oo,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};pe(B)&&(await O(g),v(B))},[i,x]);function pe(g){var b;if(!x&&g.actionType===je)return!1;if(x){let B=x.find(I=>I.flowId===g.flowSlug);if(g.actionType===je&&(!(B!=null&&B.stepStates[g.stepId])||B.stepStates[g.stepId].actionType===je)||B&&((b=B.stepStates[g.stepId])==null?void 0:b.actionType)===g.actionType||B&&B.flowState===se&&g.actionType===se)return!1}return!0}function ie(g,b){let B=ye(g,b);return F?null:B?B.actionType:je}function _(g,b){let B=ye(g,b);return B?B.blocked:!1}function z(g,b){let B=ye(g,b);return B?B.hidden:!1}function ye(g,b){if(F)return null;let B=x==null?void 0:x.find(I=>I.flowId===g);return!B||!B.stepStates[b]?null:B.stepStates[b]??null}function be(g){var B;if(F||!x)return null;if(le(g)===Ye)return $(g)[0]??null;let b=(B=x.find(I=>I.flowId===g))==null?void 0:B.lastStepId;return b?$(g).find(I=>I.id===b):null}function H(g){let b=be(g);if(!b)return 0;let B=$(g).findIndex(I=>I.id===b.id)??0;return ie(g,b.id)===Xe&&B<$(g).length-1?B+1:B}function xe(g){if(!g.completionCriteria)return;let b=qr(g.completionCriteria);if(b===null)return;let B=Ne(b),I=qe(b);return I===0?void 0:B/I}function le(g){let b=x==null?void 0:x.find(B=>B.flowId===g);return b?b.flowState:null}function Ne(g){let b=$(g);return b.length===0?0:b.filter(I=>ie(g,I.id)===Xe).length}function qe(g){return $(g).length}function K(g){let b=o.find(B=>B.slug===g);return b?JSON.parse(b.data):null}function Pe(g){if(C)return!1;if(F)return!0;if(g!=null&&g.targetingLogic&&x){let b=x.find(B=>B.flowId===g.slug);if(b)return b.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&i&&i.startsWith("guest_"))}function co(g){return!Pe(M(g))}return{getFlow:M,getFlowData:K,isLoading:F||N,getStepStatus:ie,getFlowSteps:$,getCurrentStepIndex:H,markStepStarted:Z,markStepCompleted:J,markFlowNotStarted:re,markFlowStarted:Ae,markFlowCompleted:_e,markFlowAborted:Ie,markStepNotStarted:G,getFlowStatus:le,getNumberOfStepsCompleted:Ne,getNumberOfSteps:qe,targetingLogicShouldHideFlow:Pe,setCustomVariable:oe,updateCustomVariables:me,customVariables:s,getStepOptionalProgress:xe,getFlowMetadata:j,isStepBlocked:_,isStepHidden:z,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:co}}var It=require("react");var jt="guest_";function Gt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:r,shouldGracefullyDegrade:i}=(0,It.useContext)(Y),{config:n,apiUrl:s}=et(),{mutateUserFlowState:p}=Me(),c=_t(),{verifySDKInitiated:a}=Wt();(0,It.useEffect)(()=>{if(e&&!t){if(e.startsWith(jt))return;let C=`frigade-user-registered-${e}`;localStorage.getItem(C)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(C,"true"))}},[e,i,t]);let h=(0,It.useCallback)(async C=>{if(!a())return;let y={foreignId:e,properties:C};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(y)}),r(T=>({...T,...C})),p()},[e,n,i,p]),d=(0,It.useCallback)(async(C,y)=>{if(!a())return;let v={foreignId:e,events:[{event:C,properties:y}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:h,trackEventForUser:d}}var Zi=require("uuid");var De=u(require("react"));var Ue=u(require("react")),go=u(require("styled-components"));var Jr=u(require("react")),Qr=u(require("styled-components"));var Xr="fr-",uo="cfr-";function l(e,t){let o=`${Xr}${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+" "+uo+e}return o}function P(e){if(!e.className||e.className.indexOf(uo)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Xr)?"":`:not(${o.map(r=>`.${r}`).join(", ")})`}function dr(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function ct(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${dr(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Oe(...e){return e.filter(Boolean).join(" ")}function fo(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Jl=Qr.default.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;
@@ -1104,7 +1104,7 @@ ${r=>r.inlineStyles.map(([i,n])=>`.${uo}${i}.${uo}${i} { ${Object.entries(n).map
1104
1104
  flex-direction: row;
1105
1105
  justify-content: flex-start;
1106
1106
  align-items: center;
1107
- `;var xs=({stepData:e,collapsed:t,onClick:o,onPrimaryButtonClick:r,onSecondaryButtonClick:i,appearance:n,customStepTypes:s})=>{var d,C;let p=t?{}:{transform:"rotate(90deg)"},c=t?{overflow:"hidden",maxHeight:"0px",transition:"max-height 0.1s ease-out"}:{overflow:"hidden",maxHeight:"1000px",transition:"max-height 0.1s ease-in"};function a(){return ke.default.createElement(ke.default.Fragment,null,e.imageUri||e.videoUri?ke.default.createElement(ps,{className:l("stepMediaContainer",n)},e.imageUri?ke.default.createElement(ds,{className:l("stepImage",n),src:e.imageUri,style:e.imageStyle}):null,e.videoUri?ke.default.createElement(bt,{appearance:n,videoUri:e.videoUri}):null):null,ke.default.createElement(fs,{className:l("stepSubtitle",n),appearance:n,dangerouslySetInnerHTML:we(e.subtitle)}),ke.default.createElement(Go,{className:l("checklistCTAContainer",n)},e.secondaryButtonTitle?ke.default.createElement(de,{secondary:!0,title:e.secondaryButtonTitle,onClick:()=>i(),appearance:n}):null,ke.default.createElement(de,{title:e.primaryButtonTitle??"Continue",onClick:()=>r(),appearance:n})))}function h(){if(!s)return null;let y=s[e.type];return y?y(e,n):null}return ke.default.createElement(as,{"data-testid":`step-${e.id}`,className:l("checklistStepContainer",n),appearance:n},ke.default.createElement(cs,{className:l("stepHeader",n)},ke.default.createElement(gs,null,ke.default.createElement(er,{value:e.complete,style:{width:"auto",borderTop:0},primaryColor:(d=n==null?void 0:n.theme)==null?void 0:d.colorPrimary,appearance:n}),ke.default.createElement(ms,{appearance:n,className:l("stepTitle",n),dangerouslySetInnerHTML:we(e.title),onClick:()=>o()})),ke.default.createElement(us,{className:l("stepChevronContainer",n),onClick:()=>o()},ke.default.createElement(no,{style:{...p,transition:"transform 0.1s ease-in-out"},color:(C=n==null?void 0:n.theme)==null?void 0:C.colorTextSecondary}))),ke.default.createElement("div",{key:e.id,style:{...c}},h()??a()))};var $t=u(require("styled-components")),jg=$t.default.div`
1107
+ `;var xs=({stepData:e,collapsed:t,onClick:o,onPrimaryButtonClick:r,onSecondaryButtonClick:i,appearance:n,customStepTypes:s})=>{var d,C;let p=t?{}:{transform:"rotate(90deg)"},c=t?{overflow:"hidden",maxHeight:"0px",transition:"max-height 0.2s ease-out"}:{overflow:"hidden",maxHeight:"1000px",transition:"max-height 0.15s ease-in"};function a(){return ke.default.createElement(ke.default.Fragment,null,e.imageUri||e.videoUri?ke.default.createElement(ps,{className:l("stepMediaContainer",n)},e.imageUri?ke.default.createElement(ds,{className:l("stepImage",n),src:e.imageUri,style:e.imageStyle}):null,e.videoUri?ke.default.createElement(bt,{appearance:n,videoUri:e.videoUri}):null):null,ke.default.createElement(fs,{className:l("stepSubtitle",n),appearance:n,dangerouslySetInnerHTML:we(e.subtitle)}),ke.default.createElement(Go,{className:l("checklistCTAContainer",n)},e.secondaryButtonTitle?ke.default.createElement(de,{secondary:!0,title:e.secondaryButtonTitle,onClick:()=>i(),appearance:n}):null,ke.default.createElement(de,{title:e.primaryButtonTitle??"Continue",onClick:()=>r(),appearance:n})))}function h(){if(!s)return null;let y=s[e.type];return y?y(e,n):null}return ke.default.createElement(as,{"data-testid":`step-${e.id}`,className:l("checklistStepContainer",n),appearance:n},ke.default.createElement(cs,{className:l("stepHeader",n)},ke.default.createElement(gs,null,ke.default.createElement(er,{value:e.complete,style:{width:"auto",borderTop:0},primaryColor:(d=n==null?void 0:n.theme)==null?void 0:d.colorPrimary,appearance:n}),ke.default.createElement(ms,{appearance:n,className:l("stepTitle",n),dangerouslySetInnerHTML:we(e.title),onClick:()=>o()})),ke.default.createElement(us,{className:l("stepChevronContainer",n),onClick:()=>o()},ke.default.createElement(no,{style:{...p,transition:"transform 0.1s ease-in-out"},color:(C=n==null?void 0:n.theme)==null?void 0:C.colorTextSecondary}))),ke.default.createElement("div",{key:e.id,style:{...c}},h()??a()))};var $t=u(require("styled-components")),jg=$t.default.div`
1108
1108
  background: #ffffff;
1109
1109
  box-shadow: 0px 6px 25px rgba(0, 0, 0, 0.06);
1110
1110
  border-radius: 6px;