@picked/client 0.0.1-dev.1770162676770 → 0.0.1-dev.1770178792114

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/dist/cjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),S=require("@withease/factories"),I=require("../experience-instance-yl7BWjFA.cjs"),F=require("../logger-BsmHUUw1.cjs"),k=require("../storage-Be5xWNPC.cjs"),_=require("../id-BKIWbSTy.cjs"),q=require("../object-BbFTsGh3.cjs"),v=require("../supports-YvpQZxbh.cjs"),z=f.createDomain("experience"),K=S.createFactory(({client:t,experience:e})=>{const r=z.store(e),n=f.createApi(r,{merge(p,h){return{...p,...h.experience}}}),i=r.map(p=>({name:p.name,decisionLogic:p.condition??p.decide,targetSelectors:p.targets,initializeOpenLogic:e.initializeOpen})),c=t.components.listStore.map(p=>p.find(h=>h.name===`experience:${e.id}`)||p.find(h=>h.name==="experience"),{skipVoid:!1}),o=r.map(p=>({steps:p.steps,nodes:p.nodes,edges:p.edges,conditionals:p.conditionals})),s=r.map(p=>p.fields),d=e.actions??[];return{id:e.id,configStore:i,treeStore:o,fieldsStore:s,componentStore:c,actions:d,merge:n.merge}});function W(t){return S.invoke(K,t)}const H=S.createFactory(({client:t})=>{const e=z.store({}),r=f.createApi(e,{register(o,s){return{...o,[s.id]:s}}});function n(o){const s=e.getState()[o.id];if(s){s.merge({experience:o,strategy:"override"});return}const d=W({client:t,experience:o});r.register(d)}const i=e.map(o=>Object.values(o));function c(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getById:c,listStore:i}});function G(t){return S.invoke(H,t)}const Y=(t,e)=>{e.register(t)},U=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=I.getTargetElements(r,e.id);n.forEach(({elements:c})=>c.forEach(o=>I.tagTargetElement(o,e.id))),I.createAppHosts(n,e.id).forEach(c=>{t.experienceInstances.spawn(e,c)})},B=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await J(t,e)&&U(t,e)}))},J=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return I.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&I.isRulesLogic(r)?await I.evaluateRuleLogic(t,r)===!0:!0},Q=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const c=r[n]??{};r[n]=Object.freeze({...c,...i})}},X=f.createDomain("component"),Z=S.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ee(t){return S.invoke(Z,t)}const te=S.createFactory(({client:t})=>{const e=X.store({}),r=f.createApi(e,{register(o,s){return{...o,[s.name]:s}}});function n(o,s){e.getState()[o]&&F.logger("warn",`Component '${o}' already registered. Registering again will override the previous registration.`);const p=ee({client:t,name:o,component:s});r.register(p)}const i=e.map(o=>Object.values(o));function c(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getByName:c,listStore:i}});function re(t){return S.invoke(te,t)}const D=(t,e,r)=>{r.register(t,e)},ne=f.createDomain("framework"),se=S.createFactory(({client:t})=>{const e=ne.store({}),r=f.createApi(e,{register(o,s){return{...o,[s.name]:s.framework}}});function n(o,s){e.getState()[o]&&F.logger("warn",`Framework '${o}' already registered. Registering again will override the previous registration.`),r.register({name:o,framework:s})}const i=e.map(o=>Object.values(o));function c(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getByName:c,listStore:i}});function ie(t){return S.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ae=6e3,ce=k.createStorageKey("last_ping","global"),ue=t=>`${t}/api/v1/ping`,de=async t=>{try{const e=Date.now(),r=k.localStore.get(ce);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<ae)return!0;const i=ue(t.apiUrl),c={projectId:t.projectId,path:window.location.pathname},o=JSON.stringify(c),s={"Content-Type":"application/json"},p=document.getElementById("picked_script")?.dataset.verceltoken;p&&(s["x-vercel-protection-bypass"]=p);const b=(await fetch(i,{method:"POST",headers:s,body:o})).ok;return b&&r.set(e),b}catch(e){return F.logger("error",e),!1}};function L(t){const e=typeof window<"u",r={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(r)}const le=f.createDomain("predicate"),pe=S.createFactory(({client:t})=>{const e=le.store({}),r=f.createApi(e,{register(s,d){return{...s,[d.name]:{name:d.name,predicate:d.predicate}}}});function n(s,d){e.getState()[s]&&F.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:d}))}const i=e.map(s=>Object.values(s));function c(s){return e.map(d=>d[s]?.predicate,{skipVoid:!1})}function o(s){const d=f.createStore(()=>{},{skipVoid:!1}),p=f.createEffect(async()=>{const h=c(s).getState();if(!h)return;const b=L(t);return(...m)=>h({...b,args:m})});return f.sample({source:{responses:t.responses.listStore,fields:t.fields.listStore},target:p}),f.sample({clock:p.doneData,filter:h=>h!==void 0,target:d}),p(),d}return{register:n,getByName:c,listStore:i,getEvokablePredicate:o}});function ge(t){return S.invoke(pe,t)}const fe=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),me=S.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=f.createApi(e,{register(a,u){return{...a,[u.id]:u.feature}}});function i(a,u){e.getState()[a]&&F.logger("warn",`Feature '${a}' already registered. Registering again will override the previous registration.`);const l={id:a,feature:{...u,id:a}};n.register(Object.freeze({id:a,feature:l}))}const c=f.createEffect(async({id:a,key:u,storage:g="local"})=>{const l=k.createStorageKey(`feature:${a}:${u}`,"global"),w=(g==="session"?k.sessionStore:k.localStore).get(l).boolean();return w===null?null:{id:a,key:u,bucket:w,storage:g}}),o=f.createEffect(a=>{if(!a)return null;const u=k.createStorageKey(`feature:${a.id}:${a.key}`,"global");(a.storage==="session"?k.sessionStore:k.localStore).set(u,a.bucket)}),s=new Map,d=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:a,resolvedFeaturesStore:u},{id:g,decide:l,key:y})=>{const w=u.find(R=>R.id===g&&R.key===y);if(w)return w;const E=a[g];if(!E)throw new Error(`Feature with id '${g}' not found`);const j=s.get(`${g}:${y}`);if(j!==void 0){const R=await j;return{id:E.id,bucket:R,key:y,storage:E.feature.storage}}const P=l();s.set(`${g}:${y}`,P);const T=await P;return{id:E.id,bucket:T,key:y,storage:E.feature.storage}}});f.sample({clock:n.register,fn:a=>{const{id:u,feature:g}=a;return{id:u,key:g.feature.key,storage:g.feature.storage}},target:c}),f.sample({source:e,clock:d.doneData,fn:(a,u)=>{const{id:g,bucket:l,storage:y}=u,w=a[g]?.feature.key;return w?{key:w,id:g,bucket:l,storage:y}:null},target:o});const p=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:a,resolvedFeaturesStore:u})=>Object.values(a).map(g=>{const l=u.find(y=>y.id===g.id&&y.key===g.feature.key);return l?{id:g.id,name:g.feature.name,key:g.feature.key,getBucket:()=>({id:g.id,bucket:l.bucket}),isResolved:!0}:{id:g.id,name:g.feature.name,key:g.feature.key,getBucket:async()=>await d(g.feature),isResolved:!1}}));f.sample({clock:d.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:a},{id:u,key:g})=>!a.some(y=>y.id===u&&y.key===g),fn:(a,u)=>u,target:t.eventBus.prepend(a=>({type:"feature_decide",feature:a}))}),f.sample({clock:[c.doneData,d.doneData],source:r,fn:(a,u)=>!u||a.some(l=>l.id===u.id&&l.key===u.key)?a:[...a,u],target:r});function h(a){return p.map(u=>u.find(g=>g.id===a))}function b(a){return e.map(u=>u[a],{skipVoid:!1})}function m(a){const u=f.createStore(async()=>{},{skipVoid:!1}),g=f.createEffect(async()=>{const l=h(a).getState();if(l)return async()=>(await l.getBucket()).bucket});return f.sample({source:r,filter:l=>l.some(y=>y.id===a),target:g}),f.sample({clock:g.doneData,filter:l=>l!==void 0,target:u}),g(),u}return{register:i,getById:h,getByName:b,listStore:p,getEvokableFeature:m}});function ye(t){return S.invoke(me,t)}const he=(t,e,r)=>{r.register(t,e)},x=f.createDomain("history");function $(t,e){return{id:_.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const Se=S.createFactory(()=>{const t=x.store({entries:[]}),e=x.event(),r=x.event(),n=x.event(),i=x.event();t.on(e,(o,s)=>({entries:[...o.entries,$(s.experienceId,s.node)]})),t.on(r,(o,s)=>({entries:[...o.entries.slice(0,-1),$(s.experienceId,s.node)]})),t.on(i,(o,s)=>s);function c(o,s){const d={lastStepIndex:-1,secondLastStepIndex:-1};for(let p=o.length-1;p>=0;p--){const h=o[p],b=h?.node;if(!(!b||!I.isStepNode(b))&&!(s&&h?.experienceId!==s))if(d.lastStepIndex===-1)d.lastStepIndex=p;else{d.secondLastStepIndex=p;break}}return d}return t.on(n,(o,s)=>{const{secondLastStepIndex:d}=c(o.entries,s.experienceId),p=d!==-1?o.entries.slice(0,d+1):o.entries;return{...o,entries:p}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(o=>o.entries)}});function ve(){return S.invoke(Se)}const ke=()=>f.createEvent(),we=f.createDomain("field"),Ie=S.createFactory(()=>{const t=we.store({}),e=f.createApi(t,{register(s,d){return{...s,[d.field.id]:d.field}}});function r(s){e.register({field:s})}function n(s,d){const p=c(s).getState();if(!p)return;const h=Object.assign({},p,{...d});e.register({field:{...h}})}const i=t.map(s=>Object.values(s));function c(s){return t.map(d=>d[s]||null)}function o(s){return t.map(d=>Object.values(d).find(p=>p.name===s)||null)}return{register:r,update:n,getById:c,listStore:i,getByName:o}});function be(){return S.invoke(Ie)}const Fe=(t,e)=>{e.register(t)},Ee=f.createDomain("action"),je=S.createFactory(()=>{const t=Ee.store({}),e=f.createApi(t,{register(o,s){return{...o,[s.name]:{name:s.name,action:s.action}}}});function r(o,s){e.register({name:o,action:s})}const n=t.map(o=>Object.values(o));function i(o){return t.map(s=>s[o],{skipVoid:!1})}function c(o){return t.map(s=>{const d=s[o];return d?d.action:void 0},{skipVoid:!1})}return{register:r,getByName:i,listStore:n,getEvokableAction:c}});function xe(){return S.invoke(je)}const Re=(t,e,r)=>{r.register(t,e)};function O(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Ae=f.createDomain("response"),Pe=S.createFactory(({client:t})=>{const e=Ae.store({}),r=f.createEvent(),n=f.createEvent(),i=f.createApi(e,{register(m,a){return{...m,[a.fieldId]:a.response}},registerBatch(m,a){return{...m,...a}},clear(m,a){const{[a]:u,...g}=m;return g},clearAll(){return{}}});function c(m,a){if(typeof m=="string"){if(a===void 0)throw new Error("Response is required when registering a single field");i.register({fieldId:m,response:a})}else i.registerBatch(m)}async function o(m){const a=[];return await Promise.allSettled(Object.entries(m).map(async([u,g])=>{let l=g;const y=t.fields.getById(u).getState();if(!y){a.push({fieldId:u,userMessage:`Field '${u}' not found`,systemMessage:`No field with ID '${u}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:l});return}if(y.multiple&&(typeof l=="string"||typeof l=="number"||typeof l=="boolean")&&(l=[l]),y.validation&&!q.isEmpty(y.validation)&&!O(l)){const w=await I.evaluateRuleLogic(t,y.validation,{$input:l});if(typeof w=="string"){a.push({fieldId:u,userMessage:w,systemMessage:`Field validation resulted in an error: ${w}.`,value:l});return}if(w===!1){a.push({fieldId:u,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:l});return}}if(y.required&&O(l)){a.push({fieldId:u,userMessage:"This field is required",systemMessage:"Field is required.",value:l});return}if(!y.multiple&&Array.isArray(l)&&l.length>1){a.push({fieldId:u,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:l});return}if(y.options){const w=y.options.map(j=>j.value),E=Array.isArray(l)?l:[l];Array.isArray(l)&&(E.every(j=>w.includes(j))||a.push({fieldId:u,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${w.join(", ")}`,value:l}))}})),{responsesToCommit:m,validationErrors:a}}async function s(m){const{responsesToCommit:a,validationErrors:u}=await o(m);return u.length?{errors:u}:(i.registerBatch(a),{errors:[]})}const d=e.map(m=>m),p=e.map(m=>Object.keys(m).map(u=>({fieldId:u,value:m[u]})));function h(m){const a=t.fields.getById(m),u=e.map(g=>g[m]||null);return f.combine({f:a,r:u},({f:g,r:l})=>l||(g?.defaultValue?g.defaultValue:null))}function b(m){const a=t.fields.getByName(m);return f.combine({f:a,s:e},({f:u,s:g})=>{const l=u&&g[u.id]||null;return l||(u?.defaultValue?u.defaultValue:null)})}return f.sample({clock:r,target:i.clearAll}),f.sample({clock:n,target:i.clear}),{register:c,clearAll:r,clear:n,commit:s,getResponsesToCommit:o,listStore:p,getAllStore:d,getByFieldId:h,getByFieldName:b}});function Be(t){return S.invoke(Pe,t)}const De=()=>"0.0.1-dev.1770162676770";function Ce(){if(v.supportsDocument()){const t=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of t)if(e?.dataset.api)return e.dataset.api}return"https://api.picked.app"}function $e(){if(!v.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&r.add(i);for(const i of r){const c=i.replace("picked-","");e[c]=t.getAll(i)}const n=k.createStorageKey("s");if(r.size>0)k.sessionStore.set(n,e);else{const i=k.sessionStore.get(n);if(i)return i.json()||{}}return e}function Oe(){if(v.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),r=Math.random().toString(36).substring(2,15),n=Math.random().toString(36).substring(2,15);return`${t}-${e}-${r}-${n}`}const ze=k.createStorageKey("session","global"),Ue=()=>{const t=k.localStore.get(ze);let e;t.isSet()&&(e=t.json());const r=i=>t.set({id:i.id,isUser:i.isUser,identifiers:i.identifiers}),n={id:e?.id??Oe(),isUser:e?.isUser??void 0,identifiers:e?.identifiers??void 0,setIsUser(i){this.isUser=i,r(this)},setIdentifier(i,c){this.identifiers={...this.identifiers,[i]:c},r(this)},removeIdentifier(i){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([c])=>c!==i)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,r(this))}};return r(n),n},Le=()=>v.supportsLocalStorage()?Ue():null;function V(){if(v.supportsWindow())return globalThis.window.pickedConfig}function Ve(){if(!v.supportsWindow())return;const t=V(),e=t?.organizationId,r=t?.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function Me(){if(!v.supportsDocument())return;const t=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!t)return;const e=t.dataset.organizationid||t.getAttribute("organization-id"),r=t.dataset.projectid||t.getAttribute("project-id");return e&&r?{organizationId:e,projectId:r}:void 0}function Ne(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=Ve();if(n)return n;const i=Me();if(i)return i;throw new Error(`organizationId and projectId are required. You can provide them via one of:
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),S=require("@withease/factories"),I=require("../experience-instance-DXLWzNXG.cjs"),F=require("../logger-BsmHUUw1.cjs"),k=require("../storage-Be5xWNPC.cjs"),_=require("../id-BKIWbSTy.cjs"),q=require("../object-BbFTsGh3.cjs"),v=require("../supports-YvpQZxbh.cjs"),z=f.createDomain("experience"),K=S.createFactory(({client:t,experience:e})=>{const r=z.store(e),n=f.createApi(r,{merge(p,h){return{...p,...h.experience}}}),i=r.map(p=>({name:p.name,decisionLogic:p.condition??p.decide,targetSelectors:p.targets,initializeOpenLogic:e.initializeOpen})),c=t.components.listStore.map(p=>p.find(h=>h.name===`experience:${e.id}`)||p.find(h=>h.name==="experience"),{skipVoid:!1}),o=r.map(p=>({steps:p.steps,nodes:p.nodes,edges:p.edges,conditionals:p.conditionals})),s=r.map(p=>p.fields),d=e.actions??[];return{id:e.id,configStore:i,treeStore:o,fieldsStore:s,componentStore:c,actions:d,merge:n.merge}});function W(t){return S.invoke(K,t)}const H=S.createFactory(({client:t})=>{const e=z.store({}),r=f.createApi(e,{register(o,s){return{...o,[s.id]:s}}});function n(o){const s=e.getState()[o.id];if(s){s.merge({experience:o,strategy:"override"});return}const d=W({client:t,experience:o});r.register(d)}const i=e.map(o=>Object.values(o));function c(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getById:c,listStore:i}});function G(t){return S.invoke(H,t)}const Y=(t,e)=>{e.register(t)},U=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=I.getTargetElements(r,e.id);n.forEach(({elements:c})=>c.forEach(o=>I.tagTargetElement(o,e.id))),I.createAppHosts(n,e.id).forEach(c=>{t.experienceInstances.spawn(e,c)})},B=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await J(t,e)&&U(t,e)}))},J=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return I.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&I.isRulesLogic(r)?await I.evaluateRuleLogic(t,r)===!0:!0},Q=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const c=r[n]??{};r[n]=Object.freeze({...c,...i})}},X=f.createDomain("component"),Z=S.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ee(t){return S.invoke(Z,t)}const te=S.createFactory(({client:t})=>{const e=X.store({}),r=f.createApi(e,{register(o,s){return{...o,[s.name]:s}}});function n(o,s){e.getState()[o]&&F.logger("warn",`Component '${o}' already registered. Registering again will override the previous registration.`);const p=ee({client:t,name:o,component:s});r.register(p)}const i=e.map(o=>Object.values(o));function c(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getByName:c,listStore:i}});function re(t){return S.invoke(te,t)}const D=(t,e,r)=>{r.register(t,e)},ne=f.createDomain("framework"),se=S.createFactory(({client:t})=>{const e=ne.store({}),r=f.createApi(e,{register(o,s){return{...o,[s.name]:s.framework}}});function n(o,s){e.getState()[o]&&F.logger("warn",`Framework '${o}' already registered. Registering again will override the previous registration.`),r.register({name:o,framework:s})}const i=e.map(o=>Object.values(o));function c(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getByName:c,listStore:i}});function ie(t){return S.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ae=6e3,ce=k.createStorageKey("last_ping","global"),ue=t=>`${t}/api/v1/ping`,de=async t=>{try{const e=Date.now(),r=k.localStore.get(ce);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<ae)return!0;const i=ue(t.apiUrl),c={projectId:t.projectId,path:window.location.pathname},o=JSON.stringify(c),s={"Content-Type":"application/json"},p=document.getElementById("picked_script")?.dataset.verceltoken;p&&(s["x-vercel-protection-bypass"]=p);const b=(await fetch(i,{method:"POST",headers:s,body:o})).ok;return b&&r.set(e),b}catch(e){return F.logger("error",e),!1}};function L(t){const e=typeof window<"u",r={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(r)}const le=f.createDomain("predicate"),pe=S.createFactory(({client:t})=>{const e=le.store({}),r=f.createApi(e,{register(s,d){return{...s,[d.name]:{name:d.name,predicate:d.predicate}}}});function n(s,d){e.getState()[s]&&F.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:d}))}const i=e.map(s=>Object.values(s));function c(s){return e.map(d=>d[s]?.predicate,{skipVoid:!1})}function o(s){const d=f.createStore(()=>{},{skipVoid:!1}),p=f.createEffect(async()=>{const h=c(s).getState();if(!h)return;const b=L(t);return(...m)=>h({...b,args:m})});return f.sample({source:{responses:t.responses.listStore,fields:t.fields.listStore},target:p}),f.sample({clock:p.doneData,filter:h=>h!==void 0,target:d}),p(),d}return{register:n,getByName:c,listStore:i,getEvokablePredicate:o}});function ge(t){return S.invoke(pe,t)}const fe=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),me=S.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=f.createApi(e,{register(a,u){return{...a,[u.id]:u.feature}}});function i(a,u){e.getState()[a]&&F.logger("warn",`Feature '${a}' already registered. Registering again will override the previous registration.`);const l={id:a,feature:{...u,id:a}};n.register(Object.freeze({id:a,feature:l}))}const c=f.createEffect(async({id:a,key:u,storage:g="local"})=>{const l=k.createStorageKey(`feature:${a}:${u}`,"global"),w=(g==="session"?k.sessionStore:k.localStore).get(l).boolean();return w===null?null:{id:a,key:u,bucket:w,storage:g}}),o=f.createEffect(a=>{if(!a)return null;const u=k.createStorageKey(`feature:${a.id}:${a.key}`,"global");(a.storage==="session"?k.sessionStore:k.localStore).set(u,a.bucket)}),s=new Map,d=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:a,resolvedFeaturesStore:u},{id:g,decide:l,key:y})=>{const w=u.find(R=>R.id===g&&R.key===y);if(w)return w;const E=a[g];if(!E)throw new Error(`Feature with id '${g}' not found`);const j=s.get(`${g}:${y}`);if(j!==void 0){const R=await j;return{id:E.id,bucket:R,key:y,storage:E.feature.storage}}const P=l();s.set(`${g}:${y}`,P);const T=await P;return{id:E.id,bucket:T,key:y,storage:E.feature.storage}}});f.sample({clock:n.register,fn:a=>{const{id:u,feature:g}=a;return{id:u,key:g.feature.key,storage:g.feature.storage}},target:c}),f.sample({source:e,clock:d.doneData,fn:(a,u)=>{const{id:g,bucket:l,storage:y}=u,w=a[g]?.feature.key;return w?{key:w,id:g,bucket:l,storage:y}:null},target:o});const p=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:a,resolvedFeaturesStore:u})=>Object.values(a).map(g=>{const l=u.find(y=>y.id===g.id&&y.key===g.feature.key);return l?{id:g.id,name:g.feature.name,key:g.feature.key,getBucket:()=>({id:g.id,bucket:l.bucket}),isResolved:!0}:{id:g.id,name:g.feature.name,key:g.feature.key,getBucket:async()=>await d(g.feature),isResolved:!1}}));f.sample({clock:d.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:a},{id:u,key:g})=>!a.some(y=>y.id===u&&y.key===g),fn:(a,u)=>u,target:t.eventBus.prepend(a=>({type:"feature_decide",feature:a}))}),f.sample({clock:[c.doneData,d.doneData],source:r,fn:(a,u)=>!u||a.some(l=>l.id===u.id&&l.key===u.key)?a:[...a,u],target:r});function h(a){return p.map(u=>u.find(g=>g.id===a))}function b(a){return e.map(u=>u[a],{skipVoid:!1})}function m(a){const u=f.createStore(async()=>{},{skipVoid:!1}),g=f.createEffect(async()=>{const l=h(a).getState();if(l)return async()=>(await l.getBucket()).bucket});return f.sample({source:r,filter:l=>l.some(y=>y.id===a),target:g}),f.sample({clock:g.doneData,filter:l=>l!==void 0,target:u}),g(),u}return{register:i,getById:h,getByName:b,listStore:p,getEvokableFeature:m}});function ye(t){return S.invoke(me,t)}const he=(t,e,r)=>{r.register(t,e)},x=f.createDomain("history");function $(t,e){return{id:_.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const Se=S.createFactory(()=>{const t=x.store({entries:[]}),e=x.event(),r=x.event(),n=x.event(),i=x.event();t.on(e,(o,s)=>({entries:[...o.entries,$(s.experienceId,s.node)]})),t.on(r,(o,s)=>({entries:[...o.entries.slice(0,-1),$(s.experienceId,s.node)]})),t.on(i,(o,s)=>s);function c(o,s){const d={lastStepIndex:-1,secondLastStepIndex:-1};for(let p=o.length-1;p>=0;p--){const h=o[p],b=h?.node;if(!(!b||!I.isStepNode(b))&&!(s&&h?.experienceId!==s))if(d.lastStepIndex===-1)d.lastStepIndex=p;else{d.secondLastStepIndex=p;break}}return d}return t.on(n,(o,s)=>{const{secondLastStepIndex:d}=c(o.entries,s.experienceId),p=d!==-1?o.entries.slice(0,d+1):o.entries;return{...o,entries:p}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(o=>o.entries)}});function ve(){return S.invoke(Se)}const ke=()=>f.createEvent(),we=f.createDomain("field"),Ie=S.createFactory(()=>{const t=we.store({}),e=f.createApi(t,{register(s,d){return{...s,[d.field.id]:d.field}}});function r(s){e.register({field:s})}function n(s,d){const p=c(s).getState();if(!p)return;const h=Object.assign({},p,{...d});e.register({field:{...h}})}const i=t.map(s=>Object.values(s));function c(s){return t.map(d=>d[s]||null)}function o(s){return t.map(d=>Object.values(d).find(p=>p.name===s)||null)}return{register:r,update:n,getById:c,listStore:i,getByName:o}});function be(){return S.invoke(Ie)}const Fe=(t,e)=>{e.register(t)},Ee=f.createDomain("action"),je=S.createFactory(()=>{const t=Ee.store({}),e=f.createApi(t,{register(o,s){return{...o,[s.name]:{name:s.name,action:s.action}}}});function r(o,s){e.register({name:o,action:s})}const n=t.map(o=>Object.values(o));function i(o){return t.map(s=>s[o],{skipVoid:!1})}function c(o){return t.map(s=>{const d=s[o];return d?d.action:void 0},{skipVoid:!1})}return{register:r,getByName:i,listStore:n,getEvokableAction:c}});function xe(){return S.invoke(je)}const Re=(t,e,r)=>{r.register(t,e)};function O(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Ae=f.createDomain("response"),Pe=S.createFactory(({client:t})=>{const e=Ae.store({}),r=f.createEvent(),n=f.createEvent(),i=f.createApi(e,{register(m,a){return{...m,[a.fieldId]:a.response}},registerBatch(m,a){return{...m,...a}},clear(m,a){const{[a]:u,...g}=m;return g},clearAll(){return{}}});function c(m,a){if(typeof m=="string"){if(a===void 0)throw new Error("Response is required when registering a single field");i.register({fieldId:m,response:a})}else i.registerBatch(m)}async function o(m){const a=[];return await Promise.allSettled(Object.entries(m).map(async([u,g])=>{let l=g;const y=t.fields.getById(u).getState();if(!y){a.push({fieldId:u,userMessage:`Field '${u}' not found`,systemMessage:`No field with ID '${u}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:l});return}if(y.multiple&&(typeof l=="string"||typeof l=="number"||typeof l=="boolean")&&(l=[l]),y.validation&&!q.isEmpty(y.validation)&&!O(l)){const w=await I.evaluateRuleLogic(t,y.validation,{$input:l});if(typeof w=="string"){a.push({fieldId:u,userMessage:w,systemMessage:`Field validation resulted in an error: ${w}.`,value:l});return}if(w===!1){a.push({fieldId:u,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:l});return}}if(y.required&&O(l)){a.push({fieldId:u,userMessage:"This field is required",systemMessage:"Field is required.",value:l});return}if(!y.multiple&&Array.isArray(l)&&l.length>1){a.push({fieldId:u,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:l});return}if(y.options){const w=y.options.map(j=>j.value),E=Array.isArray(l)?l:[l];Array.isArray(l)&&(E.every(j=>w.includes(j))||a.push({fieldId:u,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${w.join(", ")}`,value:l}))}})),{responsesToCommit:m,validationErrors:a}}async function s(m){const{responsesToCommit:a,validationErrors:u}=await o(m);return u.length?{errors:u}:(i.registerBatch(a),{errors:[]})}const d=e.map(m=>m),p=e.map(m=>Object.keys(m).map(u=>({fieldId:u,value:m[u]})));function h(m){const a=t.fields.getById(m),u=e.map(g=>g[m]||null);return f.combine({f:a,r:u},({f:g,r:l})=>l||(g?.defaultValue?g.defaultValue:null))}function b(m){const a=t.fields.getByName(m);return f.combine({f:a,s:e},({f:u,s:g})=>{const l=u&&g[u.id]||null;return l||(u?.defaultValue?u.defaultValue:null)})}return f.sample({clock:r,target:i.clearAll}),f.sample({clock:n,target:i.clear}),{register:c,clearAll:r,clear:n,commit:s,getResponsesToCommit:o,listStore:p,getAllStore:d,getByFieldId:h,getByFieldName:b}});function Be(t){return S.invoke(Pe,t)}const De=()=>"0.0.1-dev.1770178792114";function Ce(){if(v.supportsDocument()){const t=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of t)if(e?.dataset.api)return e.dataset.api}return"https://api.picked.app"}function $e(){if(!v.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&r.add(i);for(const i of r){const c=i.replace("picked-","");e[c]=t.getAll(i)}const n=k.createStorageKey("s");if(r.size>0)k.sessionStore.set(n,e);else{const i=k.sessionStore.get(n);if(i)return i.json()||{}}return e}function Oe(){if(v.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),r=Math.random().toString(36).substring(2,15),n=Math.random().toString(36).substring(2,15);return`${t}-${e}-${r}-${n}`}const ze=k.createStorageKey("session","global"),Ue=()=>{const t=k.localStore.get(ze);let e;t.isSet()&&(e=t.json());const r=i=>t.set({id:i.id,isUser:i.isUser,identifiers:i.identifiers}),n={id:e?.id??Oe(),isUser:e?.isUser??void 0,identifiers:e?.identifiers??void 0,setIsUser(i){this.isUser=i,r(this)},setIdentifier(i,c){this.identifiers={...this.identifiers,[i]:c},r(this)},removeIdentifier(i){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([c])=>c!==i)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,r(this))}};return r(n),n},Le=()=>v.supportsLocalStorage()?Ue():null;function V(){if(v.supportsWindow())return globalThis.window.pickedConfig}function Ve(){if(!v.supportsWindow())return;const t=V(),e=t?.organizationId,r=t?.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function Me(){if(!v.supportsDocument())return;const t=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!t)return;const e=t.dataset.organizationid||t.getAttribute("organization-id"),r=t.dataset.projectid||t.getAttribute("project-id");return e&&r?{organizationId:e,projectId:r}:void 0}function Ne(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=Ve();if(n)return n;const i=Me();if(i)return i;throw new Error(`organizationId and projectId are required. You can provide them via one of:
2
2
  (1) createClient({ organizationId, projectId }) options;
3
3
  (2) window.pickedConfig = { organizationId, projectId };
4
4
  (3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes data-organizationid/data-projectid (or organization-id/project-id) attributes.`)}function A(t){return t==null||t===""||Number.isNaN(t)}const Te={default:(t,e)=>A(t)?String(e??""):String(t),append:(t,e)=>e&&!A(t)?`${t} ${e}`:t,prepend:(t,e)=>e&&!A(t)?`${e} ${t}`:t,upper:t=>typeof t=="string"?t.toUpperCase():t,lower:t=>typeof t=="string"?t.toLowerCase():t,capitalize:t=>typeof t=="string"?t.charAt(0).toUpperCase()+t.slice(1):t,list:t=>{if(!t||typeof t!="object")return t;const e=new Intl.ListFormat("en",{style:"long",type:"conjunction"});if(Array.isArray(t))return e.format(t.map(String));if(t instanceof Map){const r=Array.from(t.entries()).map(([n,i])=>`${n}: ${i}`);return e.format(r)}return t instanceof Set?e.format(Array.from(t).map(String)):t}};function _e(t){return typeof t=="object"&&t!==null}function qe(t,e){let r=e;for(const n of t.split("."))if(_e(r)&&n in r)r=r[n];else return;return typeof r=="function"?r():r}function Ke(t,e){const r=t.split("|").map(c=>c.trim()),n=r.shift()??"";let i=qe(n,e);for(const c of r){const[o,...s]=c.split(":"),d=o?.trim()??"",p=s.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g,""),h=Te[d];h&&(i=h(i,p))}return A(i)?"":typeof i=="object"?JSON.stringify(i):String(i)}function We(t,e){let r="",n=0;for(;n<t.length;)if(t[n]==="{"&&t[n+1]==="{"){n+=2;let i="";for(;n<t.length;){if(t[n]==="}"&&t[n+1]==="}"){n+=2;break}i+=t[n++]}r+=Ke(i.trim(),e)}else r+=t[n++];return r}class M{static logger=F.logger;options;isReady=!1;project;plugins={};eventBus=ke();organizationId;projectId;apiUrl;session;precondition;condition;searchParams=$e();history=ve();components=re({client:this});experienceInstances=I.createExperienceInstanceIndex({client:this});experiences=G({client:this});frameworks=ie({client:this});predicates=ge({client:this});features=ye({client:this});responses=Be({client:this});fields=be();actions=xe();constructor(e){F.logger("info","Picked client initializing.");const{organizationId:r,projectId:n}=Ne(e);this.organizationId=r,this.projectId=n,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Ce(),this.session=Le(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:"load",version:De()}),F.logger("info","Picked client initialized.")}start(){de(this),(async()=>{if(!v.supportsDocument())return;let r;typeof this.precondition>"u"?r=!0:typeof this.precondition=="boolean"?r=this.precondition:r=await I.evaluateRuleLogic(this,this.precondition)===!0;let n;r&&(this.condition===void 0?n=!0:typeof this.condition=="boolean"?n=this.condition:n=await I.evaluateRuleLogic(this,this.condition)===!0);const i=r&&n===!0;if(typeof n=="boolean"&&this.session){const c=n;this.session.setIsUser(c),this.eventBus({type:"user_decide",value:c})}this.eventBus({type:"initialize"}),document.body&&i&&B(this),await I.domInteractive(),i&&B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session})})()}registerFramework(e){oe(e,this.frameworks)}registerComponent(e,r){D(e,r,this.components)}registerPlugin(e){Q(this,e,this.plugins)}registerFeature(e,r){he(e,r,this.features)}registerPredicate(e,r){fe(e,r,this.predicates)}registerField(e){Fe(e,this.fields)}registerAction(e,r){Re(e,r,this.actions)}registerExperience(e){e.component&&D(`experience:${e.id}`,e.component,this.components),Y(e,this.experiences)}getStateSnapshot(){return L(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){F.logger("warn",`Experience with id '${e}' not found.`);return}U(this,r)}setupPlugins(){this.options.plugins?.forEach(e=>{if(Array.isArray(e)){e.forEach(n=>{this.registerPlugin(n)});return}const r=typeof e=="function"?e():e;if(Array.isArray(r)){r.forEach(n=>this.registerPlugin(n));return}this.registerPlugin(r)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const i=typeof n=="function"?n():n;this.registerFeature(r,i)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,i]=r.split(":");if(!n||!i)return;let c=i;c==="true"&&(c=!0),c==="false"&&(c=!1),this.registerFeature(n,{key:`${c}`,name:n,decide:()=>c,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){F.logger("warn",`Predicate "${r}" is not a function.`);return}this.registerPredicate(r,n)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){F.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}renderString=(e,r)=>{const n=this.responses.listStore.getState().reduce((i,c)=>(i[c.fieldId]=c.value,i),{});return We(e,{...r,responses:n})}}function N(t){return t.options?.some(e=>"condition"in e)??!1}function He(t){return t.some(e=>e.condition||N(e))}async function Ge(t,e){return e.length===0||!He(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await I.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!N(n))return n;const o=(await Promise.all(n.options.map(async d=>d.condition?await I.evaluateRuleLogic(t,d.condition)?d:null:d))).filter(d=>d!==null);return o.length===n.options.length?n:o.length===0?null:{...n,options:o}}))).filter(n=>n!==null)}const Ye=t=>{const e=new M(t);return v.bindClient(e),e};exports.evaluateRuleLogic=I.evaluateRuleLogic;exports.isPickedRoot=I.isPickedRoot;exports.createStorageKey=k.createStorageKey;exports.localStore=k.localStore;exports.sessionStore=k.sessionStore;exports.subscribe=k.subscribe;exports.supportsCookies=v.supportsCookies;exports.supportsCryptoRandomUUID=v.supportsCryptoRandomUUID;exports.supportsDocument=v.supportsDocument;exports.supportsHistory=v.supportsHistory;exports.supportsIntersectionObserver=v.supportsIntersectionObserver;exports.supportsLocalStorage=v.supportsLocalStorage;exports.supportsLocation=v.supportsLocation;exports.supportsSessionStorage=v.supportsSessionStorage;exports.supportsShadowRoot=v.supportsShadowRoot;exports.supportsWebComponents=v.supportsWebComponents;exports.supportsWindow=v.supportsWindow;exports.Picked=M;exports.createClient=Ye;exports.getPickedConfig=V;exports.getStepFields=Ge;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-yl7BWjFA.cjs");function S(){let c,i;return{promise:new Promise((t,o)=>{c=t,i=o}),resolve:t=>c(t),reject:t=>i(t)}}function C(c,i){const{promise:E,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),x=r.createEvent(),p=r.createEvent(),f=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),u=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const g=n[d],m=e.componentStore.getState();if(m&&g?.isValidComponent(m.component))return{rendered:await g.render(m.component,c,e),rendererIndex:d}}return null});a.on(l,(e,n)=>({...e,renderedExperiences:[...e.renderedExperiences,n],currentExperienceIndex:e.currentExperienceIndex+1})).on(p,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(x,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:f,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex<e.length&&!n.isComplete,fn:({experiences:e,state:n})=>({experience:e[n.currentExperienceIndex],availableRenderers:i,startRendererIndex:0}),target:u}),r.sample({clock:u.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:u.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:f,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:x});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:x,target:I}),o(),E}exports.render=C;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-DXLWzNXG.cjs");function S(){let c,i;return{promise:new Promise((t,o)=>{c=t,i=o}),resolve:t=>c(t),reject:t=>i(t)}}function C(c,i){const{promise:E,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),x=r.createEvent(),p=r.createEvent(),f=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),u=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const g=n[d],m=e.componentStore.getState();if(m&&g?.isValidComponent(m.component))return{rendered:await g.render(m.component,c,e),rendererIndex:d}}return null});a.on(l,(e,n)=>({...e,renderedExperiences:[...e.renderedExperiences,n],currentExperienceIndex:e.currentExperienceIndex+1})).on(p,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(x,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:f,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex<e.length&&!n.isComplete,fn:({experiences:e,state:n})=>({experience:e[n.currentExperienceIndex],availableRenderers:i,startRendererIndex:0}),target:u}),r.sample({clock:u.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:u.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:f,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:x});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:x,target:I}),o(),E}exports.render=C;
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createDomain as b, createApi as F, createStore as H, createEffect as R, sample as I, attach as X, combine as O, createEvent as D } from "effector";
2
2
  import { createFactory as w, invoke as v } from "@withease/factories";
3
- import { g as q, t as Z, c as ee, i as te, e as j, a as re, b as ne, d as se } from "../experience-instance-CEwLzO0a.js";
4
- import { f as jt } from "../experience-instance-CEwLzO0a.js";
3
+ import { g as q, t as Z, c as ee, i as te, e as j, a as re, b as ne, d as se } from "../experience-instance-eADy3oIy.js";
4
+ import { f as jt } from "../experience-instance-eADy3oIy.js";
5
5
  import { l as k } from "../logger-C9a75KZn.js";
6
6
  import { c as A, l as C, s as z } from "../storage-Co_LbKr_.js";
7
7
  import { a as At } from "../storage-Co_LbKr_.js";
@@ -700,7 +700,7 @@ const We = b("response"), Ye = w(({ client: t }) => {
700
700
  function Je(t) {
701
701
  return v(Ye, t);
702
702
  }
703
- const Qe = () => "0.0.1-dev.1770162676770";
703
+ const Qe = () => "0.0.1-dev.1770178792114";
704
704
  function Xe() {
705
705
  if (U()) {
706
706
  const t = [
@@ -1,5 +1,5 @@
1
1
  import { createEvent as i, createStore as v, createEffect as C, sample as n, attach as S } from "effector";
2
- import { h as F } from "../../experience-instance-CEwLzO0a.js";
2
+ import { h as F } from "../../experience-instance-eADy3oIy.js";
3
3
  function R() {
4
4
  let c, p;
5
5
  return {
@@ -0,0 +1 @@
1
+ "use strict";const i=require("effector"),U=require("@withease/factories"),C=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),we=require("./object-BbFTsGh3.cjs");function Ee(e){return typeof e=="number"&&!isNaN(e)}function P(e){return typeof e=="string"}function E(e){return Array.isArray(e)}function ae(e){return e instanceof Promise}function re(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function m(e){if(Ee(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function M(e){return`${e}`}const Ne={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>m(e)>m(t),">=":(e,t)=>m(e)>=m(t),"<":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async e=>await A(e),"!":async e=>!await A(e),"%":(e,t)=>m(e)%m(t),log:e=>(console.log(e),e),in:(e,t)=>t?P(t)?t.indexOf(M(e))!==-1:E(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(M).join(""),substr:(e,t,r)=>{const n=M(e),a=m(t);if(r===void 0)return n.substr(a);const c=m(r);if(c<0){const o=n.substr(a);return o.substr(0,o.length+c)}return n.substr(a,c)},"+":(...e)=>e.reduce((t,r)=>m(t)+m(r),0),"*":(...e)=>e.reduce((t,r)=>m(t)*m(r),1),"-":(e,t)=>{const r=m(e);return t===void 0?-r:r-m(t)},"/":(e,t)=>m(e)/m(t),min:(...e)=>Math.min(...e.map(m)),max:(...e)=>Math.max(...e.map(m)),merge:(...e)=>e.reduce((t,r)=>E(r)?t.concat(r):t.concat([r]),[]),var(e,t){const r=arguments.length>1?t:null;if(e===""||e==="."||e===null||e===void 0)return this;if(typeof e=="number"&&Array.isArray(this))return e>=0&&e<this.length?this[e]:r;const n=M(e);if(n===""||n===".")return this;const a=n.split(".");let c=this;for(const o of a){if(c==null)return r;if(Array.isArray(c)){const u=parseInt(o,10);isNaN(u)?c=c[o]:c=c[u]}else c=c[o]}return c!==void 0?c:r},async missing(...e){const t=E(e[0])?e[0]:e,r=[];for(const n of t){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await g({missing:t},this);if(!E(r)||!E(t))return[];const n=r.filter(P);return t.filter(P).length-n.length>=m(e)?[]:n},invoke(...e){const[t,...r]=e;return typeof t!="function"?null:Reflect.apply(t,null,r)},regexp_matches(e,t){let r=e,n="";if(E(e)){const[c,o]=e;r=c,n=o}return!P(r)||!P(n)?!1:new RegExp(r,n).test(M(t))},throw(e){throw new Error(M(e))}};async function g(e,t){if(!e)return e;if(ae(e))return g(await e,t);if(E(e))return Promise.all(e.map(o=>g(o,t)));if(!re(e))return e;const r=Ie(e);let n=r?e[r]??[]:[];switch(E(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await A(await g(n[o],t)))return g(n[o+1],t);return n.length%2===1?g(n[n.length-1],t):null;case"and":{let o=null;for(const u of n)if(o=await g(u,t),!await A(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,t),await A(o))return o;return o}case"map":{const o=await g(n[0],t);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],t);return E(o)?(await Promise.all(o.map(async p=>{const S=await A(await g(n[1],p));return{item:p,shouldInclude:S}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],t);if(!E(o))return n.length>2?await g(n[2],t):null;const u=n[1];let S=n.length>2?await g(n[2],t):null;for(const k of o)S=await g(u,{current:k,accumulator:S});return S}case"all":{const o=await g(n[0],t);if(!E(o)||o.length===0)return!1;for(const u of o)if(!await A(await g(n[1],u)))return!1;return!0}case"some":{const o=await g(n[0],t);if(!E(o))return!1;for(const u of o)if(await A(await g(n[1],u)))return!0;return!1}case"none":{const o=await g(n[0],t);if(!E(o))return!0;for(const u of o)if(await A(await g(n[1],u)))return!1;return!0}case"catch":try{return await g(n[0],t)}catch(o){return re(o)?await g(o,t):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,t))),c=r?Ne[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,a)}async function A(e){return ae(e)?A(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function Ie(e){return Object.keys(e)[0]}function ce(e){return!we.isEmpty(e)}async function J(e,t,r){const n=e.getStateSnapshot(),a=e.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:(...S)=>p.predicate({...n,args:S})}),{}),c=e.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:S}=await p.getBucket();return S}}),{}),o={...r,responses:e.responses.getAllStore.getState(),location:typeof n.location=="object"?{hash:n.location.hash,host:n.location.host,hostname:n.location.hostname,href:n.location.href,origin:n.location.origin,pathname:n.location.pathname,port:n.location.port,protocol:n.location.protocol,search:n.location.search}:void 0,predicates:a,features:c};return await g(t,o)}function xe(e){return!C.supportsWindow()||!C.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}const ke="open";function ve(e){if(!C.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:ke})}function be(){return new Promise((e,t)=>{if(!C.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Ae(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const j="picked-root",q="picked-target",Oe="picked-root";function Fe(e,t){return[...e,{selector:`${Oe}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=xe(n.selector).filter(c=>!$e(c,t)&&!ue(c,t));return{...n,elements:a}})}function Be(e,t){return e.flatMap(r=>r.elements.map(n=>Me(n,r.placement,t)))}function _e(e,t){e.classList.add(q),e.classList.add(`${q}-${t}`)}function $e(e,t){return t?e.classList.contains(`${q}-${t}`):e.classList.contains(`${q}`)}function ue(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(j)}function Te(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(j),t.classList.add(`${j}-${e}`),t}function Me(e,t,r){let n;const a=Te(r);if(e instanceof Document)n=e.body.appendChild(a);else{switch(t){case"replace":e.replaceWith(a);break;case"before":e.before(a);break;case"after":e.after(a);break;case"prepend":e.prepend(a);break;default:e.append(a);break}n=a}return n}function oe(e){return e.type==="conditional"}function L(e){return e.type==="step"}function se(e){return e.type==="experience"}function X(e){return e.type==="origin"}function ie(e){return e.type==="action"}const fe=(e,t,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),L(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=e.find(p=>p.id===o.destinationNodeId);return u?fe(e,t,u,!1,a):[]})),Le=(e,t,r)=>fe(e,t,r,!0,new Set),le=(e,t,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=t.filter(p=>p.sourceNodeId===r.id);if(c.length===0)return[0,0];let o=1/0,u=-1/0;for(const p of c){const S=e.find(D=>D.id===p.destinationNodeId);if(!S)continue;const[k,F]=le(e,t,S,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,F+1))}return o===1/0?[-1,-1]:[o,u]},De=(e,t,r)=>le(e,t,r,!0,new Set),de=(e,t,r,n=new Set)=>{if(n.has(r.id))return[-1,-1];if(n.add(r.id),r.type==="origin")return[0,0];const a=t.filter(u=>u.destinationNodeId===r.id);if(a.length===0)return[-1,-1];let c=1/0,o=-1/0;for(const u of a){const p=e.find(F=>F.id===u.sourceNodeId);if(!p)continue;const[S,k]=de(e,t,p,new Set(n));S!==-1&&(c=Math.min(c,S+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},Re=(e,t,r)=>de(e,t,r,new Set),pe=e=>e.find(r=>r.type==="origin")||null,z=(e,t,r)=>{if(!e)return pe(t);const n=r.find(c=>c.sourceNodeId===e.id);if(!n)return null;const a=t.find(c=>c.id===n.destinationNodeId);return a||null};async function Pe(e,t,r,n){const a=e?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===t);return r.find(o=>o.id===c?.destinationNodeId)}const Q=i.createDomain("experience-instance"),He=U.createFactory(({client:e,experience:t,target:r})=>{const n=i.createEvent(),a=i.createEvent(),c=i.createEvent(),o=i.createEvent(),u=i.createEvent(),p=i.createEvent(),S=t.componentStore,k=Q.store("transitioning"),F=e.history.entriesStore.map(s=>s.filter(d=>d.experienceId===t.id)),D=F.map(s=>s.filter(d=>L(d.node))),I=F.map(s=>s[s.length-1]?.node||null),f=i.combine(t.treeStore,I,({steps:s},d)=>s.find(l=>d&&L(d)&&l.id===d.stepId)||null),h=i.combine(t.treeStore,I,({nodes:s,edges:d},l)=>l?Le(s,d,l):[]),v=i.combine(t.treeStore,I,({nodes:s,edges:d},l)=>l?Re(s,d,l):[-1,-1]),_=i.combine(t.treeStore,I,({nodes:s,edges:d},l)=>l?De(s,d,l):[-1,-1]),b=Q.store(!1),$=i.createApi(b,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,d)=>d}),me=i.createEffect(async()=>{e.history.back({experienceId:t.id})}),Se=i.attach({source:t.treeStore,effect:async(s,d)=>{const l=s.nodes.find(w=>L(w)&&w.stepId===d);l&&e.history.push({experienceId:t.id,node:l})}}),Y=i.attach({source:I,effect:s=>{}}),W=i.attach({source:t.treeStore,effect:async({nodes:s})=>pe(s)}),G=i.attach({source:t.treeStore,effect:async({nodes:s,edges:d},l)=>{if(X(l))return z(l,s,d)}}),K=i.attach({source:t.treeStore,effect:async({nodes:s,edges:d,conditionals:l},w)=>{if(!oe(w))return;const T=l.find(O=>O.id===w.conditionalId);if(!T)return;const x=w.id,y=await J(e,T.condition);return Pe(!!y,x,s,d)}}),Z=i.attach({source:t.treeStore,effect:async({nodes:s,edges:d},l)=>{if(!ie(l))return;const w=l.action;if(!w){N.logger("warn",`Action node ${l.id} has no action name`);return}const T=e.actions.getByName(w).getState();if(!T){N.logger("warn",`Action '${w}' not registered on client`);const x=d.find(y=>y.sourceNodeId===l.id&&y.sourceNodeHandle==="false");return x?s.find(y=>y.id===x.destinationNodeId):null}if(typeof T.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=d.find(y=>y.sourceNodeId===l.id&&y.sourceNodeHandle==="false");return x?s.find(y=>y.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await T.action(w);const x=d.find(O=>O.sourceNodeId===l.id&&O.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${l.id}`),null;const y=s.find(O=>O.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${y?.id}`),y||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const y=d.find(H=>H.sourceNodeId===l.id&&H.sourceNodeHandle==="false");if(!y)return N.logger("warn",`No 'false' edge found for action node ${l.id}`),null;const O=s.find(H=>H.id===y.destinationNodeId);return N.logger("info",`Action '${w}' failed, moving to node ${O?.id}`),O||null}}}),he=i.createEffect(s=>{if(se(s))return e.launchExperienceById(s.experienceId)}),ee=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:d,edges:l}])=>z(s,d,l)}),R=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:d,edges:l}])=>z(s,d,l)}),ye=i.createEffect(s=>{e.history.push({experienceId:t.id,node:s})}),te=i.attach({source:t.configStore,effect:async({initializeOpenLogic:s})=>ce(s)?!!await J(e,s):s??!1}),B={id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:S,stateStore:k,isOpenStore:b,open:$.open,close:$.close,toggleOpen:$.toggle,setOpen:$.set,treeStore:t.treeStore,fieldsStore:t.fieldsStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:v,stepsToLeafStore:_,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:D},V=i.createEvent(),ne=i.createEvent();return i.sample({source:I,target:V}),i.sample({clock:V,filter:s=>s===null,target:W}),i.sample({clock:V,filter:s=>s!==null,target:ne}),i.split({source:ne,match:s=>oe(s)?"condition":L(s)?"step":se(s)?"launchExperience":X(s)?"origin":ie(s)?"action":"other",cases:{origin:G,condition:K,step:Y,launchExperience:he,action:Z,__:i.createEvent()}}),i.sample({clock:[K.doneData,G.doneData,W.doneData,R.doneData,ee.doneData,Z.doneData],filter:Boolean,target:ye}),i.sample({clock:a,target:R}),i.sample({clock:a,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t,experienceInstance:B}))}),i.sample({clock:R.done,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t,experienceInstance:B}))}),i.sample({clock:R.fail,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t,experienceInstance:B}))}),i.sample({clock:c,target:me}),i.sample({clock:o,target:Se}),i.sample({source:i.combine([K.pending,G.pending,W.pending,R.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:k}),i.sample({clock:Y.doneData,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t,experienceInstance:B}))}),i.sample({clock:p,target:te}),i.sample({source:te.doneData,fn:Boolean,target:b}),i.sample({source:I,clock:n,filter:s=>s?X(s):!0,target:ee}),i.sample({source:b,filter:Boolean,target:n}),i.sample({source:b,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t,experienceInstance:B}))}),i.sample({source:b,filter:s=>!s,target:e.eventBus.prepend(()=>({type:"experience_close",experience:t,experienceInstance:B}))}),i.sample({clock:u,target:[p]}),u(),B});function ge(e){return U.invoke(He,e)}const Ce=U.createFactory(({client:e})=>{const t=Q.store({}),r=i.createEvent(),n=i.createEvent(),a=i.createEvent(),c=i.createApi(t,{register(f,h){const v=[...f[h.experienceId]??[]];return v.push(h),{...f,[h.experienceId]:v}},unregister(f,h){const v=h.experienceId,_=f[v]?.filter(b=>b!==h);return{...f,[v]:_??[]}}}),o=i.createEffect(({experience:f,target:h})=>ge({client:e,experience:f,target:h})),u=i.createEffect(f=>{c.register(f)}),p=i.createEffect(f=>{f.target&&Ae(f.target,()=>{a(f)})}),S=i.createEffect(f=>{c.unregister(f)}),k=i.createEffect(f=>{const h=f.componentStore.getState();if(!h){N.logger("warn","No app component registered. Skipping init.");return}const v=h.frameworkStore.getState();if(!v){N.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const _=f.target;if(!_){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const b=ve(_);try{v.render(b,h.component,e,f)}catch($){N.logger("error",$)}});i.sample({clock:r,target:o}),i.sample({clock:a,target:S}),i.sample({clock:o.doneData,target:[u,p,n]}),i.sample({clock:o.doneData,target:e.eventBus.prepend(f=>({type:"experience_initialize",experienceInstance:f}))}),i.sample({clock:n,target:k});function F(f,h){r({experience:f,target:h})}const D=t.map(f=>Object.values(f).flat());function I(f){return t.map(h=>h[f]||[],{skipVoid:!1})}return{spawn:F,getByExperienceId:I,listStore:D}});function je(e){return U.invoke(Ce,e)}exports.createAppHosts=Be;exports.createExperienceInstance=ge;exports.createExperienceInstanceIndex=je;exports.domInteractive=be;exports.evaluateRuleLogic=J;exports.getTargetElements=Fe;exports.isPickedRoot=ue;exports.isRulesLogic=ce;exports.isStepNode=L;exports.tagTargetElement=_e;
@@ -1,7 +1,7 @@
1
- import { createDomain as xt, createEvent as k, combine as D, createApi as ut, createEffect as M, attach as B, sample as m, split as Et } from "effector";
1
+ import { createDomain as It, createEvent as k, combine as H, createApi as ut, createEffect as $, attach as F, sample as m, split as Et } from "effector";
2
2
  import { createFactory as ft, invoke as lt } from "@withease/factories";
3
3
  import { i as kt, s as dt, a as At } from "./supports-COb-sl36.js";
4
- import { l as I } from "./logger-C9a75KZn.js";
4
+ import { l as x } from "./logger-C9a75KZn.js";
5
5
  import { i as bt } from "./object-JwZ58NOH.js";
6
6
  function vt(t) {
7
7
  return typeof t == "number" && !isNaN(t);
@@ -36,19 +36,19 @@ const Ot = {
36
36
  ">": (t, e) => g(t) > g(e),
37
37
  ">=": (t, e) => g(t) >= g(e),
38
38
  "<": (t, e, r) => {
39
- const n = g(t), i = g(e);
40
- if (r === void 0) return n < i;
39
+ const n = g(t), s = g(e);
40
+ if (r === void 0) return n < s;
41
41
  const a = g(r);
42
- return n < i && i < a;
42
+ return n < s && s < a;
43
43
  },
44
44
  "<=": (t, e, r) => {
45
- const n = g(t), i = g(e);
46
- if (r === void 0) return n <= i;
45
+ const n = g(t), s = g(e);
46
+ if (r === void 0) return n <= s;
47
47
  const a = g(r);
48
- return n <= i && i <= a;
48
+ return n <= s && s <= a;
49
49
  },
50
- "!!": async (t) => await v(t),
51
- "!": async (t) => !await v(t),
50
+ "!!": async (t) => await O(t),
51
+ "!": async (t) => !await O(t),
52
52
  "%": (t, e) => g(t) % g(e),
53
53
  // eslint-disable-next-line sonarjs/function-return-type
54
54
  log: (t) => (console.log(t), t),
@@ -56,14 +56,14 @@ const Ot = {
56
56
  cat: (...t) => t.map(R).join(""),
57
57
  /* eslint-disable sonarjs/deprecation */
58
58
  substr: (t, e, r) => {
59
- const n = R(t), i = g(e);
60
- if (r === void 0) return n.substr(i);
59
+ const n = R(t), s = g(e);
60
+ if (r === void 0) return n.substr(s);
61
61
  const a = g(r);
62
62
  if (a < 0) {
63
- const o = n.substr(i);
63
+ const o = n.substr(s);
64
64
  return o.substr(0, o.length + a);
65
65
  }
66
- return n.substr(i, a);
66
+ return n.substr(s, a);
67
67
  },
68
68
  /* eslint-enable sonarjs/deprecation */
69
69
  "+": (...t) => t.reduce((e, r) => g(e) + g(r), 0),
@@ -85,9 +85,9 @@ const Ot = {
85
85
  const n = R(t);
86
86
  if (n === "" || n === ".")
87
87
  return this;
88
- const i = n.split(".");
88
+ const s = n.split(".");
89
89
  let a = this;
90
- for (const o of i) {
90
+ for (const o of s) {
91
91
  if (a == null)
92
92
  return r;
93
93
  if (Array.isArray(a)) {
@@ -101,8 +101,8 @@ const Ot = {
101
101
  async missing(...t) {
102
102
  const e = N(t[0]) ? t[0] : t, r = [];
103
103
  for (const n of e) {
104
- const i = await p({ var: n }, this);
105
- (i === null || i === "") && r.push(`${n}`);
104
+ const s = await p({ var: n }, this);
105
+ (s === null || s === "") && r.push(`${n}`);
106
106
  }
107
107
  return r;
108
108
  },
@@ -153,20 +153,20 @@ async function p(t, e) {
153
153
  case "if":
154
154
  case "?:":
155
155
  for (let o = 0; o < n.length - 1; o += 2)
156
- if (await v(await p(n[o], e)))
156
+ if (await O(await p(n[o], e)))
157
157
  return p(n[o + 1], e);
158
158
  return n.length % 2 === 1 ? p(n[n.length - 1], e) : null;
159
159
  case "and": {
160
160
  let o = null;
161
161
  for (const c of n)
162
- if (o = await p(c, e), !await v(o))
162
+ if (o = await p(c, e), !await O(o))
163
163
  return o;
164
164
  return o;
165
165
  }
166
166
  case "or": {
167
167
  let o = null;
168
168
  for (const c of n)
169
- if (o = await p(c, e), await v(o)) return o;
169
+ if (o = await p(c, e), await O(o)) return o;
170
170
  return o;
171
171
  }
172
172
  case "map": {
@@ -177,7 +177,7 @@ async function p(t, e) {
177
177
  const o = await p(n[0], e);
178
178
  return N(o) ? (await Promise.all(
179
179
  o.map(async (d) => {
180
- const S = await v(await p(n[1], d));
180
+ const S = await O(await p(n[1], d));
181
181
  return { item: d, shouldInclude: S };
182
182
  })
183
183
  )).filter(({ shouldInclude: d }) => d).map(({ item: d }) => d) : [];
@@ -196,21 +196,21 @@ async function p(t, e) {
196
196
  const o = await p(n[0], e);
197
197
  if (!N(o) || o.length === 0) return !1;
198
198
  for (const c of o)
199
- if (!await v(await p(n[1], c))) return !1;
199
+ if (!await O(await p(n[1], c))) return !1;
200
200
  return !0;
201
201
  }
202
202
  case "some": {
203
203
  const o = await p(n[0], e);
204
204
  if (!N(o)) return !1;
205
205
  for (const c of o)
206
- if (await v(await p(n[1], c))) return !0;
206
+ if (await O(await p(n[1], c))) return !0;
207
207
  return !1;
208
208
  }
209
209
  case "none": {
210
210
  const o = await p(n[0], e);
211
211
  if (!N(o)) return !0;
212
212
  for (const c of o)
213
- if (await v(await p(n[1], c))) return !1;
213
+ if (await O(await p(n[1], c))) return !1;
214
214
  return !0;
215
215
  }
216
216
  case "catch":
@@ -220,12 +220,12 @@ async function p(t, e) {
220
220
  return ot(o) ? await p(o, e) : n[1] ? await p(n[1], o) : o instanceof Error ? o.message : o;
221
221
  }
222
222
  }
223
- const i = await Promise.all(n.map((o) => p(o, e))), a = r ? Ot[r] : void 0;
223
+ const s = await Promise.all(n.map((o) => p(o, e))), a = r ? Ot[r] : void 0;
224
224
  if (!a) throw new Error(`Unrecognized operation ${r}`);
225
- return a.apply(e, i);
225
+ return a.apply(e, s);
226
226
  }
227
- async function v(t) {
228
- return pt(t) ? v(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
227
+ async function O(t) {
228
+ return pt(t) ? O(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
229
229
  }
230
230
  function Bt(t) {
231
231
  return Object.keys(t)[0];
@@ -233,8 +233,8 @@ function Bt(t) {
233
233
  function Ft(t) {
234
234
  return !bt(t);
235
235
  }
236
- async function st(t, e, r) {
237
- const n = t.getStateSnapshot(), i = t.predicates.listStore.getState().reduce((c, d) => ({
236
+ async function it(t, e, r) {
237
+ const n = t.getStateSnapshot(), s = t.predicates.listStore.getState().reduce((c, d) => ({
238
238
  ...c,
239
239
  [d.name]: (...S) => d.predicate({ ...n, args: S })
240
240
  }), {}), a = t.features.listStore.getState().reduce((c, d) => ({
@@ -257,7 +257,7 @@ async function st(t, e, r) {
257
257
  protocol: n.location.protocol,
258
258
  search: n.location.search
259
259
  } : void 0,
260
- predicates: i,
260
+ predicates: s,
261
261
  features: a
262
262
  };
263
263
  return await p(e, o);
@@ -298,12 +298,12 @@ function Zt(t, e) {
298
298
  placement: "replace"
299
299
  }
300
300
  ].flatMap((n) => {
301
- const i = _t(n.selector).filter(
301
+ const s = _t(n.selector).filter(
302
302
  (a) => !Dt(a, e) && !Rt(a, e)
303
303
  );
304
304
  return {
305
305
  ...n,
306
- elements: i
306
+ elements: s
307
307
  };
308
308
  });
309
309
  }
@@ -325,35 +325,35 @@ function Pt(t) {
325
325
  }
326
326
  function Ct(t, e, r) {
327
327
  let n;
328
- const i = Pt(r);
328
+ const s = Pt(r);
329
329
  if (t instanceof Document)
330
- n = t.body.appendChild(i);
330
+ n = t.body.appendChild(s);
331
331
  else {
332
332
  switch (e) {
333
333
  case "replace":
334
- t.replaceWith(i);
334
+ t.replaceWith(s);
335
335
  break;
336
336
  case "before":
337
- t.before(i);
337
+ t.before(s);
338
338
  break;
339
339
  case "after":
340
- t.after(i);
340
+ t.after(s);
341
341
  break;
342
342
  case "prepend":
343
- t.prepend(i);
343
+ t.prepend(s);
344
344
  break;
345
345
  default:
346
- t.append(i);
346
+ t.append(s);
347
347
  break;
348
348
  }
349
- n = i;
349
+ n = s;
350
350
  }
351
351
  return n;
352
352
  }
353
- function it(t) {
353
+ function st(t) {
354
354
  return t.type === "conditional";
355
355
  }
356
- function P(t) {
356
+ function U(t) {
357
357
  return t.type === "step";
358
358
  }
359
359
  function at(t) {
@@ -365,36 +365,36 @@ function J(t) {
365
365
  function ct(t) {
366
366
  return t.type === "action";
367
367
  }
368
- const gt = (t, e, r, n, i = /* @__PURE__ */ new Set()) => i.has(r.id) ? [] : (i.add(r.id), P(r) && !n ? [r] : e.filter((o) => o.sourceNodeId === r.id).flatMap((o) => {
368
+ const gt = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.add(r.id), U(r) && !n ? [r] : e.filter((o) => o.sourceNodeId === r.id).flatMap((o) => {
369
369
  const c = t.find((d) => d.id === o.destinationNodeId);
370
- return c ? gt(t, e, c, !1, i) : [];
371
- })), Ht = (t, e, r) => gt(t, e, r, !0, /* @__PURE__ */ new Set()), mt = (t, e, r, n, i = /* @__PURE__ */ new Set()) => {
372
- if (i.has(r.id)) return [-1, -1];
373
- i.add(r.id);
370
+ return c ? gt(t, e, c, !1, s) : [];
371
+ })), Ht = (t, e, r) => gt(t, e, r, !0, /* @__PURE__ */ new Set()), mt = (t, e, r, n, s = /* @__PURE__ */ new Set()) => {
372
+ if (s.has(r.id)) return [-1, -1];
373
+ s.add(r.id);
374
374
  const a = e.filter((d) => d.sourceNodeId === r.id);
375
375
  if (a.length === 0) return [0, 0];
376
376
  let o = 1 / 0, c = -1 / 0;
377
377
  for (const d of a) {
378
- const S = t.find((T) => T.id === d.destinationNodeId);
378
+ const S = t.find((P) => P.id === d.destinationNodeId);
379
379
  if (!S) continue;
380
- const [A, F] = mt(
380
+ const [A, _] = mt(
381
381
  t,
382
382
  e,
383
383
  S,
384
384
  !1,
385
- new Set(i)
385
+ new Set(s)
386
386
  );
387
- A !== -1 && (o = Math.min(o, A + 1), c = Math.max(c, F + 1));
387
+ A !== -1 && (o = Math.min(o, A + 1), c = Math.max(c, _ + 1));
388
388
  }
389
389
  return o === 1 / 0 ? [-1, -1] : [o, c];
390
390
  }, jt = (t, e, r) => mt(t, e, r, !0, /* @__PURE__ */ new Set()), St = (t, e, r, n = /* @__PURE__ */ new Set()) => {
391
391
  if (n.has(r.id)) return [-1, -1];
392
392
  if (n.add(r.id), r.type === "origin") return [0, 0];
393
- const i = e.filter((c) => c.destinationNodeId === r.id);
394
- if (i.length === 0) return [-1, -1];
393
+ const s = e.filter((c) => c.destinationNodeId === r.id);
394
+ if (s.length === 0) return [-1, -1];
395
395
  let a = 1 / 0, o = -1 / 0;
396
- for (const c of i) {
397
- const d = t.find((F) => F.id === c.sourceNodeId);
396
+ for (const c of s) {
397
+ const d = t.find((_) => _.id === c.sourceNodeId);
398
398
  if (!d) continue;
399
399
  const [S, A] = St(
400
400
  t,
@@ -405,164 +405,182 @@ const gt = (t, e, r, n, i = /* @__PURE__ */ new Set()) => i.has(r.id) ? [] : (i.
405
405
  S !== -1 && (a = Math.min(a, S + 1), o = Math.max(o, A + 1));
406
406
  }
407
407
  return a === 1 / 0 ? [-1, -1] : [a, o];
408
- }, Ut = (t, e, r) => St(t, e, r, /* @__PURE__ */ new Set()), yt = (t) => t.find((r) => r.type === "origin") || null, Q = (t, e, r) => {
408
+ }, Ut = (t, e, r) => St(t, e, r, /* @__PURE__ */ new Set()), ht = (t) => t.find((r) => r.type === "origin") || null, Q = (t, e, r) => {
409
409
  if (!t)
410
- return yt(e);
410
+ return ht(e);
411
411
  const n = r.find((a) => a.sourceNodeId === t.id);
412
412
  if (!n)
413
413
  return null;
414
- const i = e.find((a) => a.id === n.destinationNodeId);
415
- return i || null;
414
+ const s = e.find((a) => a.id === n.destinationNodeId);
415
+ return s || null;
416
416
  };
417
417
  async function Wt(t, e, r, n) {
418
- const i = t ? "true" : "false", a = n.find(
419
- (o) => o.sourceNodeHandle === i && o.sourceNodeId === e
418
+ const s = t ? "true" : "false", a = n.find(
419
+ (o) => o.sourceNodeHandle === s && o.sourceNodeId === e
420
420
  );
421
421
  return r.find((o) => o.id === a?.destinationNodeId);
422
422
  }
423
- const Y = xt("experience-instance"), Gt = ft(
423
+ const Y = It("experience-instance"), Gt = ft(
424
424
  ({
425
425
  client: t,
426
426
  experience: e,
427
427
  target: r
428
428
  }) => {
429
- const n = k(), i = k(), a = k(), o = k(), c = k(), d = k(), S = e.componentStore, A = Y.store("transitioning"), F = t.history.entriesStore.map((s) => s.filter((l) => l.experienceId === e.id)), T = F.map((s) => s.filter((l) => P(l.node))), x = F.map((s) => s.at(-1)?.node || null), f = D(
429
+ const n = k(), s = k(), a = k(), o = k(), c = k(), d = k(), S = e.componentStore, A = Y.store("transitioning"), _ = t.history.entriesStore.map((i) => i.filter((l) => l.experienceId === e.id)), P = _.map((i) => i.filter((l) => U(l.node))), I = _.map((i) => i[i.length - 1]?.node || null), u = H(
430
430
  e.treeStore,
431
- x,
432
- ({ steps: s }, l) => s.find((u) => l && P(l) && u.id === l.stepId) || null
433
- ), y = D(
431
+ I,
432
+ ({ steps: i }, l) => i.find((f) => l && U(l) && f.id === l.stepId) || null
433
+ ), h = H(
434
434
  e.treeStore,
435
- T,
436
- ({ steps: s }, l) => {
437
- const u = l.at(-2);
438
- if (!u || !P(u.node))
439
- return null;
440
- const h = u.node;
441
- return s.find(($) => $.id === h.stepId) || null;
442
- }
443
- ), b = D(
444
- e.treeStore,
445
- x,
446
- ({ nodes: s, edges: l }, u) => u ? Ht(s, l, u) : []
447
- ), L = D(
435
+ I,
436
+ ({ nodes: i, edges: l }, f) => f ? Ht(i, l, f) : []
437
+ ), b = H(
448
438
  e.treeStore,
449
- x,
450
- ({ nodes: s, edges: l }, u) => u ? Ut(s, l, u) : [-1, -1]
451
- ), C = D(
439
+ I,
440
+ ({ nodes: i, edges: l }, f) => f ? Ut(i, l, f) : [-1, -1]
441
+ ), T = H(
452
442
  e.treeStore,
453
- x,
454
- ({ nodes: s, edges: l }, u) => u ? jt(s, l, u) : [-1, -1]
455
- ), _ = Y.store(!1), U = ut(_, {
443
+ I,
444
+ ({ nodes: i, edges: l }, f) => f ? jt(i, l, f) : [-1, -1]
445
+ ), v = Y.store(!1), L = ut(v, {
456
446
  open: () => !0,
457
447
  close: () => !1,
458
- toggle: (s) => !s,
459
- set: (s, l) => l
460
- }), ht = M(async () => {
448
+ toggle: (i) => !i,
449
+ set: (i, l) => l
450
+ }), yt = $(async () => {
461
451
  t.history.back({ experienceId: e.id });
462
- }), wt = B({
452
+ }), wt = F({
463
453
  source: e.treeStore,
464
- effect: async (s, l) => {
465
- const u = s.nodes.find((h) => P(h) && h.stepId === l);
466
- u && t.history.push({ experienceId: e.id, node: u });
454
+ effect: async (i, l) => {
455
+ const f = i.nodes.find((w) => U(w) && w.stepId === l);
456
+ f && t.history.push({ experienceId: e.id, node: f });
467
457
  }
468
- }), Z = B({
469
- source: x,
470
- effect: (s) => {
458
+ }), Z = F({
459
+ source: I,
460
+ effect: (i) => {
471
461
  }
472
- }), V = B({
462
+ }), V = F({
473
463
  source: e.treeStore,
474
- effect: async ({ nodes: s }) => yt(s)
475
- }), q = B({
464
+ effect: async ({ nodes: i }) => ht(i)
465
+ }), q = F({
476
466
  source: e.treeStore,
477
- effect: async ({ nodes: s, edges: l }, u) => {
478
- if (J(u))
479
- return Q(u, s, l);
467
+ effect: async ({ nodes: i, edges: l }, f) => {
468
+ if (J(f))
469
+ return Q(f, i, l);
480
470
  }
481
- }), X = B({
471
+ }), X = F({
482
472
  source: e.treeStore,
483
- effect: async ({ nodes: s, edges: l, conditionals: u }, h) => {
484
- if (!it(h))
473
+ effect: async ({ nodes: i, edges: l, conditionals: f }, w) => {
474
+ if (!st(w))
485
475
  return;
486
- const $ = u.find((O) => O.id === h.conditionalId);
487
- if (!$)
476
+ const D = f.find((B) => B.id === w.conditionalId);
477
+ if (!D)
488
478
  return;
489
- const E = h.id, w = await st(t, $.condition);
490
- return Wt(!!w, E, s, l);
479
+ const E = w.id, y = await it(t, D.condition);
480
+ return Wt(!!y, E, i, l);
491
481
  }
492
- }), tt = B({
482
+ }), tt = F({
493
483
  source: e.treeStore,
494
- effect: async ({ nodes: s, edges: l }, u) => {
495
- if (!ct(u))
484
+ effect: async ({ nodes: i, edges: l }, f) => {
485
+ if (!ct(f))
496
486
  return;
497
- const h = u.action;
498
- if (!h) {
499
- I("warn", `Action node ${u.id} has no action name`);
487
+ const w = f.action;
488
+ if (!w) {
489
+ x("warn", `Action node ${f.id} has no action name`);
500
490
  return;
501
491
  }
502
- const $ = t.actions.getByName(h).getState();
503
- if (!$) {
504
- I("warn", `Action '${h}' not registered on client`);
492
+ const D = t.actions.getByName(w).getState();
493
+ if (!D) {
494
+ x("warn", `Action '${w}' not registered on client`);
505
495
  const E = l.find(
506
- (w) => w.sourceNodeId === u.id && w.sourceNodeHandle === "false"
496
+ (y) => y.sourceNodeId === f.id && y.sourceNodeHandle === "false"
507
497
  );
508
- return E ? s.find((w) => w.id === E.destinationNodeId) : null;
498
+ return E ? i.find((y) => y.id === E.destinationNodeId) : null;
509
499
  }
510
- if (typeof $.action != "function") {
511
- I("warn", `Action '${h}' is not a function`);
500
+ if (typeof D.action != "function") {
501
+ x("warn", `Action '${w}' is not a function`);
512
502
  const E = l.find(
513
- (w) => w.sourceNodeId === u.id && w.sourceNodeHandle === "false"
503
+ (y) => y.sourceNodeId === f.id && y.sourceNodeHandle === "false"
514
504
  );
515
- return E ? s.find((w) => w.id === E.destinationNodeId) : null;
505
+ return E ? i.find((y) => y.id === E.destinationNodeId) : null;
516
506
  }
517
507
  try {
518
- I("info", `Executing action: ${h}`), await $.action(h);
508
+ x("info", `Executing action: ${w}`), await D.action(w);
519
509
  const E = l.find(
520
- (O) => O.sourceNodeId === u.id && O.sourceNodeHandle === "true"
510
+ (B) => B.sourceNodeId === f.id && B.sourceNodeHandle === "true"
521
511
  );
522
512
  if (!E)
523
- return I("warn", `No 'true' edge found for action node ${u.id}`), null;
524
- const w = s.find((O) => O.id === E.destinationNodeId);
525
- return I("info", `Action '${h}' succeeded, moving to node ${w?.id}`), w || null;
513
+ return x("warn", `No 'true' edge found for action node ${f.id}`), null;
514
+ const y = i.find((B) => B.id === E.destinationNodeId);
515
+ return x("info", `Action '${w}' succeeded, moving to node ${y?.id}`), y || null;
526
516
  } catch (E) {
527
- I("warn", `Action '${h}' failed:`, E);
528
- const w = l.find(
529
- (W) => W.sourceNodeId === u.id && W.sourceNodeHandle === "false"
517
+ x("warn", `Action '${w}' failed:`, E);
518
+ const y = l.find(
519
+ (W) => W.sourceNodeId === f.id && W.sourceNodeHandle === "false"
530
520
  );
531
- if (!w)
532
- return I("warn", `No 'false' edge found for action node ${u.id}`), null;
533
- const O = s.find((W) => W.id === w.destinationNodeId);
534
- return I("info", `Action '${h}' failed, moving to node ${O?.id}`), O || null;
521
+ if (!y)
522
+ return x("warn", `No 'false' edge found for action node ${f.id}`), null;
523
+ const B = i.find((W) => W.id === y.destinationNodeId);
524
+ return x("info", `Action '${w}' failed, moving to node ${B?.id}`), B || null;
535
525
  }
536
526
  }
537
- }), Nt = M((s) => {
538
- if (at(s))
539
- return t.launchExperienceById(s.experienceId);
540
- }), et = B({
541
- source: [x, e.treeStore],
542
- effect: async ([s, { nodes: l, edges: u }]) => Q(s, l, u)
543
- }), H = B({
544
- source: [x, e.treeStore],
545
- effect: async ([s, { nodes: l, edges: u }]) => Q(s, l, u)
546
- }), It = M((s) => {
547
- t.history.push({ experienceId: e.id, node: s });
548
- }), nt = B({
527
+ }), Nt = $((i) => {
528
+ if (at(i))
529
+ return t.launchExperienceById(i.experienceId);
530
+ }), et = F({
531
+ source: [I, e.treeStore],
532
+ effect: async ([i, { nodes: l, edges: f }]) => Q(i, l, f)
533
+ }), C = F({
534
+ source: [I, e.treeStore],
535
+ effect: async ([i, { nodes: l, edges: f }]) => Q(i, l, f)
536
+ }), xt = $((i) => {
537
+ t.history.push({ experienceId: e.id, node: i });
538
+ }), nt = F({
549
539
  source: e.configStore,
550
- effect: async ({ initializeOpenLogic: s }) => Ft(s) ? !!await st(t, s) : s ?? !1
551
- }), z = k(), rt = k();
540
+ effect: async ({ initializeOpenLogic: i }) => Ft(i) ? !!await it(t, i) : i ?? !1
541
+ }), M = {
542
+ id: Math.random().toString(36).substring(7),
543
+ // config
544
+ experienceId: e.id,
545
+ configStore: e.configStore,
546
+ target: r,
547
+ componentStore: S,
548
+ // state
549
+ stateStore: A,
550
+ // open close
551
+ isOpenStore: v,
552
+ open: L.open,
553
+ close: L.close,
554
+ toggleOpen: L.toggle,
555
+ setOpen: L.set,
556
+ // nodes
557
+ treeStore: e.treeStore,
558
+ fieldsStore: e.fieldsStore,
559
+ currentNodeStore: I,
560
+ currentStepStore: u,
561
+ nextReachableStepNodesStore: h,
562
+ stepsToOriginStore: b,
563
+ stepsToLeafStore: T,
564
+ // history
565
+ goToNextStep: s,
566
+ goToPreviousStep: a,
567
+ goToStepById: o,
568
+ stepsHistoryStore: P
569
+ }, z = k(), rt = k();
552
570
  return m({
553
- source: x,
571
+ source: I,
554
572
  target: z
555
573
  }), m({
556
574
  clock: z,
557
- filter: (s) => s === null,
575
+ filter: (i) => i === null,
558
576
  target: V
559
577
  }), m({
560
578
  clock: z,
561
- filter: (s) => s !== null,
579
+ filter: (i) => i !== null,
562
580
  target: rt
563
581
  }), Et({
564
582
  source: rt,
565
- match: (s) => it(s) ? "condition" : P(s) ? "step" : at(s) ? "launchExperience" : J(s) ? "origin" : ct(s) ? "action" : "other",
583
+ match: (i) => st(i) ? "condition" : U(i) ? "step" : at(i) ? "launchExperience" : J(i) ? "origin" : ct(i) ? "action" : "other",
566
584
  cases: {
567
585
  origin: q,
568
586
  condition: X,
@@ -576,62 +594,66 @@ const Y = xt("experience-instance"), Gt = ft(
576
594
  X.doneData,
577
595
  q.doneData,
578
596
  V.doneData,
579
- H.doneData,
597
+ C.doneData,
580
598
  et.doneData,
581
599
  tt.doneData
582
600
  ],
583
601
  filter: Boolean,
584
- target: It
602
+ target: xt
585
603
  }), m({
586
- clock: i,
587
- target: H
604
+ clock: s,
605
+ target: C
588
606
  }), m({
589
- clock: i,
590
- source: f,
607
+ clock: s,
608
+ source: u,
591
609
  filter: Boolean,
592
- target: t.eventBus.prepend((s) => ({
610
+ target: t.eventBus.prepend((i) => ({
593
611
  type: "step_submit",
594
- step: s,
595
- experience: e
612
+ step: i,
613
+ experience: e,
614
+ experienceInstance: M
596
615
  }))
597
616
  }), m({
598
- clock: H.done,
599
- source: f,
617
+ clock: C.done,
618
+ source: u,
600
619
  filter: Boolean,
601
- target: t.eventBus.prepend((s) => ({
620
+ target: t.eventBus.prepend((i) => ({
602
621
  type: "step_submit_success",
603
- step: s,
604
- experience: e
622
+ step: i,
623
+ experience: e,
624
+ experienceInstance: M
605
625
  }))
606
626
  }), m({
607
- clock: H.fail,
608
- source: f,
627
+ clock: C.fail,
628
+ source: u,
609
629
  filter: Boolean,
610
- target: t.eventBus.prepend((s) => ({
630
+ target: t.eventBus.prepend((i) => ({
611
631
  type: "step_submit_error",
612
- step: s,
613
- experience: e
632
+ step: i,
633
+ experience: e,
634
+ experienceInstance: M
614
635
  }))
615
636
  }), m({
616
637
  clock: a,
617
- target: ht
638
+ target: yt
618
639
  }), m({ clock: o, target: wt }), m({
619
- source: D([
640
+ source: H([
620
641
  X.pending,
621
642
  q.pending,
622
643
  V.pending,
623
- H.pending
644
+ C.pending
624
645
  ]),
625
- fn: (s) => s.some(Boolean) ? "transitioning" : "ready",
646
+ fn: (i) => i.some(Boolean) ? "transitioning" : "ready",
626
647
  target: A
627
648
  }), m({
628
649
  clock: Z.doneData,
629
- source: f,
650
+ source: u,
630
651
  filter: Boolean,
631
- target: t.eventBus.prepend((s) => ({
652
+ target: t.eventBus.prepend((i) => ({
632
653
  type: "step_enter",
633
- step: s,
634
- experience: e
654
+ step: i,
655
+ experience: e,
656
+ experienceInstance: M
635
657
  }))
636
658
  }), m({
637
659
  clock: d,
@@ -639,134 +661,107 @@ const Y = xt("experience-instance"), Gt = ft(
639
661
  }), m({
640
662
  source: nt.doneData,
641
663
  fn: Boolean,
642
- target: _
664
+ target: v
643
665
  }), m({
644
- source: x,
666
+ source: I,
645
667
  clock: n,
646
- filter: (s) => s ? J(s) : !0,
668
+ filter: (i) => i ? J(i) : !0,
647
669
  target: et
648
670
  }), m({
649
- source: _,
671
+ source: v,
650
672
  filter: Boolean,
651
673
  target: n
652
674
  }), m({
653
- source: _,
675
+ source: v,
654
676
  filter: Boolean,
655
677
  target: t.eventBus.prepend(() => ({
656
678
  type: "experience_open",
657
- experience: e
679
+ experience: e,
680
+ experienceInstance: M
658
681
  }))
659
682
  }), m({
660
- source: _,
661
- filter: (s) => !s,
683
+ source: v,
684
+ filter: (i) => !i,
662
685
  target: t.eventBus.prepend(() => ({
663
686
  type: "experience_close",
664
- experience: e
687
+ experience: e,
688
+ experienceInstance: M
665
689
  }))
666
690
  }), m({
667
691
  clock: c,
668
692
  target: [d]
669
- }), c(), {
670
- id: Math.random().toString(36).substring(7),
671
- // config
672
- experienceId: e.id,
673
- configStore: e.configStore,
674
- target: r,
675
- componentStore: S,
676
- // state
677
- stateStore: A,
678
- // open close
679
- isOpenStore: _,
680
- open: U.open,
681
- close: U.close,
682
- toggleOpen: U.toggle,
683
- setOpen: U.set,
684
- // nodes
685
- treeStore: e.treeStore,
686
- fieldsStore: e.fieldsStore,
687
- currentNodeStore: x,
688
- currentStepStore: f,
689
- previousStepStore: y,
690
- nextReachableStepNodesStore: b,
691
- stepsToOriginStore: L,
692
- stepsToLeafStore: C,
693
- // history
694
- goToNextStep: i,
695
- goToPreviousStep: a,
696
- goToStepById: o,
697
- stepsHistoryStore: T
698
- };
693
+ }), c(), M;
699
694
  }
700
695
  );
701
696
  function Kt(t) {
702
697
  return lt(Gt, t);
703
698
  }
704
699
  const Vt = ft(({ client: t }) => {
705
- const e = Y.store({}), r = k(), n = k(), i = k(), a = ut(e, {
706
- register(f, y) {
700
+ const e = Y.store({}), r = k(), n = k(), s = k(), a = ut(e, {
701
+ register(u, h) {
707
702
  const b = [
708
- ...f[y.experienceId] ?? []
703
+ ...u[h.experienceId] ?? []
709
704
  ];
710
- return b.push(y), {
711
- ...f,
712
- [y.experienceId]: b
705
+ return b.push(h), {
706
+ ...u,
707
+ [h.experienceId]: b
713
708
  };
714
709
  },
715
- unregister(f, y) {
716
- const b = y.experienceId, L = f[b]?.filter(
717
- (C) => C !== y
710
+ unregister(u, h) {
711
+ const b = h.experienceId, T = u[b]?.filter(
712
+ (v) => v !== h
718
713
  );
719
714
  return {
720
- ...f,
721
- [b]: L ?? []
715
+ ...u,
716
+ [b]: T ?? []
722
717
  };
723
718
  }
724
- }), o = M(
725
- ({ experience: f, target: y }) => Kt({ client: t, experience: f, target: y })
726
- ), c = M((f) => {
727
- a.register(f);
728
- }), d = M(
729
- (f) => {
730
- f.target && Tt(f.target, () => {
731
- i(f);
719
+ }), o = $(
720
+ ({ experience: u, target: h }) => Kt({ client: t, experience: u, target: h })
721
+ ), c = $((u) => {
722
+ a.register(u);
723
+ }), d = $(
724
+ (u) => {
725
+ u.target && Tt(u.target, () => {
726
+ s(u);
732
727
  });
733
728
  }
734
- ), S = M((f) => {
735
- a.unregister(f);
736
- }), A = M((f) => {
737
- const y = f.componentStore.getState();
738
- if (!y) {
739
- I("warn", "No app component registered. Skipping init.");
729
+ ), S = $((u) => {
730
+ a.unregister(u);
731
+ }), A = $((u) => {
732
+ const h = u.componentStore.getState();
733
+ if (!h) {
734
+ x("warn", "No app component registered. Skipping init.");
740
735
  return;
741
736
  }
742
- const b = y.frameworkStore.getState();
737
+ const b = h.frameworkStore.getState();
743
738
  if (!b) {
744
- I(
739
+ x(
745
740
  "error",
746
- `No framework registered for component '${y.name}'. Skipping rendering.`
741
+ `No framework registered for component '${h.name}'. Skipping rendering.`
747
742
  );
748
743
  return;
749
744
  }
750
- const L = f.target;
751
- if (!L) {
752
- I(
745
+ const T = u.target;
746
+ if (!T) {
747
+ x(
753
748
  "error",
754
- `No target element registered for experience '${f.experienceId}'. Skipping rendering.`
749
+ `No target element registered for experience '${u.experienceId}'. Skipping rendering.`
755
750
  );
756
751
  return;
757
752
  }
758
- const C = Mt(L);
753
+ const v = Mt(T);
759
754
  try {
760
- b.render(C, y.component, t, f);
761
- } catch (_) {
762
- I("error", _);
755
+ b.render(v, h.component, t, u);
756
+ } catch (L) {
757
+ x("error", L);
763
758
  }
764
759
  });
765
760
  m({
766
761
  clock: r,
767
762
  target: o
768
763
  }), m({
769
- clock: i,
764
+ clock: s,
770
765
  target: S
771
766
  }), m({
772
767
  clock: o.doneData,
@@ -777,36 +772,36 @@ const Vt = ft(({ client: t }) => {
777
772
  ]
778
773
  }), m({
779
774
  clock: o.doneData,
780
- target: t.eventBus.prepend((f) => ({
775
+ target: t.eventBus.prepend((u) => ({
781
776
  type: "experience_initialize",
782
- experienceInstance: f
777
+ experienceInstance: u
783
778
  }))
784
779
  }), m({
785
780
  clock: n,
786
781
  target: A
787
782
  });
788
- function F(f, y) {
789
- r({ experience: f, target: y });
783
+ function _(u, h) {
784
+ r({ experience: u, target: h });
790
785
  }
791
- const T = e.map((f) => Object.values(f).flat());
792
- function x(f) {
793
- return e.map((y) => y[f] || [], { skipVoid: !1 });
786
+ const P = e.map((u) => Object.values(u).flat());
787
+ function I(u) {
788
+ return e.map((h) => h[u] || [], { skipVoid: !1 });
794
789
  }
795
790
  return {
796
- spawn: F,
797
- getByExperienceId: x,
798
- listStore: T
791
+ spawn: _,
792
+ getByExperienceId: I,
793
+ listStore: P
799
794
  };
800
795
  });
801
796
  function ne(t) {
802
797
  return lt(Vt, t);
803
798
  }
804
799
  export {
805
- P as a,
800
+ U as a,
806
801
  ne as b,
807
802
  te as c,
808
803
  Yt as d,
809
- st as e,
804
+ it as e,
810
805
  Rt as f,
811
806
  Zt as g,
812
807
  Kt as h,
@@ -40,7 +40,6 @@ declare const createExperienceInstanceFactory: ({ client, experience, target, }:
40
40
  fieldsStore: import('effector').Store<import('../..').Field[]>;
41
41
  currentNodeStore: import('effector').Store<ExperienceNode | null>;
42
42
  currentStepStore: import('effector').Store<ExperienceStep | null>;
43
- previousStepStore: import('effector').Store<ExperienceStep | null>;
44
43
  nextReachableStepNodesStore: import('effector').Store<ExperienceNode[]>;
45
44
  stepsToOriginStore: import('effector').Store<number[]>;
46
45
  stepsToLeafStore: import('effector').Store<number[]>;
@@ -84,7 +83,6 @@ declare const createExperienceInstanceIndexFactory: ({ client }: {
84
83
  fieldsStore: import('effector').Store<import('../..').Field[]>;
85
84
  currentNodeStore: import('effector').Store<ExperienceNode | null>;
86
85
  currentStepStore: import('effector').Store<ExperienceStep | null>;
87
- previousStepStore: import('effector').Store<ExperienceStep | null>;
88
86
  nextReachableStepNodesStore: import('effector').Store<ExperienceNode[]>;
89
87
  stepsToOriginStore: import('effector').Store<number[]>;
90
88
  stepsToLeafStore: import('effector').Store<number[]>;
@@ -123,7 +121,6 @@ declare const createExperienceInstanceIndexFactory: ({ client }: {
123
121
  fieldsStore: import('effector').Store<import('../..').Field[]>;
124
122
  currentNodeStore: import('effector').Store<ExperienceNode | null>;
125
123
  currentStepStore: import('effector').Store<ExperienceStep | null>;
126
- previousStepStore: import('effector').Store<ExperienceStep | null>;
127
124
  nextReachableStepNodesStore: import('effector').Store<ExperienceNode[]>;
128
125
  stepsToOriginStore: import('effector').Store<number[]>;
129
126
  stepsToLeafStore: import('effector').Store<number[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"experience-instance.d.ts","sourceRoot":"","sources":["../../../../src/entities/experience-instance/experience-instance.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,UAAU,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAGjB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAoB1C,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAC5E,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACtF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;CACzC;AAED,QAAA,MAAM,+BAA+B,oCAKhC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,eAAe,CAAA;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAscF,CAAA;AAED,wBAAgB,wBAAwB,CACtC,CAAC,SAAS,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAC,CAAC,CAAC,EAC/D,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAE/D;AAED,QAAA,MAAM,oCAAoC,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;wBAqI7D,eAAe,UAAU,WAAW;4BAQhC,UAAU,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS/C,CAAA;AAEF,wBAAgB,6BAA6B,CAC3C,CAAC,SAAS,UAAU,CAAC,OAAO,oCAAoC,CAAC,CAAC,CAAC,CAAC,EACpE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,oCAAoC,CAAC,CAEpE"}
1
+ {"version":3,"file":"experience-instance.d.ts","sourceRoot":"","sources":["../../../../src/entities/experience-instance/experience-instance.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,UAAU,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAGjB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAoB1C,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAC5E,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACtF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;CACzC;AAED,QAAA,MAAM,+BAA+B,oCAKhC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,eAAe,CAAA;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgcF,CAAA;AAED,wBAAgB,wBAAwB,CACtC,CAAC,SAAS,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAC,CAAC,CAAC,EAC/D,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAE/D;AAED,QAAA,MAAM,oCAAoC,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;wBAqI7D,eAAe,UAAU,WAAW;4BAQhC,UAAU,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS/C,CAAA;AAEF,wBAAgB,6BAA6B,CAC3C,CAAC,SAAS,UAAU,CAAC,OAAO,oCAAoC,CAAC,CAAC,CAAC,CAAC,EACpE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,oCAAoC,CAAC,CAEpE"}
@@ -85,7 +85,6 @@ export declare class Picked {
85
85
  fieldsStore: import('effector').Store<Field[]>;
86
86
  currentNodeStore: import('effector').Store<import('.').ExperienceNode | null>;
87
87
  currentStepStore: import('effector').Store<import('.').ExperienceStep | null>;
88
- previousStepStore: import('effector').Store<import('.').ExperienceStep | null>;
89
88
  nextReachableStepNodesStore: import('effector').Store<import('.').ExperienceNode[]>;
90
89
  stepsToOriginStore: import('effector').Store<number[]>;
91
90
  stepsToLeafStore: import('effector').Store<number[]>;
@@ -124,7 +123,6 @@ export declare class Picked {
124
123
  fieldsStore: import('effector').Store<Field[]>;
125
124
  currentNodeStore: import('effector').Store<import('.').ExperienceNode | null>;
126
125
  currentStepStore: import('effector').Store<import('.').ExperienceStep | null>;
127
- previousStepStore: import('effector').Store<import('.').ExperienceStep | null>;
128
126
  nextReachableStepNodesStore: import('effector').Store<import('.').ExperienceNode[]>;
129
127
  stepsToOriginStore: import('effector').Store<number[]>;
130
128
  stepsToLeafStore: import('effector').Store<number[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"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"}
@@ -26,32 +26,40 @@ export interface PayloadMap {
26
26
  };
27
27
  experience_open: {
28
28
  experience: ExperienceStore;
29
+ experienceInstance: ExperienceInstance;
29
30
  };
30
31
  experience_close: {
31
32
  experience: ExperienceStore;
33
+ experienceInstance: ExperienceInstance;
32
34
  };
33
35
  experience_complete: {
34
36
  experience: ExperienceStore;
37
+ experienceInstance: ExperienceInstance;
35
38
  };
36
39
  step_enter: {
37
40
  step: ExperienceStep;
38
41
  experience: ExperienceStore;
42
+ experienceInstance: ExperienceInstance;
39
43
  };
40
44
  step_submit: {
41
45
  step: ExperienceStep;
42
46
  experience: ExperienceStore;
47
+ experienceInstance: ExperienceInstance;
43
48
  };
44
49
  step_submit_success: {
45
50
  step: ExperienceStep;
46
51
  experience: ExperienceStore;
52
+ experienceInstance: ExperienceInstance;
47
53
  };
48
54
  step_submit_error: {
49
55
  step: ExperienceStep;
50
56
  experience: ExperienceStore;
57
+ experienceInstance: ExperienceInstance;
51
58
  };
52
59
  step_complete: {
53
60
  step: ExperienceStep;
54
61
  experience: ExperienceStore;
62
+ experienceInstance: ExperienceInstance;
55
63
  };
56
64
  form_submit: {
57
65
  form: FormPayload;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/utils/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/utils/events.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.1-dev.1770162676770",
3
+ "version": "0.0.1-dev.1770178792114",
4
4
  "dependencies": {
5
5
  "@withease/factories": "^1.0.5"
6
6
  },
@@ -1 +0,0 @@
1
- "use strict";const i=require("effector"),U=require("@withease/factories"),C=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),we=require("./object-BbFTsGh3.cjs");function Ee(e){return typeof e=="number"&&!isNaN(e)}function R(e){return typeof e=="string"}function E(e){return Array.isArray(e)}function ae(e){return e instanceof Promise}function re(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function m(e){if(Ee(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function M(e){return`${e}`}const Ne={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>m(e)>m(t),">=":(e,t)=>m(e)>=m(t),"<":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async e=>await b(e),"!":async e=>!await b(e),"%":(e,t)=>m(e)%m(t),log:e=>(console.log(e),e),in:(e,t)=>t?R(t)?t.indexOf(M(e))!==-1:E(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(M).join(""),substr:(e,t,r)=>{const n=M(e),a=m(t);if(r===void 0)return n.substr(a);const c=m(r);if(c<0){const o=n.substr(a);return o.substr(0,o.length+c)}return n.substr(a,c)},"+":(...e)=>e.reduce((t,r)=>m(t)+m(r),0),"*":(...e)=>e.reduce((t,r)=>m(t)*m(r),1),"-":(e,t)=>{const r=m(e);return t===void 0?-r:r-m(t)},"/":(e,t)=>m(e)/m(t),min:(...e)=>Math.min(...e.map(m)),max:(...e)=>Math.max(...e.map(m)),merge:(...e)=>e.reduce((t,r)=>E(r)?t.concat(r):t.concat([r]),[]),var(e,t){const r=arguments.length>1?t:null;if(e===""||e==="."||e===null||e===void 0)return this;if(typeof e=="number"&&Array.isArray(this))return e>=0&&e<this.length?this[e]:r;const n=M(e);if(n===""||n===".")return this;const a=n.split(".");let c=this;for(const o of a){if(c==null)return r;if(Array.isArray(c)){const u=parseInt(o,10);isNaN(u)?c=c[o]:c=c[u]}else c=c[o]}return c!==void 0?c:r},async missing(...e){const t=E(e[0])?e[0]:e,r=[];for(const n of t){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await g({missing:t},this);if(!E(r)||!E(t))return[];const n=r.filter(R);return t.filter(R).length-n.length>=m(e)?[]:n},invoke(...e){const[t,...r]=e;return typeof t!="function"?null:Reflect.apply(t,null,r)},regexp_matches(e,t){let r=e,n="";if(E(e)){const[c,o]=e;r=c,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(M(t))},throw(e){throw new Error(M(e))}};async function g(e,t){if(!e)return e;if(ae(e))return g(await e,t);if(E(e))return Promise.all(e.map(o=>g(o,t)));if(!re(e))return e;const r=Ie(e);let n=r?e[r]??[]:[];switch(E(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await b(await g(n[o],t)))return g(n[o+1],t);return n.length%2===1?g(n[n.length-1],t):null;case"and":{let o=null;for(const u of n)if(o=await g(u,t),!await b(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,t),await b(o))return o;return o}case"map":{const o=await g(n[0],t);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],t);return E(o)?(await Promise.all(o.map(async p=>{const S=await b(await g(n[1],p));return{item:p,shouldInclude:S}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],t);if(!E(o))return n.length>2?await g(n[2],t):null;const u=n[1];let S=n.length>2?await g(n[2],t):null;for(const k of o)S=await g(u,{current:k,accumulator:S});return S}case"all":{const o=await g(n[0],t);if(!E(o)||o.length===0)return!1;for(const u of o)if(!await b(await g(n[1],u)))return!1;return!0}case"some":{const o=await g(n[0],t);if(!E(o))return!1;for(const u of o)if(await b(await g(n[1],u)))return!0;return!1}case"none":{const o=await g(n[0],t);if(!E(o))return!0;for(const u of o)if(await b(await g(n[1],u)))return!1;return!0}case"catch":try{return await g(n[0],t)}catch(o){return re(o)?await g(o,t):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,t))),c=r?Ne[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,a)}async function b(e){return ae(e)?b(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function Ie(e){return Object.keys(e)[0]}function ce(e){return!we.isEmpty(e)}async function J(e,t,r){const n=e.getStateSnapshot(),a=e.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:(...S)=>p.predicate({...n,args:S})}),{}),c=e.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:S}=await p.getBucket();return S}}),{}),o={...r,responses:e.responses.getAllStore.getState(),location:typeof n.location=="object"?{hash:n.location.hash,host:n.location.host,hostname:n.location.hostname,href:n.location.href,origin:n.location.origin,pathname:n.location.pathname,port:n.location.port,protocol:n.location.protocol,search:n.location.search}:void 0,predicates:a,features:c};return await g(t,o)}function xe(e){return!C.supportsWindow()||!C.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}const ke="open";function ve(e){if(!C.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:ke})}function be(){return new Promise((e,t)=>{if(!C.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Ae(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const j="picked-root",q="picked-target",Oe="picked-root";function Fe(e,t){return[...e,{selector:`${Oe}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=xe(n.selector).filter(c=>!$e(c,t)&&!ue(c,t));return{...n,elements:a}})}function Be(e,t){return e.flatMap(r=>r.elements.map(n=>Me(n,r.placement,t)))}function _e(e,t){e.classList.add(q),e.classList.add(`${q}-${t}`)}function $e(e,t){return t?e.classList.contains(`${q}-${t}`):e.classList.contains(`${q}`)}function ue(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(j)}function Te(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(j),t.classList.add(`${j}-${e}`),t}function Me(e,t,r){let n;const a=Te(r);if(e instanceof Document)n=e.body.appendChild(a);else{switch(t){case"replace":e.replaceWith(a);break;case"before":e.before(a);break;case"after":e.after(a);break;case"prepend":e.prepend(a);break;default:e.append(a);break}n=a}return n}function oe(e){return e.type==="conditional"}function _(e){return e.type==="step"}function se(e){return e.type==="experience"}function X(e){return e.type==="origin"}function ie(e){return e.type==="action"}const fe=(e,t,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),_(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=e.find(p=>p.id===o.destinationNodeId);return u?fe(e,t,u,!1,a):[]})),Le=(e,t,r)=>fe(e,t,r,!0,new Set),le=(e,t,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=t.filter(p=>p.sourceNodeId===r.id);if(c.length===0)return[0,0];let o=1/0,u=-1/0;for(const p of c){const S=e.find($=>$.id===p.destinationNodeId);if(!S)continue;const[k,O]=le(e,t,S,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,O+1))}return o===1/0?[-1,-1]:[o,u]},De=(e,t,r)=>le(e,t,r,!0,new Set),de=(e,t,r,n=new Set)=>{if(n.has(r.id))return[-1,-1];if(n.add(r.id),r.type==="origin")return[0,0];const a=t.filter(u=>u.destinationNodeId===r.id);if(a.length===0)return[-1,-1];let c=1/0,o=-1/0;for(const u of a){const p=e.find(O=>O.id===u.sourceNodeId);if(!p)continue;const[S,k]=de(e,t,p,new Set(n));S!==-1&&(c=Math.min(c,S+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},Re=(e,t,r)=>de(e,t,r,new Set),pe=e=>e.find(r=>r.type==="origin")||null,z=(e,t,r)=>{if(!e)return pe(t);const n=r.find(c=>c.sourceNodeId===e.id);if(!n)return null;const a=t.find(c=>c.id===n.destinationNodeId);return a||null};async function Pe(e,t,r,n){const a=e?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===t);return r.find(o=>o.id===c?.destinationNodeId)}const Q=i.createDomain("experience-instance"),He=U.createFactory(({client:e,experience:t,target:r})=>{const n=i.createEvent(),a=i.createEvent(),c=i.createEvent(),o=i.createEvent(),u=i.createEvent(),p=i.createEvent(),S=t.componentStore,k=Q.store("transitioning"),O=e.history.entriesStore.map(s=>s.filter(d=>d.experienceId===t.id)),$=O.map(s=>s.filter(d=>_(d.node))),I=O.map(s=>s.at(-1)?.node||null),l=i.combine(t.treeStore,I,({steps:s},d)=>s.find(f=>d&&_(d)&&f.id===d.stepId)||null),h=i.combine(t.treeStore,$,({steps:s},d)=>{const f=d.at(-2);if(!f||!_(f.node))return null;const y=f.node;return s.find(B=>B.id===y.stepId)||null}),v=i.combine(t.treeStore,I,({nodes:s,edges:d},f)=>f?Le(s,d,f):[]),T=i.combine(t.treeStore,I,({nodes:s,edges:d},f)=>f?Re(s,d,f):[-1,-1]),L=i.combine(t.treeStore,I,({nodes:s,edges:d},f)=>f?De(s,d,f):[-1,-1]),F=Q.store(!1),P=i.createApi(F,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,d)=>d}),me=i.createEffect(async()=>{e.history.back({experienceId:t.id})}),Se=i.attach({source:t.treeStore,effect:async(s,d)=>{const f=s.nodes.find(y=>_(y)&&y.stepId===d);f&&e.history.push({experienceId:t.id,node:f})}}),Y=i.attach({source:I,effect:s=>{}}),W=i.attach({source:t.treeStore,effect:async({nodes:s})=>pe(s)}),G=i.attach({source:t.treeStore,effect:async({nodes:s,edges:d},f)=>{if(X(f))return z(f,s,d)}}),K=i.attach({source:t.treeStore,effect:async({nodes:s,edges:d,conditionals:f},y)=>{if(!oe(y))return;const B=f.find(A=>A.id===y.conditionalId);if(!B)return;const x=y.id,w=await J(e,B.condition);return Pe(!!w,x,s,d)}}),Z=i.attach({source:t.treeStore,effect:async({nodes:s,edges:d},f)=>{if(!ie(f))return;const y=f.action;if(!y){N.logger("warn",`Action node ${f.id} has no action name`);return}const B=e.actions.getByName(y).getState();if(!B){N.logger("warn",`Action '${y}' not registered on client`);const x=d.find(w=>w.sourceNodeId===f.id&&w.sourceNodeHandle==="false");return x?s.find(w=>w.id===x.destinationNodeId):null}if(typeof B.action!="function"){N.logger("warn",`Action '${y}' is not a function`);const x=d.find(w=>w.sourceNodeId===f.id&&w.sourceNodeHandle==="false");return x?s.find(w=>w.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${y}`),await B.action(y);const x=d.find(A=>A.sourceNodeId===f.id&&A.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${f.id}`),null;const w=s.find(A=>A.id===x.destinationNodeId);return N.logger("info",`Action '${y}' succeeded, moving to node ${w?.id}`),w||null}catch(x){N.logger("warn",`Action '${y}' failed:`,x);const w=d.find(H=>H.sourceNodeId===f.id&&H.sourceNodeHandle==="false");if(!w)return N.logger("warn",`No 'false' edge found for action node ${f.id}`),null;const A=s.find(H=>H.id===w.destinationNodeId);return N.logger("info",`Action '${y}' failed, moving to node ${A?.id}`),A||null}}}),he=i.createEffect(s=>{if(se(s))return e.launchExperienceById(s.experienceId)}),ee=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:d,edges:f}])=>z(s,d,f)}),D=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:d,edges:f}])=>z(s,d,f)}),ye=i.createEffect(s=>{e.history.push({experienceId:t.id,node:s})}),te=i.attach({source:t.configStore,effect:async({initializeOpenLogic:s})=>ce(s)?!!await J(e,s):s??!1}),V=i.createEvent(),ne=i.createEvent();return i.sample({source:I,target:V}),i.sample({clock:V,filter:s=>s===null,target:W}),i.sample({clock:V,filter:s=>s!==null,target:ne}),i.split({source:ne,match:s=>oe(s)?"condition":_(s)?"step":se(s)?"launchExperience":X(s)?"origin":ie(s)?"action":"other",cases:{origin:G,condition:K,step:Y,launchExperience:he,action:Z,__:i.createEvent()}}),i.sample({clock:[K.doneData,G.doneData,W.doneData,D.doneData,ee.doneData,Z.doneData],filter:Boolean,target:ye}),i.sample({clock:a,target:D}),i.sample({clock:a,source:l,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),i.sample({clock:D.done,source:l,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t}))}),i.sample({clock:D.fail,source:l,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t}))}),i.sample({clock:c,target:me}),i.sample({clock:o,target:Se}),i.sample({source:i.combine([K.pending,G.pending,W.pending,D.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:k}),i.sample({clock:Y.doneData,source:l,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t}))}),i.sample({clock:p,target:te}),i.sample({source:te.doneData,fn:Boolean,target:F}),i.sample({source:I,clock:n,filter:s=>s?X(s):!0,target:ee}),i.sample({source:F,filter:Boolean,target:n}),i.sample({source:F,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t}))}),i.sample({source:F,filter:s=>!s,target:e.eventBus.prepend(()=>({type:"experience_close",experience:t}))}),i.sample({clock:u,target:[p]}),u(),{id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:S,stateStore:k,isOpenStore:F,open:P.open,close:P.close,toggleOpen:P.toggle,setOpen:P.set,treeStore:t.treeStore,fieldsStore:t.fieldsStore,currentNodeStore:I,currentStepStore:l,previousStepStore:h,nextReachableStepNodesStore:v,stepsToOriginStore:T,stepsToLeafStore:L,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:$}});function ge(e){return U.invoke(He,e)}const Ce=U.createFactory(({client:e})=>{const t=Q.store({}),r=i.createEvent(),n=i.createEvent(),a=i.createEvent(),c=i.createApi(t,{register(l,h){const v=[...l[h.experienceId]??[]];return v.push(h),{...l,[h.experienceId]:v}},unregister(l,h){const v=h.experienceId,T=l[v]?.filter(L=>L!==h);return{...l,[v]:T??[]}}}),o=i.createEffect(({experience:l,target:h})=>ge({client:e,experience:l,target:h})),u=i.createEffect(l=>{c.register(l)}),p=i.createEffect(l=>{l.target&&Ae(l.target,()=>{a(l)})}),S=i.createEffect(l=>{c.unregister(l)}),k=i.createEffect(l=>{const h=l.componentStore.getState();if(!h){N.logger("warn","No app component registered. Skipping init.");return}const v=h.frameworkStore.getState();if(!v){N.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const T=l.target;if(!T){N.logger("error",`No target element registered for experience '${l.experienceId}'. Skipping rendering.`);return}const L=ve(T);try{v.render(L,h.component,e,l)}catch(F){N.logger("error",F)}});i.sample({clock:r,target:o}),i.sample({clock:a,target:S}),i.sample({clock:o.doneData,target:[u,p,n]}),i.sample({clock:o.doneData,target:e.eventBus.prepend(l=>({type:"experience_initialize",experienceInstance:l}))}),i.sample({clock:n,target:k});function O(l,h){r({experience:l,target:h})}const $=t.map(l=>Object.values(l).flat());function I(l){return t.map(h=>h[l]||[],{skipVoid:!1})}return{spawn:O,getByExperienceId:I,listStore:$}});function je(e){return U.invoke(Ce,e)}exports.createAppHosts=Be;exports.createExperienceInstance=ge;exports.createExperienceInstanceIndex=je;exports.domInteractive=be;exports.evaluateRuleLogic=J;exports.getTargetElements=Fe;exports.isPickedRoot=ue;exports.isRulesLogic=ce;exports.isStepNode=_;exports.tagTargetElement=_e;