@frigade/react 1.32.81 → 1.32.82

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/README.md CHANGED
@@ -10,6 +10,8 @@
10
10
  <div align="center">
11
11
  <a href="https://frigade.com">Website</a>
12
12
  <span> · </span>
13
+ <a href="https://demo.frigade.com">Demo</a>
14
+ <span> · </span>
13
15
  <a href="https://github.com/FrigadeHQ">GitHub</a>
14
16
  <span> · </span>
15
17
  <a href="https://docs.frigade.com">Docs</a></div>
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- var yl=Object.create;var ko=Object.defineProperty;var bl=Object.getOwnPropertyDescriptor;var wl=Object.getOwnPropertyNames;var Tl=Object.getPrototypeOf,Fl=Object.prototype.hasOwnProperty;var kl=(e,t)=>{for(var o in t)ko(e,o,{get:t[o],enumerable:!0})},Ar=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wl(t))!Fl.call(e,r)&&r!==o&&ko(e,r,{get:()=>t[r],enumerable:!(n=bl(t,r))||n.enumerable});return e};var g=(e,t,o)=>(o=e!=null?yl(Tl(e)):{},Ar(t||!e||!e.__esModule?ko(o,"default",{value:e,enumerable:!0}):o,e)),Pl=e=>Ar(ko({},"__esModule",{value:!0}),e);var xp={};kl(xp,{CheckBox:()=>Re,FormLabel:()=>mt,FormTextField:()=>Mo,FrigadeBanner:()=>ml,FrigadeChecklist:()=>Zo,FrigadeDefaultAppearance:()=>Qe,FrigadeEmbeddedTip:()=>sl,FrigadeForm:()=>dr,FrigadeGuide:()=>Ms,FrigadeHeroChecklist:()=>Ts,FrigadeNPSSurvey:()=>Sl,FrigadeProgressBadge:()=>Ds,FrigadeProvider:()=>ji,FrigadeSupportWidget:()=>tl,FrigadeTour:()=>js,ProgressRing:()=>Bt,useFlowOpens:()=>Ie,useFlowResponses:()=>Ut,useFlows:()=>Z,useOrganization:()=>Go,useUser:()=>zt});module.exports=Pl(xp);var Y=g(require("react")),Hi=require("styled-components");var he=g(require("react"));var He=require("react");var kt=g(require("react"));var Ir="1.32.81 ";var ze="NOT_STARTED_STEP",re="COMPLETED_FLOW",Po="ABORTED_FLOW",Pt="STARTED_FLOW",Ve="NOT_STARTED_FLOW",je="COMPLETED_STEP",vo="STARTED_STEP";function Xe(){let{publicApiKey:e,userId:t,apiUrl:o}=kt.default.useContext(Q);return{config:(0,kt.useMemo)(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Ir,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:(0,kt.useMemo)(()=>`${o}/v1/public/`,[o])}}var vl="frigade-last-call-at-",Bl="frigade-last-call-data-";function Dt(){let{shouldGracefullyDegrade:e}=kt.default.useContext(Q);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),io();let n=vl+t,r=Bl+t;if(window&&window.localStorage&&o&&o.body&&o.method==="POST"){let s=window.localStorage.getItem(n),p=window.localStorage.getItem(r);if(s&&p&&p==o.body){let d=new Date(s);if(new Date().getTime()-d.getTime()<1e3)return io()}window.localStorage.setItem(n,new Date().toISOString()),window.localStorage.setItem(r,o.body)}let i;try{i=await fetch(t,o)}catch(s){return io(s)}return i?i.ok?i:io(i.statusText):io()}}function io(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function $t(){let{publicApiKey:e,shouldGracefullyDegrade:t}=kt.default.useContext(Q);function o(){if(t){console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize");return}e||console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider")}return{verifySDKInitiated:o}}var no=require("react");var Mt=require("react");var Lr=g(require("swr"));var Nr=require("react");function Ie(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:n,completedFlowsToKeepOpenDuringSession:r}=(0,Nr.useContext)(Q);function i(c,f=!1){return e[c]??f}function s(c,f){t(S=>({...S,[c]:f}))}function p(c){t(f=>{let{[c]:S,...P}=f;return{...P}})}function d(c){r.includes(c)||n(f=>[...f,c])}function a(c){return r.includes(c)}function C(c){return Object.entries(e).some(([f,S])=>S&&f!=c)||o}return{getOpenFlowState:i,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:C,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var El="unknown";function We(){let{config:e,apiUrl:t}=Xe(),{publicApiKey:o,userId:n,organizationId:r,flows:i,setShouldGracefullyDegrade:s}=(0,Mt.useContext)(Q),{resetOpenFlowState:p}=Ie(),[d,a]=(0,Mt.useState)(!1),C={data:i.map(m=>({flowId:m.id,flowState:re,lastStepId:null,userId:n,foreignUserId:n,stepStates:{},shouldTrigger:!1}))},c=m=>fetch(m,e).then(x=>{if(x.ok)return x.json();throw new Error("Failed to fetch user flow states")}).catch(x=>(console.log(`Error fetching ${m}: ${x}. Will gracefully degrade and hide Frigade`),s(!0),C)),{data:f,isLoading:S,mutate:P,error:A}=(0,Lr.default)(o&&i&&n?`${t}userFlowStates?foreignUserId=${encodeURIComponent(n)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,c,{revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>C,onLoadingSlow:()=>C}),u=f==null?void 0:f.data;(0,Mt.useEffect)(()=>{!d&&!S&&u&&a(!0)},[u,d,S]);async function w(m){if(u){let x=u.find(T=>T.flowId===m);x&&x.flowState!==re&&(x.flowState=re),await P(Promise.resolve({...f,data:u}),{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function B(m,x,T){if(u){let O=u.find(z=>z.flowId===m);O&&(O.stepStates[x]=T,O.flowState=Pt),await P(Promise.resolve({...f,data:u}),{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function v(m,x,T){if(u){let O=u.find(z=>z.flowId===m);O&&(O.lastStepId=x,O.stepStates[x]=T,O.flowState=Pt),await P({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function F(m){if(u){let x=u.find(T=>T.flowId===m);x&&x.flowState!==Ve&&(x.flowState=Ve,x.lastStepId=El,Object.keys(x.stepStates).forEach(T=>{x.stepStates[T].actionType=ze,x.stepStates[T].createdAt=new Date().toISOString()}),await P({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1}),p(m))}}async function y(m,x){if(u){let T=u.find(O=>O.flowId===m);T&&T.stepStates[x]!==ze&&(T.stepStates[x]=ze),await P({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:u,isLoadingUserFlowStateData:!d,mutateUserFlowState:P,optimisticallyMarkFlowCompleted:w,optimisticallyMarkFlowNotStarted:F,optimisticallyMarkStepCompleted:B,optimisticallyMarkStepNotStarted:y,optimisticallyMarkStepStarted:v,error:A}}function Ut(){let{config:e,apiUrl:t}=Xe(),{userFlowStatesData:o,mutateUserFlowState:n}=We(),{failedFlowResponses:r,setFailedFlowResponses:i,flowResponses:s,setFlowResponses:p}=(0,no.useContext)(Q),[d,a]=(0,no.useState)(new Set),[C,c]=(0,no.useState)(new Set),f=Dt();function S(u){let w=JSON.stringify(u);if(d.has(w))return null;d.add(w),a(d),C.add(u),c(C);let B=s==null?void 0:s.find(v=>v.flowSlug===u.flowSlug&&v.stepId===u.stepId&&v.actionType===u.actionType&&v.createdAt===u.createdAt);return f(`${t}flowResponses`,{...e,method:"POST",body:w}).then(v=>{v.status!==200&&v.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),i([...r,u])):B||p(F=>[...F??[],u])})}async function P(u){u.foreignUserId&&(u.actionType===Pt||u.actionType===Ve?await S(u):u.actionType===re?await S(u):u.actionType===vo?await S(u):u.actionType===je?await S(u):u.actionType===Po?await S(u):u.actionType===ze&&await S(u))}function A(){let u=[];return o==null||o.forEach(w=>{if(w&&w.stepStates&&Object.keys(w.stepStates).length!==0)for(let B in w.stepStates){let v=w.stepStates[B];u.push({foreignUserId:w.foreignUserId,flowSlug:w.flowId,stepId:v.stepId,actionType:v.actionType,data:{},createdAt:new Date(v.createdAt),blocked:v.blocked,hidden:v.hidden})}}),[...u,...s]}return{addResponse:P,setFlowResponses:p,getFlowResponses:A}}var Dr=g(require("swr"));var Al=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Or=e=>{let t=Al.exec(e);if(t===null)return null;let o=null;return t.forEach((n,r)=>{let i=Il(n,"'","");i.startsWith("flow_")&&(o=i)}),o},Il=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Z(){let{config:e,apiUrl:t}=Xe(),{flows:o,setFlows:n,userId:r,publicApiKey:i,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,setFlowResponses:C,setShouldGracefullyDegrade:c}=(0,He.useContext)(Q),f={data:[]},{verifySDKInitiated:S}=$t(),{addResponse:P,getFlowResponses:A}=Ut(),u=h=>fetch(h,e).then(b=>b.ok?b.json():(console.log(`Error fetching ${h} (${b.status}): ${b.statusText}. .Will gracefully degrade and hide Frigade`),c(!0),f)).catch(b=>(console.log(`Error fetching ${h}: ${b}. Will gracefully degrade and hide Frigade`),c(!0),f)),{userFlowStatesData:w,isLoadingUserFlowStateData:B,optimisticallyMarkFlowCompleted:v,optimisticallyMarkFlowNotStarted:F,optimisticallyMarkStepCompleted:y,optimisticallyMarkStepNotStarted:m,optimisticallyMarkStepStarted:x}=We(),{data:T,error:O,isLoading:z}=(0,Dr.default)(i?`${t}flows`:null,u,{keepPreviousData:!0});(0,He.useEffect)(()=>{if(O){console.error(O);return}T&&T.data&&(T.data=n(T.data))},[T,O]);function V(h){if(z)return null;let b=o.find(E=>E.slug===h);return!b&&o.length>0&&!B&&!z?(console.log(`Flow with slug ${h} not found`),null):(b==null?void 0:b.active)===!1?null:b}function N(h){var H;if(!V(h))return[];let b=V(h).data;return b?(b=W(b),(((H=JSON.parse(b))==null?void 0:H.data)??[]).map(D=>{let _e=ne(D);return{handleSecondaryButtonClick:()=>{D.skippable===!0&&oe(h,D.id,{skipped:!0})},...D,complete:ie(h,D.id)===je||_e>=1,blocked:Fe(h,D.id),hidden:U(h,D.id),handlePrimaryButtonClick:()=>{(!D.completionCriteria&&(D.autoMarkCompleted||D.autoMarkCompleted===void 0)||D.completionCriteria&&D.autoMarkCompleted===!0)&&oe(h,D.id)},progress:_e}}).filter(D=>D.hidden!==!0)):[]}function W(h){return h.replaceAll(/\${(.*?)}/g,(b,E)=>s[E]===void 0?"":String(s[E]).replace(/[\u00A0-\u9999<>\&]/g,function(H){return"&#"+H.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 q(h){if(!V(h))return[];let b=V(h).data;return b?(b=W(b),JSON.parse(b)??{}):[]}function L(h,b){p(E=>({...E,[h]:b}))}function ce(h){!B&&!z&&h&&JSON.stringify(s)!=JSON.stringify({...s,...h})&&Object.keys(h).forEach(b=>{L(b,h[b])})}let Te=(0,He.useCallback)(async(h,b,E)=>{S();let H={foreignUserId:r,flowSlug:h,stepId:b,actionType:vo,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ge(H)&&(await x(h,b,H),P(H))},[r,w]),j=(0,He.useCallback)(async(h,b,E)=>{S();let H={foreignUserId:r,flowSlug:h,stepId:b,actionType:ze,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ge(H)&&(await m(h,b),P(H))},[r,w]),oe=(0,He.useCallback)(async(h,b,E)=>{S();let H={foreignUserId:r,flowSlug:h,stepId:b,actionType:je,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ge(H)&&(await y(h,b,H),P(H))},[r,w]),Ue=(0,He.useCallback)(async(h,b)=>{if(S(),Je(h)===Ve)return;let E={foreignUserId:r,flowSlug:h,stepId:"unknown",actionType:Ve,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};await F(h),ge(E)&&P(E)},[r,w]),le=(0,He.useCallback)(async(h,b)=>{S();let E={foreignUserId:r,flowSlug:h,stepId:"unknown",actionType:Pt,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};ge(E)&&P(E)},[r,w]),J=(0,He.useCallback)(async(h,b)=>{S();let E={foreignUserId:r,flowSlug:h,stepId:"unknown",actionType:re,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};ge(E)&&(await v(h),P(E))},[r,w]),Pe=(0,He.useCallback)(async(h,b)=>{S();let E={foreignUserId:r,flowSlug:h,stepId:"unknown",actionType:Po,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};ge(E)&&(await v(h),P(E))},[r,w]);function ge(h){var b;if(!w&&h.actionType===ze)return!1;if(w){let E=w.find(H=>H.flowId===h.flowSlug);if(h.actionType===ze&&(!(E!=null&&E.stepStates[h.stepId])||E.stepStates[h.stepId].actionType===ze)||E&&((b=E.stepStates[h.stepId])==null?void 0:b.actionType)===h.actionType||E&&E.flowState===re&&h.actionType===re)return!1}return!0}function ie(h,b){let E=$(h,b);return B?null:E?E.actionType:ze}function Fe(h,b){let E=$(h,b);return E?E.blocked:!1}function U(h,b){let E=$(h,b);return E?E.hidden:!1}function $(h,b){if(B)return null;let E=w==null?void 0:w.find(H=>H.flowId===h);return!E||!E.stepStates[b]?null:E.stepStates[b]??null}function me(h){var E;if(B||!w)return null;if(Je(h)===Ve)return N(h)[0]??null;let b=(E=w.find(H=>H.flowId===h))==null?void 0:E.lastStepId;return b?N(h).find(H=>H.id===b):null}function K(h){let b=me(h);if(!b)return 0;let E=N(h).findIndex(H=>H.id===b.id)??0;return ie(h,b.id)===je&&E<N(h).length-1?E+1:E}function ne(h){if(!h.completionCriteria)return;let b=Or(h.completionCriteria);if(b===null)return;let E=at(b),H=Ft(b);return H===0?void 0:E/H}function Je(h){let b=w==null?void 0:w.find(E=>E.flowId===h);return b?b.flowState:null}function at(h){let b=N(h);return b.length===0?0:b.filter(H=>ie(h,H.id)===je).length}function Ft(h){return N(h).length}function G(h){return JSON.parse(o.find(b=>b.slug===h).data)}function Oe(h){if(B)return!0;if(h!=null&&h.targetingLogic&&w){let b=w.find(E=>E.flowId===h.slug);if(b)return b.shouldTrigger===!1}return!!(h!=null&&h.targetingLogic&&r&&r.startsWith("guest_"))}function pt(h){return!Oe(V(h))}return{getFlow:V,getFlowData:G,isLoading:B||z,getStepStatus:ie,getFlowSteps:N,getCurrentStepIndex:K,markStepStarted:Te,markStepCompleted:oe,markFlowNotStarted:Ue,markFlowStarted:le,markFlowCompleted:J,markFlowAborted:Pe,markStepNotStarted:j,getFlowStatus:Je,getNumberOfStepsCompleted:at,getNumberOfSteps:Ft,targetingLogicShouldHideFlow:Oe,setCustomVariable:L,updateCustomVariables:ce,customVariables:s,getStepOptionalProgress:ne,getFlowMetadata:q,isStepBlocked:Fe,isStepHidden:U,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,isFlowAvailableToUser:pt}}var vt=require("react");var _t="guest_";function zt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:n,shouldGracefullyDegrade:r}=(0,vt.useContext)(Q),{config:i,apiUrl:s}=Xe(),{mutateUserFlowState:p}=We(),d=Dt(),{verifySDKInitiated:a}=$t();(0,vt.useEffect)(()=>{if(e&&!t){if(e.startsWith(_t))return;let f=`frigade-user-registered-${e}`;localStorage.getItem(f)||(d(`${s}users`,{...i,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(f,"true"))}},[e,r,t]);let C=(0,vt.useCallback)(async f=>{a();let S={foreignId:e,properties:f};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(S)}),n(P=>({...P,...f})),p()},[e,i,r,p]),c=(0,vt.useCallback)(async(f,S)=>{a();let A={foreignId:e,events:[{event:f,properties:S}]};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(A)}),p()},[e,i,p]);return{userId:e,setUserId:o,addPropertiesToUser:C,trackEventForUser:c}}var zi=require("uuid");var Ae=g(require("react"));var Ne=g(require("react")),ao=g(require("styled-components"));var Mr=g(require("react")),Ur=g(require("styled-components"));var $r="fr-",so="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+" "+so+e}return o}function k(e){if(!e.className||e.className.indexOf(so)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith($r)?"":`:not(${o.map(n=>`.${n}`).join(", ")})`}function er(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function dt(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${er(t)}: ${e.styleOverrides[t]};`).join(" "):""}function ve(...e){return e.filter(Boolean).join(" ")}function lo(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Nl=Ur.default.div`
2
+ var yl=Object.create;var ko=Object.defineProperty;var bl=Object.getOwnPropertyDescriptor;var wl=Object.getOwnPropertyNames;var Tl=Object.getPrototypeOf,Fl=Object.prototype.hasOwnProperty;var kl=(e,t)=>{for(var o in t)ko(e,o,{get:t[o],enumerable:!0})},Ar=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wl(t))!Fl.call(e,r)&&r!==o&&ko(e,r,{get:()=>t[r],enumerable:!(n=bl(t,r))||n.enumerable});return e};var g=(e,t,o)=>(o=e!=null?yl(Tl(e)):{},Ar(t||!e||!e.__esModule?ko(o,"default",{value:e,enumerable:!0}):o,e)),Pl=e=>Ar(ko({},"__esModule",{value:!0}),e);var xp={};kl(xp,{CheckBox:()=>Re,FormLabel:()=>mt,FormTextField:()=>Mo,FrigadeBanner:()=>ml,FrigadeChecklist:()=>Zo,FrigadeDefaultAppearance:()=>Qe,FrigadeEmbeddedTip:()=>sl,FrigadeForm:()=>dr,FrigadeGuide:()=>Ms,FrigadeHeroChecklist:()=>Ts,FrigadeNPSSurvey:()=>Sl,FrigadeProgressBadge:()=>Ds,FrigadeProvider:()=>ji,FrigadeSupportWidget:()=>tl,FrigadeTour:()=>js,ProgressRing:()=>Bt,useFlowOpens:()=>Ie,useFlowResponses:()=>Ut,useFlows:()=>Z,useOrganization:()=>Go,useUser:()=>zt});module.exports=Pl(xp);var Y=g(require("react")),Hi=require("styled-components");var he=g(require("react"));var He=require("react");var kt=g(require("react"));var Ir="1.32.82 ";var ze="NOT_STARTED_STEP",re="COMPLETED_FLOW",Po="ABORTED_FLOW",Pt="STARTED_FLOW",Ve="NOT_STARTED_FLOW",je="COMPLETED_STEP",vo="STARTED_STEP";function Xe(){let{publicApiKey:e,userId:t,apiUrl:o}=kt.default.useContext(Q);return{config:(0,kt.useMemo)(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Ir,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:(0,kt.useMemo)(()=>`${o}/v1/public/`,[o])}}var vl="frigade-last-call-at-",Bl="frigade-last-call-data-";function Dt(){let{shouldGracefullyDegrade:e}=kt.default.useContext(Q);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),io();let n=vl+t,r=Bl+t;if(window&&window.localStorage&&o&&o.body&&o.method==="POST"){let s=window.localStorage.getItem(n),p=window.localStorage.getItem(r);if(s&&p&&p==o.body){let d=new Date(s);if(new Date().getTime()-d.getTime()<1e3)return io()}window.localStorage.setItem(n,new Date().toISOString()),window.localStorage.setItem(r,o.body)}let i;try{i=await fetch(t,o)}catch(s){return io(s)}return i?i.ok?i:io(i.statusText):io()}}function io(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function $t(){let{publicApiKey:e,shouldGracefullyDegrade:t}=kt.default.useContext(Q);function o(){if(t){console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize");return}e||console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider")}return{verifySDKInitiated:o}}var no=require("react");var Mt=require("react");var Lr=g(require("swr"));var Nr=require("react");function Ie(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:n,completedFlowsToKeepOpenDuringSession:r}=(0,Nr.useContext)(Q);function i(c,f=!1){return e[c]??f}function s(c,f){t(S=>({...S,[c]:f}))}function p(c){t(f=>{let{[c]:S,...P}=f;return{...P}})}function d(c){r.includes(c)||n(f=>[...f,c])}function a(c){return r.includes(c)}function C(c){return Object.entries(e).some(([f,S])=>S&&f!=c)||o}return{getOpenFlowState:i,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:C,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var El="unknown";function We(){let{config:e,apiUrl:t}=Xe(),{publicApiKey:o,userId:n,organizationId:r,flows:i,setShouldGracefullyDegrade:s}=(0,Mt.useContext)(Q),{resetOpenFlowState:p}=Ie(),[d,a]=(0,Mt.useState)(!1),C={data:i.map(m=>({flowId:m.id,flowState:re,lastStepId:null,userId:n,foreignUserId:n,stepStates:{},shouldTrigger:!1}))},c=m=>fetch(m,e).then(x=>{if(x.ok)return x.json();throw new Error("Failed to fetch user flow states")}).catch(x=>(console.log(`Error fetching ${m}: ${x}. Will gracefully degrade and hide Frigade`),s(!0),C)),{data:f,isLoading:S,mutate:P,error:A}=(0,Lr.default)(o&&i&&n?`${t}userFlowStates?foreignUserId=${encodeURIComponent(n)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,c,{revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>C,onLoadingSlow:()=>C}),u=f==null?void 0:f.data;(0,Mt.useEffect)(()=>{!d&&!S&&u&&a(!0)},[u,d,S]);async function w(m){if(u){let x=u.find(T=>T.flowId===m);x&&x.flowState!==re&&(x.flowState=re),await P(Promise.resolve({...f,data:u}),{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function B(m,x,T){if(u){let O=u.find(z=>z.flowId===m);O&&(O.stepStates[x]=T,O.flowState=Pt),await P(Promise.resolve({...f,data:u}),{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function v(m,x,T){if(u){let O=u.find(z=>z.flowId===m);O&&(O.lastStepId=x,O.stepStates[x]=T,O.flowState=Pt),await P({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function F(m){if(u){let x=u.find(T=>T.flowId===m);x&&x.flowState!==Ve&&(x.flowState=Ve,x.lastStepId=El,Object.keys(x.stepStates).forEach(T=>{x.stepStates[T].actionType=ze,x.stepStates[T].createdAt=new Date().toISOString()}),await P({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1}),p(m))}}async function y(m,x){if(u){let T=u.find(O=>O.flowId===m);T&&T.stepStates[x]!==ze&&(T.stepStates[x]=ze),await P({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:u,isLoadingUserFlowStateData:!d,mutateUserFlowState:P,optimisticallyMarkFlowCompleted:w,optimisticallyMarkFlowNotStarted:F,optimisticallyMarkStepCompleted:B,optimisticallyMarkStepNotStarted:y,optimisticallyMarkStepStarted:v,error:A}}function Ut(){let{config:e,apiUrl:t}=Xe(),{userFlowStatesData:o,mutateUserFlowState:n}=We(),{failedFlowResponses:r,setFailedFlowResponses:i,flowResponses:s,setFlowResponses:p}=(0,no.useContext)(Q),[d,a]=(0,no.useState)(new Set),[C,c]=(0,no.useState)(new Set),f=Dt();function S(u){let w=JSON.stringify(u);if(d.has(w))return null;d.add(w),a(d),C.add(u),c(C);let B=s==null?void 0:s.find(v=>v.flowSlug===u.flowSlug&&v.stepId===u.stepId&&v.actionType===u.actionType&&v.createdAt===u.createdAt);return f(`${t}flowResponses`,{...e,method:"POST",body:w}).then(v=>{v.status!==200&&v.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),i([...r,u])):B||p(F=>[...F??[],u])})}async function P(u){u.foreignUserId&&(u.actionType===Pt||u.actionType===Ve?await S(u):u.actionType===re?await S(u):u.actionType===vo?await S(u):u.actionType===je?await S(u):u.actionType===Po?await S(u):u.actionType===ze&&await S(u))}function A(){let u=[];return o==null||o.forEach(w=>{if(w&&w.stepStates&&Object.keys(w.stepStates).length!==0)for(let B in w.stepStates){let v=w.stepStates[B];u.push({foreignUserId:w.foreignUserId,flowSlug:w.flowId,stepId:v.stepId,actionType:v.actionType,data:{},createdAt:new Date(v.createdAt),blocked:v.blocked,hidden:v.hidden})}}),[...u,...s]}return{addResponse:P,setFlowResponses:p,getFlowResponses:A}}var Dr=g(require("swr"));var Al=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Or=e=>{let t=Al.exec(e);if(t===null)return null;let o=null;return t.forEach((n,r)=>{let i=Il(n,"'","");i.startsWith("flow_")&&(o=i)}),o},Il=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Z(){let{config:e,apiUrl:t}=Xe(),{flows:o,setFlows:n,userId:r,publicApiKey:i,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,setFlowResponses:C,setShouldGracefullyDegrade:c}=(0,He.useContext)(Q),f={data:[]},{verifySDKInitiated:S}=$t(),{addResponse:P,getFlowResponses:A}=Ut(),u=h=>fetch(h,e).then(b=>b.ok?b.json():(console.log(`Error fetching ${h} (${b.status}): ${b.statusText}. .Will gracefully degrade and hide Frigade`),c(!0),f)).catch(b=>(console.log(`Error fetching ${h}: ${b}. Will gracefully degrade and hide Frigade`),c(!0),f)),{userFlowStatesData:w,isLoadingUserFlowStateData:B,optimisticallyMarkFlowCompleted:v,optimisticallyMarkFlowNotStarted:F,optimisticallyMarkStepCompleted:y,optimisticallyMarkStepNotStarted:m,optimisticallyMarkStepStarted:x}=We(),{data:T,error:O,isLoading:z}=(0,Dr.default)(i?`${t}flows`:null,u,{keepPreviousData:!0});(0,He.useEffect)(()=>{if(O){console.error(O);return}T&&T.data&&(T.data=n(T.data))},[T,O]);function V(h){if(z)return null;let b=o.find(E=>E.slug===h);return!b&&o.length>0&&!B&&!z?(console.log(`Flow with slug ${h} not found`),null):(b==null?void 0:b.active)===!1?null:b}function N(h){var H;if(!V(h))return[];let b=V(h).data;return b?(b=W(b),(((H=JSON.parse(b))==null?void 0:H.data)??[]).map(D=>{let _e=ne(D);return{handleSecondaryButtonClick:()=>{D.skippable===!0&&oe(h,D.id,{skipped:!0})},...D,complete:ie(h,D.id)===je||_e>=1,blocked:Fe(h,D.id),hidden:U(h,D.id),handlePrimaryButtonClick:()=>{(!D.completionCriteria&&(D.autoMarkCompleted||D.autoMarkCompleted===void 0)||D.completionCriteria&&D.autoMarkCompleted===!0)&&oe(h,D.id)},progress:_e}}).filter(D=>D.hidden!==!0)):[]}function W(h){return h.replaceAll(/\${(.*?)}/g,(b,E)=>s[E]===void 0?"":String(s[E]).replace(/[\u00A0-\u9999<>\&]/g,function(H){return"&#"+H.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 q(h){if(!V(h))return[];let b=V(h).data;return b?(b=W(b),JSON.parse(b)??{}):[]}function L(h,b){p(E=>({...E,[h]:b}))}function ce(h){!B&&!z&&h&&JSON.stringify(s)!=JSON.stringify({...s,...h})&&Object.keys(h).forEach(b=>{L(b,h[b])})}let Te=(0,He.useCallback)(async(h,b,E)=>{S();let H={foreignUserId:r,flowSlug:h,stepId:b,actionType:vo,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ge(H)&&(await x(h,b,H),P(H))},[r,w]),j=(0,He.useCallback)(async(h,b,E)=>{S();let H={foreignUserId:r,flowSlug:h,stepId:b,actionType:ze,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ge(H)&&(await m(h,b),P(H))},[r,w]),oe=(0,He.useCallback)(async(h,b,E)=>{S();let H={foreignUserId:r,flowSlug:h,stepId:b,actionType:je,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ge(H)&&(await y(h,b,H),P(H))},[r,w]),Ue=(0,He.useCallback)(async(h,b)=>{if(S(),Je(h)===Ve)return;let E={foreignUserId:r,flowSlug:h,stepId:"unknown",actionType:Ve,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};await F(h),ge(E)&&P(E)},[r,w]),le=(0,He.useCallback)(async(h,b)=>{S();let E={foreignUserId:r,flowSlug:h,stepId:"unknown",actionType:Pt,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};ge(E)&&P(E)},[r,w]),J=(0,He.useCallback)(async(h,b)=>{S();let E={foreignUserId:r,flowSlug:h,stepId:"unknown",actionType:re,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};ge(E)&&(await v(h),P(E))},[r,w]),Pe=(0,He.useCallback)(async(h,b)=>{S();let E={foreignUserId:r,flowSlug:h,stepId:"unknown",actionType:Po,data:b??{},createdAt:new Date,blocked:!1,hidden:!1};ge(E)&&(await v(h),P(E))},[r,w]);function ge(h){var b;if(!w&&h.actionType===ze)return!1;if(w){let E=w.find(H=>H.flowId===h.flowSlug);if(h.actionType===ze&&(!(E!=null&&E.stepStates[h.stepId])||E.stepStates[h.stepId].actionType===ze)||E&&((b=E.stepStates[h.stepId])==null?void 0:b.actionType)===h.actionType||E&&E.flowState===re&&h.actionType===re)return!1}return!0}function ie(h,b){let E=$(h,b);return B?null:E?E.actionType:ze}function Fe(h,b){let E=$(h,b);return E?E.blocked:!1}function U(h,b){let E=$(h,b);return E?E.hidden:!1}function $(h,b){if(B)return null;let E=w==null?void 0:w.find(H=>H.flowId===h);return!E||!E.stepStates[b]?null:E.stepStates[b]??null}function me(h){var E;if(B||!w)return null;if(Je(h)===Ve)return N(h)[0]??null;let b=(E=w.find(H=>H.flowId===h))==null?void 0:E.lastStepId;return b?N(h).find(H=>H.id===b):null}function K(h){let b=me(h);if(!b)return 0;let E=N(h).findIndex(H=>H.id===b.id)??0;return ie(h,b.id)===je&&E<N(h).length-1?E+1:E}function ne(h){if(!h.completionCriteria)return;let b=Or(h.completionCriteria);if(b===null)return;let E=at(b),H=Ft(b);return H===0?void 0:E/H}function Je(h){let b=w==null?void 0:w.find(E=>E.flowId===h);return b?b.flowState:null}function at(h){let b=N(h);return b.length===0?0:b.filter(H=>ie(h,H.id)===je).length}function Ft(h){return N(h).length}function G(h){return JSON.parse(o.find(b=>b.slug===h).data)}function Oe(h){if(B)return!0;if(h!=null&&h.targetingLogic&&w){let b=w.find(E=>E.flowId===h.slug);if(b)return b.shouldTrigger===!1}return!!(h!=null&&h.targetingLogic&&r&&r.startsWith("guest_"))}function pt(h){return!Oe(V(h))}return{getFlow:V,getFlowData:G,isLoading:B||z,getStepStatus:ie,getFlowSteps:N,getCurrentStepIndex:K,markStepStarted:Te,markStepCompleted:oe,markFlowNotStarted:Ue,markFlowStarted:le,markFlowCompleted:J,markFlowAborted:Pe,markStepNotStarted:j,getFlowStatus:Je,getNumberOfStepsCompleted:at,getNumberOfSteps:Ft,targetingLogicShouldHideFlow:Oe,setCustomVariable:L,updateCustomVariables:ce,customVariables:s,getStepOptionalProgress:ne,getFlowMetadata:q,isStepBlocked:Fe,isStepHidden:U,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,isFlowAvailableToUser:pt}}var vt=require("react");var _t="guest_";function zt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:n,shouldGracefullyDegrade:r}=(0,vt.useContext)(Q),{config:i,apiUrl:s}=Xe(),{mutateUserFlowState:p}=We(),d=Dt(),{verifySDKInitiated:a}=$t();(0,vt.useEffect)(()=>{if(e&&!t){if(e.startsWith(_t))return;let f=`frigade-user-registered-${e}`;localStorage.getItem(f)||(d(`${s}users`,{...i,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(f,"true"))}},[e,r,t]);let C=(0,vt.useCallback)(async f=>{a();let S={foreignId:e,properties:f};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(S)}),n(P=>({...P,...f})),p()},[e,i,r,p]),c=(0,vt.useCallback)(async(f,S)=>{a();let A={foreignId:e,events:[{event:f,properties:S}]};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(A)}),p()},[e,i,p]);return{userId:e,setUserId:o,addPropertiesToUser:C,trackEventForUser:c}}var zi=require("uuid");var Ae=g(require("react"));var Ne=g(require("react")),ao=g(require("styled-components"));var Mr=g(require("react")),Ur=g(require("styled-components"));var $r="fr-",so="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+" "+so+e}return o}function k(e){if(!e.className||e.className.indexOf(so)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith($r)?"":`:not(${o.map(n=>`.${n}`).join(", ")})`}function er(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function dt(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${er(t)}: ${e.styleOverrides[t]};`).join(" "):""}function ve(...e){return e.filter(Boolean).join(" ")}function lo(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Nl=Ur.default.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;