@frigade/react 1.35.8 → 1.35.10
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 +19 -17
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.d.ts
CHANGED
|
@@ -216,7 +216,7 @@ declare enum TriggerType {
|
|
|
216
216
|
AUTOMATIC = "AUTOMATIC"
|
|
217
217
|
}
|
|
218
218
|
declare function useFlows(): {
|
|
219
|
-
getFlow: (
|
|
219
|
+
getFlow: (flowId: string) => Flow;
|
|
220
220
|
getFlowData: (flowId: string) => any;
|
|
221
221
|
isLoading: boolean;
|
|
222
222
|
getStepStatus: (flowId: string, stepId: string) => StepActionType | null;
|
|
@@ -617,30 +617,32 @@ declare const FrigadeTour: FC<FrigadeTourProps & {
|
|
|
617
617
|
initialSelectedStep?: number;
|
|
618
618
|
}>;
|
|
619
619
|
|
|
620
|
-
interface
|
|
620
|
+
interface FrigadeSupportWidgetProps extends DefaultFrigadeFlowProps {
|
|
621
621
|
type?: 'floating' | 'inline';
|
|
622
622
|
visible?: boolean;
|
|
623
623
|
title?: string;
|
|
624
624
|
}
|
|
625
|
-
declare const FrigadeSupportWidget: FC<
|
|
625
|
+
declare const FrigadeSupportWidget: FC<FrigadeSupportWidgetProps>;
|
|
626
626
|
|
|
627
627
|
interface FrigadeEmbeddedTipProps extends DefaultFrigadeFlowProps {
|
|
628
628
|
dismissible?: boolean;
|
|
629
629
|
}
|
|
630
630
|
declare const FrigadeEmbeddedTip: React__default.FC<FrigadeEmbeddedTipProps>;
|
|
631
631
|
|
|
632
|
-
/**
|
|
633
|
-
* Frigade Banners
|
|
634
|
-
* full-width: Full width banner, useful in top of the page
|
|
635
|
-
* square: Square sized banner, useful in sidebars
|
|
636
|
-
*
|
|
637
|
-
*/
|
|
638
632
|
type FrigadeBannerType = 'full-width' | 'square';
|
|
639
633
|
interface FrigadeBannerProps extends DefaultFrigadeFlowProps {
|
|
634
|
+
/**
|
|
635
|
+
* full-width: Full width banner, useful in top of the page.
|
|
636
|
+
*
|
|
637
|
+
* square: Square sized banner, useful in sidebars
|
|
638
|
+
*/
|
|
640
639
|
type?: FrigadeBannerType;
|
|
641
640
|
title?: string;
|
|
642
641
|
subtitle?: string;
|
|
643
642
|
onDismiss?: () => void;
|
|
643
|
+
/**
|
|
644
|
+
* Icon to use in the banner
|
|
645
|
+
*/
|
|
644
646
|
icon?: React__default.ReactNode;
|
|
645
647
|
}
|
|
646
648
|
declare const FrigadeBanner: React__default.FC<FrigadeBannerProps>;
|
|
@@ -670,17 +672,17 @@ declare function useFlowOpens(): {
|
|
|
670
672
|
};
|
|
671
673
|
|
|
672
674
|
declare function useUser(): {
|
|
673
|
-
userId: string;
|
|
674
|
-
setUserId: React__default.Dispatch<React__default.SetStateAction<string>>;
|
|
675
|
-
addPropertiesToUser: (properties: EntityProperties) => Promise<void>;
|
|
676
|
-
trackEventForUser: (event: string, properties?: EntityProperties) => Promise<void>;
|
|
675
|
+
readonly userId: string | null;
|
|
676
|
+
readonly setUserId: React__default.Dispatch<React__default.SetStateAction<string | null>>;
|
|
677
|
+
readonly addPropertiesToUser: (properties: EntityProperties) => Promise<void>;
|
|
678
|
+
readonly trackEventForUser: (event: string, properties?: EntityProperties) => Promise<void>;
|
|
677
679
|
};
|
|
678
680
|
|
|
679
681
|
declare function useOrganization(): {
|
|
680
|
-
organizationId: string;
|
|
681
|
-
setOrganizationId: React__default.Dispatch<React__default.SetStateAction<string>>;
|
|
682
|
-
addPropertiesToOrganization: (properties: EntityProperties) => Promise<void>;
|
|
683
|
-
trackEventForOrganization: (event: string, properties?: EntityProperties) => Promise<void>;
|
|
682
|
+
readonly organizationId: string | null;
|
|
683
|
+
readonly setOrganizationId: React__default.Dispatch<React__default.SetStateAction<string | null>>;
|
|
684
|
+
readonly addPropertiesToOrganization: (properties: EntityProperties) => Promise<void>;
|
|
685
|
+
readonly trackEventForOrganization: (event: string, properties?: EntityProperties) => Promise<void>;
|
|
684
686
|
};
|
|
685
687
|
|
|
686
688
|
interface PublicUserFlowState {
|
package/lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
var ea=Object.create;var $o=Object.defineProperty;var ta=Object.getOwnPropertyDescriptor;var oa=Object.getOwnPropertyNames;var ra=Object.getPrototypeOf,ia=Object.prototype.hasOwnProperty;var na=(e,t)=>{for(var o in t)$o(e,o,{get:t[o],enumerable:!0})},Kr=(e,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of oa(t))!ia.call(e,r)&&r!==o&&$o(e,r,{get:()=>t[r],enumerable:!(i=ta(t,r))||i.enumerable});return e};var f=(e,t,o)=>(o=e!=null?ea(ra(e)):{},Kr(t||!e||!e.__esModule?$o(o,"default",{value:e,enumerable:!0}):o,e)),sa=e=>Kr($o({},"__esModule",{value:!0}),e);var sd={};na(sd,{Box:()=>ro,Button:()=>Zl,CheckBox:()=>nt,FormLabel:()=>xt,FormTextField:()=>Xo,FrigadeAnnouncement:()=>Xl,FrigadeBanner:()=>Il,FrigadeChecklist:()=>dr,FrigadeDefaultAppearance:()=>rt,FrigadeEmbeddedTip:()=>Pl,FrigadeForm:()=>Pr,FrigadeGuide:()=>il,FrigadeHeroChecklist:()=>Gs,FrigadeNPSSurvey:()=>zl,FrigadeProgressBadge:()=>ol,FrigadeProvider:()=>xn,FrigadeSupportWidget:()=>bl,FrigadeTour:()=>dl,ProgressRing:()=>Dt,Text:()=>ur,tokens:()=>ir,useFlowOpens:()=>Ae,useFlowResponses:()=>Yt,useFlows:()=>J,useOrganization:()=>tr,useUser:()=>Jt,useUserFlowStates:()=>Me});module.exports=sa(sd);var Q=f(require("react")),un=require("styled-components");var he=f(require("react"));var Ge=require("react");var It=f(require("react"));var qr="1.35.8 ";var Ve="NOT_STARTED_STEP",Z="COMPLETED_FLOW",Mo="ABORTED_FLOW",Ot="STARTED_FLOW",Xe="NOT_STARTED_FLOW",Je="COMPLETED_STEP",Uo="STARTED_STEP";function et(){let{publicApiKey:e,userId:t,apiUrl:o}=It.default.useContext(X);return{config:(0,It.useMemo)(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":qr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:(0,It.useMemo)(()=>`${o}/v1/public/`,[o])}}var la="frigade-last-call-at-",aa="frigade-last-call-data-";function Gt(){let{shouldGracefullyDegrade:e,readonly:t}=It.default.useContext(X);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return Vt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Vt();let r=la+o,n=aa+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 a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Vt()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return Vt(p)}return s?s.ok?s:Vt(s.statusText):Vt()}}function Vt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Kt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=It.default.useContext(X);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 xo=require("react");var qt=require("react");var Xr=f(require("swr"));var Yr=require("react");function Ae(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=(0,Yr.useContext)(X);function n(d,h=!1){return e[d]??h}function s(d,h){t(w=>({...w,[d]:h}))}function p(d){t(h=>{let{[d]:w,...T}=h;return{...T}})}function c(d){r.includes(d)||i(h=>[...h,d])}function a(d){return r.includes(d)}function x(d){return Object.entries(e).some(([h,w])=>w&&h!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}var Jr=f(require("swr/immutable")),pa="unknown";function Me(){let{config:e,apiUrl:t}=et(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=(0,qt.useContext)(X),{resetOpenFlowState:c}=Ae(),[a,x]=(0,qt.useState)(!1),d={data:n.map(k=>({flowId:k.id,flowState:Z,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},h=k=>fetch(k,e).then(P=>{if(P.ok)return P.json();throw new Error("Failed to fetch user flow states")}).catch(P=>(console.log(`Error fetching ${k}: ${P}. Will gracefully degrade and hide Frigade`),s(!0),d)),w=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:T,isLoading:B,mutate:g,error:A}=p?(0,Jr.default)(w,h):(0,Xr.default)(w,h,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),b=T==null?void 0:T.data;(0,qt.useEffect)(()=>{!a&&!B&&b&&x(!0)},[b,a,B]);async function S(k){if(b&&!p){let P=b.find(D=>D.flowId===k);P&&P.flowState!==Z&&(P.flowState=Z),await g(Promise.resolve({...T,data:b}),{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1})}}async function N(k,P,D){if(b){let I=b.find(O=>O.flowId===k);I&&(I.stepStates[P]=D,I.flowState=Ot),await g(Promise.resolve({...T,data:b}),{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1})}}async function y(k,P,D){if(b){let I=b.find(O=>O.flowId===k);I&&(I.lastStepId=P,I.stepStates[P]=D,I.flowState=Ot),await g({...T,data:b},{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1})}}async function m(k){if(b){let P=b.find(D=>D.flowId===k);P&&P.flowState!==Xe&&(P.flowState=Xe,P.lastStepId=pa,Object.keys(P.stepStates).forEach(D=>{P.stepStates[D].actionType=Ve,P.stepStates[D].createdAt=new Date().toISOString()}),await g({...T,data:b},{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1}),c(k))}}async function E(k,P){if(b){let D=b.find(I=>I.flowId===k);D&&D.stepStates[P]!==Ve&&(D.stepStates[P]=Ve),await g({...T,data:b},{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:b,isLoadingUserFlowStateData:!a,mutateUserFlowState:g,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:N,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:y,error:A}}function Yt(){let{config:e,apiUrl:t}=et(),{userFlowStatesData:o,mutateUserFlowState:i}=Me(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=(0,xo.useContext)(X),[c,a]=(0,xo.useState)(new Set),[x,d]=(0,xo.useState)(new Set),h=Gt();function w(g){let A=JSON.stringify(g);if(c.has(A))return null;c.add(A),a(c),x.add(g),d(x);let b=s==null?void 0:s.find(S=>S.flowSlug===g.flowSlug&&S.stepId===g.stepId&&S.actionType===g.actionType&&S.createdAt===g.createdAt);return h(`${t}flowResponses`,{...e,method:"POST",body:A}).then(S=>{S.status!==200&&S.status!==201?(console.log("Failed to send flow response for step "+g.stepId+". Will retry again later."),n([...r,g])):b||p(N=>[...N??[],g])})}async function T(g){g.foreignUserId&&(g.actionType===Ot||g.actionType===Xe?await w(g):g.actionType===Z?await w(g):g.actionType===Uo?await w(g):g.actionType===Je?await w(g):g.actionType===Mo?await w(g):g.actionType===Ve&&await w(g))}function B(){let g=[];return o==null||o.forEach(A=>{if(A&&A.stepStates&&Object.keys(A.stepStates).length!==0)for(let b in A.stepStates){let S=A.stepStates[b];g.push({foreignUserId:A.foreignUserId,flowSlug:A.flowId,stepId:S.stepId,actionType:S.actionType,data:{},createdAt:new Date(S.createdAt),blocked:S.blocked,hidden:S.hidden})}}),[...g,...s]}return{addResponse:T,setFlowResponses:p,getFlowResponses:B}}var Zr=f(require("swr"));var da=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Qr=e=>{let t=da.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=ca(i,"'","");n.startsWith("flow_")&&(o=n)}),o},ca=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function J(){let{config:e,apiUrl:t}=et(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:x,setShouldGracefullyDegrade:d,readonly:h}=(0,Ge.useContext)(X),w={data:[]},{verifySDKInitiated:T}=Kt(),{addResponse:B,getFlowResponses:g}=Yt(),A=u=>fetch(u,e).then(C=>C.ok?C.json():(console.log(`Error fetching ${u} (${C.status}): ${C.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),w)).catch(C=>(console.log(`Error fetching ${u}: ${C}. Will gracefully degrade and hide Frigade`),d(!0),w)),{mutateUserFlowState:b,userFlowStatesData:S,isLoadingUserFlowStateData:N,optimisticallyMarkFlowCompleted:y,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:E,optimisticallyMarkStepNotStarted:k,optimisticallyMarkStepStarted:P}=Me(),{data:D,error:I,isLoading:O}=(0,Zr.default)(n?`${t}flows${h?"?readonly=true":""}`:null,A,{keepPreviousData:!0});(0,Ge.useEffect)(()=>{if(I){console.error(I);return}D&&D.data&&i(D.data)},[D,I]);function U(u){if(O)return null;let C=o.find(v=>v.slug===u);return!C&&o.length>0&&!N&&!O?(console.log(`Flow with slug ${u} not found`),null):(C==null?void 0:C.active)===!1?null:C}function M(u){var H;if(!U(u))return[];let C=U(u).data;return C?(C=se(C),(((H=JSON.parse(C))==null?void 0:H.data)??[]).map(z=>{let Ye=me(z);return{handleSecondaryButtonClick:()=>{z.skippable===!0&&G(u,z.id,{skipped:!0})},...z,complete:Pe(u,z.id)===Je||Ye>=1,blocked:pe(u,z.id),hidden:$(u,z.id),handlePrimaryButtonClick:()=>{(!z.completionCriteria&&(z.autoMarkCompleted||z.autoMarkCompleted===void 0)||z.completionCriteria&&z.autoMarkCompleted===!0)&&G(u,z.id)},progress:Ye}}).filter(z=>z.hidden!==!0)):[]}function se(u){return u.replaceAll(/\${(.*?)}/g,(C,v)=>s[v]===void 0?"":String(s[v]).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 _(u){if(!U(u))return[];let C=U(u).data;return C?(C=se(C),JSON.parse(C)??{}):[]}function le(u,C){p(v=>({...v,[u]:C}))}function ke(u){!N&&!O&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(C=>{le(C,u[C])})}let ee=(0,Ge.useCallback)(async(u,C,v)=>{if(!T())return;let H={foreignUserId:r,flowSlug:u,stepId:C,actionType:Uo,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};te(H)&&(await P(u,C,H),B(H))},[r,S]),V=(0,Ge.useCallback)(async(u,C,v)=>{if(!T())return;let H={foreignUserId:r,flowSlug:u,stepId:C,actionType:Ve,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};te(H)&&(await k(u,C),B(H))},[r,S]),G=(0,Ge.useCallback)(async(u,C,v)=>{if(!T())return;let H={foreignUserId:r,flowSlug:u,stepId:C,actionType:Je,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};te(H)&&(await E(u,C,H),B(H))},[r,S]),Ee=(0,Ge.useCallback)(async(u,C)=>{if(!T()||fe(u)===Xe)return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Xe,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),te(v)&&B(v)},[r,S]),je=(0,Ge.useCallback)(async(u,C)=>{if(!T())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Ot,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};te(v)&&B(v)},[r,S]),Oe=(0,Ge.useCallback)(async(u,C)=>{if(!T())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Z,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};te(v)&&(await y(u),B(v))},[r,S]),be=(0,Ge.useCallback)(async(u,C)=>{if(!T())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Mo,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};te(v)&&(await y(u),B(v))},[r,S]);function te(u){var C;if(!S&&u.actionType===Ve)return!1;if(S){let v=S.find(H=>H.flowId===u.flowSlug);if(u.actionType===Ve&&(!(v!=null&&v.stepStates[u.stepId])||v.stepStates[u.stepId].actionType===Ve)||v&&((C=v.stepStates[u.stepId])==null?void 0:C.actionType)===u.actionType||v&&v.flowState===Z&&u.actionType===Z)return!1}return!0}function Pe(u,C){let v=K(u,C);return N?null:v?v.actionType:Ve}function pe(u,C){let v=K(u,C);return v?v.blocked:!1}function $(u,C){let v=K(u,C);return v?v.hidden:!1}function K(u,C){if(N)return null;let v=S==null?void 0:S.find(H=>H.flowId===u);return!v||!v.stepStates[C]?null:v.stepStates[C]??null}function q(u){var v;if(N||!S)return null;if(fe(u)===Xe)return M(u)[0]??null;let C=(v=S.find(H=>H.flowId===u))==null?void 0:v.lastStepId;return C?M(u).find(H=>H.id===C):null}function ce(u){let C=q(u);if(!C)return 0;let v=M(u).findIndex(H=>H.id===C.id)??0;return Pe(u,C.id)===Je&&v<M(u).length-1?v+1:v}function me(u){if(!u.completionCriteria)return;let C=Qr(u.completionCriteria);if(C===null)return;let v=ft(C),H=qe(C);return H===0?void 0:v/H}function fe(u){let C=S==null?void 0:S.find(v=>v.flowId===u);return C?C.flowState:null}function ft(u){let C=M(u);return C.length===0?0:C.filter(H=>Pe(u,H.id)===Je).length}function qe(u){return M(u).length}function Ht(u){let C=o.find(v=>v.slug===u);return C?JSON.parse(C.data):null}function At(u){if(h)return!1;if(N)return!0;if(u!=null&&u.targetingLogic&&S){let C=S.find(v=>v.flowId===u.slug);if(C)return C.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function jt(u){return!At(U(u))}function Nt(){r&&b()}return{getFlow:U,getFlowData:Ht,isLoading:N||O,getStepStatus:Pe,getFlowSteps:M,getCurrentStepIndex:ce,markStepStarted:ee,markStepCompleted:G,markFlowNotStarted:Ee,markFlowStarted:je,markFlowCompleted:Oe,markFlowAborted:be,markStepNotStarted:V,getFlowStatus:fe,getNumberOfStepsCompleted:ft,getNumberOfSteps:qe,targetingLogicShouldHideFlow:At,setCustomVariable:le,updateCustomVariables:ke,customVariables:s,getStepOptionalProgress:me,getFlowMetadata:_,isStepBlocked:pe,isStepHidden:$,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:jt,refresh:Nt}}var Lt=require("react");var Xt="guest_";function Jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=(0,Lt.useContext)(X),{config:n,apiUrl:s}=et(),{mutateUserFlowState:p}=Me(),c=Gt(),{verifySDKInitiated:a}=Kt();(0,Lt.useEffect)(()=>{if(e&&!t){if(e.startsWith(Xt))return;let h=`frigade-user-registered-${e}`;localStorage.getItem(h)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(h,"true"))}},[e,r,t]);let x=(0,Lt.useCallback)(async h=>{if(!a())return;let w={foreignId:e,properties:h};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(w)}),i(T=>({...T,...h})),p()},[e,n,r,p]),d=(0,Lt.useCallback)(async(h,w)=>{if(!a())return;let B={foreignId:e,events:[{event:h,properties:w}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:x,trackEventForUser:d}}var on=require("uuid");var $e=f(require("react"));var Ue=f(require("react")),yo=f(require("styled-components"));var ei=f(require("react")),ti=f(require("styled-components"));var Rr="fr-",ho="cfr-";function l(e,t){let o=`${Rr}${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+" "+ho+e}return o}function F(e){if(!e.className||e.className.indexOf(ho)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Rr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function gr(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function gt(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${gr(t)}: ${e.styleOverrides[t]};`).join(" "):""}function ve(...e){return e.filter(Boolean).join(" ")}function Co(e){return e.charAt(0).toUpperCase()+e.slice(1)}var ma=ti.default.div`
|
|
2
|
+
var ea=Object.create;var $o=Object.defineProperty;var ta=Object.getOwnPropertyDescriptor;var oa=Object.getOwnPropertyNames;var ra=Object.getPrototypeOf,ia=Object.prototype.hasOwnProperty;var na=(e,t)=>{for(var o in t)$o(e,o,{get:t[o],enumerable:!0})},Kr=(e,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of oa(t))!ia.call(e,r)&&r!==o&&$o(e,r,{get:()=>t[r],enumerable:!(i=ta(t,r))||i.enumerable});return e};var f=(e,t,o)=>(o=e!=null?ea(ra(e)):{},Kr(t||!e||!e.__esModule?$o(o,"default",{value:e,enumerable:!0}):o,e)),sa=e=>Kr($o({},"__esModule",{value:!0}),e);var sd={};na(sd,{Box:()=>ro,Button:()=>Zl,CheckBox:()=>nt,FormLabel:()=>xt,FormTextField:()=>Xo,FrigadeAnnouncement:()=>Xl,FrigadeBanner:()=>Il,FrigadeChecklist:()=>dr,FrigadeDefaultAppearance:()=>rt,FrigadeEmbeddedTip:()=>Pl,FrigadeForm:()=>Pr,FrigadeGuide:()=>il,FrigadeHeroChecklist:()=>Gs,FrigadeNPSSurvey:()=>zl,FrigadeProgressBadge:()=>ol,FrigadeProvider:()=>xn,FrigadeSupportWidget:()=>bl,FrigadeTour:()=>dl,ProgressRing:()=>Dt,Text:()=>ur,tokens:()=>ir,useFlowOpens:()=>Ae,useFlowResponses:()=>Yt,useFlows:()=>J,useOrganization:()=>tr,useUser:()=>Jt,useUserFlowStates:()=>Me});module.exports=sa(sd);var Q=f(require("react")),un=require("styled-components");var he=f(require("react"));var Ge=require("react");var It=f(require("react"));var qr="1.35.10 ";var Ve="NOT_STARTED_STEP",Z="COMPLETED_FLOW",Mo="ABORTED_FLOW",Ot="STARTED_FLOW",Xe="NOT_STARTED_FLOW",Je="COMPLETED_STEP",Uo="STARTED_STEP";function et(){let{publicApiKey:e,userId:t,apiUrl:o}=It.default.useContext(X);return{config:(0,It.useMemo)(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":qr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:(0,It.useMemo)(()=>`${o}/v1/public/`,[o])}}var la="frigade-last-call-at-",aa="frigade-last-call-data-";function Gt(){let{shouldGracefullyDegrade:e,readonly:t}=It.default.useContext(X);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return Vt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Vt();let r=la+o,n=aa+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 a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Vt()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return Vt(p)}return s?s.ok?s:Vt(s.statusText):Vt()}}function Vt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Kt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=It.default.useContext(X);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 xo=require("react");var qt=require("react");var Xr=f(require("swr"));var Yr=require("react");function Ae(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=(0,Yr.useContext)(X);function n(d,h=!1){return e[d]??h}function s(d,h){t(w=>({...w,[d]:h}))}function p(d){t(h=>{let{[d]:w,...T}=h;return{...T}})}function c(d){r.includes(d)||i(h=>[...h,d])}function a(d){return r.includes(d)}function x(d){return Object.entries(e).some(([h,w])=>w&&h!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}var Jr=f(require("swr/immutable")),pa="unknown";function Me(){let{config:e,apiUrl:t}=et(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=(0,qt.useContext)(X),{resetOpenFlowState:c}=Ae(),[a,x]=(0,qt.useState)(!1),d={data:n.map(k=>({flowId:k.id,flowState:Z,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},h=k=>fetch(k,e).then(P=>{if(P.ok)return P.json();throw new Error("Failed to fetch user flow states")}).catch(P=>(console.log(`Error fetching ${k}: ${P}. Will gracefully degrade and hide Frigade`),s(!0),d)),w=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:T,isLoading:B,mutate:g,error:A}=p?(0,Jr.default)(w,h):(0,Xr.default)(w,h,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),b=T==null?void 0:T.data;(0,qt.useEffect)(()=>{!a&&!B&&b&&x(!0)},[b,a,B]);async function S(k){if(b&&!p){let P=b.find(D=>D.flowId===k);P&&P.flowState!==Z&&(P.flowState=Z),await g(Promise.resolve({...T,data:b}),{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1})}}async function N(k,P,D){if(b){let I=b.find(O=>O.flowId===k);I&&(I.stepStates[P]=D,I.flowState=Ot),await g(Promise.resolve({...T,data:b}),{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1})}}async function y(k,P,D){if(b){let I=b.find(O=>O.flowId===k);I&&(I.lastStepId=P,I.stepStates[P]=D,I.flowState=Ot),await g({...T,data:b},{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1})}}async function m(k){if(b){let P=b.find(D=>D.flowId===k);P&&P.flowState!==Xe&&(P.flowState=Xe,P.lastStepId=pa,Object.keys(P.stepStates).forEach(D=>{P.stepStates[D].actionType=Ve,P.stepStates[D].createdAt=new Date().toISOString()}),await g({...T,data:b},{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1}),c(k))}}async function E(k,P){if(b){let D=b.find(I=>I.flowId===k);D&&D.stepStates[P]!==Ve&&(D.stepStates[P]=Ve),await g({...T,data:b},{optimisticData:{...T,data:b},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:b,isLoadingUserFlowStateData:!a,mutateUserFlowState:g,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:N,optimisticallyMarkStepNotStarted:E,optimisticallyMarkStepStarted:y,error:A}}function Yt(){let{config:e,apiUrl:t}=et(),{userFlowStatesData:o,mutateUserFlowState:i}=Me(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=(0,xo.useContext)(X),[c,a]=(0,xo.useState)(new Set),[x,d]=(0,xo.useState)(new Set),h=Gt();function w(g){let A=JSON.stringify(g);if(c.has(A))return null;c.add(A),a(c),x.add(g),d(x);let b=s==null?void 0:s.find(S=>S.flowSlug===g.flowSlug&&S.stepId===g.stepId&&S.actionType===g.actionType&&S.createdAt===g.createdAt);return h(`${t}flowResponses`,{...e,method:"POST",body:A}).then(S=>{S.status!==200&&S.status!==201?(console.log("Failed to send flow response for step "+g.stepId+". Will retry again later."),n([...r,g])):b||p(N=>[...N??[],g])})}async function T(g){g.foreignUserId&&(g.actionType===Ot||g.actionType===Xe?await w(g):g.actionType===Z?await w(g):g.actionType===Uo?await w(g):g.actionType===Je?await w(g):g.actionType===Mo?await w(g):g.actionType===Ve&&await w(g))}function B(){let g=[];return o==null||o.forEach(A=>{if(A&&A.stepStates&&Object.keys(A.stepStates).length!==0)for(let b in A.stepStates){let S=A.stepStates[b];g.push({foreignUserId:A.foreignUserId,flowSlug:A.flowId,stepId:S.stepId,actionType:S.actionType,data:{},createdAt:new Date(S.createdAt),blocked:S.blocked,hidden:S.hidden})}}),[...g,...s]}return{addResponse:T,setFlowResponses:p,getFlowResponses:B}}var Zr=f(require("swr"));var da=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Qr=e=>{let t=da.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=ca(i,"'","");n.startsWith("flow_")&&(o=n)}),o},ca=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function J(){let{config:e,apiUrl:t}=et(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:x,setShouldGracefullyDegrade:d,readonly:h}=(0,Ge.useContext)(X),w={data:[]},{verifySDKInitiated:T}=Kt(),{addResponse:B,getFlowResponses:g}=Yt(),A=u=>fetch(u,e).then(C=>C.ok?C.json():(console.log(`Error fetching ${u} (${C.status}): ${C.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),w)).catch(C=>(console.log(`Error fetching ${u}: ${C}. Will gracefully degrade and hide Frigade`),d(!0),w)),{mutateUserFlowState:b,userFlowStatesData:S,isLoadingUserFlowStateData:N,optimisticallyMarkFlowCompleted:y,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:E,optimisticallyMarkStepNotStarted:k,optimisticallyMarkStepStarted:P}=Me(),{data:D,error:I,isLoading:O}=(0,Zr.default)(n?`${t}flows${h?"?readonly=true":""}`:null,A,{keepPreviousData:!0});(0,Ge.useEffect)(()=>{if(I){console.error(I);return}D&&D.data&&i(D.data)},[D,I]);function U(u){if(O)return null;let C=o.find(v=>v.slug===u);return!C&&o.length>0&&!N&&!O?(console.log(`Flow with id ${u} not found`),null):(C==null?void 0:C.active)===!1?null:C}function M(u){var H;if(!U(u))return[];let C=U(u).data;return C?(C=se(C),(((H=JSON.parse(C))==null?void 0:H.data)??[]).map(z=>{let Ye=me(z);return{handleSecondaryButtonClick:()=>{z.skippable===!0&&G(u,z.id,{skipped:!0})},...z,complete:Pe(u,z.id)===Je||Ye>=1,blocked:pe(u,z.id),hidden:$(u,z.id),handlePrimaryButtonClick:()=>{(!z.completionCriteria&&(z.autoMarkCompleted||z.autoMarkCompleted===void 0)||z.completionCriteria&&z.autoMarkCompleted===!0)&&G(u,z.id)},progress:Ye}}).filter(z=>z.hidden!==!0)):[]}function se(u){return u.replaceAll(/\${(.*?)}/g,(C,v)=>s[v]===void 0?"":String(s[v]).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 _(u){if(!U(u))return[];let C=U(u).data;return C?(C=se(C),JSON.parse(C)??{}):[]}function le(u,C){p(v=>({...v,[u]:C}))}function ke(u){!N&&!O&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(C=>{le(C,u[C])})}let ee=(0,Ge.useCallback)(async(u,C,v)=>{if(!T())return;let H={foreignUserId:r,flowSlug:u,stepId:C,actionType:Uo,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};te(H)&&(await P(u,C,H),B(H))},[r,S]),V=(0,Ge.useCallback)(async(u,C,v)=>{if(!T())return;let H={foreignUserId:r,flowSlug:u,stepId:C,actionType:Ve,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};te(H)&&(await k(u,C),B(H))},[r,S]),G=(0,Ge.useCallback)(async(u,C,v)=>{if(!T())return;let H={foreignUserId:r,flowSlug:u,stepId:C,actionType:Je,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};te(H)&&(await E(u,C,H),B(H))},[r,S]),Ee=(0,Ge.useCallback)(async(u,C)=>{if(!T()||fe(u)===Xe)return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Xe,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),te(v)&&B(v)},[r,S]),je=(0,Ge.useCallback)(async(u,C)=>{if(!T())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Ot,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};te(v)&&B(v)},[r,S]),Oe=(0,Ge.useCallback)(async(u,C)=>{if(!T())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Z,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};te(v)&&(await y(u),B(v))},[r,S]),be=(0,Ge.useCallback)(async(u,C)=>{if(!T())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Mo,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};te(v)&&(await y(u),B(v))},[r,S]);function te(u){var C;if(!S&&u.actionType===Ve)return!1;if(S){let v=S.find(H=>H.flowId===u.flowSlug);if(u.actionType===Ve&&(!(v!=null&&v.stepStates[u.stepId])||v.stepStates[u.stepId].actionType===Ve)||v&&((C=v.stepStates[u.stepId])==null?void 0:C.actionType)===u.actionType||v&&v.flowState===Z&&u.actionType===Z)return!1}return!0}function Pe(u,C){let v=K(u,C);return N?null:v?v.actionType:Ve}function pe(u,C){let v=K(u,C);return v?v.blocked:!1}function $(u,C){let v=K(u,C);return v?v.hidden:!1}function K(u,C){if(N)return null;let v=S==null?void 0:S.find(H=>H.flowId===u);return!v||!v.stepStates[C]?null:v.stepStates[C]??null}function q(u){var v;if(N||!S)return null;if(fe(u)===Xe)return M(u)[0]??null;let C=(v=S.find(H=>H.flowId===u))==null?void 0:v.lastStepId;return C?M(u).find(H=>H.id===C):null}function ce(u){let C=q(u);if(!C)return 0;let v=M(u).findIndex(H=>H.id===C.id)??0;return Pe(u,C.id)===Je&&v<M(u).length-1?v+1:v}function me(u){if(!u.completionCriteria)return;let C=Qr(u.completionCriteria);if(C===null)return;let v=ft(C),H=qe(C);return H===0?void 0:v/H}function fe(u){let C=S==null?void 0:S.find(v=>v.flowId===u);return C?C.flowState:null}function ft(u){let C=M(u);return C.length===0?0:C.filter(H=>Pe(u,H.id)===Je).length}function qe(u){return M(u).length}function Ht(u){let C=o.find(v=>v.slug===u);return C?JSON.parse(C.data):null}function At(u){if(h)return!1;if(N)return!0;if(u!=null&&u.targetingLogic&&S){let C=S.find(v=>v.flowId===u.slug);if(C)return C.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function jt(u){return!At(U(u))}function Nt(){r&&b()}return{getFlow:U,getFlowData:Ht,isLoading:N||O,getStepStatus:Pe,getFlowSteps:M,getCurrentStepIndex:ce,markStepStarted:ee,markStepCompleted:G,markFlowNotStarted:Ee,markFlowStarted:je,markFlowCompleted:Oe,markFlowAborted:be,markStepNotStarted:V,getFlowStatus:fe,getNumberOfStepsCompleted:ft,getNumberOfSteps:qe,targetingLogicShouldHideFlow:At,setCustomVariable:le,updateCustomVariables:ke,customVariables:s,getStepOptionalProgress:me,getFlowMetadata:_,isStepBlocked:pe,isStepHidden:$,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:jt,refresh:Nt}}var Lt=require("react");var Xt="guest_";function Jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=(0,Lt.useContext)(X),{config:n,apiUrl:s}=et(),{mutateUserFlowState:p}=Me(),c=Gt(),{verifySDKInitiated:a}=Kt();(0,Lt.useEffect)(()=>{if(e&&!t){if(e.startsWith(Xt))return;let h=`frigade-user-registered-${e}`;localStorage.getItem(h)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(h,"true"))}},[e,r,t]);let x=(0,Lt.useCallback)(async h=>{if(!a())return;let w={foreignId:e,properties:h};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(w)}),i(T=>({...T,...h})),p()},[e,n,r,p]),d=(0,Lt.useCallback)(async(h,w)=>{if(!a())return;let B={foreignId:e,events:[{event:h,properties:w}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:x,trackEventForUser:d}}var on=require("uuid");var $e=f(require("react"));var Ue=f(require("react")),yo=f(require("styled-components"));var ei=f(require("react")),ti=f(require("styled-components"));var Rr="fr-",ho="cfr-";function l(e,t){let o=`${Rr}${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+" "+ho+e}return o}function F(e){if(!e.className||e.className.indexOf(ho)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Rr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function gr(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function gt(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${gr(t)}: ${e.styleOverrides[t]};`).join(" "):""}function ve(...e){return e.filter(Boolean).join(" ")}function Co(e){return e.charAt(0).toUpperCase()+e.slice(1)}var ma=ti.default.div`
|
|
3
3
|
display: flex;
|
|
4
4
|
justify-content: center;
|
|
5
5
|
position: fixed;
|