userflow.js-self-hosted 0.1.1002912 → 0.1.1002918
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/ResourceCenterApp.js +1 -1
- package/ResourceCenterAssistantChat.js +1 -1
- package/bubble-frame.css +14 -6
- package/flow-host.css +3 -0
- package/hash.txt +1 -1
- package/package.json +1 -1
- package/stylesheets.js +1 -1
- package/userflow.js +1 -1
package/ResourceCenterApp.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as e,C as t,i as r,c as s,j as n,k as o,E as c,l as a,m as l,n as i,S as u,p as d,_ as m}from"./userflow.js";import{r as f}from"./vendor.react.js";import{u as w,i as h}from"./client-context.js";import{u as E,w as b,C as k}from"./Icons.js";import{b as p,h as v,s as g,B as C,R as j,a as S,n as y,f as N}from"./BubbleToolbar.js";import{M as _,g as I,a as x}from"./flow-condition-types.js";import{u as T,a as R,g as A}from"./stylesheets.js";import{u as B,F as L,S as H}from"./logomark.js";import{o as M}from"./vendor.obj-str.js";import{D as F}from"./DynamicIcon.js";import{f as P,C as W}from"./ChecklistUI.js";import{f as O,a as $,b as U,c as D,d as z,e as q,g as K,h as V,i as G,j as Q}from"./vendor.fortawesome.pro-regular-svg-icons.js";import{F as Z}from"./vendor.fortawesome.react-fontawesome.js";import{u as Y}from"./vendor.react-i18next.js";function J(t){return t!==e.ACTION&&t!==e.ASSISTANT&&t!==e.CONTACT&&t!==e.FLOWS&&t!==e.KNOWLEDGE_BASE&&t!==e.SUBPAGE}const X=window,ee={[t.CRISP]:{configure:({onShow:e,onHide:t})=>{X.$crisp||(X.$crisp=[]),X.$crisp.push(["do","chat:hide"]);let r=!1,s=!1;const n=()=>{r||s?(X.$crisp.push(["do","chat:show"]),e()):(X.$crisp.push(["do","chat:hide"]),t())},o=()=>{r=!0,n()};X.$crisp.push(["on","chat:opened",o]);const c=()=>{r=!1,n()};X.$crisp.push(["on","chat:closed",c]);const a=()=>{s=!0,n()};X.$crisp.push(["on","message:received",a]);const l=window.setInterval((()=>{const e=(()=>{const e=document.getElementById("crisp-chatbox");if(!e||"block"!==window.getComputedStyle(e).display)return!1;const t=e.querySelector('[data-id="new_messages"]');return!(!t||"block"!==window.getComputedStyle(t).display)})();e!==s&&(s=e,n())}),200);return()=>{X.$crisp.push(["off","chat:opened",o]),X.$crisp.push(["off","chat:closed",c]),X.$crisp.push(["off","message:received",a]),window.clearInterval(l)}},show:()=>{X.$crisp.push(["do","chat:show"]),X.$crisp.push(["do","chat:open"])},hide:()=>{X.$crisp.push(["do","chat:hide"]),X.$crisp.push(["do","chat:close"])}},[t.CUSTOM]:{configure:()=>()=>{},show:({block:e})=>{try{new Function('"use strict";\n'+e.chatCode)()}catch(t){console.error(`Userflow.js: Showing custom chat provider failed. Code: ${e.chatCode}`,t)}},hide:()=>{}},[t.FRESHCHAT]:{configure:({onShow:e,onHide:t})=>{if(!X.fcWidget)throw new Error("Freshchat is not installed");let r=!1,s=!1;const n=()=>{r||s?e():t()},o=()=>{r=!0,n()};X.fcWidget.on("widget:opened",o);const c=()=>{r=!1,n()};X.fcWidget.on("widget:closed",c);const a=()=>{const e=!!document.querySelector("#fc_frame.h-open-notify");e!==s&&(s=e,n())},l=window.setInterval(a,200);return X.fcWidget.on("unreadCount:notify",a),()=>{X.fcWidget.off("widget:opened",o),X.fcWidget.off("widget:closed",c),X.fcWidget.off("unreadCount:notify",a),window.clearInterval(l)}},show:()=>{X.fcWidget.open()},hide:()=>{X.fcWidget.close()}},[t.HELPSCOUT]:{configure:({onShow:e,onHide:t})=>{if(!X.Beacon)throw new Error("Help Scout is not installed");re();let r=!1,s=!1;const n=()=>{r||s?(te(),e()):(re(),t())},o=()=>{r=!0,n()};X.Beacon("on","open",o),X.Beacon("info")?.status.isOpened&&o();const c=()=>{r=!1,n()};X.Beacon("on","close",c);const a=window.setInterval((()=>{const e=!!document.querySelector(".BeaconNotificationsFrame");e!==s&&(s=e,n())}),200);return()=>{X.Beacon("off","open",o),X.Beacon("off","close",c),window.clearInterval(a)}},show:()=>{te(),X.Beacon("open")},hide:()=>{re(),X.Beacon("close")}},[t.HUBSPOT]:{configure:({onShow:e,onHide:t})=>{const r=()=>{const r=document.getElementById("hubspot-messages-iframe-container");if(!X.HubSpotConversations||!r)return;window.clearInterval(n),se?ne():oe();let o=!1,c=!1;const a=()=>{o||c?(ne(),e()):(oe(),t())},l=()=>{const e=!!document.querySelector("#hubspot-messages-iframe-container .hs-shadow-container.active");e!==o&&(o=e,a())},i=new _(l);i.observe(r,{attributes:!0,subtree:!0,attributeFilter:["class"]}),l();const u=({unreadCount:e})=>{const t=e>0;t!==c&&(c=t,a())};X.HubSpotConversations.on("unreadConversationCountChanged",u),s=()=>{i.disconnect(),X.HubSpotConversations.off("unreadConversationCountChanged",u)}};let s=()=>{window.clearInterval(n)};const n=window.setInterval(r,100);return r(),()=>{s()}},show:()=>{ne(),X.HubSpotConversations.widget.open()},hide:()=>{oe(),X.HubSpotConversations.widget.close()}},[t.INTERCOM]:{configure:({onShow:e,onHide:t})=>{if(!X.Intercom)throw new Error("Intercom is not installed");return ue(),function(){if(ce)return;ce=!0;let e=!1,t=!1;const r=()=>{ie();for(const e of ae)e()},s=()=>{ue();for(const e of le)e()},n=()=>{e||t?r():s()};X.Intercom("onShow",(()=>{e=!0,n()})),X.Intercom("onHide",(()=>{e=!1,n()}));const o=()=>{const e=!!document.querySelector('iframe[name="intercom-borderless-frame"], iframe[name="intercom-notifications-frame"]');t!==e&&(t=e,n())};X.Intercom("onUnreadCountChange",(()=>{o()})),window.setInterval(o,200)}(),ae.add(e),le.add(t),()=>{ae.delete(e),le.delete(t)}},show:()=>{ie(),X.Intercom("show")},hide:()=>{ue(),X.Intercom("hide")}},[t.ZENDESK]:{configure:({onShow:e,onHide:t})=>{if(!X.zE)throw new Error("Zendesk is not installed");!function(){if(de)return;de=!0,X.zE("webWidget:on","open",(()=>{for(const e of me)e()})),X.zE("webWidget:on","close",(()=>{for(const e of fe)e()})),X.zE("webWidget:on","chat:unreadMessages",(e=>{for(const t of we)t(e)}))}(),X.zE("webWidget","hide"),X.zE("webWidget","close");let r=!1,s=!1;const n=()=>{r||s?(X.zE("webWidget","show"),e()):(X.zE("webWidget","hide"),t())},o=()=>{r=!0,s=!1,n()};me.add(o);const c=()=>{r=!1,s=!1,n()};fe.add(c);const a=e=>{const t=e>0;t!==s&&(s=t,n())};return we.add(a),()=>{me.delete(o),fe.delete(c),we.delete(a)}},show:()=>{X.zE("webWidget","show"),X.zE("webWidget","open")},hide:()=>{X.zE("webWidget","hide"),X.zE("webWidget","close")}},[t.ZENDESK_MESSENGER]:{configure:({onShow:e,onHide:t})=>{if(!X.zE)throw new Error("Zendesk is not installed");let r=!1;const s=window.setInterval((()=>{const s=(()=>{const e=document.querySelector('iframe[title="Messaging window"]');return!!e?.parentElement&&"0px"!==window.getComputedStyle(e.parentElement).height})();s!==r&&(r=s,r?e():t())}),200);return()=>{window.clearInterval(s)}},show:()=>{X.zE("messenger","open")},hide:()=>{X.zE("messenger","close")}}};function te(){X.Beacon("config",{display:{style:"icon"}})}function re(){X.Beacon("config",{display:{style:"manual"}})}let se=!1;function ne(){se=!0;document.getElementById("hubspot-messages-iframe-container")?.style.setProperty("visibility","visible","important")}function oe(){se=!1;document.getElementById("hubspot-messages-iframe-container")?.style.setProperty("visibility","hidden","important")}let ce=!1,ae=new Set,le=new Set;function ie(){X.Intercom("update",{hide_default_launcher:!1,vertical_padding:20})}function ue(){X.Intercom("update",{hide_default_launcher:!0,vertical_padding:100})}let de=!1,me=new Set,fe=new Set,we=new Set;const he=e=>f.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100"},e),f.createElement("path",{fill:"currentColor",d:"M24.049 79.74h36.003c8.185 0 15.985-6.621 17.43-14.814l6.091-34.556h3.997c8.149 0 13.645 6.63 12.2 14.815l-7.051 40C91.274 93.363 83.474 100 75.288 100h-40c-8.185 0-13.645-6.667-12.2-14.815l.96-5.444Z"}),f.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M12.437 69.63h40c8.148 0 15.978-6.637 17.422-14.815l7.052-40C78.355 6.63 72.896 0 64.711 0h-40C16.533 0 8.726 6.63 7.281 14.815l-7.052 40C-1.215 62.963 4.252 69.63 12.437 69.63Zm33.628-33.798c3.756-2.064 8.725-4.795 9.907-11.844C57.385 15.458 50.065 8.983 42.168 9c-7.452 0-12.771 3.195-17.508 8.892-.858 1.034-.884 2.45-.053 3.212l3.472 3.196c.847.767 2.25.589 3.176-.406 2.842-3.068 4.869-4.83 8.51-4.83 2.864 0 6.077 1.934 5.59 4.847-.37 2.223-2.292 3.334-5.4 5.001l-.28.151c-3.582 1.92-8.134 4.362-9.124 10.247l-.16.956c-.055.28-.05.571.014.85.065.278.188.538.362.76.173.222.391.4.639.522.247.121.518.183.79.18h6.744a2.709 2.709 0 0 0 1.712-.688c.481-.426.81-1.01.934-1.657l.095-.556c.266-1.582 2.101-2.59 4.384-3.845ZM32.837 59c3.552 0 6.955-3.034 7.58-6.769.63-3.729-1.742-6.763-5.293-6.763-3.552 0-6.934 3.028-7.58 6.763C26.9 55.966 29.286 59 32.837 59Z"})),Ee=({center:e,fadeIn:t})=>{const r=12;return f.createElement("div",{className:M({"userflowjs-spinner":!0,"userflowjs-spinner--center":!!e,"userflowjs-spinner--fade-in":!!t})},f.createElement("svg",{viewBox:"0 0 24 24",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},f.createElement("circle",{className:"userflowjs-spinner__bg",fill:"none",cx:r,cy:r,r:10,style:{strokeWidth:"4px"}}),f.createElement("circle",{className:"userflowjs-spinner__fill",fill:"none",cx:r,cy:r,r:10,transform:"translate(12, 12) rotate(-90) translate(-12, -12)",style:{strokeWidth:"4px",strokeDasharray:20*Math.PI*.25+"px, 1000"}})))};function be(e){const t=w(),[r,s]=f.useState(!0),[n,o]=f.useState(!1),[c,a]=f.useState(null),[l,i]=f.useState(null),[u,d]=f.useState(null),m=f.useRef(0),h=f.useRef(null),E=f.useRef((()=>{}));return f.useEffect((()=>{const r=JSON.stringify(e);if(r===h.current)return;h.current=r;const n=++m.current;let c,l;let u=!1;E.current=async(e,r)=>{if(!u){u=!0,o(!0);try{const s=e(c,l);l=s;const i=await t.send(s,{handlesRejection:!0});if(n!==m.current)return;c=r(c,i),a(c),d(null)}catch(s){if(n!==m.current)return;d(s)}finally{u=!1,o(!1)}}},(async()=>{s(!0);try{l=e;const r=await t.send(e,{handlesRejection:!0});if(n!==m.current)return;c=r,a(c),i(e),d(null)}catch(r){if(n!==m.current)return;d(r)}finally{s(!1)}})()}),[t,e]),{loading:r,loadingMore:n,data:c,messageForData:l,error:u,loadMore:E.current}}function ke(e,t){const[r,s]=f.useState(e),n=f.useRef(void 0),o=f.useCallback((e=>{window.clearTimeout(n.current),s(e),t(e)}),[t]),c=f.useCallback((e=>{window.clearTimeout(n.current),s(e),n.current=window.setTimeout((()=>{t(e)}),200)}),[t]);return f.useEffect((()=>()=>{window.clearTimeout(n.current)}),[]),[r,c,o]}const pe=({textareaRef:e,value:t,onChange:r,onBlur:s,onKeyDown:n,onMouseDown:o,placeholder:c,disabled:a,readOnly:l,className:i,mirrorClassName:u,textareaClassName:d,children:m})=>{let w=t||c||"";return(""===w||w.endsWith("\n"))&&(w+=" "),i=i||"growing-textarea",u=u||i+"__mirror",f.createElement("div",{className:i},f.createElement("div",{className:u+" "+(d||"")},w),f.createElement("textarea",{ref:e,value:t,onChange:e=>r&&r(e.target.value),onBlur:s,onKeyDown:n,onMouseDown:o,placeholder:c,disabled:a,readOnly:l,className:d}),m)},ve=({textareaRef:e,value:t,onChange:r,onSubmit:s,placeholder:n,readOnly:o})=>{const c=()=>{s&&s()};return f.createElement("div",{className:"userflowjs-assistant-chat-input"},f.createElement(pe,{textareaRef:e,className:"userflowjs-growing-textarea",mirrorClassName:"userflowjs-growing-textarea__mirror",textareaClassName:"userflowjs-textarea userflowjs-assistant-chat-input__textarea",placeholder:n,readOnly:o,value:t||"",onChange:r,onKeyDown:e=>{e.shiftKey||"Enter"!==e.key||(e.preventDefault(),c())}}),f.createElement("button",{className:"userflowjs-assistant-chat-input__submit",onClick:()=>c()},f.createElement(Z,{icon:O})))},ge=async()=>(await m((()=>import("./ResourceCenterAssistantChat.js")),[new URL("ResourceCenterAssistantChat.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("vendor.fortawesome.react-fontawesome.js",import.meta.url).toString(),new URL("vendor.fortawesome.fontawesome-svg-core.js",import.meta.url).toString(),new URL("vendor.prop-types.js",import.meta.url).toString(),new URL("vendor.dompurify.js",import.meta.url).toString(),new URL("vendor.marked.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("userflow.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString(),new URL("BubbleToolbar.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("Icons.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("logomark.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("DynamicIcon.js",import.meta.url).toString(),new URL("ChecklistUI.js",import.meta.url).toString()])).ResourceCenterAssistantChat,Ce=({session:a,isOpen:l,flowSession:i,checklistSession:u})=>{const d=w(),{t:m}=Y(),{company:v}=a.flow,{version:g}=a,C=g.resourceCenter,j=T(g.theme),S=a.locale?a.locale.standardLocaleId:a.version.theme.languageId;f.useEffect((()=>{h.changeLanguage(S)}),[S]);const{loaded:y}=R(window,N,j),[x,W]=f.useState(!1),O=y&&x,[q,K]=f.useState(I()),V=f.useCallback((()=>{K(I())}),[]);B(V);const{zIndex:G,bringToFront:Q}=E(),Z=f.useRef(null),[X,te]=f.useState(null),[re,se]=f.useState(null),[ne,oe]=f.useState(null),ce=f.useRef(null),[ae,le]=f.useState(null),[ie,ue]=f.useState(null),[de,me]=f.useState(null),[fe,we]=f.useState(0),[Ee,be]=f.useState(0),ke=f.useCallback((()=>{re&&we(re.offsetWidth),be((ne?.offsetHeight||0)+(ae?.offsetHeight||0)+(ie?.offsetHeight||0)+(de?.offsetHeight||0))}),[re,ne,ae,ie,de]);f.useLayoutEffect((()=>{if(!X||"function"!=typeof _)return;const e=new _((()=>{ke()}));return e.observe(X,{childList:!0,attributes:!0,subtree:!0}),()=>{e.disconnect()}}),[X,ke]),f.useLayoutEffect((()=>{ke()}));const[pe,ve]=f.useState(!1),ge=f.useRef(),Ce=f.useCallback((()=>{ve(!0),window.clearTimeout(ge.current),ge.current=window.setTimeout((()=>{ve(!1)}),j.resourceCenterTransitionDuration)}),[j.resourceCenterTransitionDuration]);f.useEffect((()=>()=>{window.clearTimeout(ge.current)}),[]);const ye=f.useCallback((()=>{Q(),Ce(),d.openResourceCenter()}),[Q,d,Ce]),Ne=f.useCallback((()=>{Ce(),d.closeResourceCenter()}),[d,Ce]),[Re,Ae]=f.useState(!1);f.useEffect((()=>{if(Re){if(l){const e='button:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"]), input, textarea';let t=ae?.querySelector(".userflowjs-assistant-chat-input textarea")||ae?.querySelector(e)||ne?.querySelector(e);if(t){const e=t.closest&&t.closest(".userflowjs-resource-center-checklist")||null;e?P(e):t.focus({preventScroll:!0})}}else re?.focus({preventScroll:!0});Ae(!1)}}),[Re,l,ae,ne,re]),f.useEffect((()=>{const e=X?.ownerDocument.defaultView;if(!l||!e)return;const t=e=>{"Escape"===e.key&&(Ne(),Ae(!0))};return e.addEventListener("keydown",t),()=>e.removeEventListener("keydown",t)}),[l,X,Ae,Ne]);const[Le,Pe]=f.useState(null),We=f.useCallback(((e,t)=>{Pe(e),0===t?.detail&&Ae(!0)}),[]),Oe=f.useMemo((()=>C.blocks.filter((t=>!(t.type===e.CHECKLIST&&!u)&&(!t.hiddenWhenFlowsActive||!t.hiddenWhenFlowsActive.some((e=>e===i?.flow.id||e===u?.flow.id)))))),[C,i,u]),$e=f.useMemo((()=>je(Oe)),[Oe]),Ue=f.useMemo((()=>u&&C.blocks.some((t=>t.type===e.CHECKLIST))?r(u):0),[C,u]),De=f.useMemo((()=>C.blocks.find((t=>t.type===e.CONTACT&&t.chatEnabled&&t.chatProvider))),[C]),[ze,qe]=f.useState(!1),Ke=f.useCallback((()=>{d.closeResourceCenter(),De&&De.chatProvider!==t.CUSTOM&&qe(!0)}),[d,De]),Ve=f.useCallback((()=>{qe(!1)}),[]),Ge=f.useCallback((()=>{if(De)try{ee[De.chatProvider].hide({block:De}),Ve()}catch(e){console.error(`Userflow.js: Error when hiding ${De.chatProvider}:`,e)}}),[De,Ve]);f.useEffect((()=>{if(!De)return;s.autoHide3pDisabled=!0;const e=ee[De.chatProvider];try{const t=e.configure({block:De,onShow:Ke,onHide:Ve});return()=>{t()}}catch(t){return void console.error(`Userflow.js: Error when configuring ${De.chatProvider}:`,t)}}),[De,Ke,Ve]),f.useEffect((()=>{l&&Ge()}),[Ge,l]);const Qe=!!Le&&("search"===Le.kind||"flows"===Le.kind||"knowledgeBase"===Le.kind||"assistant"===Le.kind),Ze={zIndex:null!=j.resourceCenterZIndex?j.resourceCenterZIndex:l?G:b(k),width:l?void 0:fe+"px",height:l?Math.min(Qe?540:Ee,q-2*j.resourceCenterPaddingY)+"px":void 0,position:O?void 0:"absolute",visibility:O&&!ze?void 0:"hidden"},Ye=j.resourceCenterDisplayChecklistProgress&&u&&Ue>0?f.createElement("div",{"data-testid":"resource-center-launcher-badge",className:"userflowjs-resource-center-launcher-badge"},Ue,f.createElement("div",{className:"userflowjs-a11y-only"},"uncompleted tasks")):null;let Je="",Xe="";return j.resourceCenterLauncherTextMode===n.CHECKLIST_OVERRIDE&&u&&Ue>0?Je=u.version.checklist?.launcherText||"Get Started":j.resourceCenterLauncherTextMode!==n.NONE&&(Xe=C.buttonText),f.createElement("div",{"data-testid":"resource-center-app",className:"userflowjs-resource-center userflowjs-theme-root",style:A(j),dir:h.dir()},f.createElement(L,{elRef:Z,className:M({"userflowjs-resource-center-frame":!0,"userflowjs-resource-center-frame--fixed":!0,[`userflowjs-resource-center-frame--placement-${j.resourceCenterPlacement.toLowerCase().replace(/_/g,"-")}`]:!0,"userflowjs-resource-center-frame--animating":pe,"userflowjs-resource-center-frame--open":l,"userflowjs-resource-center-frame--closed":!l}),style:{...Ze},stylesheet:p,theme:j,onStylesheetsLoad:W},O&&f.createElement(f.Fragment,null,f.createElement("div",{ref:te,className:M({"userflowjs-resource-center-frame-root":!0,[`userflowjs-resource-center-frame-root--placement-${j.resourceCenterPlacement.toLowerCase().replace(/_/g,"-")}`]:!0,"userflowjs-resource-center-frame-root--animating":pe,"userflowjs-resource-center-frame-root--open":l,"userflowjs-resource-center-frame-root--closed":!l}),role:l?"dialog":void 0,"aria-label":l?C.headerText:void 0},f.createElement("div",{className:"userflowjs-resource-center-launcher-container"},f.createElement("button",{ref:se,className:"userflowjs-resource-center-launcher-button",onClick:()=>{ye(),Ae(!0)},"aria-label":`Open ${C.headerText}`},Ye,Je&&f.createElement("div",{"data-testid":"resource-center-launcher-text",className:"userflowjs-resource-center-launcher-text"},Je),(Ye||Je)&&f.createElement("div",{className:"userflowjs-resource-center-launcher-divider"}),Xe&&f.createElement("div",{"data-testid":"resource-center-launcher-text",className:"userflowjs-resource-center-launcher-text"},Xe),f.createElement("div",{className:"userflowjs-resource-center-launcher-icon"},j.resourceCenterLauncherIconType===o.PLAINTEXT?"?":f.createElement(he,null)))),f.createElement("div",{ref:ce,className:"userflowjs-resource-center-body"},f.createElement("div",{ref:le,className:M({"userflowjs-resource-center-body-content":!0,"userflowjs-resource-center-body-content--padding":"assistant"!==Le?.kind,"userflowjs-resource-center-body-content--same-background":j.sameBackground,"userflowjs-resource-center-body-content--with-made-with-userflow":v.resourceCenterBranding})},l&&f.createElement(f.Fragment,null,Le?"search"===Le.kind?f.createElement(_e,{session:a,navigate:We}):"email"===Le.kind?f.createElement(Ie,{block:Le.block,session:a}):"phone"===Le.kind?f.createElement(xe,{block:Le.block,session:a}):"flows"===Le.kind?f.createElement(Te,{block:Le.block,initialQ:Le.initialQ,session:a,navigate:We}):"knowledgeBase"===Le.kind?f.createElement(Be,{block:Le.block,initialQ:Le.initialQ,session:a,bodyRef:ce}):"subpage"===Le.kind?f.createElement(He,{block:Le.block,session:a}):"assistant"===Le.kind?f.createElement(Me,{block:Le.block,initialUserContent:Le.initialUserContent,session:a}):null:f.createElement(f.Fragment,null,Oe.map(((e,t)=>{const r=Se[e.type],s=Oe[t+1];return r?f.createElement(f.Fragment,{key:e.id},f.createElement(r.View,{session:a,flowSession:i,checklistSession:u,block:e,navigate:We,onChatShow:Ke}),s&&(n=e.type,o=s.type,J(n)||J(o))&&f.createElement("div",{className:"userflowjs-resource-center-divider"})):null;var n,o})))))),v.resourceCenterBranding&&f.createElement("div",{className:"userflowjs-resource-center-made-with-userflow"},f.createElement("div",{className:"userflowjs-resource-center-made-with-userflow-content",ref:ue},f.createElement("a",{href:"https://userflow.com/?utm_source=made-with-userflow&utm_medium=link&utm_campaign=made-with-userflow-"+v.slug+"&utm_content=resource-center",target:"_blank",rel:"noopener noreferrer"},f.createElement(H,null),f.createElement("div",null,"Made with Userflow")))),a.draftMode&&f.createElement("div",{className:"userflowjs-resource-center-preview"},f.createElement("div",{ref:me,className:"userflowjs-resource-center-preview-content"},f.createElement("div",{className:"userflowjs-resource-center-preview-text"},"Preview"),f.createElement("button",{className:"userflowjs-resource-center-preview-button",onClick:()=>{d.endFlow(a,{endReason:c.USER_CLOSED})}},f.createElement(F,{icon:$})))),f.createElement("div",{className:"userflowjs-resource-center-header"},f.createElement("div",{ref:oe,className:"userflowjs-resource-center-header-content"},null==Le?f.createElement("div",{className:"userflowjs-resource-center-header-text"},C.headerText):f.createElement("button",{className:"userflowjs-resource-center-icon-button",onClick:e=>We(null,e)},f.createElement("div",{className:"userflowjs-rtl-mirrored"},f.createElement(F,{icon:U})),f.createElement("div",{className:"userflowjs-resource-center-icon-button__text"},m("resource_center.back"))),f.createElement("div",{className:"flex-1"}),$e.length>0&&f.createElement("button",{className:"userflowjs-resource-center-icon-button",onClick:()=>{let e={kind:"search"};if(1===$e.length){const t=$e[0],r=Se[t.type];r.routeTo&&(e=r.routeTo({block:t}))}"search"===Le?.kind?We(null):(Fe(d,a,null,"Search icon"),We(e))},"aria-label":"Search"},f.createElement(F,{icon:D})),f.createElement("button",{className:"userflowjs-resource-center-icon-button userflowjs-resource-center-close-button",onClick:e=>{Ne(),0===e.detail&&Ae(!0)},"aria-label":`Close ${C.headerText}`},f.createElement(F,{icon:z}))))))))};function je(e){return e.filter((e=>{const t=Se[e.type];return t.isSearchable?t.isSearchable(e):!!t.search}))}const Se={[e.ACTION]:{View:e=>{const{block:t,session:r,flowSession:s,checklistSession:n}=e,o=w(),[c,l]=f.useState(!1),i=s?.id,u=n?.id;return f.useEffect((()=>{l(!1)}),[i,u]),f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:c?void 0:()=>{Fe(o,r,t);const e=t.actions.find((e=>e.type===a.START_FLOW));if(e){e.otherFlow?.id!==n?.flow.id&&l(!0)}else o.closeResourceCenter();v(o,r,t.actions)},disabled:c},f.createElement(ye,{...e}),f.createElement(Ne,{...e}),c&&f.createElement(Ee,null))}},[e.ASSISTANT]:{View:e=>{const{block:t,session:r,navigate:s}=e,n=w(),[o,c]=f.useState("");return t.assistantAppearance===l.INPUT?f.createElement("div",{className:"userflowjs-resource-center-assistant-block"},f.createElement(ve,{value:o,onChange:c,placeholder:g(t.name,{lookupAttribute:x(r.data)}),onSubmit:()=>{Fe(n,r,t),s({kind:"assistant",block:t,initialUserContent:o})}})):f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:()=>{Fe(n,r,t),s({kind:"assistant",block:t,initialUserContent:""})}},f.createElement(ye,{...e}),f.createElement(Ne,{...e}))}},[e.CHECKLIST]:{View:({checklistSession:e})=>f.createElement("div",{"data-testid":"resource-center-checklist",className:"userflowjs-resource-center-checklist"},f.createElement(W,{session:e}),f.createElement(C,{draftMode:!!e.draftMode&&"CHECKLIST PREVIEW"}))},[e.CONTACT]:{View:e=>{const{block:t,session:r,navigate:s,onChatShow:n}=e,o=w(),c=[];return t.emailEnabled&&c.push({icon:V,label:"Email",isRoute:!0,onClick:e=>{Fe(o,r,t,"Email"),s({kind:"email",block:t},e)}}),t.phoneEnabled&&c.push({icon:G,label:"Phone",isRoute:!0,onClick:e=>{Fe(o,r,t,"Phone"),s({kind:"phone",block:t},e)}}),t.chatEnabled&&c.push({icon:Q,label:"Live-chat",isRoute:!1,onClick:()=>{if(Fe(o,r,t,"Chat"),t.chatProvider){const r=ee[t.chatProvider];try{r.show({block:t})}catch(e){console.error(`Userflow.js: Error when showing ${t.chatProvider}:`,e)}n()}else r.draftMode&&window.alert("You have not selected a chat provider. Go to the resource center builder in Userflow. Click the Contact block. Pick a chat provider in the side panel.")}}),f.createElement("div",{className:M({"userflowjs-resource-center-block":!0,"userflowjs-resource-center-block--clickable":1===c.length}),onClick:1===c.length?c[0].onClick:void 0},1===c.length&&f.createElement("div",{className:"userflowjs-resource-center-block-icon"},f.createElement(F,{icon:c[0].icon})),f.createElement(Ne,{...e}),c.length>1&&c.map((({icon:e,label:t,onClick:r},s)=>f.createElement("button",{key:s,className:"userflowjs-resource-center-icon-button",onClick:r,"aria-label":t},f.createElement(F,{icon:e})))),1===c.length&&c[0].isRoute&&f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q})))}},[e.FLOWS]:{View:e=>{const{block:t,session:r,navigate:s}=e,n=w();return f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:e=>{Fe(n,r,t),s({kind:"flows",block:t},e)}},f.createElement(ye,{...e}),f.createElement(Ne,{...e}),f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q})))},routeTo:({block:e,initialQ:t})=>({kind:"flows",block:e,initialQ:t}),isSearchable:e=>!!e.searchEnabled,search:async({client:e,session:t,block:r,q:s})=>{const{flows:n}=await e.send({kind:"ListResourceCenterBlockFlows",sessionId:t.id,blockCvid:r.cvid},{handlesRejection:!0}),o=Re(n,s),c=o.slice(0,5);return{block:r,truncated:c.length===o.length,results:c.map((e=>({kind:"flow",flow:e})))}}},[e.KNOWLEDGE_BASE]:{View:e=>{const{block:t,session:r,navigate:s}=e,n=w();return f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:e=>{Fe(n,r,t),s({kind:"knowledgeBase",block:t},e)}},f.createElement(ye,{...e}),f.createElement(Ne,{...e}),f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q})))},routeTo:({block:e,initialQ:t})=>({kind:"knowledgeBase",block:e,initialQ:t}),search:async({client:e,session:t,block:r,q:s})=>{const{truncated:n,articles:o}=await e.send({kind:"SearchKnowledgeBase",sessionId:t.id,blockCvid:r.cvid,q:s,offset:0,limit:5},{handlesRejection:!0});return{block:r,truncated:n,results:o.map((e=>({kind:"article",article:e})))}}},[e.MESSAGE]:{View:({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-block"},f.createElement("div",{className:"userflowjs-resource-center-block-text userflowjs-bubble-content"},f.createElement(j,{doc:e.content,lookupAttribute:x(t.data)})))},[e.SUBPAGE]:{View:e=>{const{block:t,session:r,navigate:s}=e,n=w();return f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:e=>{Fe(n,r,t),s({kind:"subpage",block:t},e)}},f.createElement(ye,{...e}),f.createElement(Ne,{...e}),f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q})))}}},ye=({block:e})=>e.icon?f.createElement("div",{className:"userflowjs-resource-center-block-icon"},f.createElement(F,{icon:e.icon,size:16})):null,Ne=({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-block-text"},f.createElement(S,{doc:e.name,lookupAttribute:x(t.data)})),_e=({session:e,navigate:t})=>{const r=w(),s=e.version.resourceCenter.blocks,n=je(s),{t:o}=Y(),c=f.useRef(null),[a,l]=f.useState(""),[i,u]=ke(a,l),[d,m]=f.useState(null);return f.useEffect((()=>{if(""===a.trim())return void m(null);let t=!1;return(async()=>{m(null);const n=await Promise.all(s.map((async t=>{const{search:s}=Se[t.type];if(!s)return null;try{return await s({client:r,session:e,block:t,q:a})}catch(n){return console.error(`Userflow.js: Global search failed for ${t.type} block=`,t,"error=",n),null}})));t||m(n.filter((e=>null!=e&&e.results.length>0)))})(),()=>{t=!0}}),[r,e,s,a]),f.useEffect((()=>{c.current?.focus({preventScroll:!0})}),[]),f.createElement(f.Fragment,null,f.createElement("div",{className:"userflowjs-resource-center-list-route-search"},f.createElement("input",{ref:c,className:"userflowjs-text-input",type:"text",value:i,onChange:e=>u(e.target.value),placeholder:o("resource_center.search_placeholder")})),""===a.trim()?f.createElement("div",{"data-testid":"resource-center-empty-query",className:"userflowjs-resource-center-list-route-error"},o("resource_center.search_in")," ",n.map(((t,r)=>f.createElement(f.Fragment,{key:t.cvid},r>0&&(r===n.length-1?` ${o("and")} `:", "),f.createElement("b",null,f.createElement(S,{doc:t.name,lookupAttribute:x(e.data)}))))),"."):d?0===d.length?f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},o("resource_center.no_results_found")):d.map((({block:s,truncated:n,results:c},l)=>{const i=Se[s.type],u=i.routeTo&&i.routeTo({block:s,initialQ:a});return f.createElement(f.Fragment,{key:s.cvid},l>0&&f.createElement("div",{className:"userflowjs-resource-center-divider"}),f.createElement("div",{className:"userflowjs-resource-center-label"},f.createElement(S,{doc:s.name,lookupAttribute:x(e.data)})),c.map(((r,n)=>"flow"===r.kind?f.createElement(Ae,{key:r.flow.id,block:s,session:e,flow:r.flow,navigate:t}):"article"===r.kind?f.createElement(Le,{key:n,block:s,session:e,article:r.article}):null)),!n&&u&&f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:n=>{Fe(r,e,s),t(u,n)}},f.createElement("div",{className:"userflowjs-resource-center-block-text"},o("more"),":"," ",f.createElement(S,{doc:s.name,lookupAttribute:x(e.data)})),f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q}))))})):f.createElement("div",{className:"userflowjs-resource-center-list-route-spinner"},f.createElement(Ee,null)))},Ie=({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-content-route userflowjs-bubble-content"},f.createElement(j,{doc:e.emailContent,lookupAttribute:x(t.data)})),xe=({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-content-route userflowjs-bubble-content"},f.createElement(j,{doc:e.phoneContent,lookupAttribute:x(t.data)})),Te=({block:e,initialQ:t,session:r,navigate:s})=>{const{t:n}=Y(),o=f.useRef(null),[c,a]=f.useState(t||""),[l,i]=ke(c,a),{data:u,error:d}=be({kind:"ListResourceCenterBlockFlows",sessionId:r.id,blockCvid:e.cvid}),m=u?.flows,w=f.useMemo((()=>m?Re(m,c):null),[m,c]);return f.useEffect((()=>{o.current?.focus({preventScroll:!0})}),[]),f.createElement(f.Fragment,null,f.createElement("div",{className:"userflowjs-resource-center-list-route-header"},f.createElement("div",{className:"userflowjs-resource-center-list-route-title"},f.createElement(S,{doc:e.name,lookupAttribute:x(r.data)}))),e.searchEnabled&&f.createElement("div",{className:"userflowjs-resource-center-list-route-search"},f.createElement("input",{ref:o,className:"userflowjs-text-input",type:"text",value:l,onChange:e=>i(e.target.value),placeholder:n("resource_center.search_placeholder")})),d?f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},n("resource_center.generic_error")):w?0===w.length?f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},n("resource_center.no_results_found")):w.map((t=>f.createElement(Ae,{key:t.id,block:e,session:r,flow:t,navigate:s}))):f.createElement("div",{className:"userflowjs-resource-center-list-route-spinner"},f.createElement(Ee,{fadeIn:!0})))};function Re(e,t){const r=t.toLowerCase().trim();return""===r?e:e.filter((e=>e.name.toLowerCase().includes(r)))}const Ae=({block:e,session:t,flow:r,navigate:s})=>{const n=w(),[o,c]=f.useState(!1);return f.useEffect((()=>{if(!o||r.type!==i.CHECKLIST)return;const e=()=>{n.checklistSession?.flow.id===r.id&&(t(),s(null))},t=()=>{n.off("checklistChanged",e)};return n.on("checklistChanged",e),t}),[n,o,r.type,r.id,s]),f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:()=>{if(Fe(n,t,e,r.name),n.checklistSession?.flow.id===r.id)return void s(null);n.startFlow({flowId:r.id,startReason:u.RESOURCE_CENTER,replaceCurrent:!0}),c(!0);const o=g(r.url,{lookupAttribute:x(t.data)});o&&y(o)},disabled:o},f.createElement("div",{className:"userflowjs-resource-center-block-icon"},f.createElement(F,{icon:r.type===i.CHECKLIST?"regular/tasks":"regular/shoe-prints",size:16})),f.createElement("div",{className:"userflowjs-resource-center-block-text"},r.name),o&&f.createElement(Ee,null))},Be=({block:e,initialQ:t,session:r,bodyRef:s})=>{const{t:n}=Y(),o=f.useRef(null),[c,a]=f.useState(t||""),[l,i]=ke(c,a),{loading:u,loadingMore:d,data:m,messageForData:w,error:h,loadMore:E}=be({kind:"SearchKnowledgeBase",sessionId:r.id,blockCvid:e.cvid,q:c,offset:0}),b=m?.truncated,k=f.useCallback((()=>{E(((e,t)=>({...t,offset:e.articles.length})),((e,t)=>({...t,articles:[...e.articles,...t.articles]})))}),[E]);f.useEffect((()=>{const e=s.current;if(!e||u||d||b)return;const t=()=>{e.scrollHeight-e.clientHeight-e.scrollTop>400||k()};return e.addEventListener("scroll",t),()=>{e.removeEventListener("scroll",t)}}),[s,u,d,b,k]),f.useEffect((()=>{o.current?.focus({preventScroll:!0})}),[]);let p=e.knowledgeBaseUrl||"";return p.match(/^https?:\/\//)||(p=`http://${p}`),f.createElement(f.Fragment,null,f.createElement("div",{className:"userflowjs-resource-center-list-route-header"},f.createElement("div",{className:"userflowjs-resource-center-list-route-title"},f.createElement(S,{doc:e.name,lookupAttribute:x(r.data)})),f.createElement("a",{className:"userflowjs-resource-center-icon-button",href:p,target:"_blank",rel:"noopener noreferrer"},f.createElement(F,{icon:K}))),f.createElement("div",{className:"userflowjs-resource-center-list-route-search"},f.createElement("input",{ref:o,className:"userflowjs-text-input",type:"text",value:l,onChange:e=>i(e.target.value),placeholder:n("resource_center.search_placeholder")})),h?f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},"quota_exceeded"===h.code?"Sorry, this company has reached its max number of searches. Consider asking Userflow to be moved to a dedicated search engine for a higher quota.":n("resource_center.generic_error")):u||!m?f.createElement("div",{className:"userflowjs-resource-center-list-route-spinner"},f.createElement(Ee,null)):0===m.articles.length?""===w?.q?null:f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},n("resource_center.no_results_found")):f.createElement(f.Fragment,null,""===w?.q&&f.createElement("div",{className:"userflowjs-resource-center-label"},n("resource_center.suggested_articles")),m.articles.map(((t,s)=>f.createElement(Le,{key:s,block:e,session:r,article:t}))),d&&f.createElement("div",{className:"userflowjs-resource-center-list-route-spinner"},f.createElement(Ee,null))))},Le=({block:e,article:t,session:r})=>{const s=w();return f.createElement("a",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:()=>{Fe(s,r,e,t.title)},href:t.url,target:"_blank",rel:"noopener noreferrer"},f.createElement("div",{className:"userflowjs-resource-center-block-icon"},f.createElement(F,{icon:"regular/file-alt",size:16})),f.createElement("div",{className:"userflowjs-resource-center-block-text"},f.createElement("span",{dangerouslySetInnerHTML:{__html:t.htmlTitle}}),f.createElement("div",{className:"userflowjs-resource-center-block-subtext",dangerouslySetInnerHTML:{__html:t.htmlSnippet}})))},He=({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-content-route userflowjs-bubble-content"},f.createElement(j,{doc:e.content,lookupAttribute:x(t.data)})),Me=({block:e,initialUserContent:t,session:r})=>{const s=e.assistantFlowId,n=w(),[o,c]=f.useState(null),[a,l]=f.useState(null),[i,u]=f.useState(null);return f.useEffect((()=>{let e=!1;return(async()=>{try{const t=d.getItem("assistantConversationId:"+s),[r,o]=await Promise.all([ge(),n.send({kind:"GetAssistant",assistantFlowId:s,conversationId:t},{handlesRejection:!0})]);if(e)return;c((()=>r)),l(o)}catch(t){console.error("Resource center assistant route failed to load:",t),u(t.humanMessage||"Sorry, something went wrong. Please try again or contact my human friends.")}})(),()=>{e=!0}}),[n,s]),i?f.createElement("div",{className:"userflowjs-assistant-chat"},f.createElement("div",{className:"userflowjs-assistant-chat__content"},f.createElement("div",{className:"userflowjs-assistant-chat__error"},i))):o&&a?f.createElement(o,{block:e,session:r,assistantReply:a,initialUserContent:t}):f.createElement(Ee,{center:!0,fadeIn:!0})};function Fe(e,t,r,s){e.send({kind:"ClickResourceCenter",sessionId:t.id,description:r?g(r.name,{lookupAttribute:x(t.data)})+(s?` - ${s}`:""):s},{batch:!0})}var Pe=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",ResourceCenterApp:Ce,default:Ce});export{ve as A,pe as G,Pe as R};
|
|
1
|
+
import{h as e,C as t,i as r,c as s,j as n,k as o,E as c,l as a,m as l,n as i,S as u,p as d,_ as m}from"./userflow.js";import{r as f}from"./vendor.react.js";import{u as w,i as h}from"./client-context.js";import{u as E,w as b,C as k}from"./Icons.js";import{b as p,h as v,s as g,B as C,R as j,a as S,n as y,f as N}from"./BubbleToolbar.js";import{M as _,g as I,a as x}from"./flow-condition-types.js";import{u as T,a as R,g as A}from"./stylesheets.js";import{u as B,F as L,S as H}from"./logomark.js";import{o as M}from"./vendor.obj-str.js";import{D as F}from"./DynamicIcon.js";import{f as P,C as W}from"./ChecklistUI.js";import{f as O,a as $,b as U,c as D,d as z,e as q,g as K,h as V,i as G,j as Q}from"./vendor.fortawesome.pro-regular-svg-icons.js";import{F as Z}from"./vendor.fortawesome.react-fontawesome.js";import{u as Y}from"./vendor.react-i18next.js";function J(t){return t!==e.ACTION&&t!==e.ASSISTANT&&t!==e.CONTACT&&t!==e.FLOWS&&t!==e.KNOWLEDGE_BASE&&t!==e.SUBPAGE}const X=window,ee={[t.CRISP]:{configure:({onShow:e,onHide:t})=>{X.$crisp||(X.$crisp=[]),X.$crisp.push(["do","chat:hide"]);let r=!1,s=!1;const n=()=>{r||s?(X.$crisp.push(["do","chat:show"]),e()):(X.$crisp.push(["do","chat:hide"]),t())},o=()=>{r=!0,n()};X.$crisp.push(["on","chat:opened",o]);const c=()=>{r=!1,n()};X.$crisp.push(["on","chat:closed",c]);const a=()=>{s=!0,n()};X.$crisp.push(["on","message:received",a]);const l=window.setInterval((()=>{const e=(()=>{const e=document.getElementById("crisp-chatbox");if(!e||"block"!==window.getComputedStyle(e).display)return!1;const t=e.querySelector('[data-id="new_messages"]');return!(!t||"block"!==window.getComputedStyle(t).display)})();e!==s&&(s=e,n())}),200);return()=>{X.$crisp.push(["off","chat:opened",o]),X.$crisp.push(["off","chat:closed",c]),X.$crisp.push(["off","message:received",a]),window.clearInterval(l)}},show:()=>{X.$crisp.push(["do","chat:show"]),X.$crisp.push(["do","chat:open"])},hide:()=>{X.$crisp.push(["do","chat:hide"]),X.$crisp.push(["do","chat:close"])}},[t.CUSTOM]:{configure:()=>()=>{},show:({block:e})=>{try{new Function('"use strict";\n'+e.chatCode)()}catch(t){console.error(`Userflow.js: Showing custom chat provider failed. Code: ${e.chatCode}`,t)}},hide:()=>{}},[t.FRESHCHAT]:{configure:({onShow:e,onHide:t})=>{if(!X.fcWidget)throw new Error("Freshchat is not installed");let r=!1,s=!1;const n=()=>{r||s?e():t()},o=()=>{r=!0,n()};X.fcWidget.on("widget:opened",o);const c=()=>{r=!1,n()};X.fcWidget.on("widget:closed",c);const a=()=>{const e=!!document.querySelector("#fc_frame.h-open-notify");e!==s&&(s=e,n())},l=window.setInterval(a,200);return X.fcWidget.on("unreadCount:notify",a),()=>{X.fcWidget.off("widget:opened",o),X.fcWidget.off("widget:closed",c),X.fcWidget.off("unreadCount:notify",a),window.clearInterval(l)}},show:()=>{X.fcWidget.open()},hide:()=>{X.fcWidget.close()}},[t.HELPSCOUT]:{configure:({onShow:e,onHide:t})=>{if(!X.Beacon)throw new Error("Help Scout is not installed");re();let r=!1,s=!1;const n=()=>{r||s?(te(),e()):(re(),t())},o=()=>{r=!0,n()};X.Beacon("on","open",o),X.Beacon("info")?.status.isOpened&&o();const c=()=>{r=!1,n()};X.Beacon("on","close",c);const a=window.setInterval((()=>{const e=!!document.querySelector(".BeaconNotificationsFrame");e!==s&&(s=e,n())}),200);return()=>{X.Beacon("off","open",o),X.Beacon("off","close",c),window.clearInterval(a)}},show:()=>{te(),X.Beacon("open")},hide:()=>{re(),X.Beacon("close")}},[t.HUBSPOT]:{configure:({onShow:e,onHide:t})=>{const r=()=>{const r=document.getElementById("hubspot-messages-iframe-container");if(!X.HubSpotConversations||!r)return;window.clearInterval(n),se?ne():oe();let o=!1,c=!1;const a=()=>{o||c?(ne(),e()):(oe(),t())},l=()=>{const e=!!document.querySelector("#hubspot-messages-iframe-container .hs-shadow-container.active");e!==o&&(o=e,a())},i=new _(l);i.observe(r,{attributes:!0,subtree:!0,attributeFilter:["class"]}),l();const u=({unreadCount:e})=>{const t=e>0;t!==c&&(c=t,a())};X.HubSpotConversations.on("unreadConversationCountChanged",u),s=()=>{i.disconnect(),X.HubSpotConversations.off("unreadConversationCountChanged",u)}};let s=()=>{window.clearInterval(n)};const n=window.setInterval(r,100);return r(),()=>{s()}},show:()=>{ne(),X.HubSpotConversations.widget.open()},hide:()=>{oe(),X.HubSpotConversations.widget.close()}},[t.INTERCOM]:{configure:({onShow:e,onHide:t})=>{if(!X.Intercom)throw new Error("Intercom is not installed");return ue(),function(){if(ce)return;ce=!0;let e=!1,t=!1;const r=()=>{ie();for(const e of ae)e()},s=()=>{ue();for(const e of le)e()},n=()=>{e||t?r():s()};X.Intercom("onShow",(()=>{e=!0,n()})),X.Intercom("onHide",(()=>{e=!1,n()}));const o=()=>{const e=!!document.querySelector('iframe[name="intercom-borderless-frame"], iframe[name="intercom-notifications-frame"]');t!==e&&(t=e,n())};X.Intercom("onUnreadCountChange",(()=>{o()})),window.setInterval(o,200)}(),ae.add(e),le.add(t),()=>{ae.delete(e),le.delete(t)}},show:()=>{ie(),X.Intercom("show")},hide:()=>{ue(),X.Intercom("hide")}},[t.ZENDESK]:{configure:({onShow:e,onHide:t})=>{if(!X.zE)throw new Error("Zendesk is not installed");!function(){if(de)return;de=!0,X.zE("webWidget:on","open",(()=>{for(const e of me)e()})),X.zE("webWidget:on","close",(()=>{for(const e of fe)e()})),X.zE("webWidget:on","chat:unreadMessages",(e=>{for(const t of we)t(e)}))}(),X.zE("webWidget","hide"),X.zE("webWidget","close");let r=!1,s=!1;const n=()=>{r||s?(X.zE("webWidget","show"),e()):(X.zE("webWidget","hide"),t())},o=()=>{r=!0,s=!1,n()};me.add(o);const c=()=>{r=!1,s=!1,n()};fe.add(c);const a=e=>{const t=e>0;t!==s&&(s=t,n())};return we.add(a),()=>{me.delete(o),fe.delete(c),we.delete(a)}},show:()=>{X.zE("webWidget","show"),X.zE("webWidget","open")},hide:()=>{X.zE("webWidget","hide"),X.zE("webWidget","close")}},[t.ZENDESK_MESSENGER]:{configure:({onShow:e,onHide:t})=>{if(!X.zE)throw new Error("Zendesk is not installed");let r=!1;const s=window.setInterval((()=>{const s=(()=>{const e=document.querySelector('iframe[title="Messaging window"]');return!!e?.parentElement&&"0px"!==window.getComputedStyle(e.parentElement).height})();s!==r&&(r=s,r?e():t())}),200);return()=>{window.clearInterval(s)}},show:()=>{X.zE("messenger","open")},hide:()=>{X.zE("messenger","close")}}};function te(){X.Beacon("config",{display:{style:"icon"}})}function re(){X.Beacon("config",{display:{style:"manual"}})}let se=!1;function ne(){se=!0;document.getElementById("hubspot-messages-iframe-container")?.style.setProperty("visibility","visible","important")}function oe(){se=!1;document.getElementById("hubspot-messages-iframe-container")?.style.setProperty("visibility","hidden","important")}let ce=!1,ae=new Set,le=new Set;function ie(){X.Intercom("update",{hide_default_launcher:!1,vertical_padding:20})}function ue(){X.Intercom("update",{hide_default_launcher:!0,vertical_padding:100})}let de=!1,me=new Set,fe=new Set,we=new Set;const he=e=>f.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100"},e),f.createElement("path",{fill:"currentColor",d:"M24.049 79.74h36.003c8.185 0 15.985-6.621 17.43-14.814l6.091-34.556h3.997c8.149 0 13.645 6.63 12.2 14.815l-7.051 40C91.274 93.363 83.474 100 75.288 100h-40c-8.185 0-13.645-6.667-12.2-14.815l.96-5.444Z"}),f.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M12.437 69.63h40c8.148 0 15.978-6.637 17.422-14.815l7.052-40C78.355 6.63 72.896 0 64.711 0h-40C16.533 0 8.726 6.63 7.281 14.815l-7.052 40C-1.215 62.963 4.252 69.63 12.437 69.63Zm33.628-33.798c3.756-2.064 8.725-4.795 9.907-11.844C57.385 15.458 50.065 8.983 42.168 9c-7.452 0-12.771 3.195-17.508 8.892-.858 1.034-.884 2.45-.053 3.212l3.472 3.196c.847.767 2.25.589 3.176-.406 2.842-3.068 4.869-4.83 8.51-4.83 2.864 0 6.077 1.934 5.59 4.847-.37 2.223-2.292 3.334-5.4 5.001l-.28.151c-3.582 1.92-8.134 4.362-9.124 10.247l-.16.956c-.055.28-.05.571.014.85.065.278.188.538.362.76.173.222.391.4.639.522.247.121.518.183.79.18h6.744a2.709 2.709 0 0 0 1.712-.688c.481-.426.81-1.01.934-1.657l.095-.556c.266-1.582 2.101-2.59 4.384-3.845ZM32.837 59c3.552 0 6.955-3.034 7.58-6.769.63-3.729-1.742-6.763-5.293-6.763-3.552 0-6.934 3.028-7.58 6.763C26.9 55.966 29.286 59 32.837 59Z"})),Ee=({center:e,fadeIn:t})=>{const r=12;return f.createElement("div",{className:M({"userflowjs-spinner":!0,"userflowjs-spinner--center":!!e,"userflowjs-spinner--fade-in":!!t})},f.createElement("svg",{viewBox:"0 0 24 24",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},f.createElement("circle",{className:"userflowjs-spinner__bg",fill:"none",cx:r,cy:r,r:10,style:{strokeWidth:"4px"}}),f.createElement("circle",{className:"userflowjs-spinner__fill",fill:"none",cx:r,cy:r,r:10,transform:"translate(12, 12) rotate(-90) translate(-12, -12)",style:{strokeWidth:"4px",strokeDasharray:20*Math.PI*.25+"px, 1000"}})))};function be(e){const t=w(),[r,s]=f.useState(!0),[n,o]=f.useState(!1),[c,a]=f.useState(null),[l,i]=f.useState(null),[u,d]=f.useState(null),m=f.useRef(0),h=f.useRef(null),E=f.useRef((()=>{}));return f.useEffect((()=>{const r=JSON.stringify(e);if(r===h.current)return;h.current=r;const n=++m.current;let c,l;let u=!1;E.current=async(e,r)=>{if(!u){u=!0,o(!0);try{const s=e(c,l);l=s;const i=await t.send(s,{handlesRejection:!0});if(n!==m.current)return;c=r(c,i),a(c),d(null)}catch(s){if(n!==m.current)return;d(s)}finally{u=!1,o(!1)}}},(async()=>{s(!0);try{l=e;const r=await t.send(e,{handlesRejection:!0});if(n!==m.current)return;c=r,a(c),i(e),d(null)}catch(r){if(n!==m.current)return;d(r)}finally{s(!1)}})()}),[t,e]),{loading:r,loadingMore:n,data:c,messageForData:l,error:u,loadMore:E.current}}function ke(e,t){const[r,s]=f.useState(e),n=f.useRef(void 0),o=f.useCallback((e=>{window.clearTimeout(n.current),s(e),t(e)}),[t]),c=f.useCallback((e=>{window.clearTimeout(n.current),s(e),n.current=window.setTimeout((()=>{t(e)}),200)}),[t]);return f.useEffect((()=>()=>{window.clearTimeout(n.current)}),[]),[r,c,o]}const pe=({textareaRef:e,value:t,onChange:r,onBlur:s,onKeyDown:n,onMouseDown:o,placeholder:c,disabled:a,readOnly:l,className:i,mirrorClassName:u,textareaClassName:d,children:m})=>{let w=t||c||"";return(""===w||w.endsWith("\n"))&&(w+=" "),i=i||"growing-textarea",u=u||i+"__mirror",f.createElement("div",{className:i},f.createElement("div",{className:u+" "+(d||"")},w),f.createElement("textarea",{ref:e,value:t,onChange:e=>r&&r(e.target.value),onBlur:s,onKeyDown:n,onMouseDown:o,placeholder:c,disabled:a,readOnly:l,className:d}),m)},ve=({textareaRef:e,value:t,onChange:r,onSubmit:s,placeholder:n,readOnly:o})=>{const c=()=>{s&&s()};return f.createElement("div",{className:"userflowjs-assistant-chat-input"},f.createElement(pe,{textareaRef:e,className:"userflowjs-growing-textarea",mirrorClassName:"userflowjs-growing-textarea__mirror",textareaClassName:"userflowjs-textarea userflowjs-assistant-chat-input__textarea",placeholder:n,readOnly:o,value:t||"",onChange:r,onKeyDown:e=>{e.shiftKey||"Enter"!==e.key||(e.preventDefault(),c())}}),f.createElement("button",{className:"userflowjs-assistant-chat-input__submit",onClick:()=>c()},f.createElement(Z,{icon:O})))},ge=async()=>(await m((()=>import("./ResourceCenterAssistantChat.js")),[new URL("ResourceCenterAssistantChat.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("vendor.fortawesome.react-fontawesome.js",import.meta.url).toString(),new URL("vendor.fortawesome.fontawesome-svg-core.js",import.meta.url).toString(),new URL("vendor.prop-types.js",import.meta.url).toString(),new URL("vendor.dompurify.js",import.meta.url).toString(),new URL("vendor.marked.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("userflow.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString(),new URL("BubbleToolbar.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("Icons.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("logomark.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("DynamicIcon.js",import.meta.url).toString(),new URL("ChecklistUI.js",import.meta.url).toString()])).ResourceCenterAssistantChat,Ce=({session:a,isOpen:l,flowSession:i,checklistSession:u})=>{const d=w(),{t:m}=Y(),{company:v}=a.flow,{version:g}=a,C=g.resourceCenter,j=T(g.theme),S=a.locale?a.locale.standardLocaleId:a.version.theme.languageId;f.useEffect((()=>{h.changeLanguage(S)}),[S]);const{loaded:y}=R(window,N,j),[x,W]=f.useState(!1),O=y&&x,[q,K]=f.useState(I()),V=f.useCallback((()=>{K(I())}),[]);B(V);const{zIndex:G,bringToFront:Q}=E(),Z=f.useRef(null),[X,te]=f.useState(null),[re,se]=f.useState(null),[ne,oe]=f.useState(null),ce=f.useRef(null),[ae,le]=f.useState(null),[ie,ue]=f.useState(null),[de,me]=f.useState(null),[fe,we]=f.useState(0),[Ee,be]=f.useState(0),ke=f.useCallback((()=>{re&&we(re.offsetWidth),be((ne?.offsetHeight||0)+(ae?.offsetHeight||0)+(ie?.offsetHeight||0)+(de?.offsetHeight||0))}),[re,ne,ae,ie,de]);f.useLayoutEffect((()=>{if(!X||"function"!=typeof _)return;const e=new _((()=>{ke()}));return e.observe(X,{childList:!0,attributes:!0,subtree:!0}),()=>{e.disconnect()}}),[X,ke]),f.useLayoutEffect((()=>{ke()}));const[pe,ve]=f.useState(!1),ge=f.useRef(),Ce=f.useCallback((()=>{ve(!0),window.clearTimeout(ge.current),ge.current=window.setTimeout((()=>{ve(!1)}),j.resourceCenterTransitionDuration)}),[j.resourceCenterTransitionDuration]);f.useEffect((()=>()=>{window.clearTimeout(ge.current)}),[]);const ye=f.useCallback((()=>{Q(),Ce(),d.openResourceCenter()}),[Q,d,Ce]),Ne=f.useCallback((()=>{Ce(),d.closeResourceCenter()}),[d,Ce]),[Re,Ae]=f.useState(!1);f.useEffect((()=>{if(Re){if(l){const e='button:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"]), input, textarea';let t=ae?.querySelector(".userflowjs-assistant-chat-input textarea")||ae?.querySelector(e)||ne?.querySelector(e);if(t){const e=t.closest&&t.closest(".userflowjs-resource-center-checklist")||null;e?P(e):t.focus({preventScroll:!0})}}else re?.focus({preventScroll:!0});Ae(!1)}}),[Re,l,ae,ne,re]),f.useEffect((()=>{const e=X?.ownerDocument.defaultView;if(!l||!e)return;const t=e=>{"Escape"===e.key&&(Ne(),Ae(!0))};return e.addEventListener("keydown",t),()=>e.removeEventListener("keydown",t)}),[l,X,Ae,Ne]);const[Le,Pe]=f.useState(null),We=f.useCallback(((e,t)=>{Pe(e),0===t?.detail&&Ae(!0)}),[]),Oe=f.useMemo((()=>C.blocks.filter((t=>!(t.type===e.CHECKLIST&&!u)&&(!t.hiddenWhenFlowsActive||!t.hiddenWhenFlowsActive.some((e=>e===i?.flow.id||e===u?.flow.id)))))),[C,i,u]),$e=f.useMemo((()=>je(Oe)),[Oe]),Ue=f.useMemo((()=>u&&C.blocks.some((t=>t.type===e.CHECKLIST))?r(u):0),[C,u]),De=f.useMemo((()=>C.blocks.find((t=>t.type===e.CONTACT&&t.chatEnabled&&t.chatProvider))),[C]),[ze,qe]=f.useState(!1),Ke=f.useCallback((()=>{d.closeResourceCenter(),De&&De.chatProvider!==t.CUSTOM&&qe(!0)}),[d,De]),Ve=f.useCallback((()=>{qe(!1)}),[]),Ge=f.useCallback((()=>{if(De)try{ee[De.chatProvider].hide({block:De}),Ve()}catch(e){console.error(`Userflow.js: Error when hiding ${De.chatProvider}:`,e)}}),[De,Ve]);f.useEffect((()=>{if(!De)return;s.autoHide3pDisabled=!0;const e=ee[De.chatProvider];try{const t=e.configure({block:De,onShow:Ke,onHide:Ve});return()=>{t()}}catch(t){return void console.error(`Userflow.js: Error when configuring ${De.chatProvider}:`,t)}}),[De,Ke,Ve]),f.useEffect((()=>{l&&Ge()}),[Ge,l]);const Qe=!!Le&&("search"===Le.kind||"flows"===Le.kind||"knowledgeBase"===Le.kind),Ze="assistant"===Le?.kind,Ye={zIndex:null!=j.resourceCenterZIndex?j.resourceCenterZIndex:l?G:b(k),width:l?void 0:fe+"px",height:l?Math.min(Qe?540:Ze?720:Ee,q-2*j.resourceCenterPaddingY)+"px":void 0,position:O?void 0:"absolute",visibility:O&&!ze?void 0:"hidden"},Je=j.resourceCenterDisplayChecklistProgress&&u&&Ue>0?f.createElement("div",{"data-testid":"resource-center-launcher-badge",className:"userflowjs-resource-center-launcher-badge"},Ue,f.createElement("div",{className:"userflowjs-a11y-only"},"uncompleted tasks")):null;let Xe="",et="";return j.resourceCenterLauncherTextMode===n.CHECKLIST_OVERRIDE&&u&&Ue>0?Xe=u.version.checklist?.launcherText||"Get Started":j.resourceCenterLauncherTextMode!==n.NONE&&(et=C.buttonText),f.createElement("div",{"data-testid":"resource-center-app",className:"userflowjs-resource-center userflowjs-theme-root",style:A(j),dir:h.dir()},f.createElement(L,{elRef:Z,className:M({"userflowjs-resource-center-frame":!0,"userflowjs-resource-center-frame--fixed":!0,[`userflowjs-resource-center-frame--placement-${j.resourceCenterPlacement.toLowerCase().replace(/_/g,"-")}`]:!0,"userflowjs-resource-center-frame--animating":pe,"userflowjs-resource-center-frame--open":l,"userflowjs-resource-center-frame--large":Ze,"userflowjs-resource-center-frame--closed":!l}),style:{...Ye},stylesheet:p,theme:j,onStylesheetsLoad:W},O&&f.createElement(f.Fragment,null,f.createElement("div",{ref:te,className:M({"userflowjs-resource-center-frame-root":!0,[`userflowjs-resource-center-frame-root--placement-${j.resourceCenterPlacement.toLowerCase().replace(/_/g,"-")}`]:!0,"userflowjs-resource-center-frame-root--animating":pe,"userflowjs-resource-center-frame-root--open":l,"userflowjs-resource-center-frame-root--large":Ze,"userflowjs-resource-center-frame-root--closed":!l}),role:l?"dialog":void 0,"aria-label":l?C.headerText:void 0},f.createElement("div",{className:"userflowjs-resource-center-launcher-container"},f.createElement("button",{ref:se,className:"userflowjs-resource-center-launcher-button",onClick:()=>{ye(),Ae(!0)},"aria-label":`Open ${C.headerText}`},Je,Xe&&f.createElement("div",{"data-testid":"resource-center-launcher-text",className:"userflowjs-resource-center-launcher-text"},Xe),(Je||Xe)&&f.createElement("div",{className:"userflowjs-resource-center-launcher-divider"}),et&&f.createElement("div",{"data-testid":"resource-center-launcher-text",className:"userflowjs-resource-center-launcher-text"},et),f.createElement("div",{className:"userflowjs-resource-center-launcher-icon"},j.resourceCenterLauncherIconType===o.PLAINTEXT?"?":f.createElement(he,null)))),f.createElement("div",{ref:ce,className:"userflowjs-resource-center-body"},f.createElement("div",{ref:le,className:M({"userflowjs-resource-center-body-content":!0,"userflowjs-resource-center-body-content--padding":"assistant"!==Le?.kind,"userflowjs-resource-center-body-content--same-background":j.sameBackground,"userflowjs-resource-center-body-content--with-made-with-userflow":v.resourceCenterBranding})},l&&f.createElement(f.Fragment,null,Le?"search"===Le.kind?f.createElement(_e,{session:a,navigate:We}):"email"===Le.kind?f.createElement(Ie,{block:Le.block,session:a}):"phone"===Le.kind?f.createElement(xe,{block:Le.block,session:a}):"flows"===Le.kind?f.createElement(Te,{block:Le.block,initialQ:Le.initialQ,session:a,navigate:We}):"knowledgeBase"===Le.kind?f.createElement(Be,{block:Le.block,initialQ:Le.initialQ,session:a,bodyRef:ce}):"subpage"===Le.kind?f.createElement(He,{block:Le.block,session:a}):"assistant"===Le.kind?f.createElement(Me,{block:Le.block,initialUserContent:Le.initialUserContent,session:a}):null:f.createElement(f.Fragment,null,Oe.map(((e,t)=>{const r=Se[e.type],s=Oe[t+1];return r?f.createElement(f.Fragment,{key:e.id},f.createElement(r.View,{session:a,flowSession:i,checklistSession:u,block:e,navigate:We,onChatShow:Ke}),s&&(n=e.type,o=s.type,J(n)||J(o))&&f.createElement("div",{className:"userflowjs-resource-center-divider"})):null;var n,o})))))),v.resourceCenterBranding&&f.createElement("div",{className:"userflowjs-resource-center-made-with-userflow"},f.createElement("div",{className:"userflowjs-resource-center-made-with-userflow-content",ref:ue},f.createElement("a",{href:"https://userflow.com/?utm_source=made-with-userflow&utm_medium=link&utm_campaign=made-with-userflow-"+v.slug+"&utm_content=resource-center",target:"_blank",rel:"noopener noreferrer"},f.createElement(H,null),f.createElement("div",null,"Made with Userflow")))),a.draftMode&&f.createElement("div",{className:"userflowjs-resource-center-preview"},f.createElement("div",{ref:me,className:"userflowjs-resource-center-preview-content"},f.createElement("div",{className:"userflowjs-resource-center-preview-text"},"Preview"),f.createElement("button",{className:"userflowjs-resource-center-preview-button",onClick:()=>{d.endFlow(a,{endReason:c.USER_CLOSED})}},f.createElement(F,{icon:$})))),f.createElement("div",{className:"userflowjs-resource-center-header"},f.createElement("div",{ref:oe,className:"userflowjs-resource-center-header-content"},null==Le?f.createElement("div",{className:"userflowjs-resource-center-header-text"},C.headerText):f.createElement("button",{className:"userflowjs-resource-center-icon-button",onClick:e=>We(null,e)},f.createElement("div",{className:"userflowjs-rtl-mirrored"},f.createElement(F,{icon:U})),f.createElement("div",{className:"userflowjs-resource-center-icon-button__text"},m("resource_center.back"))),f.createElement("div",{className:"flex-1"}),$e.length>0&&f.createElement("button",{className:"userflowjs-resource-center-icon-button",onClick:()=>{let e={kind:"search"};if(1===$e.length){const t=$e[0],r=Se[t.type];r.routeTo&&(e=r.routeTo({block:t}))}"search"===Le?.kind?We(null):(Fe(d,a,null,"Search icon"),We(e))},"aria-label":"Search"},f.createElement(F,{icon:D})),f.createElement("button",{className:"userflowjs-resource-center-icon-button userflowjs-resource-center-close-button",onClick:e=>{Ne(),0===e.detail&&Ae(!0)},"aria-label":`Close ${C.headerText}`},f.createElement(F,{icon:z}))))))))};function je(e){return e.filter((e=>{const t=Se[e.type];return t.isSearchable?t.isSearchable(e):!!t.search}))}const Se={[e.ACTION]:{View:e=>{const{block:t,session:r,flowSession:s,checklistSession:n}=e,o=w(),[c,l]=f.useState(!1),i=s?.id,u=n?.id;return f.useEffect((()=>{l(!1)}),[i,u]),f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:c?void 0:()=>{Fe(o,r,t);const e=t.actions.find((e=>e.type===a.START_FLOW));if(e){e.otherFlow?.id!==n?.flow.id&&l(!0)}else o.closeResourceCenter();v(o,r,t.actions)},disabled:c},f.createElement(ye,{...e}),f.createElement(Ne,{...e}),c&&f.createElement(Ee,null))}},[e.ASSISTANT]:{View:e=>{const{block:t,session:r,navigate:s}=e,n=w(),[o,c]=f.useState("");return t.assistantAppearance===l.INPUT?f.createElement("div",{className:"userflowjs-resource-center-assistant-block"},f.createElement(ve,{value:o,onChange:c,placeholder:g(t.name,{lookupAttribute:x(r.data)}),onSubmit:()=>{Fe(n,r,t),s({kind:"assistant",block:t,initialUserContent:o})}})):f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:()=>{Fe(n,r,t),s({kind:"assistant",block:t,initialUserContent:""})}},f.createElement(ye,{...e}),f.createElement(Ne,{...e}))}},[e.CHECKLIST]:{View:({checklistSession:e})=>f.createElement("div",{"data-testid":"resource-center-checklist",className:"userflowjs-resource-center-checklist"},f.createElement(W,{session:e}),f.createElement(C,{draftMode:!!e.draftMode&&"CHECKLIST PREVIEW"}))},[e.CONTACT]:{View:e=>{const{block:t,session:r,navigate:s,onChatShow:n}=e,o=w(),c=[];return t.emailEnabled&&c.push({icon:V,label:"Email",isRoute:!0,onClick:e=>{Fe(o,r,t,"Email"),s({kind:"email",block:t},e)}}),t.phoneEnabled&&c.push({icon:G,label:"Phone",isRoute:!0,onClick:e=>{Fe(o,r,t,"Phone"),s({kind:"phone",block:t},e)}}),t.chatEnabled&&c.push({icon:Q,label:"Live-chat",isRoute:!1,onClick:()=>{if(Fe(o,r,t,"Chat"),t.chatProvider){const r=ee[t.chatProvider];try{r.show({block:t})}catch(e){console.error(`Userflow.js: Error when showing ${t.chatProvider}:`,e)}n()}else r.draftMode&&window.alert("You have not selected a chat provider. Go to the resource center builder in Userflow. Click the Contact block. Pick a chat provider in the side panel.")}}),f.createElement("div",{className:M({"userflowjs-resource-center-block":!0,"userflowjs-resource-center-block--clickable":1===c.length}),onClick:1===c.length?c[0].onClick:void 0},1===c.length&&f.createElement("div",{className:"userflowjs-resource-center-block-icon"},f.createElement(F,{icon:c[0].icon})),f.createElement(Ne,{...e}),c.length>1&&c.map((({icon:e,label:t,onClick:r},s)=>f.createElement("button",{key:s,className:"userflowjs-resource-center-icon-button",onClick:r,"aria-label":t},f.createElement(F,{icon:e})))),1===c.length&&c[0].isRoute&&f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q})))}},[e.FLOWS]:{View:e=>{const{block:t,session:r,navigate:s}=e,n=w();return f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:e=>{Fe(n,r,t),s({kind:"flows",block:t},e)}},f.createElement(ye,{...e}),f.createElement(Ne,{...e}),f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q})))},routeTo:({block:e,initialQ:t})=>({kind:"flows",block:e,initialQ:t}),isSearchable:e=>!!e.searchEnabled,search:async({client:e,session:t,block:r,q:s})=>{const{flows:n}=await e.send({kind:"ListResourceCenterBlockFlows",sessionId:t.id,blockCvid:r.cvid},{handlesRejection:!0}),o=Re(n,s),c=o.slice(0,5);return{block:r,truncated:c.length===o.length,results:c.map((e=>({kind:"flow",flow:e})))}}},[e.KNOWLEDGE_BASE]:{View:e=>{const{block:t,session:r,navigate:s}=e,n=w();return f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:e=>{Fe(n,r,t),s({kind:"knowledgeBase",block:t},e)}},f.createElement(ye,{...e}),f.createElement(Ne,{...e}),f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q})))},routeTo:({block:e,initialQ:t})=>({kind:"knowledgeBase",block:e,initialQ:t}),search:async({client:e,session:t,block:r,q:s})=>{const{truncated:n,articles:o}=await e.send({kind:"SearchKnowledgeBase",sessionId:t.id,blockCvid:r.cvid,q:s,offset:0,limit:5},{handlesRejection:!0});return{block:r,truncated:n,results:o.map((e=>({kind:"article",article:e})))}}},[e.MESSAGE]:{View:({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-block"},f.createElement("div",{className:"userflowjs-resource-center-block-text userflowjs-bubble-content"},f.createElement(j,{doc:e.content,lookupAttribute:x(t.data)})))},[e.SUBPAGE]:{View:e=>{const{block:t,session:r,navigate:s}=e,n=w();return f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:e=>{Fe(n,r,t),s({kind:"subpage",block:t},e)}},f.createElement(ye,{...e}),f.createElement(Ne,{...e}),f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q})))}}},ye=({block:e})=>e.icon?f.createElement("div",{className:"userflowjs-resource-center-block-icon"},f.createElement(F,{icon:e.icon,size:16})):null,Ne=({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-block-text"},f.createElement(S,{doc:e.name,lookupAttribute:x(t.data)})),_e=({session:e,navigate:t})=>{const r=w(),s=e.version.resourceCenter.blocks,n=je(s),{t:o}=Y(),c=f.useRef(null),[a,l]=f.useState(""),[i,u]=ke(a,l),[d,m]=f.useState(null);return f.useEffect((()=>{if(""===a.trim())return void m(null);let t=!1;return(async()=>{m(null);const n=await Promise.all(s.map((async t=>{const{search:s}=Se[t.type];if(!s)return null;try{return await s({client:r,session:e,block:t,q:a})}catch(n){return console.error(`Userflow.js: Global search failed for ${t.type} block=`,t,"error=",n),null}})));t||m(n.filter((e=>null!=e&&e.results.length>0)))})(),()=>{t=!0}}),[r,e,s,a]),f.useEffect((()=>{c.current?.focus({preventScroll:!0})}),[]),f.createElement(f.Fragment,null,f.createElement("div",{className:"userflowjs-resource-center-list-route-search"},f.createElement("input",{ref:c,className:"userflowjs-text-input",type:"text",value:i,onChange:e=>u(e.target.value),placeholder:o("resource_center.search_placeholder")})),""===a.trim()?f.createElement("div",{"data-testid":"resource-center-empty-query",className:"userflowjs-resource-center-list-route-error"},o("resource_center.search_in")," ",n.map(((t,r)=>f.createElement(f.Fragment,{key:t.cvid},r>0&&(r===n.length-1?` ${o("and")} `:", "),f.createElement("b",null,f.createElement(S,{doc:t.name,lookupAttribute:x(e.data)}))))),"."):d?0===d.length?f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},o("resource_center.no_results_found")):d.map((({block:s,truncated:n,results:c},l)=>{const i=Se[s.type],u=i.routeTo&&i.routeTo({block:s,initialQ:a});return f.createElement(f.Fragment,{key:s.cvid},l>0&&f.createElement("div",{className:"userflowjs-resource-center-divider"}),f.createElement("div",{className:"userflowjs-resource-center-label"},f.createElement(S,{doc:s.name,lookupAttribute:x(e.data)})),c.map(((r,n)=>"flow"===r.kind?f.createElement(Ae,{key:r.flow.id,block:s,session:e,flow:r.flow,navigate:t}):"article"===r.kind?f.createElement(Le,{key:n,block:s,session:e,article:r.article}):null)),!n&&u&&f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:n=>{Fe(r,e,s),t(u,n)}},f.createElement("div",{className:"userflowjs-resource-center-block-text"},o("more"),":"," ",f.createElement(S,{doc:s.name,lookupAttribute:x(e.data)})),f.createElement("div",{className:"userflowjs-resource-center-block-nav-icon"},f.createElement(F,{icon:q}))))})):f.createElement("div",{className:"userflowjs-resource-center-list-route-spinner"},f.createElement(Ee,null)))},Ie=({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-content-route userflowjs-bubble-content"},f.createElement(j,{doc:e.emailContent,lookupAttribute:x(t.data)})),xe=({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-content-route userflowjs-bubble-content"},f.createElement(j,{doc:e.phoneContent,lookupAttribute:x(t.data)})),Te=({block:e,initialQ:t,session:r,navigate:s})=>{const{t:n}=Y(),o=f.useRef(null),[c,a]=f.useState(t||""),[l,i]=ke(c,a),{data:u,error:d}=be({kind:"ListResourceCenterBlockFlows",sessionId:r.id,blockCvid:e.cvid}),m=u?.flows,w=f.useMemo((()=>m?Re(m,c):null),[m,c]);return f.useEffect((()=>{o.current?.focus({preventScroll:!0})}),[]),f.createElement(f.Fragment,null,f.createElement("div",{className:"userflowjs-resource-center-list-route-header"},f.createElement("div",{className:"userflowjs-resource-center-list-route-title"},f.createElement(S,{doc:e.name,lookupAttribute:x(r.data)}))),e.searchEnabled&&f.createElement("div",{className:"userflowjs-resource-center-list-route-search"},f.createElement("input",{ref:o,className:"userflowjs-text-input",type:"text",value:l,onChange:e=>i(e.target.value),placeholder:n("resource_center.search_placeholder")})),d?f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},n("resource_center.generic_error")):w?0===w.length?f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},n("resource_center.no_results_found")):w.map((t=>f.createElement(Ae,{key:t.id,block:e,session:r,flow:t,navigate:s}))):f.createElement("div",{className:"userflowjs-resource-center-list-route-spinner"},f.createElement(Ee,{fadeIn:!0})))};function Re(e,t){const r=t.toLowerCase().trim();return""===r?e:e.filter((e=>e.name.toLowerCase().includes(r)))}const Ae=({block:e,session:t,flow:r,navigate:s})=>{const n=w(),[o,c]=f.useState(!1);return f.useEffect((()=>{if(!o||r.type!==i.CHECKLIST)return;const e=()=>{n.checklistSession?.flow.id===r.id&&(t(),s(null))},t=()=>{n.off("checklistChanged",e)};return n.on("checklistChanged",e),t}),[n,o,r.type,r.id,s]),f.createElement("button",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:()=>{if(Fe(n,t,e,r.name),n.checklistSession?.flow.id===r.id)return void s(null);n.startFlow({flowId:r.id,startReason:u.RESOURCE_CENTER,replaceCurrent:!0}),c(!0);const o=g(r.url,{lookupAttribute:x(t.data)});o&&y(o)},disabled:o},f.createElement("div",{className:"userflowjs-resource-center-block-icon"},f.createElement(F,{icon:r.type===i.CHECKLIST?"regular/tasks":"regular/shoe-prints",size:16})),f.createElement("div",{className:"userflowjs-resource-center-block-text"},r.name),o&&f.createElement(Ee,null))},Be=({block:e,initialQ:t,session:r,bodyRef:s})=>{const{t:n}=Y(),o=f.useRef(null),[c,a]=f.useState(t||""),[l,i]=ke(c,a),{loading:u,loadingMore:d,data:m,messageForData:w,error:h,loadMore:E}=be({kind:"SearchKnowledgeBase",sessionId:r.id,blockCvid:e.cvid,q:c,offset:0}),b=m?.truncated,k=f.useCallback((()=>{E(((e,t)=>({...t,offset:e.articles.length})),((e,t)=>({...t,articles:[...e.articles,...t.articles]})))}),[E]);f.useEffect((()=>{const e=s.current;if(!e||u||d||b)return;const t=()=>{e.scrollHeight-e.clientHeight-e.scrollTop>400||k()};return e.addEventListener("scroll",t),()=>{e.removeEventListener("scroll",t)}}),[s,u,d,b,k]),f.useEffect((()=>{o.current?.focus({preventScroll:!0})}),[]);let p=e.knowledgeBaseUrl||"";return p.match(/^https?:\/\//)||(p=`http://${p}`),f.createElement(f.Fragment,null,f.createElement("div",{className:"userflowjs-resource-center-list-route-header"},f.createElement("div",{className:"userflowjs-resource-center-list-route-title"},f.createElement(S,{doc:e.name,lookupAttribute:x(r.data)})),f.createElement("a",{className:"userflowjs-resource-center-icon-button",href:p,target:"_blank",rel:"noopener noreferrer"},f.createElement(F,{icon:K}))),f.createElement("div",{className:"userflowjs-resource-center-list-route-search"},f.createElement("input",{ref:o,className:"userflowjs-text-input",type:"text",value:l,onChange:e=>i(e.target.value),placeholder:n("resource_center.search_placeholder")})),h?f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},"quota_exceeded"===h.code?"Sorry, this company has reached its max number of searches. Consider asking Userflow to be moved to a dedicated search engine for a higher quota.":n("resource_center.generic_error")):u||!m?f.createElement("div",{className:"userflowjs-resource-center-list-route-spinner"},f.createElement(Ee,null)):0===m.articles.length?""===w?.q?null:f.createElement("div",{className:"userflowjs-resource-center-list-route-error"},n("resource_center.no_results_found")):f.createElement(f.Fragment,null,""===w?.q&&f.createElement("div",{className:"userflowjs-resource-center-label"},n("resource_center.suggested_articles")),m.articles.map(((t,s)=>f.createElement(Le,{key:s,block:e,session:r,article:t}))),d&&f.createElement("div",{className:"userflowjs-resource-center-list-route-spinner"},f.createElement(Ee,null))))},Le=({block:e,article:t,session:r})=>{const s=w();return f.createElement("a",{className:"userflowjs-resource-center-block userflowjs-resource-center-block--clickable",onClick:()=>{Fe(s,r,e,t.title)},href:t.url,target:"_blank",rel:"noopener noreferrer"},f.createElement("div",{className:"userflowjs-resource-center-block-icon"},f.createElement(F,{icon:"regular/file-alt",size:16})),f.createElement("div",{className:"userflowjs-resource-center-block-text"},f.createElement("span",{dangerouslySetInnerHTML:{__html:t.htmlTitle}}),f.createElement("div",{className:"userflowjs-resource-center-block-subtext",dangerouslySetInnerHTML:{__html:t.htmlSnippet}})))},He=({block:e,session:t})=>f.createElement("div",{className:"userflowjs-resource-center-content-route userflowjs-bubble-content"},f.createElement(j,{doc:e.content,lookupAttribute:x(t.data)})),Me=({block:e,initialUserContent:t,session:r})=>{const s=e.assistantFlowId,n=w(),[o,c]=f.useState(null),[a,l]=f.useState(null),[i,u]=f.useState(null);return f.useEffect((()=>{let e=!1;return(async()=>{try{const t=d.getItem("assistantConversationId:"+s),[r,o]=await Promise.all([ge(),n.send({kind:"GetAssistant",assistantFlowId:s,conversationId:t},{handlesRejection:!0})]);if(e)return;c((()=>r)),l(o)}catch(t){console.error("Resource center assistant route failed to load:",t),u(t.humanMessage||"Sorry, something went wrong. Please try again or contact my human friends.")}})(),()=>{e=!0}}),[n,s]),i?f.createElement("div",{className:"userflowjs-assistant-chat"},f.createElement("div",{className:"userflowjs-assistant-chat__content"},f.createElement("div",{className:"userflowjs-assistant-chat__error"},i))):o&&a?f.createElement(o,{block:e,session:r,assistantReply:a,initialUserContent:t}):f.createElement(Ee,{center:!0,fadeIn:!0})};function Fe(e,t,r,s){e.send({kind:"ClickResourceCenter",sessionId:t.id,description:r?g(r.name,{lookupAttribute:x(t.data)})+(s?` - ${s}`:""):s},{batch:!0})}var Pe=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",ResourceCenterApp:Ce,default:Ce});export{ve as A,pe as G,Pe as R};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./vendor.react.js";import{u as t}from"./client-context.js";import{y as s,z as a,A as n}from"./vendor.fortawesome.pro-regular-svg-icons.js";import{F as r}from"./vendor.fortawesome.react-fontawesome.js";import{p as o}from"./vendor.dompurify.js";import{m as i}from"./vendor.marked.js";import{o as l}from"./vendor.obj-str.js";import{W as c,p as u}from"./userflow.js";import{A as m,G as d}from"./ResourceCenterApp.js";import{r as f,R as p}from"./BubbleToolbar.js";import{a as b}from"./flow-condition-types.js";import"./vendor.object-assign.js";import"./vendor.i18next.js";import"./vendor.react-i18next.js";import"./vendor.babel.runtime.js";import"./vendor.fortawesome.fontawesome-svg-core.js";import"./vendor.prop-types.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./Icons.js";import"./stylesheets.js";import"./logomark.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./DynamicIcon.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./ChecklistUI.js";import"./vendor.date-fns.js";const g=[];const h=({assistant:t,lookupAttribute:s,history:a,setInput:n,contentElRef:r,scrolledToTop:o,userContent:i,setUserContent:c,onSubmitMessage:u,supportsFeedback:d,onSubmitRating:b,onSubmitFeedback:g,reset:h,onContentScroll:v,onContentWheel:j})=>e.createElement("div",{className:"userflowjs-assistant-chat"},e.createElement("div",{className:l({"userflowjs-assistant-chat__header":!0,"userflowjs-assistant-chat__header--content-scrolled":!o})},e.createElement("h2",{className:"userflowjs-assistant-chat__title"},t.title),e.createElement("button",{className:"userflowjs-bubble-button userflowjs-bubble-button--default",onClick:h},t.resetText)),e.createElement("div",{ref:r,className:"userflowjs-assistant-chat__content",onScroll:v,onWheel:j},!f(t.intro)&&e.createElement("div",{className:"userflowjs-assistant-chat__intro"},e.createElement(p,{doc:t.intro,lookupAttribute:s})),a.map(((s,a)=>e.createElement(k,{key:a,assistant:t,message:s,supportsFeedback:d,onSubmitRating:b,onSubmitFeedback:g})))),e.createElement("div",{className:"userflowjs-assistant-chat__prompt"},e.createElement(m,{textareaRef:n,placeholder:(0===a.length?t.promptEmptyPlaceholder:t.promptNonemptyPlaceholder)||"",value:i,onChange:c,onSubmit:()=>u(i)}))),k=({assistant:t,message:o,supportsFeedback:i,onSubmitRating:u,onSubmitFeedback:m})=>{const f=e.useRef(null),[p,b]=e.useState(""),g=()=>{o.id&&(m({messageId:o.id,feedback:p.trim()}),b(""))};return e.useEffect((()=>{o.rating&&f.current?.focus({preventScroll:!0})}),[o.rating]),e.createElement("div",null,e.createElement("div",{className:l({"userflowjs-assistant-chat__user-content":!0,"userflowjs-assistant-chat__user-content--enter":!!o.enterAnimation})},e.createElement("div",{style:{whiteSpace:"pre-wrap"}},o.userContent)),e.createElement("div",{className:"userflowjs-assistant-chat__assistant-content"},e.createElement("div",{dangerouslySetInnerHTML:{__html:o.assistantHtml||""}}),o.error&&e.createElement("div",{className:"userflowjs-assistant-chat__error"},o.error)),o.sources&&o.sources.length>0&&e.createElement("div",{className:"userflowjs-assistant-chat__sources"},e.createElement("div",{className:"userflowjs-assistant-chat__sources-title"},t.sourcesText),o.sources.map(((t,s)=>e.createElement("a",{key:s,className:"userflowjs-assistant-chat__source",href:t.url,target:"_blank",rel:"noreferrer noopener"},t.title)))),i&&o.completed&&o.id&&e.createElement("div",{className:l({"userflowjs-assistant-chat__feedback":!0,"userflowjs-assistant-chat__feedback--with-textarea":!!o.rating&&!o.feedbackSubmitted})},o.feedbackSubmitted?e.createElement(e.Fragment,null,e.createElement("button",{className:"userflowjs-assistant-chat__rating",disabled:!0},e.createElement(r,{icon:o.rating==c.DISLIKE?s:a})),e.createElement("div",{className:"userflowjs-assistant-chat__feedback-thanks"},t.feedbackThanksText)):o.rating?e.createElement(d,{textareaRef:f,className:"userflowjs-growing-textarea userflowjs-assistant-chat__feedback-textarea",mirrorClassName:"userflowjs-growing-textarea__mirror",textareaClassName:"userflowjs-textarea",placeholder:(o.rating===c.LIKE?t.feedbackLikePlaceholder:t.feedbackDislikePlaceholder)||"",value:p,onChange:b,onKeyDown:e=>{e.shiftKey||"Enter"!==e.key||(e.preventDefault(),g())}},e.createElement("button",{className:"userflowjs-assistant-chat__rating",disabled:!0},e.createElement(r,{icon:o.rating==c.DISLIKE?s:a})),e.createElement("button",{className:"userflowjs-assistant-chat__feedback-submit",onClick:()=>g()},e.createElement(r,{icon:n}))):[c.LIKE,c.DISLIKE].map((t=>(!o.rating||o.rating===t)&&e.createElement("button",{key:t,className:"userflowjs-assistant-chat__rating",onClick:o.rating?void 0:()=>(e=>{o.id&&u({messageId:o.id,rating:e})})(t),disabled:!!o.rating},e.createElement(r,{icon:t==c.DISLIKE?s:a}))))))};function v(e){let t=e;const s=e=>e=(e=e.replace(/\s*[*_`]*$/,"")).replace(/(^|\n)\s*(\d+\.?|-|=)$/,"");t=s(t),t=t.replace(/\[[^\]\n]*(\](\([^)\n]*\)?)?)?$/,""),t=s(t);const a=Array.from(t.matchAll(/\n( *)```/g));if(a.length%2==1){t+="\n"+a[a.length-1][1]+"```"}else{let e=0;for(let r=t.length-1;r>=0;r--)if("\n"===t[r]&&"\n"===t[r-1]){e=r;break}const s=[];let a=!1;const n=e=>null==e||e.match(/\W/);for(let r=e;r<t.length;r++){const e=t[r],o=e+t[r+1],i=o+t[r+2];let l=null;(a||"***"!==i)&&(a||"___"!==i||!n(t[r-1])&&!n(t[r+3]))?(a||"**"!==o)&&(a||"__"!==o||!n(t[r-1])&&!n(t[r+2]))?(a||"*"!==e)&&(a||"_"!==e||!n(t[r-1])&&!n(t[r+1]))?"`"===e&&(l=e):l=e:l=o:l=i,null!=l&&(s[s.length-1]===l?("`"===l&&(a=!1),s.pop()):("`"===l&&(a=!0),s.push(l)),r+=l.length-1)}t+=s.reverse().join("")}return t}function j(e,t){e=e.trim(),!1!==t&&(e=e.replace(/(\n *```)?$/,"{{USERFLOWCHATBRAIN}}$1"));let s=o.sanitize(i.parse(e));if(!1!==t){let e="userflowjs-assistant-brain";t&&(e+=` userflowjs-assistant-brain--${t}`),s=s.replace("{{USERFLOWCHATBRAIN}}",`<span class="${e}"><span></span><span></span><span></span><span></span></span>`)}return s}const _=({block:s,session:a,assistantReply:n,initialUserContent:r})=>{const o=s.assistantFlowId,i=t(),l=function({assistant:t,lookupAttribute:s,initialConversationId:a,initialHistory:n,initialUserContent:r,onConversationIdChange:o,submitMessage:i,submitRating:l,submitFeedback:c}){const[u,m]=e.useState(null),[d,f]=e.useState((()=>n?n.map((e=>({...e,assistantHtml:j(v(e.assistantContent),!1)}))):g)),[p,b]=e.useState(""),h=e.useRef(null),k=e.useRef(null),_=e.useRef(!0),E=e.useRef(a||null),C=e.useCallback((e=>{E.current=e,o&&o(e)}),[o]),w=e.useCallback((()=>{u?.focus({preventScroll:!0})}),[u]);e.useEffect((()=>{w()}),[w]),e.useLayoutEffect((()=>{const e=k.current;e&&(e.scrollTop=Math.ceil(e.scrollHeight-e.clientHeight))}),[]);const I=e.useCallback((()=>{const e=k.current;e&&(_.current=!0,e.scrollTo({top:Math.ceil(e.scrollHeight-e.clientHeight),behavior:"smooth"}))}),[]),S=e.useRef(0);e.useLayoutEffect((()=>{const e=k.current;e&&e.scrollHeight!==S.current&&(S.current=e.scrollHeight,_.current&&I())}),[d,I]);const y=e.useCallback((()=>{h.current&&h.current()}),[]);e.useEffect((()=>()=>{y()}),[y]);const N=(e,t)=>{f((s=>s.map((s=>{if(e===s.id){const e=t(s);return{...s,...e}}return s}))))},R=e=>{f((t=>t.map(((s,a)=>{if(a===t.length-1){const t=e(s);return{...s,...t}}return s}))))},A=e.useCallback((async e=>{if(""===(e=e.trim()))return;y(),f((t=>[...t,{id:null,userContent:e,assistantContent:"",assistantHtml:j("","enter"),enterAnimation:!0,sources:[],completed:!1,rating:null,feedbackSubmitted:!1}])),b(""),I();let t=!1;const s=()=>{t=!0,h.current=null},a=i({conversationId:E.current,userContent:e,callback:e=>{if(t)console.log("Userflow.js AssistantChat got message after being done",e);else switch(e.kind){case"conversation_created":C(e.conversationId);break;case"message_created":R((()=>({id:e.messageId})));break;case"assistant_content_delta":R((t=>{const s=e.delta,a=t.assistantContent+s;return{assistantContent:a,assistantHtml:j(v(a))}}));break;case"done":s(),R((t=>({assistantHtml:j(t.assistantContent,"exit"),completed:!0,sources:e.sources})));break;case"error":s(),R((t=>({failed:!0,error:e.message,assistantHtml:j(v(t.assistantContent),!1)})));break;default:console.log("Userflow.js AssistantChat got unknown message",e)}}});h.current=()=>{s(),a.abort(),R((e=>({assistantHtml:j(v(e.assistantContent),!1)})))}}),[y,I,i,C]),H=e.useRef(!1);e.useEffect((()=>{H.current||(H.current=!0,r&&A(r))}),[A,r]);const F=e.useCallback((()=>{y(),C(null),f(g),w()}),[y,w,C]),[x,M]=e.useState(!0),T=e.useCallback((()=>{const e=k.current;e&&M(0===e.scrollTop)}),[]),L=e.useCallback((()=>{const e=k.current;e&&(_.current=Math.ceil(e.scrollHeight-e.clientHeight)==Math.ceil(e.scrollTop))}),[]);return{assistant:t,lookupAttribute:s,history:d,setInput:m,contentElRef:k,scrolledToTop:x,userContent:p,setUserContent:b,onSubmitMessage:A,supportsFeedback:!!l&&!!c,onSubmitRating:e=>{l&&(N(e.messageId,(()=>({rating:e.rating}))),l(e))},onSubmitFeedback:e=>{c&&(N(e.messageId,(()=>({feedbackSubmitted:!0}))),c(e))},reset:F,onContentScroll:T,onContentWheel:L}}(e.useMemo((()=>({assistant:n.assistant,lookupAttribute:b(a.data),initialConversationId:n.conversationId,initialHistory:n.history,initialUserContent:r,onConversationIdChange:e=>{const t="assistantConversationId:"+o;e?u.setItem(t,e):u.removeItem(t)},submitMessage:({conversationId:e,userContent:t,callback:s})=>{i.assistantMessageInProgress=!0,i.send({kind:"SubmitAssistantMessage",assistantFlowId:o,conversationId:e,userContent:t});const a=()=>{i.assistantMessageInProgress=void 0,i.off("private:assistantMessageEvent",n),i.off("private:disconnect",r)},n=({event:e})=>{s(e),"done"!=e.kind&&"error"!=e.kind||a()},r=()=>{s({kind:"error",message:"Sorry, my connection got disconnected. Please try again or contact my human friends."}),a()};return i.on("private:assistantMessageEvent",n),i.on("private:disconnect",r),{abort:()=>{i.send({kind:"AbortAssistantMessage"}),a()}}},submitRating:e=>{i.send({kind:"SubmitAssistantRating",messageId:e.messageId,rating:e.rating})},submitFeedback:e=>{i.send({kind:"SubmitAssistantFeedback",messageId:e.messageId,feedback:e.feedback})}})),[n,o,i,r,a.data]));return e.createElement(e.Fragment,null,e.createElement(h,{...l}))};export{_ as ResourceCenterAssistantChat};
|
|
1
|
+
import{r as e}from"./vendor.react.js";import{u as t}from"./client-context.js";import{y as s,z as a,A as n}from"./vendor.fortawesome.pro-regular-svg-icons.js";import{F as r}from"./vendor.fortawesome.react-fontawesome.js";import{p as o}from"./vendor.dompurify.js";import{m as i}from"./vendor.marked.js";import{o as l}from"./vendor.obj-str.js";import{W as c,p as u}from"./userflow.js";import{A as m,G as d}from"./ResourceCenterApp.js";import{r as f,R as p}from"./BubbleToolbar.js";import{a as b}from"./flow-condition-types.js";import"./vendor.object-assign.js";import"./vendor.i18next.js";import"./vendor.react-i18next.js";import"./vendor.babel.runtime.js";import"./vendor.fortawesome.fontawesome-svg-core.js";import"./vendor.prop-types.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./Icons.js";import"./stylesheets.js";import"./logomark.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./DynamicIcon.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./ChecklistUI.js";import"./vendor.date-fns.js";const g=[];const h=({assistant:t,lookupAttribute:s,history:a,setInput:n,contentElRef:r,scrolledToTop:o,userContent:i,setUserContent:c,onSubmitMessage:u,supportsFeedback:d,onSubmitRating:b,onSubmitFeedback:g,reset:h,onContentScroll:v,onContentWheel:j})=>e.createElement("div",{className:"userflowjs-assistant-chat"},e.createElement("div",{className:l({"userflowjs-assistant-chat__header":!0,"userflowjs-assistant-chat__header--content-scrolled":!o})},e.createElement("h2",{className:"userflowjs-assistant-chat__title"},t.title),e.createElement("button",{className:"userflowjs-bubble-button userflowjs-bubble-button--default",onClick:h},t.resetText)),e.createElement("div",{ref:r,className:"userflowjs-assistant-chat__content",onScroll:v,onWheel:j},!f(t.intro)&&e.createElement("div",{className:"userflowjs-assistant-chat__intro"},e.createElement(p,{doc:t.intro,lookupAttribute:s})),a.map(((s,a)=>e.createElement(k,{key:a,assistant:t,message:s,supportsFeedback:d,onSubmitRating:b,onSubmitFeedback:g})))),e.createElement("div",{className:"userflowjs-assistant-chat__prompt"},e.createElement(m,{textareaRef:n,placeholder:(0===a.length?t.promptEmptyPlaceholder:t.promptNonemptyPlaceholder)||"",value:i,onChange:c,onSubmit:()=>u(i)}))),k=({assistant:t,message:o,supportsFeedback:i,onSubmitRating:u,onSubmitFeedback:m})=>{const f=e.useRef(null),[p,b]=e.useState(""),g=()=>{o.id&&(m({messageId:o.id,feedback:p.trim()}),b(""))};return e.useEffect((()=>{o.rating&&f.current?.focus({preventScroll:!0})}),[o.rating]),e.createElement("div",null,e.createElement("div",{className:l({"userflowjs-assistant-chat__user-content":!0,"userflowjs-assistant-chat__user-content--enter":!!o.enterAnimation})},e.createElement("div",{style:{whiteSpace:"pre-wrap"}},o.userContent)),e.createElement("div",{className:"userflowjs-assistant-chat__assistant-content"},e.createElement("div",{dangerouslySetInnerHTML:{__html:o.assistantHtml||""}}),o.error&&e.createElement("div",{className:"userflowjs-assistant-chat__error"},o.error)),o.sources&&o.sources.length>0&&e.createElement("div",{className:"userflowjs-assistant-chat__sources"},e.createElement("div",{className:"userflowjs-assistant-chat__sources-title"},t.sourcesText),o.sources.map(((t,s)=>e.createElement("a",{key:s,className:"userflowjs-assistant-chat__source",href:t.url,target:"_blank",rel:"noreferrer noopener"},t.title)))),i&&o.completed&&o.id&&e.createElement("div",{className:l({"userflowjs-assistant-chat__feedback":!0,"userflowjs-assistant-chat__feedback--with-textarea":!!o.rating&&!o.feedbackSubmitted})},o.feedbackSubmitted?e.createElement(e.Fragment,null,e.createElement("button",{className:"userflowjs-assistant-chat__rating",disabled:!0},e.createElement(r,{icon:o.rating==c.DISLIKE?s:a})),e.createElement("div",{className:"userflowjs-assistant-chat__feedback-thanks"},t.feedbackThanksText)):o.rating?e.createElement(d,{textareaRef:f,className:"userflowjs-growing-textarea userflowjs-assistant-chat__feedback-textarea",mirrorClassName:"userflowjs-growing-textarea__mirror",textareaClassName:"userflowjs-textarea",placeholder:(o.rating===c.LIKE?t.feedbackLikePlaceholder:t.feedbackDislikePlaceholder)||"",value:p,onChange:b,onKeyDown:e=>{e.shiftKey||"Enter"!==e.key||(e.preventDefault(),g())}},e.createElement("button",{className:"userflowjs-assistant-chat__rating",disabled:!0},e.createElement(r,{icon:o.rating==c.DISLIKE?s:a})),e.createElement("button",{className:"userflowjs-assistant-chat__feedback-submit",onClick:()=>g()},e.createElement(r,{icon:n}))):[c.LIKE,c.DISLIKE].map((t=>(!o.rating||o.rating===t)&&e.createElement("button",{key:t,className:"userflowjs-assistant-chat__rating",onClick:o.rating?void 0:()=>(e=>{o.id&&u({messageId:o.id,rating:e})})(t),disabled:!!o.rating},e.createElement(r,{icon:t==c.DISLIKE?s:a}))))))};function v(e){let t=e;const s=e=>e=(e=e.replace(/\s*[*_`]*$/,"")).replace(/(^|\n)\s*(\d+\.?|-|=)$/,"");t=s(t),t=t.replace(/\[[^\]\n]*(\](\([^)\n]*\)?)?)?$/,""),t=s(t);const a=Array.from(t.matchAll(/\n( *)```/g));if(a.length%2==1){t+="\n"+a[a.length-1][1]+"```"}else{let e=0;for(let r=t.length-1;r>=0;r--)if("\n"===t[r]&&"\n"===t[r-1]){e=r;break}const s=[];let a=!1;const n=e=>null==e||e.match(/\W/);for(let r=e;r<t.length;r++){const e=t[r],o=e+t[r+1],i=o+t[r+2];let l=null;(a||"***"!==i)&&(a||"___"!==i||!n(t[r-1])&&!n(t[r+3]))?(a||"**"!==o)&&(a||"__"!==o||!n(t[r-1])&&!n(t[r+2]))?(a||"*"!==e)&&(a||"_"!==e||!n(t[r-1])&&!n(t[r+1]))?"`"===e&&(l=e):l=e:l=o:l=i,null!=l&&(s[s.length-1]===l?("`"===l&&(a=!1),s.pop()):("`"===l&&(a=!0),s.push(l)),r+=l.length-1)}t+=s.reverse().join("")}return t}function j(e,t){e=e.trim(),!1!==t&&(e=e.replace(/(\n *```)?$/,"{{USERFLOWCHATBRAIN}}$1"));let s=o.sanitize(i.parse(e));if(!1!==t){let e="userflowjs-assistant-brain";t&&(e+=` userflowjs-assistant-brain--${t}`),s=s.replace("{{USERFLOWCHATBRAIN}}",`<span class="${e}"><span></span><span></span><span></span><span></span></span>`)}return s}let _=1;const E=({block:s,session:a,assistantReply:n,initialUserContent:r})=>{const o=s.assistantFlowId,i=t(),l=function({assistant:t,lookupAttribute:s,initialConversationId:a,initialHistory:n,initialUserContent:r,onConversationIdChange:o,submitMessage:i,submitRating:l,submitFeedback:c}){const[u,m]=e.useState(null),[d,f]=e.useState((()=>n?n.map((e=>({...e,assistantHtml:j(v(e.assistantContent),!1)}))):g)),[p,b]=e.useState(""),h=e.useRef(null),k=e.useRef(null),_=e.useRef(!0),E=e.useRef(a||null),C=e.useCallback((e=>{E.current=e,o&&o(e)}),[o]),w=e.useCallback((()=>{u?.focus({preventScroll:!0})}),[u]);e.useEffect((()=>{w()}),[w]),e.useLayoutEffect((()=>{const e=k.current;e&&(e.scrollTop=Math.ceil(e.scrollHeight-e.clientHeight))}),[]);const I=e.useCallback((()=>{const e=k.current;e&&(_.current=!0,e.scrollTo({top:Math.ceil(e.scrollHeight-e.clientHeight),behavior:"smooth"}))}),[]),S=e.useRef(0);e.useLayoutEffect((()=>{const e=k.current;e&&e.scrollHeight!==S.current&&(S.current=e.scrollHeight,_.current&&I())}),[d,I]);const y=e.useCallback((()=>{h.current&&h.current()}),[]);e.useEffect((()=>()=>{y()}),[y]);const N=(e,t)=>{f((s=>s.map((s=>{if(e===s.id){const e=t(s);return{...s,...e}}return s}))))},R=e=>{f((t=>t.map(((s,a)=>{if(a===t.length-1){const t=e(s);return{...s,...t}}return s}))))},A=e.useCallback((async e=>{if(""===(e=e.trim()))return;y(),f((t=>[...t,{id:null,userContent:e,assistantContent:"",assistantHtml:j("","enter"),enterAnimation:!0,sources:[],completed:!1,rating:null,feedbackSubmitted:!1}])),b(""),I();let t=!1;const s=()=>{t=!0,h.current=null},a=i({conversationId:E.current,userContent:e,callback:e=>{if(t)console.log("Userflow.js AssistantChat got message after being done",e);else switch(e.kind){case"conversation_created":C(e.conversationId);break;case"message_created":R((()=>({id:e.messageId})));break;case"assistant_content_delta":R((t=>{const s=e.delta,a=t.assistantContent+s;return{assistantContent:a,assistantHtml:j(v(a))}}));break;case"done":s(),R((t=>({assistantHtml:j(t.assistantContent,"exit"),completed:!0,sources:e.sources})));break;case"error":s(),R((t=>({failed:!0,error:e.message,assistantHtml:j(v(t.assistantContent),!1)})));break;default:console.log("Userflow.js AssistantChat got unknown message",e)}}});h.current=()=>{s(),a.abort(),R((e=>({assistantHtml:j(v(e.assistantContent),!1)})))}}),[y,I,i,C]),H=e.useRef(!1);e.useEffect((()=>{H.current||(H.current=!0,r&&A(r))}),[A,r]);const F=e.useCallback((()=>{y(),C(null),f(g),w()}),[y,w,C]),[x,M]=e.useState(!0),T=e.useCallback((()=>{const e=k.current;e&&M(0===e.scrollTop)}),[]),L=e.useCallback((()=>{const e=k.current;e&&(_.current=Math.ceil(e.scrollHeight-e.clientHeight)==Math.ceil(e.scrollTop))}),[]);return{assistant:t,lookupAttribute:s,history:d,setInput:m,contentElRef:k,scrolledToTop:x,userContent:p,setUserContent:b,onSubmitMessage:A,supportsFeedback:!!l&&!!c,onSubmitRating:e=>{l&&(N(e.messageId,(()=>({rating:e.rating}))),l(e))},onSubmitFeedback:e=>{c&&(N(e.messageId,(()=>({feedbackSubmitted:!0}))),c(e))},reset:F,onContentScroll:T,onContentWheel:L}}(e.useMemo((()=>({assistant:n.assistant,lookupAttribute:b(a.data),initialConversationId:n.conversationId,initialHistory:n.history,initialUserContent:r,onConversationIdChange:e=>{const t="assistantConversationId:"+o;e?u.setItem(t,e):u.removeItem(t)},submitMessage:({conversationId:e,userContent:t,callback:s})=>{i.assistantMessageInProgress=!0;const a=_++;i.send({kind:"SubmitAssistantMessage",ref:a,assistantFlowId:o,conversationId:e,userContent:t});const n=()=>{i.assistantMessageInProgress=void 0,i.off("private:assistantMessageEvent",r),i.off("private:disconnect",l)},r=e=>{if(e.ref!==a)return;const{event:t}=e;s(t),"done"!=t.kind&&"error"!=t.kind||n()},l=()=>{s({kind:"error",message:"Sorry, my connection got disconnected. Please try again or contact my human friends."}),n()};return i.on("private:assistantMessageEvent",r),i.on("private:disconnect",l),{abort:()=>{i.send({kind:"AbortAssistantMessage"}),n()}}},submitRating:e=>{i.send({kind:"SubmitAssistantRating",messageId:e.messageId,rating:e.rating})},submitFeedback:e=>{i.send({kind:"SubmitAssistantFeedback",messageId:e.messageId,feedback:e.feedback})}})),[n,o,i,r,a.data]));return e.createElement(e.Fragment,null,e.createElement(h,{...l}))};export{E as ResourceCenterAssistantChat};
|
package/bubble-frame.css
CHANGED
|
@@ -1304,6 +1304,14 @@
|
|
|
1304
1304
|
.userflowjs-resource-center-frame-root--open .userflowjs-resource-center-preview-content {
|
|
1305
1305
|
opacity: 1;
|
|
1306
1306
|
}
|
|
1307
|
+
.userflowjs-resource-center-body,
|
|
1308
|
+
.userflowjs-resource-center-header {
|
|
1309
|
+
width: var(--userflow-resource-center-width);
|
|
1310
|
+
}
|
|
1311
|
+
.userflowjs-resource-center-frame-root--large .userflowjs-resource-center-body,
|
|
1312
|
+
.userflowjs-resource-center-frame-root--large .userflowjs-resource-center-header {
|
|
1313
|
+
width: var(--userflow-resource-center-full-width);
|
|
1314
|
+
}
|
|
1307
1315
|
.userflowjs-resource-center-frame-root--animating .userflowjs-resource-center-body {
|
|
1308
1316
|
pointer-events: none;
|
|
1309
1317
|
overflow: hidden;
|
|
@@ -1407,7 +1415,6 @@
|
|
|
1407
1415
|
}
|
|
1408
1416
|
.userflowjs-resource-center-header {
|
|
1409
1417
|
order: 1;
|
|
1410
|
-
width: var(--userflow-resource-center-width);
|
|
1411
1418
|
background-color: var(--userflow-brand-background-color);
|
|
1412
1419
|
}
|
|
1413
1420
|
.userflowjs-resource-center-header-content {
|
|
@@ -1446,7 +1453,7 @@
|
|
|
1446
1453
|
}
|
|
1447
1454
|
.userflowjs-resource-center-body {
|
|
1448
1455
|
order: 2;
|
|
1449
|
-
|
|
1456
|
+
min-height: 0;
|
|
1450
1457
|
min-width: 0;
|
|
1451
1458
|
flex: 1 1 0%;
|
|
1452
1459
|
overflow: auto;
|
|
@@ -1458,12 +1465,12 @@
|
|
|
1458
1465
|
.userflowjs-resource-center-body-content--padding {
|
|
1459
1466
|
padding: 1rem;
|
|
1460
1467
|
}
|
|
1468
|
+
.userflowjs-resource-center-body-content--padding.userflowjs-resource-center-body-content--with-made-with-userflow {
|
|
1469
|
+
padding-bottom: 0.5rem;
|
|
1470
|
+
}
|
|
1461
1471
|
.userflowjs-resource-center-body-content--same-background {
|
|
1462
1472
|
padding-top: 0;
|
|
1463
1473
|
}
|
|
1464
|
-
.userflowjs-resource-center-body-content--with-made-with-userflow {
|
|
1465
|
-
padding-bottom: 0.5rem;
|
|
1466
|
-
}
|
|
1467
1474
|
.userflowjs-resource-center-icon-button,
|
|
1468
1475
|
a.userflowjs-resource-center-icon-button {
|
|
1469
1476
|
cursor: pointer;
|
|
@@ -1803,6 +1810,7 @@ a.userflowjs-resource-center-block--clickable:hover {
|
|
|
1803
1810
|
margin: 0 !important;
|
|
1804
1811
|
}
|
|
1805
1812
|
.userflowjs-assistant-chat__content {
|
|
1813
|
+
min-height: 0;
|
|
1806
1814
|
min-width: 0;
|
|
1807
1815
|
flex: 1 1 0%;
|
|
1808
1816
|
padding: 1rem;
|
|
@@ -1933,7 +1941,7 @@ a.userflowjs-resource-center-block--clickable:hover {
|
|
|
1933
1941
|
padding: 0 1rem 1rem 1rem;
|
|
1934
1942
|
}
|
|
1935
1943
|
.userflowjs-resource-center-body-content--with-made-with-userflow .userflowjs-assistant-chat__prompt {
|
|
1936
|
-
padding-bottom: 0;
|
|
1944
|
+
padding-bottom: 0.5rem;
|
|
1937
1945
|
}
|
|
1938
1946
|
.userflowjs-assistant-chat-input {
|
|
1939
1947
|
position: relative;
|
package/flow-host.css
CHANGED
|
@@ -387,6 +387,9 @@ _:future,
|
|
|
387
387
|
width: var(--userflow-resource-center-width);
|
|
388
388
|
border-radius: var(--userflow-bubble-border-radius);
|
|
389
389
|
}
|
|
390
|
+
.userflowjs-resource-center-frame--open.userflowjs-resource-center-frame--large {
|
|
391
|
+
width: var(--userflow-resource-center-full-width);
|
|
392
|
+
}
|
|
390
393
|
@supports (-ms-ime-align: auto) {
|
|
391
394
|
.userflowjs-bubble,
|
|
392
395
|
.userflowjs-bubble__avatar,
|
package/hash.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
7bf2e3d638ff159fbaadcf0ef869ecd67114fa22
|
package/package.json
CHANGED
package/stylesheets.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as o}from"./vendor.react.js";import{x as r,B as t,A as e,y as n}from"./userflow.js";import{c as u}from"./flow-condition-types.js";import{a as l}from"./client-context.js";function a(t){const[e]=o.useState((()=>new r(t)));return e.update(t),e}function c(o){return o?o.match(/^#[0-9a-f]{6}$/i)?[parseInt(o.substring(1,3),16),parseInt(o.substring(3,5),16),parseInt(o.substring(5,7),16)]:o.match(/^#[0-9a-f]{3}$/i)?[parseInt(o.substring(1,2).repeat(2),16),parseInt(o.substring(2,3).repeat(2),16),parseInt(o.substring(3,4).repeat(2),16)]:[0,0,0]:[0,0,0]}function i([o,r,t]){return"#"+o.toString(16).padStart(2,"0")+r.toString(16).padStart(2,"0")+t.toString(16).padStart(2,"0")}function d(o){const r=c(o);return r?r.join(", "):"0, 0, 0"}function s(o){return i(c(o))}function f(o,r,t){return[Math.max(0,Math.min(255,Math.round(o[0]+(r[0]-o[0])*t))),Math.max(0,Math.min(255,Math.round(o[1]+(r[1]-o[1])*t))),Math.max(0,Math.min(255,Math.round(o[2]+(r[2]-o[2])*t)))]}function h(o,r,t){const e=c(o),n=c(r);return e&&n?i(f(e,n,t)):o}function g([o,r,t]){o/=255,r/=255,t/=255;const e=Math.max(o,r,t),n=Math.min(o,r,t);let u,l,a=(e+n)/2;if(e==n)u=l=0;else{const c=e-n;switch(l=a>.5?c/(2-e-n):c/(e+n),e){case o:u=(r-t)/c+(r<t?6:0);break;case r:u=(t-o)/c+2;break;default:u=(o-r)/c+4}u/=6}return[u,l,a]}function B([o,r,t]){let e=r/255,n=t/255;function u(o){let r=0;return r=o<=.04045?o/12.92:Math.pow((o+.055)/1.055,2.4),r}let l=.2126*u(o/255)+.7152*u(e)+.0722*u(n);return Math.round(10*function(o){let r=0;return r=o<=216/24389?o*(24389/27):116*Math.pow(o,1/3)-16,r}(l))/1e3}function C(o,r){const t=B(o),e=B(r);let n=.13*((1-(e-t))/2)+.05,u=1-Math.abs(e-t),l=n+Math.pow((1-n)*u,4);return Math.round(1e3*l)/1e3}function b(o,r){const t=c(o),e=g(t);let n=null,u=null;for(const i of r){const o=c(i),r=g(o);let t=!1;if(n&&u){const o=.3;Math.abs(r[2]-e[2])>o?r[1]>u[1]&&(t=!0):Math.abs(e[2]-r[2])>Math.abs(e[2]-u[2])&&(t=!0)}else t=!0;t&&(n=o,u=r)}let l=n,a=n,d=C(l,t),s=2*d;return e[2]>.2&&e[2]<.8&&(a=function([o,r,t]){return[Math.round(255-o),Math.round(255-r),Math.round(255-t)]}(a),s=C(a,t)),[i(f(t,l,d)),i(f(t,a,s))]}function k(o){const[r,t,e,n,u,l,a,i]=function(o,r,t,e){const[n,u]=b(o,[r]);let l,a;if(o===t)l=n,a=u;else{const n=b(t,[o,r,e]);l=n[0],a=n[1]}const i=c(o),d=c(t);let s,f,h,g;if(Math.abs(i[0]-d[0])<20&&Math.abs(i[1]-d[1])<20&&Math.abs(i[2]-d[2])<20){s=r,f=o;const t=b(s,[f]);h=t[0],g=t[1]}else s=o,f=r,h=n,g=u;return[n,u,l,a,s,f,h,g]}(o.brandBackgroundColor,o.brandForegroundColor,o.mainBackgroundColor,o.mainForegroundColor),d={...o,widgetBackgroundColor:u,widgetForegroundColor:l,widgetHoverBackgroundColor:a,widgetActiveBackgroundColor:i,sameBackground:s(o.mainBackgroundColor)==s(o.brandBackgroundColor)};if(d.brandHoverBackgroundColor&&(d.widgetHoverBackgroundColor=d.brandHoverBackgroundColor),d.brandActiveBackgroundColor&&(d.widgetActiveBackgroundColor=d.brandActiveBackgroundColor),d.brandHoverBackgroundColor||(d.brandHoverBackgroundColor=r),d.brandActiveBackgroundColor||(d.brandActiveBackgroundColor=t),d.mainHoverBackgroundColor||(d.mainHoverBackgroundColor=e),d.mainActiveBackgroundColor||(d.mainActiveBackgroundColor=n),d.bubbleBorderColor||(d.bubbleBorderColor=d.mainForegroundColor),d.checklistLauncherActiveBackgroundColor||(d.checklistLauncherActiveBackgroundColor=d.brandActiveBackgroundColor),d.checklistLauncherBackgroundColor||(d.checklistLauncherBackgroundColor=d.brandBackgroundColor),d.checklistLauncherCounterBackgroundColor||(d.checklistLauncherCounterBackgroundColor=d.brandForegroundColor),d.checklistLauncherCounterFontColor||(d.checklistLauncherCounterFontColor=d.brandBackgroundColor),d.checklistLauncherFontColor||(d.checklistLauncherFontColor=d.brandForegroundColor),d.checklistLauncherHoverBackgroundColor||(d.checklistLauncherHoverBackgroundColor=d.brandHoverBackgroundColor),d.focusColor||(d.focusColor=d.mainActiveBackgroundColor),d.launcherIconActiveColor||(d.launcherIconActiveColor=d.brandActiveBackgroundColor),d.launcherIconColor||(d.launcherIconColor=d.brandBackgroundColor),d.launcherIconHoverColor||(d.launcherIconHoverColor=d.brandHoverBackgroundColor),d.linkColor||(d.linkColor=d.widgetBackgroundColor),d.progressBarColor||(d.progressBarColor=d.widgetBackgroundColor),d.questionColor||(d.questionColor=d.widgetBackgroundColor),d.toolbarForegroundColor||(d.toolbarForegroundColor=d.mainForegroundColor),d.primaryButtonBackgroundColor||(d.primaryButtonBackgroundColor=d.widgetBackgroundColor),d.primaryButtonFontColor||(d.primaryButtonFontColor=d.widgetForegroundColor),d.primaryButtonHoverFontColor||(d.primaryButtonHoverFontColor=d.primaryButtonFontColor),d.primaryButtonActiveFontColor||(d.primaryButtonActiveFontColor=d.primaryButtonFontColor),!d.primaryButtonHoverBackgroundColor||!d.primaryButtonActiveBackgroundColor){const[o,r]=b(d.primaryButtonBackgroundColor,[d.primaryButtonFontColor]);d.primaryButtonHoverBackgroundColor||(d.primaryButtonHoverBackgroundColor=o),d.primaryButtonActiveBackgroundColor||(d.primaryButtonActiveBackgroundColor=r)}if(d.primaryButtonBorderColor||(d.primaryButtonBorderColor=d.widgetBackgroundColor),d.primaryButtonHoverBorderColor||(d.primaryButtonHoverBorderColor=d.primaryButtonHoverBackgroundColor),d.primaryButtonActiveBorderColor||(d.primaryButtonActiveBorderColor=d.primaryButtonActiveBackgroundColor),d.defaultButtonBackgroundColor||(d.defaultButtonBackgroundColor=d.mainBackgroundColor),d.defaultButtonFontColor||(d.defaultButtonFontColor=u),d.defaultButtonHoverFontColor||(d.defaultButtonHoverFontColor=d.defaultButtonFontColor),d.defaultButtonActiveFontColor||(d.defaultButtonActiveFontColor=d.defaultButtonFontColor),!d.defaultButtonHoverBackgroundColor||!d.defaultButtonActiveBackgroundColor){const[o,r]=b(d.defaultButtonBackgroundColor,[d.defaultButtonFontColor]);d.defaultButtonHoverBackgroundColor||(d.defaultButtonHoverBackgroundColor=o),d.defaultButtonActiveBackgroundColor||(d.defaultButtonActiveBackgroundColor=r)}return d.defaultButtonBorderColor||(d.defaultButtonBorderColor=d.defaultButtonFontColor),d.defaultButtonHoverBorderColor||(d.defaultButtonHoverBorderColor=d.defaultButtonBorderColor),d.defaultButtonActiveBorderColor||(d.defaultButtonActiveBorderColor=d.defaultButtonBorderColor),d.launcherButtonBackgroundColor||(d.launcherButtonBackgroundColor=d.brandBackgroundColor),d.launcherButtonBorderColor||(d.launcherButtonBorderColor=d.brandBackgroundColor),d.launcherButtonFontColor||(d.launcherButtonFontColor=d.brandForegroundColor),d.launcherButtonHoverBackgroundColor||(d.launcherButtonHoverBackgroundColor=d.brandHoverBackgroundColor),d.launcherButtonHoverBorderColor||(d.launcherButtonHoverBorderColor=d.launcherButtonHoverBackgroundColor),d.launcherButtonHoverFontColor||(d.launcherButtonHoverFontColor=d.launcherButtonFontColor),d.launcherButtonActiveBackgroundColor||(d.launcherButtonActiveBackgroundColor=d.brandActiveBackgroundColor),d.launcherButtonActiveBorderColor||(d.launcherButtonActiveBorderColor=d.launcherButtonActiveBackgroundColor),d.launcherButtonActiveFontColor||(d.launcherButtonActiveFontColor=d.launcherButtonFontColor),d}function w(o){const{questionColor:r}=o;return{"--userflow-backdrop-highlight-color-rgb":d(o.backdropHighlightColor),"--userflow-backdrop-highlight-inset":o.backdropHighlightType===t.INSIDE?"inset":"","--userflow-backdrop-highlight-opacity":o.backdropHighlightOpacity,"--userflow-backdrop-highlight-radius":o.backdropHighlightRadius+"px","--userflow-backdrop-highlight-spread":o.backdropHighlightSpread+"px","--userflow-backdrop-opacity":o.backdropOpacity,"--userflow-beacon-color":o.beaconColor,"--userflow-brand-active-background-color":o.brandActiveBackgroundColor,"--userflow-brand-background-color":o.brandBackgroundColor,"--userflow-brand-foreground-color":o.brandForegroundColor,"--userflow-brand-foreground-color-rgb":d(o.brandForegroundColor),"--userflow-brand-hover-background-color":o.brandHoverBackgroundColor,"--userflow-bubble-border-color":o.bubbleBorderColor,"--userflow-bubble-border-radius":o.bubbleBorderRadius+"px","--userflow-bubble-border-width":o.bubbleBorderWidth+"px","--userflow-button-border-radius":o.buttonBorderRadius+"px","--userflow-button-height":o.buttonHeight+"px","--userflow-button-min-width":o.buttonMinWidth+"px","--userflow-button-text-align":0===o.buttonMinWidth?"start":"center","--userflow-buttons-justify-content":"left"===o.buttonHorizontalAlign?"flex-start":"center"===o.buttonHorizontalAlign?"center":"flex-end","--userflow-buttons-modal-justify-content":"left"===o.buttonHorizontalAlign?"flex-start":"right"===o.buttonHorizontalAlign?"flex-end":"center","--userflow-checklist-launcher-active-background-color":o.checklistLauncherActiveBackgroundColor,"--userflow-checklist-launcher-background-color":o.checklistLauncherBackgroundColor,"--userflow-checklist-launcher-border-radius":o.checklistLauncherBorderRadius+"px","--userflow-checklist-launcher-counter-background-color":o.checklistLauncherCounterBackgroundColor,"--userflow-checklist-launcher-counter-font-color":o.checklistLauncherCounterFontColor,"--userflow-checklist-launcher-font-color-rgb":d(o.checklistLauncherFontColor),"--userflow-checklist-launcher-font-color":o.checklistLauncherFontColor,"--userflow-checklist-launcher-font-weight":String(o.checklistLauncherFontWeight),"--userflow-checklist-launcher-height":o.checklistLauncherHeight+"px","--userflow-checklist-launcher-hover-background-color":o.checklistLauncherHoverBackgroundColor,"--userflow-checkmark-background-color":o.checkmarkBackgroundColor,"--userflow-completed-task-text-decoration":o.completedTaskTextDecoration,"--userflow-default-button-active-background-color":o.defaultButtonActiveBackgroundColor,"--userflow-default-button-active-border-color":o.defaultButtonActiveBorderColor,"--userflow-default-button-active-font-color":o.defaultButtonActiveFontColor,"--userflow-default-button-background-color":o.defaultButtonBackgroundColor,"--userflow-default-button-border-color":o.defaultButtonBorderColor,"--userflow-default-button-border-width":o.defaultButtonBorderWidth+"px","--userflow-default-button-font-color":o.defaultButtonFontColor,"--userflow-default-button-font-weight":String(o.defaultButtonFontWeight),"--userflow-default-button-hover-background-color":o.defaultButtonHoverBackgroundColor,"--userflow-default-button-hover-border-color":o.defaultButtonHoverBorderColor,"--userflow-default-button-hover-font-color":o.defaultButtonHoverFontColor,"--userflow-focus-color":`rgba(${d(o.focusColor)}, ${o.focusOpacity})`,"--userflow-font-family":o.builtinFontFamily?o.builtinFontFamily.name+(o.builtinFontFamily.fallback?", "+o.builtinFontFamily.fallback:""):o.fontFamily?o.fontFamily:"sans-serif","--userflow-font-size":o.fontSize+"px","--userflow-font-weight-bold":String(o.fontWeightBold),"--userflow-font-weight-normal":String(o.fontWeightNormal),"--userflow-h1-font-size":o.h1FontSize+"px","--userflow-h2-font-size":o.h2FontSize+"px","--userflow-launcher-button-active-background-color":o.launcherButtonActiveBackgroundColor,"--userflow-launcher-button-active-border-color":o.launcherButtonActiveBorderColor,"--userflow-launcher-button-active-font-color":o.launcherButtonActiveFontColor,"--userflow-launcher-button-background-color":o.launcherButtonBackgroundColor,"--userflow-launcher-button-border-color":o.launcherButtonBorderColor,"--userflow-launcher-button-border-radius":o.launcherButtonBorderRadius+"px","--userflow-launcher-button-border-width":o.launcherButtonBorderWidth+"px","--userflow-launcher-button-font-color":o.launcherButtonFontColor,"--userflow-launcher-button-font-weight":String(o.launcherButtonFontWeight),"--userflow-launcher-button-height":o.launcherButtonHeight+"px","--userflow-launcher-button-horizontal-padding":o.launcherButtonHorizontalPadding+"px","--userflow-launcher-button-hover-background-color":o.launcherButtonHoverBackgroundColor,"--userflow-launcher-button-hover-border-color":o.launcherButtonHoverBorderColor,"--userflow-launcher-button-hover-font-color":o.launcherButtonHoverFontColor,"--userflow-launcher-button-width":o.launcherButtonWidth?o.launcherButtonWidth+"px":"auto","--userflow-launcher-icon-active-color":o.launcherIconActiveColor,"--userflow-launcher-icon-color":o.launcherIconColor,"--userflow-launcher-icon-hover-color":o.launcherIconHoverColor,"--userflow-launcher-icon-opacity":o.launcherIconOpacity,"--userflow-launcher-icon-size":o.launcherIconSize+"px","--userflow-line-height":o.lineHeight+"px","--userflow-link-color":o.linkColor,"--userflow-main-active-background-color":o.mainActiveBackgroundColor,"--userflow-main-background-color":o.mainBackgroundColor,"--userflow-main-background-color-rgb":d(o.mainBackgroundColor),"--userflow-main-foreground-color":o.mainForegroundColor,"--userflow-main-foreground-color-rgb":d(o.mainForegroundColor),"--userflow-main-hover-background-color":o.mainHoverBackgroundColor,"--userflow-modal-padding":o.modalPadding+"px","--userflow-modal-padding-top":(o.avatarType===e.NONE?o.modalPadding:o.modalPadding+Math.max((o.avatarSize-o.modalPadding)/2,0))+"px","--userflow-backdrop-color-rgb":d(o.backdropColor),"--userflow-notch-color":o.bubbleBorderWidth>0&&o.bubbleBorderColor||o.mainBackgroundColor,"--userflow-primary-button-active-background-color":o.primaryButtonActiveBackgroundColor,"--userflow-primary-button-active-border-color":o.primaryButtonActiveBorderColor,"--userflow-primary-button-active-font-color":o.primaryButtonActiveFontColor,"--userflow-primary-button-background-color":o.primaryButtonBackgroundColor,"--userflow-primary-button-border-color":o.primaryButtonBorderColor,"--userflow-primary-button-border-width":o.primaryButtonBorderWidth+"px","--userflow-primary-button-font-color":o.primaryButtonFontColor,"--userflow-primary-button-font-weight":String(o.primaryButtonFontWeight),"--userflow-primary-button-hover-background-color":o.primaryButtonHoverBackgroundColor,"--userflow-primary-button-hover-border-color":o.primaryButtonHoverBorderColor,"--userflow-primary-button-hover-font-color":o.primaryButtonHoverFontColor,"--userflow-progress-bar-color":o.progressBarColor,"--userflow-progress-bar-height":o.progressBarHeight+"px","--userflow-resource-center-collapsed-height":o.resourceCenterCollapsedHeight+"px","--userflow-resource-center-launcher-border-radius":(null!=o.resourceCenterLauncherBorderRadius?o.resourceCenterLauncherBorderRadius:o.resourceCenterCollapsedHeight/2)+"px","--userflow-resource-center-padding-x":o.resourceCenterPaddingX+"px","--userflow-resource-center-padding-y":o.resourceCenterPaddingY+"px","--userflow-resource-center-transition-duration":o.resourceCenterTransitionDuration+"ms","--userflow-resource-center-width":o.resourceCenterWidth+"px","--userflow-question-color-light":h(r,o.mainBackgroundColor,.5),"--userflow-question-color-lighter":h(r,o.mainBackgroundColor,.75),"--userflow-question-color-lightest":h(r,o.mainBackgroundColor,.9),"--userflow-question-color-medium-light":h(r,o.mainBackgroundColor,.15),"--userflow-question-color":r,"--userflow-toolbar-foreground-color":o.toolbarForegroundColor,"--userflow-toolbar-foreground-color-rgb":d(o.toolbarForegroundColor),"--userflow-tooltip-notch-size":o.tooltipNotchSize+"px","--userflow-widget-active-background-color":o.widgetActiveBackgroundColor,"--userflow-widget-background-color":o.widgetBackgroundColor,"--userflow-widget-foreground-color":o.widgetForegroundColor,"--userflow-widget-hover-background-color":o.widgetHoverBackgroundColor}}const p=[];function m(r){let[t,e]=o.useState(r);const n=a(r.sessionData||p);return o.useLayoutEffect((()=>{const{variations:o}=r;if(!o)return;const t=[],l=[],a=()=>{let n=r,u=!1;for(const[r,e]of o.entries())if(t[r]){u||(u=!0,n={...n});for(const o of e.overriddenKeys)n[o]=e[o]}e(n)};for(const[r,e]of o.entries()){t[r]=!1;const{condition:o}=e;if(o&&e.overriddenKeys&&e.overriddenKeys.length>0){const e=u[o.type].track({sessionData:n,condition:o,callback:o=>{t[r]=o,a()}});l[r]=e}else l[r]=()=>{}}return a(),()=>{for(const o of l)o()}}),[r,n]),o.useMemo((()=>k(t)),[t])}const v=new Map;function y(o){let r=v.get(o);return r||(r={stylesheets:new Map},v.set(o,r)),r}function F(r,t,e){const n=l(),[u,a]=o.useState(!t);return o.useLayoutEffect((()=>{if(!r||!t)return;let o,u=!1;const l=async t=>{await x(n,r,t),o&&function(o,r){const t=y(o),e=t.stylesheets.get(r);if(!e)return;o.document.head.removeChild(e.link),t.stylesheets.delete(r)}(r,o),o=t};(async()=>{let o="string"==typeof t?t:t.get();if(window.MSInputMethodContext&&document.documentMode&&e){let r=await function(o){return new Promise(((r,t)=>{let e=H.get(o);if(e)return void r(e);const n=new XMLHttpRequest;n.addEventListener("load",(()=>{if(200!==n.status)return void t(new Error("Userflow.js could not fetch stylesheet: "+o));const e=n.responseText;H.set(o,e),r(e)})),n.addEventListener("error",(()=>{t(new Error("Userflow.js could not fetch stylesheet: "+o))})),n.open("GET",o),n.send()}))}(o);if(u)return;r=function(o,r){for(const t in r)if(r.hasOwnProperty(t)){const e=r[t];e&&(o=o.replace(new RegExp(`var\\(${t}.*?\\)`,"g"),e))}return o=o.replace(/var\(--[a-z0-9-]+(,\s*(.*?))?\)/g,"$2")}(r,w(e)),o="data:text/css;base64,"+btoa(r)}await l(o),u||a(!0)})();let c=null;return"string"!=typeof t&&(c=t.onUpdate((async()=>{l(t.get())}))),()=>{u=!0,c&&c()}}),[n,r,t,e]),{loaded:u}}const H=new Map;function A(r,t){const e=t&&function(o){if(!o.builtinFontFamily)return o.fontCssUrl?{url:o.fontCssUrl,fontFamily:o.fontFamily}:null;switch(o.builtinFontFamily.provider){case n.GOOGLE:{const r=Array.from(new Set(["0,400","1,400",`0,${o.fontWeightBold}`,`0,${o.defaultButtonFontWeight}`,`0,${o.primaryButtonFontWeight}`,`0,${o.checklistLauncherFontWeight}`,`0,${o.launcherButtonFontWeight}`])).sort().join(";");return{url:`https://fonts.googleapis.com/css2?family=${encodeURIComponent(o.builtinFontFamily.name)}:ital,wght@${r}`,fontFamily:o.builtinFontFamily.name}}case n.STANDARD:return null}}(t),u=e?.url,l=e?.fontFamily,[a,c]=o.useState(!u||!l);return o.useLayoutEffect((()=>{if(!r||!u||!l)return;let o=!1;return x(null,r,u),function(o,r,t){if(!o.document.fonts)return t(),()=>{};let e=!1;const n=()=>{const u=o.document.fonts.load(`100px ${r}`,"BESbswy");if(!u)return l(),void t();u.then((o=>{e||(o.length>=1?(l(),t()):window.setTimeout(n,25))}),(o=>{console.log("Userflow.js: observeFont error:"),console.log(o),t()}))};n();const u=window.setTimeout((()=>{console.warn(`Userflow.js: Timed out waiting for font family ${r} to load. Will continue anyway.`),t()}),2e3),l=()=>{e=!0,window.clearTimeout(void 0),window.clearTimeout(u)}}(r,l,(()=>{o||c(!0)})),()=>{o=!0}}),[r,u,l]),{loaded:a}}function x(o,r,t){const e=y(r),n=e.stylesheets.get(t);if(n)return n.loadPromise;const u=r.document.createElement("link"),l=new Promise(((e,n)=>{u.dataset.userflowStylesheet="true",u.rel="stylesheet",u.href=t,u.onload=()=>{e()},u.onerror=r=>{console.log(`Userflow.js: Error installing Stylesheet ${t}:`,r),o&&o.reportCspIssue(),n()},r.document.head.appendChild(u)}));return e.stylesheets.set(t,{link:u,loadPromise:l}),l}export{F as a,a as b,A as c,w as g,m as u};
|
|
1
|
+
import{r as o}from"./vendor.react.js";import{x as r,B as t,A as e,y as n}from"./userflow.js";import{c as u}from"./flow-condition-types.js";import{a as l}from"./client-context.js";function a(t){const[e]=o.useState((()=>new r(t)));return e.update(t),e}function c(o){return o?o.match(/^#[0-9a-f]{6}$/i)?[parseInt(o.substring(1,3),16),parseInt(o.substring(3,5),16),parseInt(o.substring(5,7),16)]:o.match(/^#[0-9a-f]{3}$/i)?[parseInt(o.substring(1,2).repeat(2),16),parseInt(o.substring(2,3).repeat(2),16),parseInt(o.substring(3,4).repeat(2),16)]:[0,0,0]:[0,0,0]}function i([o,r,t]){return"#"+o.toString(16).padStart(2,"0")+r.toString(16).padStart(2,"0")+t.toString(16).padStart(2,"0")}function d(o){const r=c(o);return r?r.join(", "):"0, 0, 0"}function s(o){return i(c(o))}function f(o,r,t){return[Math.max(0,Math.min(255,Math.round(o[0]+(r[0]-o[0])*t))),Math.max(0,Math.min(255,Math.round(o[1]+(r[1]-o[1])*t))),Math.max(0,Math.min(255,Math.round(o[2]+(r[2]-o[2])*t)))]}function h(o,r,t){const e=c(o),n=c(r);return e&&n?i(f(e,n,t)):o}function g([o,r,t]){o/=255,r/=255,t/=255;const e=Math.max(o,r,t),n=Math.min(o,r,t);let u,l,a=(e+n)/2;if(e==n)u=l=0;else{const c=e-n;switch(l=a>.5?c/(2-e-n):c/(e+n),e){case o:u=(r-t)/c+(r<t?6:0);break;case r:u=(t-o)/c+2;break;default:u=(o-r)/c+4}u/=6}return[u,l,a]}function B([o,r,t]){let e=r/255,n=t/255;function u(o){let r=0;return r=o<=.04045?o/12.92:Math.pow((o+.055)/1.055,2.4),r}let l=.2126*u(o/255)+.7152*u(e)+.0722*u(n);return Math.round(10*function(o){let r=0;return r=o<=216/24389?o*(24389/27):116*Math.pow(o,1/3)-16,r}(l))/1e3}function C(o,r){const t=B(o),e=B(r);let n=.13*((1-(e-t))/2)+.05,u=1-Math.abs(e-t),l=n+Math.pow((1-n)*u,4);return Math.round(1e3*l)/1e3}function b(o,r){const t=c(o),e=g(t);let n=null,u=null;for(const i of r){const o=c(i),r=g(o);let t=!1;if(n&&u){const o=.3;Math.abs(r[2]-e[2])>o?r[1]>u[1]&&(t=!0):Math.abs(e[2]-r[2])>Math.abs(e[2]-u[2])&&(t=!0)}else t=!0;t&&(n=o,u=r)}let l=n,a=n,d=C(l,t),s=2*d;return e[2]>.2&&e[2]<.8&&(a=function([o,r,t]){return[Math.round(255-o),Math.round(255-r),Math.round(255-t)]}(a),s=C(a,t)),[i(f(t,l,d)),i(f(t,a,s))]}function k(o){const[r,t,e,n,u,l,a,i]=function(o,r,t,e){const[n,u]=b(o,[r]);let l,a;if(o===t)l=n,a=u;else{const n=b(t,[o,r,e]);l=n[0],a=n[1]}const i=c(o),d=c(t);let s,f,h,g;if(Math.abs(i[0]-d[0])<20&&Math.abs(i[1]-d[1])<20&&Math.abs(i[2]-d[2])<20){s=r,f=o;const t=b(s,[f]);h=t[0],g=t[1]}else s=o,f=r,h=n,g=u;return[n,u,l,a,s,f,h,g]}(o.brandBackgroundColor,o.brandForegroundColor,o.mainBackgroundColor,o.mainForegroundColor),d={...o,widgetBackgroundColor:u,widgetForegroundColor:l,widgetHoverBackgroundColor:a,widgetActiveBackgroundColor:i,sameBackground:s(o.mainBackgroundColor)==s(o.brandBackgroundColor)};if(d.brandHoverBackgroundColor&&(d.widgetHoverBackgroundColor=d.brandHoverBackgroundColor),d.brandActiveBackgroundColor&&(d.widgetActiveBackgroundColor=d.brandActiveBackgroundColor),d.brandHoverBackgroundColor||(d.brandHoverBackgroundColor=r),d.brandActiveBackgroundColor||(d.brandActiveBackgroundColor=t),d.mainHoverBackgroundColor||(d.mainHoverBackgroundColor=e),d.mainActiveBackgroundColor||(d.mainActiveBackgroundColor=n),d.bubbleBorderColor||(d.bubbleBorderColor=d.mainForegroundColor),d.checklistLauncherActiveBackgroundColor||(d.checklistLauncherActiveBackgroundColor=d.brandActiveBackgroundColor),d.checklistLauncherBackgroundColor||(d.checklistLauncherBackgroundColor=d.brandBackgroundColor),d.checklistLauncherCounterBackgroundColor||(d.checklistLauncherCounterBackgroundColor=d.brandForegroundColor),d.checklistLauncherCounterFontColor||(d.checklistLauncherCounterFontColor=d.brandBackgroundColor),d.checklistLauncherFontColor||(d.checklistLauncherFontColor=d.brandForegroundColor),d.checklistLauncherHoverBackgroundColor||(d.checklistLauncherHoverBackgroundColor=d.brandHoverBackgroundColor),d.focusColor||(d.focusColor=d.mainActiveBackgroundColor),d.launcherIconActiveColor||(d.launcherIconActiveColor=d.brandActiveBackgroundColor),d.launcherIconColor||(d.launcherIconColor=d.brandBackgroundColor),d.launcherIconHoverColor||(d.launcherIconHoverColor=d.brandHoverBackgroundColor),d.linkColor||(d.linkColor=d.widgetBackgroundColor),d.progressBarColor||(d.progressBarColor=d.widgetBackgroundColor),d.questionColor||(d.questionColor=d.widgetBackgroundColor),d.toolbarForegroundColor||(d.toolbarForegroundColor=d.mainForegroundColor),d.primaryButtonBackgroundColor||(d.primaryButtonBackgroundColor=d.widgetBackgroundColor),d.primaryButtonFontColor||(d.primaryButtonFontColor=d.widgetForegroundColor),d.primaryButtonHoverFontColor||(d.primaryButtonHoverFontColor=d.primaryButtonFontColor),d.primaryButtonActiveFontColor||(d.primaryButtonActiveFontColor=d.primaryButtonFontColor),!d.primaryButtonHoverBackgroundColor||!d.primaryButtonActiveBackgroundColor){const[o,r]=b(d.primaryButtonBackgroundColor,[d.primaryButtonFontColor]);d.primaryButtonHoverBackgroundColor||(d.primaryButtonHoverBackgroundColor=o),d.primaryButtonActiveBackgroundColor||(d.primaryButtonActiveBackgroundColor=r)}if(d.primaryButtonBorderColor||(d.primaryButtonBorderColor=d.widgetBackgroundColor),d.primaryButtonHoverBorderColor||(d.primaryButtonHoverBorderColor=d.primaryButtonHoverBackgroundColor),d.primaryButtonActiveBorderColor||(d.primaryButtonActiveBorderColor=d.primaryButtonActiveBackgroundColor),d.defaultButtonBackgroundColor||(d.defaultButtonBackgroundColor=d.mainBackgroundColor),d.defaultButtonFontColor||(d.defaultButtonFontColor=u),d.defaultButtonHoverFontColor||(d.defaultButtonHoverFontColor=d.defaultButtonFontColor),d.defaultButtonActiveFontColor||(d.defaultButtonActiveFontColor=d.defaultButtonFontColor),!d.defaultButtonHoverBackgroundColor||!d.defaultButtonActiveBackgroundColor){const[o,r]=b(d.defaultButtonBackgroundColor,[d.defaultButtonFontColor]);d.defaultButtonHoverBackgroundColor||(d.defaultButtonHoverBackgroundColor=o),d.defaultButtonActiveBackgroundColor||(d.defaultButtonActiveBackgroundColor=r)}return d.defaultButtonBorderColor||(d.defaultButtonBorderColor=d.defaultButtonFontColor),d.defaultButtonHoverBorderColor||(d.defaultButtonHoverBorderColor=d.defaultButtonBorderColor),d.defaultButtonActiveBorderColor||(d.defaultButtonActiveBorderColor=d.defaultButtonBorderColor),d.launcherButtonBackgroundColor||(d.launcherButtonBackgroundColor=d.brandBackgroundColor),d.launcherButtonBorderColor||(d.launcherButtonBorderColor=d.brandBackgroundColor),d.launcherButtonFontColor||(d.launcherButtonFontColor=d.brandForegroundColor),d.launcherButtonHoverBackgroundColor||(d.launcherButtonHoverBackgroundColor=d.brandHoverBackgroundColor),d.launcherButtonHoverBorderColor||(d.launcherButtonHoverBorderColor=d.launcherButtonHoverBackgroundColor),d.launcherButtonHoverFontColor||(d.launcherButtonHoverFontColor=d.launcherButtonFontColor),d.launcherButtonActiveBackgroundColor||(d.launcherButtonActiveBackgroundColor=d.brandActiveBackgroundColor),d.launcherButtonActiveBorderColor||(d.launcherButtonActiveBorderColor=d.launcherButtonActiveBackgroundColor),d.launcherButtonActiveFontColor||(d.launcherButtonActiveFontColor=d.launcherButtonFontColor),d}function w(o){const{questionColor:r}=o;return{"--userflow-backdrop-highlight-color-rgb":d(o.backdropHighlightColor),"--userflow-backdrop-highlight-inset":o.backdropHighlightType===t.INSIDE?"inset":"","--userflow-backdrop-highlight-opacity":o.backdropHighlightOpacity,"--userflow-backdrop-highlight-radius":o.backdropHighlightRadius+"px","--userflow-backdrop-highlight-spread":o.backdropHighlightSpread+"px","--userflow-backdrop-opacity":o.backdropOpacity,"--userflow-beacon-color":o.beaconColor,"--userflow-brand-active-background-color":o.brandActiveBackgroundColor,"--userflow-brand-background-color":o.brandBackgroundColor,"--userflow-brand-foreground-color":o.brandForegroundColor,"--userflow-brand-foreground-color-rgb":d(o.brandForegroundColor),"--userflow-brand-hover-background-color":o.brandHoverBackgroundColor,"--userflow-bubble-border-color":o.bubbleBorderColor,"--userflow-bubble-border-radius":o.bubbleBorderRadius+"px","--userflow-bubble-border-width":o.bubbleBorderWidth+"px","--userflow-button-border-radius":o.buttonBorderRadius+"px","--userflow-button-height":o.buttonHeight+"px","--userflow-button-min-width":o.buttonMinWidth+"px","--userflow-button-text-align":0===o.buttonMinWidth?"start":"center","--userflow-buttons-justify-content":"left"===o.buttonHorizontalAlign?"flex-start":"center"===o.buttonHorizontalAlign?"center":"flex-end","--userflow-buttons-modal-justify-content":"left"===o.buttonHorizontalAlign?"flex-start":"right"===o.buttonHorizontalAlign?"flex-end":"center","--userflow-checklist-launcher-active-background-color":o.checklistLauncherActiveBackgroundColor,"--userflow-checklist-launcher-background-color":o.checklistLauncherBackgroundColor,"--userflow-checklist-launcher-border-radius":o.checklistLauncherBorderRadius+"px","--userflow-checklist-launcher-counter-background-color":o.checklistLauncherCounterBackgroundColor,"--userflow-checklist-launcher-counter-font-color":o.checklistLauncherCounterFontColor,"--userflow-checklist-launcher-font-color-rgb":d(o.checklistLauncherFontColor),"--userflow-checklist-launcher-font-color":o.checklistLauncherFontColor,"--userflow-checklist-launcher-font-weight":String(o.checklistLauncherFontWeight),"--userflow-checklist-launcher-height":o.checklistLauncherHeight+"px","--userflow-checklist-launcher-hover-background-color":o.checklistLauncherHoverBackgroundColor,"--userflow-checkmark-background-color":o.checkmarkBackgroundColor,"--userflow-completed-task-text-decoration":o.completedTaskTextDecoration,"--userflow-default-button-active-background-color":o.defaultButtonActiveBackgroundColor,"--userflow-default-button-active-border-color":o.defaultButtonActiveBorderColor,"--userflow-default-button-active-font-color":o.defaultButtonActiveFontColor,"--userflow-default-button-background-color":o.defaultButtonBackgroundColor,"--userflow-default-button-border-color":o.defaultButtonBorderColor,"--userflow-default-button-border-width":o.defaultButtonBorderWidth+"px","--userflow-default-button-font-color":o.defaultButtonFontColor,"--userflow-default-button-font-weight":String(o.defaultButtonFontWeight),"--userflow-default-button-hover-background-color":o.defaultButtonHoverBackgroundColor,"--userflow-default-button-hover-border-color":o.defaultButtonHoverBorderColor,"--userflow-default-button-hover-font-color":o.defaultButtonHoverFontColor,"--userflow-focus-color":`rgba(${d(o.focusColor)}, ${o.focusOpacity})`,"--userflow-font-family":o.builtinFontFamily?o.builtinFontFamily.name+(o.builtinFontFamily.fallback?", "+o.builtinFontFamily.fallback:""):o.fontFamily?o.fontFamily:"sans-serif","--userflow-font-size":o.fontSize+"px","--userflow-font-weight-bold":String(o.fontWeightBold),"--userflow-font-weight-normal":String(o.fontWeightNormal),"--userflow-h1-font-size":o.h1FontSize+"px","--userflow-h2-font-size":o.h2FontSize+"px","--userflow-launcher-button-active-background-color":o.launcherButtonActiveBackgroundColor,"--userflow-launcher-button-active-border-color":o.launcherButtonActiveBorderColor,"--userflow-launcher-button-active-font-color":o.launcherButtonActiveFontColor,"--userflow-launcher-button-background-color":o.launcherButtonBackgroundColor,"--userflow-launcher-button-border-color":o.launcherButtonBorderColor,"--userflow-launcher-button-border-radius":o.launcherButtonBorderRadius+"px","--userflow-launcher-button-border-width":o.launcherButtonBorderWidth+"px","--userflow-launcher-button-font-color":o.launcherButtonFontColor,"--userflow-launcher-button-font-weight":String(o.launcherButtonFontWeight),"--userflow-launcher-button-height":o.launcherButtonHeight+"px","--userflow-launcher-button-horizontal-padding":o.launcherButtonHorizontalPadding+"px","--userflow-launcher-button-hover-background-color":o.launcherButtonHoverBackgroundColor,"--userflow-launcher-button-hover-border-color":o.launcherButtonHoverBorderColor,"--userflow-launcher-button-hover-font-color":o.launcherButtonHoverFontColor,"--userflow-launcher-button-width":o.launcherButtonWidth?o.launcherButtonWidth+"px":"auto","--userflow-launcher-icon-active-color":o.launcherIconActiveColor,"--userflow-launcher-icon-color":o.launcherIconColor,"--userflow-launcher-icon-hover-color":o.launcherIconHoverColor,"--userflow-launcher-icon-opacity":o.launcherIconOpacity,"--userflow-launcher-icon-size":o.launcherIconSize+"px","--userflow-line-height":o.lineHeight+"px","--userflow-link-color":o.linkColor,"--userflow-main-active-background-color":o.mainActiveBackgroundColor,"--userflow-main-background-color":o.mainBackgroundColor,"--userflow-main-background-color-rgb":d(o.mainBackgroundColor),"--userflow-main-foreground-color":o.mainForegroundColor,"--userflow-main-foreground-color-rgb":d(o.mainForegroundColor),"--userflow-main-hover-background-color":o.mainHoverBackgroundColor,"--userflow-modal-padding":o.modalPadding+"px","--userflow-modal-padding-top":(o.avatarType===e.NONE?o.modalPadding:o.modalPadding+Math.max((o.avatarSize-o.modalPadding)/2,0))+"px","--userflow-backdrop-color-rgb":d(o.backdropColor),"--userflow-notch-color":o.bubbleBorderWidth>0&&o.bubbleBorderColor||o.mainBackgroundColor,"--userflow-primary-button-active-background-color":o.primaryButtonActiveBackgroundColor,"--userflow-primary-button-active-border-color":o.primaryButtonActiveBorderColor,"--userflow-primary-button-active-font-color":o.primaryButtonActiveFontColor,"--userflow-primary-button-background-color":o.primaryButtonBackgroundColor,"--userflow-primary-button-border-color":o.primaryButtonBorderColor,"--userflow-primary-button-border-width":o.primaryButtonBorderWidth+"px","--userflow-primary-button-font-color":o.primaryButtonFontColor,"--userflow-primary-button-font-weight":String(o.primaryButtonFontWeight),"--userflow-primary-button-hover-background-color":o.primaryButtonHoverBackgroundColor,"--userflow-primary-button-hover-border-color":o.primaryButtonHoverBorderColor,"--userflow-primary-button-hover-font-color":o.primaryButtonHoverFontColor,"--userflow-progress-bar-color":o.progressBarColor,"--userflow-progress-bar-height":o.progressBarHeight+"px","--userflow-resource-center-collapsed-height":o.resourceCenterCollapsedHeight+"px","--userflow-resource-center-launcher-border-radius":(null!=o.resourceCenterLauncherBorderRadius?o.resourceCenterLauncherBorderRadius:o.resourceCenterCollapsedHeight/2)+"px","--userflow-resource-center-padding-x":o.resourceCenterPaddingX+"px","--userflow-resource-center-padding-y":o.resourceCenterPaddingY+"px","--userflow-resource-center-transition-duration":o.resourceCenterTransitionDuration+"ms","--userflow-resource-center-width":o.resourceCenterWidth+"px","--userflow-resource-center-full-width":o.resourceCenterFullWidth+"px","--userflow-question-color-light":h(r,o.mainBackgroundColor,.5),"--userflow-question-color-lighter":h(r,o.mainBackgroundColor,.75),"--userflow-question-color-lightest":h(r,o.mainBackgroundColor,.9),"--userflow-question-color-medium-light":h(r,o.mainBackgroundColor,.15),"--userflow-question-color":r,"--userflow-toolbar-foreground-color":o.toolbarForegroundColor,"--userflow-toolbar-foreground-color-rgb":d(o.toolbarForegroundColor),"--userflow-tooltip-notch-size":o.tooltipNotchSize+"px","--userflow-widget-active-background-color":o.widgetActiveBackgroundColor,"--userflow-widget-background-color":o.widgetBackgroundColor,"--userflow-widget-foreground-color":o.widgetForegroundColor,"--userflow-widget-hover-background-color":o.widgetHoverBackgroundColor}}const p=[];function m(r){let[t,e]=o.useState(r);const n=a(r.sessionData||p);return o.useLayoutEffect((()=>{const{variations:o}=r;if(!o)return;const t=[],l=[],a=()=>{let n=r,u=!1;for(const[r,e]of o.entries())if(t[r]){u||(u=!0,n={...n});for(const o of e.overriddenKeys)n[o]=e[o]}e(n)};for(const[r,e]of o.entries()){t[r]=!1;const{condition:o}=e;if(o&&e.overriddenKeys&&e.overriddenKeys.length>0){const e=u[o.type].track({sessionData:n,condition:o,callback:o=>{t[r]=o,a()}});l[r]=e}else l[r]=()=>{}}return a(),()=>{for(const o of l)o()}}),[r,n]),o.useMemo((()=>k(t)),[t])}const v=new Map;function y(o){let r=v.get(o);return r||(r={stylesheets:new Map},v.set(o,r)),r}function F(r,t,e){const n=l(),[u,a]=o.useState(!t);return o.useLayoutEffect((()=>{if(!r||!t)return;let o,u=!1;const l=async t=>{await x(n,r,t),o&&function(o,r){const t=y(o),e=t.stylesheets.get(r);if(!e)return;o.document.head.removeChild(e.link),t.stylesheets.delete(r)}(r,o),o=t};(async()=>{let o="string"==typeof t?t:t.get();if(window.MSInputMethodContext&&document.documentMode&&e){let r=await function(o){return new Promise(((r,t)=>{let e=H.get(o);if(e)return void r(e);const n=new XMLHttpRequest;n.addEventListener("load",(()=>{if(200!==n.status)return void t(new Error("Userflow.js could not fetch stylesheet: "+o));const e=n.responseText;H.set(o,e),r(e)})),n.addEventListener("error",(()=>{t(new Error("Userflow.js could not fetch stylesheet: "+o))})),n.open("GET",o),n.send()}))}(o);if(u)return;r=function(o,r){for(const t in r)if(r.hasOwnProperty(t)){const e=r[t];e&&(o=o.replace(new RegExp(`var\\(${t}.*?\\)`,"g"),e))}return o=o.replace(/var\(--[a-z0-9-]+(,\s*(.*?))?\)/g,"$2")}(r,w(e)),o="data:text/css;base64,"+btoa(r)}await l(o),u||a(!0)})();let c=null;return"string"!=typeof t&&(c=t.onUpdate((async()=>{l(t.get())}))),()=>{u=!0,c&&c()}}),[n,r,t,e]),{loaded:u}}const H=new Map;function A(r,t){const e=t&&function(o){if(!o.builtinFontFamily)return o.fontCssUrl?{url:o.fontCssUrl,fontFamily:o.fontFamily}:null;switch(o.builtinFontFamily.provider){case n.GOOGLE:{const r=Array.from(new Set(["0,400","1,400",`0,${o.fontWeightBold}`,`0,${o.defaultButtonFontWeight}`,`0,${o.primaryButtonFontWeight}`,`0,${o.checklistLauncherFontWeight}`,`0,${o.launcherButtonFontWeight}`])).sort().join(";");return{url:`https://fonts.googleapis.com/css2?family=${encodeURIComponent(o.builtinFontFamily.name)}:ital,wght@${r}`,fontFamily:o.builtinFontFamily.name}}case n.STANDARD:return null}}(t),u=e?.url,l=e?.fontFamily,[a,c]=o.useState(!u||!l);return o.useLayoutEffect((()=>{if(!r||!u||!l)return;let o=!1;return x(null,r,u),function(o,r,t){if(!o.document.fonts)return t(),()=>{};let e=!1;const n=()=>{const u=o.document.fonts.load(`100px ${r}`,"BESbswy");if(!u)return l(),void t();u.then((o=>{e||(o.length>=1?(l(),t()):window.setTimeout(n,25))}),(o=>{console.log("Userflow.js: observeFont error:"),console.log(o),t()}))};n();const u=window.setTimeout((()=>{console.warn(`Userflow.js: Timed out waiting for font family ${r} to load. Will continue anyway.`),t()}),2e3),l=()=>{e=!0,window.clearTimeout(void 0),window.clearTimeout(u)}}(r,l,(()=>{o||c(!0)})),()=>{o=!0}}),[r,u,l]),{loaded:a}}function x(o,r,t){const e=y(r),n=e.stylesheets.get(t);if(n)return n.loadPromise;const u=r.document.createElement("link"),l=new Promise(((e,n)=>{u.dataset.userflowStylesheet="true",u.rel="stylesheet",u.href=t,u.onload=()=>{e()},u.onerror=r=>{console.log(`Userflow.js: Error installing Stylesheet ${t}:`,r),o&&o.reportCspIssue(),n()},r.document.head.appendChild(u)}));return e.stylesheets.set(t,{link:u,loadPromise:l}),l}export{F as a,a as b,A as c,w as g,m as u};
|
package/userflow.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as e}from"./vendor.phoenix.js";import{v as t}from"./vendor.uuid.js";let s;const i={},n=function(e,t){if(!t)return e();if(void 0===s){const e=document.createElement("link").relList;s=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in i)return;i[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":s,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};class o extends Error{constructor(e,t,s){super(e),Object.setPrototypeOf(this,o.prototype),this.name="UserflowError",this.code=t,this.humanMessage=s}}class r{constructor(e){this.type=e,this.testState={}}formatKey(e){return`userflow:${e}`}getItem(e){return e=this.formatKey(e),"undefined"==typeof window?null:window[this.type].getItem(e)}setItem(e,t){e=this.formatKey(e),"undefined"!=typeof window&&window[this.type].setItem(e,t)}removeItem(e){if(e=this.formatKey(e),"undefined"!=typeof window)return window[this.type].removeItem(e)}clear(){if("undefined"!=typeof window)return window[this.type].clear()}}const a=new r("localStorage"),c=new r("sessionStorage");function l(e){window.location.href=e}function d(){return window.location.href}var h,u,E;function f(e,t,{toOrigin:s}={}){e.postMessage(t,s||"*")}function T(e,{fromWindow:t,fromOrigin:s}={}){const i=i=>{if(!i.isTrusted)return;if(t&&t!==i.source)return;if(s&&i.origin!==s)return;const o=i.data;o&&"object"==typeof o&&"string"==typeof o.kind&&o.kind.startsWith("userflow:")&&!0===e(o)&&n()};window.addEventListener("message",i);const n=()=>window.removeEventListener("message",i);return n}(h||(h={})).INPUT="INPUT",(E=u||(u={})).AUTO="AUTO",E.MANUAL="MANUAL";const w=new Set;let S=!1;function g(e){return function(){if(S)return;S=!0;const{history:e}=window,t=t=>{const s=e[t];e[t]=(...t)=>{s.apply(e,t),I()}};t("pushState"),t("replaceState"),window.addEventListener("popstate",(()=>{I()}))}(),w.add(e),()=>{p(e)}}function p(e){w.delete(e)}function I(){w.forEach((e=>e()))}class C{destroy(){this.unregisterOnMessage&&this.unregisterOnMessage()}postBuilderMessage(e){f(window.opener,e,{toOrigin:"https://userflow.com"})}onBuilderMessage(e){return this.unregisterOnMessage=T(e,{fromOrigin:"https://userflow.com"}),!1}async captureScreenshot(e,t,s,i){f(window,{kind:"userflow:crxScreenshot",x:e,y:t,width:s,height:i,devicePixelRatio:window.devicePixelRatio});var n;return(await(n=e=>"userflow:crxScreenshotResult"===e.kind?e:null,new Promise((e=>{T((t=>{const s=n(t);return!!s&&(e(s),!0)}))})))).imageDataUrl}}var m,k,A,U,L,R,y,O,v,N,_,b,D,F,M,P,B,x,H,G,W,$,V,j,K,z,Y,J,X,Z,Q,q,ee,te,se,ie,ne,oe,re,ae,ce,le,de,he,ue,Ee,fe,Te,we,Se,ge,pe,Ie,Ce,me,ke,Ae,Ue,Le,Re,ye,Oe,ve,Ne,_e,be,De,Fe,Me,Pe,Be,xe,He,Ge,We,$e;(k=m||(m={})).ACTION="ACTION",k.LAUNCHER_DEACTIVATED="LAUNCHER_DEACTIVATED",k.REPLACED="REPLACED",k.SNOOZED="SNOOZED",k.TOOLTIP_TARGET_MISSING="TOOLTIP_TARGET_MISSING",k.USERFLOWJS="USERFLOWJS",k.USER_CLOSED="USER_CLOSED",(U=A||(A={})).SECOND="SECOND",U.MINUTE="MINUTE",U.HOUR="HOUR",U.DAY="DAY",(R=L||(L={})).ACTION="ACTION",R.DRAFT="DRAFT",R.LINK="LINK",R.LAUNCHER_SEEN="LAUNCHER_SEEN",R.RESOURCE_CENTER="RESOURCE_CENTER",R.USERFLOWJS="USERFLOWJS",(O=y||(y={})).LIKE="LIKE",O.DISLIKE="DISLIKE",(N=v||(v={})).STRING="STRING",N.BOOLEAN="BOOLEAN",N.NUMBER="NUMBER",N.DATETIME="DATETIME",N.LIST="LIST",N.RANDOM_AB="RANDOM_AB",N.RANDOM_NUMBER="RANDOM_NUMBER",(b=_||(_={})).FLOW="FLOW",b.CHECKLIST="CHECKLIST",b.LAUNCHER="LAUNCHER",b.RESOURCE_CENTER="RESOURCE_CENTER",(F=D||(D={})).ALWAYS_TRUE="ALWAYS_TRUE",F.ATTRIBUTE="ATTRIBUTE",F.CLAUSE="CLAUSE",F.ELEMENT="ELEMENT",F.FILLED_IN_INPUT="FILLED_IN_INPUT",F.FLOW="FLOW",F.INPUT_VALUE="INPUT_VALUE",F.PAGE="PAGE",F.TIME="TIME",function(e){e.AUTO="AUTO",e.MANUAL="MANUAL"}(M||(M={})),(P||(P={})).INPUT="INPUT",(x=B||(B={})).ABSOLUTE_EQ="ABSOLUTE_EQ",x.ABSOLUTE_GT="ABSOLUTE_GT",x.ABSOLUTE_LT="ABSOLUTE_LT",x.AND="AND",x.BETWEEN="BETWEEN",x.CONTAINS="CONTAINS",x.EMPTY="EMPTY",x.ENDS_WITH="ENDS_WITH",x.EQ="EQ",x.EXCLUDES_ALL="EXCLUDES_ALL",x.EXCLUDES_ANY="EXCLUDES_ANY",x.FALSE="FALSE",x.GT="GT",x.GTE="GTE",x.INCLUDES_ALL="INCLUDES_ALL",x.INCLUDES_ANY="INCLUDES_ANY",x.LT="LT",x.LTE="LTE",x.NE="NE",x.NOT_CONTAINS="NOT_CONTAINS",x.NOT_EMPTY="NOT_EMPTY",x.NOT_REGEX="NOT_REGEX",x.OR="OR",x.REGEX="REGEX",x.RELATIVE_EQ="RELATIVE_EQ",x.RELATIVE_GT="RELATIVE_GT",x.RELATIVE_LT="RELATIVE_LT",x.STARTS_WITH="STARTS_WITH",x.TRUE="TRUE",x.URL="URL",(G=H||(H={})).CLICK="CLICK",G.DISABLED="DISABLED",G.MOUSEDOWN="MOUSEDOWN",G.NOT_CLICK="NOT_CLICK",G.NOT_DISABLED="NOT_DISABLED",G.NOT_PRESENT="NOT_PRESENT",G.PRESENT="PRESENT",($=W||(W={})).ASSET="ASSET",$.CARTOON="CARTOON",$.NONE="NONE",$.URL="URL",(j=V||(V={})).INSIDE="INSIDE",j.OUTSIDE="OUTSIDE",(z=K||(K={})).TOP_LEFT="TOP_LEFT",z.TOP_CENTER="TOP_CENTER",z.TOP_RIGHT="TOP_RIGHT",z.BOTTOM_RIGHT="BOTTOM_RIGHT",z.BOTTOM_CENTER="BOTTOM_CENTER",z.BOTTOM_LEFT="BOTTOM_LEFT",z.CENTER="CENTER",(J=Y||(Y={})).GOOGLE="GOOGLE",J.STANDARD="STANDARD",(Z=X||(X={})).DISMISS_FIRST_MENU_AFTER="DISMISS_FIRST_MENU_AFTER",Z.DISMISS="DISMISS",(q=Q||(Q={})).DISMISS="DISMISS",q.NONE="NONE",(te=ee||(ee={})).DEFAULT="DEFAULT",te.PLAINTEXT="PLAINTEXT",(ie=se||(se={})).CHECKLIST_OVERRIDE="CHECKLIST_OVERRIDE",ie.RESOURCE_CENTER_ONLY="RESOURCE_CENTER_ONLY",ie.NONE="NONE",(oe=ne||(ne={})).BUBBLE="BUBBLE",oe.END="END",oe.ERROR="ERROR",oe.FLAG="FLAG",(ae=re||(re={})).MANUAL="MANUAL",ae.NONE="NONE",ae.SYNTHETIC="SYNTHETIC",(le=ce||(ce={})).BUBBLE="BUBBLE",le.HIDDEN="HIDDEN",le.MODAL="MODAL",le.TOOLTIP="TOOLTIP",(he=de||(de={})).ABOVE="ABOVE",he.BELOW="BELOW",he.LEFT="LEFT",he.RIGHT="RIGHT",(Ee=ue||(ue={})).CLOSE_FLOW="CLOSE_FLOW",Ee.EVAL_JS="EVAL_JS",Ee.GO_TO_STEP="GO_TO_STEP",Ee.NAVIGATE="NAVIGATE",Ee.SET_ATTRIBUTE="SET_ATTRIBUTE",Ee.SNOOZE="SNOOZE",Ee.START_FLOW="START_FLOW",(Te=fe||(fe={})).NEW_TAB="NEW_TAB",Te.SAME_TAB="SAME_TAB",(Se=we||(we={})).SET="SET",Se.SET_ONCE="SET_ONCE",Se.ADD="ADD",Se.SUBTRACT="SUBTRACT",Se.UNSET="UNSET",(pe=ge||(ge={})).MULTILINE_TEXT="MULTILINE_TEXT",pe.MULTIPLE_CHOICE="MULTIPLE_CHOICE",pe.NPS="NPS",pe.SCALE="SCALE",pe.STARS="STARS",pe.TEXT="TEXT",(Ce=Ie||(Ie={})).ACTION="ACTION",Ce.ASSISTANT="ASSISTANT",Ce.CHECKLIST="CHECKLIST",Ce.CONTACT="CONTACT",Ce.FLOWS="FLOWS",Ce.KNOWLEDGE_BASE="KNOWLEDGE_BASE",Ce.MESSAGE="MESSAGE",Ce.SUBPAGE="SUBPAGE",(ke=me||(me={})).CRISP="CRISP",ke.CUSTOM="CUSTOM",ke.FRESHCHAT="FRESHCHAT",ke.HELPSCOUT="HELPSCOUT",ke.HUBSPOT="HUBSPOT",ke.INTERCOM="INTERCOM",ke.ZENDESK="ZENDESK",ke.ZENDESK_MESSENGER="ZENDESK_MESSENGER",(Ue=Ae||(Ae={})).BUTTON="BUTTON",Ue.INPUT="INPUT",(Re=Le||(Le={})).LAUNCHER_CLICK="LAUNCHER_CLICK",Re.LAUNCHER_HOVER="LAUNCHER_HOVER",Re.TARGET_CLICK="TARGET_CLICK",Re.TARGET_HOVER="TARGET_HOVER",Re.LAUNCHER_TARGET_CLICK="LAUNCHER_TARGET_CLICK",Re.LAUNCHER_TARGET_HOVER="LAUNCHER_TARGET_HOVER",(Oe=ye||(ye={})).ACTIVATE="ACTIVATE",Oe.DEACTIVATE="DEACTIVATE",Oe.NEVER="NEVER",(Ne=ve||(ve={})).AUTO="AUTO",Ne.TOP="TOP",Ne.RIGHT="RIGHT",Ne.BOTTOM="BOTTOM",Ne.LEFT="LEFT",(be=_e||(_e={})).START="START",be.CENTER="CENTER",be.END="END",(Fe=De||(De={})).PERCENT="PERCENT",Fe.PX="PX",(Pe=Me||(Me={})).BEACON="BEACON",Pe.BUTTON="BUTTON",Pe.HIDDEN="HIDDEN",Pe.ICON="ICON",(xe=Be||(Be={})).LAUNCHER="LAUNCHER",xe.TARGET="TARGET",(Ge=He||(He={})).ACTIVE="ACTIVE",Ge.COMPLETED="COMPLETED",Ge.ENDED="ENDED",Ge.NOT_SEEN="NOT_SEEN",($e=We||(We={})).HIGHLIGHT="HIGHLIGHT",$e.MODAL="MODAL",$e.HIGHLIGHT_MODAL="HIGHLIGHT_MODAL";const Ve={customInputs:[],customNavigate:null,urlFilter:null,customScrollIntoView:null,scrollPadding:null,inferenceAttributeNames:["data-for","data-id","data-testid","data-test-id","for","id","name","placeholder","role"],inferenceAttributeFilters:{id:[e=>!e.match(/\d$/)],"data-id":[e=>!e.match(/\d$/)]},inferenceClassNameFilters:[e=>!e.startsWith("css-")],baseZIndex:1234500};function je(e){return Array.isArray(e)||(e=e?[e]:[]),e=e.map((e=>"string"==typeof e?new RegExp(e):e))}function Ke(e,t){return e.every((e=>"function"==typeof e?e(t):!(e instanceof RegExp)||e.test(t)))}function ze(){let e=d();if(Ve.urlFilter){if(e=Ve.urlFilter(e),"string"!=typeof e)throw new o("Userflow.js: URL filter returned non-string value. Please check your userflow.setUrlFilter() implementation.");try{new URL(e)}catch(t){throw new o("Userflow.js: URL filter returned an invalid URL. Please check your userflow.setUrlFilter() implementation.\nReturned URL: "+e+"\nError message: "+t.message)}}return e}const Ye=(localStorage.getItem("debug")||"").split(",").some((e=>"*"===e||e.startsWith("userflow:*"))),Je=Ze("log");let Xe;function Ze(e){return function(t,...s){if(Ye){const i=performance.now(),n=Xe?Math.round(i-Xe):0;Xe=i,console[e](`%cuserflow %c${t} %c+${n}ms`,"color:#4579E4;","","color:#4579E4;",...s)}}}Je.group=Ze("group"),Je.groupCollapsed=Ze("groupCollapsed"),Je.groupEnd=function(){Ye&&console.groupEnd()};const Qe=()=>n((()=>import("./ResourceCenterApp.js").then((function(e){return e.R}))),[new URL("ResourceCenterApp.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("Icons.js",import.meta.url).toString(),new URL("BubbleToolbar.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("vendor.fortawesome.react-fontawesome.js",import.meta.url).toString(),new URL("vendor.fortawesome.fontawesome-svg-core.js",import.meta.url).toString(),new URL("vendor.prop-types.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("logomark.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("DynamicIcon.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("ChecklistUI.js",import.meta.url).toString()]);function qe(e){const t=e.version.checklist.tasks.length;return Math.max(0,t-e.taskCompletions.length)}class et{constructor(e){this.observers=new Set,this._value=e}get value(){return this._value}update(e){if(e!==this._value){this._value=e;for(const e of this.observers)e()}}observe(e){return this.observers.add(e),()=>this.observers.delete(e)}}const tt=["turbo:before-cache","turbo:load","turbo:visit","turbolinks:before-cache","turbolinks:load","turbolinks:visit"],st=import.meta.url;class it{constructor(){this.clientToken=null,this.externalId=null,this.signature=null,this.groupId=null,this.groupSignature=null,this._socketStatus="disconnected",this.socket=null,this.channel=null,this.featureFlags=new Set,this.logrocketAppId=null,this.debounceInactiveDisconnectTimeout=void 0,this.inBatch=!1,this.endBatchTimeout=void 0,this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=0,this.clientClock=1,this.serverClock=1,this.flowSession=null,this.flowSessionClock=0,this.checklistSession=null,this.checklistExpanded=!1,this.checklistExpandPending=!1,this.checklistSessionClock=0,this.resourceCenterSession=null,this.resourceCenterOpen=!1,this.resourceCenterLauncherHidden=!1,this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.notificationIdCounter=0,this.sessionStorageState=null,this.clientContext=null,this.flushUrlChangeTimeout=void 0,this.onFirstIdentifyRun=!1,this.onFirstIdentifyTimeout=void 0,this.firstIdentifyCallback=null,this.ui=null,this.unackedTasks=new Set,this.clientConditions=new Map,this.trackers=new Map,this.conditionWaitTimers=new Map,this.listeners=new Map,this.targetEnv=null,this.idempotencyKeysSeen=new Set,this.testUserIdentified=!1,this.cspIssueReported=!1,this.uiDisabled=!1,this.audio=null,this.audioReady=!1,this.pageTrackingDisabled=!1,this.onBuilderMessage=e=>(this.handleBuilderMessage(e),!1),this.handleBuilderMessage=async e=>{Je(`builder ${e.kind} message received`,e);const t="idempotencyKey"in e&&"string"==typeof e.idempotencyKey?e.idempotencyKey:null;if(t&&this.idempotencyKeysSeen.has(t))return;const s=()=>{t&&this.idempotencyKeysSeen.add(t)};switch(e.kind){case"userflow:selectElement":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:selectElementAck",idempotencyKey:e.idempotencyKey}),void this.setSessionStorageState((t=>({...t,activeApp:"elementSelection",elementSelection:{mode:"select",elementType:e.elementType}})));case"userflow:selectElementCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,elementSelection:null})));case"userflow:startFlowWithToken":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:startFlowWithTokenAck",idempotencyKey:e.idempotencyKey}),c.setItem("previewFlowId",e.flowId),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.onceIdentified((()=>{if(this.startFlowWithToken(e.token),e.isResourceCenter){const t=()=>{const s=this.resourceCenterSession;s&&s.draftMode&&s.flow.id===e.flowId&&(this.openResourceCenter(),this.off("resourceCenterChanged",t))};this.on("resourceCenterChanged",t),t()}}));case"userflow:testTracker":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:testTrackerAck",idempotencyKey:e.idempotencyKey}),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.setSessionStorageState((t=>({...t,activeApp:"trackerTesting",trackerTesting:{trackerName:e.trackerName,token:e.token,events:0}})));case"userflow:testTrackerCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,trackerTesting:null})))}},this.onUrlChange=()=>{this.externalId&&(window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=window.setTimeout((()=>this.flushUrlChange()),50))},this.onUserActivity=()=>this.ensureConnected(),this.remountIfNecessary=()=>{this.ui?.container&&!document.contains(this.ui.container)&&(Je("remounting UI because container was missing"),this.remount())},Je("constructor, build=1002912"),g(this.onUrlChange),this.setTargetEnv(new C),this.checkTestUserAtBoot(),this.toggleUI();for(const e of tt)document.addEventListener(e,this.remountIfNecessary)}get socketStatus(){return this._socketStatus}destroy(){Je("destroy"),this.reset(),p(this.onUrlChange),this.destroyTargetEnv();for(const e of tt)document.removeEventListener(e,this.remountIfNecessary)}setTargetEnv(e){this.destroyTargetEnv(),this.targetEnv=e,e.onBuilderMessage(this.onBuilderMessage)}destroyTargetEnv(){this.targetEnv&&(this.targetEnv.destroy(),this.targetEnv=null)}getTargetEnv(){if(!this.targetEnv)throw new o("Userflow.js: Cannot call getTargetEnv when protocol is not set");return this.targetEnv}setSessionStorageState(e){const t=e(this.getSessionStorageState());c.setItem("userflowClientState",JSON.stringify(t)),this.sessionStorageState=t,this.toggleUI()}getSessionStorageState(){let e=this.sessionStorageState;if(!e){const s=c.getItem("userflowClientState");if(s)try{e=JSON.parse(s)}catch(t){console.error("Userflow.js: Parse ElementSelectionState error:",t)}e||(e={testUser:null,activeApp:null,elementSelection:null,trackerTesting:null})}return e}checkTestUserAtBoot(){const e=this.getSessionStorageState().testUser;e&&(Je("checkTestUserAtBoot identifying test user"),this.identifyTestUser(e))}async identifyTestUser(e){this.setSessionStorageState((t=>({...t,testUser:e}))),this.reset(),this.init(e.clientToken),this.testUserIdentified=!0,this.externalId=e.id;const t=[this.identify(e.id,{name:e.name,email:e.email,signed_up_at:{set_once:(new Date).toISOString(),data_type:"datetime"}},{signature:e.signature})],{group:s}=e;s&&(this.groupId=s.id,t.push(this.group(s.id,{name:s.name},{signature:s.signature}))),await Promise.all(t)}resetTestUser(){this.setSessionStorageState((e=>({...e,testUser:null})))}init(e){if(Je("init",e),!e)throw new o("userflow.init() was called but missing Userflow.js Token");this.clientToken!==e&&(this.testUserIdentified?Je("init() ignoring new token since a test user has been identified"):(this.clientToken&&(Je("init() resetting due to new client token"),this.reset()),this.clientToken=e))}ensureInit(){if(!this.clientToken)throw new o("You must call userflow.init() first")}ensureIdentified(){if(this.ensureInit(),!this.externalId)throw new o("You must call userflow.identify() first");return this.externalId}ensureGroup(){if(this.ensureIdentified(),!this.groupId)throw new o("You must call userflow.group() first");return this.groupId}ensureConnected(){if(!this.clientToken||!this.externalId)return;if(this.debounceInactiveDisconnect(),this.socket)return;this._socketStatus="connecting",Je("connecting to socket");let t="e.userflow.com";"js.getuserflow.com"===new URL(st).hostname&&"e.userflow.com"===t&&(t="e.getuserflow.com");const s="wss://"+t+"/end-users/"+this.clientToken+"/socket";this.socket=new e(s,{reconnectAfterMs:e=>[100,500,1e3,5e3][e-1]||1e4,timeout:2e4}),this.socket.connect(),this.socket.onOpen((()=>{Je("socket opened")})),this.socket.onClose((()=>{this.emit("private:disconnect")})),this.socket.onError((e=>{console.log("Userflow.js socket error",e),this.reportCspIssue()})),this.channel=this.socket.channel(`end_users:${this.externalId}`,(()=>this.makeChannelJoinPayload())),this.channel.join().receive("ok",(e=>{this.logrocketAppId=e.logrocketAppId,this.featureFlags=new Set(e.featureFlags),Je("channel joined"),"connected"!==this._socketStatus&&(this._socketStatus="connected")})).receive("error",(e=>{["company_closed","invalid_client_token","invalid_user_external_id","incorrect_user_signature","rate_limit_exceeded","user_signature_required"].includes(e.code)?(console.error(`Userflow.js resetting due to: [${e.code}] ${e.message}`),this.reset(),this.clientToken=null):"invalid_protocol_version"===e.code?(console.error(`Userflow.js destroying due to: [${e.code}] ${e.message}`),this.destroy()):console.log("Userflow.js channel join error",e)})),this.channel.on("server_message",(e=>this.handleServerMessage(e))),this.channel.on("server_error",(e=>{console.log(`Userflow.js server error (${e.code}): ${e.message}`+(e.details&&e.details.length>0?"\nDetails:\n"+e.details.map((e=>(e.path?`${e.path}: `:"")+e.message)):""))}))}makeChannelJoinPayload(){const e=this.buildClientContext();this.clientContext=e;const t={protocolVersion:2,userflowClientBuild:"1002912",signature:this.signature,groupExternalId:this.groupId,groupSignature:this.groupSignature,flowSessionId:this.flowSession?.id||null,checklistSessionId:this.checklistSession?.id||null,resourceCenterSessionId:this.resourceCenterSession?.id||null,launchers:this.launcherSessions.map((e=>({flowId:e.flow.id}))),trackers:Array.from(this.trackers.values()).map((e=>({flowId:e.tracker.flowId}))),hasDraftSession:this.hasDraftSession(),clientConditions:Array.from(this.clientConditions.values()).map((e=>({conditionId:e.condition.id,isTrue:e.isTrue}))),previewFlowId:c.getItem("previewFlowId"),clientContext:e};return Je("channel join payload",t),t}disconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.socket&&this.socket.disconnect(),this._socketStatus="disconnected",this.socket=null,this.channel=null}debounceInactiveDisconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.debounceInactiveDisconnectTimeout=window.setTimeout((()=>{this.hasDraftSession()||this.assistantMessageInProgress?this.debounceInactiveDisconnect():(Je("disconnecting from socket due to inactivity"),this.disconnect())}),3e5)}hasDraftSession(){return!!this.flowSession?.draftMode||!!this.checklistSession?.draftMode||!!this.resourceCenterSession?.draftMode||this.launcherSessions.some((e=>e.draftMode))}async send(e,{batch:t,handlesRejection:s}={}){return this.inBatch&&["ToggleClientCondition","UpdateClientContext"].includes(e.kind)||this.checkPushRateLimit(),this.ensureConnected(),t&&!this.inBatch&&(this.inBatch=!0,this.sendRaw({kind:"BeginBatch"})),this.inBatch&&(window.clearTimeout(this.endBatchTimeout),this.endBatchTimeout=window.setTimeout((()=>{this.inBatch=!1,this.sendRaw({kind:"EndBatch"})}),50)),this.sendRaw(e,{handlesRejection:s})}async sendRaw(e,{handlesRejection:t}={}){return new Promise(((s,i)=>{if(!this.channel){const s=`Userflow.js: send() should not be called if channel is not set. Message kind=${e.kind}`;if(t)throw Error(s);return void console.log(s,"\nClient message:",e)}Je(`push ${e.kind} message`,e);const n=this.clientClock,r=()=>{this.serverClock=n,this.channel?.off("phx_error",a)},a=this.channel.on("phx_error",(s=>{r();const n=`Userflow.js send ${e.kind} got phx_error`;console.log(n,"\nClient message:",e,"\nError:",s),t&&i(new o(n))}));this.channel.push("client_message",e).receive("ok",(e=>{r(),s(e)})).receive("error",(t=>{r();const s=`Userflow.js error reply (${t.code}): ${t.message}`;console.log(s,"\nClient message:",e,"\nError:",t),i(new o(s,t.code,t.message))}))}))}checkPushRateLimit(){const e=Date.now();if(this.pushRateLimitMinuteExpires<e&&(this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=e+6e4),this.pushRateLimitMinute>=100)throw new o("This Userflow.js client has reached a maximum of 100 operations in the last 1 minute. This is usually due to one of the following:\n\n - Excessive calls to Userflow.js. Check if any of userflow.track(), userflow.identify(), userflow.updateUser() or similar are called repeatedly.\n - The URL changing too frequently. Look into https://userflow.com/docs/userflow-js#seturlfilter and filter out the changing part of the URL.\n - The user legitimately being very active, in which case you can just ignore this error.\n \n If in doubt, reach out to us at support@userflow.com.");this.pushRateLimitMinute++}handleServerMessage(e){Je(`received ${e.kind} message`,e);const{serverClock:t,flowSession:s,flowSessionClock:i,checklistSession:n,checklistSessionClock:o,resourceCenterSession:r}=this;switch(e.kind){case"CheckSessionsAck":case"ServerDebug":return;case"AddLauncher":{const{session:t}=e,s=this.launcherSessions.findIndex((e=>e.flow.id===t.flow.id));return this.launcherSessions=-1===s?[...this.launcherSessions,t]:[...this.launcherSessions.slice(0,s),t,...this.launcherSessions.slice(s+1)],void this.toggleUI()}case"AddTracker":return void this.addTracker(e.tracker);case"AssistantMessageEventWrapper":return void this.emit("private:assistantMessageEvent",e);case"CancelConditionWaitTimer":return window.clearTimeout(this.conditionWaitTimers.get(e.conditionId)),void this.conditionWaitTimers.delete(e.conditionId);case"ChecklistTaskCompleted":return void this.unackedTasks.add(e.taskCvid);case"ForceGoToStep":return i>t?void Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&this.emit("gotostep",{session:s,step:{id:e.stepId}}));case"RemoveLauncher":return void(this.removeLauncher(e.flowId)&&this.toggleUI());case"RemoveTracker":return void this.removeTracker(e.flowId);case"SetChecklistSession":return void(o<=t||n?.id===e.session.id?(this.setChecklistSession(e.session,t),this.toggleUI()):Je(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`));case"SetFlowSession":return void(i<=t||s?.id===e.session.id?(this.setFlowSession(e.session,t),this.toggleUI()):Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`));case"SetResourceCenterSession":return this.setResourceCenterSession(e.session),void this.toggleUI();case"StartConditionWaitTimer":if(!this.conditionWaitTimers.has(e.conditionId)){const t=window.setTimeout((()=>{this.conditionWaitTimers.delete(e.conditionId),this.send({kind:"FireConditionWaitTimer",conditionId:e.conditionId},{batch:!0})}),1e3*parseFloat(e.waitTime));this.conditionWaitTimers.set(e.conditionId,t)}return;case"TrackClientCondition":return void this.trackClientCondition(e.condition);case"UnsetChecklistSession":return o>t?void Je(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`):void(n?.id===e.sessionId&&(this.setChecklistSession(null,t),this.toggleUI()));case"UnsetFlowSession":return i>t?void Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&(this.setFlowSession(null,t),this.toggleUI()));case"UnsetResourceCenterSession":return void(r?.id===e.sessionId&&(this.setResourceCenterSession(null),this.toggleUI()));case"UntrackClientCondition":return void this.untrackClientCondition(e.conditionId);default:return void console.warn("Userflow.js: Received unknown message",e)}}async identify(e,t={},{signature:s}={}){if(Je("identify",e),this.ensureInit(),this.testUserIdentified&&e!==this.externalId)Je("identify() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.identify: First argument must be a non-empty string representing the user's ID in your database. Value received: ${JSON.stringify(e)}`);this.externalId&&e!==this.externalId&&(Je("identify resetting due to new externalId"),this.reset()),this.externalId=e,this.signature=s||null,this.observeUserActivity(),await Promise.all([this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(t)},{batch:!0}),this.onFirstIdentify()]),this.emit("private:identified")}}async identifyAnonymous(e={},s={}){const i="anonymousId";let n=a.getItem(i);n||(n="anon-"+t(),a.setItem(i,n)),await this.identify(n,e,s)}async updateUser(e={},t={}){Je("updateUser"),this.ensureIdentified(),await this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(e)},{batch:!0})}async group(e,t={},{signature:s,membership:i}={}){if(Je("group",e),this.ensureIdentified(),this.testUserIdentified&&e!==this.groupId)Je("group() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.group: First argument must be a non-empty string representing the group's ID in your database. Value received: ${JSON.stringify(e)}`);this.groupId=e,this.groupSignature=s||null,await this.send({kind:"UpsertGroup",groupExternalId:e,groupSignature:this.groupSignature,groupAttributes:this.normalizeAttributes(t),membershipAttributes:this.normalizeAttributes(i)},{batch:!0})}}async updateGroup(e={},t={}){Je("updateGroup");const s=this.ensureGroup();await this.send({kind:"UpsertGroup",groupExternalId:s,groupSignature:this.groupSignature,membershipAttributes:this.normalizeAttributes(t.membership),groupAttributes:this.normalizeAttributes(e)},{batch:!0})}normalizeAttributes(e){if(null==e)return{};if("object"!=typeof e)throw new o("Userflow: 'attributes' must be an object.");const t={};for(const s in e){if(!e.hasOwnProperty(s))continue;if("traits"===s){const i=e[s];Object.assign(t,this.extractLegacyTraits(i));continue}let i=e[s];if("string"==typeof i||"number"==typeof i||"boolean"==typeof i||null==i||Array.isArray(i))t[s]=this.normalizeAttributeLiteralOrList(s,i);else{if("object"!=typeof i||null==i)throw new o(`Userflow: Invalid value for '${s}' attribute.`);if("set"in i)t[s]={set:this.normalizeAttributeLiteralOrList(s,i.set),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("set_once"in i||"setOnce"in i)t[s]={setOnce:this.normalizeAttributeLiteralOrList(s,i.set_once??i.setOnce),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("add"in i){const e=i.add;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'add' value for '${s}' attribute. Must be a number or string.`);t[s]={add:e}}else if("subtract"in i){const e=i.subtract;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'subtract' value for '${s}' attribute. Must be a number or string.`);t[s]={subtract:e}}else if("append"in i)t[s]={append:this.normalizeAttributeLiteralOrList(s,i.append)};else if("prepend"in i)t[s]={prepend:this.normalizeAttributeLiteralOrList(s,i.prepend)};else{if(!("remove"in i))throw new o(`Userflow: Invalid value for '${s}' attribute.`);t[s]={remove:this.normalizeAttributeLiteralOrList(s,i.remove)}}}}return t}normalizeAttributeLiteralOrList(e,t){return Array.isArray(t)?t.map((t=>this.normalizeAttributeLiteral(e,t))):this.normalizeAttributeLiteral(e,t)}normalizeAttributeLiteral(e,t){if(null==t)return null;if("string"==typeof t||"number"==typeof t||"boolean"==typeof t)return t;throw new o(`Userflow: Invalid value for '${e}' attribute.`)}normalizeDataType(e,t){if(!t)return null;switch(t){case"string":return v.STRING;case"number":return v.NUMBER;case"boolean":return v.BOOLEAN;case"datetime":return v.DATETIME}throw new o(`Userflow: Invalid data_type for '${e}' attribute.`)}extractLegacyTraits(e){if(!e)return{};if(!Array.isArray(e)){const t=[];for(const s in e)e.hasOwnProperty(s)&&t.push({name:s,value:e[s]});e=t}return e.reduce(((e,{name:t,value:s,dataType:i})=>{if("string"!=typeof t||t.length>100||!t.match(/^[a-z0-9_]+$/))return this.warn("Userflow.identify: Invalid trait name (must be string, no more than 100 characters, and only consist of a-z, 0-9 and underscores). The trait will be ignored. Name was:",t),e;if("string"==typeof s);else if("boolean"==typeof s)i||(i="boolean"),s=s?"true":"false";else{if("number"!=typeof s)return this.warn(`userflow.identify: The value of trait '${t}' is invalid (must be a string, a boolean or a number). The trait will be ignored. Value was:`,s),e;i||(i=Number.isInteger(s)?"integer":"decimal"),s=String(s)}let n=null;if(i)switch(i){case"string":n=v.STRING;break;case"boolean":n=v.BOOLEAN;break;case"integer":case"decimal":n=v.NUMBER;break;case"datetime":n=v.DATETIME;break;default:return this.warn(`userflow.identify: The data type of trait '${t}' is invalid (must be a 'string', 'boolean', 'integer', 'decimal' or 'datetime'). The trait will be ignored. Data type was:`,i),e}return e[t]={set:s,dataType:n},e}),{})}async track(e,t={},{userOnly:s}={}){Je(`track '${e}'`,t),this.ensureIdentified(),await this.send({kind:"TrackEvent",userOnly:!!s,name:e,attributes:this.normalizeEventAttributes(t)},{batch:!0})}normalizeEventAttributes(e){const t=this.normalizeAttributes(e);for(const s in t){if(!t.hasOwnProperty(s))continue;const e=t[s];if(null!=e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Array.isArray(e)&&!("set"in e))throw new o(`Userflow: Invalid value for '${s}' attribute. Event attributes only support literal values, list values and 'set' changes.`)}return t}onFirstIdentify(){this.onFirstIdentifyRun||(this.onFirstIdentifyRun=!0,this.onFirstIdentifyTimeout=window.setTimeout((()=>{this.trackPageViewed(),this.firstIdentifyCallback?(this.firstIdentifyCallback(),this.firstIdentifyCallback=null):this.checkUrlForStartFlow()}),0))}onceIdentified(e){this.isIdentified()?e():this.firstIdentifyCallback=e}checkUrlForStartFlow(){const e=new URL(d()),t=e.searchParams.get("userflow")||e.searchParams.get("studio1_flow")||e.searchParams.get("studio1_walkthrough");t&&(Je(`url contained flow ${t}`),this.startFlow({flowId:t,startReason:L.LINK,batch:!0}),e.searchParams.delete("userflow"),e.searchParams.delete("studio1_flow"),e.searchParams.delete("studio1_walkthrough"),window.history.replaceState({},"",e.toString()),this.clientContext=this.buildClientContext(),this.pushUpdateClientContext())}flushUrlChange(){const e=this.buildClientContext();this.clientContext&&e.pageUrl===this.clientContext.pageUrl||(this.clientContext=e,this.pushUpdateClientContext(),this.trackPageViewed(),this.checkUrlForStartFlow())}async trackPageViewed(){this.pageTrackingDisabled||this.track("page_viewed",{})}buildClientContext(){return{pageUrl:ze(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}}pushUpdateClientContext(){this.send({kind:"UpdateClientContext",clientContext:this.clientContext},{batch:!0})}ackCompletedTask(e){this.unackedTasks.delete(e)}taskIsUnacked(e){return this.unackedTasks.has(e)}isIdentified(){return null!=this.externalId}on(e,t){let s=this.listeners.get(e);s||(s=new Set,this.listeners.set(e,s)),s.add(t)}off(e,t){const s=this.listeners.get(e);s&&s.delete(t)}emit(e,...t){const s=this.listeners.get(e);if(s){Array.from(s).forEach((e=>e(...t)))}}observeUserActivity(){document.addEventListener("mouseover",this.onUserActivity),document.addEventListener("pointerdown",this.onUserActivity),document.addEventListener("keydown",this.onUserActivity)}unobserveUserActivity(){document.removeEventListener("mouseover",this.onUserActivity),document.removeEventListener("pointerdown",this.onUserActivity),document.removeEventListener("keydown",this.onUserActivity)}reset(){Je("reset"),this.externalId=null,this.groupId=null,this.sessionStorageState=null,this.setFlowSession(null,0),this.setChecklistSession(null,0),this.setResourceCenterSession(null),this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.unackedTasks=new Set,this.onFirstIdentifyRun=!1,window.clearTimeout(this.onFirstIdentifyTimeout),this.onFirstIdentifyTimeout=void 0,this.clientContext=null,this.unobserveUserActivity(),window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=void 0,this.clientConditions.forEach(((e,t)=>{this.untrackClientCondition(t)})),this.firstIdentifyCallback=null,this.testUserIdentified=!1,a.removeItem("anonymousId"),this.unmountUI(),this.disconnect(),this.inBatch=!1,window.clearTimeout(this.endBatchTimeout),this.endBatchTimeout=void 0,this.clientClock=1,this.serverClock=1}async startFlow({flowId:e,stepCvid:t,startReason:s,once:i,batch:n,replaceCurrent:o}){if(this.ensureIdentified(),o&&this.flowSession&&this.endFlow(this.flowSession,{endReason:m.REPLACED,batch:!0}),Je(`startFlow ${e}`,{startReason:s}),this.checklistSession?.flow.id===e)return Je("startFlow matches current checklist, so showing it instead"),void this.showChecklist();const r={kind:"StartFlow",flowId:e,stepCvid:t,startReason:s,once:!!i};await this.send(r,{batch:n})}async startFlowWithToken(e){this.ensureIdentified(),Je("startFlowWithToken",{token:e}),await this.send({kind:"StartFlowWithToken",token:e},{batch:!0})}optimisticClockUIUpdate(e){this.clientClock++,e(),this.toggleUI()}async showChecklist(){this.resourceCenterEmbedsChecklist()?this.openResourceCenter():(this.unmarkExpandPending(),this.checklistSession&&!this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!0,this.toggleUI(),c.setItem(`checklistExpanded:${this.checklistSession.id}`,"1"),await this.send({kind:"ShowChecklist",sessionId:this.checklistSession.id},{batch:!0})))}async hideChecklist(){this.resourceCenterEmbedsChecklist()?this.closeResourceCenter():this.checklistSession&&this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!1,this.toggleUI(),c.removeItem(`checklistExpanded:${this.checklistSession.id}`),await this.send({kind:"HideChecklist",sessionId:this.checklistSession.id},{batch:!0}))}async unmarkExpandPending(){this.checklistSession&&this.checklistExpandPending&&(this.checklistExpandPending=!1,await this.send({kind:"UnmarkExpandPending",sessionId:this.checklistSession.id},{batch:!0}))}async openResourceCenter(){this.resourceCenterEmbedsChecklist()&&this.unmarkExpandPending(),this.resourceCenterSession&&!this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!0,this.toggleUI(),this.emit("resourceCenterChanged"),c.setItem(`resourceCenterOpen:${this.resourceCenterSession.id}`,"1"),await this.send({kind:"OpenResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}async closeResourceCenter(){this.resourceCenterSession&&this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!1,this.toggleUI(),this.emit("resourceCenterChanged"),c.removeItem(`resourceCenterOpen:${this.resourceCenterSession.id}`),await this.send({kind:"CloseResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}toggleResourceCenter(){this.resourceCenterOpen?this.closeResourceCenter():this.openResourceCenter()}setResourceCenterLauncherHidden(e){this.resourceCenterLauncherHidden=e,this.toggleUI()}getResourceCenterState(){if(!this.resourceCenterSession)return null;const e=this.resourceCenterEmbedsChecklist(),{checklistSession:t}=this;return{isOpen:this.resourceCenterOpen,hasChecklist:e,uncompletedChecklistTaskCount:e&&t?qe(t):0}}resourceCenterEmbedsChecklist(){const e=this.resourceCenterSession;return!!e&&!!e.version.resourceCenter?.blocks.some((e=>e.type===Ie.CHECKLIST))}async endFlow(e,{endReason:t,batch:s}){this.ensureIdentified(),this.optimisticClockUIUpdate((()=>{const{clientClock:t}=this;this.flowSession?.id===e.id&&this.setFlowSession(null,t),this.checklistSession?.id===e.id&&this.setChecklistSession(null,t),this.resourceCenterSession?.id===e.id&&this.setResourceCenterSession(null)}));const{flow:i}=e,n={id:i.id,type:i.type.toLowerCase()};i.type===_.CHECKLIST?this.emit("checklistEnded",{checklist:n,endReason:t}):i.type===_.FLOW&&this.emit("flowEnded",{flow:n,endReason:t});const o={kind:"EndFlow",sessionId:e.id,endReason:t};await this.send(o,{batch:s})}async goToStep(e,t){Je("goToStep",e.id,t.name||t.id),this.ensureIdentified();const s=this.send({kind:"GoToStep",sessionId:e.id,stepId:t.id});e.currentStep=t,this.emit("gotostep",{session:e,step:t}),await s}async endAllFlows(){Je("endAllFlows"),this.optimisticClockUIUpdate((()=>{const{clientClock:e}=this;this.setFlowSession(null,e),this.setChecklistSession(null,e)})),await this.send({kind:"EndAllFlows"})}async endChecklist(){Je("endChecklist");const e=this.checklistSession||this.flowSession;e?.flow.type===_.CHECKLIST&&this.endFlow(e,{endReason:m.USERFLOWJS})}setFlowSession(e,t=this.clientClock){const s=this.flowSession;this.flowSession=e,this.flowSessionClock=t,e&&!s&&(this.hideChecklist(),this.closeResourceCenter()),null==e&&this.originalActiveElement&&("function"==typeof this.originalActiveElement.focus&&this.originalActiveElement.focus(),this.originalActiveElement=void 0)}setChecklistSession(e,t=this.clientClock){const s=this.checklistSession;this.checklistSession=e,this.checklistSessionClock=t,null===e&&(this.checklistExpanded=!1,this.checklistExpandPending=!1),e&&e.id!==s?.id&&(this.checklistExpanded=!!c.getItem(`checklistExpanded:${e.id}`),e.expandPending&&(this.checklistExpandPending=!0)),this.emit("checklistChanged"),this.emit("resourceCenterChanged")}setResourceCenterSession(e){const t=this.resourceCenterSession;this.resourceCenterSession=e,null===e&&(this.resourceCenterOpen=!1),t&&t.id!==e?.id&&c.removeItem(`resourceCenterOpen:${t.id}`),e&&e.id!==t?.id&&(this.resourceCenterOpen=!!c.getItem(`resourceCenterOpen:${e.id}`)),this.emit("resourceCenterChanged")}launcherSeen(e){this.send({kind:"StartFlow",flowId:e,startReason:L.LAUNCHER_SEEN,once:!1})}activateLauncher(e){const t=this.activeLauncherFlowId&&this.launcherSessions.find((e=>e.flow.id===this.activeLauncherFlowId));t&&this.deactivateLauncher(t),this.activeLauncherFlowId=e.flow.id,this.toggleUI(),this.send({kind:"ActivateLauncher",flowId:e.flow.id})}deactivateLauncher(e){const{launcher:t}=e.version;e.flow.id===this.activeLauncherFlowId&&(t?.dismissOn===ye.DEACTIVATE?this.dismissLauncher(e,{endReason:m.LAUNCHER_DEACTIVATED}):(this.activeLauncherFlowId=null,this.toggleUI()))}dismissLauncher(e,{endReason:t}){const s=e.flow.id;this.removeLauncher(s),this.toggleUI(),this.send({kind:"DismissLauncher",flowId:s,endReason:t})}removeLauncher(e){const t=this.launcherSessions.findIndex((t=>t.flow.id===e));return-1!==t&&(this.launcherSessions=[...this.launcherSessions.slice(0,t),...this.launcherSessions.slice(t+1)],e===this.activeLauncherFlowId&&(this.activeLauncherFlowId=null),!0)}async toggleUI(){this.flowSession||!this.checklistExpandPending&&!this.checklistSession?.version.checklist?.tasks.some((e=>this.taskIsUnacked(e.cvid)))||this.showChecklist(),this.emit("uistatechange"),this.shouldBeMounted()?await this.mountUI():this.unmountUI()}shouldBeMounted(){if(this.uiDisabled)return!1;return!!this.getSessionStorageState().activeApp||!!this.flowSession||!!this.checklistSession&&(this.checklistExpanded||!!this.checklistSession?.version.checklist?.launcherEnabled)||!!this.resourceCenterSession&&(this.resourceCenterOpen||!this.resourceCenterLauncherHidden)||this.launcherSessions.length>0||this.notifications.length>0}async mountUI(){if(!this.ui){const e=await this.createUI();this.shouldBeMounted()&&!this.ui&&(Je("mount UI"),this.ui=e,this.ui.mount())}}unmountUI(){this.ui&&(Je("unmount UI"),this.ui.unmount(),this.ui=null)}remount(){this.unmountUI(),this.toggleUI()}async createUI(){try{const e=n((()=>import("./ui.js")),[new URL("ui.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString()]);this.resourceCenterSession&&Qe();const{RealUI:t}=await e;return new t(this)}catch(e){throw this.reportCspIssue(),e}}async trackClientCondition(e){if(this.clientConditions.has(e.id))return;Je("track client condition",e),this.clientConditions.set(e.id,{condition:e,isTrue:null});const{conditionTypes:t}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.u}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),s=t[e.type],i=this.clientConditions.get(e.id);i&&(i.untrack=s.track({sessionData:new et([]),condition:e,callback:t=>{i.isTrue!==t&&(Je("client condition truthiness changed",t,i.condition),i.isTrue=t,this.send({kind:"ToggleClientCondition",conditionId:e.id,isTrue:t},{batch:!0}))}}))}untrackClientCondition(e){const t=this.clientConditions.get(e);t&&(Je("untrack client condition",t.condition),t.untrack&&t.untrack(),this.clientConditions.delete(e))}async addTracker(e){let t=this.trackers.get(e.flowId);t?t.tracker=e:this.trackers.set(e.flowId,{tracker:e,isTrue:!1});const{conditionTypes:s}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.u}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),i=this.trackers.get(e.flowId);if(!i)return;const{tracker:o}=i,{condition:r}=o,a=s[r.type];i.untrack&&i.untrack(),i.untrack=a.track({sessionData:new et(o.data),condition:r,flipBackEvents:!0,callback:e=>{const t=i.isTrue;i.isTrue=e,!t&&e&&this.send({kind:"TrackTrackerEvent",token:o.token},{batch:!0})}}),this.emit("private:trackerStarted")}removeTracker(e){const t=this.trackers.get(e);t&&(t.untrack&&t.untrack(),this.trackers.delete(e),this.emit("private:trackerStopped"))}reportCspIssue(){const e=this.getSessionStorageState();!this.testUserIdentified&&!e.activeApp||this.cspIssueReported||(this.cspIssueReported=!0,Je("csp issue detected"),f(window,{kind:"userflow:crxCspIssueDetected"}))}getAudio(){return this.audio||(this.audio=new Audio),this.audio}playAudio(e){if(document.hidden)return;const t=this.getAudio();e&&(t.src=e);const s=t.play();this.audioReady=!0,s&&s.catch((e=>{e.name}))}pauseAudio(){const e=this.audio;e&&!e.paused&&e.pause()}async getStepSpeech(e,t){return(await this.send({kind:"GetStepSpeechV2",syntheticVoice:e,text:t})).url}featureFlagEnabled(e){return this.featureFlags.has(e)}showNotification(e,t,s){const i={id:++this.notificationIdCounter,label:e,message:t,type:s};this.notifications=[...this.notifications,i],this.toggleUI()}dismissNotification(e){this.notifications=this.notifications.filter((t=>t.id!==e)),this.toggleUI()}warn(...e){console.warn(...e)}}if(void 0===window.userflow||window.userflow._stubbed){const e=Object.assign(window.userflow||{},function(){const e=new it;return{_stubbed:!1,init(t){e.init(t)},identify:(t,s={},i={})=>e.identify(t,s,i),identifyAnonymous:(t={},s={})=>e.identifyAnonymous(t,s),isIdentified:()=>e.isIdentified(),updateUser:(t,s={})=>e.updateUser(t,s),group:(t,s={},i={})=>e.group(t,s,i),updateGroup:(t,s={})=>e.updateGroup(t,s),track:(t,s={},i={})=>e.track(t,s,i),start:(t,{once:s}={})=>e.startFlow({flowId:t,startReason:L.USERFLOWJS,once:s}),startFlow:e=>(console.warn("Userflow.js: userflow.startFlow() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),startWalk:e=>(console.warn("Userflow.js: userflow.startWalk() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),endAll:()=>e.endAllFlows(),endChecklist:()=>e.endChecklist(),endAllFlows:()=>window.userflow.endAll(),async endFlow(){console.warn("Userflow.js: userflow.endFlow() has been deprecated and no longer has any effect.")},async endWalk(){console.warn("Userflow.js: userflow.endWalk() has been deprecated and no longer has any effect.")},openResourceCenter(){e.openResourceCenter()},closeResourceCenter(){e.closeResourceCenter()},toggleResourceCenter(){e.toggleResourceCenter()},setResourceCenterLauncherHidden(t){e.setResourceCenterLauncherHidden(t)},getResourceCenterState:()=>e.getResourceCenterState(),setWalkPosition(){console.warn("Userflow.js: userflow.setWalkPosition() has been deprecated and no longer has any effect.")},reset(){e.reset()},remount(){e.remount()},on(t,s){e.on(t,s)},off(t,s){e.off(t,s)},setCustomInputSelector(e){console.warn("Userflow.js: userflow.setCustomInputSelector() has been deprecated. Use userflow.registerCustomInput() instead. See docs: https://userflow.com/docs/userflow-js"),e&&Ve.customInputs.push({cssSelector:e})},registerCustomInput(e,t){Ve.customInputs.push({cssSelector:e,getValue:t})},setCustomNavigate(e){Ve.customNavigate=e},setUrlFilter(e){Ve.urlFilter=e},setInferenceAttributeNames(e){Ve.inferenceAttributeNames=e},setInferenceAttributeFilter(e,t){Ve.inferenceAttributeFilters[e]=je(t)},setInferenceClassNameFilter(e){Ve.inferenceClassNameFilters=je(e)},setScrollPadding(e){Ve.scrollPadding=e},setCustomScrollIntoView(e){Ve.customScrollIntoView=e},prepareAudio(){e.playAudio(null)},setShadowDomEnabled(e){console.warn("Userflow.js: userflow.setShadowDomEnabled() has been deprecated. Please remove this call from your Userflow.js snippet. Shadow DOM is supported by default now.")},setPageTrackingDisabled(t){e.pageTrackingDisabled=t},setBaseZIndex(e){Ve.baseZIndex=e},_setTargetEnv(t){e.setTargetEnv(t)}}}());window.userflow=e,window.studio1=e,function(){const e=window.userflow,t=window.USERFLOWJS_QUEUE;if(delete window.USERFLOWJS_QUEUE,!t||0===t.length)return;Je(`processing ${t.length} items in the queue`);for(const[s,i,n]of t){if("function"!=typeof e[s]){console.error(`Userflow.js: Invalid method '${s}' in queue`);continue}const t=e[s](...n);i&&t&&"function"==typeof t.then&&t.then(i.resolve,i.reject)}Je("queue processed")}()}export{W as A,V as B,me as C,X as D,m as E,B as F,ne as G,ce as H,K as I,de as J,Le as K,Me as L,Q as M,ve as N,Be as O,_e as P,De as Q,Qe as R,L as S,tt as T,o as U,re as V,y as W,n as _,P as a,M as b,Ve as c,Je as d,D as e,H as f,ze as g,Ie as h,qe as i,se as j,ee as k,ue as l,Ae as m,_ as n,g as o,c as p,d as q,fe as r,l as s,Ke as t,p as u,we as v,ge as w,et as x,Y as y,a as z};export default window.userflow;
|
|
1
|
+
import{S as e}from"./vendor.phoenix.js";import{v as t}from"./vendor.uuid.js";let s;const i={},n=function(e,t){if(!t)return e();if(void 0===s){const e=document.createElement("link").relList;s=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in i)return;i[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":s,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};class o extends Error{constructor(e,t,s){super(e),Object.setPrototypeOf(this,o.prototype),this.name="UserflowError",this.code=t,this.humanMessage=s}}class r{constructor(e){this.type=e,this.testState={}}formatKey(e){return`userflow:${e}`}getItem(e){return e=this.formatKey(e),"undefined"==typeof window?null:window[this.type].getItem(e)}setItem(e,t){e=this.formatKey(e),"undefined"!=typeof window&&window[this.type].setItem(e,t)}removeItem(e){if(e=this.formatKey(e),"undefined"!=typeof window)return window[this.type].removeItem(e)}clear(){if("undefined"!=typeof window)return window[this.type].clear()}}const a=new r("localStorage"),c=new r("sessionStorage");function l(e){window.location.href=e}function d(){return window.location.href}var h,u,E;function f(e,t,{toOrigin:s}={}){e.postMessage(t,s||"*")}function T(e,{fromWindow:t,fromOrigin:s}={}){const i=i=>{if(!i.isTrusted)return;if(t&&t!==i.source)return;if(s&&i.origin!==s)return;const o=i.data;o&&"object"==typeof o&&"string"==typeof o.kind&&o.kind.startsWith("userflow:")&&!0===e(o)&&n()};window.addEventListener("message",i);const n=()=>window.removeEventListener("message",i);return n}(h||(h={})).INPUT="INPUT",(E=u||(u={})).AUTO="AUTO",E.MANUAL="MANUAL";const w=new Set;let S=!1;function g(e){return function(){if(S)return;S=!0;const{history:e}=window,t=t=>{const s=e[t];e[t]=(...t)=>{s.apply(e,t),I()}};t("pushState"),t("replaceState"),window.addEventListener("popstate",(()=>{I()}))}(),w.add(e),()=>{p(e)}}function p(e){w.delete(e)}function I(){w.forEach((e=>e()))}class C{destroy(){this.unregisterOnMessage&&this.unregisterOnMessage()}postBuilderMessage(e){f(window.opener,e,{toOrigin:"https://userflow.com"})}onBuilderMessage(e){return this.unregisterOnMessage=T(e,{fromOrigin:"https://userflow.com"}),!1}async captureScreenshot(e,t,s,i){f(window,{kind:"userflow:crxScreenshot",x:e,y:t,width:s,height:i,devicePixelRatio:window.devicePixelRatio});var n;return(await(n=e=>"userflow:crxScreenshotResult"===e.kind?e:null,new Promise((e=>{T((t=>{const s=n(t);return!!s&&(e(s),!0)}))})))).imageDataUrl}}var m,k,A,U,L,R,y,O,v,N,_,b,D,F,M,P,B,x,H,G,W,$,V,j,K,z,Y,J,X,Z,Q,q,ee,te,se,ie,ne,oe,re,ae,ce,le,de,he,ue,Ee,fe,Te,we,Se,ge,pe,Ie,Ce,me,ke,Ae,Ue,Le,Re,ye,Oe,ve,Ne,_e,be,De,Fe,Me,Pe,Be,xe,He,Ge,We,$e;(k=m||(m={})).ACTION="ACTION",k.LAUNCHER_DEACTIVATED="LAUNCHER_DEACTIVATED",k.REPLACED="REPLACED",k.SNOOZED="SNOOZED",k.TOOLTIP_TARGET_MISSING="TOOLTIP_TARGET_MISSING",k.USERFLOWJS="USERFLOWJS",k.USER_CLOSED="USER_CLOSED",(U=A||(A={})).SECOND="SECOND",U.MINUTE="MINUTE",U.HOUR="HOUR",U.DAY="DAY",(R=L||(L={})).ACTION="ACTION",R.DRAFT="DRAFT",R.LINK="LINK",R.LAUNCHER_SEEN="LAUNCHER_SEEN",R.RESOURCE_CENTER="RESOURCE_CENTER",R.USERFLOWJS="USERFLOWJS",(O=y||(y={})).LIKE="LIKE",O.DISLIKE="DISLIKE",(N=v||(v={})).STRING="STRING",N.BOOLEAN="BOOLEAN",N.NUMBER="NUMBER",N.DATETIME="DATETIME",N.LIST="LIST",N.RANDOM_AB="RANDOM_AB",N.RANDOM_NUMBER="RANDOM_NUMBER",(b=_||(_={})).FLOW="FLOW",b.CHECKLIST="CHECKLIST",b.LAUNCHER="LAUNCHER",b.RESOURCE_CENTER="RESOURCE_CENTER",(F=D||(D={})).ALWAYS_TRUE="ALWAYS_TRUE",F.ATTRIBUTE="ATTRIBUTE",F.CLAUSE="CLAUSE",F.ELEMENT="ELEMENT",F.FILLED_IN_INPUT="FILLED_IN_INPUT",F.FLOW="FLOW",F.INPUT_VALUE="INPUT_VALUE",F.PAGE="PAGE",F.TIME="TIME",function(e){e.AUTO="AUTO",e.MANUAL="MANUAL"}(M||(M={})),(P||(P={})).INPUT="INPUT",(x=B||(B={})).ABSOLUTE_EQ="ABSOLUTE_EQ",x.ABSOLUTE_GT="ABSOLUTE_GT",x.ABSOLUTE_LT="ABSOLUTE_LT",x.AND="AND",x.BETWEEN="BETWEEN",x.CONTAINS="CONTAINS",x.EMPTY="EMPTY",x.ENDS_WITH="ENDS_WITH",x.EQ="EQ",x.EXCLUDES_ALL="EXCLUDES_ALL",x.EXCLUDES_ANY="EXCLUDES_ANY",x.FALSE="FALSE",x.GT="GT",x.GTE="GTE",x.INCLUDES_ALL="INCLUDES_ALL",x.INCLUDES_ANY="INCLUDES_ANY",x.LT="LT",x.LTE="LTE",x.NE="NE",x.NOT_CONTAINS="NOT_CONTAINS",x.NOT_EMPTY="NOT_EMPTY",x.NOT_REGEX="NOT_REGEX",x.OR="OR",x.REGEX="REGEX",x.RELATIVE_EQ="RELATIVE_EQ",x.RELATIVE_GT="RELATIVE_GT",x.RELATIVE_LT="RELATIVE_LT",x.STARTS_WITH="STARTS_WITH",x.TRUE="TRUE",x.URL="URL",(G=H||(H={})).CLICK="CLICK",G.DISABLED="DISABLED",G.MOUSEDOWN="MOUSEDOWN",G.NOT_CLICK="NOT_CLICK",G.NOT_DISABLED="NOT_DISABLED",G.NOT_PRESENT="NOT_PRESENT",G.PRESENT="PRESENT",($=W||(W={})).ASSET="ASSET",$.CARTOON="CARTOON",$.NONE="NONE",$.URL="URL",(j=V||(V={})).INSIDE="INSIDE",j.OUTSIDE="OUTSIDE",(z=K||(K={})).TOP_LEFT="TOP_LEFT",z.TOP_CENTER="TOP_CENTER",z.TOP_RIGHT="TOP_RIGHT",z.BOTTOM_RIGHT="BOTTOM_RIGHT",z.BOTTOM_CENTER="BOTTOM_CENTER",z.BOTTOM_LEFT="BOTTOM_LEFT",z.CENTER="CENTER",(J=Y||(Y={})).GOOGLE="GOOGLE",J.STANDARD="STANDARD",(Z=X||(X={})).DISMISS_FIRST_MENU_AFTER="DISMISS_FIRST_MENU_AFTER",Z.DISMISS="DISMISS",(q=Q||(Q={})).DISMISS="DISMISS",q.NONE="NONE",(te=ee||(ee={})).DEFAULT="DEFAULT",te.PLAINTEXT="PLAINTEXT",(ie=se||(se={})).CHECKLIST_OVERRIDE="CHECKLIST_OVERRIDE",ie.RESOURCE_CENTER_ONLY="RESOURCE_CENTER_ONLY",ie.NONE="NONE",(oe=ne||(ne={})).BUBBLE="BUBBLE",oe.END="END",oe.ERROR="ERROR",oe.FLAG="FLAG",(ae=re||(re={})).MANUAL="MANUAL",ae.NONE="NONE",ae.SYNTHETIC="SYNTHETIC",(le=ce||(ce={})).BUBBLE="BUBBLE",le.HIDDEN="HIDDEN",le.MODAL="MODAL",le.TOOLTIP="TOOLTIP",(he=de||(de={})).ABOVE="ABOVE",he.BELOW="BELOW",he.LEFT="LEFT",he.RIGHT="RIGHT",(Ee=ue||(ue={})).CLOSE_FLOW="CLOSE_FLOW",Ee.EVAL_JS="EVAL_JS",Ee.GO_TO_STEP="GO_TO_STEP",Ee.NAVIGATE="NAVIGATE",Ee.SET_ATTRIBUTE="SET_ATTRIBUTE",Ee.SNOOZE="SNOOZE",Ee.START_FLOW="START_FLOW",(Te=fe||(fe={})).NEW_TAB="NEW_TAB",Te.SAME_TAB="SAME_TAB",(Se=we||(we={})).SET="SET",Se.SET_ONCE="SET_ONCE",Se.ADD="ADD",Se.SUBTRACT="SUBTRACT",Se.UNSET="UNSET",(pe=ge||(ge={})).MULTILINE_TEXT="MULTILINE_TEXT",pe.MULTIPLE_CHOICE="MULTIPLE_CHOICE",pe.NPS="NPS",pe.SCALE="SCALE",pe.STARS="STARS",pe.TEXT="TEXT",(Ce=Ie||(Ie={})).ACTION="ACTION",Ce.ASSISTANT="ASSISTANT",Ce.CHECKLIST="CHECKLIST",Ce.CONTACT="CONTACT",Ce.FLOWS="FLOWS",Ce.KNOWLEDGE_BASE="KNOWLEDGE_BASE",Ce.MESSAGE="MESSAGE",Ce.SUBPAGE="SUBPAGE",(ke=me||(me={})).CRISP="CRISP",ke.CUSTOM="CUSTOM",ke.FRESHCHAT="FRESHCHAT",ke.HELPSCOUT="HELPSCOUT",ke.HUBSPOT="HUBSPOT",ke.INTERCOM="INTERCOM",ke.ZENDESK="ZENDESK",ke.ZENDESK_MESSENGER="ZENDESK_MESSENGER",(Ue=Ae||(Ae={})).BUTTON="BUTTON",Ue.INPUT="INPUT",(Re=Le||(Le={})).LAUNCHER_CLICK="LAUNCHER_CLICK",Re.LAUNCHER_HOVER="LAUNCHER_HOVER",Re.TARGET_CLICK="TARGET_CLICK",Re.TARGET_HOVER="TARGET_HOVER",Re.LAUNCHER_TARGET_CLICK="LAUNCHER_TARGET_CLICK",Re.LAUNCHER_TARGET_HOVER="LAUNCHER_TARGET_HOVER",(Oe=ye||(ye={})).ACTIVATE="ACTIVATE",Oe.DEACTIVATE="DEACTIVATE",Oe.NEVER="NEVER",(Ne=ve||(ve={})).AUTO="AUTO",Ne.TOP="TOP",Ne.RIGHT="RIGHT",Ne.BOTTOM="BOTTOM",Ne.LEFT="LEFT",(be=_e||(_e={})).START="START",be.CENTER="CENTER",be.END="END",(Fe=De||(De={})).PERCENT="PERCENT",Fe.PX="PX",(Pe=Me||(Me={})).BEACON="BEACON",Pe.BUTTON="BUTTON",Pe.HIDDEN="HIDDEN",Pe.ICON="ICON",(xe=Be||(Be={})).LAUNCHER="LAUNCHER",xe.TARGET="TARGET",(Ge=He||(He={})).ACTIVE="ACTIVE",Ge.COMPLETED="COMPLETED",Ge.ENDED="ENDED",Ge.NOT_SEEN="NOT_SEEN",($e=We||(We={})).HIGHLIGHT="HIGHLIGHT",$e.MODAL="MODAL",$e.HIGHLIGHT_MODAL="HIGHLIGHT_MODAL";const Ve={customInputs:[],customNavigate:null,urlFilter:null,customScrollIntoView:null,scrollPadding:null,inferenceAttributeNames:["data-for","data-id","data-testid","data-test-id","for","id","name","placeholder","role"],inferenceAttributeFilters:{id:[e=>!e.match(/\d$/)],"data-id":[e=>!e.match(/\d$/)]},inferenceClassNameFilters:[e=>!e.startsWith("css-")],baseZIndex:1234500};function je(e){return Array.isArray(e)||(e=e?[e]:[]),e=e.map((e=>"string"==typeof e?new RegExp(e):e))}function Ke(e,t){return e.every((e=>"function"==typeof e?e(t):!(e instanceof RegExp)||e.test(t)))}function ze(){let e=d();if(Ve.urlFilter){if(e=Ve.urlFilter(e),"string"!=typeof e)throw new o("Userflow.js: URL filter returned non-string value. Please check your userflow.setUrlFilter() implementation.");try{new URL(e)}catch(t){throw new o("Userflow.js: URL filter returned an invalid URL. Please check your userflow.setUrlFilter() implementation.\nReturned URL: "+e+"\nError message: "+t.message)}}return e}const Ye=(localStorage.getItem("debug")||"").split(",").some((e=>"*"===e||e.startsWith("userflow:*"))),Je=Ze("log");let Xe;function Ze(e){return function(t,...s){if(Ye){const i=performance.now(),n=Xe?Math.round(i-Xe):0;Xe=i,console[e](`%cuserflow %c${t} %c+${n}ms`,"color:#4579E4;","","color:#4579E4;",...s)}}}Je.group=Ze("group"),Je.groupCollapsed=Ze("groupCollapsed"),Je.groupEnd=function(){Ye&&console.groupEnd()};const Qe=()=>n((()=>import("./ResourceCenterApp.js").then((function(e){return e.R}))),[new URL("ResourceCenterApp.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("Icons.js",import.meta.url).toString(),new URL("BubbleToolbar.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("vendor.fortawesome.react-fontawesome.js",import.meta.url).toString(),new URL("vendor.fortawesome.fontawesome-svg-core.js",import.meta.url).toString(),new URL("vendor.prop-types.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("logomark.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("DynamicIcon.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("ChecklistUI.js",import.meta.url).toString()]);function qe(e){const t=e.version.checklist.tasks.length;return Math.max(0,t-e.taskCompletions.length)}class et{constructor(e){this.observers=new Set,this._value=e}get value(){return this._value}update(e){if(e!==this._value){this._value=e;for(const e of this.observers)e()}}observe(e){return this.observers.add(e),()=>this.observers.delete(e)}}const tt=["turbo:before-cache","turbo:load","turbo:visit","turbolinks:before-cache","turbolinks:load","turbolinks:visit"],st=import.meta.url;class it{constructor(){this.clientToken=null,this.externalId=null,this.signature=null,this.groupId=null,this.groupSignature=null,this._socketStatus="disconnected",this.socket=null,this.channel=null,this.featureFlags=new Set,this.logrocketAppId=null,this.debounceInactiveDisconnectTimeout=void 0,this.inBatch=!1,this.endBatchTimeout=void 0,this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=0,this.clientClock=1,this.serverClock=1,this.flowSession=null,this.flowSessionClock=0,this.checklistSession=null,this.checklistExpanded=!1,this.checklistExpandPending=!1,this.checklistSessionClock=0,this.resourceCenterSession=null,this.resourceCenterOpen=!1,this.resourceCenterLauncherHidden=!1,this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.notificationIdCounter=0,this.sessionStorageState=null,this.clientContext=null,this.flushUrlChangeTimeout=void 0,this.onFirstIdentifyRun=!1,this.onFirstIdentifyTimeout=void 0,this.firstIdentifyCallback=null,this.ui=null,this.unackedTasks=new Set,this.clientConditions=new Map,this.trackers=new Map,this.conditionWaitTimers=new Map,this.listeners=new Map,this.targetEnv=null,this.idempotencyKeysSeen=new Set,this.testUserIdentified=!1,this.cspIssueReported=!1,this.uiDisabled=!1,this.audio=null,this.audioReady=!1,this.pageTrackingDisabled=!1,this.onBuilderMessage=e=>(this.handleBuilderMessage(e),!1),this.handleBuilderMessage=async e=>{Je(`builder ${e.kind} message received`,e);const t="idempotencyKey"in e&&"string"==typeof e.idempotencyKey?e.idempotencyKey:null;if(t&&this.idempotencyKeysSeen.has(t))return;const s=()=>{t&&this.idempotencyKeysSeen.add(t)};switch(e.kind){case"userflow:selectElement":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:selectElementAck",idempotencyKey:e.idempotencyKey}),void this.setSessionStorageState((t=>({...t,activeApp:"elementSelection",elementSelection:{mode:"select",elementType:e.elementType}})));case"userflow:selectElementCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,elementSelection:null})));case"userflow:startFlowWithToken":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:startFlowWithTokenAck",idempotencyKey:e.idempotencyKey}),c.setItem("previewFlowId",e.flowId),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.onceIdentified((()=>{if(this.startFlowWithToken(e.token),e.isResourceCenter){const t=()=>{const s=this.resourceCenterSession;s&&s.draftMode&&s.flow.id===e.flowId&&(this.openResourceCenter(),this.off("resourceCenterChanged",t))};this.on("resourceCenterChanged",t),t()}}));case"userflow:testTracker":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:testTrackerAck",idempotencyKey:e.idempotencyKey}),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.setSessionStorageState((t=>({...t,activeApp:"trackerTesting",trackerTesting:{trackerName:e.trackerName,token:e.token,events:0}})));case"userflow:testTrackerCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,trackerTesting:null})))}},this.onUrlChange=()=>{this.externalId&&(window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=window.setTimeout((()=>this.flushUrlChange()),50))},this.onUserActivity=()=>this.ensureConnected(),this.remountIfNecessary=()=>{this.ui?.container&&!document.contains(this.ui.container)&&(Je("remounting UI because container was missing"),this.remount())},Je("constructor, build=1002918"),g(this.onUrlChange),this.setTargetEnv(new C),this.checkTestUserAtBoot(),this.toggleUI();for(const e of tt)document.addEventListener(e,this.remountIfNecessary)}get socketStatus(){return this._socketStatus}destroy(){Je("destroy"),this.reset(),p(this.onUrlChange),this.destroyTargetEnv();for(const e of tt)document.removeEventListener(e,this.remountIfNecessary)}setTargetEnv(e){this.destroyTargetEnv(),this.targetEnv=e,e.onBuilderMessage(this.onBuilderMessage)}destroyTargetEnv(){this.targetEnv&&(this.targetEnv.destroy(),this.targetEnv=null)}getTargetEnv(){if(!this.targetEnv)throw new o("Userflow.js: Cannot call getTargetEnv when protocol is not set");return this.targetEnv}setSessionStorageState(e){const t=e(this.getSessionStorageState());c.setItem("userflowClientState",JSON.stringify(t)),this.sessionStorageState=t,this.toggleUI()}getSessionStorageState(){let e=this.sessionStorageState;if(!e){const s=c.getItem("userflowClientState");if(s)try{e=JSON.parse(s)}catch(t){console.error("Userflow.js: Parse ElementSelectionState error:",t)}e||(e={testUser:null,activeApp:null,elementSelection:null,trackerTesting:null})}return e}checkTestUserAtBoot(){const e=this.getSessionStorageState().testUser;e&&(Je("checkTestUserAtBoot identifying test user"),this.identifyTestUser(e))}async identifyTestUser(e){this.setSessionStorageState((t=>({...t,testUser:e}))),this.reset(),this.init(e.clientToken),this.testUserIdentified=!0,this.externalId=e.id;const t=[this.identify(e.id,{name:e.name,email:e.email,signed_up_at:{set_once:(new Date).toISOString(),data_type:"datetime"}},{signature:e.signature})],{group:s}=e;s&&(this.groupId=s.id,t.push(this.group(s.id,{name:s.name},{signature:s.signature}))),await Promise.all(t)}resetTestUser(){this.setSessionStorageState((e=>({...e,testUser:null})))}init(e){if(Je("init",e),!e)throw new o("userflow.init() was called but missing Userflow.js Token");this.clientToken!==e&&(this.testUserIdentified?Je("init() ignoring new token since a test user has been identified"):(this.clientToken&&(Je("init() resetting due to new client token"),this.reset()),this.clientToken=e))}ensureInit(){if(!this.clientToken)throw new o("You must call userflow.init() first")}ensureIdentified(){if(this.ensureInit(),!this.externalId)throw new o("You must call userflow.identify() first");return this.externalId}ensureGroup(){if(this.ensureIdentified(),!this.groupId)throw new o("You must call userflow.group() first");return this.groupId}ensureConnected(){if(!this.clientToken||!this.externalId)return;if(this.debounceInactiveDisconnect(),this.socket)return;this._socketStatus="connecting",Je("connecting to socket");let t="e.userflow.com";"js.getuserflow.com"===new URL(st).hostname&&"e.userflow.com"===t&&(t="e.getuserflow.com");const s="wss://"+t+"/end-users/"+this.clientToken+"/socket";this.socket=new e(s,{reconnectAfterMs:e=>[100,500,1e3,5e3][e-1]||1e4,timeout:2e4}),this.socket.connect(),this.socket.onOpen((()=>{Je("socket opened")})),this.socket.onClose((()=>{this.emit("private:disconnect")})),this.socket.onError((e=>{console.log("Userflow.js socket error",e),this.reportCspIssue()})),this.channel=this.socket.channel(`end_users:${this.externalId}`,(()=>this.makeChannelJoinPayload())),this.channel.join().receive("ok",(e=>{this.logrocketAppId=e.logrocketAppId,this.featureFlags=new Set(e.featureFlags),Je("channel joined"),"connected"!==this._socketStatus&&(this._socketStatus="connected")})).receive("error",(e=>{["company_closed","invalid_client_token","invalid_user_external_id","incorrect_user_signature","rate_limit_exceeded","user_signature_required"].includes(e.code)?(console.error(`Userflow.js resetting due to: [${e.code}] ${e.message}`),this.reset(),this.clientToken=null):"invalid_protocol_version"===e.code?(console.error(`Userflow.js destroying due to: [${e.code}] ${e.message}`),this.destroy()):console.log("Userflow.js channel join error",e)})),this.channel.on("server_message",(e=>this.handleServerMessage(e))),this.channel.on("server_error",(e=>{console.log(`Userflow.js server error (${e.code}): ${e.message}`+(e.details&&e.details.length>0?"\nDetails:\n"+e.details.map((e=>(e.path?`${e.path}: `:"")+e.message)):""))}))}makeChannelJoinPayload(){const e=this.buildClientContext();this.clientContext=e;const t={protocolVersion:2,userflowClientBuild:"1002918",signature:this.signature,groupExternalId:this.groupId,groupSignature:this.groupSignature,flowSessionId:this.flowSession?.id||null,checklistSessionId:this.checklistSession?.id||null,resourceCenterSessionId:this.resourceCenterSession?.id||null,launchers:this.launcherSessions.map((e=>({flowId:e.flow.id}))),trackers:Array.from(this.trackers.values()).map((e=>({flowId:e.tracker.flowId}))),hasDraftSession:this.hasDraftSession(),clientConditions:Array.from(this.clientConditions.values()).map((e=>({conditionId:e.condition.id,isTrue:e.isTrue}))),previewFlowId:c.getItem("previewFlowId"),clientContext:e};return Je("channel join payload",t),t}disconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.socket&&this.socket.disconnect(),this._socketStatus="disconnected",this.socket=null,this.channel=null}debounceInactiveDisconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.debounceInactiveDisconnectTimeout=window.setTimeout((()=>{this.hasDraftSession()||this.assistantMessageInProgress?this.debounceInactiveDisconnect():(Je("disconnecting from socket due to inactivity"),this.disconnect())}),3e5)}hasDraftSession(){return!!this.flowSession?.draftMode||!!this.checklistSession?.draftMode||!!this.resourceCenterSession?.draftMode||this.launcherSessions.some((e=>e.draftMode))}async send(e,{batch:t,handlesRejection:s}={}){return this.inBatch&&["ToggleClientCondition","UpdateClientContext"].includes(e.kind)||this.checkPushRateLimit(),this.ensureConnected(),t&&!this.inBatch&&(this.inBatch=!0,this.sendRaw({kind:"BeginBatch"})),this.inBatch&&(window.clearTimeout(this.endBatchTimeout),this.endBatchTimeout=window.setTimeout((()=>{this.inBatch=!1,this.sendRaw({kind:"EndBatch"})}),50)),this.sendRaw(e,{handlesRejection:s})}async sendRaw(e,{handlesRejection:t}={}){return new Promise(((s,i)=>{if(!this.channel){const s=`Userflow.js: send() should not be called if channel is not set. Message kind=${e.kind}`;if(t)throw Error(s);return void console.log(s,"\nClient message:",e)}Je(`push ${e.kind} message`,e);const n=this.clientClock,r=()=>{this.serverClock=n,this.channel?.off("phx_error",a)},a=this.channel.on("phx_error",(s=>{r();const n=`Userflow.js send ${e.kind} got phx_error`;console.log(n,"\nClient message:",e,"\nError:",s),t&&i(new o(n))}));this.channel.push("client_message",e).receive("ok",(e=>{r(),s(e)})).receive("error",(t=>{r();const s=`Userflow.js error reply (${t.code}): ${t.message}`;console.log(s,"\nClient message:",e,"\nError:",t),i(new o(s,t.code,t.message))}))}))}checkPushRateLimit(){const e=Date.now();if(this.pushRateLimitMinuteExpires<e&&(this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=e+6e4),this.pushRateLimitMinute>=100)throw new o("This Userflow.js client has reached a maximum of 100 operations in the last 1 minute. This is usually due to one of the following:\n\n - Excessive calls to Userflow.js. Check if any of userflow.track(), userflow.identify(), userflow.updateUser() or similar are called repeatedly.\n - The URL changing too frequently. Look into https://userflow.com/docs/userflow-js#seturlfilter and filter out the changing part of the URL.\n - The user legitimately being very active, in which case you can just ignore this error.\n \n If in doubt, reach out to us at support@userflow.com.");this.pushRateLimitMinute++}handleServerMessage(e){Je(`received ${e.kind} message`,e);const{serverClock:t,flowSession:s,flowSessionClock:i,checklistSession:n,checklistSessionClock:o,resourceCenterSession:r}=this;switch(e.kind){case"CheckSessionsAck":case"ServerDebug":return;case"AddLauncher":{const{session:t}=e,s=this.launcherSessions.findIndex((e=>e.flow.id===t.flow.id));return this.launcherSessions=-1===s?[...this.launcherSessions,t]:[...this.launcherSessions.slice(0,s),t,...this.launcherSessions.slice(s+1)],void this.toggleUI()}case"AddTracker":return void this.addTracker(e.tracker);case"AssistantMessageEventWrapper":return void this.emit("private:assistantMessageEvent",e);case"CancelConditionWaitTimer":return window.clearTimeout(this.conditionWaitTimers.get(e.conditionId)),void this.conditionWaitTimers.delete(e.conditionId);case"ChecklistTaskCompleted":return void this.unackedTasks.add(e.taskCvid);case"ForceGoToStep":return i>t?void Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&this.emit("gotostep",{session:s,step:{id:e.stepId}}));case"RemoveLauncher":return void(this.removeLauncher(e.flowId)&&this.toggleUI());case"RemoveTracker":return void this.removeTracker(e.flowId);case"SetChecklistSession":return void(o<=t||n?.id===e.session.id?(this.setChecklistSession(e.session,t),this.toggleUI()):Je(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`));case"SetFlowSession":return void(i<=t||s?.id===e.session.id?(this.setFlowSession(e.session,t),this.toggleUI()):Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`));case"SetResourceCenterSession":return this.setResourceCenterSession(e.session),void this.toggleUI();case"StartConditionWaitTimer":if(!this.conditionWaitTimers.has(e.conditionId)){const t=window.setTimeout((()=>{this.conditionWaitTimers.delete(e.conditionId),this.send({kind:"FireConditionWaitTimer",conditionId:e.conditionId},{batch:!0})}),1e3*parseFloat(e.waitTime));this.conditionWaitTimers.set(e.conditionId,t)}return;case"TrackClientCondition":return void this.trackClientCondition(e.condition);case"UnsetChecklistSession":return o>t?void Je(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`):void(n?.id===e.sessionId&&(this.setChecklistSession(null,t),this.toggleUI()));case"UnsetFlowSession":return i>t?void Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&(this.setFlowSession(null,t),this.toggleUI()));case"UnsetResourceCenterSession":return void(r?.id===e.sessionId&&(this.setResourceCenterSession(null),this.toggleUI()));case"UntrackClientCondition":return void this.untrackClientCondition(e.conditionId);default:return void console.warn("Userflow.js: Received unknown message",e)}}async identify(e,t={},{signature:s}={}){if(Je("identify",e),this.ensureInit(),this.testUserIdentified&&e!==this.externalId)Je("identify() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.identify: First argument must be a non-empty string representing the user's ID in your database. Value received: ${JSON.stringify(e)}`);this.externalId&&e!==this.externalId&&(Je("identify resetting due to new externalId"),this.reset()),this.externalId=e,this.signature=s||null,this.observeUserActivity(),await Promise.all([this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(t)},{batch:!0}),this.onFirstIdentify()]),this.emit("private:identified")}}async identifyAnonymous(e={},s={}){const i="anonymousId";let n=a.getItem(i);n||(n="anon-"+t(),a.setItem(i,n)),await this.identify(n,e,s)}async updateUser(e={},t={}){Je("updateUser"),this.ensureIdentified(),await this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(e)},{batch:!0})}async group(e,t={},{signature:s,membership:i}={}){if(Je("group",e),this.ensureIdentified(),this.testUserIdentified&&e!==this.groupId)Je("group() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.group: First argument must be a non-empty string representing the group's ID in your database. Value received: ${JSON.stringify(e)}`);this.groupId=e,this.groupSignature=s||null,await this.send({kind:"UpsertGroup",groupExternalId:e,groupSignature:this.groupSignature,groupAttributes:this.normalizeAttributes(t),membershipAttributes:this.normalizeAttributes(i)},{batch:!0})}}async updateGroup(e={},t={}){Je("updateGroup");const s=this.ensureGroup();await this.send({kind:"UpsertGroup",groupExternalId:s,groupSignature:this.groupSignature,membershipAttributes:this.normalizeAttributes(t.membership),groupAttributes:this.normalizeAttributes(e)},{batch:!0})}normalizeAttributes(e){if(null==e)return{};if("object"!=typeof e)throw new o("Userflow: 'attributes' must be an object.");const t={};for(const s in e){if(!e.hasOwnProperty(s))continue;if("traits"===s){const i=e[s];Object.assign(t,this.extractLegacyTraits(i));continue}let i=e[s];if("string"==typeof i||"number"==typeof i||"boolean"==typeof i||null==i||Array.isArray(i))t[s]=this.normalizeAttributeLiteralOrList(s,i);else{if("object"!=typeof i||null==i)throw new o(`Userflow: Invalid value for '${s}' attribute.`);if("set"in i)t[s]={set:this.normalizeAttributeLiteralOrList(s,i.set),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("set_once"in i||"setOnce"in i)t[s]={setOnce:this.normalizeAttributeLiteralOrList(s,i.set_once??i.setOnce),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("add"in i){const e=i.add;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'add' value for '${s}' attribute. Must be a number or string.`);t[s]={add:e}}else if("subtract"in i){const e=i.subtract;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'subtract' value for '${s}' attribute. Must be a number or string.`);t[s]={subtract:e}}else if("append"in i)t[s]={append:this.normalizeAttributeLiteralOrList(s,i.append)};else if("prepend"in i)t[s]={prepend:this.normalizeAttributeLiteralOrList(s,i.prepend)};else{if(!("remove"in i))throw new o(`Userflow: Invalid value for '${s}' attribute.`);t[s]={remove:this.normalizeAttributeLiteralOrList(s,i.remove)}}}}return t}normalizeAttributeLiteralOrList(e,t){return Array.isArray(t)?t.map((t=>this.normalizeAttributeLiteral(e,t))):this.normalizeAttributeLiteral(e,t)}normalizeAttributeLiteral(e,t){if(null==t)return null;if("string"==typeof t||"number"==typeof t||"boolean"==typeof t)return t;throw new o(`Userflow: Invalid value for '${e}' attribute.`)}normalizeDataType(e,t){if(!t)return null;switch(t){case"string":return v.STRING;case"number":return v.NUMBER;case"boolean":return v.BOOLEAN;case"datetime":return v.DATETIME}throw new o(`Userflow: Invalid data_type for '${e}' attribute.`)}extractLegacyTraits(e){if(!e)return{};if(!Array.isArray(e)){const t=[];for(const s in e)e.hasOwnProperty(s)&&t.push({name:s,value:e[s]});e=t}return e.reduce(((e,{name:t,value:s,dataType:i})=>{if("string"!=typeof t||t.length>100||!t.match(/^[a-z0-9_]+$/))return this.warn("Userflow.identify: Invalid trait name (must be string, no more than 100 characters, and only consist of a-z, 0-9 and underscores). The trait will be ignored. Name was:",t),e;if("string"==typeof s);else if("boolean"==typeof s)i||(i="boolean"),s=s?"true":"false";else{if("number"!=typeof s)return this.warn(`userflow.identify: The value of trait '${t}' is invalid (must be a string, a boolean or a number). The trait will be ignored. Value was:`,s),e;i||(i=Number.isInteger(s)?"integer":"decimal"),s=String(s)}let n=null;if(i)switch(i){case"string":n=v.STRING;break;case"boolean":n=v.BOOLEAN;break;case"integer":case"decimal":n=v.NUMBER;break;case"datetime":n=v.DATETIME;break;default:return this.warn(`userflow.identify: The data type of trait '${t}' is invalid (must be a 'string', 'boolean', 'integer', 'decimal' or 'datetime'). The trait will be ignored. Data type was:`,i),e}return e[t]={set:s,dataType:n},e}),{})}async track(e,t={},{userOnly:s}={}){Je(`track '${e}'`,t),this.ensureIdentified(),await this.send({kind:"TrackEvent",userOnly:!!s,name:e,attributes:this.normalizeEventAttributes(t)},{batch:!0})}normalizeEventAttributes(e){const t=this.normalizeAttributes(e);for(const s in t){if(!t.hasOwnProperty(s))continue;const e=t[s];if(null!=e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Array.isArray(e)&&!("set"in e))throw new o(`Userflow: Invalid value for '${s}' attribute. Event attributes only support literal values, list values and 'set' changes.`)}return t}onFirstIdentify(){this.onFirstIdentifyRun||(this.onFirstIdentifyRun=!0,this.onFirstIdentifyTimeout=window.setTimeout((()=>{this.trackPageViewed(),this.firstIdentifyCallback?(this.firstIdentifyCallback(),this.firstIdentifyCallback=null):this.checkUrlForStartFlow()}),0))}onceIdentified(e){this.isIdentified()?e():this.firstIdentifyCallback=e}checkUrlForStartFlow(){const e=new URL(d()),t=e.searchParams.get("userflow")||e.searchParams.get("studio1_flow")||e.searchParams.get("studio1_walkthrough");t&&(Je(`url contained flow ${t}`),this.startFlow({flowId:t,startReason:L.LINK,batch:!0}),e.searchParams.delete("userflow"),e.searchParams.delete("studio1_flow"),e.searchParams.delete("studio1_walkthrough"),window.history.replaceState({},"",e.toString()),this.clientContext=this.buildClientContext(),this.pushUpdateClientContext())}flushUrlChange(){const e=this.buildClientContext();this.clientContext&&e.pageUrl===this.clientContext.pageUrl||(this.clientContext=e,this.pushUpdateClientContext(),this.trackPageViewed(),this.checkUrlForStartFlow())}async trackPageViewed(){this.pageTrackingDisabled||this.track("page_viewed",{})}buildClientContext(){return{pageUrl:ze(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}}pushUpdateClientContext(){this.send({kind:"UpdateClientContext",clientContext:this.clientContext},{batch:!0})}ackCompletedTask(e){this.unackedTasks.delete(e)}taskIsUnacked(e){return this.unackedTasks.has(e)}isIdentified(){return null!=this.externalId}on(e,t){let s=this.listeners.get(e);s||(s=new Set,this.listeners.set(e,s)),s.add(t)}off(e,t){const s=this.listeners.get(e);s&&s.delete(t)}emit(e,...t){const s=this.listeners.get(e);if(s){Array.from(s).forEach((e=>e(...t)))}}observeUserActivity(){document.addEventListener("mouseover",this.onUserActivity),document.addEventListener("pointerdown",this.onUserActivity),document.addEventListener("keydown",this.onUserActivity)}unobserveUserActivity(){document.removeEventListener("mouseover",this.onUserActivity),document.removeEventListener("pointerdown",this.onUserActivity),document.removeEventListener("keydown",this.onUserActivity)}reset(){Je("reset"),this.externalId=null,this.groupId=null,this.sessionStorageState=null,this.setFlowSession(null,0),this.setChecklistSession(null,0),this.setResourceCenterSession(null),this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.unackedTasks=new Set,this.onFirstIdentifyRun=!1,window.clearTimeout(this.onFirstIdentifyTimeout),this.onFirstIdentifyTimeout=void 0,this.clientContext=null,this.unobserveUserActivity(),window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=void 0,this.clientConditions.forEach(((e,t)=>{this.untrackClientCondition(t)})),this.firstIdentifyCallback=null,this.testUserIdentified=!1,a.removeItem("anonymousId"),this.unmountUI(),this.disconnect(),this.inBatch=!1,window.clearTimeout(this.endBatchTimeout),this.endBatchTimeout=void 0,this.clientClock=1,this.serverClock=1}async startFlow({flowId:e,stepCvid:t,startReason:s,once:i,batch:n,replaceCurrent:o}){if(this.ensureIdentified(),o&&this.flowSession&&this.endFlow(this.flowSession,{endReason:m.REPLACED,batch:!0}),Je(`startFlow ${e}`,{startReason:s}),this.checklistSession?.flow.id===e)return Je("startFlow matches current checklist, so showing it instead"),void this.showChecklist();const r={kind:"StartFlow",flowId:e,stepCvid:t,startReason:s,once:!!i};await this.send(r,{batch:n})}async startFlowWithToken(e){this.ensureIdentified(),Je("startFlowWithToken",{token:e}),await this.send({kind:"StartFlowWithToken",token:e},{batch:!0})}optimisticClockUIUpdate(e){this.clientClock++,e(),this.toggleUI()}async showChecklist(){this.resourceCenterEmbedsChecklist()?this.openResourceCenter():(this.unmarkExpandPending(),this.checklistSession&&!this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!0,this.toggleUI(),c.setItem(`checklistExpanded:${this.checklistSession.id}`,"1"),await this.send({kind:"ShowChecklist",sessionId:this.checklistSession.id},{batch:!0})))}async hideChecklist(){this.resourceCenterEmbedsChecklist()?this.closeResourceCenter():this.checklistSession&&this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!1,this.toggleUI(),c.removeItem(`checklistExpanded:${this.checklistSession.id}`),await this.send({kind:"HideChecklist",sessionId:this.checklistSession.id},{batch:!0}))}async unmarkExpandPending(){this.checklistSession&&this.checklistExpandPending&&(this.checklistExpandPending=!1,await this.send({kind:"UnmarkExpandPending",sessionId:this.checklistSession.id},{batch:!0}))}async openResourceCenter(){this.resourceCenterEmbedsChecklist()&&this.unmarkExpandPending(),this.resourceCenterSession&&!this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!0,this.toggleUI(),this.emit("resourceCenterChanged"),c.setItem(`resourceCenterOpen:${this.resourceCenterSession.id}`,"1"),await this.send({kind:"OpenResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}async closeResourceCenter(){this.resourceCenterSession&&this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!1,this.toggleUI(),this.emit("resourceCenterChanged"),c.removeItem(`resourceCenterOpen:${this.resourceCenterSession.id}`),await this.send({kind:"CloseResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}toggleResourceCenter(){this.resourceCenterOpen?this.closeResourceCenter():this.openResourceCenter()}setResourceCenterLauncherHidden(e){this.resourceCenterLauncherHidden=e,this.toggleUI()}getResourceCenterState(){if(!this.resourceCenterSession)return null;const e=this.resourceCenterEmbedsChecklist(),{checklistSession:t}=this;return{isOpen:this.resourceCenterOpen,hasChecklist:e,uncompletedChecklistTaskCount:e&&t?qe(t):0}}resourceCenterEmbedsChecklist(){const e=this.resourceCenterSession;return!!e&&!!e.version.resourceCenter?.blocks.some((e=>e.type===Ie.CHECKLIST))}async endFlow(e,{endReason:t,batch:s}){this.ensureIdentified(),this.optimisticClockUIUpdate((()=>{const{clientClock:t}=this;this.flowSession?.id===e.id&&this.setFlowSession(null,t),this.checklistSession?.id===e.id&&this.setChecklistSession(null,t),this.resourceCenterSession?.id===e.id&&this.setResourceCenterSession(null)}));const{flow:i}=e,n={id:i.id,type:i.type.toLowerCase()};i.type===_.CHECKLIST?this.emit("checklistEnded",{checklist:n,endReason:t}):i.type===_.FLOW&&this.emit("flowEnded",{flow:n,endReason:t});const o={kind:"EndFlow",sessionId:e.id,endReason:t};await this.send(o,{batch:s})}async goToStep(e,t){Je("goToStep",e.id,t.name||t.id),this.ensureIdentified();const s=this.send({kind:"GoToStep",sessionId:e.id,stepId:t.id});e.currentStep=t,this.emit("gotostep",{session:e,step:t}),await s}async endAllFlows(){Je("endAllFlows"),this.optimisticClockUIUpdate((()=>{const{clientClock:e}=this;this.setFlowSession(null,e),this.setChecklistSession(null,e)})),await this.send({kind:"EndAllFlows"})}async endChecklist(){Je("endChecklist");const e=this.checklistSession||this.flowSession;e?.flow.type===_.CHECKLIST&&this.endFlow(e,{endReason:m.USERFLOWJS})}setFlowSession(e,t=this.clientClock){const s=this.flowSession;this.flowSession=e,this.flowSessionClock=t,e&&!s&&(this.hideChecklist(),this.closeResourceCenter()),null==e&&this.originalActiveElement&&("function"==typeof this.originalActiveElement.focus&&this.originalActiveElement.focus(),this.originalActiveElement=void 0)}setChecklistSession(e,t=this.clientClock){const s=this.checklistSession;this.checklistSession=e,this.checklistSessionClock=t,null===e&&(this.checklistExpanded=!1,this.checklistExpandPending=!1),e&&e.id!==s?.id&&(this.checklistExpanded=!!c.getItem(`checklistExpanded:${e.id}`),e.expandPending&&(this.checklistExpandPending=!0)),this.emit("checklistChanged"),this.emit("resourceCenterChanged")}setResourceCenterSession(e){const t=this.resourceCenterSession;this.resourceCenterSession=e,null===e&&(this.resourceCenterOpen=!1),t&&t.id!==e?.id&&c.removeItem(`resourceCenterOpen:${t.id}`),e&&e.id!==t?.id&&(this.resourceCenterOpen=!!c.getItem(`resourceCenterOpen:${e.id}`)),this.emit("resourceCenterChanged")}launcherSeen(e){this.send({kind:"StartFlow",flowId:e,startReason:L.LAUNCHER_SEEN,once:!1})}activateLauncher(e){const t=this.activeLauncherFlowId&&this.launcherSessions.find((e=>e.flow.id===this.activeLauncherFlowId));t&&this.deactivateLauncher(t),this.activeLauncherFlowId=e.flow.id,this.toggleUI(),this.send({kind:"ActivateLauncher",flowId:e.flow.id})}deactivateLauncher(e){const{launcher:t}=e.version;e.flow.id===this.activeLauncherFlowId&&(t?.dismissOn===ye.DEACTIVATE?this.dismissLauncher(e,{endReason:m.LAUNCHER_DEACTIVATED}):(this.activeLauncherFlowId=null,this.toggleUI()))}dismissLauncher(e,{endReason:t}){const s=e.flow.id;this.removeLauncher(s),this.toggleUI(),this.send({kind:"DismissLauncher",flowId:s,endReason:t})}removeLauncher(e){const t=this.launcherSessions.findIndex((t=>t.flow.id===e));return-1!==t&&(this.launcherSessions=[...this.launcherSessions.slice(0,t),...this.launcherSessions.slice(t+1)],e===this.activeLauncherFlowId&&(this.activeLauncherFlowId=null),!0)}async toggleUI(){this.flowSession||!this.checklistExpandPending&&!this.checklistSession?.version.checklist?.tasks.some((e=>this.taskIsUnacked(e.cvid)))||this.showChecklist(),this.emit("uistatechange"),this.shouldBeMounted()?await this.mountUI():this.unmountUI()}shouldBeMounted(){if(this.uiDisabled)return!1;return!!this.getSessionStorageState().activeApp||!!this.flowSession||!!this.checklistSession&&(this.checklistExpanded||!!this.checklistSession?.version.checklist?.launcherEnabled)||!!this.resourceCenterSession&&(this.resourceCenterOpen||!this.resourceCenterLauncherHidden)||this.launcherSessions.length>0||this.notifications.length>0}async mountUI(){if(!this.ui){const e=await this.createUI();this.shouldBeMounted()&&!this.ui&&(Je("mount UI"),this.ui=e,this.ui.mount())}}unmountUI(){this.ui&&(Je("unmount UI"),this.ui.unmount(),this.ui=null)}remount(){this.unmountUI(),this.toggleUI()}async createUI(){try{const e=n((()=>import("./ui.js")),[new URL("ui.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString()]);this.resourceCenterSession&&Qe();const{RealUI:t}=await e;return new t(this)}catch(e){throw this.reportCspIssue(),e}}async trackClientCondition(e){if(this.clientConditions.has(e.id))return;Je("track client condition",e),this.clientConditions.set(e.id,{condition:e,isTrue:null});const{conditionTypes:t}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.u}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),s=t[e.type],i=this.clientConditions.get(e.id);i&&(i.untrack=s.track({sessionData:new et([]),condition:e,callback:t=>{i.isTrue!==t&&(Je("client condition truthiness changed",t,i.condition),i.isTrue=t,this.send({kind:"ToggleClientCondition",conditionId:e.id,isTrue:t},{batch:!0}))}}))}untrackClientCondition(e){const t=this.clientConditions.get(e);t&&(Je("untrack client condition",t.condition),t.untrack&&t.untrack(),this.clientConditions.delete(e))}async addTracker(e){let t=this.trackers.get(e.flowId);t?t.tracker=e:this.trackers.set(e.flowId,{tracker:e,isTrue:!1});const{conditionTypes:s}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.u}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),i=this.trackers.get(e.flowId);if(!i)return;const{tracker:o}=i,{condition:r}=o,a=s[r.type];i.untrack&&i.untrack(),i.untrack=a.track({sessionData:new et(o.data),condition:r,flipBackEvents:!0,callback:e=>{const t=i.isTrue;i.isTrue=e,!t&&e&&this.send({kind:"TrackTrackerEvent",token:o.token},{batch:!0})}}),this.emit("private:trackerStarted")}removeTracker(e){const t=this.trackers.get(e);t&&(t.untrack&&t.untrack(),this.trackers.delete(e),this.emit("private:trackerStopped"))}reportCspIssue(){const e=this.getSessionStorageState();!this.testUserIdentified&&!e.activeApp||this.cspIssueReported||(this.cspIssueReported=!0,Je("csp issue detected"),f(window,{kind:"userflow:crxCspIssueDetected"}))}getAudio(){return this.audio||(this.audio=new Audio),this.audio}playAudio(e){if(document.hidden)return;const t=this.getAudio();e&&(t.src=e);const s=t.play();this.audioReady=!0,s&&s.catch((e=>{e.name}))}pauseAudio(){const e=this.audio;e&&!e.paused&&e.pause()}async getStepSpeech(e,t){return(await this.send({kind:"GetStepSpeechV2",syntheticVoice:e,text:t})).url}featureFlagEnabled(e){return this.featureFlags.has(e)}showNotification(e,t,s){const i={id:++this.notificationIdCounter,label:e,message:t,type:s};this.notifications=[...this.notifications,i],this.toggleUI()}dismissNotification(e){this.notifications=this.notifications.filter((t=>t.id!==e)),this.toggleUI()}warn(...e){console.warn(...e)}}if(void 0===window.userflow||window.userflow._stubbed){const e=Object.assign(window.userflow||{},function(){const e=new it;return{_stubbed:!1,init(t){e.init(t)},identify:(t,s={},i={})=>e.identify(t,s,i),identifyAnonymous:(t={},s={})=>e.identifyAnonymous(t,s),isIdentified:()=>e.isIdentified(),updateUser:(t,s={})=>e.updateUser(t,s),group:(t,s={},i={})=>e.group(t,s,i),updateGroup:(t,s={})=>e.updateGroup(t,s),track:(t,s={},i={})=>e.track(t,s,i),start:(t,{once:s}={})=>e.startFlow({flowId:t,startReason:L.USERFLOWJS,once:s}),startFlow:e=>(console.warn("Userflow.js: userflow.startFlow() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),startWalk:e=>(console.warn("Userflow.js: userflow.startWalk() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),endAll:()=>e.endAllFlows(),endChecklist:()=>e.endChecklist(),endAllFlows:()=>window.userflow.endAll(),async endFlow(){console.warn("Userflow.js: userflow.endFlow() has been deprecated and no longer has any effect.")},async endWalk(){console.warn("Userflow.js: userflow.endWalk() has been deprecated and no longer has any effect.")},openResourceCenter(){e.openResourceCenter()},closeResourceCenter(){e.closeResourceCenter()},toggleResourceCenter(){e.toggleResourceCenter()},setResourceCenterLauncherHidden(t){e.setResourceCenterLauncherHidden(t)},getResourceCenterState:()=>e.getResourceCenterState(),setWalkPosition(){console.warn("Userflow.js: userflow.setWalkPosition() has been deprecated and no longer has any effect.")},reset(){e.reset()},remount(){e.remount()},on(t,s){e.on(t,s)},off(t,s){e.off(t,s)},setCustomInputSelector(e){console.warn("Userflow.js: userflow.setCustomInputSelector() has been deprecated. Use userflow.registerCustomInput() instead. See docs: https://userflow.com/docs/userflow-js"),e&&Ve.customInputs.push({cssSelector:e})},registerCustomInput(e,t){Ve.customInputs.push({cssSelector:e,getValue:t})},setCustomNavigate(e){Ve.customNavigate=e},setUrlFilter(e){Ve.urlFilter=e},setInferenceAttributeNames(e){Ve.inferenceAttributeNames=e},setInferenceAttributeFilter(e,t){Ve.inferenceAttributeFilters[e]=je(t)},setInferenceClassNameFilter(e){Ve.inferenceClassNameFilters=je(e)},setScrollPadding(e){Ve.scrollPadding=e},setCustomScrollIntoView(e){Ve.customScrollIntoView=e},prepareAudio(){e.playAudio(null)},setShadowDomEnabled(e){console.warn("Userflow.js: userflow.setShadowDomEnabled() has been deprecated. Please remove this call from your Userflow.js snippet. Shadow DOM is supported by default now.")},setPageTrackingDisabled(t){e.pageTrackingDisabled=t},setBaseZIndex(e){Ve.baseZIndex=e},_setTargetEnv(t){e.setTargetEnv(t)}}}());window.userflow=e,window.studio1=e,function(){const e=window.userflow,t=window.USERFLOWJS_QUEUE;if(delete window.USERFLOWJS_QUEUE,!t||0===t.length)return;Je(`processing ${t.length} items in the queue`);for(const[s,i,n]of t){if("function"!=typeof e[s]){console.error(`Userflow.js: Invalid method '${s}' in queue`);continue}const t=e[s](...n);i&&t&&"function"==typeof t.then&&t.then(i.resolve,i.reject)}Je("queue processed")}()}export{W as A,V as B,me as C,X as D,m as E,B as F,ne as G,ce as H,K as I,de as J,Le as K,Me as L,Q as M,ve as N,Be as O,_e as P,De as Q,Qe as R,L as S,tt as T,o as U,re as V,y as W,n as _,P as a,M as b,Ve as c,Je as d,D as e,H as f,ze as g,Ie as h,qe as i,se as j,ee as k,ue as l,Ae as m,_ as n,g as o,c as p,d as q,fe as r,l as s,Ke as t,p as u,we as v,ge as w,et as x,Y as y,a as z};export default window.userflow;
|