@frigade/react 1.33.11 → 1.33.12

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.d.ts CHANGED
@@ -540,7 +540,10 @@ interface FrigadeTourProps extends Omit<DefaultFrigadeFlowProps, 'flowId'> {
540
540
  * @ignore
541
541
  */
542
542
  selectedStep?: number;
543
- customStepTypes?: Record<string, (stepData: StepData) => React__default.ReactNode>;
543
+ customStepTypes?: Record<string, (props: {
544
+ stepData: StepData;
545
+ primaryColor: string;
546
+ }) => React__default.ReactNode>;
544
547
  appearance?: Appearance;
545
548
  /**
546
549
  * Shows a close button in the top right corner of the tooltip. Depending on dismissBehavior, it will either end the entire flow or just the current step.
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- var Yl=Object.create;var No=Object.defineProperty;var Xl=Object.getOwnPropertyDescriptor;var Jl=Object.getOwnPropertyNames;var Ql=Object.getPrototypeOf,Zl=Object.prototype.hasOwnProperty;var Rl=(e,t)=>{for(var o in t)No(e,o,{get:t[o],enumerable:!0})},Gr=(e,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Jl(t))!Zl.call(e,r)&&r!==o&&No(e,r,{get:()=>t[r],enumerable:!(i=Xl(t,r))||i.enumerable});return e};var m=(e,t,o)=>(o=e!=null?Yl(Ql(e)):{},Gr(t||!e||!e.__esModule?No(o,"default",{value:e,enumerable:!0}):o,e)),ea=e=>Gr(No({},"__esModule",{value:!0}),e);var ed={};Rl(ed,{Box:()=>Qt,Button:()=>Kl,CheckBox:()=>et,FormLabel:()=>mt,FormTextField:()=>jo,FrigadeBanner:()=>Ml,FrigadeChecklist:()=>pr,FrigadeDefaultAppearance:()=>Ze,FrigadeEmbeddedTip:()=>Il,FrigadeForm:()=>Fr,FrigadeGuide:()=>al,FrigadeHeroChecklist:()=>Ys,FrigadeNPSSurvey:()=>jl,FrigadeProgressBadge:()=>sl,FrigadeProvider:()=>xn,FrigadeSupportWidget:()=>Pl,FrigadeTour:()=>gl,ProgressRing:()=>It,Text:()=>cr,tokens:()=>tr,useFlowOpens:()=>Ne,useFlowResponses:()=>Ht,useFlows:()=>Z,useOrganization:()=>Zo,useUser:()=>jt});module.exports=ea(ed);var Y=m(require("react")),un=require("styled-components");var Ce=m(require("react"));var He=require("react");var Bt=m(require("react"));var qr="1.33.11 ";var _e="NOT_STARTED_STEP",ie="COMPLETED_FLOW",Oo="ABORTED_FLOW",Et="STARTED_FLOW",Ve="NOT_STARTED_FLOW",je="COMPLETED_STEP",Lo="STARTED_STEP";function Qe(){let{publicApiKey:e,userId:t,apiUrl:o}=Bt.default.useContext(K);return{config:(0,Bt.useMemo)(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":qr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:(0,Bt.useMemo)(()=>`${o}/v1/public/`,[o])}}var ta="frigade-last-call-at-",oa="frigade-last-call-data-";function zt(){let{shouldGracefullyDegrade:e,readonly:t}=Bt.default.useContext(K);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return Ut();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Ut();let r=ta+o,n=oa+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),d=window.localStorage.getItem(n);if(p&&d&&d==i.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Ut()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return Ut(p)}return s?s.ok?s:Ut(s.statusText):Ut()}}function Ut(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function _t(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Bt.default.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}}var mo=require("react");var Wt=require("react");var Yr=m(require("swr"));var Kr=require("react");function Ne(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=(0,Kr.useContext)(K);function n(c,x=!1){return e[c]??x}function s(c,x){t(b=>({...b,[c]:x}))}function p(c){t(x=>{let{[c]:b,...F}=x;return{...F}})}function d(c){r.includes(c)||i(x=>[...x,c])}function a(c){return r.includes(c)}function y(c){return Object.entries(e).some(([x,b])=>b&&x!=c)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:y,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var Xr=m(require("swr/immutable")),ra="unknown";function We(){let{config:e,apiUrl:t}=Qe(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=(0,Wt.useContext)(K),{resetOpenFlowState:d}=Ne(),[a,y]=(0,Wt.useState)(!1),c={data:n.map(S=>({flowId:S.id,flowState:ie,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},x=S=>fetch(S,e).then(A=>{if(A.ok)return A.json();throw new Error("Failed to fetch user flow states")}).catch(A=>(console.log(`Error fetching ${S}: ${A}. Will gracefully degrade and hide Frigade`),s(!0),c)),b=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:F,isLoading:P,mutate:f,error:B}=p?(0,Xr.default)(b,x):(0,Yr.default)(b,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>c,onLoadingSlow:()=>c}),h=F==null?void 0:F.data;(0,Wt.useEffect)(()=>{!a&&!P&&h&&y(!0)},[h,a,P]);async function k(S){if(h&&!p){let A=h.find(D=>D.flowId===S);A&&A.flowState!==ie&&(A.flowState=ie),await f(Promise.resolve({...F,data:h}),{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1})}}async function L(S,A,D){if(h){let O=h.find(U=>U.flowId===S);O&&(O.stepStates[A]=D,O.flowState=Et),await f(Promise.resolve({...F,data:h}),{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1})}}async function C(S,A,D){if(h){let O=h.find(U=>U.flowId===S);O&&(O.lastStepId=A,O.stepStates[A]=D,O.flowState=Et),await f({...F,data:h},{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1})}}async function u(S){if(h){let A=h.find(D=>D.flowId===S);A&&A.flowState!==Ve&&(A.flowState=Ve,A.lastStepId=ra,Object.keys(A.stepStates).forEach(D=>{A.stepStates[D].actionType=_e,A.stepStates[D].createdAt=new Date().toISOString()}),await f({...F,data:h},{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1}),d(S))}}async function T(S,A){if(h){let D=h.find(O=>O.flowId===S);D&&D.stepStates[A]!==_e&&(D.stepStates[A]=_e),await f({...F,data:h},{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:h,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:k,optimisticallyMarkFlowNotStarted:u,optimisticallyMarkStepCompleted:L,optimisticallyMarkStepNotStarted:T,optimisticallyMarkStepStarted:C,error:B}}function Ht(){let{config:e,apiUrl:t}=Qe(),{userFlowStatesData:o,mutateUserFlowState:i}=We(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=(0,mo.useContext)(K),[d,a]=(0,mo.useState)(new Set),[y,c]=(0,mo.useState)(new Set),x=zt();function b(f){let B=JSON.stringify(f);if(d.has(B))return null;d.add(B),a(d),y.add(f),c(y);let h=s==null?void 0:s.find(k=>k.flowSlug===f.flowSlug&&k.stepId===f.stepId&&k.actionType===f.actionType&&k.createdAt===f.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:B}).then(k=>{k.status!==200&&k.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...r,f])):h||p(L=>[...L??[],f])})}async function F(f){f.foreignUserId&&(f.actionType===Et||f.actionType===Ve?await b(f):f.actionType===ie?await b(f):f.actionType===Lo?await b(f):f.actionType===je?await b(f):f.actionType===Oo?await b(f):f.actionType===_e&&await b(f))}function P(){let f=[];return o==null||o.forEach(B=>{if(B&&B.stepStates&&Object.keys(B.stepStates).length!==0)for(let h in B.stepStates){let k=B.stepStates[h];f.push({foreignUserId:B.foreignUserId,flowSlug:B.flowId,stepId:k.stepId,actionType:k.actionType,data:{},createdAt:new Date(k.createdAt),blocked:k.blocked,hidden:k.hidden})}}),[...f,...s]}return{addResponse:F,setFlowResponses:p,getFlowResponses:P}}var Qr=m(require("swr"));var ia=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Jr=e=>{let t=ia.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=na(i,"'","");n.startsWith("flow_")&&(o=n)}),o},na=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Z(){let{config:e,apiUrl:t}=Qe(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,setFlowResponses:y,setShouldGracefullyDegrade:c,readonly:x}=(0,He.useContext)(K),b={data:[]},{verifySDKInitiated:F}=_t(),{addResponse:P,getFlowResponses:f}=Ht(),B=g=>fetch(g,e).then(w=>w.ok?w.json():(console.log(`Error fetching ${g} (${w.status}): ${w.statusText}. .Will gracefully degrade and hide Frigade`),c(!0),b)).catch(w=>(console.log(`Error fetching ${g}: ${w}. Will gracefully degrade and hide Frigade`),c(!0),b)),{userFlowStatesData:h,isLoadingUserFlowStateData:k,optimisticallyMarkFlowCompleted:L,optimisticallyMarkFlowNotStarted:C,optimisticallyMarkStepCompleted:u,optimisticallyMarkStepNotStarted:T,optimisticallyMarkStepStarted:S}=We(),{data:A,error:D,isLoading:O}=(0,Qr.default)(n?`${t}flows${x?"?readonly=true":""}`:null,B,{keepPreviousData:!0});(0,He.useEffect)(()=>{if(D){console.error(D);return}A&&A.data&&i(A.data)},[A,D]);function U(g){if(O)return null;let w=o.find(E=>E.slug===g);return!w&&o.length>0&&!k&&!O?(console.log(`Flow with slug ${g} not found`),null):(w==null?void 0:w.active)===!1?null:w}function $(g){var I;if(!U(g))return[];let w=U(g).data;return w?(w=j(w),(((I=JSON.parse(w))==null?void 0:I.data)??[]).map(re=>{let vt=pt(re);return{handleSecondaryButtonClick:()=>{re.skippable===!0&&fe(g,re.id,{skipped:!0})},...re,complete:he(g,re.id)===je||vt>=1,blocked:_(g,re.id),hidden:M(g,re.id),handlePrimaryButtonClick:()=>{(!re.completionCriteria&&(re.autoMarkCompleted||re.autoMarkCompleted===void 0)||re.completionCriteria&&re.autoMarkCompleted===!0)&&fe(g,re.id)},progress:vt}}).filter(re=>re.hidden!==!0)):[]}function j(g){return g.replaceAll(/\${(.*?)}/g,(w,E)=>s[E]===void 0?"":String(s[E]).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 H(g){if(!U(g))return[];let w=U(g).data;return w?(w=j(w),JSON.parse(w)??{}):[]}function ae(g,w){p(E=>({...E,[g]:w}))}function ne(g){!k&&!O&&g&&JSON.stringify(s)!=JSON.stringify({...s,...g})&&Object.keys(g).forEach(w=>{ae(w,g[w])})}let Q=(0,He.useCallback)(async(g,w,E)=>{if(!F())return;let I={foreignUserId:r,flowSlug:g,stepId:w,actionType:Lo,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};J(I)&&(await S(g,w,I),P(I))},[r,h]),se=(0,He.useCallback)(async(g,w,E)=>{if(!F())return;let I={foreignUserId:r,flowSlug:g,stepId:w,actionType:_e,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};J(I)&&(await T(g,w),P(I))},[r,h]),fe=(0,He.useCallback)(async(g,w,E)=>{if(!F())return;let I={foreignUserId:r,flowSlug:g,stepId:w,actionType:je,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};J(I)&&(await u(g,w,I),P(I))},[r,h]),oe=(0,He.useCallback)(async(g,w)=>{if(!F()||Xe(g)===Ve)return;let E={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:Ve,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};await C(g),J(E)&&P(E)},[r,h]),X=(0,He.useCallback)(async(g,w)=>{if(!F())return;let E={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:Et,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};J(E)&&P(E)},[r,h]),ve=(0,He.useCallback)(async(g,w)=>{if(!F())return;let E={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:ie,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};J(E)&&(await L(g),P(E))},[r,h]),De=(0,He.useCallback)(async(g,w)=>{if(!F())return;let E={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:Oo,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};J(E)&&(await L(g),P(E))},[r,h]);function J(g){var w;if(!h&&g.actionType===_e)return!1;if(h){let E=h.find(I=>I.flowId===g.flowSlug);if(g.actionType===_e&&(!(E!=null&&E.stepStates[g.stepId])||E.stepStates[g.stepId].actionType===_e)||E&&((w=E.stepStates[g.stepId])==null?void 0:w.actionType)===g.actionType||E&&E.flowState===ie&&g.actionType===ie)return!1}return!0}function he(g,w){let E=pe(g,w);return k?null:E?E.actionType:_e}function _(g,w){let E=pe(g,w);return E?E.blocked:!1}function M(g,w){let E=pe(g,w);return E?E.hidden:!1}function pe(g,w){if(k)return null;let E=h==null?void 0:h.find(I=>I.flowId===g);return!E||!E.stepStates[w]?null:E.stepStates[w]??null}function q(g){var E;if(k||!h)return null;if(Xe(g)===Ve)return $(g)[0]??null;let w=(E=h.find(I=>I.flowId===g))==null?void 0:E.lastStepId;return w?$(g).find(I=>I.id===w):null}function de(g){let w=q(g);if(!w)return 0;let E=$(g).findIndex(I=>I.id===w.id)??0;return he(g,w.id)===je&&E<$(g).length-1?E+1:E}function pt(g){if(!g.completionCriteria)return;let w=Jr(g.completionCriteria);if(w===null)return;let E=Pt(w),I=V(w);return I===0?void 0:E/I}function Xe(g){let w=h==null?void 0:h.find(E=>E.flowId===g);return w?w.flowState:null}function Pt(g){let w=$(g);return w.length===0?0:w.filter(I=>he(g,I.id)===je).length}function V(g){return $(g).length}function ze(g){let w=o.find(E=>E.slug===g);return w?JSON.parse(w.data):null}function Je(g){if(x)return!1;if(k)return!0;if(g!=null&&g.targetingLogic&&h){let w=h.find(E=>E.flowId===g.slug);if(w)return w.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&r&&r.startsWith("guest_"))}function ur(g){return!Je(U(g))}return{getFlow:U,getFlowData:ze,isLoading:k||O,getStepStatus:he,getFlowSteps:$,getCurrentStepIndex:de,markStepStarted:Q,markStepCompleted:fe,markFlowNotStarted:oe,markFlowStarted:X,markFlowCompleted:ve,markFlowAborted:De,markStepNotStarted:se,getFlowStatus:Xe,getNumberOfStepsCompleted:Pt,getNumberOfSteps:V,targetingLogicShouldHideFlow:Je,setCustomVariable:ae,updateCustomVariables:ne,customVariables:s,getStepOptionalProgress:pt,getFlowMetadata:H,isStepBlocked:_,isStepHidden:M,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,isFlowAvailableToUser:ur}}var At=require("react");var Vt="guest_";function jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=(0,At.useContext)(K),{config:n,apiUrl:s}=Qe(),{mutateUserFlowState:p}=We(),d=zt(),{verifySDKInitiated:a}=_t();(0,At.useEffect)(()=>{if(e&&!t){if(e.startsWith(Vt))return;let x=`frigade-user-registered-${e}`;localStorage.getItem(x)||(d(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(x,"true"))}},[e,r,t]);let y=(0,At.useCallback)(async x=>{if(!a())return;let b={foreignId:e,properties:x};await d(`${s}users`,{...n,method:"POST",body:JSON.stringify(b)}),i(F=>({...F,...x})),p()},[e,n,r,p]),c=(0,At.useCallback)(async(x,b)=>{if(!a())return;let P={foreignId:e,events:[{event:x,properties:b}]};await d(`${s}users`,{...n,method:"POST",body:JSON.stringify(P)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:y,trackEventForUser:c}}var on=require("uuid");var Ie=m(require("react"));var Oe=m(require("react")),go=m(require("styled-components"));var Rr=m(require("react")),ei=m(require("styled-components"));var Zr="fr-",uo="cfr-";function l(e,t){let o=`${Zr}${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 v(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(Zr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function fr(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=>`${fr(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ee(...e){return e.filter(Boolean).join(" ")}function fo(e){return e.charAt(0).toUpperCase()+e.slice(1)}var sa=ei.default.div`
2
+ var Yl=Object.create;var No=Object.defineProperty;var Xl=Object.getOwnPropertyDescriptor;var Jl=Object.getOwnPropertyNames;var Ql=Object.getPrototypeOf,Zl=Object.prototype.hasOwnProperty;var Rl=(e,t)=>{for(var o in t)No(e,o,{get:t[o],enumerable:!0})},Gr=(e,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Jl(t))!Zl.call(e,r)&&r!==o&&No(e,r,{get:()=>t[r],enumerable:!(i=Xl(t,r))||i.enumerable});return e};var m=(e,t,o)=>(o=e!=null?Yl(Ql(e)):{},Gr(t||!e||!e.__esModule?No(o,"default",{value:e,enumerable:!0}):o,e)),ea=e=>Gr(No({},"__esModule",{value:!0}),e);var ed={};Rl(ed,{Box:()=>Qt,Button:()=>Kl,CheckBox:()=>et,FormLabel:()=>mt,FormTextField:()=>jo,FrigadeBanner:()=>Ml,FrigadeChecklist:()=>pr,FrigadeDefaultAppearance:()=>Ze,FrigadeEmbeddedTip:()=>Il,FrigadeForm:()=>Fr,FrigadeGuide:()=>al,FrigadeHeroChecklist:()=>Ys,FrigadeNPSSurvey:()=>jl,FrigadeProgressBadge:()=>sl,FrigadeProvider:()=>xn,FrigadeSupportWidget:()=>Pl,FrigadeTour:()=>gl,ProgressRing:()=>It,Text:()=>cr,tokens:()=>tr,useFlowOpens:()=>Ne,useFlowResponses:()=>Ht,useFlows:()=>Z,useOrganization:()=>Zo,useUser:()=>jt});module.exports=ea(ed);var Y=m(require("react")),un=require("styled-components");var Ce=m(require("react"));var He=require("react");var Bt=m(require("react"));var qr="1.33.12 ";var _e="NOT_STARTED_STEP",ie="COMPLETED_FLOW",Oo="ABORTED_FLOW",Et="STARTED_FLOW",Ve="NOT_STARTED_FLOW",je="COMPLETED_STEP",Lo="STARTED_STEP";function Qe(){let{publicApiKey:e,userId:t,apiUrl:o}=Bt.default.useContext(K);return{config:(0,Bt.useMemo)(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":qr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:(0,Bt.useMemo)(()=>`${o}/v1/public/`,[o])}}var ta="frigade-last-call-at-",oa="frigade-last-call-data-";function zt(){let{shouldGracefullyDegrade:e,readonly:t}=Bt.default.useContext(K);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return Ut();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Ut();let r=ta+o,n=oa+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),d=window.localStorage.getItem(n);if(p&&d&&d==i.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Ut()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return Ut(p)}return s?s.ok?s:Ut(s.statusText):Ut()}}function Ut(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function _t(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Bt.default.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}}var mo=require("react");var Wt=require("react");var Yr=m(require("swr"));var Kr=require("react");function Ne(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=(0,Kr.useContext)(K);function n(c,x=!1){return e[c]??x}function s(c,x){t(b=>({...b,[c]:x}))}function p(c){t(x=>{let{[c]:b,...F}=x;return{...F}})}function d(c){r.includes(c)||i(x=>[...x,c])}function a(c){return r.includes(c)}function y(c){return Object.entries(e).some(([x,b])=>b&&x!=c)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:y,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var Xr=m(require("swr/immutable")),ra="unknown";function We(){let{config:e,apiUrl:t}=Qe(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=(0,Wt.useContext)(K),{resetOpenFlowState:d}=Ne(),[a,y]=(0,Wt.useState)(!1),c={data:n.map(S=>({flowId:S.id,flowState:ie,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},x=S=>fetch(S,e).then(A=>{if(A.ok)return A.json();throw new Error("Failed to fetch user flow states")}).catch(A=>(console.log(`Error fetching ${S}: ${A}. Will gracefully degrade and hide Frigade`),s(!0),c)),b=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:F,isLoading:P,mutate:f,error:B}=p?(0,Xr.default)(b,x):(0,Yr.default)(b,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>c,onLoadingSlow:()=>c}),h=F==null?void 0:F.data;(0,Wt.useEffect)(()=>{!a&&!P&&h&&y(!0)},[h,a,P]);async function k(S){if(h&&!p){let A=h.find(D=>D.flowId===S);A&&A.flowState!==ie&&(A.flowState=ie),await f(Promise.resolve({...F,data:h}),{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1})}}async function L(S,A,D){if(h){let O=h.find(U=>U.flowId===S);O&&(O.stepStates[A]=D,O.flowState=Et),await f(Promise.resolve({...F,data:h}),{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1})}}async function C(S,A,D){if(h){let O=h.find(U=>U.flowId===S);O&&(O.lastStepId=A,O.stepStates[A]=D,O.flowState=Et),await f({...F,data:h},{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1})}}async function u(S){if(h){let A=h.find(D=>D.flowId===S);A&&A.flowState!==Ve&&(A.flowState=Ve,A.lastStepId=ra,Object.keys(A.stepStates).forEach(D=>{A.stepStates[D].actionType=_e,A.stepStates[D].createdAt=new Date().toISOString()}),await f({...F,data:h},{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1}),d(S))}}async function T(S,A){if(h){let D=h.find(O=>O.flowId===S);D&&D.stepStates[A]!==_e&&(D.stepStates[A]=_e),await f({...F,data:h},{optimisticData:{...F,data:h},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:h,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:k,optimisticallyMarkFlowNotStarted:u,optimisticallyMarkStepCompleted:L,optimisticallyMarkStepNotStarted:T,optimisticallyMarkStepStarted:C,error:B}}function Ht(){let{config:e,apiUrl:t}=Qe(),{userFlowStatesData:o,mutateUserFlowState:i}=We(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=(0,mo.useContext)(K),[d,a]=(0,mo.useState)(new Set),[y,c]=(0,mo.useState)(new Set),x=zt();function b(f){let B=JSON.stringify(f);if(d.has(B))return null;d.add(B),a(d),y.add(f),c(y);let h=s==null?void 0:s.find(k=>k.flowSlug===f.flowSlug&&k.stepId===f.stepId&&k.actionType===f.actionType&&k.createdAt===f.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:B}).then(k=>{k.status!==200&&k.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...r,f])):h||p(L=>[...L??[],f])})}async function F(f){f.foreignUserId&&(f.actionType===Et||f.actionType===Ve?await b(f):f.actionType===ie?await b(f):f.actionType===Lo?await b(f):f.actionType===je?await b(f):f.actionType===Oo?await b(f):f.actionType===_e&&await b(f))}function P(){let f=[];return o==null||o.forEach(B=>{if(B&&B.stepStates&&Object.keys(B.stepStates).length!==0)for(let h in B.stepStates){let k=B.stepStates[h];f.push({foreignUserId:B.foreignUserId,flowSlug:B.flowId,stepId:k.stepId,actionType:k.actionType,data:{},createdAt:new Date(k.createdAt),blocked:k.blocked,hidden:k.hidden})}}),[...f,...s]}return{addResponse:F,setFlowResponses:p,getFlowResponses:P}}var Qr=m(require("swr"));var ia=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Jr=e=>{let t=ia.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=na(i,"'","");n.startsWith("flow_")&&(o=n)}),o},na=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Z(){let{config:e,apiUrl:t}=Qe(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,setFlowResponses:y,setShouldGracefullyDegrade:c,readonly:x}=(0,He.useContext)(K),b={data:[]},{verifySDKInitiated:F}=_t(),{addResponse:P,getFlowResponses:f}=Ht(),B=g=>fetch(g,e).then(w=>w.ok?w.json():(console.log(`Error fetching ${g} (${w.status}): ${w.statusText}. .Will gracefully degrade and hide Frigade`),c(!0),b)).catch(w=>(console.log(`Error fetching ${g}: ${w}. Will gracefully degrade and hide Frigade`),c(!0),b)),{userFlowStatesData:h,isLoadingUserFlowStateData:k,optimisticallyMarkFlowCompleted:L,optimisticallyMarkFlowNotStarted:C,optimisticallyMarkStepCompleted:u,optimisticallyMarkStepNotStarted:T,optimisticallyMarkStepStarted:S}=We(),{data:A,error:D,isLoading:O}=(0,Qr.default)(n?`${t}flows${x?"?readonly=true":""}`:null,B,{keepPreviousData:!0});(0,He.useEffect)(()=>{if(D){console.error(D);return}A&&A.data&&i(A.data)},[A,D]);function U(g){if(O)return null;let w=o.find(E=>E.slug===g);return!w&&o.length>0&&!k&&!O?(console.log(`Flow with slug ${g} not found`),null):(w==null?void 0:w.active)===!1?null:w}function $(g){var I;if(!U(g))return[];let w=U(g).data;return w?(w=j(w),(((I=JSON.parse(w))==null?void 0:I.data)??[]).map(re=>{let vt=pt(re);return{handleSecondaryButtonClick:()=>{re.skippable===!0&&fe(g,re.id,{skipped:!0})},...re,complete:he(g,re.id)===je||vt>=1,blocked:_(g,re.id),hidden:M(g,re.id),handlePrimaryButtonClick:()=>{(!re.completionCriteria&&(re.autoMarkCompleted||re.autoMarkCompleted===void 0)||re.completionCriteria&&re.autoMarkCompleted===!0)&&fe(g,re.id)},progress:vt}}).filter(re=>re.hidden!==!0)):[]}function j(g){return g.replaceAll(/\${(.*?)}/g,(w,E)=>s[E]===void 0?"":String(s[E]).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 H(g){if(!U(g))return[];let w=U(g).data;return w?(w=j(w),JSON.parse(w)??{}):[]}function ae(g,w){p(E=>({...E,[g]:w}))}function ne(g){!k&&!O&&g&&JSON.stringify(s)!=JSON.stringify({...s,...g})&&Object.keys(g).forEach(w=>{ae(w,g[w])})}let Q=(0,He.useCallback)(async(g,w,E)=>{if(!F())return;let I={foreignUserId:r,flowSlug:g,stepId:w,actionType:Lo,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};J(I)&&(await S(g,w,I),P(I))},[r,h]),se=(0,He.useCallback)(async(g,w,E)=>{if(!F())return;let I={foreignUserId:r,flowSlug:g,stepId:w,actionType:_e,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};J(I)&&(await T(g,w),P(I))},[r,h]),fe=(0,He.useCallback)(async(g,w,E)=>{if(!F())return;let I={foreignUserId:r,flowSlug:g,stepId:w,actionType:je,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};J(I)&&(await u(g,w,I),P(I))},[r,h]),oe=(0,He.useCallback)(async(g,w)=>{if(!F()||Xe(g)===Ve)return;let E={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:Ve,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};await C(g),J(E)&&P(E)},[r,h]),X=(0,He.useCallback)(async(g,w)=>{if(!F())return;let E={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:Et,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};J(E)&&P(E)},[r,h]),ve=(0,He.useCallback)(async(g,w)=>{if(!F())return;let E={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:ie,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};J(E)&&(await L(g),P(E))},[r,h]),De=(0,He.useCallback)(async(g,w)=>{if(!F())return;let E={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:Oo,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};J(E)&&(await L(g),P(E))},[r,h]);function J(g){var w;if(!h&&g.actionType===_e)return!1;if(h){let E=h.find(I=>I.flowId===g.flowSlug);if(g.actionType===_e&&(!(E!=null&&E.stepStates[g.stepId])||E.stepStates[g.stepId].actionType===_e)||E&&((w=E.stepStates[g.stepId])==null?void 0:w.actionType)===g.actionType||E&&E.flowState===ie&&g.actionType===ie)return!1}return!0}function he(g,w){let E=pe(g,w);return k?null:E?E.actionType:_e}function _(g,w){let E=pe(g,w);return E?E.blocked:!1}function M(g,w){let E=pe(g,w);return E?E.hidden:!1}function pe(g,w){if(k)return null;let E=h==null?void 0:h.find(I=>I.flowId===g);return!E||!E.stepStates[w]?null:E.stepStates[w]??null}function q(g){var E;if(k||!h)return null;if(Xe(g)===Ve)return $(g)[0]??null;let w=(E=h.find(I=>I.flowId===g))==null?void 0:E.lastStepId;return w?$(g).find(I=>I.id===w):null}function de(g){let w=q(g);if(!w)return 0;let E=$(g).findIndex(I=>I.id===w.id)??0;return he(g,w.id)===je&&E<$(g).length-1?E+1:E}function pt(g){if(!g.completionCriteria)return;let w=Jr(g.completionCriteria);if(w===null)return;let E=Pt(w),I=V(w);return I===0?void 0:E/I}function Xe(g){let w=h==null?void 0:h.find(E=>E.flowId===g);return w?w.flowState:null}function Pt(g){let w=$(g);return w.length===0?0:w.filter(I=>he(g,I.id)===je).length}function V(g){return $(g).length}function ze(g){let w=o.find(E=>E.slug===g);return w?JSON.parse(w.data):null}function Je(g){if(x)return!1;if(k)return!0;if(g!=null&&g.targetingLogic&&h){let w=h.find(E=>E.flowId===g.slug);if(w)return w.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&r&&r.startsWith("guest_"))}function ur(g){return!Je(U(g))}return{getFlow:U,getFlowData:ze,isLoading:k||O,getStepStatus:he,getFlowSteps:$,getCurrentStepIndex:de,markStepStarted:Q,markStepCompleted:fe,markFlowNotStarted:oe,markFlowStarted:X,markFlowCompleted:ve,markFlowAborted:De,markStepNotStarted:se,getFlowStatus:Xe,getNumberOfStepsCompleted:Pt,getNumberOfSteps:V,targetingLogicShouldHideFlow:Je,setCustomVariable:ae,updateCustomVariables:ne,customVariables:s,getStepOptionalProgress:pt,getFlowMetadata:H,isStepBlocked:_,isStepHidden:M,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,isFlowAvailableToUser:ur}}var At=require("react");var Vt="guest_";function jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=(0,At.useContext)(K),{config:n,apiUrl:s}=Qe(),{mutateUserFlowState:p}=We(),d=zt(),{verifySDKInitiated:a}=_t();(0,At.useEffect)(()=>{if(e&&!t){if(e.startsWith(Vt))return;let x=`frigade-user-registered-${e}`;localStorage.getItem(x)||(d(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(x,"true"))}},[e,r,t]);let y=(0,At.useCallback)(async x=>{if(!a())return;let b={foreignId:e,properties:x};await d(`${s}users`,{...n,method:"POST",body:JSON.stringify(b)}),i(F=>({...F,...x})),p()},[e,n,r,p]),c=(0,At.useCallback)(async(x,b)=>{if(!a())return;let P={foreignId:e,events:[{event:x,properties:b}]};await d(`${s}users`,{...n,method:"POST",body:JSON.stringify(P)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:y,trackEventForUser:c}}var on=require("uuid");var Ie=m(require("react"));var Oe=m(require("react")),go=m(require("styled-components"));var Rr=m(require("react")),ei=m(require("styled-components"));var Zr="fr-",uo="cfr-";function l(e,t){let o=`${Zr}${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 v(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(Zr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function fr(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=>`${fr(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ee(...e){return e.filter(Boolean).join(" ")}function fo(e){return e.charAt(0).toUpperCase()+e.slice(1)}var sa=ei.default.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;