userflow.js-self-hosted 0.1.1003773 → 0.1.1003813

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/BannerApp.js ADDED
@@ -0,0 +1 @@
1
+ import{r as e}from"./vendor.react.js";import{G as t,E as s}from"./userflow.js";import{u as o,i as r}from"./client-context.js";import{o as n}from"./vendor.obj-str.js";import{u as a,a as l,D as i}from"./stylesheets.js";import{a as m}from"./vendor.fortawesome.pro-regular-svg-icons.js";import{S as d,b as c,R as u,B as f}from"./bubble-frame.styl.js";import{f as b,b as E}from"./flow-condition-types.js";import{w as j,f as p}from"./flow-host.styl.js";import{u as y}from"./use-selector-element-monitoring.js";import{r as g}from"./vendor.react-dom.js";import{u as v,F as w}from"./use-window-resize.js";import"./vendor.object-assign.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./vendor.i18next.js";import"./vendor.react-i18next.js";import"./vendor.babel.runtime.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./vendor.date-fns.js";import"./vendor.scheduler.js";const L=({session:L})=>{const h=o(),{version:S}=L,k=S.banner,T=a(S.theme),M=L.locale?L.locale.standardLocaleId:L.version.theme.languageId;e.useEffect((()=>{r.changeLanguage(M)}),[M]);const N=e.useMemo((()=>document.createElement("div")),[]),[R,A]=e.useState(!1),{loaded:C}=l(window,p,T),[_,x]=e.useState(!1),B=C&&_,[F,O]=e.useState(0),D=e.useCallback((()=>{x(!1),O((e=>e+1))}),[]),I=![t.BODY_FIRST,t.BODY_LAST].includes(k.embedMode),[$,Y]=e.useState(null),z=e.useCallback((({targetEl:e})=>{Y(e)}),[]),P=e.useCallback((()=>{I&&console.warn(`Userflow.js: Could not find embed element for banner "${L.flow.name||L.flow.id}"`),Y(null)}),[I,L.flow.name,L.flow.id]);y({selector:k.embedSelector,targetMoved:z,targetLost:P});const U=e.useCallback((()=>{N.parentElement?.removeChild(N),A(!1),D()}),[N,D]);e.useLayoutEffect((()=>{let e=null,s=null;if(I){if(!$)return void U();if(k.overlay||k.sticky){s=k.embedMode===t.ELEMENT_BEFORE||k.embedMode===t.ELEMENT_AFTER?$.parentElement:$;"static"===window.getComputedStyle(s).position&&(e=s.style.position,s.style.position="relative")}}switch(k.embedMode){case t.BODY_FIRST:document.body.insertAdjacentElement("afterbegin",N);break;case t.BODY_LAST:document.body.insertAdjacentElement("beforeend",N);break;case t.ELEMENT_FIRST:$.insertAdjacentElement("afterbegin",N);break;case t.ELEMENT_LAST:$.insertAdjacentElement("beforeend",N);break;case t.ELEMENT_BEFORE:$.insertAdjacentElement("beforebegin",N);break;case t.ELEMENT_AFTER:$.insertAdjacentElement("afterend",N)}return A(!0),D(),()=>{s&&null!=e&&(s.style.position=e)}}),[U,N,I,$,k.overlay,k.sticky,k.embedMode,D]),e.useLayoutEffect((()=>U),[U]);const W=n({"userflowjs-banner":!0,[`userflowjs-banner--animate-${String(k.animate)}`]:!0,[`userflowjs-banner--embed-mode-${k.embedMode}`]:!0,[`userflowjs-banner--sticky-${String(k.sticky)}`]:!0,[`userflowjs-banner--overlay-${k.overlay}`]:!0});e.useLayoutEffect((()=>{N.className=W||""}),[N,W]);const G=k.zIndex||j(0);e.useLayoutEffect((()=>{N.style.zIndex=null==G?"":String(G),N.style.position=B?"":"absolute",N.style.visibility=B?"":"hidden",N.style.marginTop=b(k.marginTop)||"",N.style.marginRight=b(k.marginRight)||"",N.style.marginBottom=b(k.marginBottom)||"",N.style.marginLeft=b(k.marginLeft)||""}),[N,G,B,k.marginTop,k.marginRight,k.marginBottom,k.marginLeft]);const[H,q]=e.useState(null),[J,K]=e.useState(0),Q=e.useCallback((()=>{K(H?.offsetHeight||0)}),[H]);return e.useLayoutEffect((()=>{if(!H||"function"!=typeof MutationObserver)return;const e=new MutationObserver((()=>{Q()}));return e.observe(H,{childList:!0,attributes:!0,subtree:!0}),()=>{e.disconnect()}}),[H,Q]),e.useLayoutEffect((()=>{Q()})),v(Q),e.useLayoutEffect((()=>{N.style.setProperty("--userflowjs-banner-height",b(J)||"")}),[N,J]),R?g.createPortal(e.createElement(d.Provider,{value:L},e.createElement(w,{key:F,className:"userflowjs-frame",style:{borderRadius:b(k.borderRadius)},stylesheet:c,theme:T,onStylesheetsLoad:x},e.createElement("div",{ref:q,className:n({"userflowjs-banner-root":!0,[`userflowjs-banner-root--content-layout-${k.contentLayout}`]:!0,"userflowjs-theme-root":!0}),dir:r.dir()},e.createElement("div",{className:"userflowjs-banner-start-spacer"}),e.createElement("div",{className:"userflowjs-banner-inner",style:{maxWidth:b(k.maxContentWidth)}},e.createElement("div",{className:"userflowjs-banner-content"},e.createElement(u,{doc:k.content,lookupAttribute:E(L.data)})),k.buttons.length>0&&e.createElement("div",{className:"userflowjs-banner-buttons"},k.buttons.map((t=>e.createElement(f,{key:t.id,button:t}))))),S.closeDisabled?e.createElement("div",{className:"userflowjs-banner-start-spacer"}):e.createElement("button",{"data-testid":"userflow-banner-dismiss",className:"userflowjs-banner-close",onClick:()=>h.endFlow(L,{endReason:s.USER_CLOSED})},e.createElement(i,{icon:m}))))),N):null};export default L;export{L as BannerApp};
package/BubbleToolbar.js CHANGED
@@ -1 +1 @@
1
- import{r as e}from"./vendor.react.js";import{c as t,b as n,i as r,d as l}from"./flow-condition-types.js";import{b as o,D as a}from"./stylesheets.js";import{o as i}from"./vendor.obj-str.js";import{c as s,s as u,q as c,m as d,r as m,S as b,E as p,v as f,U as h,w,d as g}from"./userflow.js";import{f as v}from"./vendor.fortawesome.pro-solid-svg-icons.js";import{u as E}from"./vendor.react-i18next.js";import{u as y}from"./client-context.js";import{k,l as _,d as x,a as j}from"./vendor.fortawesome.pro-regular-svg-icons.js";const N=e.createContext(null);function q(){const t=e.useContext(N);if(!t)throw new Error("useSession: Session was not set");return t}function S(n){const r=q(),[l,a]=e.useState(!1),i=o(r.data),s=function(t){const n=e.useRef(t),r=e.useRef(t);return t!==r.current&&JSON.stringify(t)!==JSON.stringify(r.current)&&(n.current=t),r.current=t,n.current}(n);return e.useLayoutEffect((()=>{if(s){return t[s.type].track({sessionData:i,condition:s,callback:e=>{a(e)}})}}),[i,s]),null!=s&&l}const T=({appearance:t,hidden:n,disabled:r,onMouseDown:l,onClick:o,text:a,active:s,children:u})=>e.createElement("button",{className:i({[me(t)]:!0,"userflowjs-bubble-button--hidden":!!n,"userflowjs-bubble-button--active":!!s}),onMouseDown:l,onClick:o,disabled:r},u||e.createElement("div",{className:"userflowjs-bubble-button-text",role:"presentation"},a));function C(e){const t=c();t!==new URL(e,t).toString()&&(s.customNavigate?s.customNavigate(e):window.setTimeout((()=>{u(e)}),0))}async function P(e,t,l){const{steps:o}=t.version;switch(l.type){case d.CLOSE_FLOW:switch(t.kind){case"launcher":await e.dismissLauncher(t,{endReason:p.ACTION});break;case"flow":case"checklist":await e.endFlow(t,{endReason:p.ACTION})}return;case d.EVAL_JS:try{const e=r(l.code||"",t.data);new Function('"use strict";\n'+e)()}catch(a){console.error(`Userflow.js: Evaluate JavaScript action failed.\n\nError:\n${a.stack||a.message||a}\n\nCode:\n${l.code}`)}return;case d.GO_TO_STEP:{if("flow"!==t.kind)return;const n=o.find((({crossVersionId:e})=>e===l.stepCvid));if(!n)throw new h("Action points to unknown step: "+l.stepCvid);return void(await e.goToStep(t,n))}case d.NAVIGATE:{if(!l.url)return void console.warn("Userflow.js: NAVIGATE action is missing url property");const e=D(l.url,{lookupAttribute:n(t.data)});return void(l.navigateTarget===m.NEW_TAB?window.open(e):C(e))}case d.SET_ATTRIBUTE:{let t;const n=l.attributeValue||"";switch(l.attributeOperation){case f.SET:t={set:n};break;case f.SET_ONCE:t={set_once:n};break;case f.ADD:t={add:n};break;case f.SUBTRACT:t={subtract:n};break;case f.APPEND:t={append:n};break;case f.PREPEND:t={prepend:n};break;case f.REMOVE:t={remove:n};break;case f.UNSET:t={set:null};break;default:return}const r=l.attributeFqn||"",o=r.split("/");return void(1===o.length?e.updateUser({[r]:t}):"group"===o[0]?e.updateGroup({[o[1]]:t}):"group_membership"===o[0]&&e.updateGroup({},{membership:{[o[1]]:t}}))}case d.SNOOZE:return void("flow"===t.kind&&l.timeValue&&l.timeUnit&&(e.endFlow(t,{endReason:p.SNOOZED,batch:!0}),t.draftMode?window.alert(`In preview mode, flows can't be snoozed.\n\nBut if this flow was running in published mode, the flow would now be snoozed for ${l.timeValue} ${l.timeUnit.toLowerCase()+(1===l.timeValue?"":"s")}.`):e.send({kind:"Snooze",flowId:t.flow.id,timeValue:l.timeValue,timeUnit:l.timeUnit},{batch:!0})));case d.START_FLOW:return"launcher"===t.kind&&e.deactivateLauncher(t),void(l.otherFlow?await e.startFlow({flowId:l.otherFlow.id,stepCvid:l.otherFlowStepCvid,startReason:t.draftMode?b.DRAFT:b.ACTION,replaceCurrent:!0}):console.warn("Userflow.js: START_FLOW action is missing other flow"))}}async function A(e,t,n){const r=[],l=[],o=[];for(const a of n)a.type===d.NAVIGATE?a.navigateTarget===m.NEW_TAB?r.push(a):o.push(a):l.push(a);for(const a of r)P(e,t,a);await Promise.all(l.map((n=>P(e,t,n))));for(const a of o)P(e,t,a)}const I=({button:t})=>{const n=y(),l=q(),o=S(t.disabledCondition),a=S(t.hiddenCondition);return e.createElement(T,{appearance:t.appearance,hidden:a,disabled:o,onClick:()=>A(n,l,t.actions),text:r(t.text,l.data)})},L=()=>e.createElement("svg",{viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg"},e.createElement("polygon",{className:"userflowjs-star-shape",fill:"#fff",points:"16 22.7785728 7.18322122 29.1352549 10.5042507 18.7856772 1.73415226 12.3647451 12.6034401 12.3250364 16 2 19.3965599 12.3250364 30.2658477 12.3647451 21.4957493 18.7856772 24.8167788 29.1352549"})),$=({type:t,required:n,placeholder:r,buttonText:l,options:o,otherOption:s,multipleSelection:u,shuffleOptions:c,labelLeft:d,labelCenter:m,labelRight:b,minValue:p,maxValue:f,onSubmit:h,inert:g})=>{const{t:y}=E(),k=e.useRef(null),[_,x]=e.useState(""),[j,N]=e.useState(new Set),[q,S]=e.useState(),[T,C]=e.useState(),[P,A]=e.useState(!1),[I,$]=e.useState(!1),[R,O]=e.useState(null),F=e.useMemo((()=>o&&(c?[...o].sort((()=>Math.random()-.5)):o)),[o,c]),U=e=>{if(!g&&h){if(n&&""===_&&[w.MULTILINE_TEXT,w.TEXT].includes(t))return O(y("question.requiredError")),void D();$(!0),O(null),h({...e,onCancel:()=>{$(!1)},onError:e=>{$(!1),O(e||"Sorry, something went wrong saving your answer. Please try again.")}})}},D=e.useCallback((()=>{!g&&k.current&&k.current.focus()}),[g]),[B,W]=e.useState(!1);e.useEffect((()=>{B&&(D(),W(!1))}),[D,B]);const V=e.createElement("div",{className:"userflowjs-bubble-buttons"},e.createElement("button",{className:"userflowjs-bubble-button userflowjs-bubble-button--primary",onClick:()=>U({answer:{kind:"text",value:_}}),tabIndex:g?-1:void 0,disabled:I},e.createElement("div",{className:"userflowjs-bubble-button-text",role:"presentation"},l||y("question.submit"))));let z=null,K=0;if(t===w.NPS)d=d||y("question.npsLabelLeft"),b=b||y("question.npsLabelRight"),z=[0,1,2,3,4,5,6,7,8,9,10],K=z.length;else if([w.SCALE,w.STARS].includes(t)){f=null!=f?f:5,z=[];for(let e=p=null!=p?p:1;e<=f;e++)z.push(e);K=z.length}else t===w.MULTIPLE_CHOICE&&(K=(F?F.length:0)+(s&&!P?1:0));const[J,G]=e.useState(-1),H=-1===J?-1:Math.min(J,K-1),X=e=>{if(!e.target.closest('[role="radio"], [role="checkbox"], [role="radiogroup"], [role="group"]'))return;let t=null;if("ArrowRight"===e.key||"ArrowDown"===e.key?t=1:"ArrowLeft"!==e.key&&"ArrowUp"!==e.key||(t=-1),null!=t){e.preventDefault();const n=e.currentTarget.querySelectorAll('[role="radio"], [role="checkbox"]');let r=H+t;r<0?r=n.length-1:r>n.length-1&&(r=0),G(r),n[r].focus()}};let Q,Z=null,Y=null;if(z&&(d||m||b)){const t=[];d&&t.push(z[0],d),b&&t.push(z[z.length-1],b),Z=e.createElement("div",{id:"a11y-scale-labels",className:"userflowjs-a11y-only"},t.join(", ")),Y=e.createElement("div",{id:"userflowjs-bubble-question-labels",className:"userflowjs-bubble-question__scale-labels","aria-hidden":"true"},e.createElement("div",{className:"userflowjs-bubble-question__scale-label"},d),m&&e.createElement("div",{className:"userflowjs-bubble-question__scale-label userflowjs-bubble-question__scale-label--center"},m),e.createElement("div",{className:"userflowjs-bubble-question__scale-label userflowjs-bubble-question__scale-label--right"},b))}switch(t){case w.MULTILINE_TEXT:Q=e.createElement(e.Fragment,null,e.createElement("textarea",{ref:k,className:"userflowjs-textarea userflowjs-bubble-question__textarea",value:_,onChange:e=>x(e.target.value),onKeyDown:e=>{(e.ctrlKey||e.metaKey)&&"Enter"===e.key&&U({answer:{kind:"text",value:_}})},placeholder:r||y("question.placeholder"),readOnly:g||I,tabIndex:g?-1:void 0,rows:3,"aria-required":n?"true":void 0,"aria-invalid":null!=R?"true":void 0}),V);break;case w.MULTIPLE_CHOICE:{const t=()=>{_&&U({answer:{kind:"text",value:_},animationPromise:M()})},n=(F?.length||0)+(s?1:0),o=Math.max(0,Math.min(n,null==p?1:p)),c=Math.max(0,Math.min(n,null==f?n:f)),d=()=>{const e=(F||[]).filter(((e,t)=>j.has(t))).map((e=>e.value));s&&P&&""!==_&&e.push(_),o!==c||e.length===o?e.length<o?O(y("question.multiple_selection_too_few",{count:o})):e.length>c?O(y("question.multiple_selection_too_many",{count:c})):U({answer:{kind:"list",values:e}}):O(y("question.multiple_selection_wrong",{count:o}))};Q=e.createElement(e.Fragment,null,u&&e.createElement("div",{className:i({"userflowjs-bubble-question__multiple-choice-hint":!0,"userflowjs-bubble-question__multiple-choice-hint--error":!!R})},y("question.multiple_selection_hint",{replace:{selected:j.size+(s&&P&&""!==_?1:0),range:o===c?o:`${o}-${c}`}}),R&&e.createElement(e.Fragment,null,". ",e.createElement("span",{role:"alert"},R))),e.createElement("div",{className:i({"userflowjs-bubble-question__multiple-choice":!0,"userflowjs-bubble-question__multiple-choice--single-selection":!u,"userflowjs-bubble-question__multiple-choice--multiple-selection":!!u}),role:u?"group":"radiogroup",tabIndex:g||-1!==H?-1:0,onKeyDown:X},F?.map((({value:t,label:n},r)=>e.createElement("button",{key:r,className:i({"userflowjs-bubble-question__multiple-choice-option":!0,"userflowjs-bubble-question__multiple-choice-option--selected":u?j.has(r):I&&!P&&_==t}),onClick:I?void 0:()=>{if(u){O(null);const e=new Set(j);j.has(r)?e.delete(r):e.add(r),N(e)}else A(!1),x(t),U({answer:{kind:"text",value:t},animationPromise:M()})},disabled:I,tabIndex:g||r!==H?-1:0,role:u?"checkbox":"radio","aria-label":n||t,"aria-checked":!P&&_==t},u?e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-checkbox"},e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-checkbox-inner"},e.createElement(a,{icon:v}))):e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-radio"},e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-radio-inner"})),e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-option-text","aria-hidden":"true"},n||t)))),s&&(P?e.createElement("div",{className:i({"userflowjs-bubble-question__multiple-choice-option":!0,"userflowjs-bubble-question__multiple-choice-option--other":!0,"userflowjs-bubble-question__multiple-choice-option--selected":u?""!=_:I})},u?e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-checkbox",onClick:()=>{x(""),A(!1)}},e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-checkbox-inner"},e.createElement(a,{icon:v}))):e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-radio"},e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-radio-inner"})),e.createElement("input",{ref:k,className:"userflowjs-bubble-question__multiple-choice-option-input",value:_,onChange:e=>x(e.target.value),onKeyDown:e=>{e.shiftKey||"Enter"!==e.key?"Escape"===e.key&&(e.stopPropagation(),x(""),A(!1)):u?d():t()},onBlur:()=>{""===_&&A(!1)},placeholder:r||y("question.placeholder"),readOnly:g||I,tabIndex:g?-1:void 0}),!u&&e.createElement("button",{"data-testid":"multiple-choice-other-submit",className:"userflowjs-bubble-question__multiple-choice-option-submit",onClick:()=>t(),disabled:I,"aria-label":y("question.submit")},e.createElement(a,{icon:v}))):e.createElement("button",{className:"userflowjs-bubble-question__multiple-choice-option",onClick:I?void 0:()=>{O(null),A(!0),W(!0)},disabled:I,tabIndex:g||F?.length!==H?-1:0,role:"radio","aria-label":y("question.other"),"aria-checked":"false"},u?e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-checkbox"},e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-checkbox-inner"},e.createElement(a,{icon:v}))):e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-radio"},e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-radio-inner"})),e.createElement("div",{className:"userflowjs-bubble-question__multiple-choice-option-text","aria-hidden":"true"},y("question.other"))))),u&&e.createElement("div",{className:"userflowjs-bubble-buttons"},e.createElement("button",{className:"userflowjs-bubble-button userflowjs-bubble-button--primary",onClick:d,tabIndex:g?-1:void 0,disabled:I},e.createElement("div",{className:"userflowjs-bubble-button-text",role:"presentation"},l||y("question.submit")))));break}case w.NPS:case w.SCALE:Q=e.createElement(e.Fragment,null,Z,e.createElement("div",{className:"userflowjs-bubble-question__scale-options",role:"radiogroup",tabIndex:g||-1!==H?-1:0,onKeyDown:X},z?.map(((t,n)=>e.createElement("button",{className:i({"userflowjs-bubble-question__scale-option":!0,"userflowjs-bubble-question__scale-option--selected":I&&q==t}),key:t,tabIndex:g||n!==H?-1:0,onClick:()=>{S(t),U({answer:{kind:"number",value:t},animationPromise:M()})},disabled:I,role:"radio","aria-checked":q==t},t)))),Y);break;case w.STARS:Q=e.createElement("div",{className:"userflowjs-bubble-question__stars-wrapper"},Z,e.createElement("div",{className:"userflowjs-bubble-question__stars",role:"radiogroup",tabIndex:g||-1!==H?-1:0,onKeyDown:X},z?.map(((t,n)=>e.createElement("button",{className:i({"userflowjs-bubble-question__star":!0,"userflowjs-bubble-question__star--hovered":!I&&null!=T&&T>=t,"userflowjs-bubble-question__star--selected":I&&null!=q&&q>=t,"userflowjs-bubble-question__star--not-selected":I&&null!=q&&q<t}),key:t,tabIndex:g||n!==H?-1:0,onClick:()=>{S(t),U({answer:{kind:"number",value:t},animationPromise:M()})},onMouseOver:()=>C(t),onMouseLeave:()=>C(null),disabled:I,role:"radio","aria-checked":q==t,"aria-label":String(t)},e.createElement("div",{className:"userflowjs-bubble-question__star-icon","aria-hidden":"true"},e.createElement(L,null)),e.createElement("div",{className:"userflowjs-bubble-question__star-value","aria-hidden":"true"},t))))),Y);break;case w.TEXT:Q=e.createElement(e.Fragment,null,e.createElement("input",{ref:k,className:"userflowjs-text-input userflowjs-bubble-question__text-input",value:_,onChange:e=>x(e.target.value),onKeyDown:e=>{e.shiftKey||"Enter"!==e.key||U({answer:{kind:"text",value:_}})},placeholder:r||y("question.placeholder"),readOnly:g||I,tabIndex:g?-1:void 0,"aria-required":n?"true":void 0,"aria-invalid":null!=R?"true":void 0}),V)}return e.createElement("div",{className:"userflowjs-bubble-question",style:{pointerEvents:g?"none":void 0}},R&&!(t===w.MULTIPLE_CHOICE&&u)&&e.createElement("div",{className:"userflowjs-bubble-question__error",role:"alert"},R),Q)};function M(){return new Promise((e=>window.setTimeout(e,250)))}const R=({question:t})=>{const n=y(),r=function(){const e=q();if("flow"!==e.kind)throw new Error("useFlowSession: Wrong session kind");return e}();return e.createElement($,{type:t.type,required:!!t.required,placeholder:t.placeholder||"",buttonText:t.buttonText||"",options:t.options,otherOption:t.otherOption,multipleSelection:t.multipleSelection,shuffleOptions:t.shuffleOptions,labelLeft:t.labelLeft||"",labelCenter:t.labelCenter||"",labelRight:t.labelRight||"",minValue:t.minValue,maxValue:t.maxValue,onSubmit:async e=>{g("answerQuestion",r.id,t.cvid,e);const{answer:l}=e;try{await Promise.all([await n.send({kind:"AnswerQuestion",sessionId:r.id,questionName:t.name,questionCvid:t.cvid,textAnswer:"text"==l.kind?l.value:null,numberAnswer:"number"==l.kind?String(l.value):null,listAnswer:"list"==l.kind?l.values:null}),e.animationPromise])}catch(a){return console.log("Userflow.js: Error when answering question:",a),void e.onError()}const{bindAttributeFqn:o}=t;if(o&&n.flowSession?.id===r.id){let e;switch(l.kind){case"text":e={name:o,value:l.value};break;case"number":e={name:o,value:String(l.value)};break;case"list":e={name:o,value:l.values}}n.optimisticClockUIUpdate((()=>{n.setFlowSession({...r,data:[...r.data.filter((e=>e.name!==o)),e]})}))}A(n,r,t.actions)}})},O=({text:t})=>{if(!t)return null;const n=t.split(/\n/);return 1===n.length?e.createElement(e.Fragment,null,n[0]):e.createElement(e.Fragment,null,n.map(((t,n)=>e.createElement(e.Fragment,{key:n},n>0&&e.createElement("br",null),t))))};function F(e=""){return{type:"paragraph",children:[{text:e}]}}function U(e){if(e){let n;try{n=JSON.parse(e)}catch(t){throw new Error("Could not JSON.parse rich content doc: "+e)}if("rich2"===n.type)return n;throw new Error("Could not recognize rich content doc: "+e)}return function(e=""){return{type:"rich2",children:[F(e)]}}()}function D(e,{lookupAttribute:t}){if(!e)return"";"string"==typeof e&&(e=function(e){if(e){let n;try{n=JSON.parse(e)}catch(t){throw new Error("Could not JSON.parse plaintext doc: "+e)}if("plaintext2"===n.type)return n;throw new Error("Could not recognize plaintext doc: "+e)}return function(e=""){return{type:"plaintext2",children:[{type:"plaintext",children:[{text:e}]}]}}()}(e));const n=[];function r(e){e&&e.forEach((e=>e&&function(e){if(se(e))e.text&&n.push(e.text);else switch(e.type){case"attribute":{const r=oe(e,t);r&&n.push(r);break}default:r(e.children)}}(e)))}return r(e.children),n.join("")}function B(e){let t=!0;if(!e)return!0;"string"==typeof e&&(e=U(e));const n=new Set(["attribute","button","image","question","video"]);return ue(e,(e=>{se(e)?""!==e.text&&(t=!1):"type"in e&&n.has(e.type)&&(t=!1)})),t}const W=e.memo((({doc:t,...n})=>t?("string"==typeof t&&(t=U(t)),e.createElement(V,{parent:t,...n})):null)),V=({parent:t,...n})=>e.createElement(e.Fragment,null,t.children.map(((r,l)=>se(r)?e.createElement(z,{key:l,node:r}):e.createElement(J,{key:l,node:r,parent:t,...n})))),z=({node:t})=>t.text?e.createElement(K,{node:t},e.createElement(O,{text:t.text})):null,K=({node:t,children:n})=>(t.color&&"string"==typeof t.color&&(n=e.createElement("span",{style:{color:t.color}},n)),t.bold&&(n=e.createElement("b",null,n)),t.italic&&(n=e.createElement("i",null,n)),t.underline&&(n=e.createElement("u",null,n)),t.strikeThrough&&(n=e.createElement("s",null,n)),t.code&&(n=e.createElement("code",null,n)),t.sup&&(n=e.createElement("sup",null,n)),n),J=({node:t,parent:n,...r})=>{const{lookupAttribute:l}=r,o=e.createElement(V,{parent:t,...r});switch(t.type){case"attribute":return e.createElement(G,{node:t,...r});case"button":return e.createElement(H,{node:t,...r});case"button-group":return e.createElement("div",{className:"userflowjs-bubble-buttons"},o);case"column":return e.createElement("div",{style:re(t,n)},o);case"column-group":return e.createElement("div",{className:"p-like",style:ne(t)},o);case"container":return e.createElement("div",{className:"p-like"+(t.className?` ${t.className}`:""),style:le(t)},o);case"image":return e.createElement(Q,{node:t,...r});case"link":return e.createElement("a",{href:D(t.href,{lookupAttribute:l}),target:"same"===t.target?"_top":"_blank",rel:"noopener noreferrer"},o);case"paragraph":return e.createElement("p",{className:ee(t)},o);case"heading1":return e.createElement("h1",{className:ee(t)},o);case"heading2":return e.createElement("h2",{className:ee(t)},o);case"question":return e.createElement(X,{node:t,...r});case"quote":return e.createElement("blockquote",null,o);case"code-block":return e.createElement("pre",null,e.createElement("code",null,o));case"ordered-list":return e.createElement("ol",null,o);case"unordered-list":return e.createElement("ul",null,o);case"list-item":return e.createElement("li",null,o);case"video":return e.createElement(Z,{node:t,...r});default:return e.createElement("div",null,o)}},G=({node:t,lookupAttribute:n})=>{let r=oe(t,n);return e.createElement(K,{node:t},r)},H=({node:t,buttons:n})=>{const r=n?.find((e=>e.cvid===t.cvid));return r?e.createElement(I,{key:r.id,button:r}):null},X=({node:t,questions:n})=>{const r=n?.find((e=>e.cvid===t.cvid));return r?e.createElement(R,{key:r.id,question:r}):null},Q=({node:t,lookupAttribute:n})=>{const{src:r,widthMode:o,displayWidth:a,width:i,height:s,marginTop:u,marginRight:c,marginBottom:d,marginLeft:m,align:b,hasLink:p,href:f}=t;if("string"!=typeof r||!r)return null;const{wrapperStyle:h,blockStyle:w}=te({widthMode:o,displayWidth:a,width:i,height:s,marginTop:u,marginRight:c,marginBottom:d,marginLeft:m,align:b});let g=e.createElement("img",{src:l(r,(e=>encodeURIComponent(n(e)||""))),style:{...w,objectFit:"contain"}});return p&&f&&(g=e.createElement("a",{href:D(f,{lookupAttribute:n}),target:"same"===t.target?"_top":"_blank",rel:"noopener noreferrer",style:w},g)),e.createElement("div",{className:"p-like"},e.createElement("div",{style:h},g))},Z=({node:t,lookupAttribute:n})=>{const{url:r,widthMode:l,displayWidth:o,width:a,height:i,marginTop:s,marginRight:u,marginBottom:c,marginLeft:d,align:m}=t;if("string"!=typeof r||!r)return null;const{wrapperStyle:b,blockStyle:p}=te({widthMode:l,displayWidth:o,width:a,height:i,marginTop:s,marginRight:u,marginBottom:c,marginLeft:d,align:m});return e.createElement("div",{className:"p-like"},e.createElement("div",{style:b},e.createElement("div",{style:p},e.createElement(Y,{element:t,noFocus:!0,lookupAttribute:n}))))},Y=({element:{embedType:t,url:n,src:r,autoPlay:o,controls:a,loop:i,muted:s},noFocus:u,forceMuted:c,lookupAttribute:d})=>{if(!n)return null;const m={width:"100%",height:"100%",frameBorder:"0",allow:"accelerometer; autoplay; fullscreen; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,allowtransparency:"true",mozallowfullscreen:"true",webkitallowfullscreen:"true",oallowfullscreen:"true",msallowfullscreen:"true",style:{display:"block"},tabIndex:u?-1:void 0};if("video"===t)return e.createElement("video",{key:n+";"+String(o)+";"+String(a)+";"+String(i)+";"+String(s),src:n,style:{width:"100%",height:"100%",display:"block"},autoPlay:!!o,controls:!1!==a,loop:i,muted:c||s});if(r){let t;try{t=new URL(r)}catch(w){return null}return c&&(t.searchParams.has("autoplay")||t.searchParams.has("autoPlay"))&&(t.searchParams.set("mute","1"),t.searchParams.set("muted","1"),t.searchParams.set("volume","0")),e.createElement("iframe",{src:t.toString(),...m})}let b=function(e,{iframeFallback:t}={}){let n;try{n=new URL(e)}catch(w){return{kind:"invalid"}}const{hostname:r,pathname:l,searchParams:o}=n;if(r.match(/^(www\.)?(use)?loom\.com$/)){const e=l.match(/^\/share\/([a-z0-9]+)$/i);if(e){const[,t]=e;return{kind:"ok",videoProvider:"loom",videoId:t,searchParams:o}}}if(e.startsWith("raw:")){return{kind:"ok",videoProvider:"raw",videoId:e.replace(/^raw:/,""),searchParams:o}}if(e.startsWith("iframe:")){return{kind:"ok",videoProvider:"iframe",videoId:e.replace(/^iframe:/,""),searchParams:o}}if(["youtube.com","www.youtube.com"].includes(r)){const e=o.get("v");if(e)return o.delete("v"),{kind:"ok",videoProvider:"youtube",videoId:e,searchParams:o}}if("youtu.be"===r){const e=l.match(/^\/([^/]+)$/);if(e){const[,t]=e;return{kind:"ok",videoProvider:"youtube",videoId:t,searchParams:o}}}if("vimeo.com"===r){const e=l.match(/^\/(\d+)$/);if(e){const[,t]=e;return{kind:"ok",videoProvider:"vimeo",videoId:t,searchParams:o}}}if("player.vimeo.com"===r){const e=l.match(/^\/video\/([^/]+)$/);if(e){const[,t]=e;return{kind:"ok",videoProvider:"vimeo",videoId:t,searchParams:o}}}if(r.match(/^[^.]+\.wistia.com$/)){const e=l.match(/^\/medias\/([^/]+)$/);if(e){const[,t]=e;return{kind:"ok",videoProvider:"wistia",videoId:t,searchParams:o}}}return t?{kind:"ok",videoProvider:"iframe",videoId:e,searchParams:o}:{kind:"invalid"}}(n,{iframeFallback:!0});if("invalid"===b.kind)return null;const{videoProvider:p,videoId:f,searchParams:h}=b;switch(o=o||h.has("autoplay")||h.has("autoPlay"),p){case"iframe":return e.createElement("iframe",{src:l(f,(e=>encodeURIComponent(d(e)||""))),scrolling:h.get("scrolling")||void 0,...m});case"loom":return e.createElement("iframe",{src:`https://www.loom.com/embed/${f}?${h.toString()}`,...m});case"raw":return e.createElement("video",{src:f,controls:!0,style:{width:"100%",height:"100%",display:"block"},autoPlay:h.has("autoplay"),muted:c||h.has("muted")});case"youtube":return c&&o&&h.set("mute","1"),e.createElement("iframe",{src:`https://www.youtube.com/embed/${f}?${h.toString()}`,...m});case"vimeo":return c&&o&&h.set("muted","1"),e.createElement("iframe",{src:`https://player.vimeo.com/video/${f}?${h.toString()}`,...m});case"wistia":return h.set("videoFoam","true"),c&&o&&h.set("volume","0"),e.createElement(e.Fragment,null,e.createElement("iframe",{src:`https://fast.wistia.net/embed/iframe/${f}?${h.toString()}`,...m}))}};function ee(e){return"right"===e.align?"userflowjs-text-align-end":"center"===e.align?"userflowjs-text-align-center":"justify"===e.align?"userflowjs-text-align-justify":""}function te({widthMode:e,displayWidth:t,width:n,height:r,marginTop:l,marginRight:o,marginBottom:a,marginLeft:i,align:s}){const u={position:"relative"};"number"!=typeof t&&(t=100,e="percent"),"center"===s?(u.marginLeft="auto",u.marginRight="auto"):"right"===s&&(u.marginLeft="auto");let c=0;if(null!=l&&"number"==typeof l&&(u.marginTop=`${l}px`),null!=o&&"number"==typeof o&&(u.marginRight=`${o}px`,c+=o),null!=a&&"number"==typeof a&&(u.marginBottom=`${a}px`),null!=i&&"number"==typeof i&&(u.marginLeft=`${i}px`,c+=i),"number"!=typeof t||"number"!=typeof n||"number"!=typeof r)u.width="100px",u.height="100px";else if("px"===e){const e=10,l=Math.max(e,t);u.width=`${l}px`,u.height=l/(n/r)+"px"}else{const e=Math.max(0,Math.min(100,t));u.width=`calc(${e}% - ${c}px)`,u.height="0",u.paddingBottom=`calc((${e}% - ${c}px) / (${n} / ${r})`}return{wrapperStyle:u,blockStyle:{position:"absolute",top:"0",left:"0",display:"block",width:"100%",height:"100%"}}}function ne(e){return{display:"flex",alignItems:"stretch",marginRight:`-${null==e.spacing?16:e.spacing}px`}}function re(e,t){const n="fill"===e.widthMode||null==e.displayWidth;return{display:"flex",flexDirection:"column",justifyContent:e.justifyContent,width:n?void 0:"px"===e.widthMode?`${e.displayWidth||50}px`:"percent"===e.widthMode?`${e.displayWidth||50}%`:void 0,flex:n?"1 0 0":void 0,marginRight:`${null==t.spacing?16:t.spacing}px`,marginBottom:"0"}}function le(e){return{display:"flex",flexDirection:"column",justifyContent:e.justifyContent,width:"px"===e.widthMode&&null!=e.displayWidth?`${e.displayWidth}px`:"percent"===e.widthMode&&null!=e.displayWidth?`${e.displayWidth}%`:void 0,minHeight:"px"===e.heightMode?`${e.displayHeight||50}px`:void 0,flex:"fill"===e.heightMode?"1 0 0":void 0,marginTop:null!=e.marginTop?`${e.marginTop}px`:void 0,marginRight:null!=e.marginRight?`${e.marginRight}px`:"fill"!==e.widthMode&&"center"===e.align?"auto":void 0,marginBottom:null!=e.marginBottom?`${e.marginBottom}px`:void 0,marginLeft:null!=e.marginLeft?`${e.marginLeft}px`:"fill"===e.widthMode||"center"!==e.align&&"right"!==e.align?void 0:"auto"}}function oe(e,t){const n=e.attributeName;if("string"==typeof n){const r=t(n)||e.fallback;if("string"==typeof r)return r}return null}function ae(e){return Array.isArray(e.children)&&void 0===e.addMark}function ie(e,t,n="type"){return ae(e)&&e[n]===t}function se(e){return"string"==typeof e.text}function ue(e,t){function n(e){e&&e.forEach(((e,r)=>e&&function(e,r){t(e,r),ae(e)&&n(e.children)}(e,r)))}n(Array.isArray(e)?e:e.children)}const ce=e.memo((({doc:t,lookupAttribute:n})=>t?e.createElement(e.Fragment,null,D(t,{lookupAttribute:n})):null));function de(e,{buttons:t,questions:n}){const r=new Set,l=new Set;if(ue(e,(e=>{ie(e,"button")&&r.add(e.cvid),ie(e,"question")&&l.add(e.cvid)})),n){const t=n.filter((e=>!l.has(e.cvid)));t.length>0&&(e={...e,children:[...e.children,...t.map((e=>({type:"question",cvid:e.cvid,children:[{text:""}]})))]})}if(t){const n=t.filter((e=>!r.has(e.cvid)));n.length>0&&(e={...e,children:[...e.children,{type:"button-group",children:n.map((e=>({type:"button",cvid:e.cvid,children:[{text:""}]})))}]})}return e}function me(e){return"userflowjs-bubble-button "+("primary"===(e=e||"default")||"PRIMARY"===e?"userflowjs-bubble-button--primary":"default"===e||"DEFAULT"===e?"userflowjs-bubble-button--default":e)}var be=new URL("flow-host.css",import.meta.url).href,pe=new URL("bubble-frame.css",import.meta.url).href;const fe=({draftMode:t,muted:n,toggleMuted:r,close:l,minimize:o})=>{const{t:i}=E();return e.createElement("div",{className:"userflowjs-bubble-toolbar"},t&&e.createElement("div",{className:"userflowjs-bubble-draft"},"string"==typeof t?t:"Preview"),r&&e.createElement("button",{className:"userflowjs-bubble-toolbar-button",onClick:r,"aria-label":n?"Unmute":"Mute"},n?e.createElement(a,{icon:k}):e.createElement(a,{icon:_})),o&&e.createElement("button",{"data-testid":"minimize-button",className:"userflowjs-bubble-toolbar-button",onClick:o,"aria-label":"Minimize checklist"},e.createElement(a,{icon:x})),l&&e.createElement("button",{"data-testid":"close-button",className:"userflowjs-bubble-toolbar-button",onClick:l,"aria-label":i("menu.close")},e.createElement(a,{icon:j})))};export{fe as B,W as R,N as S,ce as a,pe as b,T as c,U as d,q as e,be as f,oe as g,A as h,se as i,de as m,C as n,B as r,D as s,S as u};
1
+ import{z as e,A as t,d as o,a}from"./vendor.fortawesome.pro-regular-svg-icons.js";import{r as s}from"./vendor.react.js";import{D as r}from"./stylesheets.js";import{u as l}from"./vendor.react-i18next.js";const n=({draftMode:n,muted:i,toggleMuted:c,close:m,minimize:b})=>{const{t:u}=l();return s.createElement("div",{className:"userflowjs-bubble-toolbar"},n&&s.createElement("div",{className:"userflowjs-bubble-draft"},"string"==typeof n?n:"Preview"),c&&s.createElement("button",{className:"userflowjs-bubble-toolbar-button",onClick:c,"aria-label":i?"Unmute":"Mute"},i?s.createElement(r,{icon:e}):s.createElement(r,{icon:t})),b&&s.createElement("button",{"data-testid":"minimize-button",className:"userflowjs-bubble-toolbar-button",onClick:b,"aria-label":"Minimize checklist"},s.createElement(r,{icon:o})),m&&s.createElement("button",{"data-testid":"close-button",className:"userflowjs-bubble-toolbar-button",onClick:m,"aria-label":u("menu.close")},s.createElement(r,{icon:a})))};export{n as B};
package/BuilderBar.js CHANGED
@@ -1 +1 @@
1
- import{r as e}from"./vendor.react.js";import{u as t,F as r,S as s}from"./logomark.js";import{o}from"./vendor.obj-str.js";import{f as a,a as n}from"./vendor.fortawesome.pro-light-svg-icons.js";import{z as l}from"./userflow.js";import{a as m,D as i}from"./stylesheets.js";var u=new URL("builder-ui-host.css",import.meta.url).href,c=new URL("builder-ui-frame.css",import.meta.url).href;const d=e.forwardRef((({onReadyChange:d,children:f,buttons:p},b)=>{const{loaded:h}=m(window,u),[v,E]=e.useState(!1),g=h&&v,y=e.useRef(!1);e.useEffect((()=>{g&&!y.current&&d&&(y.current=!0,d(!0))}),[g,d]);const j=e.useRef(null),[w,R]=e.useState(null),[k,N]=e.useState((()=>"top"===l.getItem("builderBarPos")?"top":"bottom")),S=e.useCallback((e=>{N(e),l.setItem("builderBarPos",e)}),[]),C=e.useRef(0),L=e.useCallback((()=>{const e=j.current;if(!e||!w||!g)return;const t=w.clientHeight;t!==C.current&&(C.current=t,e.style.setProperty("height",t+"px","important"))}),[g,w]);return e.useLayoutEffect((()=>{L()})),t(L),e.useImperativeHandle(b,(()=>({getFrame:()=>j.current,getRootEl:()=>w})),[w]),e.createElement(e.Fragment,null,e.createElement(r,{className:o({"userflowjs-builder-bar":!0,"userflowjs-builder-bar--top":"top"===k}),style:{visibility:g?void 0:"hidden",animation:g?void 0:"none"},elRef:j,stylesheet:c,onStylesheetsLoad:E},g&&e.createElement("div",{className:"root",ref:R},e.createElement("div",{className:"logomark"},e.createElement(s,null)),e.createElement("div",{className:"main"},f),e.createElement("div",{className:"buttons"},p,e.createElement("button",{key:k,className:"btn btn--square btn--plain-on-dark",onClick:()=>S("top"===k?"bottom":"top")},e.createElement(i,{icon:"top"===k?a:n,size:20}))))))}));export{d as B};
1
+ import{r as e}from"./vendor.react.js";import{u as t,F as r}from"./use-window-resize.js";import{S as s}from"./logomark.js";import{o}from"./vendor.obj-str.js";import{f as a,a as n}from"./vendor.fortawesome.pro-light-svg-icons.js";import{D as l}from"./userflow.js";import{a as i,D as m}from"./stylesheets.js";var u=new URL("builder-ui-host.css",import.meta.url).href,c=new URL("builder-ui-frame.css",import.meta.url).href;const d=e.forwardRef((({onReadyChange:d,children:f,buttons:p},b)=>{const{loaded:h}=i(window,u),[v,E]=e.useState(!1),g=h&&v,w=e.useRef(!1);e.useEffect((()=>{g&&!w.current&&d&&(w.current=!0,d(!0))}),[g,d]);const j=e.useRef(null),[y,R]=e.useState(null),[k,N]=e.useState((()=>"top"===l.getItem("builderBarPos")?"top":"bottom")),S=e.useCallback((e=>{N(e),l.setItem("builderBarPos",e)}),[]),C=e.useRef(0),L=e.useCallback((()=>{const e=j.current;if(!e||!y||!g)return;const t=y.clientHeight;t!==C.current&&(C.current=t,e.style.setProperty("height",t+"px","important"))}),[g,y]);return e.useLayoutEffect((()=>{L()})),t(L),e.useImperativeHandle(b,(()=>({getFrame:()=>j.current,getRootEl:()=>y})),[y]),e.createElement(e.Fragment,null,e.createElement(r,{className:o({"userflowjs-builder-bar":!0,"userflowjs-builder-bar--top":"top"===k}),style:{visibility:g?void 0:"hidden",animation:g?void 0:"none"},elRef:j,stylesheet:c,onStylesheetsLoad:E},g&&e.createElement("div",{className:"root",ref:R},e.createElement("div",{className:"logomark"},e.createElement(s,null)),e.createElement("div",{className:"main"},f),e.createElement("div",{className:"buttons"},p,e.createElement("button",{key:k,className:"btn btn--square btn--plain-on-dark",onClick:()=>S("top"===k?"bottom":"top")},e.createElement(m,{icon:"top"===k?a:n,size:20}))))))}));export{d as B};
package/ChecklistApp.js CHANGED
@@ -1 +1 @@
1
- import{r as e}from"./vendor.react.js";import{I as t,A as s,H as o,j as n}from"./userflow.js";import{F as i}from"./FlowChrome.js";import{i as r,u as c}from"./client-context.js";import{w as l,C as a,S as u}from"./z-index.js";import{f as m,B as d}from"./BubbleToolbar.js";import{a as h,D as p,u as f}from"./stylesheets.js";import{F as k}from"./logomark.js";import{o as b}from"./vendor.obj-str.js";import{z as v}from"./flow-condition-types.js";import{B as j}from"./vendor.fortawesome.pro-regular-svg-icons.js";import{u as E}from"./vendor.react-i18next.js";import{C as x}from"./ChecklistUI.js";import"./vendor.object-assign.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./vendor.i18next.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./vendor.date-fns.js";import"./vendor.babel.runtime.js";var g=new URL("checklist-launcher-frame.css",import.meta.url).href;const w=({position:s,theme:o,onClick:n,onVisibleChange:i,buttonRef:r,text:c,uncompletedCount:u})=>{const d=s||"absolute",{i18n:f}=E(),x=f.dir(),{loaded:w}=h(window,m,o),[y,L]=e.useState(!1),F=w&&y;e.useEffect((()=>{i&&i(F)}),[i,F]);const I=e.useRef(null),C=e.useRef(0),[A,T]=e.useState(null);e.useLayoutEffect((()=>{const e=I.current;if(!e||!A)return;const t=A.clientWidth;t!==C.current&&(C.current=t,e.style.setProperty("width",v(t)+"px","important"),e.style.setProperty("height",o.checklistLauncherHeight+"px","important"))}));const R=o.checklistLauncherPlacement,S=R===t.TOP_LEFT||R===t.TOP_RIGHT,B=R===t.TOP_LEFT||R===t.BOTTOM_LEFT,N={zIndex:"fixed"===d?null!=o.checklistZIndex?o.checklistZIndex:l(a):1,top:S?o.checklistLauncherY+"px":void 0,bottom:S?void 0:o.checklistLauncherY+"px",["ltr"===x?"left":"right"]:B?o.checklistLauncherX+"px":void 0,["ltr"===x?"right":"left"]:B?void 0:o.checklistLauncherX+"px",height:o.checklistLauncherHeight+"px",borderRadius:o.checklistLauncherBorderRadius+"px",position:F?void 0:"absolute",visibility:F?void 0:"hidden",animation:F?void 0:"none"};return e.createElement(k,{elRef:I,testId:"checklist-launcher-app",className:b({"userflowjs-checklist-launcher":!0,[`userflowjs-checklist-launcher--position-${d}`]:!0}),style:N,stylesheet:g,theme:o,onStylesheetsLoad:L},e.createElement("button",{ref:r,className:"userflowjs-checklist-launcher-frame-root",onClick:n},e.createElement("div",{ref:T,className:"userflowjs-checklist-launcher-content"},e.createElement("div",{className:"userflowjs-checklist-launcher-text"},c||"Get Started"),e.createElement("div",{"data-testid":"checklist-launcher-uncompleted-count",className:"userflowjs-checklist-launcher-uncompleted-count"},0===u?e.createElement(p,{icon:j}):u,e.createElement("div",{className:"userflowjs-a11y-only"},"uncompleted tasks")))))},y=({session:t,checklistExpanded:s})=>{const{version:o}=t,n=o.checklist,i=t.locale?t.locale.standardLocaleId:t.version.theme.languageId;e.useEffect((()=>{r.changeLanguage(i)}),[i]);const[c,l]=e.useState(!1);return s?e.createElement(L,{session:t,initialAutoFocus:c,setInitialAutoFocus:l}):n.launcherEnabled?e.createElement(F,{session:t,initialAutoFocus:c,setInitialAutoFocus:l}):null},L=({session:t,initialAutoFocus:n,setInitialAutoFocus:r})=>{const l=c(),[a,m]=e.useState(null),{version:h}=t,p=h.checklist,k=f(h.theme),b=e.useMemo((()=>({...k,avatarType:s.NONE,bubblePlacement:k.checklistPlacement,bubbleX:k.checklistX,bubbleY:k.checklistY,bubbleWidth:k.checklistWidth})),[k]);return e.useEffect((()=>{const e=a?.ownerDocument.defaultView;if(!e)return;const t=e=>{"Escape"===e.key&&(r(!0),l.hideChecklist())};return e.addEventListener("keydown",t),()=>e.removeEventListener("keydown",t)}),[a,r,l]),e.createElement(u,null,e.createElement(i,{company:t.flow.company,theme:b,position:"fixed",stepAppearance:o.BUBBLE,zIndex:k.checklistZIndex,autoHide3pEnabled:!0,backgroundImageUrl:p.backgroundAsset&&p.backgroundAsset.assetUrl,bubbleFrameRootRef:m},e.createElement("div",{role:"dialog","aria-label":"Checklist"},e.createElement(x,{session:t,initialAutoFocus:n}),e.createElement(d,{draftMode:t.draftMode,minimize:e=>{r(0===e.detail),l.hideChecklist()}}))))},F=({session:t,initialAutoFocus:s,setInitialAutoFocus:o})=>{const i=c(),[r,l]=e.useState(!1),[a,u]=e.useState(null),{version:m}=t,d=m.checklist,h=f(m.theme);return e.useEffect((()=>{r&&a&&s&&a.focus()}),[i,a,r,s]),e.createElement(w,{position:"fixed",theme:h,onClick:e=>{o(0===e.detail),i.showChecklist()},onVisibleChange:l,buttonRef:u,text:d.launcherText,uncompletedCount:n(t)})};export default y;export{y as ChecklistApp};
1
+ import{r as e}from"./vendor.react.js";import{K as t,A as s,J as o,j as i}from"./userflow.js";import{F as n}from"./FlowChrome.js";import{i as r,u as c}from"./client-context.js";import{f as l,w as a,C as u,S as m}from"./flow-host.styl.js";import{a as d,D as h,u as p}from"./stylesheets.js";import{F as f}from"./use-window-resize.js";import{o as k}from"./vendor.obj-str.js";import{z as b}from"./flow-condition-types.js";import{B as v}from"./vendor.fortawesome.pro-regular-svg-icons.js";import{u as j}from"./vendor.react-i18next.js";import{C as E}from"./ChecklistUI.js";import{B as x}from"./BubbleToolbar.js";import"./vendor.object-assign.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./bubble-frame.styl.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./logomark.js";import"./use-selector-element-monitoring.js";import"./vendor.i18next.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./vendor.date-fns.js";import"./vendor.babel.runtime.js";var w=new URL("checklist-launcher-frame.css",import.meta.url).href;const g=({position:s,theme:o,onClick:i,onVisibleChange:n,buttonRef:r,text:c,uncompletedCount:m})=>{const p=s||"absolute",{i18n:E}=j(),x=E.dir(),{loaded:g}=d(window,l,o),[y,L]=e.useState(!1),F=g&&y;e.useEffect((()=>{n&&n(F)}),[n,F]);const C=e.useRef(null),I=e.useRef(0),[A,T]=e.useState(null);e.useLayoutEffect((()=>{const e=C.current;if(!e||!A)return;const t=A.clientWidth;t!==I.current&&(I.current=t,e.style.setProperty("width",b(t)+"px","important"),e.style.setProperty("height",o.checklistLauncherHeight+"px","important"))}));const R=o.checklistLauncherPlacement,S=R===t.TOP_LEFT||R===t.TOP_RIGHT,B=R===t.TOP_LEFT||R===t.BOTTOM_LEFT,N={zIndex:"fixed"===p?null!=o.checklistZIndex?o.checklistZIndex:a(u):1,top:S?o.checklistLauncherY+"px":void 0,bottom:S?void 0:o.checklistLauncherY+"px",["ltr"===x?"left":"right"]:B?o.checklistLauncherX+"px":void 0,["ltr"===x?"right":"left"]:B?void 0:o.checklistLauncherX+"px",height:o.checklistLauncherHeight+"px",borderRadius:o.checklistLauncherBorderRadius+"px",position:F?void 0:"absolute",visibility:F?void 0:"hidden",animation:F?void 0:"none"};return e.createElement(f,{elRef:C,testId:"checklist-launcher-app",className:k({"userflowjs-checklist-launcher":!0,[`userflowjs-checklist-launcher--position-${p}`]:!0}),style:N,stylesheet:w,theme:o,onStylesheetsLoad:L},e.createElement("button",{ref:r,className:"userflowjs-checklist-launcher-frame-root",onClick:i},e.createElement("div",{ref:T,className:"userflowjs-checklist-launcher-content"},e.createElement("div",{className:"userflowjs-checklist-launcher-text"},c||"Get Started"),e.createElement("div",{"data-testid":"checklist-launcher-uncompleted-count",className:"userflowjs-checklist-launcher-uncompleted-count"},0===m?e.createElement(h,{icon:v}):m,e.createElement("div",{className:"userflowjs-a11y-only"},"uncompleted tasks")))))},y=({session:t,checklistExpanded:s})=>{const{version:o}=t,i=o.checklist,n=t.locale?t.locale.standardLocaleId:t.version.theme.languageId;e.useEffect((()=>{r.changeLanguage(n)}),[n]);const[c,l]=e.useState(!1);return s?e.createElement(L,{session:t,initialAutoFocus:c,setInitialAutoFocus:l}):i.launcherEnabled?e.createElement(F,{session:t,initialAutoFocus:c,setInitialAutoFocus:l}):null},L=({session:t,initialAutoFocus:i,setInitialAutoFocus:r})=>{const l=c(),[a,u]=e.useState(null),{version:d}=t,h=d.checklist,f=p(d.theme),k=e.useMemo((()=>({...f,avatarType:s.NONE,bubblePlacement:f.checklistPlacement,bubbleX:f.checklistX,bubbleY:f.checklistY,bubbleWidth:f.checklistWidth})),[f]);return e.useEffect((()=>{const e=a?.ownerDocument.defaultView;if(!e)return;const t=e=>{"Escape"===e.key&&(r(!0),l.hideChecklist())};return e.addEventListener("keydown",t),()=>e.removeEventListener("keydown",t)}),[a,r,l]),e.createElement(m,null,e.createElement(n,{company:t.flow.company,theme:k,position:"fixed",stepAppearance:o.BUBBLE,zIndex:f.checklistZIndex,autoHide3pEnabled:!0,backgroundImageUrl:h.backgroundAsset&&h.backgroundAsset.assetUrl,bubbleFrameRootRef:u},e.createElement("div",{role:"dialog","aria-label":"Checklist"},e.createElement(E,{session:t,initialAutoFocus:i}),e.createElement(x,{draftMode:t.draftMode,minimize:e=>{r(0===e.detail),l.hideChecklist()}}))))},F=({session:t,initialAutoFocus:s,setInitialAutoFocus:o})=>{const n=c(),[r,l]=e.useState(!1),[a,u]=e.useState(null),{version:m}=t,d=m.checklist,h=p(m.theme);return e.useEffect((()=>{r&&a&&s&&a.focus()}),[n,a,r,s]),e.createElement(g,{position:"fixed",theme:h,onClick:e=>{o(0===e.detail),n.showChecklist()},onVisibleChange:l,buttonRef:u,text:d.launcherText,uncompletedCount:i(t)})};export default y;export{y as ChecklistApp};
package/ChecklistUI.js CHANGED
@@ -1 +1 @@
1
- import{r as e}from"./vendor.react.js";import{E as t,z as s}from"./userflow.js";import{u as o}from"./client-context.js";import{u as l}from"./vendor.react-i18next.js";import{o as n}from"./vendor.obj-str.js";import{D as c}from"./stylesheets.js";import{f as a,l as r}from"./vendor.fortawesome.pro-solid-svg-icons.js";import{h as i,a as u,r as b,R as m}from"./BubbleToolbar.js";import{b as d}from"./flow-condition-types.js";import{b as f,A as k}from"./vendor.fortawesome.pro-regular-svg-icons.js";const p=e.forwardRef((({elProps:t,onClick:s,onCheckmarkClick:o,completed:l,disabled:i,name:u,text:b,active:m,htmlAttributes:d,children:f},k)=>{const p=e.useRef(l);return e.createElement("button",{...t,ref:k,"data-testid":"bubble-task",tabIndex:s?0:-1,className:n({"userflowjs-bubble-task":!0,"userflowjs-bubble-task--completed":!!l,"userflowjs-bubble-task--just-completed":!p.current&&!!l,"userflowjs-bubble-task--disabled":!l&&!!i,"userflowjs-bubble-task--clickable":!!s,"userflowjs-bubble-task--active":!!m}),onClick:s,...d},e.createElement("div",{className:"userflowjs-bubble-task__checkmark",onClick:o},l&&e.createElement(c,{icon:a})),e.createElement("div",{className:"userflowjs-bubble-task__content"},e.createElement("div",{className:"userflowjs-bubble-task__name"},u),e.createElement("div",{className:"userflowjs-bubble-task__text"},b)),e.createElement("div",{className:"userflowjs-bubble-task__arrow"},!l&&e.createElement("div",{className:"userflowjs-rtl-mirrored"},e.createElement(c,{icon:r}))),f)})),w=({task:t,previousTasksCompleted:s})=>{const l=o(),{session:n}=F(),c=n.version.checklist,[a,r]=e.useState((()=>l.taskIsUnacked(t.cvid)));e.useEffect((()=>{if(!a)return;const e=window.setTimeout((()=>r(!1)),500);return()=>window.clearTimeout(e)}),[a]);const b=n.taskCompletions.some((({taskCvid:e})=>e===t.cvid)),m=!a&&b;e.useEffect((()=>{m&&l.ackCompletedTask(t.cvid)}),[l,m,t.cvid]);const f=c.completeInOrder&&!s,k=f||0===t.actions.length&&m?void 0:()=>{l.send({kind:"ClickChecklistTask",sessionId:n.id,taskCvid:t.cvid},{batch:!0}),t.actions.length>0&&(m||!t.completesOnClick)&&l.hideChecklist(),i(l,n,t.actions)};return e.createElement(p,{onClick:k,name:e.createElement(u,{doc:t.name,lookupAttribute:d(n.data)}),text:e.createElement(u,{doc:t.text,lookupAttribute:d(n.data)}),completed:m,disabled:f})},E=({completedCount:t,taskCount:s})=>{const o=0===s?0:Math.min(100,Math.round(t/s*100));return e.createElement("div",{className:"userflowjs-bubble-checklist-progress"},e.createElement("div",{className:"userflowjs-bubble-checklist-progress-bg"},e.createElement("div",{className:"userflowjs-bubble-checklist-progress-text"},o,"%")),e.createElement("div",{className:"userflowjs-bubble-checklist-progress-fill",style:{width:`${o}%`}},e.createElement("div",{className:"userflowjs-bubble-checklist-progress-text"},o,"%")))},v=()=>{const{t:a}=l(),r=o(),i=F(),{session:u}=i,{version:p}=u,v=p.checklist,{dispatch:j}=y(),C=u.taskCompletions.length,h=v.tasks.length,N=C===h;let x=!0,S=v.tasks,g=[],R=i.currentSectionName,_=!1;if(v.sectionsEnabled){let e=null;const t=Array.from(v.tasks).sort(((e,t)=>e.sectionName.localeCompare(t.sectionName)));for(const s of t)s.sectionName!==e&&(g.push(s.sectionName),e=s.sectionName);R&&g.includes(R)||(R=g[0]),S=t.filter((e=>e.sectionName===R)),_=S.some((e=>{const t=u.taskCompletions.some((({taskCvid:t})=>t===e.cvid));return e.blocksNextSection&&!t}))}const T=null==R?-1:g.indexOf(R),q=e=>{const t=T+e;if(t>=0&&t<=g.length-1){const e=g[t];s.setItem("currentChecklistSectionName:"+u.id,e),j({kind:"setCurrentSection",sectionName:e})}};return e.createElement(e.Fragment,null,!b(v.content)&&e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement(m,{doc:v.content,lookupAttribute:d(u.data)})),e.createElement(E,{completedCount:C,taskCount:h}),v.sectionsEnabled&&e.createElement("div",{className:"userflowjs-bubble-section-name"},R||"First section"),e.createElement("div",{className:"userflowjs-bubble-tasks"},S.map((t=>{const s=x;return u.taskCompletions.some((({taskCvid:e})=>e===t.cvid))||(x=!1),e.createElement(w,{key:t.id,task:t,previousTasksCompleted:s})}))),v.sectionsEnabled&&e.createElement("div",{className:"userflowjs-bubble-section-buttons"},e.createElement("button",{className:"userflowjs-bubble-section-button",onClick:()=>q(-1),disabled:T<=0},e.createElement(c,{icon:f}),e.createElement("span",null,a("checklist.previousSection"))),e.createElement("button",{className:"userflowjs-bubble-section-button",onClick:()=>q(1),disabled:T>=g.length-1||_},e.createElement("span",null,a("checklist.nextSection")),e.createElement(c,{icon:k}))),!p.closeDisabled&&e.createElement("div",{className:"userflowjs-bubble-dismiss-row"},e.createElement("button",{className:n({"userflowjs-bubble-dismiss-button":!0,"userflowjs-bubble-dismiss-button--completed":N}),onClick:()=>N?r.endFlow(u,{endReason:t.USER_CLOSED}):j({kind:"showClose"})},a("checklistDismiss.button"))))},j=()=>{const{t:s}=l(),n=o(),{dispatch:c}=y(),{session:a}=F();return e.createElement("div",{role:"alert"},e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement("p",null,e.createElement("b",null,s("checklistDismiss.title")))),e.createElement("div",{className:"userflowjs-bubble-buttons"},e.createElement("button",{className:"userflowjs-bubble-button userflowjs-bubble-button--primary",onClick:()=>n.endFlow(a,{endReason:t.USER_CLOSED})},e.createElement("div",{className:"userflowjs-bubble-button-text",role:"presentation"},s("checklistDismiss.yes"))),e.createElement("button",{className:"userflowjs-bubble-button userflowjs-bubble-button--default",onClick:()=>c({kind:"showFlow"})},e.createElement("div",{className:"userflowjs-bubble-button-text",role:"presentation"},s("checklistDismiss.cancel")))))};function C(e){const t=e?.querySelector(".userflowjs-bubble-task--clickable:not(.userflowjs-bubble-task--completed)")||e?.querySelector(".userflowjs-bubble-task--clickable")||e?.querySelector('button:not([tabIndex="-1"])');t&&"function"==typeof t.focus&&t.focus()}const h=({session:t,initialAutoFocus:l})=>{const n=o(),c=e.useRef(null),[a,r]=e.useReducer(x,void 0,(()=>({...N,session:t,currentSectionName:s.getItem("currentChecklistSectionName:"+t.id),autoFocusRequested:!!l}))),{session:i,contentType:u}=a;e.useEffect((()=>{i!==t&&r({kind:"updateSession",session:t})}),[i,t]);const b=e.useMemo((()=>({dispatch:r})),[r]);return e.useEffect((()=>{if(!a.autoFocusRequested)return;const e=c.current;e&&C(e),r({kind:"autoFocused"})}),[n,a.autoFocusRequested]),e.createElement(S.Provider,{value:b},e.createElement(g.Provider,{value:a},e.createElement("div",{ref:c},"close"===u?e.createElement(j,null):e.createElement(v,null))))},N={contentType:"flow"};function x(e,t){switch(t.kind){case"updateSession":return{...e,session:t.session};case"showFlow":return{...e,contentType:"flow",autoFocusRequested:!0};case"showClose":return{...e,contentType:"close",autoFocusRequested:!0};case"setCurrentSection":return{...e,currentSectionName:t.sectionName};case"autoFocused":return{...e,autoFocusRequested:!1}}}const S=e.createContext(null),g=e.createContext(null);function y(){return e.useContext(S)}function F(){return e.useContext(g)}export{h as C,C as f};
1
+ import{r as e}from"./vendor.react.js";import{E as t,D as s}from"./userflow.js";import{u as o}from"./client-context.js";import{u as l}from"./vendor.react-i18next.js";import{o as n}from"./vendor.obj-str.js";import{D as c}from"./stylesheets.js";import{f as a,l as r}from"./vendor.fortawesome.pro-solid-svg-icons.js";import{h as i,a as u,r as b,R as m}from"./bubble-frame.styl.js";import{b as d}from"./flow-condition-types.js";import{b as f,y as k}from"./vendor.fortawesome.pro-regular-svg-icons.js";const p=e.forwardRef((({elProps:t,onClick:s,onCheckmarkClick:o,completed:l,disabled:i,name:u,text:b,active:m,htmlAttributes:d,children:f},k)=>{const p=e.useRef(l);return e.createElement("button",{...t,ref:k,"data-testid":"bubble-task",tabIndex:s?0:-1,className:n({"userflowjs-bubble-task":!0,"userflowjs-bubble-task--completed":!!l,"userflowjs-bubble-task--just-completed":!p.current&&!!l,"userflowjs-bubble-task--disabled":!l&&!!i,"userflowjs-bubble-task--clickable":!!s,"userflowjs-bubble-task--active":!!m}),onClick:s,...d},e.createElement("div",{className:"userflowjs-bubble-task__checkmark",onClick:o},l&&e.createElement(c,{icon:a})),e.createElement("div",{className:"userflowjs-bubble-task__content"},e.createElement("div",{className:"userflowjs-bubble-task__name"},u),e.createElement("div",{className:"userflowjs-bubble-task__text"},b)),e.createElement("div",{className:"userflowjs-bubble-task__arrow"},!l&&e.createElement("div",{className:"userflowjs-rtl-mirrored"},e.createElement(c,{icon:r}))),f)})),w=({task:t,previousTasksCompleted:s})=>{const l=o(),{session:n}=F(),c=n.version.checklist,[a,r]=e.useState((()=>l.taskIsUnacked(t.cvid)));e.useEffect((()=>{if(!a)return;const e=window.setTimeout((()=>r(!1)),500);return()=>window.clearTimeout(e)}),[a]);const b=n.taskCompletions.some((({taskCvid:e})=>e===t.cvid)),m=!a&&b;e.useEffect((()=>{m&&l.ackCompletedTask(t.cvid)}),[l,m,t.cvid]);const f=c.completeInOrder&&!s,k=f||0===t.actions.length&&m?void 0:()=>{l.send({kind:"ClickChecklistTask",sessionId:n.id,taskCvid:t.cvid},{batch:!0}),t.actions.length>0&&(m||!t.completesOnClick)&&l.hideChecklist(),i(l,n,t.actions)};return e.createElement(p,{onClick:k,name:e.createElement(u,{doc:t.name,lookupAttribute:d(n.data)}),text:e.createElement(u,{doc:t.text,lookupAttribute:d(n.data)}),completed:m,disabled:f})},E=({completedCount:t,taskCount:s})=>{const o=0===s?0:Math.min(100,Math.round(t/s*100));return e.createElement("div",{className:"userflowjs-bubble-checklist-progress"},e.createElement("div",{className:"userflowjs-bubble-checklist-progress-bg"},e.createElement("div",{className:"userflowjs-bubble-checklist-progress-text"},o,"%")),e.createElement("div",{className:"userflowjs-bubble-checklist-progress-fill",style:{width:`${o}%`}},e.createElement("div",{className:"userflowjs-bubble-checklist-progress-text"},o,"%")))},v=()=>{const{t:a}=l(),r=o(),i=F(),{session:u}=i,{version:p}=u,v=p.checklist,{dispatch:j}=y(),C=u.taskCompletions.length,h=v.tasks.length,N=C===h;let x=!0,S=v.tasks,g=[],R=i.currentSectionName,_=!1;if(v.sectionsEnabled){let e=null;const t=Array.from(v.tasks).sort(((e,t)=>e.sectionName.localeCompare(t.sectionName)));for(const s of t)s.sectionName!==e&&(g.push(s.sectionName),e=s.sectionName);R&&g.includes(R)||(R=g[0]),S=t.filter((e=>e.sectionName===R)),_=S.some((e=>{const t=u.taskCompletions.some((({taskCvid:t})=>t===e.cvid));return e.blocksNextSection&&!t}))}const T=null==R?-1:g.indexOf(R),q=e=>{const t=T+e;if(t>=0&&t<=g.length-1){const e=g[t];s.setItem("currentChecklistSectionName:"+u.id,e),j({kind:"setCurrentSection",sectionName:e})}};return e.createElement(e.Fragment,null,!b(v.content)&&e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement(m,{doc:v.content,lookupAttribute:d(u.data)})),e.createElement(E,{completedCount:C,taskCount:h}),v.sectionsEnabled&&e.createElement("div",{className:"userflowjs-bubble-section-name"},R||"First section"),e.createElement("div",{className:"userflowjs-bubble-tasks"},S.map((t=>{const s=x;return u.taskCompletions.some((({taskCvid:e})=>e===t.cvid))||(x=!1),e.createElement(w,{key:t.id,task:t,previousTasksCompleted:s})}))),v.sectionsEnabled&&e.createElement("div",{className:"userflowjs-bubble-section-buttons"},e.createElement("button",{className:"userflowjs-bubble-section-button",onClick:()=>q(-1),disabled:T<=0},e.createElement(c,{icon:f}),e.createElement("span",null,a("checklist.previousSection"))),e.createElement("button",{className:"userflowjs-bubble-section-button",onClick:()=>q(1),disabled:T>=g.length-1||_},e.createElement("span",null,a("checklist.nextSection")),e.createElement(c,{icon:k}))),!p.closeDisabled&&e.createElement("div",{className:"userflowjs-bubble-dismiss-row"},e.createElement("button",{className:n({"userflowjs-bubble-dismiss-button":!0,"userflowjs-bubble-dismiss-button--completed":N}),onClick:()=>N?r.endFlow(u,{endReason:t.USER_CLOSED}):j({kind:"showClose"})},a("checklistDismiss.button"))))},j=()=>{const{t:s}=l(),n=o(),{dispatch:c}=y(),{session:a}=F();return e.createElement("div",{role:"alert"},e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement("p",null,e.createElement("b",null,s("checklistDismiss.title")))),e.createElement("div",{className:"userflowjs-bubble-buttons"},e.createElement("button",{className:"userflowjs-bubble-button userflowjs-bubble-button--primary",onClick:()=>n.endFlow(a,{endReason:t.USER_CLOSED})},e.createElement("div",{className:"userflowjs-bubble-button-text",role:"presentation"},s("checklistDismiss.yes"))),e.createElement("button",{className:"userflowjs-bubble-button userflowjs-bubble-button--default",onClick:()=>c({kind:"showFlow"})},e.createElement("div",{className:"userflowjs-bubble-button-text",role:"presentation"},s("checklistDismiss.cancel")))))};function C(e){const t=e?.querySelector(".userflowjs-bubble-task--clickable:not(.userflowjs-bubble-task--completed)")||e?.querySelector(".userflowjs-bubble-task--clickable")||e?.querySelector('button:not([tabIndex="-1"])');t&&"function"==typeof t.focus&&t.focus()}const h=({session:t,initialAutoFocus:l})=>{const n=o(),c=e.useRef(null),[a,r]=e.useReducer(x,void 0,(()=>({...N,session:t,currentSectionName:s.getItem("currentChecklistSectionName:"+t.id),autoFocusRequested:!!l}))),{session:i,contentType:u}=a;e.useEffect((()=>{i!==t&&r({kind:"updateSession",session:t})}),[i,t]);const b=e.useMemo((()=>({dispatch:r})),[r]);return e.useEffect((()=>{if(!a.autoFocusRequested)return;const e=c.current;e&&C(e),r({kind:"autoFocused"})}),[n,a.autoFocusRequested]),e.createElement(S.Provider,{value:b},e.createElement(g.Provider,{value:a},e.createElement("div",{ref:c},"close"===u?e.createElement(j,null):e.createElement(v,null))))},N={contentType:"flow"};function x(e,t){switch(t.kind){case"updateSession":return{...e,session:t.session};case"showFlow":return{...e,contentType:"flow",autoFocusRequested:!0};case"showClose":return{...e,contentType:"close",autoFocusRequested:!0};case"setCurrentSection":return{...e,currentSectionName:t.sectionName};case"autoFocused":return{...e,autoFocusRequested:!1}}}const S=e.createContext(null),g=e.createContext(null);function y(){return e.useContext(S)}function F(){return e.useContext(g)}export{h as C,C as f};
@@ -1 +1 @@
1
- import{r as e}from"./vendor.react.js";import{i as t}from"./vendor.is-hotkey.js";import{o as n}from"./vendor.obj-str.js";import{r as o,g as s,a,e as r,o as l,f as i,h as m,j as c,k as d,l as u,m as p}from"./flow-condition-types.js";import{a as v}from"./userflow.js";import{u as f}from"./client-context.js";import{u as g}from"./logomark.js";import{B as h}from"./BuilderBar.js";import"./vendor.object-assign.js";import"./vendor.date-fns.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./vendor.i18next.js";import"./vendor.react-i18next.js";import"./vendor.babel.runtime.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./stylesheets.js";import"./vendor.fortawesome.pro-regular-svg-icons.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./vendor.fortawesome.pro-light-svg-icons.js";const w=t("alt+s"),b=t("escape"),y=t("u"),E=({state:t})=>{const{mode:c,elementType:d}=t,E=f(),L=e.useRef(null),[S,N]=e.useState(!1),M=e.useRef(null),[k,R]=e.useState(null),[D,F]=e.useState((()=>x())),T=e.useCallback((async(e,t)=>{if(e&&t){const n=L.current?.getFrame();n&&M.current&&(M.current.classList.add("userflowjs-element-selection-box--no-transition"),n.style.display="none",n.offsetWidth),m(),E.setSessionStorageState((e=>({...e,elementSelection:{...e.elementSelection,mode:"done"}})));const l=o(e),i=0,c=0,d=Math.round(s()),u=Math.round(a()),p=await E.getTargetEnv().captureScreenshot(i,c,d,u),v=e=>Math.round(e/r(1));t={...t,screenshotDataUrl:p,targetX1:v(l.left),targetY1:v(l.top-c),targetX2:v(l.right),targetY2:v(l.bottom-c),screenshotWidth:d,screenshotHeight:u}}E.setSessionStorageState((e=>({...e,activeApp:null,elementSelection:null}))),E.getTargetEnv().postBuilderMessage({kind:"userflow:selectElementResult",selectorData:t})}),[E]),A=e.useCallback((e=>E.setSessionStorageState((t=>({...t,elementSelection:{...t.elementSelection,mode:e}})))),[E]);return e.useEffect((()=>{if(!S||!L.current)return;const e=L.current.getFrame(),t=L.current.getRootEl();let n=t&&t.ownerDocument&&t.ownerDocument.defaultView;n===window&&(n=null);let f=null,g=null,h=null,E=null;const x=document.getElementById("userflow-ui"),N={capture:!0},k=()=>{window.cancelAnimationFrame(F);let e=null,t=null,n=null;if(g&&!x.contains(g)){let o=null,s=g;for(;s;){{const e=s.getBoundingClientRect();if(0===e.width&&0===e.height){s=j(s);continue}}if(o=u(s,{elementType:d}),o)break;s=j(s)}o?(t=o.el,e=o.selector):n=d===v.INPUT?"No text input found here":"Sorry, we can't select that element (yet!)"}h=t,f=e,R(n),C()};let F;const B=()=>{window.cancelAnimationFrame(F),F=window.requestAnimationFrame(k)},C=()=>{window.cancelAnimationFrame($);const e=M.current;if(!e)return;m();const t=r(s()),n=r(a());let l=n/2,i=t/2,c=n/2,d=t/2;let u=2,v=2,f=2,g=2;if(h){const e=o(h),s=window.getComputedStyle(h);l=Math.max(0,e.top),i=Math.max(0,t-e.right),c=Math.max(0,n-e.bottom),d=Math.max(0,e.left),u=Math.max(2,p(s.borderTopLeftRadius)),v=Math.max(2,p(s.borderTopRightRadius)),f=Math.max(2,p(s.borderBottomLeftRadius)),g=Math.max(2,p(s.borderBottomRightRadius)),E=h}else if(E){const e=o(E);l=Math.max(0,e.top+e.height/2),i=Math.max(0,t-e.right+e.width/2),c=Math.max(0,n-e.bottom+e.height/2),d=Math.max(0,e.left+e.width/2)}e.style.top=`${l}px`,e.style.right=`${i}px`,e.style.bottom=`${c}px`,e.style.left=`${d}px`,e.style.borderTopLeftRadius=`${u}px`,e.style.borderTopRightRadius=`${v}px`,e.style.borderBottomLeftRadius=`${f}px`,e.style.borderBottomRightRadius=`${g}px`,h?document.body.classList.remove("userflowjs-body-with-element-selection--none"):document.body.classList.add("userflowjs-body-with-element-selection--none")};let $;const P=()=>{window.cancelAnimationFrame($),$=window.requestAnimationFrame(C)},I=e=>{if(w(e))return e.preventDefault(),void("select"===c?A("navigate"):"navigate"===c&&A("select"));if(b(e)&&"select"===c)return e.preventDefault(),void T(null,null);if(y(e)&&h){const t=j(h);if(t)return e.preventDefault(),g=t,void k()}},U=e=>{const t=e.composedPath()[0];t&&t!==h&&"BODY"!==t.tagName&&"HTML"!==t.tagName&&(g=t,B())},Y=()=>{g=null,B()};e&&e.addEventListener("mouseenter",Y);const V=e=>{e.preventDefault(),e.stopPropagation()},q=e=>{V(e)},H=e=>{V(e)},O=e=>{if(V(e),D){const t=e.target;if(!h||!h.contains(t))return void U(e)}f&&(T(h,f),X())};n&&n.addEventListener("keydown",I),"select"===c&&(document.body.addEventListener("mouseleave",Y),document.body.classList.add("userflowjs-body-with-element-selection"));const W=l((e=>{const t=e.ownerDocument.defaultView;t&&(t.addEventListener("keydown",I,N),"select"===c&&(t.addEventListener("scroll",P,N),e.addEventListener("mousemove",U,N),e.addEventListener("mousedown",q,N),e.addEventListener("focus",H,N),e.addEventListener("click",O,N)))}),(e=>{const t=e.ownerDocument.defaultView;t&&(t.removeEventListener("keydown",I,N),"select"===c&&(t.removeEventListener("scroll",P,N),i(e)||e.removeEventListener("mousemove",U,N),e.removeEventListener("mousedown",q,N),e.removeEventListener("focus",H,N),e.removeEventListener("click",O,N)))})),X=()=>{window.cancelAnimationFrame(F),window.cancelAnimationFrame($),document.body.removeEventListener("mouseleave",Y),n&&n.removeEventListener("keydown",I),e&&e.removeEventListener("mouseenter",Y),document.body.classList.remove("userflowjs-body-with-element-selection"),document.body.classList.remove("userflowjs-body-with-element-selection--none"),W()};return X}),[D,E,c,S,d,T,A]),g((()=>F(x()))),e.createElement(e.Fragment,null,e.createElement(h,{ref:L,onReadyChange:N,buttons:e.createElement(e.Fragment,null,"navigate"===c?e.createElement("button",{key:"select",className:"btn btn--default",onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),A("select")}},e.createElement("span",{className:"hidden-lg-up"},"Select here"),e.createElement("span",{className:"hidden-md-down"},"Select element here (Alt + S)")):"select"===c?e.createElement("button",{key:"navigate",className:"btn btn--default",onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),A("navigate")}},e.createElement("span",{className:"hidden-lg-up"},"Navigate"),e.createElement("span",{className:"hidden-md-down"},"Navigate to another page (Alt + S)")):null,("select"===c||"navigate"===c)&&e.createElement("button",{className:"btn btn--secondary-on-dark",onClick:()=>T(null,null)},"Cancel"))},"navigate"===c?e.createElement("div",{className:"status"},"Navigate to the page the element appears on"):k?e.createElement("div",{className:"error"},k):e.createElement("div",{className:"status"},D?e.createElement(e.Fragment,null,"Tap"," ",d===v.INPUT?"a text input":"an element"," ","to focus. Tap again to select."):e.createElement(e.Fragment,null,"Click"," ",d===v.INPUT?"a text input":"an element"," ","to select it"))),S&&("select"===c||"done"===c)&&e.createElement("div",{className:n({"userflowjs-element-selection-box":!0}),ref:M}))};function j(e){const t=e.parentNode;if(!t)return null;if(i(t))return t.host;if(!c(t))return null;if("BODY"===t.tagName){const e=d(t);return e||null}return t}function x(){return window.navigator.userAgent.includes("Mobile")}export default E;export{E as ElementSelectionApp};
1
+ import{r as e}from"./vendor.react.js";import{i as t}from"./vendor.is-hotkey.js";import{o as n}from"./vendor.obj-str.js";import{r as o,g as s,a,l as r,m as l,n as i,k as m,e as c,p as d,q as u,s as p}from"./flow-condition-types.js";import{a as v}from"./userflow.js";import{u as f}from"./client-context.js";import{u as g}from"./use-window-resize.js";import{B as w}from"./BuilderBar.js";import"./vendor.object-assign.js";import"./vendor.date-fns.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./vendor.i18next.js";import"./vendor.react-i18next.js";import"./vendor.babel.runtime.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./stylesheets.js";import"./vendor.fortawesome.pro-regular-svg-icons.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./logomark.js";import"./vendor.fortawesome.pro-light-svg-icons.js";const h=t("alt+s"),b=t("escape"),y=t("u"),E=({state:t})=>{const{mode:c,elementType:d}=t,E=f(),L=e.useRef(null),[S,N]=e.useState(!1),M=e.useRef(null),[k,R]=e.useState(null),[D,F]=e.useState((()=>x())),T=e.useCallback((async(e,t)=>{if(e&&t){const n=L.current?.getFrame();n&&M.current&&(M.current.classList.add("userflowjs-element-selection-box--no-transition"),n.style.display="none",n.offsetWidth),m(),E.setSessionStorageState((e=>({...e,elementSelection:{...e.elementSelection,mode:"done"}})));const l=o(e),i=0,c=0,d=Math.round(s()),u=Math.round(a()),p=await E.getTargetEnv().captureScreenshot(i,c,d,u),v=e=>Math.round(e/r(1));t={...t,screenshotDataUrl:p,targetX1:v(l.left),targetY1:v(l.top-c),targetX2:v(l.right),targetY2:v(l.bottom-c),screenshotWidth:d,screenshotHeight:u}}E.setSessionStorageState((e=>({...e,activeApp:null,elementSelection:null}))),E.getTargetEnv().postBuilderMessage({kind:"userflow:selectElementResult",selectorData:t})}),[E]),A=e.useCallback((e=>E.setSessionStorageState((t=>({...t,elementSelection:{...t.elementSelection,mode:e}})))),[E]);return e.useEffect((()=>{if(!S||!L.current)return;const e=L.current.getFrame(),t=L.current.getRootEl();let n=t&&t.ownerDocument&&t.ownerDocument.defaultView;n===window&&(n=null);let f=null,g=null,w=null,E=null;const x=document.getElementById("userflow-ui"),N={capture:!0},k=()=>{window.cancelAnimationFrame(F);let e=null,t=null,n=null;if(g&&!x.contains(g)){let o=null,s=g;for(;s;){{const e=s.getBoundingClientRect();if(0===e.width&&0===e.height){s=j(s);continue}}if(o=u(s,{elementType:d}),o)break;s=j(s)}o?(t=o.el,e=o.selector):n=d===v.INPUT?"No text input found here":"Sorry, we can't select that element (yet!)"}w=t,f=e,R(n),C()};let F;const B=()=>{window.cancelAnimationFrame(F),F=window.requestAnimationFrame(k)},C=()=>{window.cancelAnimationFrame($);const e=M.current;if(!e)return;m();const t=r(s()),n=r(a());let l=n/2,i=t/2,c=n/2,d=t/2;let u=2,v=2,f=2,g=2;if(w){const e=o(w),s=window.getComputedStyle(w);l=Math.max(0,e.top),i=Math.max(0,t-e.right),c=Math.max(0,n-e.bottom),d=Math.max(0,e.left),u=Math.max(2,p(s.borderTopLeftRadius)),v=Math.max(2,p(s.borderTopRightRadius)),f=Math.max(2,p(s.borderBottomLeftRadius)),g=Math.max(2,p(s.borderBottomRightRadius)),E=w}else if(E){const e=o(E);l=Math.max(0,e.top+e.height/2),i=Math.max(0,t-e.right+e.width/2),c=Math.max(0,n-e.bottom+e.height/2),d=Math.max(0,e.left+e.width/2)}e.style.top=`${l}px`,e.style.right=`${i}px`,e.style.bottom=`${c}px`,e.style.left=`${d}px`,e.style.borderTopLeftRadius=`${u}px`,e.style.borderTopRightRadius=`${v}px`,e.style.borderBottomLeftRadius=`${f}px`,e.style.borderBottomRightRadius=`${g}px`,w?document.body.classList.remove("userflowjs-body-with-element-selection--none"):document.body.classList.add("userflowjs-body-with-element-selection--none")};let $;const P=()=>{window.cancelAnimationFrame($),$=window.requestAnimationFrame(C)},I=e=>{if(h(e))return e.preventDefault(),void("select"===c?A("navigate"):"navigate"===c&&A("select"));if(b(e)&&"select"===c)return e.preventDefault(),void T(null,null);if(y(e)&&w){const t=j(w);if(t)return e.preventDefault(),g=t,void k()}},U=e=>{const t=e.composedPath()[0];t&&t!==w&&"BODY"!==t.tagName&&"HTML"!==t.tagName&&(g=t,B())},Y=()=>{g=null,B()};e&&e.addEventListener("mouseenter",Y);const q=e=>{e.preventDefault(),e.stopPropagation()},V=e=>{q(e)},H=e=>{q(e)},O=e=>{if(q(e),D){const t=e.target;if(!w||!w.contains(t))return void U(e)}f&&(T(w,f),X())};n&&n.addEventListener("keydown",I),"select"===c&&(document.body.addEventListener("mouseleave",Y),document.body.classList.add("userflowjs-body-with-element-selection"));const W=l((e=>{const t=e.ownerDocument.defaultView;t&&(t.addEventListener("keydown",I,N),"select"===c&&(t.addEventListener("scroll",P,N),e.addEventListener("mousemove",U,N),e.addEventListener("mousedown",V,N),e.addEventListener("focus",H,N),e.addEventListener("click",O,N)))}),(e=>{const t=e.ownerDocument.defaultView;t&&(t.removeEventListener("keydown",I,N),"select"===c&&(t.removeEventListener("scroll",P,N),i(e)||e.removeEventListener("mousemove",U,N),e.removeEventListener("mousedown",V,N),e.removeEventListener("focus",H,N),e.removeEventListener("click",O,N)))})),X=()=>{window.cancelAnimationFrame(F),window.cancelAnimationFrame($),document.body.removeEventListener("mouseleave",Y),n&&n.removeEventListener("keydown",I),e&&e.removeEventListener("mouseenter",Y),document.body.classList.remove("userflowjs-body-with-element-selection"),document.body.classList.remove("userflowjs-body-with-element-selection--none"),W()};return X}),[D,E,c,S,d,T,A]),g((()=>F(x()))),e.createElement(e.Fragment,null,e.createElement(w,{ref:L,onReadyChange:N,buttons:e.createElement(e.Fragment,null,"navigate"===c?e.createElement("button",{key:"select",className:"btn btn--default",onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),A("select")}},e.createElement("span",{className:"hidden-lg-up"},"Select here"),e.createElement("span",{className:"hidden-md-down"},"Select element here (Alt + S)")):"select"===c?e.createElement("button",{key:"navigate",className:"btn btn--default",onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),A("navigate")}},e.createElement("span",{className:"hidden-lg-up"},"Navigate"),e.createElement("span",{className:"hidden-md-down"},"Navigate to another page (Alt + S)")):null,("select"===c||"navigate"===c)&&e.createElement("button",{className:"btn btn--secondary-on-dark",onClick:()=>T(null,null)},"Cancel"))},"navigate"===c?e.createElement("div",{className:"status"},"Navigate to the page the element appears on"):k?e.createElement("div",{className:"error"},k):e.createElement("div",{className:"status"},D?e.createElement(e.Fragment,null,"Tap"," ",d===v.INPUT?"a text input":"an element"," ","to focus. Tap again to select."):e.createElement(e.Fragment,null,"Click"," ",d===v.INPUT?"a text input":"an element"," ","to select it"))),S&&("select"===c||"done"===c)&&e.createElement("div",{className:n({"userflowjs-element-selection-box":!0}),ref:M}))};function j(e){const t=e.parentNode;if(!t)return null;if(i(t))return t.host;if(!c(t))return null;if("BODY"===t.tagName){const e=d(t);return e||null}return t}function x(){return window.navigator.userAgent.includes("Mobile")}export default E;export{E as ElementSelectionApp};
package/FlowApp.js CHANGED
@@ -1 +1 @@
1
- import{r as e}from"./vendor.react.js";import{E as t,V as o,D as n,b as s,G as r,z as l,H as a,w as i,A as c,M as u,U as d}from"./userflow.js";import{m as p,d as m,R as f,B as b,i as h,g as w,u as g,c as E,h as v,S as k}from"./BubbleToolbar.js";import{b as y,z as j,a as T,n as R,r as S}from"./flow-condition-types.js";import{u as L,i as M}from"./client-context.js";import{u as x,r as F,F as C}from"./FlowChrome.js";import{a as I,S as N}from"./z-index.js";import{m as D}from"./vendor.fortawesome.pro-solid-svg-icons.js";import{D as B,u as P}from"./stylesheets.js";import{T as q}from"./Trigger.js";import{u as A}from"./vendor.react-i18next.js";import"./vendor.object-assign.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./vendor.obj-str.js";import"./vendor.fortawesome.pro-regular-svg-icons.js";import"./vendor.date-fns.js";import"./vendor.i18next.js";import"./logomark.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./vendor.babel.runtime.js";const _=()=>{const{t:o}=A(),n=L(),{dispatch:s,restart:r}=le(),{session:l,step:a}=ae(),i="userflowjs-bubble-button userflowjs-bubble-button--default userflowjs-bubble-menu__item";return e.createElement("div",{role:"dialog","aria-modal":ne(a)?"true":void 0,"aria-label":"Guide menu"},e.createElement("div",{className:"userflowjs-bubble-menu__title"},o("menu.title")),e.createElement("button",{className:i,onClick:()=>n.endFlow(l,{endReason:t.USER_CLOSED})},o("menu.close")),l.version.restartEnabled&&e.createElement("button",{className:i,onClick:r},o("menu.restart")),e.createElement("button",{className:i,onClick:()=>s({kind:"showFlow"})},o("menu.back")))},O=({progress:t})=>{const o={width:100*parseFloat(t||"0")+"%"};return e.createElement("div",{className:"userflowjs-bubble-progress"},e.createElement("div",{className:"userflowjs-bubble-progress__fill",style:o}))},U=({theme:s})=>{const r=L(),{session:l,step:a,muted:i,shouldLabelDialog:c}=ae(),{version:u}=l,{dispatch:d}=le(),h=u.steps[0],w=h&&h.id===a.id,g=w&&"1"===a.progress,E=e.useMemo((()=>a.content&&p(m(a.content),{buttons:a.buttons,questions:a.questions})),[a.content,a.buttons,a.questions]);return e.createElement("div",{key:a.id,role:"alertdialog","aria-modal":ne(a)?"true":void 0,"aria-label":c?"Guide":void 0},!g&&e.createElement(O,{progress:a.progress}),e.createElement("div",{id:"userflowjs-bubble-content",className:"userflowjs-bubble-content"},e.createElement(f,{doc:E,lookupAttribute:y(l.data),buttons:a.buttons,questions:a.questions})),e.createElement(b,{draftMode:l.draftMode,muted:i,toggleMuted:s.voiceType!==o.NONE?()=>d({kind:"toggleMuted"}):void 0,close:u.closeDisabled?void 0:()=>s.flowXButtonBehavior===n.DISMISS||w?r.endFlow(l,{endReason:t.USER_CLOSED}):d({kind:"showMenu"})}))};function V(e,t){if(!e)return"";"string"==typeof e&&(e=m(e));const o=[],n=/[.!?;,]$/;function s(){const e=(o[o.length-1]||"").trim();e&&!e.match(n)&&o.push(".")}function r(e){e.forEach((e=>function(e){if(h(e)){if(e.text&&!e.silent){const t=e.text.split("\n");t.forEach(((e,n)=>{o.push(e),n<t.length-1&&(s(),o.push("\n"))}))}}else switch(e.type){case"attribute":{const n=w(e,t);n&&o.push(n);break}default:r(e.children),["link"].includes(e.type)||(s(),o.push("\n\n"))}}(e)))}return r(e.children),o.join("").trim().replace(new RegExp(String.fromCharCode(160),"g")," ").replace(new RegExp(String.fromCharCode(8),"g"),"")}const z=({bubbleFrame:t,theme:n})=>{const s=L(),{dispatch:r}=le(),{muted:l,session:a,step:i}=ae(),c=s.getAudio();e.useEffect((()=>{const e=()=>{r({kind:"speechPlaying"})},t=()=>{r({kind:"speechStopped"})};return c.addEventListener("playing",e),c.addEventListener("ended",t),c.addEventListener("pause",t),()=>{c.removeEventListener("playing",e),c.removeEventListener("ended",t),c.removeEventListener("pause",t),c.pause(),c.src="",r({kind:"speechStopped"})}}),[r,c]),e.useEffect((()=>{if(s.audioReady)return;const e=t&&"IFRAME"===t.tagName?t.contentWindow:null;const o=()=>{window.removeEventListener("mousedown",n),e&&e.removeEventListener("mousedown",n)},n=()=>{o(),s.playAudio(null)};return window.addEventListener("mousedown",n),e&&e.addEventListener("mousedown",n),o}),[t,s]);const u=e.useRef(a),d=e.useRef(n),p=e.useRef(i);return e.useEffect((()=>{u.current=a,d.current=n,p.current=i}),[a,n,i]),e.useEffect((()=>{if(!s.audioReady||l)return void s.pauseAudio();let e=!1;return async function(e,t,n,s){if(n.voiceType===o.SYNTHETIC&&"string"==typeof n.syntheticVoice&&s.content){e.ensureIdentified();const o=y(t.data),r=V(s.content,o);return e.getStepSpeech(n.syntheticVoice,r)}if(n.voiceType===o.MANUAL&&s.speechAsset)return s.speechAsset.assetUrl;return null}(s,u.current,d.current,p.current).then((t=>{t&&!e&&s.playAudio(t)})),()=>{e=!0}}),[l,s,i.id]),null};const Y=e.forwardRef(((t,o)=>{const n=I();return e.createElement("div",{ref:o,className:"userflowjs-out-of-viewport-pointer",style:{zIndex:n+2}},e.createElement(B,{icon:D}))}));function G(e,t){const o=e.current;o&&(o.classList.toggle("userflowjs-out-of-viewport-pointer--visible",null!=t),t&&(o.style.left=t.left+"px",o.style.top=t.top+"px",o.classList.toggle("userflowjs-out-of-viewport-pointer--visible-up","up"===t.direction),o.classList.toggle("userflowjs-out-of-viewport-pointer--visible-down","down"===t.direction)))}const H=()=>{const{step:t}=ae();return e.createElement(e.Fragment,null,t.beacons.map((t=>e.createElement(X,{key:t.id,beacon:t}))))},X=({beacon:t})=>{const{session:o}=ae(),n=I(),s=e.useRef(null),r=e.useRef(null),l=g(t.hiddenCondition),a=e.useMemo((()=>R(t.selector,o.data)),[t.selector,o.data]),i=e.useCallback((({targetRect:e,clipEl:o,viewportClipRect:n})=>{const l=function({beacon:e,beaconRef:t,clipEl:o,viewportClipRect:n,targetRect:s}){if(!t.current)return null;if(0===s.width||0===s.height)return null;const r=16,l=16,a=S(o);let i=0,c=0;switch(e.placement){case"top-left":case"left":case"bottom-left":i=s.left;break;case"top":case"center":case"bottom":i=s.left+s.width/2;break;default:i=s.left+s.width}switch(e.placement){case"left":case"center":case"right":c=s.top+s.height/2;break;case"bottom-left":case"bottom":case"bottom-right":c=s.top+s.height;break;default:c=s.top}i-=r/2,c-=l/2,i+=e.offsetX,c+=e.offsetY,i=Math.max(i,a.left-(o===document.documentElement?0:o.scrollLeft)),c=Math.max(c,a.top-(o===document.documentElement?0:o.scrollTop));const u=i+r,d=c+l,p=Math.min(32,.5*l);let m;m=d<n.top+p?"up":c>n.bottom-p?"down":null;return{top:c,right:u,bottom:d,left:i,width:r,height:l,pointerSubjectPosition:{direction:m,left:i,width:r},visible:null==m}}({beacon:t,beaconRef:s,clipEl:o,viewportClipRect:n,targetRect:e}),a=l&&function({subjectPosition:e,pointerRef:t,viewportClipRect:o}){const n=t.current;if(!n)return null;const s=n.getBoundingClientRect(),r=j(T());let l,a,i=e.direction;return null==i?null:("down"===i&&o.bottom<s.height/2?i="up":"up"===i&&o.top>r&&(i="down"),l=e.left+e.width/2-s.width/2,a="down"===i?o.bottom-s.height:o.top,{direction:i,left:l,top:a})}({subjectPosition:l.pointerSubjectPosition,pointerRef:r,viewportClipRect:n});F((()=>{W(s,l),G(r,a)}))}),[t]),c=e.useCallback((()=>{W(s,null),G(r,null)}),[]);return x({selector:l?null:a,targetMoved:i,targetLost:c}),e.createElement(e.Fragment,null,e.createElement("div",{ref:s,className:"userflowjs-beacon userflowjs-beacon--pulse userflowjs-beacon--for-flow userflowjs-fixed-widget",style:{zIndex:n+2}},e.createElement("div",{className:"userflowjs-beacon__ring"}),e.createElement("div",{className:"userflowjs-beacon__ring"})),e.createElement(Y,{ref:r}))};function W(e,t){const o=e.current;o&&(o.classList.toggle("userflowjs-fixed-widget--visible",null!=t),t&&(o.style.transform=`translate3d(${t.left}px, ${t.top}px, 0)`,o.style.visibility=t.visible?"visible":"hidden"))}const $=()=>{const{t:o}=A(),n=L(),{restart:l}=le(),{session:a,step:i}=ae(),c=i.theme||a.version.theme,u=i.selector,d=!u||u.type===s.AUTO&&!u.autoData,p=()=>n.endFlow(a,{endReason:t.USER_CLOSED});return e.createElement(e.Fragment,null,e.createElement(b,{draftMode:a.draftMode,close:p}),a.draftMode&&d?e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement("div",{className:"userflowjs-bubble-alert p-like"},e.createElement("span",{className:"userflowjs-bubble-alert__label"},"Preview-only tip"),"No tooltip target selected yet. Please go back to the Builder and select a tooltip target in ",e.createElement("b",null,"Step ",i.idx+1)," of"," ",e.createElement("b",null,a.flow.name),".")):a.draftMode&&c.tooltipMissingBehavior===r.END?e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement("div",{className:"userflowjs-bubble-alert p-like"},e.createElement("p",null,e.createElement("span",{className:"userflowjs-bubble-alert__label"},"Preview-only tip"),"The tooltip target element in ",e.createElement("b",null,"Step ",i.idx+1)," of"," ",e.createElement("b",null,a.flow.name)," was not found within"," ",c.tooltipMissingToleranceSeconds," ",1===parseFloat(c.tooltipMissingToleranceSeconds)?"second":"seconds","."),e.createElement("p",null,"For regular users, the flow will auto-dismiss when this happens."),e.createElement("p",null,"If you are on the right page, then try reselecting the element in the Builder."),e.createElement("p",null,"Read more in our"," ",e.createElement("a",{href:"https://userflow.com/docs/trouble/element-not-found",target:"_blank",rel:"noopener noreferrer"},"Element not found guide"),"."))):e.createElement(e.Fragment,null,e.createElement("div",{className:"userflowjs-bubble-content"},a.draftMode&&e.createElement("div",{className:"userflowjs-bubble-alert p-like"},e.createElement("span",{className:"userflowjs-bubble-alert__label"},"Preview-only tip"),"The tooltip target element in ",e.createElement("b",null,"Step ",i.idx+1)," of"," ",e.createElement("b",null,a.flow.name)," was not found on the page. If you are on the right page, then try reselecting the element in the Builder."),e.createElement("p",null,e.createElement("b",null,o("tooltipTargetMissing.line1"))),e.createElement("p",null,o("tooltipTargetMissing.line2"))),e.createElement("div",{className:"userflowjs-bubble-buttons"},e.createElement(E,{appearance:"primary",onClick:l,text:o("menu.restart")}),e.createElement(E,{appearance:"default",onClick:p,text:o("menu.close")}))))},K=({session:o,checklistSession:n,resourceCenterEmbedsChecklist:s})=>{const d=L(),[p,m]=e.useState(!1),[f,b]=e.useState(null),[h,w]=e.useReducer(Z,void 0,(()=>{const e=o,t=ee(e);return{...Q,session:e,step:t,muted:!!l.getItem("flowsMuted"),autoFocusRequested:oe(t)}})),{session:g,step:E,speechPlaying:y,contentType:j}=h,{version:T}=g,S=ne(E);let x=0;E.questions.some((e=>e.type===i.NPS))&&(x=420);const F=P(E.theme||T.theme),I=e.useMemo((()=>{let e=F.bubbleY;const t=n?.version.theme;return!s&&n&&t&&n.version.checklist?.launcherEnabled&&E.appearance===a.BUBBLE&&t.checklistLauncherPlacement===F.bubblePlacement&&(F.avatarType===c.NONE||t.checklistLauncherX<F.bubbleX+F.avatarSize)&&(e=Math.max(F.bubbleY,t.checklistLauncherY+t.checklistLauncherHeight+F.bubbleY)),{...F,bubbleWidth:Math.max(F.bubbleWidth,x),bubbleY:e}}),[s,n,E.appearance,F,x]);e.useEffect((()=>{g!==o&&w({kind:"updateSession",session:o});const e=e=>{e.session.id===g.id&&w({kind:"goToStep",stepId:e.step.id})};return d.on("gotostep",e),()=>{d.off("gotostep",e)}}),[d,g,o]);const D=e.useMemo((()=>({dispatch:w,restart:()=>{d.goToStep(g,te(g)),w({kind:"showFlow"})}})),[d,w,g]),B=e.useMemo((()=>E.selector&&R(E.selector,g.data)),[E.selector,g.data]),q=e.useCallback((()=>{v(d,g,E.actions)}),[d,g,E.actions]);e.useEffect((()=>{h.muted?l.setItem("flowsMuted","true"):l.removeItem("flowsMuted")}),[h.muted]);const A=g.locale?g.locale.standardLocaleId:I.languageId;e.useEffect((()=>{M.changeLanguage(A)}),[A]);const[O,V]=e.useState(!1),z=e.useCallback((e=>{V(e),e&&d.send({kind:"ReportTooltipTargetMissing",sessionId:g.id,stepId:E.id}),e&&I.tooltipMissingBehavior===r.END&&!g.draftMode&&d.endFlow(g,{endReason:t.TOOLTIP_TARGET_MISSING})}),[d,g,E.id,I.tooltipMissingBehavior]);return e.useEffect((()=>{if(!p||!h.autoFocusRequested)return;d.originalActiveElement||d.originalActiveElement===f?.ownerDocument.defaultView?.frameElement||(d.originalActiveElement=document.activeElement);let e=f?.querySelector('button:not([tabindex="-1"]):not(.userflowjs-bubble-toolbar-button), [tabindex]:not([tabindex="-1"]):not(.userflowjs-bubble-toolbar-button), input, textarea');if(e&&e.matches(".userflowjs-bubble-buttons button:not(.userflowjs-bubble-button--primary)")){const t=f?.querySelector(".userflowjs-bubble-buttons .userflowjs-bubble-button--primary");t&&(e=t)}e&&"function"==typeof e.focus&&e.focus({preventScroll:!0}),w({kind:"autoFocused"})}),[d,f,p,h.autoFocusRequested]),e.useEffect((()=>{const e=f?.ownerDocument.defaultView;if(!e)return;const t=()=>{w({kind:"focusOut"}),delete d.originalActiveElement},o=()=>{w({kind:"focusIn"})};return window.addEventListener("focusin",t),e.addEventListener("focusin",o),()=>{window.removeEventListener("focusin",t),e.removeEventListener("focusin",o)}}),[f,d]),e.useEffect((()=>{if(!S||!f)return;const e=f.ownerDocument.defaultView,o=e?e.document:document,n=e=>{if("Escape"!==e.key||T.closeDisabled){if("Tab"===e.key){const t=f.querySelectorAll('button:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"]), input, textarea'),n=t[0],s=t[t.length-1],r=o.activeElement;e.shiftKey?r===n&&(e.preventDefault(),s.focus()):r===s&&(e.preventDefault(),n.focus())}}else d.endFlow(g,{endReason:t.USER_CLOSED})};return window.addEventListener("keydown",n),e?.addEventListener("keydown",n),()=>{window.removeEventListener("keydown",n),e?.removeEventListener("keydown",n)}}),[S,d,g,f,T.closeDisabled]),e.useEffect((()=>{if(h.scrollToTopRequested){if(f?.ownerDocument.defaultView?.frameElement){const e=f?.ownerDocument.body;e&&(e.scrollTop=0)}w({kind:"scrolledToTop"})}}),[h.scrollToTopRequested,f]),e.createElement(se.Provider,{value:D},e.createElement(re.Provider,{value:h},e.createElement(k.Provider,{value:g},e.createElement(N,null,e.createElement(C,{company:g.flow.company,theme:I,position:"fixed",stepKey:E.crossVersionId,stepAppearance:E.appearance,width:E.width,backgroundImageUrl:"flow"===j&&!O&&E.backgroundAsset?E.backgroundAsset.assetUrl:null,tooltipSelector:B,tooltipPlacement:E.tooltipPlacement,backdrop:E.backdrop,tooltipTargetBlocked:E.tooltipTargetBlocked,backdropPadding:E.backdropPadding,onTooltipTargetClick:q,onTooltipTargetMissingChange:z,onModalBackdropClick:E.appearance!==a.MODAL||I.modalBackdropOnclick!==u.DISMISS||T.closeDisabled?void 0:()=>d.endFlow(g,{endReason:t.USER_CLOSED}),speaking:y,minimizeOnAvatarClick:!0,autoHide3pEnabled:!0,onVisibleChange:m,bubbleFrameRootRef:b,rootChildren:t=>e.createElement(J,{...t,theme:I})},"menu"===j?e.createElement(_,null):O&&I.tooltipMissingBehavior!==r.BUBBLE?e.createElement($,null):e.createElement(U,{theme:I}))))))},J=({visible:t,bubbleFrame:o,theme:n})=>{const s=ae(),{step:r}=s,l=s.session.currentStep&&s.session.currentStep.id,[a,i]=e.useState(!1),c=e.useRef(l);return e.useEffect((()=>{t?i(!0):c.current!==l&&i(!1),c.current=l}),[l,t]),e.createElement(e.Fragment,null,(t||a)&&"flow"===s.contentType&&e.createElement(e.Fragment,null,e.createElement(z,{bubbleFrame:o,theme:n}),e.createElement(H,null)),r.triggers.map((t=>e.createElement(q,{key:t.id,trigger:t}))))},Q={muted:!1,speechPlaying:!1,contentType:"flow",autoFocusRequested:!1,hasFocus:!1,scrollToTopRequested:!1,shouldLabelDialog:!0};function Z(e,t){switch(t.kind){case"updateSession":{let o;return o=t.session.id===e.session.id&&t.session.version.steps.find((({crossVersionId:t})=>t===e.step.crossVersionId))||ee(t.session),{...e,session:t.session,step:o}}case"goToStep":{const o=e.session.version.steps.find((e=>e.id===t.stepId));return o?{...e,step:o,contentType:"flow",autoFocusRequested:e.hasFocus||oe(o),scrollToTopRequested:!0,shouldLabelDialog:!e.hasFocus}:e}case"toggleMuted":return{...e,muted:!e.muted};case"speechPlaying":return{...e,speechPlaying:!0};case"speechStopped":return{...e,speechPlaying:!1};case"showFlow":return{...e,contentType:"flow",autoFocusRequested:!0,scrollToTopRequested:!0};case"showMenu":return{...e,contentType:"menu",autoFocusRequested:!0,scrollToTopRequested:!0};case"autoFocused":return{...e,autoFocusRequested:!1};case"focusIn":return{...e,hasFocus:!0};case"focusOut":return{...e,hasFocus:!1};case"scrolledToTop":return{...e,scrollToTopRequested:!1}}}function ee(e){const{currentStep:t}=e,{steps:o}=e.version;if(t){const e=o.find((({crossVersionId:e})=>e===t.crossVersionId));if(!e)throw new d("Session points to an unknown step: "+t.crossVersionId);return e}return te(e)}function te(e){const t=e.version.steps[0];if(!t)throw new d("Session has no current step and its version has no start step");return t}function oe(e){return ne(e)}function ne(e){return e.appearance===a.MODAL||e.appearance===a.BUBBLE&&e.backdrop||e.appearance===a.TOOLTIP&&e.tooltipTargetBlocked}const se=e.createContext(null),re=e.createContext(null);function le(){return e.useContext(se)}function ae(){return e.useContext(re)}export default K;export{K as FlowApp,re as FlowStateContext,Q as initialFlowState,ne as isStepModal,le as useFlowDispatch,ae as useFlowState};
1
+ import{r as e}from"./vendor.react.js";import{E as t,V as o,H as n,b as s,I as r,D as l,J as a,w as i,A as c,M as u,U as d}from"./userflow.js";import{B as p}from"./BubbleToolbar.js";import{m,d as f,R as b,i as h,g as w,u as g,c as E,h as v,S as k}from"./bubble-frame.styl.js";import{b as y,z as j,a as T,t as R,r as S}from"./flow-condition-types.js";import{u as L,i as M}from"./client-context.js";import{F as x}from"./FlowChrome.js";import{u as F,r as C}from"./use-selector-element-monitoring.js";import{a as I,S as N}from"./flow-host.styl.js";import{m as D}from"./vendor.fortawesome.pro-solid-svg-icons.js";import{D as B,u as P}from"./stylesheets.js";import{T as q}from"./Trigger.js";import{u as A}from"./vendor.react-i18next.js";import"./vendor.object-assign.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./vendor.fortawesome.pro-regular-svg-icons.js";import"./vendor.obj-str.js";import"./vendor.date-fns.js";import"./vendor.i18next.js";import"./use-window-resize.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./logomark.js";import"./vendor.babel.runtime.js";const _=()=>{const{t:o}=A(),n=L(),{dispatch:s,restart:r}=le(),{session:l,step:a}=ae(),i="userflowjs-bubble-button userflowjs-bubble-button--default userflowjs-bubble-menu__item";return e.createElement("div",{role:"dialog","aria-modal":ne(a)?"true":void 0,"aria-label":"Guide menu"},e.createElement("div",{className:"userflowjs-bubble-menu__title"},o("menu.title")),e.createElement("button",{className:i,onClick:()=>n.endFlow(l,{endReason:t.USER_CLOSED})},o("menu.close")),l.version.restartEnabled&&e.createElement("button",{className:i,onClick:r},o("menu.restart")),e.createElement("button",{className:i,onClick:()=>s({kind:"showFlow"})},o("menu.back")))},O=({progress:t})=>{const o={width:100*parseFloat(t||"0")+"%"};return e.createElement("div",{className:"userflowjs-bubble-progress"},e.createElement("div",{className:"userflowjs-bubble-progress__fill",style:o}))},U=({theme:s})=>{const r=L(),{session:l,step:a,muted:i,shouldLabelDialog:c}=ae(),{version:u}=l,{dispatch:d}=le(),h=u.steps[0],w=h&&h.id===a.id,g=w&&"1"===a.progress,E=e.useMemo((()=>a.content&&m(f(a.content),{buttons:a.buttons,questions:a.questions})),[a.content,a.buttons,a.questions]);return e.createElement("div",{key:a.id,role:"alertdialog","aria-modal":ne(a)?"true":void 0,"aria-label":c?"Guide":void 0},!g&&e.createElement(O,{progress:a.progress}),e.createElement("div",{id:"userflowjs-bubble-content",className:"userflowjs-bubble-content"},e.createElement(b,{doc:E,lookupAttribute:y(l.data),buttons:a.buttons,questions:a.questions})),e.createElement(p,{draftMode:l.draftMode,muted:i,toggleMuted:s.voiceType!==o.NONE?()=>d({kind:"toggleMuted"}):void 0,close:u.closeDisabled?void 0:()=>s.flowXButtonBehavior===n.DISMISS||w?r.endFlow(l,{endReason:t.USER_CLOSED}):d({kind:"showMenu"})}))};function V(e,t){if(!e)return"";"string"==typeof e&&(e=f(e));const o=[],n=/[.!?;,]$/;function s(){const e=(o[o.length-1]||"").trim();e&&!e.match(n)&&o.push(".")}function r(e){e.forEach((e=>function(e){if(h(e)){if(e.text&&!e.silent){const t=e.text.split("\n");t.forEach(((e,n)=>{o.push(e),n<t.length-1&&(s(),o.push("\n"))}))}}else switch(e.type){case"attribute":{const n=w(e,t);n&&o.push(n);break}default:r(e.children),["link"].includes(e.type)||(s(),o.push("\n\n"))}}(e)))}return r(e.children),o.join("").trim().replace(new RegExp(String.fromCharCode(160),"g")," ").replace(new RegExp(String.fromCharCode(8),"g"),"")}const Y=({bubbleFrame:t,theme:n})=>{const s=L(),{dispatch:r}=le(),{muted:l,session:a,step:i}=ae(),c=s.getAudio();e.useEffect((()=>{const e=()=>{r({kind:"speechPlaying"})},t=()=>{r({kind:"speechStopped"})};return c.addEventListener("playing",e),c.addEventListener("ended",t),c.addEventListener("pause",t),()=>{c.removeEventListener("playing",e),c.removeEventListener("ended",t),c.removeEventListener("pause",t),c.pause(),c.src="",r({kind:"speechStopped"})}}),[r,c]),e.useEffect((()=>{if(s.audioReady)return;const e=t&&"IFRAME"===t.tagName?t.contentWindow:null;const o=()=>{window.removeEventListener("mousedown",n),e&&e.removeEventListener("mousedown",n)},n=()=>{o(),s.playAudio(null)};return window.addEventListener("mousedown",n),e&&e.addEventListener("mousedown",n),o}),[t,s]);const u=e.useRef(a),d=e.useRef(n),p=e.useRef(i);return e.useEffect((()=>{u.current=a,d.current=n,p.current=i}),[a,n,i]),e.useEffect((()=>{if(!s.audioReady||l)return void s.pauseAudio();let e=!1;return async function(e,t,n,s){if(n.voiceType===o.SYNTHETIC&&"string"==typeof n.syntheticVoice&&s.content){e.ensureIdentified();const o=y(t.data),r=V(s.content,o);return e.getStepSpeech(n.syntheticVoice,r)}if(n.voiceType===o.MANUAL&&s.speechAsset)return s.speechAsset.assetUrl;return null}(s,u.current,d.current,p.current).then((t=>{t&&!e&&s.playAudio(t)})),()=>{e=!0}}),[l,s,i.id]),null};const z=e.forwardRef(((t,o)=>{const n=I();return e.createElement("div",{ref:o,className:"userflowjs-out-of-viewport-pointer",style:{zIndex:n+2}},e.createElement(B,{icon:D}))}));function G(e,t){const o=e.current;o&&(o.classList.toggle("userflowjs-out-of-viewport-pointer--visible",null!=t),t&&(o.style.left=t.left+"px",o.style.top=t.top+"px",o.classList.toggle("userflowjs-out-of-viewport-pointer--visible-up","up"===t.direction),o.classList.toggle("userflowjs-out-of-viewport-pointer--visible-down","down"===t.direction)))}const H=()=>{const{step:t}=ae();return e.createElement(e.Fragment,null,t.beacons.map((t=>e.createElement(X,{key:t.id,beacon:t}))))},X=({beacon:t})=>{const{session:o}=ae(),n=I(),s=e.useRef(null),r=e.useRef(null),l=g(t.hiddenCondition),a=e.useMemo((()=>R(t.selector,o.data)),[t.selector,o.data]),i=e.useCallback((({targetRect:e,clipEl:o,viewportClipRect:n})=>{const l=function({beacon:e,beaconRef:t,clipEl:o,viewportClipRect:n,targetRect:s}){if(!t.current)return null;if(0===s.width||0===s.height)return null;const r=16,l=16,a=S(o);let i=0,c=0;switch(e.placement){case"top-left":case"left":case"bottom-left":i=s.left;break;case"top":case"center":case"bottom":i=s.left+s.width/2;break;default:i=s.left+s.width}switch(e.placement){case"left":case"center":case"right":c=s.top+s.height/2;break;case"bottom-left":case"bottom":case"bottom-right":c=s.top+s.height;break;default:c=s.top}i-=r/2,c-=l/2,i+=e.offsetX,c+=e.offsetY,i=Math.max(i,a.left-(o===document.documentElement?0:o.scrollLeft)),c=Math.max(c,a.top-(o===document.documentElement?0:o.scrollTop));const u=i+r,d=c+l,p=Math.min(32,.5*l);let m;m=d<n.top+p?"up":c>n.bottom-p?"down":null;return{top:c,right:u,bottom:d,left:i,width:r,height:l,pointerSubjectPosition:{direction:m,left:i,width:r},visible:null==m}}({beacon:t,beaconRef:s,clipEl:o,viewportClipRect:n,targetRect:e}),a=l&&function({subjectPosition:e,pointerRef:t,viewportClipRect:o}){const n=t.current;if(!n)return null;const s=n.getBoundingClientRect(),r=j(T());let l,a,i=e.direction;return null==i?null:("down"===i&&o.bottom<s.height/2?i="up":"up"===i&&o.top>r&&(i="down"),l=e.left+e.width/2-s.width/2,a="down"===i?o.bottom-s.height:o.top,{direction:i,left:l,top:a})}({subjectPosition:l.pointerSubjectPosition,pointerRef:r,viewportClipRect:n});C((()=>{W(s,l),G(r,a)}))}),[t]),c=e.useCallback((()=>{W(s,null),G(r,null)}),[]);return F({selector:l?null:a,targetMoved:i,targetLost:c}),e.createElement(e.Fragment,null,e.createElement("div",{ref:s,className:"userflowjs-beacon userflowjs-beacon--pulse userflowjs-beacon--for-flow userflowjs-fixed-widget",style:{zIndex:n+2}},e.createElement("div",{className:"userflowjs-beacon__ring"}),e.createElement("div",{className:"userflowjs-beacon__ring"})),e.createElement(z,{ref:r}))};function W(e,t){const o=e.current;o&&(o.classList.toggle("userflowjs-fixed-widget--visible",null!=t),t&&(o.style.transform=`translate3d(${t.left}px, ${t.top}px, 0)`,o.style.visibility=t.visible?"visible":"hidden"))}const $=()=>{const{t:o}=A(),n=L(),{restart:l}=le(),{session:a,step:i}=ae(),c=i.theme||a.version.theme,u=i.selector,d=!u||u.type===s.AUTO&&!u.autoData,m=()=>n.endFlow(a,{endReason:t.USER_CLOSED});return e.createElement(e.Fragment,null,e.createElement(p,{draftMode:a.draftMode,close:m}),a.draftMode&&d?e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement("div",{className:"userflowjs-bubble-alert p-like"},e.createElement("span",{className:"userflowjs-bubble-alert__label"},"Preview-only tip"),"No tooltip target selected yet. Please go back to the Builder and select a tooltip target in ",e.createElement("b",null,"Step ",i.idx+1)," of"," ",e.createElement("b",null,a.flow.name),".")):a.draftMode&&c.tooltipMissingBehavior===r.END?e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement("div",{className:"userflowjs-bubble-alert p-like"},e.createElement("p",null,e.createElement("span",{className:"userflowjs-bubble-alert__label"},"Preview-only tip"),"The tooltip target element in ",e.createElement("b",null,"Step ",i.idx+1)," of"," ",e.createElement("b",null,a.flow.name)," was not found within"," ",c.tooltipMissingToleranceSeconds," ",1===parseFloat(c.tooltipMissingToleranceSeconds)?"second":"seconds","."),e.createElement("p",null,"For regular users, the flow will auto-dismiss when this happens."),e.createElement("p",null,"If you are on the right page, then try reselecting the element in the Builder."),e.createElement("p",null,"Read more in our"," ",e.createElement("a",{href:"https://userflow.com/docs/trouble/element-not-found",target:"_blank",rel:"noopener noreferrer"},"Element not found guide"),"."))):e.createElement(e.Fragment,null,e.createElement("div",{className:"userflowjs-bubble-content"},a.draftMode&&e.createElement("div",{className:"userflowjs-bubble-alert p-like"},e.createElement("span",{className:"userflowjs-bubble-alert__label"},"Preview-only tip"),"The tooltip target element in ",e.createElement("b",null,"Step ",i.idx+1)," of"," ",e.createElement("b",null,a.flow.name)," was not found on the page. If you are on the right page, then try reselecting the element in the Builder."),e.createElement("p",null,e.createElement("b",null,o("tooltipTargetMissing.line1"))),e.createElement("p",null,o("tooltipTargetMissing.line2"))),e.createElement("div",{className:"userflowjs-bubble-buttons"},e.createElement(E,{appearance:"primary",onClick:l,text:o("menu.restart")}),e.createElement(E,{appearance:"default",onClick:m,text:o("menu.close")}))))},K=({session:o,checklistSession:n,resourceCenterEmbedsChecklist:s})=>{const d=L(),[p,m]=e.useState(!1),[f,b]=e.useState(null),[h,w]=e.useReducer(Z,void 0,(()=>{const e=o,t=ee(e);return{...Q,session:e,step:t,muted:!!l.getItem("flowsMuted"),autoFocusRequested:oe(t)}})),{session:g,step:E,speechPlaying:y,contentType:j}=h,{version:T}=g,S=ne(E);let F=0;E.questions.some((e=>e.type===i.NPS))&&(F=420);const C=P(E.theme||T.theme),I=e.useMemo((()=>{let e=C.bubbleY;const t=n?.version.theme;return!s&&n&&t&&n.version.checklist?.launcherEnabled&&E.appearance===a.BUBBLE&&t.checklistLauncherPlacement===C.bubblePlacement&&(C.avatarType===c.NONE||t.checklistLauncherX<C.bubbleX+C.avatarSize)&&(e=Math.max(C.bubbleY,t.checklistLauncherY+t.checklistLauncherHeight+C.bubbleY)),{...C,bubbleWidth:Math.max(C.bubbleWidth,F),bubbleY:e}}),[s,n,E.appearance,C,F]);e.useEffect((()=>{g!==o&&w({kind:"updateSession",session:o});const e=e=>{e.session.id===g.id&&w({kind:"goToStep",stepId:e.step.id})};return d.on("gotostep",e),()=>{d.off("gotostep",e)}}),[d,g,o]);const D=e.useMemo((()=>({dispatch:w,restart:()=>{d.goToStep(g,te(g)),w({kind:"showFlow"})}})),[d,w,g]),B=e.useMemo((()=>E.selector&&R(E.selector,g.data)),[E.selector,g.data]),q=e.useCallback((()=>{v(d,g,E.actions)}),[d,g,E.actions]);e.useEffect((()=>{h.muted?l.setItem("flowsMuted","true"):l.removeItem("flowsMuted")}),[h.muted]);const A=g.locale?g.locale.standardLocaleId:I.languageId;e.useEffect((()=>{M.changeLanguage(A)}),[A]);const[O,V]=e.useState(!1),Y=e.useCallback((e=>{V(e),e&&d.send({kind:"ReportTooltipTargetMissing",sessionId:g.id,stepId:E.id}),e&&I.tooltipMissingBehavior===r.END&&!g.draftMode&&d.endFlow(g,{endReason:t.TOOLTIP_TARGET_MISSING})}),[d,g,E.id,I.tooltipMissingBehavior]);return e.useEffect((()=>{if(!p||!h.autoFocusRequested)return;d.originalActiveElement||d.originalActiveElement===f?.ownerDocument.defaultView?.frameElement||(d.originalActiveElement=document.activeElement);let e=f?.querySelector('button:not([tabindex="-1"]):not(.userflowjs-bubble-toolbar-button), [tabindex]:not([tabindex="-1"]):not(.userflowjs-bubble-toolbar-button), input, textarea');if(e&&e.matches(".userflowjs-bubble-buttons button:not(.userflowjs-bubble-button--primary)")){const t=f?.querySelector(".userflowjs-bubble-buttons .userflowjs-bubble-button--primary");t&&(e=t)}e&&"function"==typeof e.focus&&e.focus({preventScroll:!0}),w({kind:"autoFocused"})}),[d,f,p,h.autoFocusRequested]),e.useEffect((()=>{const e=f?.ownerDocument.defaultView;if(!e)return;const t=()=>{w({kind:"focusOut"}),delete d.originalActiveElement},o=()=>{w({kind:"focusIn"})};return window.addEventListener("focusin",t),e.addEventListener("focusin",o),()=>{window.removeEventListener("focusin",t),e.removeEventListener("focusin",o)}}),[f,d]),e.useEffect((()=>{if(!S||!f)return;const e=f.ownerDocument.defaultView,o=e?e.document:document,n=e=>{if("Escape"!==e.key||T.closeDisabled){if("Tab"===e.key){const t=f.querySelectorAll('button:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"]), input, textarea'),n=t[0],s=t[t.length-1],r=o.activeElement;e.shiftKey?r===n&&(e.preventDefault(),s.focus()):r===s&&(e.preventDefault(),n.focus())}}else d.endFlow(g,{endReason:t.USER_CLOSED})};return window.addEventListener("keydown",n),e?.addEventListener("keydown",n),()=>{window.removeEventListener("keydown",n),e?.removeEventListener("keydown",n)}}),[S,d,g,f,T.closeDisabled]),e.useEffect((()=>{if(h.scrollToTopRequested){if(f?.ownerDocument.defaultView?.frameElement){const e=f?.ownerDocument.body;e&&(e.scrollTop=0)}w({kind:"scrolledToTop"})}}),[h.scrollToTopRequested,f]),e.createElement(se.Provider,{value:D},e.createElement(re.Provider,{value:h},e.createElement(k.Provider,{value:g},e.createElement(N,null,e.createElement(x,{company:g.flow.company,theme:I,position:"fixed",stepKey:E.crossVersionId,stepAppearance:E.appearance,width:E.width,backgroundImageUrl:"flow"===j&&!O&&E.backgroundAsset?E.backgroundAsset.assetUrl:null,tooltipSelector:B,tooltipPlacement:E.tooltipPlacement,backdrop:E.backdrop,tooltipTargetBlocked:E.tooltipTargetBlocked,backdropPadding:E.backdropPadding,onTooltipTargetClick:q,onTooltipTargetMissingChange:Y,onModalBackdropClick:E.appearance!==a.MODAL||I.modalBackdropOnclick!==u.DISMISS||T.closeDisabled?void 0:()=>d.endFlow(g,{endReason:t.USER_CLOSED}),speaking:y,minimizeOnAvatarClick:!0,autoHide3pEnabled:!0,onVisibleChange:m,bubbleFrameRootRef:b,rootChildren:t=>e.createElement(J,{...t,theme:I})},"menu"===j?e.createElement(_,null):O&&I.tooltipMissingBehavior!==r.BUBBLE?e.createElement($,null):e.createElement(U,{theme:I}))))))},J=({visible:t,bubbleFrame:o,theme:n})=>{const s=ae(),{step:r}=s,l=s.session.currentStep&&s.session.currentStep.id,[a,i]=e.useState(!1),c=e.useRef(l);return e.useEffect((()=>{t?i(!0):c.current!==l&&i(!1),c.current=l}),[l,t]),e.createElement(e.Fragment,null,(t||a)&&"flow"===s.contentType&&e.createElement(e.Fragment,null,e.createElement(Y,{bubbleFrame:o,theme:n}),e.createElement(H,null)),r.triggers.map((t=>e.createElement(q,{key:t.id,trigger:t}))))},Q={muted:!1,speechPlaying:!1,contentType:"flow",autoFocusRequested:!1,hasFocus:!1,scrollToTopRequested:!1,shouldLabelDialog:!0};function Z(e,t){switch(t.kind){case"updateSession":{let o;return o=t.session.id===e.session.id&&t.session.version.steps.find((({crossVersionId:t})=>t===e.step.crossVersionId))||ee(t.session),{...e,session:t.session,step:o}}case"goToStep":{const o=e.session.version.steps.find((e=>e.id===t.stepId));return o?{...e,step:o,contentType:"flow",autoFocusRequested:e.hasFocus||oe(o),scrollToTopRequested:!0,shouldLabelDialog:!e.hasFocus}:e}case"toggleMuted":return{...e,muted:!e.muted};case"speechPlaying":return{...e,speechPlaying:!0};case"speechStopped":return{...e,speechPlaying:!1};case"showFlow":return{...e,contentType:"flow",autoFocusRequested:!0,scrollToTopRequested:!0};case"showMenu":return{...e,contentType:"menu",autoFocusRequested:!0,scrollToTopRequested:!0};case"autoFocused":return{...e,autoFocusRequested:!1};case"focusIn":return{...e,hasFocus:!0};case"focusOut":return{...e,hasFocus:!1};case"scrolledToTop":return{...e,scrollToTopRequested:!1}}}function ee(e){const{currentStep:t}=e,{steps:o}=e.version;if(t){const e=o.find((({crossVersionId:e})=>e===t.crossVersionId));if(!e)throw new d("Session points to an unknown step: "+t.crossVersionId);return e}return te(e)}function te(e){const t=e.version.steps[0];if(!t)throw new d("Session has no current step and its version has no start step");return t}function oe(e){return ne(e)}function ne(e){return e.appearance===a.MODAL||e.appearance===a.BUBBLE&&e.backdrop||e.appearance===a.TOOLTIP&&e.tooltipTargetBlocked}const se=e.createContext(null),re=e.createContext(null);function le(){return e.useContext(se)}function ae(){return e.useContext(re)}export default K;export{K as FlowApp,re as FlowStateContext,Q as initialFlowState,ne as isStepModal,le as useFlowDispatch,ae as useFlowState};
package/FlowChrome.js CHANGED
@@ -1 +1 @@
1
- import{r as t}from"./vendor.react.js";import{u as e,F as o,S as a}from"./logomark.js";import{c as l,H as r,A as i,b as n,I as s,B as c,J as u}from"./userflow.js";import{f as d,b as p}from"./BubbleToolbar.js";import{o as m}from"./vendor.obj-str.js";import{p as f,j as h,q as b,s as g,r as w,h as T,e as E,a as v,g as M,t as L,M as y,m as k}from"./flow-condition-types.js";import{a as j,g as R}from"./stylesheets.js";import{a as B}from"./z-index.js";import{u as O}from"./vendor.react-i18next.js";var P=new URL("avatar-frame.css",import.meta.url).href;let x=!1;const I=[];let N,_=[];function H(t){_.push(t)}function C(){I.forEach((t=>t())),_.length>0&&(_.forEach((t=>t())),_=[]),S()}function S(){x&&(N=window.requestAnimationFrame(C))}function D(){}function U({selector:e,targetMoved:o,targetLost:a,onTargetClick:l,onTargetMouseEnter:r,onTargetMouseLeave:i}){const n=t.useRef(o),s=t.useRef(a),c=t.useRef(l),u=t.useRef(r),d=t.useRef(i);t.useLayoutEffect((()=>{n.current=o,s.current=a,c.current=l,u.current=r,d.current=i})),t.useLayoutEffect((()=>{let t=null,o=null,a=null,l=!1;const r=()=>{t=null,o=null,a=null,s.current()};if(!e)return void r();const i=()=>{if(!a||!t)return;const e=w(t);var l,i;o&&(i=e,(l=o).left===i.left&&l.top===i.top&&l.width===i.width&&l.height===i.height)||(o=e,0===e.width&&0===e.height?r():n.current({targetEl:t,targetRect:o,clipEl:a,viewportClipRect:F(a)}))};let p=!1;const m=()=>{var t;p||(p=!0,t=i,I.push(t),1===I.length&&(x=!0,S(),window.addEventListener("scroll",D)))},T=()=>{p&&(p=!1,function(t){const e=I.indexOf(t);e>=0&&(I.splice(e,1),0===I.length&&(x=!1,window.cancelAnimationFrame(N),window.removeEventListener("scroll",D)))}(i))},E=()=>{c.current&&c.current()},v=()=>{u.current&&u.current()},M=()=>{d.current&&d.current()},L=()=>{const o=t;t=h(e)?e:b(e),l&&t===o||(o&&(o.removeEventListener("click",E),o.removeEventListener("mouseenter",v),o.removeEventListener("mouseleave",M)),t?(m(),t.addEventListener("click",E),t.addEventListener("mouseenter",v),t.addEventListener("mouseleave",M),a=g(t)):(T(),r())),l=!0};L();const y=f(L);return()=>{y.disconnect(),T(),t&&(t.removeEventListener("click",E),t.removeEventListener("mouseenter",v),t.removeEventListener("mouseleave",M))}}),[e])}function F(t){T();const e=E(v()),o=E(M());if(t&&t!==document.documentElement){const a=w(t);return{top:Math.max(0,a.top),right:Math.min(o,a.right),bottom:Math.min(e,a.bottom),left:Math.max(0,a.left)}}return{top:0,right:o,bottom:e,left:0}}const A=({company:f,theme:b,position:w,absoluteWidth:x,absoluteHeight:I,stepKey:N,stepAppearance:_,width:H,backgroundImageUrl:C,tooltipSelector:S,allowMissingTooltipTarget:D,tooltipPlacement:F,backdrop:A,tooltipTargetBlocked:K,backdropPadding:q,zIndex:Y,onTooltipTargetClick:J,onTooltipTargetMissingChange:X,onModalBackdropClick:Q,onVisibleChange:Z,speaking:tt,noIframe:et,MadeWithUserflow:ot,minimizeOnAvatarClick:at,autoHide3pEnabled:lt,bubbleFrameRootRef:rt,frameWrapperHtmlAttributes:it,rootChildren:nt,children:st})=>{const ct=w||"absolute",ut=F||null,dt=q||"0",pt=ot||z,mt=B(),ft="fixed"===ct?null!=Y?Y:mt+1:1,ht=ft-1,{i18n:bt}=O(),gt=bt.dir(),wt=t.useRef(null),Tt=t.useRef(null),Et=t.useRef(null),[vt,Mt]=t.useState(null),Lt=t.useRef(null),yt=t.useRef(null),kt=t.useRef(null),jt=t.useRef(null),Rt=t.useRef(null),Bt=t.useRef(null),Ot=t.useRef(null),Pt=t.useRef(null),xt=t.useRef(null);t.useLayoutEffect((()=>{const t=wt.current.style;t.animation="none",t.visibility="hidden",t.position="absolute",t.top="-99999px",t.left="-99999px"}),[]);const{loaded:It}=j(window,d,b),[Nt,_t]=t.useState(!1),[Ht,Ct]=t.useState(!1),St=It&&Nt&&Ht;let[Dt,Ut]=t.useState(!1);_!==r.BUBBLE&&(at=!1,Dt=!1),t.useEffect((()=>{Ut(!1)}),[N]);const Ft=t.useRef({appearance:null,width:null,theme:b,bubbleFrameHeight:0,backdrop:!1,backdropPadding:"0",prevTooltipTargetParams:null,tooltipTargetParams:null,desiredTooltipPlacement:null,tooltipPlacement:null,lastReportedTooltipTargetMissing:!1,tooltipTargetMissing:!1,tooltipTargetMissingTimeout:void 0,stepKeyScrolledIntoView:void 0,targetScrolledIntoView:null}),[At,Wt]=t.useState(null),zt=null!=At&&St;t.useEffect((()=>{Z&&Z(zt)}),[Z,zt]);const Vt=t.useCallback((t=>{Ft.current.lastReportedTooltipTargetMissing!==t&&(Ft.current.lastReportedTooltipTargetMissing=t,X&&X(t))}),[X]),Gt=t.useCallback((({forceAppearanceLayout:t,forceUpdatePosition:e}={})=>{const o=wt.current,a=Tt.current,n=Et.current,d=yt.current,p=Lt.current,m=kt.current,f=jt.current,h=Rt.current,w=Bt.current,y=Ot.current,j=Pt.current,R=xt.current;if(!(o&&a&&n&&vt&&d&&p&&m&&f&&h&&w&&y&&j&&R))return;if(!St)return;const B=Ft.current,{tooltipTargetParams:O}=B;T();let P=_,C=!1;P!==r.TOOLTIP||D||O||(B.tooltipTargetMissing?(P=r.BUBBLE,C=!0):P=null);const S=P!==B.appearance,U=H!==B.width;if((t||S||U||b!==B.theme||A!=B.backdrop||dt!=B.backdropPadding||ut!==B.desiredTooltipPlacement)&&(B.appearance=P,B.width=H,B.theme=b,B.backdrop=A,B.backdropPadding=dt,B.desiredTooltipPlacement=ut,e=!0,function({layoutState:{appearance:t,theme:e,backdrop:o,tooltipTargetMissing:a},width:l,position:n,absoluteWidth:c,root:u,bubble:d,bubbleFrameRoot:p,avatar:m,avatarNotch:f,modalBackdrop:h,dir:b}){const g="absolute"===n?c||1024:E(M()),{avatarSize:w,bubblePlacement:T}=e;let v=e.bubbleWidth,L=null,y=null,k=`userflowjs-bubble-frame-root userflowjs-bubble-frame-root--appearance-${t?.toLowerCase()}`,j="hidden",R=null,B=null,O=null,P=null,x="userflowjs-bubble__avatar-notch",I="hidden",N=null,_=null,H=null,C=null,S="userflowjs-modal-backdrop";(t===r.MODAL||!a&&t===r.BUBBLE&&o)&&(S+=" userflowjs-modal-backdrop--visible");switch(t){case r.BUBBLE:if(e.avatarType!==i.NONE){j="",I="",T===s.TOP_LEFT||T===s.TOP_CENTER||T===s.TOP_RIGHT?(L=w+20,R=0,N=-40,x+=" userflowjs-bubble__avatar-notch--top"):(y=w+20,O=0,H=-40,x+=" userflowjs-bubble__avatar-notch--bottom");const t=T===s.TOP_LEFT||T===s.TOP_CENTER||T===s.BOTTOM_LEFT||T===s.BOTTOM_CENTER||T===s.CENTER;"ltr"===b&&t||"rtl"===b&&!t?(P=0,C=w,x+=" userflowjs-bubble__avatar-notch--left"):(B=0,_=w,x+=" userflowjs-bubble__avatar-notch--right")}break;case r.MODAL:v=e.modalWidth,e.avatarType!==i.NONE&&(j="",P=`calc(50% - ${w/2}px)`,R=-w/2);break;case r.TOOLTIP:v=e.tooltipWidth}null!=l&&(v=l);v=Math.min(v,g-32),u.classList.toggle("userflowjs-flow-chrome--position-absolute","absolute"===n),u.classList.toggle("userflowjs-flow-chrome--position-relative","relative"===n),u.classList.toggle("userflowjs-flow-chrome--position-fixed","fixed"===n),u.classList.toggle("userflowjs-flow-chrome--appearance-modal",t===r.MODAL);const D=null!=t&&t!==r.HIDDEN;u.style.position="",u.style.top="",u.style.left="",u.style.visibility=D?"":"hidden",u.style.animation=D?"":"none",V(d,"width",E(v)),V(d,"padding-top",L),V(d,"padding-bottom",y),p.className=k,V(m,"width",E(e.avatarSize)),V(m,"height",E(e.avatarSize)),m.style.visibility=j,V(m,"top",R),V(m,"right",B),V(m,"bottom",O),V(m,"left",P),f.className=x,f.style.visibility=I,V(f,"top",N),V(f,"right",_),V(f,"bottom",H),V(f,"left",C),h.className=S}({layoutState:B,width:H,position:ct,absoluteWidth:x,root:o,bubble:a,bubbleFrameRoot:vt,avatar:d,avatarNotch:p,modalBackdrop:R,dir:gt})),!et){const t=vt.offsetHeight,o=v()-2*(M()<800?0:16)-(P===r.BUBBLE&&b.avatarType!==i.NONE?20+b.avatarSize:0),a=Math.min(t,o);if(P&&a!==B.bubbleFrameHeight){if(B.bubbleFrameHeight=a,V(n,"height",E(a)),L(n)&&n.contentDocument){n.contentDocument.documentElement.style.overflowY=t<=o?"hidden":"scroll"}e=!0}}if(e&&P){let t=S;if(P===r.TOOLTIP){(B.tooltipTargetParams&&B.tooltipTargetParams.targetEl)!==(B.prevTooltipTargetParams&&B.prevTooltipTargetParams.targetEl)&&(t=!0)}B.prevTooltipTargetParams=B.tooltipTargetParams,function({layoutState:t,animateIn:e,position:o,absoluteWidth:a,absoluteHeight:l,desiredTooltipPlacement:i,root:n,bubble:d,tooltipNotch:p,tooltipBackdrop:m,tooltipBlockTop:f,tooltipBlockRight:h,tooltipBlockBottom:b,tooltipBlockLeft:g,dir:w}){const{appearance:T,theme:L,tooltipTargetParams:y,backdrop:j,backdropPadding:R}=t,{bubblePlacement:B}=L,O=16,P=L.tooltipNotchSize,x=10,{width:I,height:N}=d.getBoundingClientRect(),_="absolute"===o?a||1024:E(M()),H="absolute"===o?l||768:E(v());let C=0,S=0,D="userflowjs-bubble__tooltip-notch",U="hidden",F=null,A=null,W=null,z=null,K="userflowjs-tooltip-backdrop",q=null,Y=null,J=null,X=null,Q=null,Z=null,tt=null,et=null,ot="userflowjs-tooltip-block userflowjs-tooltip-block--top",at=null,lt=null,rt="userflowjs-tooltip-block userflowjs-tooltip-block--right",it=null,nt=null,st="userflowjs-tooltip-block userflowjs-tooltip-block--bottom",ct=null,ut=null,dt="userflowjs-tooltip-block userflowjs-tooltip-block--left",pt=null,mt=null;switch(T){case r.BUBBLE:C=B===s.TOP_LEFT||B===s.BOTTOM_LEFT?L.bubbleX:B===s.TOP_CENTER||B===s.CENTER||B===s.BOTTOM_CENTER?(_-I)/2:_-I-L.bubbleX,S=B===s.TOP_LEFT||B===s.TOP_CENTER||B===s.TOP_RIGHT?L.bubbleY:B===s.CENTER?(H-N)/2:H-N-L.bubbleY,"rtl"===w&&(C=_-C-I),C=Math.max(0,Math.min(_-I,C)),S=Math.max(0,Math.min(H-N,S));break;case r.MODAL:C=O+(_-2*O-I)/2,S=O+(H-2*O-N)/2;break;case r.TOOLTIP:{let e;if(y){let{targetRect:a,viewportClipRect:l}=y;if("absolute"===o){const t=n.offsetParent.getBoundingClientRect();l={top:0,right:_,bottom:H,left:0},a={top:a.top-t.top,right:a.right-t.left,bottom:a.bottom-t.top,left:a.left-t.left,width:a.width,height:a.height}}let r=0;if(j){const{paddingTop:t,paddingRight:e,paddingBottom:o,paddingLeft:l}=function(t){if(!t||"0"===t)return{paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0};const e=t.trim().split(" ");if(1===e.length){const t=$(e[0]);return{paddingTop:t,paddingRight:t,paddingBottom:t,paddingLeft:t}}if(2===e.length){const t=$(e[0]),o=$(e[1]);return{paddingTop:t,paddingRight:o,paddingBottom:t,paddingLeft:o}}return{paddingTop:$(e[0]),paddingRight:$(e[1]),paddingBottom:$(e[2]),paddingLeft:$(e[3])}}(R);a={top:a.top-t,right:a.right+e,bottom:a.bottom+o,left:a.left-l,width:a.width+l+e,height:a.height+t+o},r=Math.min(t,e,o,l)}const s=a,d=L.backdropHighlightType==c.OUTSIDE?L.backdropHighlightSpread:0;if(j&&d&&(a={top:a.top-d,right:a.right+d,bottom:a.bottom+d,left:a.left-d,width:a.width+2*d,height:a.height+2*d}),e=function({targetRect:t,bubbleWidth:e,bubbleHeight:o,containerWidth:a,containerHeight:l,viewportClipRect:r,tooltipNotchSize:i,currentTooltipPlacement:n,desiredTooltipPlacement:s}){if(t.bottom<=r.top)return o+i<=l-r.top?u.BELOW:u.ABOVE;if(t.top>=r.bottom)return o+i<=r.bottom?u.ABOVE:u.BELOW;if(t.right<=r.left)return e+i<=a-r.left?u.RIGHT:u.LEFT;if(t.left>=r.right)return e+i<=r.right?u.LEFT:u.RIGHT;const c=n=>{const s=t.left+t.width/2,c=s>=r.left&&s<=r.right,d=t.top+t.height/2,p=d>=r.top&&d<=r.bottom;switch(n){case u.BELOW:return l-t.bottom>o+i&&c;case u.ABOVE:return t.top>o+i&&c;case u.RIGHT:return a-t.right>e+i&&p;case u.LEFT:return t.left>e+i&&p}};if(s&&c(s))return s;if(n&&c(n))return n;const d=[{placement:u.BELOW,dist:t.top},{placement:u.ABOVE,dist:l-t.bottom},{placement:u.RIGHT,dist:t.left},{placement:u.LEFT,dist:a-t.right}];d.sort(((t,e)=>t.dist-e.dist));for(const{placement:u}of d)if(c(u))return u;return u.BELOW}({targetRect:a,bubbleWidth:I,bubbleHeight:N,containerWidth:_,containerHeight:H,viewportClipRect:l,tooltipNotchSize:P,currentTooltipPlacement:t.tooltipPlacement,desiredTooltipPlacement:i}),e===u.BELOW||e===u.ABOVE?(C=a.left+a.width/2-I/2,C=Math.max(O,Math.min(_-I-O,C)),z=Math.max(x,Math.min(I-x-2*P,a.left+a.width/2-P-C)),e===u.BELOW?F=2*-P:W=2*-P):e===u.RIGHT?(C=a.right+P,C=Math.max(C,l.left+P),C=Math.min(C,l.right+P),C=Math.max(C,P),C=Math.min(C,_-I)):(C=a.left-P-I,C=Math.max(C,l.left-I-P),C=Math.min(C,l.right-I-P),C=Math.max(C,0),C=Math.min(C,_-I-P)),e===u.LEFT||e===u.RIGHT?(S=a.top+a.height/2-N/2,S=Math.max(O,Math.min(H-N-O,S)),F=Math.max(x,Math.min(N-x-2*P,a.top+a.height/2-P-S)),e===u.LEFT?A=2*-P:z=2*-P):e===u.BELOW?(S=a.bottom+P,S=Math.max(S,l.top+P),S=Math.min(S,l.bottom+P),S=Math.max(S,P),S=Math.min(S,H-N)):(S=a.top-P-N,S=Math.max(S,l.top-N-P),S=Math.min(S,l.bottom-N-P),S=Math.max(S,0),S=Math.min(S,H-N-P)),j){const t=window.getComputedStyle(y.targetEl);q=Math.max(0,s.top),Y=Math.max(0,_-s.right),J=Math.max(0,H-s.bottom),X=Math.max(0,s.left),Q=Math.max(0,k(t.borderTopLeftRadius)+r),Z=Math.max(0,k(t.borderTopRightRadius)+r),tt=Math.max(0,k(t.borderBottomRightRadius)+r),et=Math.max(0,k(t.borderBottomLeftRadius)+r),at=Math.max(0,s.right),lt=Math.max(0,s.top),it=Math.max(0,s.right),nt=Math.max(0,s.bottom),ct=Math.max(0,s.left),ut=Math.max(0,s.bottom),pt=Math.max(0,s.left),mt=Math.max(0,s.top)}}else e=i||u.BELOW,e!==u.BELOW&&e!==u.ABOVE||(z=I/2-P,e===u.BELOW?F=2*-P:W=2*-P),e!==u.LEFT&&e!==u.RIGHT||(F=N/2-P,e===u.LEFT?A=2*-P:z=2*-P);t.tooltipPlacement=e,D+=` userflowjs-bubble__tooltip-notch--${e.toLowerCase()}`,U="",j&&(K+=" userflowjs-tooltip-backdrop--visible",ot+=" userflowjs-tooltip-block--visible",rt+=" userflowjs-tooltip-block--visible",st+=" userflowjs-tooltip-block--visible",dt+=" userflowjs-tooltip-block--visible");break}}d.style.transition="";let ft=C,ht=S;if(e&&(d.style.opacity="0",T===r.TOOLTIP)){const e=24;switch(t.tooltipPlacement){case u.BELOW:S+=e;break;case u.ABOVE:S-=e;break;case u.RIGHT:C+=e;break;case u.LEFT:C-=e}}"relative"!==o&&G(d,C,S);if(p.className=D,p.style.visibility=U,V(p,"top",F),V(p,"right",A),V(p,"bottom",W),V(p,"left",z),m.className=K,V(m,"top",q),V(m,"right",Y),V(m,"bottom",J),V(m,"left",X),V(m,"border-top-left-radius",Q),V(m,"border-top-right-radius",Z),V(m,"border-bottom-right-radius",tt),V(m,"border-bottom-left-radius",et),f.className=ot,V(f,"width",at),V(f,"height",lt),h.className=rt,V(h,"left",it),V(h,"height",nt),b.className=st,V(b,"left",ct),V(b,"top",ut),g.className=dt,V(g,"width",pt),V(g,"top",mt),e){d.offsetWidth;const t="opacity 250ms linear";T===r.TOOLTIP?d.style.transition=`${t}, transform 500ms cubic-bezier(0.25, 0.8, 0.5, 1)`:d.style.transition=t,d.style.opacity="1","relative"!==o&&G(d,ft,ht)}}({layoutState:B,animateIn:t,position:ct,absoluteWidth:x,absoluteHeight:I,desiredTooltipPlacement:ut,root:o,bubble:a,tooltipNotch:m,tooltipBackdrop:f,tooltipBlockTop:h,tooltipBlockRight:w,tooltipBlockBottom:y,tooltipBlockLeft:j,dir:gt})}if(P===r.TOOLTIP){const t=O&&O.targetEl;t&&B.stepKeyScrolledIntoView!==N&&B.targetScrolledIntoView!==t&&(B.stepKeyScrolledIntoView=N,B.targetScrolledIntoView=t,function(t){if(l.customScrollIntoView)return void l.customScrollIntoView(t);const{scrollPadding:e}=l;if(e&&g(t)===document.scrollingElement){const o=e.top||0,a=e.right||0,l=e.bottom||0,r=e.left||0;let i=0,n=0;const s=t.getBoundingClientRect(),c=M(),u=v();if(s.top<o?i=s.top-o:s.bottom>u-l&&(i=s.bottom-u+l),s.left<r?n=s.left-r:s.right>c-a&&(n=s.right-c+a),0!=i||0!=n)return void window.scrollBy({top:i,left:n,behavior:"smooth"})}try{t.scrollIntoView({behavior:"smooth",block:"nearest"})}catch(o){console.warn("Userflow.js: scrollIntoView error (falling back to no options).",o),t.scrollIntoView()}}(t))}else B.stepKeyScrolledIntoView=void 0,B.targetScrolledIntoView=null;Vt(C),Wt(P)}),[St,vt,N,_,H,b,ct,x,I,D,ut,A,dt,et,Vt,gt]),$t=t.useRef(Gt);$t.current=Gt;const Kt=t.useRef(!1);t.useEffect((()=>{const t=()=>{Kt.current=!0};return window.addEventListener("pagehide",t),()=>window.removeEventListener("pagehide",t)}),[]);const qt=()=>{window.clearTimeout(Ft.current.tooltipTargetMissingTimeout),Ft.current.tooltipTargetMissingTimeout=void 0};t.useEffect((()=>qt),[]);const Yt=t.useCallback((()=>{const t=Ft.current;if(t.tooltipTargetParams=null,D||(t.tooltipPlacement=null),_!==r.TOOLTIP)return qt(),void(t.tooltipTargetMissing=!1);if(!D&&!t.tooltipTargetMissingTimeout){t.tooltipTargetMissing=!1;const e=!S||h(S)||S.type!==n.AUTO||S.autoData?1e3*parseFloat(b.tooltipMissingToleranceSeconds):1;t.tooltipTargetMissingTimeout=window.setTimeout((()=>{if(!Kt.current){if(S&&!h(S)){let t=S.autoData;if(S.autoData)try{t=JSON.parse(S.autoData)}catch(e){}console.warn("Userflow.js: Tooltip target not found on page.\n",{type:S.type,autoData:t,excludeText:S.excludeText,precision:S.precision,text:S.text,css:S.css})}qt(),t.tooltipTargetMissing=!0,$t.current()}}),e)}$t.current()}),[_,D,S,b.tooltipMissingToleranceSeconds]),Jt=t.useCallback((t=>{const e=Ft.current;qt(),e.tooltipTargetParams&&e.tooltipTargetParams.targetEl!==t.targetEl&&(e.tooltipPlacement=null),e.tooltipTargetParams=t,Gt({forceUpdatePosition:!0})}),[Gt]);U({selector:_===r.TOOLTIP&&S||null,targetMoved:Jt,targetLost:Yt,onTargetClick:J});const Xt=t.useCallback((()=>Gt({forceAppearanceLayout:!0})),[Gt]);e(Xt),t.useEffect((()=>{if(!vt||et||"function"!=typeof y)return;let t;const e=new y((()=>{t||(t=window.requestAnimationFrame((()=>{t=void 0,$t.current()})))}));return e.observe(vt,{childList:!0,attributes:!0,subtree:!0}),()=>{e.disconnect(),t&&window.cancelAnimationFrame(t)}}),[vt,et]),t.useLayoutEffect((()=>{$t.current()})),t.useLayoutEffect((()=>{"absolute"===ct&&Gt({forceAppearanceLayout:!0})}),[ct,x,I]);const Qt=t=>{t.preventDefault(),t.stopPropagation()};return function(e,o){const a=window.Intercom;t.useEffect((()=>{if(o&&e.autoHideIntercom&&"function"==typeof a&&!l.autoHide3pDisabled){try{a("update",{hide_default_launcher:!0})}catch(t){console.warn("Userflow.js: Error when hiding Intercom launcher",t)}return()=>{if(!l.autoHide3pDisabled)try{a("update",{hide_default_launcher:!1})}catch(t){console.warn("Userflow.js: Error when unhiding Intercom launcher",t)}}}}),[a,e.autoHideIntercom,o]);const r=window.$crisp;t.useEffect((()=>{if(o&&e.autoHideCrisp&&r&&!l.autoHide3pDisabled){try{r.push(["do","chat:hide"])}catch(t){console.warn("Userflow.js: Error when hiding Crisp Chat",t)}return()=>{if(!l.autoHide3pDisabled)try{r.push(["do","chat:show"])}catch(t){console.warn("Userflow.js: Error when unhiding Crisp Chat",t)}}}}),[r,e.autoHideCrisp,o]);const i=window.HubSpotConversations;t.useEffect((()=>{if(o&&e.autoHideHubspot&&i&&!l.autoHide3pDisabled){try{i.widget.remove()}catch(t){console.warn("Userflow.js: Error when hiding HubSpot Chat",t)}return()=>{if(!l.autoHide3pDisabled)try{i.widget.load()}catch(t){console.warn("Userflow.js: Error when unhiding HubSpot Chat",t)}}}}),[i,e.autoHideHubspot,o]);const n=window.drift;t.useEffect((()=>{if(o&&e.autoHideDrift&&n&&!l.autoHide3pDisabled){try{n.api.widget.hide()}catch(t){console.warn("Userflow.js: Error when hiding Drift Chat",t)}return()=>{if(!l.autoHide3pDisabled)try{n.api.widget.show()}catch(t){console.warn("Userflow.js: Error when unhiding Drift Chat",t)}}}}),[n,e.autoHideDrift,o])}(b,!!lt&&At===r.BUBBLE),t.createElement("div",{ref:wt,"data-testid":"flow-chrome",className:"userflowjs-flow-chrome userflowjs-theme-root",style:R(b),dir:gt},t.createElement("div",{className:"userflowjs-bubble",ref:Tt,style:{zIndex:ft}},t.createElement("div",{className:m({"userflowjs-bubble-outline":!0,[`userflowjs-bubble-outline--bubble-placement-${(b.bubblePlacement||"").toLowerCase().replace(/_/,"-")}`]:!0,"userflowjs-bubble-outline--minimizable":!!at,"userflowjs-bubble-outline--minimized":Dt})},t.createElement("div",{className:"userflowjs-bubble__frame-wrapper",...it},t.createElement(o,{className:"userflowjs-bubble__frame",elRef:Et,stylesheet:p,theme:b,onStylesheetsLoad:_t,noIframe:et},t.createElement("div",{className:"userflowjs-bubble-frame-root",ref:t=>{rt&&rt(t),Mt(t)},style:C?{backgroundImage:`url("${encodeURI(C)}")`}:void 0},st,f.flowBranding&&t.createElement("div",{className:"userflowjs-bubble-made-with-userflow"},t.createElement("div",{className:"userflowjs-bubble-made-with-userflow__absolute"},t.createElement(pt,{company:f},t.createElement(a,null),t.createElement("div",null,"Made with Userflow"))))))),t.createElement("div",{ref:Lt,className:"userflowjs-bubble__avatar-notch"})),t.createElement(o,{className:m({"userflowjs-bubble__avatar":!0,"userflowjs-bubble__avatar--minimizable":!!at,"userflowjs-bubble__avatar--speaking":!!tt}),elRef:yt,stylesheet:P,theme:b,onStylesheetsLoad:Ct,noIframe:et,ariaHidden:!0},t.createElement("div",{className:m({"userflowjs-avatar-frame-root":!0,"userflowjs-avatar-frame-root--minimizable":!!at}),onClick:at?()=>Ut((t=>!t)):void 0},t.createElement(W,{theme:b}))),t.createElement("div",{ref:kt,className:"userflowjs-bubble__tooltip-notch"})),t.createElement("div",{ref:jt,className:"userflowjs-tooltip-backdrop",onMouseDown:Qt,style:{zIndex:ht,pointerEvents:K?void 0:"none"}}),t.createElement("div",{ref:Rt,className:"userflowjs-tooltip-block",onMouseDown:Qt,style:{zIndex:ht}}),t.createElement("div",{ref:Bt,className:"userflowjs-tooltip-block",onMouseDown:Qt,style:{zIndex:ht}}),t.createElement("div",{ref:Ot,className:"userflowjs-tooltip-block",onMouseDown:Qt,style:{zIndex:ht}}),t.createElement("div",{ref:Pt,className:"userflowjs-tooltip-block",onMouseDown:Qt,style:{zIndex:ht}}),t.createElement("div",{ref:xt,className:"userflowjs-modal-backdrop",onMouseDown:Qt,onClick:Q,style:{zIndex:ht}}),nt&&nt({visible:zt,bubbleFrame:Et.current}))},W=({theme:e})=>{const o="https://js.userflow.com/cartoon-avatars-no-bg/";let a;return a=e.avatarType===i.ASSET&&e.avatarAsset?e.avatarAsset.assetUrl:e.avatarType===i.CARTOON&&e.avatarName?o+e.avatarName+".svg?3":e.avatarType===i.URL&&e.avatarUrl?e.avatarUrl:o+"none.svg",t.createElement("img",{src:a,alt:""})},z=({company:e,children:o})=>t.createElement("a",{href:"https://userflow.com/?utm_source=made-with-userflow&utm_medium=link&utm_campaign=made-with-userflow-"+e.slug,target:"_blank",rel:"noopener noreferrer"},o);function V(t,e,o){null==o?t.style.removeProperty(e):t.style.setProperty(e,"number"==typeof o?o+"px":o,"important")}function G(t,e,o){e=Math.round(e),o=Math.round(o),t.style.transform=`translate3d(${e}px, ${o}px, 0px)`}function $(t){const e=parseInt(t,10);return isNaN(e)?0:e}export{A as F,H as r,U as u};
1
+ import{r as t}from"./vendor.react.js";import{u as e,F as o}from"./use-window-resize.js";import{c as a,J as l,A as r,b as i,K as s,y as n,L as c}from"./userflow.js";import{a as u,f as d}from"./flow-host.styl.js";import{b as p}from"./bubble-frame.styl.js";import{S as m}from"./logomark.js";import{o as b}from"./vendor.obj-str.js";import{u as f}from"./use-selector-element-monitoring.js";import{k as h,a as g,g as w,l as T,u as E,e as v,M as y,s as M,j}from"./flow-condition-types.js";import{a as k,g as L}from"./stylesheets.js";import{u as B}from"./vendor.react-i18next.js";var R=new URL("avatar-frame.css",import.meta.url).href;const O=({company:O,theme:H,position:C,absoluteWidth:S,absoluteHeight:D,stepKey:U,stepAppearance:F,width:W,backgroundImageUrl:A,tooltipSelector:z,allowMissingTooltipTarget:V,tooltipPlacement:G,backdrop:$,tooltipTargetBlocked:K,backdropPadding:Y,zIndex:J,onTooltipTargetClick:X,onTooltipTargetMissingChange:q,onModalBackdropClick:Q,onVisibleChange:Z,speaking:tt,noIframe:et,MadeWithUserflow:ot,minimizeOnAvatarClick:at,autoHide3pEnabled:lt,bubbleFrameRootRef:rt,frameWrapperHtmlAttributes:it,rootChildren:st,children:nt})=>{const ct=C||"absolute",ut=G||null,dt=Y||"0",pt=ot||x,mt=u(),bt="fixed"===ct?null!=J?J:mt+1:1,ft=bt-1,{i18n:ht}=B(),gt=ht.dir(),wt=t.useRef(null),Tt=t.useRef(null),Et=t.useRef(null),[vt,yt]=t.useState(null),Mt=t.useRef(null),jt=t.useRef(null),kt=t.useRef(null),Lt=t.useRef(null),Bt=t.useRef(null),Rt=t.useRef(null),Ot=t.useRef(null),Pt=t.useRef(null),xt=t.useRef(null);t.useLayoutEffect((()=>{const t=wt.current.style;t.animation="none",t.visibility="hidden",t.position="absolute",t.top="-99999px",t.left="-99999px"}),[]);const{loaded:It}=k(window,d,H),[Nt,_t]=t.useState(!1),[Ht,Ct]=t.useState(!1),St=It&&Nt&&Ht;let[Dt,Ut]=t.useState(!1);F!==l.BUBBLE&&(at=!1,Dt=!1),t.useEffect((()=>{Ut(!1)}),[U]);const Ft=t.useRef({appearance:null,width:null,theme:H,bubbleFrameHeight:0,backdrop:!1,backdropPadding:"0",prevTooltipTargetParams:null,tooltipTargetParams:null,desiredTooltipPlacement:null,tooltipPlacement:null,lastReportedTooltipTargetMissing:!1,tooltipTargetMissing:!1,tooltipTargetMissingTimeout:void 0,stepKeyScrolledIntoView:void 0,targetScrolledIntoView:null}),[Wt,At]=t.useState(null),zt=null!=Wt&&St;t.useEffect((()=>{Z&&Z(zt)}),[Z,zt]);const Vt=t.useCallback((t=>{Ft.current.lastReportedTooltipTargetMissing!==t&&(Ft.current.lastReportedTooltipTargetMissing=t,q&&q(t))}),[q]),Gt=t.useCallback((({forceAppearanceLayout:t,forceUpdatePosition:e}={})=>{const o=wt.current,i=Tt.current,u=Et.current,d=jt.current,p=Mt.current,m=kt.current,b=Lt.current,f=Bt.current,v=Rt.current,y=Ot.current,k=Pt.current,L=xt.current;if(!(o&&i&&u&&vt&&d&&p&&m&&b&&f&&v&&y&&k&&L))return;if(!St)return;const B=Ft.current,{tooltipTargetParams:R}=B;h();let O=F,P=!1;O!==l.TOOLTIP||V||R||(B.tooltipTargetMissing?(O=l.BUBBLE,P=!0):O=null);const x=O!==B.appearance,C=W!==B.width;if((t||x||C||H!==B.theme||$!=B.backdrop||dt!=B.backdropPadding||ut!==B.desiredTooltipPlacement)&&(B.appearance=O,B.width=W,B.theme=H,B.backdrop=$,B.backdropPadding=dt,B.desiredTooltipPlacement=ut,e=!0,function({layoutState:{appearance:t,theme:e,backdrop:o,tooltipTargetMissing:a},width:i,position:n,absoluteWidth:c,root:u,bubble:d,bubbleFrameRoot:p,avatar:m,avatarNotch:b,modalBackdrop:f,dir:h}){const g="absolute"===n?c||1024:T(w()),{avatarSize:E,bubblePlacement:v}=e;let y=e.bubbleWidth,M=null,j=null,k=`userflowjs-bubble-frame-root userflowjs-bubble-frame-root--appearance-${t?.toLowerCase()}`,L="hidden",B=null,R=null,O=null,P=null,x="userflowjs-bubble__avatar-notch",N="hidden",_=null,H=null,C=null,S=null,D="userflowjs-modal-backdrop";(t===l.MODAL||!a&&t===l.BUBBLE&&o)&&(D+=" userflowjs-modal-backdrop--visible");switch(t){case l.BUBBLE:if(e.avatarType!==r.NONE){L="",N="",v===s.TOP_LEFT||v===s.TOP_CENTER||v===s.TOP_RIGHT?(M=E+20,B=0,_=-40,x+=" userflowjs-bubble__avatar-notch--top"):(j=E+20,O=0,C=-40,x+=" userflowjs-bubble__avatar-notch--bottom");const t=v===s.TOP_LEFT||v===s.TOP_CENTER||v===s.BOTTOM_LEFT||v===s.BOTTOM_CENTER||v===s.CENTER;"ltr"===h&&t||"rtl"===h&&!t?(P=0,S=E,x+=" userflowjs-bubble__avatar-notch--left"):(R=0,H=E,x+=" userflowjs-bubble__avatar-notch--right")}break;case l.MODAL:y=e.modalWidth,e.avatarType!==r.NONE&&(L="",P=`calc(50% - ${E/2}px)`,B=-E/2);break;case l.TOOLTIP:y=e.tooltipWidth}null!=i&&(y=i);y=Math.min(y,g-32),u.classList.toggle("userflowjs-flow-chrome--position-absolute","absolute"===n),u.classList.toggle("userflowjs-flow-chrome--position-relative","relative"===n),u.classList.toggle("userflowjs-flow-chrome--position-fixed","fixed"===n),u.classList.toggle("userflowjs-flow-chrome--appearance-modal",t===l.MODAL);const U=null!=t&&t!==l.HIDDEN;u.style.position="",u.style.top="",u.style.left="",u.style.visibility=U?"":"hidden",u.style.animation=U?"":"none",I(d,"width",T(y)),I(d,"padding-top",M),I(d,"padding-bottom",j),p.className=k,I(m,"width",T(e.avatarSize)),I(m,"height",T(e.avatarSize)),m.style.visibility=L,I(m,"top",B),I(m,"right",R),I(m,"bottom",O),I(m,"left",P),b.className=x,b.style.visibility=N,I(b,"top",_),I(b,"right",H),I(b,"bottom",C),I(b,"left",S),f.className=D}({layoutState:B,width:W,position:ct,absoluteWidth:S,root:o,bubble:i,bubbleFrameRoot:vt,avatar:d,avatarNotch:p,modalBackdrop:L,dir:gt})),!et){const t=vt.offsetHeight,o=g()-2*(w()<800?0:16)-(O===l.BUBBLE&&H.avatarType!==r.NONE?20+H.avatarSize:0),a=Math.min(t,o);if(O&&a!==B.bubbleFrameHeight){if(B.bubbleFrameHeight=a,I(u,"height",T(a)),E(u)&&u.contentDocument){u.contentDocument.documentElement.style.overflowY=t<=o?"hidden":"scroll"}e=!0}}if(e&&O){let t=x;if(O===l.TOOLTIP){(B.tooltipTargetParams&&B.tooltipTargetParams.targetEl)!==(B.prevTooltipTargetParams&&B.prevTooltipTargetParams.targetEl)&&(t=!0)}B.prevTooltipTargetParams=B.tooltipTargetParams,function({layoutState:t,animateIn:e,position:o,absoluteWidth:a,absoluteHeight:r,desiredTooltipPlacement:i,root:u,bubble:d,tooltipNotch:p,tooltipBackdrop:m,tooltipBlockTop:b,tooltipBlockRight:f,tooltipBlockBottom:h,tooltipBlockLeft:E,dir:v}){const{appearance:y,theme:j,tooltipTargetParams:k,backdrop:L,backdropPadding:B}=t,{bubblePlacement:R}=j,O=16,P=j.tooltipNotchSize,x=10,{width:H,height:C}=d.getBoundingClientRect(),S="absolute"===o?a||1024:T(w()),D="absolute"===o?r||768:T(g());let U=0,F=0,W="userflowjs-bubble__tooltip-notch",A="hidden",z=null,V=null,G=null,$=null,K="userflowjs-tooltip-backdrop",Y=null,J=null,X=null,q=null,Q=null,Z=null,tt=null,et=null,ot="userflowjs-tooltip-block userflowjs-tooltip-block--top",at=null,lt=null,rt="userflowjs-tooltip-block userflowjs-tooltip-block--right",it=null,st=null,nt="userflowjs-tooltip-block userflowjs-tooltip-block--bottom",ct=null,ut=null,dt="userflowjs-tooltip-block userflowjs-tooltip-block--left",pt=null,mt=null;switch(y){case l.BUBBLE:U=R===s.TOP_LEFT||R===s.BOTTOM_LEFT?j.bubbleX:R===s.TOP_CENTER||R===s.CENTER||R===s.BOTTOM_CENTER?(S-H)/2:S-H-j.bubbleX,F=R===s.TOP_LEFT||R===s.TOP_CENTER||R===s.TOP_RIGHT?j.bubbleY:R===s.CENTER?(D-C)/2:D-C-j.bubbleY,"rtl"===v&&(U=S-U-H),U=Math.max(0,Math.min(S-H,U)),F=Math.max(0,Math.min(D-C,F));break;case l.MODAL:U=O+(S-2*O-H)/2,F=O+(D-2*O-C)/2;break;case l.TOOLTIP:{let e;if(k){let{targetRect:a,viewportClipRect:l}=k;if("absolute"===o){const t=u.offsetParent.getBoundingClientRect();l={top:0,right:S,bottom:D,left:0},a={top:a.top-t.top,right:a.right-t.left,bottom:a.bottom-t.top,left:a.left-t.left,width:a.width,height:a.height}}let r=0;if(L){const{paddingTop:t,paddingRight:e,paddingBottom:o,paddingLeft:l}=function(t){if(!t||"0"===t)return{paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0};const e=t.trim().split(" ");if(1===e.length){const t=_(e[0]);return{paddingTop:t,paddingRight:t,paddingBottom:t,paddingLeft:t}}if(2===e.length){const t=_(e[0]),o=_(e[1]);return{paddingTop:t,paddingRight:o,paddingBottom:t,paddingLeft:o}}return{paddingTop:_(e[0]),paddingRight:_(e[1]),paddingBottom:_(e[2]),paddingLeft:_(e[3])}}(B);a={top:a.top-t,right:a.right+e,bottom:a.bottom+o,left:a.left-l,width:a.width+l+e,height:a.height+t+o},r=Math.min(t,e,o,l)}const s=a,d=j.backdropHighlightType==n.OUTSIDE?j.backdropHighlightSpread:0;if(L&&d&&(a={top:a.top-d,right:a.right+d,bottom:a.bottom+d,left:a.left-d,width:a.width+2*d,height:a.height+2*d}),e=function({targetRect:t,bubbleWidth:e,bubbleHeight:o,containerWidth:a,containerHeight:l,viewportClipRect:r,tooltipNotchSize:i,currentTooltipPlacement:s,desiredTooltipPlacement:n}){if(t.bottom<=r.top)return o+i<=l-r.top?c.BELOW:c.ABOVE;if(t.top>=r.bottom)return o+i<=r.bottom?c.ABOVE:c.BELOW;if(t.right<=r.left)return e+i<=a-r.left?c.RIGHT:c.LEFT;if(t.left>=r.right)return e+i<=r.right?c.LEFT:c.RIGHT;const u=s=>{const n=t.left+t.width/2,u=n>=r.left&&n<=r.right,d=t.top+t.height/2,p=d>=r.top&&d<=r.bottom;switch(s){case c.BELOW:return l-t.bottom>o+i&&u;case c.ABOVE:return t.top>o+i&&u;case c.RIGHT:return a-t.right>e+i&&p;case c.LEFT:return t.left>e+i&&p}};if(n&&u(n))return n;if(s&&u(s))return s;const d=[{placement:c.BELOW,dist:t.top},{placement:c.ABOVE,dist:l-t.bottom},{placement:c.RIGHT,dist:t.left},{placement:c.LEFT,dist:a-t.right}];d.sort(((t,e)=>t.dist-e.dist));for(const{placement:c}of d)if(u(c))return c;return c.BELOW}({targetRect:a,bubbleWidth:H,bubbleHeight:C,containerWidth:S,containerHeight:D,viewportClipRect:l,tooltipNotchSize:P,currentTooltipPlacement:t.tooltipPlacement,desiredTooltipPlacement:i}),e===c.BELOW||e===c.ABOVE?(U=a.left+a.width/2-H/2,U=Math.max(O,Math.min(S-H-O,U)),$=Math.max(x,Math.min(H-x-2*P,a.left+a.width/2-P-U)),e===c.BELOW?z=2*-P:G=2*-P):e===c.RIGHT?(U=a.right+P,U=Math.max(U,l.left+P),U=Math.min(U,l.right+P),U=Math.max(U,P),U=Math.min(U,S-H)):(U=a.left-P-H,U=Math.max(U,l.left-H-P),U=Math.min(U,l.right-H-P),U=Math.max(U,0),U=Math.min(U,S-H-P)),e===c.LEFT||e===c.RIGHT?(F=a.top+a.height/2-C/2,F=Math.max(O,Math.min(D-C-O,F)),z=Math.max(x,Math.min(C-x-2*P,a.top+a.height/2-P-F)),e===c.LEFT?V=2*-P:$=2*-P):e===c.BELOW?(F=a.bottom+P,F=Math.max(F,l.top+P),F=Math.min(F,l.bottom+P),F=Math.max(F,P),F=Math.min(F,D-C)):(F=a.top-P-C,F=Math.max(F,l.top-C-P),F=Math.min(F,l.bottom-C-P),F=Math.max(F,0),F=Math.min(F,D-C-P)),L){const t=window.getComputedStyle(k.targetEl);Y=Math.max(0,s.top),J=Math.max(0,S-s.right),X=Math.max(0,D-s.bottom),q=Math.max(0,s.left),Q=Math.max(0,M(t.borderTopLeftRadius)+r),Z=Math.max(0,M(t.borderTopRightRadius)+r),tt=Math.max(0,M(t.borderBottomRightRadius)+r),et=Math.max(0,M(t.borderBottomLeftRadius)+r),at=Math.max(0,s.right),lt=Math.max(0,s.top),it=Math.max(0,s.right),st=Math.max(0,s.bottom),ct=Math.max(0,s.left),ut=Math.max(0,s.bottom),pt=Math.max(0,s.left),mt=Math.max(0,s.top)}}else e=i||c.BELOW,e!==c.BELOW&&e!==c.ABOVE||($=H/2-P,e===c.BELOW?z=2*-P:G=2*-P),e!==c.LEFT&&e!==c.RIGHT||(z=C/2-P,e===c.LEFT?V=2*-P:$=2*-P);t.tooltipPlacement=e,W+=` userflowjs-bubble__tooltip-notch--${e.toLowerCase()}`,A="",L&&(K+=" userflowjs-tooltip-backdrop--visible",ot+=" userflowjs-tooltip-block--visible",rt+=" userflowjs-tooltip-block--visible",nt+=" userflowjs-tooltip-block--visible",dt+=" userflowjs-tooltip-block--visible");break}}d.style.transition="";let bt=U,ft=F;if(e&&(d.style.opacity="0",y===l.TOOLTIP)){const e=24;switch(t.tooltipPlacement){case c.BELOW:F+=e;break;case c.ABOVE:F-=e;break;case c.RIGHT:U+=e;break;case c.LEFT:U-=e}}"relative"!==o&&N(d,U,F);if(p.className=W,p.style.visibility=A,I(p,"top",z),I(p,"right",V),I(p,"bottom",G),I(p,"left",$),m.className=K,I(m,"top",Y),I(m,"right",J),I(m,"bottom",X),I(m,"left",q),I(m,"border-top-left-radius",Q),I(m,"border-top-right-radius",Z),I(m,"border-bottom-right-radius",tt),I(m,"border-bottom-left-radius",et),b.className=ot,I(b,"width",at),I(b,"height",lt),f.className=rt,I(f,"left",it),I(f,"height",st),h.className=nt,I(h,"left",ct),I(h,"top",ut),E.className=dt,I(E,"width",pt),I(E,"top",mt),e){d.offsetWidth;const t="opacity 250ms linear";y===l.TOOLTIP?d.style.transition=`${t}, transform 500ms cubic-bezier(0.25, 0.8, 0.5, 1)`:d.style.transition=t,d.style.opacity="1","relative"!==o&&N(d,bt,ft)}}({layoutState:B,animateIn:t,position:ct,absoluteWidth:S,absoluteHeight:D,desiredTooltipPlacement:ut,root:o,bubble:i,tooltipNotch:m,tooltipBackdrop:b,tooltipBlockTop:f,tooltipBlockRight:v,tooltipBlockBottom:y,tooltipBlockLeft:k,dir:gt})}if(O===l.TOOLTIP){const t=R&&R.targetEl;t&&B.stepKeyScrolledIntoView!==U&&B.targetScrolledIntoView!==t&&(B.stepKeyScrolledIntoView=U,B.targetScrolledIntoView=t,function(t){if(a.customScrollIntoView)return void a.customScrollIntoView(t);const{scrollPadding:e}=a;if(e&&j(t)===document.scrollingElement){const o=e.top||0,a=e.right||0,l=e.bottom||0,r=e.left||0;let i=0,s=0;const n=t.getBoundingClientRect(),c=w(),u=g();if(n.top<o?i=n.top-o:n.bottom>u-l&&(i=n.bottom-u+l),n.left<r?s=n.left-r:n.right>c-a&&(s=n.right-c+a),0!=i||0!=s)return void window.scrollBy({top:i,left:s,behavior:"smooth"})}try{t.scrollIntoView({behavior:"smooth",block:"nearest"})}catch(o){console.warn("Userflow.js: scrollIntoView error (falling back to no options).",o),t.scrollIntoView()}}(t))}else B.stepKeyScrolledIntoView=void 0,B.targetScrolledIntoView=null;Vt(P),At(O)}),[St,vt,U,F,W,H,ct,S,D,V,ut,$,dt,et,Vt,gt]),$t=t.useRef(Gt);$t.current=Gt;const Kt=t.useRef(!1);t.useEffect((()=>{const t=()=>{Kt.current=!0};return window.addEventListener("pagehide",t),()=>window.removeEventListener("pagehide",t)}),[]);const Yt=()=>{window.clearTimeout(Ft.current.tooltipTargetMissingTimeout),Ft.current.tooltipTargetMissingTimeout=void 0};t.useEffect((()=>Yt),[]);const Jt=t.useCallback((()=>{const t=Ft.current;if(t.tooltipTargetParams=null,V||(t.tooltipPlacement=null),F!==l.TOOLTIP)return Yt(),void(t.tooltipTargetMissing=!1);if(!V&&!t.tooltipTargetMissingTimeout){t.tooltipTargetMissing=!1;const e=!z||v(z)||z.type!==i.AUTO||z.autoData?1e3*parseFloat(H.tooltipMissingToleranceSeconds):1;t.tooltipTargetMissingTimeout=window.setTimeout((()=>{if(!Kt.current){if(z&&!v(z)){let t=z.autoData;if(z.autoData)try{t=JSON.parse(z.autoData)}catch(e){}console.warn("Userflow.js: Tooltip target not found on page.\n",{type:z.type,autoData:t,excludeText:z.excludeText,precision:z.precision,text:z.text,css:z.css})}Yt(),t.tooltipTargetMissing=!0,$t.current()}}),e)}$t.current()}),[F,V,z,H.tooltipMissingToleranceSeconds]),Xt=t.useCallback((t=>{const e=Ft.current;Yt(),e.tooltipTargetParams&&e.tooltipTargetParams.targetEl!==t.targetEl&&(e.tooltipPlacement=null),e.tooltipTargetParams=t,Gt({forceUpdatePosition:!0})}),[Gt]);f({selector:F===l.TOOLTIP&&z||null,targetMoved:Xt,targetLost:Jt,onTargetClick:X});const qt=t.useCallback((()=>Gt({forceAppearanceLayout:!0})),[Gt]);e(qt),t.useEffect((()=>{if(!vt||et||"function"!=typeof y)return;let t;const e=new y((()=>{t||(t=window.requestAnimationFrame((()=>{t=void 0,$t.current()})))}));return e.observe(vt,{childList:!0,attributes:!0,subtree:!0}),()=>{e.disconnect(),t&&window.cancelAnimationFrame(t)}}),[vt,et]),t.useLayoutEffect((()=>{$t.current()})),t.useLayoutEffect((()=>{"absolute"===ct&&Gt({forceAppearanceLayout:!0})}),[ct,S,D]);const Qt=t=>{t.preventDefault(),t.stopPropagation()};return function(e,o){const l=window.Intercom;t.useEffect((()=>{if(o&&e.autoHideIntercom&&"function"==typeof l&&!a.autoHide3pDisabled){try{l("update",{hide_default_launcher:!0})}catch(t){console.warn("Userflow.js: Error when hiding Intercom launcher",t)}return()=>{if(!a.autoHide3pDisabled)try{l("update",{hide_default_launcher:!1})}catch(t){console.warn("Userflow.js: Error when unhiding Intercom launcher",t)}}}}),[l,e.autoHideIntercom,o]);const r=window.$crisp;t.useEffect((()=>{if(o&&e.autoHideCrisp&&r&&!a.autoHide3pDisabled){try{r.push(["do","chat:hide"])}catch(t){console.warn("Userflow.js: Error when hiding Crisp Chat",t)}return()=>{if(!a.autoHide3pDisabled)try{r.push(["do","chat:show"])}catch(t){console.warn("Userflow.js: Error when unhiding Crisp Chat",t)}}}}),[r,e.autoHideCrisp,o]);const i=window.HubSpotConversations;t.useEffect((()=>{if(o&&e.autoHideHubspot&&i&&!a.autoHide3pDisabled){try{i.widget.remove()}catch(t){console.warn("Userflow.js: Error when hiding HubSpot Chat",t)}return()=>{if(!a.autoHide3pDisabled)try{i.widget.load()}catch(t){console.warn("Userflow.js: Error when unhiding HubSpot Chat",t)}}}}),[i,e.autoHideHubspot,o]);const s=window.drift;t.useEffect((()=>{if(o&&e.autoHideDrift&&s&&!a.autoHide3pDisabled){try{s.api.widget.hide()}catch(t){console.warn("Userflow.js: Error when hiding Drift Chat",t)}return()=>{if(!a.autoHide3pDisabled)try{s.api.widget.show()}catch(t){console.warn("Userflow.js: Error when unhiding Drift Chat",t)}}}}),[s,e.autoHideDrift,o])}(H,!!lt&&Wt===l.BUBBLE),t.createElement("div",{ref:wt,"data-testid":"flow-chrome",className:"userflowjs-flow-chrome userflowjs-theme-root",style:L(H),dir:gt},t.createElement("div",{className:"userflowjs-bubble",ref:Tt,style:{zIndex:bt}},t.createElement("div",{className:b({"userflowjs-bubble-outline":!0,[`userflowjs-bubble-outline--bubble-placement-${(H.bubblePlacement||"").toLowerCase().replace(/_/,"-")}`]:!0,"userflowjs-bubble-outline--minimizable":!!at,"userflowjs-bubble-outline--minimized":Dt})},t.createElement("div",{className:"userflowjs-bubble__frame-wrapper",...it},t.createElement(o,{className:"userflowjs-bubble__frame",elRef:Et,stylesheet:p,theme:H,onStylesheetsLoad:_t,noIframe:et},t.createElement("div",{className:"userflowjs-bubble-frame-root",ref:t=>{rt&&rt(t),yt(t)},style:A?{backgroundImage:`url("${encodeURI(A)}")`}:void 0},nt,O.flowBranding&&t.createElement("div",{className:"userflowjs-bubble-made-with-userflow"},t.createElement("div",{className:"userflowjs-bubble-made-with-userflow__absolute"},t.createElement(pt,{company:O},t.createElement(m,null),t.createElement("div",null,"Made with Userflow"))))))),t.createElement("div",{ref:Mt,className:"userflowjs-bubble__avatar-notch"})),t.createElement(o,{className:b({"userflowjs-bubble__avatar":!0,"userflowjs-bubble__avatar--minimizable":!!at,"userflowjs-bubble__avatar--speaking":!!tt}),elRef:jt,stylesheet:R,theme:H,onStylesheetsLoad:Ct,noIframe:et,ariaHidden:!0},t.createElement("div",{className:b({"userflowjs-avatar-frame-root":!0,"userflowjs-avatar-frame-root--minimizable":!!at}),onClick:at?()=>Ut((t=>!t)):void 0},t.createElement(P,{theme:H}))),t.createElement("div",{ref:kt,className:"userflowjs-bubble__tooltip-notch"})),t.createElement("div",{ref:Lt,className:"userflowjs-tooltip-backdrop",onMouseDown:Qt,style:{zIndex:ft,pointerEvents:K?void 0:"none"}}),t.createElement("div",{ref:Bt,className:"userflowjs-tooltip-block",onMouseDown:Qt,style:{zIndex:ft}}),t.createElement("div",{ref:Rt,className:"userflowjs-tooltip-block",onMouseDown:Qt,style:{zIndex:ft}}),t.createElement("div",{ref:Ot,className:"userflowjs-tooltip-block",onMouseDown:Qt,style:{zIndex:ft}}),t.createElement("div",{ref:Pt,className:"userflowjs-tooltip-block",onMouseDown:Qt,style:{zIndex:ft}}),t.createElement("div",{ref:xt,className:"userflowjs-modal-backdrop",onMouseDown:Qt,onClick:Q,style:{zIndex:ft}}),st&&st({visible:zt,bubbleFrame:Et.current}))},P=({theme:e})=>{const o="https://js.userflow.com/cartoon-avatars-no-bg/";let a;return a=e.avatarType===r.ASSET&&e.avatarAsset?e.avatarAsset.assetUrl:e.avatarType===r.CARTOON&&e.avatarName?o+e.avatarName+".svg?3":e.avatarType===r.URL&&e.avatarUrl?e.avatarUrl:o+"none.svg",t.createElement("img",{src:a,alt:""})},x=({company:e,children:o})=>t.createElement("a",{href:"https://userflow.com/?utm_source=made-with-userflow&utm_medium=link&utm_campaign=made-with-userflow-"+e.slug,target:"_blank",rel:"noopener noreferrer"},o);function I(t,e,o){null==o?t.style.removeProperty(e):t.style.setProperty(e,"number"==typeof o?o+"px":o,"important")}function N(t,e,o){e=Math.round(e),o=Math.round(o),t.style.transform=`translate3d(${e}px, ${o}px, 0px)`}function _(t){const e=parseInt(t,10);return isNaN(e)?0:e}export{O as F};
package/LauncherApp.js CHANGED
@@ -1 +1 @@
1
- import{r as e}from"./vendor.react.js";import{L as t,K as r,N as o,H as n,O as s,P as a,Q as c,J as i}from"./userflow.js";import{u as l,F as u,r as E}from"./FlowChrome.js";import{f as d,m as p,d as T,S as m,B as f,R as h,h as C}from"./BubbleToolbar.js";import{u as g,i as w}from"./client-context.js";import{o as v}from"./vendor.obj-str.js";import{a as R,c as b,g as L,D as A,u as j}from"./stylesheets.js";import{w as O,L as N,S as _}from"./z-index.js";import{b as k,r as H}from"./flow-condition-types.js";import{T as I}from"./Trigger.js";import"./vendor.object-assign.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./logomark.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./vendor.react-i18next.js";import"./vendor.babel.runtime.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./vendor.fortawesome.pro-regular-svg-icons.js";import"./vendor.i18next.js";import"./vendor.date-fns.js";const x=e.forwardRef((({appearance:r,icon:o,buttonText:n,theme:s,noAnimation:a,noFixed:c,onClick:i,onMouseEnter:l,onMouseLeave:u,noPointerEvents:E,zIndex:p},T)=>{const{loaded:m}=R(window,d,s),f=s&&r===t.BUTTON?s:null,{loaded:h}=b(window,f),C={"userflowjs-launcher":!0,"userflowjs-launcher--activate-on-click":!!i,"userflowjs-fixed-widget":!c},g={ref:T,style:{...L(s),zIndex:p||O(N),pointerEvents:E?"none":void 0},onClick:i,onMouseEnter:l,onMouseLeave:u};if(!m||!h)return null;switch(r){case t.BEACON:return e.createElement("div",{className:v({...C,"userflowjs-beacon":!0,"userflowjs-beacon--pulse":!a,"userflowjs-beacon--pulse-still":!!a}),...g},e.createElement("div",{className:"userflowjs-beacon__ring"}),e.createElement("div",{className:"userflowjs-beacon__ring"}));case t.BUTTON:return e.createElement("div",{className:v({...C,"userflowjs-launcher--button":!0}),...g},n);case t.HIDDEN:return null;case t.ICON:return e.createElement("div",{className:v({...C,"userflowjs-launcher--icon":!0}),...g},e.createElement(A,{icon:o||"solid/info-circle",size:s.launcherIconSize}))}})),M=({session:d,active:v})=>{const R=g(),{version:b}=d,L=d.id,A=d.flow.id,O=d.version.launcher,[N,M]=e.useState(null),G=j(b.theme),U=d.locale?d.locale.standardLocaleId:G.languageId;e.useEffect((()=>{w.changeLanguage(U)}),[U]);const{activateOn:P}=O,B=O.activeWhileTooltipHover||O.buttons.length>0,K=O.hiddenWhileActive&&P!==r.LAUNCHER_HOVER,y=!v||!K,F=P===r.LAUNCHER_CLICK||P===r.TARGET_CLICK||P===r.LAUNCHER_TARGET_CLICK||B,S=e.useRef({}),D=e.useCallback((()=>{const e=N;if(!e)return;const{targetEl:r,clipEl:n,viewportClipRect:s}=S.current;let i=null;r&&n&&s&&(i=function({targetEl:e,subjectEl:t,clipEl:r,viewportClipRect:n,position:s,subjectAnchor:i}){const l=H(e);if(0===l.width||0===l.height)return null;const u=t.getBoundingClientRect();let E=0,d=0,{side:p,align:T}=s;p===o.AUTO&&(p=o.TOP,T=a.END);switch(p){case o.TOP:d=l.top;break;case o.BOTTOM:d=l.bottom;break;case o.LEFT:E=l.left;break;case o.RIGHT:E=l.right}switch(p){case o.TOP:case o.BOTTOM:switch(T){case a.START:E=l.left;break;case a.CENTER:E=l.left+l.width/2;break;case a.END:E=l.right}break;case o.LEFT:case o.RIGHT:switch(T){case a.START:d=l.top;break;case a.CENTER:d=l.top+l.height/2;break;case a.END:d=l.bottom}}s.xUnit===c.PERCENT?E+=s.xOffset/100*l.width:E+=s.xOffset;s.yUnit===c.PERCENT?d+=s.yOffset/100*l.height:d+=s.yOffset;switch(i){case"center":E-=u.width/2,d-=u.height/2;break;case"side":switch(p){case o.TOP:d-=u.height;break;case o.LEFT:E-=u.width}switch(p){case o.TOP:case o.BOTTOM:switch(T){case a.CENTER:E-=u.width/2;break;case a.END:E-=u.width}break;case o.LEFT:case o.RIGHT:switch(T){case a.CENTER:d-=u.height/2;break;case a.END:d-=u.height}}}if(E+u.width<n.left||E>n.right)return null;if(d+u.height<n.top||d>n.bottom)return null;const m=H(r);return E=Math.max(E,m.left-r.scrollLeft),d=Math.max(d,m.top-r.scrollTop),E=Math.round(E),d=Math.round(d),{left:E,top:d}}({targetEl:r,subjectEl:e,clipEl:n,viewportClipRect:s,position:O.targetPosition,subjectAnchor:O.appearance===t.BEACON?"center":"side"})),E((()=>{!function(e,t){e.classList.toggle("userflowjs-fixed-widget--visible",null!=t),t&&(e.style.transform=`translate3d(${t.left}px, ${t.top}px, 0)`)}(e,i)})),!i||S.current.seenTriggered||L||(S.current.seenTriggered=!0,R.launcherSeen(A))}),[N,O,R,L,A]);e.useLayoutEffect((()=>{D()}),[D]);const z=e.useRef(!1),V=e.useRef(!1),W=e.useRef(!1),$=e.useRef(),J=()=>{Q();$.current=window.setTimeout((()=>X.current()),250)},Q=e.useCallback((()=>{window.clearTimeout($.current)}),[]),q=()=>{if(P===r.LAUNCHER_CLICK||P===r.TARGET_CLICK||P===r.LAUNCHER_TARGET_CLICK)return;const e=P===r.LAUNCHER_HOVER||P===r.LAUNCHER_TARGET_HOVER,t=P===r.TARGET_HOVER||P===r.LAUNCHER_TARGET_HOVER;z.current&&(!K||!v)&&e||V.current&&t||W.current&&B?Y():Z()},X=e.useRef(q);X.current=q;const Y=()=>{v||(Q(),C(R,d,O.actions),O.tooltipEnabled?R.activateLauncher(d):(R.activateLauncher(d),R.deactivateLauncher(d)))},Z=e.useCallback((()=>{v&&(Q(),R.deactivateLauncher(d))}),[v,R,d,Q]),ee=()=>{v?Z():Y()},te=e.useCallback((({targetEl:e,clipEl:t,viewportClipRect:r})=>{S.current.targetEl=e,S.current.clipEl=t,S.current.viewportClipRect=r,D()}),[D]),re=e.useCallback((()=>{S.current.targetEl=void 0,S.current.clipEl=void 0,D(),Z()}),[D,Z]);l({selector:O.targetSelector,targetMoved:te,targetLost:re,onTargetMouseEnter:()=>{V.current=!0,J()},onTargetMouseLeave:()=>{V.current=!1,J()},onTargetClick:P===r.TARGET_CLICK||P===r.LAUNCHER_TARGET_CLICK?ee:void 0}),e.useEffect((()=>{if(!v)return;const e=e=>{const t=e.target;N&&N.contains(t)||(P===r.TARGET_CLICK||P===r.LAUNCHER_TARGET_CLICK)&&S.current.targetEl&&S.current.targetEl.contains(t)||Z()};return window.addEventListener("click",e,{capture:!0}),()=>window.removeEventListener("click",e,{capture:!0})}),[v,P,N,Z]);const oe=function(e){switch(e.side){case o.AUTO:return null;case o.TOP:return i.ABOVE;case o.BOTTOM:return i.BELOW;case o.LEFT:return i.LEFT;case o.RIGHT:return i.RIGHT}}(O.tooltipPosition.side===o.AUTO?O.targetPosition:O.tooltipPosition),ne=e.useMemo((()=>O.content&&p(T(O.content),{buttons:O.buttons})),[O.content,O.buttons]);return e.createElement(m.Provider,{value:d},y&&e.createElement(x,{ref:M,appearance:O.appearance,icon:O.icon,buttonText:O.buttonText,theme:G,onClick:P===r.LAUNCHER_CLICK||P===r.LAUNCHER_TARGET_CLICK?ee:void 0,onMouseEnter:()=>{z.current=!0,J()},onMouseLeave:()=>{z.current=!1,J()},noPointerEvents:P===r.TARGET_HOVER,zIndex:O.zIndex}),v&&e.createElement(_,null,e.createElement(u,{company:d.flow.company,theme:G,position:"fixed",stepAppearance:n.TOOLTIP,width:O.tooltipWidth,tooltipSelector:O.tooltipAnchor===s.TARGET?S.current.targetEl:N,tooltipPlacement:oe,frameWrapperHtmlAttributes:{onMouseEnter:()=>{W.current=!0,J()},onMouseLeave:()=>{W.current=!1,J()}},rootChildren:()=>e.createElement(e.Fragment,null,O.triggers.map((t=>e.createElement(I,{key:t.id,trigger:t}))))},e.createElement(f,{draftMode:d.draftMode,close:F?Z:void 0}),e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement(h,{doc:ne,lookupAttribute:k(d.data),buttons:O.buttons})))))};export default M;export{M as LauncherApp};
1
+ import{r as e}from"./vendor.react.js";import{N as t,O as r,P as o,J as s,Q as n,W as a,X as c,L as i}from"./userflow.js";import{u as l,r as u}from"./use-selector-element-monitoring.js";import{m as E,d,S as m,R as p,h as T}from"./bubble-frame.styl.js";import{u as f,i as h}from"./client-context.js";import{o as w}from"./vendor.obj-str.js";import{a as g,c as C,g as v,D as R,u as b}from"./stylesheets.js";import{w as L,L as j,f as A,S as O}from"./flow-host.styl.js";import{F as N}from"./FlowChrome.js";import{B as _}from"./BubbleToolbar.js";import{b as k,r as I}from"./flow-condition-types.js";import{T as H}from"./Trigger.js";import"./vendor.object-assign.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./vendor.react-i18next.js";import"./vendor.babel.runtime.js";import"./vendor.i18next.js";import"./vendor.fortawesome.pro-regular-svg-icons.js";import"./use-window-resize.js";import"./vendor.react-dom.js";import"./vendor.scheduler.js";import"./logomark.js";import"./vendor.date-fns.js";const x=e.forwardRef((({appearance:r,icon:o,buttonText:s,theme:n,noAnimation:a,noFixed:c,onClick:i,onMouseEnter:l,onMouseLeave:u,noPointerEvents:E,zIndex:d},m)=>{const{loaded:p}=g(window,A,n),T=n&&r===t.BUTTON?n:null,{loaded:f}=C(window,T),h={"userflowjs-launcher":!0,"userflowjs-launcher--activate-on-click":!!i,"userflowjs-fixed-widget":!c},b={ref:m,style:{...v(n),zIndex:d||L(j),pointerEvents:E?"none":void 0},onClick:i,onMouseEnter:l,onMouseLeave:u};if(!p||!f)return null;switch(r){case t.BEACON:return e.createElement("div",{className:w({...h,"userflowjs-beacon":!0,"userflowjs-beacon--pulse":!a,"userflowjs-beacon--pulse-still":!!a}),...b},e.createElement("div",{className:"userflowjs-beacon__ring"}),e.createElement("div",{className:"userflowjs-beacon__ring"}));case t.BUTTON:return e.createElement("div",{className:w({...h,"userflowjs-launcher--button":!0}),...b},s);case t.HIDDEN:return null;case t.ICON:return e.createElement("div",{className:w({...h,"userflowjs-launcher--icon":!0}),...b},e.createElement(R,{icon:o||"solid/info-circle",size:n.launcherIconSize}))}})),M=({session:w,active:g})=>{const C=f(),{version:v}=w,R=w.id,L=w.flow.id,j=w.version.launcher,[A,M]=e.useState(null),G=b(v.theme),U=w.locale?w.locale.standardLocaleId:G.languageId;e.useEffect((()=>{h.changeLanguage(U)}),[U]);const{activateOn:P}=j,y=j.activeWhileTooltipHover||j.buttons.length>0,B=j.hiddenWhileActive&&P!==r.LAUNCHER_HOVER,K=!g||!B,F=P===r.LAUNCHER_CLICK||P===r.TARGET_CLICK||P===r.LAUNCHER_TARGET_CLICK||y,S=e.useRef({}),D=e.useCallback((()=>{const e=A;if(!e)return;const{targetEl:r,clipEl:s,viewportClipRect:n}=S.current;let i=null;r&&s&&n&&(i=function({targetEl:e,subjectEl:t,clipEl:r,viewportClipRect:s,position:n,subjectAnchor:i}){const l=I(e);if(0===l.width||0===l.height)return null;const u=t.getBoundingClientRect();let E=0,d=0,{side:m,align:p}=n;m===o.AUTO&&(m=o.TOP,p=a.END);switch(m){case o.TOP:d=l.top;break;case o.BOTTOM:d=l.bottom;break;case o.LEFT:E=l.left;break;case o.RIGHT:E=l.right}switch(m){case o.TOP:case o.BOTTOM:switch(p){case a.START:E=l.left;break;case a.CENTER:E=l.left+l.width/2;break;case a.END:E=l.right}break;case o.LEFT:case o.RIGHT:switch(p){case a.START:d=l.top;break;case a.CENTER:d=l.top+l.height/2;break;case a.END:d=l.bottom}}n.xUnit===c.PERCENT?E+=n.xOffset/100*l.width:E+=n.xOffset;n.yUnit===c.PERCENT?d+=n.yOffset/100*l.height:d+=n.yOffset;switch(i){case"center":E-=u.width/2,d-=u.height/2;break;case"side":switch(m){case o.TOP:d-=u.height;break;case o.LEFT:E-=u.width}switch(m){case o.TOP:case o.BOTTOM:switch(p){case a.CENTER:E-=u.width/2;break;case a.END:E-=u.width}break;case o.LEFT:case o.RIGHT:switch(p){case a.CENTER:d-=u.height/2;break;case a.END:d-=u.height}}}if(E+u.width<s.left||E>s.right)return null;if(d+u.height<s.top||d>s.bottom)return null;const T=I(r);return E=Math.max(E,T.left-r.scrollLeft),d=Math.max(d,T.top-r.scrollTop),E=Math.round(E),d=Math.round(d),{left:E,top:d}}({targetEl:r,subjectEl:e,clipEl:s,viewportClipRect:n,position:j.targetPosition,subjectAnchor:j.appearance===t.BEACON?"center":"side"})),u((()=>{!function(e,t){e.classList.toggle("userflowjs-fixed-widget--visible",null!=t),t&&(e.style.transform=`translate3d(${t.left}px, ${t.top}px, 0)`)}(e,i)})),!i||S.current.seenTriggered||R||(S.current.seenTriggered=!0,C.launcherSeen(L))}),[A,j,C,R,L]);e.useLayoutEffect((()=>{D()}),[D]);const z=e.useRef(!1),V=e.useRef(!1),W=e.useRef(!1),$=e.useRef(),J=()=>{Q();$.current=window.setTimeout((()=>q.current()),250)},Q=e.useCallback((()=>{window.clearTimeout($.current)}),[]),X=()=>{if(P===r.LAUNCHER_CLICK||P===r.TARGET_CLICK||P===r.LAUNCHER_TARGET_CLICK)return;const e=P===r.LAUNCHER_HOVER||P===r.LAUNCHER_TARGET_HOVER,t=P===r.TARGET_HOVER||P===r.LAUNCHER_TARGET_HOVER;z.current&&(!B||!g)&&e||V.current&&t||W.current&&y?Y():Z()},q=e.useRef(X);q.current=X;const Y=()=>{g||(Q(),T(C,w,j.actions),j.tooltipEnabled?C.activateLauncher(w):(C.activateLauncher(w),C.deactivateLauncher(w)))},Z=e.useCallback((()=>{g&&(Q(),C.deactivateLauncher(w))}),[g,C,w,Q]),ee=()=>{g?Z():Y()},te=e.useCallback((({targetEl:e,clipEl:t,viewportClipRect:r})=>{S.current.targetEl=e,S.current.clipEl=t,S.current.viewportClipRect=r,D()}),[D]),re=e.useCallback((()=>{S.current.targetEl=void 0,S.current.clipEl=void 0,D(),Z()}),[D,Z]);l({selector:j.targetSelector,targetMoved:te,targetLost:re,onTargetMouseEnter:()=>{V.current=!0,J()},onTargetMouseLeave:()=>{V.current=!1,J()},onTargetClick:P===r.TARGET_CLICK||P===r.LAUNCHER_TARGET_CLICK?ee:void 0}),e.useEffect((()=>{if(!g)return;const e=e=>{const t=e.target;A&&A.contains(t)||(P===r.TARGET_CLICK||P===r.LAUNCHER_TARGET_CLICK)&&S.current.targetEl&&S.current.targetEl.contains(t)||Z()};return window.addEventListener("click",e,{capture:!0}),()=>window.removeEventListener("click",e,{capture:!0})}),[g,P,A,Z]);const oe=function(e){switch(e.side){case o.AUTO:return null;case o.TOP:return i.ABOVE;case o.BOTTOM:return i.BELOW;case o.LEFT:return i.LEFT;case o.RIGHT:return i.RIGHT}}(j.tooltipPosition.side===o.AUTO?j.targetPosition:j.tooltipPosition),se=e.useMemo((()=>j.content&&E(d(j.content),{buttons:j.buttons})),[j.content,j.buttons]);return e.createElement(m.Provider,{value:w},K&&e.createElement(x,{ref:M,appearance:j.appearance,icon:j.icon,buttonText:j.buttonText,theme:G,onClick:P===r.LAUNCHER_CLICK||P===r.LAUNCHER_TARGET_CLICK?ee:void 0,onMouseEnter:()=>{z.current=!0,J()},onMouseLeave:()=>{z.current=!1,J()},noPointerEvents:P===r.TARGET_HOVER,zIndex:j.zIndex}),g&&e.createElement(O,null,e.createElement(N,{company:w.flow.company,theme:G,position:"fixed",stepAppearance:s.TOOLTIP,width:j.tooltipWidth,tooltipSelector:j.tooltipAnchor===n.TARGET?S.current.targetEl:A,tooltipPlacement:oe,frameWrapperHtmlAttributes:{onMouseEnter:()=>{W.current=!0,J()},onMouseLeave:()=>{W.current=!1,J()}},rootChildren:()=>e.createElement(e.Fragment,null,j.triggers.map((t=>e.createElement(H,{key:t.id,trigger:t}))))},e.createElement(_,{draftMode:w.draftMode,close:F?Z:void 0}),e.createElement("div",{className:"userflowjs-bubble-content"},e.createElement(p,{doc:se,lookupAttribute:k(w.data),buttons:j.buttons})))))};export default M;export{M as LauncherApp};
@@ -1 +1 @@
1
- import{r as e}from"./vendor.react.js";import{u as o}from"./client-context.js";import{a as t,D as s}from"./stylesheets.js";import{w as i,N as n}from"./z-index.js";import{a as r}from"./vendor.fortawesome.pro-regular-svg-icons.js";import"./vendor.object-assign.js";import"./vendor.i18next.js";import"./vendor.react-i18next.js";import"./vendor.babel.runtime.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./userflow.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./flow-condition-types.js";import"./vendor.date-fns.js";var a=new URL("notifications-host.css",import.meta.url).href;const m=({notifications:o})=>{const{loaded:s}=t(window,a);return s?e.createElement("div",{className:"userflowjs-notifications",style:{zIndex:i(n)}},o.map((o=>e.createElement(c,{key:o.id,notification:o})))):null},c=({notification:t})=>{const i=o();return e.createElement("div",{className:"userflowjs-notifications__toast"},e.createElement("div",{className:"userflowjs-notifications__toast-content"},e.createElement("span",{className:"userflowjs-notifications__toast-label"},t.label),t.message),e.createElement("div",{className:"userflowjs-notifications__toast-dismiss",onClick:()=>i.dismissNotification(t.id)},e.createElement(s,{icon:r})))};export default m;export{m as NotificationsApp};
1
+ import{r as o}from"./vendor.react.js";import{u as t}from"./client-context.js";import{w as e,N as s,f as i}from"./flow-host.styl.js";import{a as n,D as r}from"./stylesheets.js";import{a}from"./vendor.fortawesome.pro-regular-svg-icons.js";import"./vendor.object-assign.js";import"./vendor.i18next.js";import"./vendor.react-i18next.js";import"./vendor.babel.runtime.js";import"./userflow.js";import"./vendor.phoenix.js";import"./vendor.uuid.js";import"./vendor.fortawesome.pro-solid-svg-icons.js";import"./flow-condition-types.js";import"./vendor.date-fns.js";const m=({notifications:t})=>{const{loaded:r}=n(window,i);return r?o.createElement("div",{className:"userflowjs-notifications",style:{zIndex:e(s)}},t.map((t=>o.createElement(l,{key:t.id,notification:t})))):null},l=({notification:e})=>{const s=t();return o.createElement("div",{className:"userflowjs-notifications__toast"},o.createElement("div",{className:"userflowjs-notifications__toast-content"},o.createElement("span",{className:"userflowjs-notifications__toast-label"},e.label),e.message),o.createElement("div",{className:"userflowjs-notifications__toast-dismiss",onClick:()=>s.dismissNotification(e.id)},o.createElement(r,{icon:a})))};export default m;export{m as NotificationsApp};