@frigade/react 1.35.33 → 1.35.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import bt,{createContext as ed,useEffect as zo,useState as ze}from"react";import{ThemeProvider as td}from"styled-components";import St,{useContext as Ep,useEffect as po,useState as Mo}from"react";import{useCallback as ht,useContext as oa,useEffect as ra}from"react";import Jo,{useMemo as qr}from"react";var Kr="1.35.33 ";var Ue="NOT_STARTED_STEP",q="COMPLETED_FLOW",yo="ABORTED_FLOW",xt="STARTED_FLOW",Ne="NOT_STARTED_FLOW",We="COMPLETED_STEP",So="STARTED_STEP";function je(){let{publicApiKey:e,userId:t,apiUrl:o}=Jo.useContext(G);return{config:qr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Kr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:qr(()=>`${o}/v1/public/`,[o])}}var Vl="frigade-last-call-at-",Gl="frigade-last-call-data-";function Nt(){let{shouldGracefullyDegrade:e,readonly:t}=Jo.useContext(G);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return It();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),It();let r=Vl+o,n=Gl+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),c=window.localStorage.getItem(n);if(p&&c&&c==i.body){let l=new Date(p);if(new Date().getTime()-l.getTime()<1e3)return It()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return It(p)}return s?s.ok?s:It(s.statusText):It()}}function It(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ot(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Jo.useContext(G);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as Rl,useState as Yr}from"react";import{useContext as ql,useEffect as Yl,useState as Xl}from"react";import Jl from"swr";import{useContext as Kl}from"react";function Fe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=Kl(G);function n(d,x=!1){return e[d]??x}function s(d,x){t(k=>({...k,[d]:x}))}function p(d){t(x=>{let{[d]:k,...S}=x;return{...S}})}function c(d){r.includes(d)||i(x=>[...x,d])}function l(d){return r.includes(d)}function g(d){return Object.entries(e).some(([x,k])=>k&&x!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:g,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:l}}import Ql from"swr/immutable";import Zt from"core-js-pure/actual/structured-clone";function Qo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function fe(...e){let t=e.shift(),o=e.length===1?e[0]:fe(...e);if(!Qo(t)||!Qo(o))throw new Error("deepmerge can only merge Objects");let i=Zt(t);return Object.entries(o).forEach(([r,n])=>{Qo(n)?i[r]!==void 0?Object.assign(i,{[r]:fe(i[r],Zt(n))}):Object.assign(i,{[r]:Zt(n)}):Array.isArray(n)?i[r]!==void 0?Object.assign(i,{[r]:[...i[r],...Zt(n)]}):Object.assign(i,{[r]:Zt(n)}):Object.assign(i,{[r]:n})}),i}var Zl="unknown";function Oe(){let{config:e,apiUrl:t}=je(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=ql(G),{resetOpenFlowState:c}=Fe(),[l,g]=Xl(!1),d={data:n.map(f=>({flowId:f.id,flowState:q,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},x=f=>fetch(f,e).then(F=>{if(F.ok)return F.json();throw new Error("Failed to fetch user flow states")}).catch(F=>(console.log(`Error fetching ${f}: ${F}. Will gracefully degrade and hide Frigade`),s(!0),d)),k=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:S,isLoading:b,mutate:u,error:v}=p?Ql(k,x):Jl(k,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),T=S==null?void 0:S.data;Yl(()=>{!l&&!b&&T&&g(!0)},[T,l,b]);async function C(f){if(T&&!p){let F=T.find(I=>I.flowId===f);F&&F.flowState!==q&&(F.flowState=q),await u(Promise.resolve(fe(S,{data:T})),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1})}}async function N(f,F,I){if(T){let O=T.find(E=>E.flowId===f);O&&(O.stepStates[F]=I,O.flowState=xt),await u(Promise.resolve(fe(S,{data:T})),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1})}}async function A(f,F,I){if(T){let O=T.find(E=>E.flowId===f);O&&(O.lastStepId=F,O.stepStates[F]=I,O.flowState=xt),await u(fe(S,{data:T}),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1})}}async function h(f){if(T){let F=T.find(I=>I.flowId===f);F&&F.flowState!==Ne&&(F.flowState=Ne,F.lastStepId=Zl,Object.keys(F.stepStates).forEach(I=>{F.stepStates[I].actionType=Ue,F.stepStates[I].createdAt=new Date().toISOString()}),await u(fe(S,{data:T}),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1}),c(f))}}async function w(f,F){if(T){let I=T.find(O=>O.flowId===f);I&&I.stepStates[F]!==Ue&&(I.stepStates[F]=Ue),await u(fe(S,{data:T}),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:T,isLoadingUserFlowStateData:!l,mutateUserFlowState:u,optimisticallyMarkFlowCompleted:C,optimisticallyMarkFlowNotStarted:h,optimisticallyMarkStepCompleted:N,optimisticallyMarkStepNotStarted:w,optimisticallyMarkStepStarted:A,error:v}}function Rt(){let{config:e,apiUrl:t}=je(),{userFlowStatesData:o,mutateUserFlowState:i}=Oe(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Rl(G),[c,l]=Yr(new Set),[g,d]=Yr(new Set),x=Nt();function k(u){let v=JSON.stringify(u);if(c.has(v))return null;c.add(v),l(c),g.add(u),d(g);let T=s==null?void 0:s.find(C=>C.flowSlug===u.flowSlug&&C.stepId===u.stepId&&C.actionType===u.actionType&&C.createdAt===u.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:v}).then(C=>{C.status!==200&&C.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),n([...r,u])):T||p(N=>[...N??[],u])})}async function S(u){u.foreignUserId&&(u.actionType===xt||u.actionType===Ne?await k(u):u.actionType===q?await k(u):u.actionType===So?await k(u):u.actionType===We?await k(u):u.actionType===yo?await k(u):u.actionType===Ue&&await k(u))}function b(){let u=[];return o==null||o.forEach(v=>{if(v&&v.stepStates&&Object.keys(v.stepStates).length!==0)for(let T in v.stepStates){let C=v.stepStates[T];u.push({foreignUserId:v.foreignUserId,flowSlug:v.flowId,stepId:C.stepId,actionType:C.actionType,data:{},createdAt:new Date(C.createdAt),blocked:C.blocked,hidden:C.hidden})}}),[...u,...s]}return{addResponse:S,setFlowResponses:p,getFlowResponses:b}}import ia from"swr";var ea=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Xr=e=>{let t=ea.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=ta(i,"'","");n.startsWith("flow_")&&(o=n)}),o},ta=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Zo(e){try{return JSON.parse(e)}catch(t){return console.error("Failed to parse Frigade config.yml to JSON",t),null}}var Ro=(l=>(l.CHECKLIST="CHECKLIST",l.FORM="FORM",l.TOUR="TOUR",l.SUPPORT="SUPPORT",l.CUSTOM="CUSTOM",l.BANNER="BANNER",l.EMBEDDED_TIP="EMBEDDED_TIP",l.NPS_SURVEY="NPS_SURVEY",l.ANNOUNCEMENT="ANNOUNCEMENT",l))(Ro||{});function J(){let{config:e,apiUrl:t}=je(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,setFlowResponses:g,setShouldGracefullyDegrade:d,readonly:x}=oa(G),k={data:[]},{verifySDKInitiated:S}=Ot(),{addResponse:b,getFlowResponses:u}=Rt(),v=m=>fetch(m,e).then(y=>y.ok?y.json():(console.log(`Error fetching ${m} (${y.status}): ${y.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),k)).catch(y=>(console.log(`Error fetching ${m}: ${y}. Will gracefully degrade and hide Frigade`),d(!0),k)),{mutateUserFlowState:T,userFlowStatesData:C,isLoadingUserFlowStateData:N,optimisticallyMarkFlowCompleted:A,optimisticallyMarkFlowNotStarted:h,optimisticallyMarkStepCompleted:w,optimisticallyMarkStepNotStarted:f,optimisticallyMarkStepStarted:F}=Oe(),{data:I,error:O,isLoading:E}=ia(n?`${t}flows${x?"?readonly=true":""}`:null,v,{keepPreviousData:!0});ra(()=>{if(O){console.error(O);return}I&&I.data&&i(I.data)},[I,O]);function D(m){if(E)return null;let y=o.find(B=>B.slug===m);return!y&&o.length>0&&!N&&!E?(console.log(`Flow with id ${m} not found`),null):(y==null?void 0:y.active)===!1?null:y}function $(m){var z;if(!D(m))return[];let y=D(m).data;return y?(y=V(y),(((z=Zo(y))==null?void 0:z.data)??[]).map(ue=>{let Qt=H(ue);return{handleSecondaryButtonClick:()=>{ue.skippable===!0&&te(m,ue.id,{skipped:!0})},...ue,complete:ne(m,ue.id)===We||Qt>=1,blocked:Te(m,ue.id),hidden:L(m,ue.id),handlePrimaryButtonClick:()=>{(!ue.completionCriteria&&(ue.autoMarkCompleted||ue.autoMarkCompleted===void 0)||ue.completionCriteria&&ue.autoMarkCompleted===!0)&&te(m,ue.id)},progress:Qt}}).filter(ue=>ue.hidden!==!0)):[]}function V(m){return m.replaceAll(/\${(.*?)}/g,(y,B)=>s[B]===void 0?"":String(s[B]).replace(/[\u00A0-\u9999<>\&]/g,function(z){return"&#"+z.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(m){if(!D(m))return[];let y=D(m).data;return y?(y=V(y),JSON.parse(y)??{}):[]}function Y(m,y){p(B=>({...B,[m]:y}))}function de(m){!N&&!E&&m&&JSON.stringify(s)!=JSON.stringify({...s,...m})&&Object.keys(m).forEach(y=>{Y(y,m[y])})}let he=ht(async(m,y,B)=>{if(!S())return;let z={foreignUserId:r,flowSlug:m,stepId:y,actionType:So,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};re(z)&&(await F(m,y,z),b(z))},[r,C]),K=ht(async(m,y,B)=>{if(!S())return;let z={foreignUserId:r,flowSlug:m,stepId:y,actionType:Ue,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};re(z)&&(await f(m,y),b(z))},[r,C]),te=ht(async(m,y,B)=>{if(!S())return;let z={foreignUserId:r,flowSlug:m,stepId:y,actionType:We,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};re(z)&&(await w(m,y,z),b(z))},[r,C]),Q=ht(async(m,y)=>{if(!S()||se(m)===Ne)return;let B={foreignUserId:r,flowSlug:m,stepId:"unknown",actionType:Ne,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};await h(m),re(B)&&b(B)},[r,C]),Se=ht(async(m,y)=>{if(!S())return;let B={foreignUserId:r,flowSlug:m,stepId:"unknown",actionType:xt,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(B)&&b(B)},[r,C]),me=ht(async(m,y)=>{if(!S())return;let B={foreignUserId:r,flowSlug:m,stepId:"unknown",actionType:q,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(B)&&(await A(m),b(B))},[r,C]),Ee=ht(async(m,y)=>{if(!S())return;let B={foreignUserId:r,flowSlug:m,stepId:"unknown",actionType:yo,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(B)&&(await A(m),b(B))},[r,C]);function re(m){var y;if(!C&&m.actionType===Ue)return!1;if(C){let B=C.find(z=>z.flowId===m.flowSlug);if(m.actionType===Ue&&(!(B!=null&&B.stepStates[m.stepId])||B.stepStates[m.stepId].actionType===Ue)||B&&((y=B.stepStates[m.stepId])==null?void 0:y.actionType)===m.actionType||B&&B.flowState===q&&m.actionType===q)return!1}return!0}function ne(m,y){let B=U(m,y);return N?null:B?B.actionType:Ue}function Te(m,y){let B=U(m,y);return B?B.blocked:!1}function L(m,y){let B=U(m,y);return B?B.hidden:!1}function U(m,y){if(N)return null;let B=C==null?void 0:C.find(z=>z.flowId===m);return!B||!B.stepStates[y]?null:B.stepStates[y]??null}function _(m){var B;if(N||!C)return null;if(se(m)===Ne)return $(m)[0]??null;let y=(B=C.find(z=>z.flowId===m))==null?void 0:B.lastStepId;return y?$(m).find(z=>z.id===y):null}function X(m){let y=_(m);if(!y)return 0;let B=$(m).findIndex(z=>z.id===y.id)??0;return ne(m,y.id)===We&&B<$(m).length-1?B+1:B}function H(m){if(!m.completionCriteria)return;let y=Xr(m.completionCriteria);if(y===null)return;let B=Ae(y),z=Ie(y);return z===0?void 0:B/z}function se(m){let y=C==null?void 0:C.find(B=>B.flowId===m);return y?y.flowState:null}function Ae(m){let y=$(m);return y.length===0?0:y.filter(z=>ne(m,z.id)===We).length}function Ie(m){return $(m).length}function Et(m){let y=o.find(B=>B.slug===m);return y?Zo(y.data):null}function ft(m){if(x)return!1;if(N)return!0;if(m!=null&&m.targetingLogic&&C){let y=C.find(B=>B.flowId===m.slug);if(y)return y.shouldTrigger===!1}return!!(m!=null&&m.targetingLogic&&r&&r.startsWith("guest_"))}function At(m){return!ft(D(m))}function gt(){r&&T()}return{getFlow:D,getFlowData:Et,isLoading:N||E,getStepStatus:ne,getFlowSteps:$,getCurrentStepIndex:X,markStepStarted:he,markStepCompleted:te,markFlowNotStarted:Q,markFlowStarted:Se,markFlowCompleted:me,markFlowAborted:Ee,markStepNotStarted:K,getFlowStatus:se,getNumberOfStepsCompleted:Ae,getNumberOfSteps:Ie,targetingLogicShouldHideFlow:ft,setCustomVariable:Y,updateCustomVariables:de,customVariables:s,getStepOptionalProgress:H,getFlowMetadata:j,isStepBlocked:Te,isStepHidden:L,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,isFlowAvailableToUser:At,refresh:gt}}import{useCallback as er,useContext as na,useEffect as sa}from"react";var Lt="guest_";function eo(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=na(G),{config:n,apiUrl:s}=je(),{mutateUserFlowState:p}=Oe(),c=Nt(),{verifySDKInitiated:l}=Ot();function g(S){return`frigade-user-registered-${S}`}sa(()=>{if(e&&!t){if(e.startsWith(Lt))return;let S=g(e);localStorage.getItem(S)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(S,"true"))}},[e,r,t]);let d=er(async S=>{if(!l())return;let b={foreignId:e,properties:S};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(b)}),i(u=>({...u,...S})),p()},[e,n,r,p]),x=er(async(S,b)=>{if(!l())return;let v={foreignId:e,events:[{event:S,properties:b}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),p()},[e,n,p]),k=er(async(S,b)=>{if(l())if(b){let u=g(S);localStorage.setItem(u,"true"),o(S);let v={foreignId:S,properties:b};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),i(T=>({...T,...b})),p()}else o(S)},[n,r,p]);return{userId:e,setUserId:o,setUserIdWithProperties:k,addPropertiesToUser:d,trackEventForUser:x}}import{v4 as Ap}from"uuid";import qe,{useEffect as br,useState as Zi}from"react";import _e,{useEffect as ir,useState as ga}from"react";import Fo from"styled-components";import la from"react";import aa from"styled-components";var Jr="fr-",to="cfr-";function a(e,t){let o=`${Jr}${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+" "+to+e}return o}function P(e){if(!e.className||e.className.indexOf(to)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Jr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function bo(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function ve(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${bo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ce(...e){return e.filter(Boolean).join(" ")}function oo(e){return e.charAt(0).toUpperCase()+e.slice(1)}var pa=aa.div`
2
+ import bt,{createContext as ed,useEffect as zo,useState as ze}from"react";import{ThemeProvider as td}from"styled-components";import St,{useContext as Ep,useEffect as po,useState as Mo}from"react";import{useCallback as ht,useContext as oa,useEffect as ra}from"react";import Jo,{useMemo as qr}from"react";var Kr="1.35.34 ";var Ue="NOT_STARTED_STEP",q="COMPLETED_FLOW",yo="ABORTED_FLOW",xt="STARTED_FLOW",Ne="NOT_STARTED_FLOW",We="COMPLETED_STEP",So="STARTED_STEP";function je(){let{publicApiKey:e,userId:t,apiUrl:o}=Jo.useContext(G);return{config:qr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Kr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:qr(()=>`${o}/v1/public/`,[o])}}var Vl="frigade-last-call-at-",Gl="frigade-last-call-data-";function Nt(){let{shouldGracefullyDegrade:e,readonly:t}=Jo.useContext(G);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return It();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),It();let r=Vl+o,n=Gl+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),c=window.localStorage.getItem(n);if(p&&c&&c==i.body){let l=new Date(p);if(new Date().getTime()-l.getTime()<1e3)return It()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return It(p)}return s?s.ok?s:It(s.statusText):It()}}function It(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ot(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Jo.useContext(G);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as Rl,useState as Yr}from"react";import{useContext as ql,useEffect as Yl,useState as Xl}from"react";import Jl from"swr";import{useContext as Kl}from"react";function Fe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=Kl(G);function n(d,x=!1){return e[d]??x}function s(d,x){t(k=>({...k,[d]:x}))}function p(d){t(x=>{let{[d]:k,...S}=x;return{...S}})}function c(d){r.includes(d)||i(x=>[...x,d])}function l(d){return r.includes(d)}function g(d){return Object.entries(e).some(([x,k])=>k&&x!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:g,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:l}}import Ql from"swr/immutable";import Zt from"core-js-pure/actual/structured-clone";function Qo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function fe(...e){let t=e.shift(),o=e.length===1?e[0]:fe(...e);if(!Qo(t)||!Qo(o))throw new Error("deepmerge can only merge Objects");let i=Zt(t);return Object.entries(o).forEach(([r,n])=>{Qo(n)?i[r]!==void 0?Object.assign(i,{[r]:fe(i[r],Zt(n))}):Object.assign(i,{[r]:Zt(n)}):Array.isArray(n)?i[r]!==void 0?Object.assign(i,{[r]:[...i[r],...Zt(n)]}):Object.assign(i,{[r]:Zt(n)}):Object.assign(i,{[r]:n})}),i}var Zl="unknown";function Oe(){let{config:e,apiUrl:t}=je(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=ql(G),{resetOpenFlowState:c}=Fe(),[l,g]=Xl(!1),d={data:n.map(f=>({flowId:f.id,flowState:q,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},x=f=>fetch(f,e).then(F=>{if(F.ok)return F.json();throw new Error("Failed to fetch user flow states")}).catch(F=>(console.log(`Error fetching ${f}: ${F}. Will gracefully degrade and hide Frigade`),s(!0),d)),k=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:S,isLoading:b,mutate:u,error:v}=p?Ql(k,x):Jl(k,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),T=S==null?void 0:S.data;Yl(()=>{!l&&!b&&T&&g(!0)},[T,l,b]);async function C(f){if(T&&!p){let F=T.find(I=>I.flowId===f);F&&F.flowState!==q&&(F.flowState=q),await u(Promise.resolve(fe(S,{data:T})),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1})}}async function N(f,F,I){if(T){let O=T.find(E=>E.flowId===f);O&&(O.stepStates[F]=I,O.flowState=xt),await u(Promise.resolve(fe(S,{data:T})),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1})}}async function A(f,F,I){if(T){let O=T.find(E=>E.flowId===f);O&&(O.lastStepId=F,O.stepStates[F]=I,O.flowState=xt),await u(fe(S,{data:T}),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1})}}async function h(f){if(T){let F=T.find(I=>I.flowId===f);F&&F.flowState!==Ne&&(F.flowState=Ne,F.lastStepId=Zl,Object.keys(F.stepStates).forEach(I=>{F.stepStates[I].actionType=Ue,F.stepStates[I].createdAt=new Date().toISOString()}),await u(fe(S,{data:T}),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1}),c(f))}}async function w(f,F){if(T){let I=T.find(O=>O.flowId===f);I&&I.stepStates[F]!==Ue&&(I.stepStates[F]=Ue),await u(fe(S,{data:T}),{optimisticData:fe(S,{data:T}),revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:T,isLoadingUserFlowStateData:!l,mutateUserFlowState:u,optimisticallyMarkFlowCompleted:C,optimisticallyMarkFlowNotStarted:h,optimisticallyMarkStepCompleted:N,optimisticallyMarkStepNotStarted:w,optimisticallyMarkStepStarted:A,error:v}}function Rt(){let{config:e,apiUrl:t}=je(),{userFlowStatesData:o,mutateUserFlowState:i}=Oe(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Rl(G),[c,l]=Yr(new Set),[g,d]=Yr(new Set),x=Nt();function k(u){let v=JSON.stringify(u);if(c.has(v))return null;c.add(v),l(c),g.add(u),d(g);let T=s==null?void 0:s.find(C=>C.flowSlug===u.flowSlug&&C.stepId===u.stepId&&C.actionType===u.actionType&&C.createdAt===u.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:v}).then(C=>{C.status!==200&&C.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),n([...r,u])):T||p(N=>[...N??[],u])})}async function S(u){u.foreignUserId&&(u.actionType===xt||u.actionType===Ne?await k(u):u.actionType===q?await k(u):u.actionType===So?await k(u):u.actionType===We?await k(u):u.actionType===yo?await k(u):u.actionType===Ue&&await k(u))}function b(){let u=[];return o==null||o.forEach(v=>{if(v&&v.stepStates&&Object.keys(v.stepStates).length!==0)for(let T in v.stepStates){let C=v.stepStates[T];u.push({foreignUserId:v.foreignUserId,flowSlug:v.flowId,stepId:C.stepId,actionType:C.actionType,data:{},createdAt:new Date(C.createdAt),blocked:C.blocked,hidden:C.hidden})}}),[...u,...s]}return{addResponse:S,setFlowResponses:p,getFlowResponses:b}}import ia from"swr";var ea=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Xr=e=>{let t=ea.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=ta(i,"'","");n.startsWith("flow_")&&(o=n)}),o},ta=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Zo(e){try{return JSON.parse(e)}catch(t){return console.error("Failed to parse Frigade config.yml to JSON",t),null}}var Ro=(l=>(l.CHECKLIST="CHECKLIST",l.FORM="FORM",l.TOUR="TOUR",l.SUPPORT="SUPPORT",l.CUSTOM="CUSTOM",l.BANNER="BANNER",l.EMBEDDED_TIP="EMBEDDED_TIP",l.NPS_SURVEY="NPS_SURVEY",l.ANNOUNCEMENT="ANNOUNCEMENT",l))(Ro||{});function J(){let{config:e,apiUrl:t}=je(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,setFlowResponses:g,setShouldGracefullyDegrade:d,readonly:x}=oa(G),k={data:[]},{verifySDKInitiated:S}=Ot(),{addResponse:b,getFlowResponses:u}=Rt(),v=m=>fetch(m,e).then(y=>y.ok?y.json():(console.log(`Error fetching ${m} (${y.status}): ${y.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),k)).catch(y=>(console.log(`Error fetching ${m}: ${y}. Will gracefully degrade and hide Frigade`),d(!0),k)),{mutateUserFlowState:T,userFlowStatesData:C,isLoadingUserFlowStateData:N,optimisticallyMarkFlowCompleted:A,optimisticallyMarkFlowNotStarted:h,optimisticallyMarkStepCompleted:w,optimisticallyMarkStepNotStarted:f,optimisticallyMarkStepStarted:F}=Oe(),{data:I,error:O,isLoading:E}=ia(n?`${t}flows${x?"?readonly=true":""}`:null,v,{keepPreviousData:!0});ra(()=>{if(O){console.error(O);return}I&&I.data&&i(I.data)},[I,O]);function D(m){if(E)return null;let y=o.find(B=>B.slug===m);return!y&&o.length>0&&!N&&!E?(console.log(`Flow with id ${m} not found`),null):(y==null?void 0:y.active)===!1&&!x?null:y}function $(m){var z;if(!D(m))return[];let y=D(m).data;return y?(y=V(y),(((z=Zo(y))==null?void 0:z.data)??[]).map(ue=>{let Qt=H(ue);return{handleSecondaryButtonClick:()=>{ue.skippable===!0&&te(m,ue.id,{skipped:!0})},...ue,complete:ne(m,ue.id)===We||Qt>=1,blocked:Te(m,ue.id),hidden:L(m,ue.id),handlePrimaryButtonClick:()=>{(!ue.completionCriteria&&(ue.autoMarkCompleted||ue.autoMarkCompleted===void 0)||ue.completionCriteria&&ue.autoMarkCompleted===!0)&&te(m,ue.id)},progress:Qt}}).filter(ue=>ue.hidden!==!0)):[]}function V(m){return m.replaceAll(/\${(.*?)}/g,(y,B)=>s[B]===void 0?"":String(s[B]).replace(/[\u00A0-\u9999<>\&]/g,function(z){return"&#"+z.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(m){if(!D(m))return[];let y=D(m).data;return y?(y=V(y),JSON.parse(y)??{}):[]}function Y(m,y){p(B=>({...B,[m]:y}))}function de(m){!N&&!E&&m&&JSON.stringify(s)!=JSON.stringify({...s,...m})&&Object.keys(m).forEach(y=>{Y(y,m[y])})}let he=ht(async(m,y,B)=>{if(!S())return;let z={foreignUserId:r,flowSlug:m,stepId:y,actionType:So,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};re(z)&&(await F(m,y,z),b(z))},[r,C]),K=ht(async(m,y,B)=>{if(!S())return;let z={foreignUserId:r,flowSlug:m,stepId:y,actionType:Ue,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};re(z)&&(await f(m,y),b(z))},[r,C]),te=ht(async(m,y,B)=>{if(!S())return;let z={foreignUserId:r,flowSlug:m,stepId:y,actionType:We,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};re(z)&&(await w(m,y,z),b(z))},[r,C]),Q=ht(async(m,y)=>{if(!S()||se(m)===Ne)return;let B={foreignUserId:r,flowSlug:m,stepId:"unknown",actionType:Ne,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};await h(m),re(B)&&b(B)},[r,C]),Se=ht(async(m,y)=>{if(!S())return;let B={foreignUserId:r,flowSlug:m,stepId:"unknown",actionType:xt,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(B)&&b(B)},[r,C]),me=ht(async(m,y)=>{if(!S())return;let B={foreignUserId:r,flowSlug:m,stepId:"unknown",actionType:q,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(B)&&(await A(m),b(B))},[r,C]),Ee=ht(async(m,y)=>{if(!S())return;let B={foreignUserId:r,flowSlug:m,stepId:"unknown",actionType:yo,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};re(B)&&(await A(m),b(B))},[r,C]);function re(m){var y;if(!C&&m.actionType===Ue)return!1;if(C){let B=C.find(z=>z.flowId===m.flowSlug);if(m.actionType===Ue&&(!(B!=null&&B.stepStates[m.stepId])||B.stepStates[m.stepId].actionType===Ue)||B&&((y=B.stepStates[m.stepId])==null?void 0:y.actionType)===m.actionType||B&&B.flowState===q&&m.actionType===q)return!1}return!0}function ne(m,y){let B=U(m,y);return N?null:B?B.actionType:Ue}function Te(m,y){let B=U(m,y);return B?B.blocked:!1}function L(m,y){let B=U(m,y);return B?B.hidden:!1}function U(m,y){if(N)return null;let B=C==null?void 0:C.find(z=>z.flowId===m);return!B||!B.stepStates[y]?null:B.stepStates[y]??null}function _(m){var B;if(N||!C)return null;if(se(m)===Ne)return $(m)[0]??null;let y=(B=C.find(z=>z.flowId===m))==null?void 0:B.lastStepId;return y?$(m).find(z=>z.id===y):null}function X(m){let y=_(m);if(!y)return 0;let B=$(m).findIndex(z=>z.id===y.id)??0;return ne(m,y.id)===We&&B<$(m).length-1?B+1:B}function H(m){if(!m.completionCriteria)return;let y=Xr(m.completionCriteria);if(y===null)return;let B=Ae(y),z=Ie(y);return z===0?void 0:B/z}function se(m){let y=C==null?void 0:C.find(B=>B.flowId===m);return y?y.flowState:null}function Ae(m){let y=$(m);return y.length===0?0:y.filter(z=>ne(m,z.id)===We).length}function Ie(m){return $(m).length}function Et(m){let y=o.find(B=>B.slug===m);return y?Zo(y.data):null}function ft(m){if(x)return!1;if(N)return!0;if(m!=null&&m.targetingLogic&&C){let y=C.find(B=>B.flowId===m.slug);if(y)return y.shouldTrigger===!1}return!!(m!=null&&m.targetingLogic&&r&&r.startsWith("guest_"))}function At(m){return!ft(D(m))}function gt(){r&&T()}return{getFlow:D,getFlowData:Et,isLoading:N||E,getStepStatus:ne,getFlowSteps:$,getCurrentStepIndex:X,markStepStarted:he,markStepCompleted:te,markFlowNotStarted:Q,markFlowStarted:Se,markFlowCompleted:me,markFlowAborted:Ee,markStepNotStarted:K,getFlowStatus:se,getNumberOfStepsCompleted:Ae,getNumberOfSteps:Ie,targetingLogicShouldHideFlow:ft,setCustomVariable:Y,updateCustomVariables:de,customVariables:s,getStepOptionalProgress:H,getFlowMetadata:j,isStepBlocked:Te,isStepHidden:L,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,isFlowAvailableToUser:At,refresh:gt}}import{useCallback as er,useContext as na,useEffect as sa}from"react";var Lt="guest_";function eo(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=na(G),{config:n,apiUrl:s}=je(),{mutateUserFlowState:p}=Oe(),c=Nt(),{verifySDKInitiated:l}=Ot();function g(S){return`frigade-user-registered-${S}`}sa(()=>{if(e&&!t){if(e.startsWith(Lt))return;let S=g(e);localStorage.getItem(S)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(S,"true"))}},[e,r,t]);let d=er(async S=>{if(!l())return;let b={foreignId:e,properties:S};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(b)}),i(u=>({...u,...S})),p()},[e,n,r,p]),x=er(async(S,b)=>{if(!l())return;let v={foreignId:e,events:[{event:S,properties:b}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),p()},[e,n,p]),k=er(async(S,b)=>{if(l())if(b){let u=g(S);localStorage.setItem(u,"true"),o(S);let v={foreignId:S,properties:b};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),i(T=>({...T,...b})),p()}else o(S)},[n,r,p]);return{userId:e,setUserId:o,setUserIdWithProperties:k,addPropertiesToUser:d,trackEventForUser:x}}import{v4 as Ap}from"uuid";import qe,{useEffect as br,useState as Zi}from"react";import _e,{useEffect as ir,useState as ga}from"react";import Fo from"styled-components";import la from"react";import aa from"styled-components";var Jr="fr-",to="cfr-";function a(e,t){let o=`${Jr}${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+" "+to+e}return o}function P(e){if(!e.className||e.className.indexOf(to)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Jr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function bo(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function ve(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${bo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ce(...e){return e.filter(Boolean).join(" ")}function oo(e){return e.charAt(0).toUpperCase()+e.slice(1)}var pa=aa.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;