@picked/client 0.0.1-dev.1762750479117 → 0.0.1-dev.1762930276554

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 +1 @@
1
- "use strict";var U=Object.defineProperty;var V=(t,e,r)=>e in t?U(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var y=(t,e,r)=>V(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),h=require("@withease/factories"),F=require("../experience-instance-COUhADSj.cjs"),I=require("../logger-BsmHUUw1.cjs"),w=require("../storage-DuRlyFaY.cjs"),N=require("../id-BKIWbSTy.cjs"),z=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),L=f.createDomain("experience"),_=h.createFactory(({client:t,experience:e})=>{const r=L.store(e),n=f.createApi(r,{merge(l,S){return{...l,...S.experience}}}),c=r.map(l=>({name:l.name,decisionLogic:l.decide,targetSelectors:l.targets,initializeOpenLogic:e.initializeOpen})),u=t.components.listStore.map(l=>l.find(S=>S.name===`experience:${e.id}`)||l.find(S=>S.name==="experience"),{skipVoid:!1}),s=r.map(l=>({steps:l.steps,nodes:l.nodes,edges:l.edges,conditionals:l.conditionals})),o=e.actions??[];return{id:e.id,configStore:c,treeStore:s,componentStore:u,actions:o,merge:n.merge}});function q(t){return h.invoke(_,t)}const K=h.createFactory(({client:t})=>{const e=L.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.id]:o}}});function n(s){const o=e.getState()[s.id];if(o){o.merge({experience:s,strategy:"override"});return}const l=q({client:t,experience:s});r.register(l)}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getById:u,listStore:c}});function H(t){return h.invoke(K,t)}const W=(t,e)=>{e.register(t)},M=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=F.getTargetElements(r,e.id);n.forEach(({elements:u})=>u.forEach(s=>F.tagTargetElement(s,e.id))),F.createAppHosts(n,e.id).forEach(u=>{t.experienceInstances.spawn(e,u)})},B=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await G(t,e)&&M(t,e)}))},G=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return F.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&F.isRulesLogic(r)?await F.evaluateRuleLogic(t,r)===!0:!0},Y=(t,e,r)=>{const n=e.name,c=e.setup(t);if(c){const u=r[n]??{};r[n]=Object.freeze({...u,...c})}},J=f.createDomain("component"),Q=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function X(t){return h.invoke(Q,t)}const Z=h.createFactory(({client:t})=>{const e=J.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const S=X({client:t,name:s,component:o});r.register(S)}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function ee(t){return h.invoke(Z,t)}const $=(t,e,r)=>{r.register(t,e)},te=f.createDomain("framework"),re=h.createFactory(({client:t})=>{const e=te.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function se(t){return h.invoke(re,t)}const ne=(t,e)=>{e.register(t.name,t)},oe=6e3,j=w.createStorageKey("last_ping","global"),ie=t=>`${t}/api/v1/ping`,ae=async t=>{try{const e=Date.now(),r=localStorage.getItem(j);if(r&&e-parseInt(r)<oe)return!0;const n=ie(t.apiUrl),c={projectId:t.projectId,path:window.location.pathname},u=JSON.stringify(c),s={"Content-Type":"application/json"},o=document.getElementById("picked_script"),l=o==null?void 0:o.dataset.verceltoken;l&&(s["x-vercel-protection-bypass"]=l);const b=(await fetch(n,{method:"POST",headers:s,body:u})).ok;return b&&localStorage.setItem(j,e.toString()),b}catch(e){return I.logger("error",e),!1}};function ce(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 ue=f.createDomain("predicate"),le=h.createFactory(({client:t})=>{const e=ue.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:{name:o.name,predicate:o.predicate}}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:o}))}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function pe(t){return h.invoke(le,t)}const ge=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),de=h.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=f.createApi(e,{register(p,a){return{...p,[a.id]:a.feature}}});function c(p,a){e.getState()[p]&&I.logger("warn",`Feature '${p}' already registered. Registering again will override the previous registration.`);const d={id:p,feature:{...a,id:p}};n.register(Object.freeze({id:p,feature:d}))}const u=f.createEffect(async({id:p,key:a,storage:i="local"})=>{const d=w.createStorageKey(`feature:${p}:${a}`,"global"),g=(i==="session"?w.sessionStore:w.localStore).get(d).boolean();return g?{id:p,key:a,bucket:g}:null}),s=f.createEffect(p=>{if(!p)return null;const a=w.createStorageKey(`feature:${p.id}:${p.key}`,"global");(p.storage==="session"?w.sessionStore:w.localStore).set(a,p.bucket)}),o=new Map,l=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:p,resolvedFeaturesStore:a},{id:i,decide:d,key:m})=>{const g=a.find(A=>A.id===i);if(g)return g;const v=p[i];if(!v)throw new Error(`Feature with id '${i}' not found`);const x=o.get(`${i}:${m}`);if(x!==void 0){const A=await x;return{id:v.id,bucket:A,key:m,storage:v.feature.storage}}const P=d();o.set(`${i}:${m}`,P);const E=await P;return{id:v.id,bucket:E,key:m,storage:v.feature.storage}}});f.sample({clock:n.register,fn:p=>{const{id:a,feature:i}=p;return{id:a,key:i.feature.key,storage:i.feature.storage}},target:u}),f.sample({source:e,clock:l.doneData,fn:(p,a)=>{var v;const{id:i,bucket:d,storage:m}=a,g=(v=p[i])==null?void 0:v.feature.key;return g?{key:g,id:i,bucket:d,storage:m}:null},target:s});const S=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:p,resolvedFeaturesStore:a})=>Object.values(p).map(i=>{const d=a.find(m=>m.id===i.id);return d?{id:i.id,name:i.feature.name,key:i.feature.key,getBucket:()=>({id:i.id,bucket:d.bucket}),isResolved:!0}:{id:i.id,name:i.feature.name,key:i.feature.key,getBucket:async()=>await l(i.feature),isResolved:!1}}));f.sample({clock:l.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:p},{id:a})=>!p.some(i=>i.id===a),fn:(p,a)=>a,target:t.eventBus.prepend(p=>({type:"feature_decide",feature:p}))}),f.sample({clock:[u.doneData,l.doneData],source:r,fn:(p,a)=>!a||p.some(i=>i.id===a.id)?p:[...p,a],target:r});function b(p){return e.map(a=>a[p],{skipVoid:!1})}return{register:c,getByName:b,listStore:S}});function fe(t){return h.invoke(de,t)}const me=(t,e,r)=>{r.register(t,e)},R=f.createDomain("history");function O(t,e){return{id:N.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ye=h.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),r=R.event(),n=R.event(),c=R.event();t.on(e,(s,o)=>({entries:[...s.entries,O(o.experienceId,o.node)]})),t.on(r,(s,o)=>({entries:[...s.entries.slice(0,-1),O(o.experienceId,o.node)]})),t.on(c,(s,o)=>o);function u(s,o){const l={lastStepIndex:-1,secondLastStepIndex:-1};for(let S=s.length-1;S>=0;S--){const b=s[S],p=b==null?void 0:b.node;if(!(!p||!F.isStepNode(p))&&!(o&&(b==null?void 0:b.experienceId)!==o))if(l.lastStepIndex===-1)l.lastStepIndex=S;else{l.secondLastStepIndex=S;break}}return l}return t.on(n,(s,o)=>{const{secondLastStepIndex:l}=u(s.entries,o.experienceId),S=l!==-1?s.entries.slice(0,l+1):s.entries;return{...s,entries:S}}),{push:e,replace:r,back:n,restore:c,entriesStore:t.map(s=>s.entries)}});function he(){return h.invoke(ye)}const Se=()=>f.createEvent(),ve=f.createDomain("field"),ke=h.createFactory(()=>{const t=ve.store({}),e=f.createApi(t,{register(s,o){return{...s,[o.field.id]:o.field}}});function r(s){e.register({field:s})}const n=t.map(s=>Object.values(s));function c(s){return t.map(o=>o[s]||null)}function u(s){return t.map(o=>Object.values(o).find(l=>l.name===s)||null)}return{register:r,getById:c,listStore:n,getByName:u}});function we(){return h.invoke(ke)}const Fe=(t,e)=>{e.register(t)},be=f.createDomain("action"),Ie=h.createFactory(()=>{const t=be.store({}),e=f.createApi(t,{register(u,s){return{...u,[s.name]:{name:s.name,action:s.action}}}});function r(u,s){e.register({name:u,action:s})}const n=t.map(u=>Object.values(u));function c(u){return t.map(s=>s[u],{skipVoid:!1})}return{register:r,getByName:c,listStore:n}});function xe(){return h.invoke(Ie)}const Ee=(t,e,r)=>{r.register(t,e)},Re=f.createDomain("response"),Pe=h.createFactory(({client:t})=>{const e=Re.store({}),r=f.createEvent(),n=f.createEvent(),c=f.createApi(e,{register(a,i){return{...a,[i.fieldId]:i.response}},registerBatch(a,i){return{...a,...i}},clear(a,i){const{[i]:d,...m}=a;return m},clearAll(){return{}}});function u(a,i){c.register({fieldId:a,response:i})}async function s(a){const i=[];return await Promise.allSettled(Object.entries(a).map(async([d,m])=>{let g=m;const v=t.fields.getById(d).getState();if(!v){i.push({fieldId:d,userMessage:`Field '${d}' not found`,systemMessage:`No field with ID '${d}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:g});return}if(v.multiple&&(typeof g=="string"||typeof g=="number"||typeof g=="boolean")&&(g=[g]),v.validation&&!z.isEmpty(v.validation)){const x=await F.evaluateRuleLogic(t,v.validation,{$input:g});if(typeof x=="string"){i.push({fieldId:d,userMessage:x,systemMessage:`Field validation resulted in an error: ${x}.`,value:g});return}if(x===!1){i.push({fieldId:d,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:g});return}}if(v.required&&(typeof g>"u"||g===null||g===""||Array.isArray(g)&&!g.length)){i.push({fieldId:d,userMessage:"This field is required",systemMessage:"Field is required.",value:g});return}if(!v.multiple&&Array.isArray(g)&&g.length>1){i.push({fieldId:d,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:g});return}if(v.options){const x=v.options.map(E=>E.value),P=Array.isArray(g)?g:[g];Array.isArray(g)&&(P.every(E=>x.includes(E))||i.push({fieldId:d,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${x.join(", ")}`,value:g}))}})),{responsesToCommit:a,validationErrors:i}}async function o(a){const{responsesToCommit:i,validationErrors:d}=await s(a);return d.length?{errors:d}:(c.registerBatch(i),{errors:[]})}const l=e.map(a=>a),S=e.map(a=>Object.keys(a).map(d=>({fieldId:d,value:a[d]})));function b(a){const i=t.fields.getById(a),d=e.map(m=>m[a]||null);return f.combine({f:i,r:d},({f:m,r:g})=>g||(m!=null&&m.defaultValue?m.defaultValue:null))}function p(a){const i=t.fields.getByName(a);return f.combine({f:i,s:e},({f:d,s:m})=>{const g=d&&m[d.id]||null;return g||(d!=null&&d.defaultValue?d.defaultValue:null)})}return f.sample({clock:r,target:c.clearAll}),f.sample({clock:n,target:c.clear}),{register:u,clearAll:r,clear:n,commit:o,getResponsesToCommit:s,listStore:S,getAllStore:l,getByFieldId:b,getByFieldName:p}});function Ae(t){return h.invoke(Pe,t)}const De=()=>"0.0.1-dev.1762750479117";function Be(){if(k.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!=null&&e.dataset.api)return e.dataset.api}return"https://api.picked.app"}function $e(){if(!k.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[c]of t.entries())c.startsWith("picked-")&&r.add(c);for(const c of r){const u=c.replace("picked-","");e[u]=t.getAll(c)}const n=w.createStorageKey("s");if(r.size>0)w.sessionStore.set(n,e);else{const c=w.sessionStore.get(n);if(c)return c.json()||{}}return e}function je(){if(k.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 Ce=()=>({id:je()}),Oe=w.createStorageKey("session","global"),Le=()=>{if(!k.supportsLocalStorage())return null;const t=w.localStore.get(Oe);let e=t.isSet()?t.json():null;return e||(e=Ce(),t.set(e)),e},Me=()=>Le();class D{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",Se());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"searchParams",$e());y(this,"history",he());y(this,"components",ee({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",H({client:this}));y(this,"frameworks",se({client:this}));y(this,"predicates",pe({client:this}));y(this,"features",fe({client:this}));y(this,"responses",Ae({client:this}));y(this,"fields",we());y(this,"actions",xe());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Be(),this.session=Me(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:De()}),I.logger("info","Picked client initialized.")}start(){ae(this),(async()=>{k.supportsDocument()&&(document.body&&B(this),await F.domInteractive(),await B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){ne(e,this.frameworks)}registerComponent(e,r){$(e,r,this.components)}registerPlugin(e){Y(this,e,this.plugins)}registerFeature(e,r){me(e,r,this.features)}registerPredicate(e,r){ge(e,r,this.predicates)}registerField(e){Fe(e,this.fields)}registerAction(e,r){Ee(e,r,this.actions)}registerExperience(e){e.component&&$(`experience:${e.id}`,e.component,this.components),W(e,this.experiences)}getStateSnapshot(){return ce(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){I.logger("warn",`Experience with id '${e}' not found.`);return}M(this,r)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(r=>{if(Array.isArray(r)){r.forEach(c=>{this.registerPlugin(c)});return}const n=typeof r=="function"?r():r;if(Array.isArray(n)){n.forEach(c=>this.registerPlugin(c));return}this.registerPlugin(n)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const c=typeof n=="function"?n():n;this.registerFeature(r,c)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,c]=r.split(":");if(!n||!c)return;let u=c;u==="true"&&(u=!0),u==="false"&&(u=!1),this.registerFeature(n,{key:`${u}`,name:n,decide:()=>u,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){I.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"){I.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}}y(D,"logger",I.logger);function T(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Te(t){return t.some(e=>e.condition||T(e))}async function Ue(t,e){return e.length===0||!Te(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!T(n))return n;const s=(await Promise.all(n.options.map(async l=>l.condition?await F.evaluateRuleLogic(t,l.condition)?l:null:l))).filter(l=>l!==null);return s.length===n.options.length?n:s.length===0?null:{...n,options:s}}))).filter(n=>n!==null)}const Ve=t=>{const e=new D(t);return k.bindClient(e),e};exports.evaluateRuleLogic=F.evaluateRuleLogic;exports.isPickedRoot=F.isPickedRoot;exports.createStorageKey=w.createStorageKey;exports.localStore=w.localStore;exports.sessionStore=w.sessionStore;exports.subscribe=w.subscribe;exports.supportsCookies=k.supportsCookies;exports.supportsCryptoRandomUUID=k.supportsCryptoRandomUUID;exports.supportsDocument=k.supportsDocument;exports.supportsHistory=k.supportsHistory;exports.supportsIntersectionObserver=k.supportsIntersectionObserver;exports.supportsLocalStorage=k.supportsLocalStorage;exports.supportsLocation=k.supportsLocation;exports.supportsSessionStorage=k.supportsSessionStorage;exports.supportsShadowRoot=k.supportsShadowRoot;exports.supportsWebComponents=k.supportsWebComponents;exports.supportsWindow=k.supportsWindow;exports.Picked=D;exports.createClient=Ve;exports.getStepFields=Ue;
1
+ "use strict";var U=Object.defineProperty;var V=(t,e,r)=>e in t?U(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var y=(t,e,r)=>V(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),h=require("@withease/factories"),F=require("../experience-instance-BLph5qCo.cjs"),I=require("../logger-BsmHUUw1.cjs"),w=require("../storage-DuRlyFaY.cjs"),N=require("../id-BKIWbSTy.cjs"),z=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),L=f.createDomain("experience"),_=h.createFactory(({client:t,experience:e})=>{const r=L.store(e),n=f.createApi(r,{merge(l,S){return{...l,...S.experience}}}),c=r.map(l=>({name:l.name,decisionLogic:l.decide,targetSelectors:l.targets,initializeOpenLogic:e.initializeOpen})),u=t.components.listStore.map(l=>l.find(S=>S.name===`experience:${e.id}`)||l.find(S=>S.name==="experience"),{skipVoid:!1}),s=r.map(l=>({steps:l.steps,nodes:l.nodes,edges:l.edges,conditionals:l.conditionals})),o=e.actions??[];return{id:e.id,configStore:c,treeStore:s,componentStore:u,actions:o,merge:n.merge}});function q(t){return h.invoke(_,t)}const K=h.createFactory(({client:t})=>{const e=L.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.id]:o}}});function n(s){const o=e.getState()[s.id];if(o){o.merge({experience:s,strategy:"override"});return}const l=q({client:t,experience:s});r.register(l)}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getById:u,listStore:c}});function H(t){return h.invoke(K,t)}const W=(t,e)=>{e.register(t)},M=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=F.getTargetElements(r,e.id);n.forEach(({elements:u})=>u.forEach(s=>F.tagTargetElement(s,e.id))),F.createAppHosts(n,e.id).forEach(u=>{t.experienceInstances.spawn(e,u)})},B=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await G(t,e)&&M(t,e)}))},G=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return F.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&F.isRulesLogic(r)?await F.evaluateRuleLogic(t,r)===!0:!0},Y=(t,e,r)=>{const n=e.name,c=e.setup(t);if(c){const u=r[n]??{};r[n]=Object.freeze({...u,...c})}},J=f.createDomain("component"),Q=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function X(t){return h.invoke(Q,t)}const Z=h.createFactory(({client:t})=>{const e=J.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const S=X({client:t,name:s,component:o});r.register(S)}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function ee(t){return h.invoke(Z,t)}const $=(t,e,r)=>{r.register(t,e)},te=f.createDomain("framework"),re=h.createFactory(({client:t})=>{const e=te.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function se(t){return h.invoke(re,t)}const ne=(t,e)=>{e.register(t.name,t)},oe=6e3,j=w.createStorageKey("last_ping","global"),ie=t=>`${t}/api/v1/ping`,ae=async t=>{try{const e=Date.now(),r=localStorage.getItem(j);if(r&&e-parseInt(r)<oe)return!0;const n=ie(t.apiUrl),c={projectId:t.projectId,path:window.location.pathname},u=JSON.stringify(c),s={"Content-Type":"application/json"},o=document.getElementById("picked_script"),l=o==null?void 0:o.dataset.verceltoken;l&&(s["x-vercel-protection-bypass"]=l);const b=(await fetch(n,{method:"POST",headers:s,body:u})).ok;return b&&localStorage.setItem(j,e.toString()),b}catch(e){return I.logger("error",e),!1}};function ce(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 ue=f.createDomain("predicate"),le=h.createFactory(({client:t})=>{const e=ue.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:{name:o.name,predicate:o.predicate}}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:o}))}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function pe(t){return h.invoke(le,t)}const ge=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),de=h.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=f.createApi(e,{register(p,a){return{...p,[a.id]:a.feature}}});function c(p,a){e.getState()[p]&&I.logger("warn",`Feature '${p}' already registered. Registering again will override the previous registration.`);const d={id:p,feature:{...a,id:p}};n.register(Object.freeze({id:p,feature:d}))}const u=f.createEffect(async({id:p,key:a,storage:i="local"})=>{const d=w.createStorageKey(`feature:${p}:${a}`,"global"),g=(i==="session"?w.sessionStore:w.localStore).get(d).boolean();return g===null?null:{id:p,key:a,bucket:g}}),s=f.createEffect(p=>{if(!p)return null;const a=w.createStorageKey(`feature:${p.id}:${p.key}`,"global");(p.storage==="session"?w.sessionStore:w.localStore).set(a,p.bucket)}),o=new Map,l=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:p,resolvedFeaturesStore:a},{id:i,decide:d,key:m})=>{const g=a.find(A=>A.id===i);if(g)return g;const v=p[i];if(!v)throw new Error(`Feature with id '${i}' not found`);const x=o.get(`${i}:${m}`);if(x!==void 0){const A=await x;return{id:v.id,bucket:A,key:m,storage:v.feature.storage}}const P=d();o.set(`${i}:${m}`,P);const E=await P;return{id:v.id,bucket:E,key:m,storage:v.feature.storage}}});f.sample({clock:n.register,fn:p=>{const{id:a,feature:i}=p;return{id:a,key:i.feature.key,storage:i.feature.storage}},target:u}),f.sample({source:e,clock:l.doneData,fn:(p,a)=>{var v;const{id:i,bucket:d,storage:m}=a,g=(v=p[i])==null?void 0:v.feature.key;return g?{key:g,id:i,bucket:d,storage:m}:null},target:s});const S=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:p,resolvedFeaturesStore:a})=>Object.values(p).map(i=>{const d=a.find(m=>m.id===i.id);return d?{id:i.id,name:i.feature.name,key:i.feature.key,getBucket:()=>({id:i.id,bucket:d.bucket}),isResolved:!0}:{id:i.id,name:i.feature.name,key:i.feature.key,getBucket:async()=>await l(i.feature),isResolved:!1}}));f.sample({clock:l.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:p},{id:a})=>!p.some(i=>i.id===a),fn:(p,a)=>a,target:t.eventBus.prepend(p=>({type:"feature_decide",feature:p}))}),f.sample({clock:[u.doneData,l.doneData],source:r,fn:(p,a)=>!a||p.some(i=>i.id===a.id)?p:[...p,a],target:r});function b(p){return e.map(a=>a[p],{skipVoid:!1})}return{register:c,getByName:b,listStore:S}});function fe(t){return h.invoke(de,t)}const me=(t,e,r)=>{r.register(t,e)},R=f.createDomain("history");function O(t,e){return{id:N.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ye=h.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),r=R.event(),n=R.event(),c=R.event();t.on(e,(s,o)=>({entries:[...s.entries,O(o.experienceId,o.node)]})),t.on(r,(s,o)=>({entries:[...s.entries.slice(0,-1),O(o.experienceId,o.node)]})),t.on(c,(s,o)=>o);function u(s,o){const l={lastStepIndex:-1,secondLastStepIndex:-1};for(let S=s.length-1;S>=0;S--){const b=s[S],p=b==null?void 0:b.node;if(!(!p||!F.isStepNode(p))&&!(o&&(b==null?void 0:b.experienceId)!==o))if(l.lastStepIndex===-1)l.lastStepIndex=S;else{l.secondLastStepIndex=S;break}}return l}return t.on(n,(s,o)=>{const{secondLastStepIndex:l}=u(s.entries,o.experienceId),S=l!==-1?s.entries.slice(0,l+1):s.entries;return{...s,entries:S}}),{push:e,replace:r,back:n,restore:c,entriesStore:t.map(s=>s.entries)}});function he(){return h.invoke(ye)}const Se=()=>f.createEvent(),ve=f.createDomain("field"),ke=h.createFactory(()=>{const t=ve.store({}),e=f.createApi(t,{register(s,o){return{...s,[o.field.id]:o.field}}});function r(s){e.register({field:s})}const n=t.map(s=>Object.values(s));function c(s){return t.map(o=>o[s]||null)}function u(s){return t.map(o=>Object.values(o).find(l=>l.name===s)||null)}return{register:r,getById:c,listStore:n,getByName:u}});function we(){return h.invoke(ke)}const Fe=(t,e)=>{e.register(t)},be=f.createDomain("action"),Ie=h.createFactory(()=>{const t=be.store({}),e=f.createApi(t,{register(u,s){return{...u,[s.name]:{name:s.name,action:s.action}}}});function r(u,s){e.register({name:u,action:s})}const n=t.map(u=>Object.values(u));function c(u){return t.map(s=>s[u],{skipVoid:!1})}return{register:r,getByName:c,listStore:n}});function xe(){return h.invoke(Ie)}const Ee=(t,e,r)=>{r.register(t,e)},Re=f.createDomain("response"),Pe=h.createFactory(({client:t})=>{const e=Re.store({}),r=f.createEvent(),n=f.createEvent(),c=f.createApi(e,{register(a,i){return{...a,[i.fieldId]:i.response}},registerBatch(a,i){return{...a,...i}},clear(a,i){const{[i]:d,...m}=a;return m},clearAll(){return{}}});function u(a,i){c.register({fieldId:a,response:i})}async function s(a){const i=[];return await Promise.allSettled(Object.entries(a).map(async([d,m])=>{let g=m;const v=t.fields.getById(d).getState();if(!v){i.push({fieldId:d,userMessage:`Field '${d}' not found`,systemMessage:`No field with ID '${d}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:g});return}if(v.multiple&&(typeof g=="string"||typeof g=="number"||typeof g=="boolean")&&(g=[g]),v.validation&&!z.isEmpty(v.validation)){const x=await F.evaluateRuleLogic(t,v.validation,{$input:g});if(typeof x=="string"){i.push({fieldId:d,userMessage:x,systemMessage:`Field validation resulted in an error: ${x}.`,value:g});return}if(x===!1){i.push({fieldId:d,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:g});return}}if(v.required&&(typeof g>"u"||g===null||g===""||Array.isArray(g)&&!g.length)){i.push({fieldId:d,userMessage:"This field is required",systemMessage:"Field is required.",value:g});return}if(!v.multiple&&Array.isArray(g)&&g.length>1){i.push({fieldId:d,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:g});return}if(v.options){const x=v.options.map(E=>E.value),P=Array.isArray(g)?g:[g];Array.isArray(g)&&(P.every(E=>x.includes(E))||i.push({fieldId:d,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${x.join(", ")}`,value:g}))}})),{responsesToCommit:a,validationErrors:i}}async function o(a){const{responsesToCommit:i,validationErrors:d}=await s(a);return d.length?{errors:d}:(c.registerBatch(i),{errors:[]})}const l=e.map(a=>a),S=e.map(a=>Object.keys(a).map(d=>({fieldId:d,value:a[d]})));function b(a){const i=t.fields.getById(a),d=e.map(m=>m[a]||null);return f.combine({f:i,r:d},({f:m,r:g})=>g||(m!=null&&m.defaultValue?m.defaultValue:null))}function p(a){const i=t.fields.getByName(a);return f.combine({f:i,s:e},({f:d,s:m})=>{const g=d&&m[d.id]||null;return g||(d!=null&&d.defaultValue?d.defaultValue:null)})}return f.sample({clock:r,target:c.clearAll}),f.sample({clock:n,target:c.clear}),{register:u,clearAll:r,clear:n,commit:o,getResponsesToCommit:s,listStore:S,getAllStore:l,getByFieldId:b,getByFieldName:p}});function Ae(t){return h.invoke(Pe,t)}const De=()=>"0.0.1-dev.1762930276554";function Be(){if(k.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!=null&&e.dataset.api)return e.dataset.api}return"https://api.picked.app"}function $e(){if(!k.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[c]of t.entries())c.startsWith("picked-")&&r.add(c);for(const c of r){const u=c.replace("picked-","");e[u]=t.getAll(c)}const n=w.createStorageKey("s");if(r.size>0)w.sessionStore.set(n,e);else{const c=w.sessionStore.get(n);if(c)return c.json()||{}}return e}function je(){if(k.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 Ce=()=>({id:je()}),Oe=w.createStorageKey("session","global"),Le=()=>{if(!k.supportsLocalStorage())return null;const t=w.localStore.get(Oe);let e=t.isSet()?t.json():null;return e||(e=Ce(),t.set(e)),e},Me=()=>Le();class D{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",Se());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"searchParams",$e());y(this,"history",he());y(this,"components",ee({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",H({client:this}));y(this,"frameworks",se({client:this}));y(this,"predicates",pe({client:this}));y(this,"features",fe({client:this}));y(this,"responses",Ae({client:this}));y(this,"fields",we());y(this,"actions",xe());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Be(),this.session=Me(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:De()}),I.logger("info","Picked client initialized.")}start(){ae(this),(async()=>{k.supportsDocument()&&(document.body&&B(this),await F.domInteractive(),await B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){ne(e,this.frameworks)}registerComponent(e,r){$(e,r,this.components)}registerPlugin(e){Y(this,e,this.plugins)}registerFeature(e,r){me(e,r,this.features)}registerPredicate(e,r){ge(e,r,this.predicates)}registerField(e){Fe(e,this.fields)}registerAction(e,r){Ee(e,r,this.actions)}registerExperience(e){e.component&&$(`experience:${e.id}`,e.component,this.components),W(e,this.experiences)}getStateSnapshot(){return ce(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){I.logger("warn",`Experience with id '${e}' not found.`);return}M(this,r)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(r=>{if(Array.isArray(r)){r.forEach(c=>{this.registerPlugin(c)});return}const n=typeof r=="function"?r():r;if(Array.isArray(n)){n.forEach(c=>this.registerPlugin(c));return}this.registerPlugin(n)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const c=typeof n=="function"?n():n;this.registerFeature(r,c)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,c]=r.split(":");if(!n||!c)return;let u=c;u==="true"&&(u=!0),u==="false"&&(u=!1),this.registerFeature(n,{key:`${u}`,name:n,decide:()=>u,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){I.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"){I.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}}y(D,"logger",I.logger);function T(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Te(t){return t.some(e=>e.condition||T(e))}async function Ue(t,e){return e.length===0||!Te(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!T(n))return n;const s=(await Promise.all(n.options.map(async l=>l.condition?await F.evaluateRuleLogic(t,l.condition)?l:null:l))).filter(l=>l!==null);return s.length===n.options.length?n:s.length===0?null:{...n,options:s}}))).filter(n=>n!==null)}const Ve=t=>{const e=new D(t);return k.bindClient(e),e};exports.evaluateRuleLogic=F.evaluateRuleLogic;exports.isPickedRoot=F.isPickedRoot;exports.createStorageKey=w.createStorageKey;exports.localStore=w.localStore;exports.sessionStore=w.sessionStore;exports.subscribe=w.subscribe;exports.supportsCookies=k.supportsCookies;exports.supportsCryptoRandomUUID=k.supportsCryptoRandomUUID;exports.supportsDocument=k.supportsDocument;exports.supportsHistory=k.supportsHistory;exports.supportsIntersectionObserver=k.supportsIntersectionObserver;exports.supportsLocalStorage=k.supportsLocalStorage;exports.supportsLocation=k.supportsLocation;exports.supportsSessionStorage=k.supportsSessionStorage;exports.supportsShadowRoot=k.supportsShadowRoot;exports.supportsWebComponents=k.supportsWebComponents;exports.supportsWindow=k.supportsWindow;exports.Picked=D;exports.createClient=Ve;exports.getStepFields=Ue;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-COUhADSj.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:f,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),u=r.createEvent(),p=r.createEvent(),g=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const x=n[d],E=e.componentStore.getState();if(E&&(x!=null&&x.isValidComponent(E.component)))return{rendered:await x.render(E.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(u,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:g,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:m}),r.sample({clock:m.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:m.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:u});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:u,target:I}),o(),f}exports.render=C;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-BLph5qCo.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:f,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),u=r.createEvent(),p=r.createEvent(),g=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const x=n[d],E=e.componentStore.getState();if(E&&(x!=null&&x.isValidComponent(E.component)))return{rendered:await x.render(E.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(u,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:g,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:m}),r.sample({clock:m.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:m.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:u});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:u,target:I}),o(),f}exports.render=C;
package/dist/esm/index.js CHANGED
@@ -3,15 +3,15 @@ var Y = (t, e, r) => e in t ? W(t, e, { enumerable: !0, configurable: !0, writab
3
3
  var m = (t, e, r) => Y(t, typeof e != "symbol" ? e + "" : e, r);
4
4
  import { createDomain as I, createApi as x, createEffect as M, attach as J, sample as F, combine as O, createEvent as C } from "effector";
5
5
  import { createFactory as w, invoke as k } from "@withease/factories";
6
- import { g as U, t as Q, c as X, i as Z, e as B, a as ee, b as te, d as re } from "../experience-instance-Bs9t-zff.js";
7
- import { f as St } from "../experience-instance-Bs9t-zff.js";
6
+ import { g as U, t as Q, c as X, i as Z, e as A, a as ee, b as te, d as re } from "../experience-instance-7IUp4MTc.js";
7
+ import { f as St } from "../experience-instance-7IUp4MTc.js";
8
8
  import { l as v } from "../logger-C9a75KZn.js";
9
- import { c as R, s as $, l as D } from "../storage-Cb_71y48.js";
9
+ import { c as B, s as $, l as D } from "../storage-Cb_71y48.js";
10
10
  import { a as wt } from "../storage-Cb_71y48.js";
11
11
  import { g as se } from "../id-BW-g3y32.js";
12
12
  import { i as ne } from "../object-JwZ58NOH.js";
13
13
  import { s as _, a as oe, b as ie, c as ae, d as ce } from "../supports-BjhuLJ8z.js";
14
- import { h as bt, f as It, j as xt, e as Ft, g as Et, i as Pt, k as Rt } from "../supports-BjhuLJ8z.js";
14
+ import { h as bt, f as It, j as xt, e as Ft, g as Et, i as Pt, k as Bt } from "../supports-BjhuLJ8z.js";
15
15
  const H = I("experience"), ue = w(
16
16
  ({ client: t, experience: e }) => {
17
17
  const r = H.store(e), n = x(r, {
@@ -96,7 +96,7 @@ const ge = (t, e) => {
96
96
  );
97
97
  }, fe = async (t, e) => {
98
98
  const { decisionLogic: r, targetSelectors: n } = e.configStore.getState();
99
- return U(n, e.id).length < 1 || n.length === 0 ? !1 : r && Z(r) ? await B(t, r) === !0 : !0;
99
+ return U(n, e.id).length < 1 || n.length === 0 ? !1 : r && Z(r) ? await A(t, r) === !0 : !0;
100
100
  }, me = (t, e, r) => {
101
101
  const n = e.name, c = e.setup(t);
102
102
  if (c) {
@@ -178,7 +178,7 @@ function Ie(t) {
178
178
  }
179
179
  const xe = (t, e) => {
180
180
  e.register(t.name, t);
181
- }, Fe = 6e3, N = R("last_ping", "global"), Ee = (t) => `${t}/api/v1/ping`, Pe = async (t) => {
181
+ }, Fe = 6e3, N = B("last_ping", "global"), Ee = (t) => `${t}/api/v1/ping`, Pe = async (t) => {
182
182
  try {
183
183
  const e = Date.now(), r = localStorage.getItem(N);
184
184
  if (r && e - parseInt(r) < Fe)
@@ -200,7 +200,7 @@ const xe = (t, e) => {
200
200
  return v("error", e), !1;
201
201
  }
202
202
  };
203
- function Re(t) {
203
+ function Be(t) {
204
204
  const e = typeof window < "u", r = {
205
205
  client: t,
206
206
  responses: t.responses.listStore.getState(),
@@ -212,8 +212,8 @@ function Re(t) {
212
212
  };
213
213
  return Object.freeze(r);
214
214
  }
215
- const Ae = I("predicate"), Be = w(({ client: t }) => {
216
- const e = Ae.store({}), r = x(e, {
215
+ const Re = I("predicate"), Ae = w(({ client: t }) => {
216
+ const e = Re.store({}), r = x(e, {
217
217
  register(s, o) {
218
218
  return {
219
219
  ...s,
@@ -241,7 +241,7 @@ const Ae = I("predicate"), Be = w(({ client: t }) => {
241
241
  };
242
242
  });
243
243
  function $e(t) {
244
- return k(Be, t);
244
+ return k(Ae, t);
245
245
  }
246
246
  const je = (t, e, r) => {
247
247
  r.register(t, e);
@@ -279,13 +279,13 @@ const je = (t, e, r) => {
279
279
  key: a,
280
280
  storage: i = "local"
281
281
  }) => {
282
- const g = R(`feature:${d}:${a}`, "global"), p = (i === "session" ? $ : D).get(g).boolean();
283
- return p ? { id: d, key: a, bucket: p } : null;
282
+ const g = B(`feature:${d}:${a}`, "global"), p = (i === "session" ? $ : D).get(g).boolean();
283
+ return p === null ? null : { id: d, key: a, bucket: p };
284
284
  }
285
285
  ), s = M((d) => {
286
286
  if (!d)
287
287
  return null;
288
- const a = R(`feature:${d.id}:${d.key}`, "global");
288
+ const a = B(`feature:${d.id}:${d.key}`, "global");
289
289
  (d.storage === "session" ? $ : D).set(a, d.bucket);
290
290
  }), o = /* @__PURE__ */ new Map(), l = J({
291
291
  source: { allFeaturesStore: e, resolvedFeaturesStore: r },
@@ -301,9 +301,9 @@ const je = (t, e, r) => {
301
301
  const j = await b;
302
302
  return { id: y.id, bucket: j, key: f, storage: y.feature.storage };
303
303
  }
304
- const A = g();
305
- o.set(`${i}:${f}`, A);
306
- const E = await A;
304
+ const R = g();
305
+ o.set(`${i}:${f}`, R);
306
+ const E = await R;
307
307
  return { id: y.id, bucket: E, key: f, storage: y.feature.storage };
308
308
  }
309
309
  });
@@ -527,7 +527,7 @@ const qe = (t, e, r) => {
527
527
  return;
528
528
  }
529
529
  if (y.multiple && (typeof p == "string" || typeof p == "number" || typeof p == "boolean") && (p = [p]), y.validation && !ne(y.validation)) {
530
- const b = await B(t, y.validation, {
530
+ const b = await A(t, y.validation, {
531
531
  $input: p
532
532
  });
533
533
  if (typeof b == "string") {
@@ -568,8 +568,8 @@ const qe = (t, e, r) => {
568
568
  return;
569
569
  }
570
570
  if (y.options) {
571
- const b = y.options.map((E) => E.value), A = Array.isArray(p) ? p : [p];
572
- Array.isArray(p) && (A.every((E) => b.includes(E)) || i.push({
571
+ const b = y.options.map((E) => E.value), R = Array.isArray(p) ? p : [p];
572
+ Array.isArray(p) && (R.every((E) => b.includes(E)) || i.push({
573
573
  fieldId: g,
574
574
  userMessage: "This field expects a valid option",
575
575
  systemMessage: `Field expects a valid option. Valid options are: ${b.join(", ")}`,
@@ -619,7 +619,7 @@ const qe = (t, e, r) => {
619
619
  function Ye(t) {
620
620
  return k(We, t);
621
621
  }
622
- const Je = () => "0.0.1-dev.1762750479117";
622
+ const Je = () => "0.0.1-dev.1762930276554";
623
623
  function Qe() {
624
624
  if (_()) {
625
625
  const t = [
@@ -645,7 +645,7 @@ function Xe() {
645
645
  const u = c.replace("picked-", "");
646
646
  e[u] = t.getAll(c);
647
647
  }
648
- const n = R("s");
648
+ const n = B("s");
649
649
  if (r.size > 0)
650
650
  $.set(n, e);
651
651
  else {
@@ -663,7 +663,7 @@ function Ze() {
663
663
  }
664
664
  const et = () => ({
665
665
  id: Ze()
666
- }), tt = R("session", "global"), rt = () => {
666
+ }), tt = B("session", "global"), rt = () => {
667
667
  if (!ie()) return null;
668
668
  const t = D.get(tt);
669
669
  let e = t.isSet() ? t.json() : null;
@@ -723,7 +723,7 @@ class q {
723
723
  e.component && V(`experience:${e.id}`, e.component, this.components), ge(e, this.experiences);
724
724
  }
725
725
  getStateSnapshot() {
726
- return Re(this);
726
+ return Be(this);
727
727
  }
728
728
  async launchExperienceById(e) {
729
729
  const r = this.experiences.getById(e).getState();
@@ -817,12 +817,12 @@ function nt(t) {
817
817
  async function ft(t, e) {
818
818
  return e.length === 0 || !nt(e) ? e : (await Promise.all(
819
819
  e.map(async (n) => {
820
- if (!(n.condition ? await B(t, n.condition) : !0))
820
+ if (!(n.condition ? await A(t, n.condition) : !0))
821
821
  return null;
822
822
  if (!n.options || !G(n))
823
823
  return n;
824
824
  const s = (await Promise.all(
825
- n.options.map(async (l) => l.condition ? await B(t, l.condition) ? l : null : l)
825
+ n.options.map(async (l) => l.condition ? await A(t, l.condition) ? l : null : l)
826
826
  )).filter((l) => l !== null);
827
827
  return s.length === n.options.length ? n : s.length === 0 ? null : { ...n, options: s };
828
828
  })
@@ -835,8 +835,8 @@ const mt = (t) => {
835
835
  export {
836
836
  q as Picked,
837
837
  mt as createClient,
838
- R as createStorageKey,
839
- B as evaluateRuleLogic,
838
+ B as createStorageKey,
839
+ A as evaluateRuleLogic,
840
840
  ft as getStepFields,
841
841
  St as isPickedRoot,
842
842
  D as localStore,
@@ -851,6 +851,6 @@ export {
851
851
  Ft as supportsLocation,
852
852
  Et as supportsSessionStorage,
853
853
  Pt as supportsShadowRoot,
854
- Rt as supportsWebComponents,
854
+ Bt as supportsWebComponents,
855
855
  oe as supportsWindow
856
856
  };
@@ -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-Bs9t-zff.js";
2
+ import { h as F } from "../../experience-instance-7IUp4MTc.js";
3
3
  function R() {
4
4
  let c, p;
5
5
  return {
@@ -1,4 +1,4 @@
1
- import { createDomain as yt, createEvent as v, combine as C, createApi as it, createEffect as _, attach as $, split as wt, sample as m } from "effector";
1
+ import { createDomain as yt, createEvent as B, combine as C, createApi as it, createEffect as _, attach as $, split as wt, sample as m } from "effector";
2
2
  import { createFactory as st, invoke as at } from "@withease/factories";
3
3
  import { i as Nt, s as ct, a as It } from "./supports-BjhuLJ8z.js";
4
4
  import { l as I } from "./logger-C9a75KZn.js";
@@ -255,7 +255,7 @@ function vt(t) {
255
255
  (e) => e instanceof HTMLElement
256
256
  );
257
257
  }
258
- function Ot(t) {
258
+ function Bt(t) {
259
259
  if (!Nt())
260
260
  throw new Error("Shadow DOM is not supported in this environment");
261
261
  return t.attachShadow({ mode: "closed" });
@@ -269,7 +269,7 @@ function Xt() {
269
269
  document.readyState !== "loading" ? t() : document.addEventListener("readystatechange", () => t(), { once: !0 });
270
270
  });
271
271
  }
272
- function Bt(t, e) {
272
+ function Ot(t, e) {
273
273
  const r = new MutationObserver((n) => {
274
274
  document.contains(t) || (r.disconnect(), e());
275
275
  });
@@ -413,7 +413,7 @@ const J = yt("experience-instance"), jt = st(
413
413
  experience: e,
414
414
  target: r
415
415
  }) => {
416
- const n = v(), s = v(), a = v(), o = v(), c = v(), d = v(), y = e.componentStore, k = J.store("transitioning"), F = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), P = F.map((i) => i.filter((f) => j(f.node))), x = F.map((i) => {
416
+ const n = B(), s = B(), a = B(), o = B(), c = B(), d = B(), y = e.componentStore, k = J.store("transitioning"), F = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), P = F.map((i) => i.filter((f) => j(f.node))), x = F.map((i) => {
417
417
  var f;
418
418
  return ((f = i[i.length - 1]) == null ? void 0 : f.node) || null;
419
419
  }), u = C(
@@ -428,11 +428,11 @@ const J = yt("experience-instance"), jt = st(
428
428
  e.treeStore,
429
429
  x,
430
430
  ({ nodes: i, edges: f }, l) => l ? Ct(i, f, l) : [-1, -1]
431
- ), M = C(
431
+ ), T = C(
432
432
  e.treeStore,
433
433
  x,
434
434
  ({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : [-1, -1]
435
- ), T = e.configStore.getState().initializeOpenLogic, B = J.store(T === !0), G = it(B, {
435
+ ), M = e.configStore.getState().initializeOpenLogic, v = J.store(M === !0), G = it(v, {
436
436
  open: () => !0,
437
437
  close: () => !1,
438
438
  toggle: (i) => !i,
@@ -536,7 +536,7 @@ const J = yt("experience-instance"), jt = st(
536
536
  step: Q,
537
537
  launchExperience: St,
538
538
  action: Y,
539
- __: v()
539
+ __: B()
540
540
  }
541
541
  }), m({
542
542
  clock: [
@@ -606,21 +606,25 @@ const J = yt("experience-instance"), jt = st(
606
606
  }), m({
607
607
  source: tt.doneData,
608
608
  fn: (i) => !!i,
609
- target: B
609
+ target: v
610
610
  }), m({
611
611
  source: x,
612
612
  clock: n,
613
613
  filter: (i) => i ? rt(i) : !0,
614
614
  target: Z
615
+ }), M === !0 && n(), m({
616
+ source: v,
617
+ filter: (i) => !!i,
618
+ target: n
615
619
  }), m({
616
- source: B,
620
+ source: v,
617
621
  filter: Boolean,
618
622
  target: t.eventBus.prepend(() => ({
619
623
  type: "experience_open",
620
624
  experience: e
621
625
  }))
622
626
  }), m({
623
- source: B,
627
+ source: v,
624
628
  filter: (i) => !i,
625
629
  target: t.eventBus.prepend(() => ({
626
630
  type: "experience_close",
@@ -628,7 +632,7 @@ const J = yt("experience-instance"), jt = st(
628
632
  }))
629
633
  }), m({
630
634
  clock: c,
631
- target: [n, d]
635
+ target: [d]
632
636
  }), c(), {
633
637
  id: Math.random().toString(36).substring(7),
634
638
  // config
@@ -639,7 +643,7 @@ const J = yt("experience-instance"), jt = st(
639
643
  // state
640
644
  stateStore: k,
641
645
  // open close
642
- isOpenStore: B,
646
+ isOpenStore: v,
643
647
  open: G.open,
644
648
  close: G.close,
645
649
  toggleOpen: G.toggle,
@@ -650,7 +654,7 @@ const J = yt("experience-instance"), jt = st(
650
654
  currentStepStore: u,
651
655
  nextReachableStepNodesStore: S,
652
656
  stepsToOriginStore: b,
653
- stepsToLeafStore: M,
657
+ stepsToLeafStore: T,
654
658
  // history
655
659
  goToNextStep: s,
656
660
  goToPreviousStep: a,
@@ -663,7 +667,7 @@ function Gt(t) {
663
667
  return at(jt, t);
664
668
  }
665
669
  const Kt = st(({ client: t }) => {
666
- const e = J.store({}), r = v(), n = v(), s = v(), a = it(e, {
670
+ const e = J.store({}), r = B(), n = B(), s = B(), a = it(e, {
667
671
  register(u, S) {
668
672
  const b = [
669
673
  ...u[S.experienceId] ?? []
@@ -674,13 +678,13 @@ const Kt = st(({ client: t }) => {
674
678
  };
675
679
  },
676
680
  unregister(u, S) {
677
- var T;
678
- const b = S.experienceId, M = (T = u[b]) == null ? void 0 : T.filter(
679
- (B) => B !== S
681
+ var M;
682
+ const b = S.experienceId, T = (M = u[b]) == null ? void 0 : M.filter(
683
+ (v) => v !== S
680
684
  );
681
685
  return {
682
686
  ...u,
683
- [b]: M ?? []
687
+ [b]: T ?? []
684
688
  };
685
689
  }
686
690
  }), o = _(
@@ -689,7 +693,7 @@ const Kt = st(({ client: t }) => {
689
693
  a.register(u);
690
694
  }), d = _(
691
695
  (u) => {
692
- u.target && Bt(u.target, () => {
696
+ u.target && Ot(u.target, () => {
693
697
  s(u);
694
698
  });
695
699
  }
@@ -709,19 +713,19 @@ const Kt = st(({ client: t }) => {
709
713
  );
710
714
  return;
711
715
  }
712
- const M = u.target;
713
- if (!M) {
716
+ const T = u.target;
717
+ if (!T) {
714
718
  I(
715
719
  "error",
716
720
  `No target element registered for experience '${u.experienceId}'. Skipping rendering.`
717
721
  );
718
722
  return;
719
723
  }
720
- const T = Ot(M);
724
+ const M = Bt(T);
721
725
  try {
722
- b.render(T, S.component, t, u);
723
- } catch (B) {
724
- I("error", B);
726
+ b.render(M, S.component, t, u);
727
+ } catch (v) {
728
+ I("error", v);
725
729
  }
726
730
  });
727
731
  m({
@@ -1 +1 @@
1
- "use strict";const s=require("effector"),G=require("@withease/factories"),H=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),mt=require("./object-BbFTsGh3.cjs");function ht(t){return typeof t=="number"&&!isNaN(t)}function R(t){return typeof t=="string"}function E(t){return Array.isArray(t)}function rt(t){return t instanceof Promise}function tt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&Object.keys(t).length===1}function m(t){if(ht(t))return t;const e=parseFloat(`${t}`);return isNaN(e)?0:e}function T(t){return`${t}`}const St={"==":(t,e)=>t==e,"===":(t,e)=>t===e,"!=":(t,e)=>t!=e,"!==":(t,e)=>t!==e,">":(t,e)=>m(t)>m(e),">=":(t,e)=>m(t)>=m(e),"<":(t,e,r)=>{const n=m(t),a=m(e);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(t,e,r)=>{const n=m(t),a=m(e);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async t=>await A(t),"!":async t=>!await A(t),"%":(t,e)=>m(t)%m(e),log:t=>(console.log(t),t),in:(t,e)=>e?R(e)?e.indexOf(T(t))!==-1:E(e)?e.includes(t):!1:!1,cat:(...t)=>t.map(T).join(""),substr:(t,e,r)=>{const n=T(t),a=m(e);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)},"+":(...t)=>t.reduce((e,r)=>m(e)+m(r),0),"*":(...t)=>t.reduce((e,r)=>m(e)*m(r),1),"-":(t,e)=>{const r=m(t);return e===void 0?-r:r-m(e)},"/":(t,e)=>m(t)/m(e),min:(...t)=>Math.min(...t.map(m)),max:(...t)=>Math.max(...t.map(m)),merge:(...t)=>t.reduce((e,r)=>E(r)?e.concat(r):e.concat([r]),[]),var(t,e){const r=arguments.length>1?e:null;if(t===""||t==="."||t===null||t===void 0)return this;if(typeof t=="number"&&Array.isArray(this))return t>=0&&t<this.length?this[t]:r;const n=T(t);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(...t){const e=E(t[0])?t[0]:t,r=[];for(const n of e){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(t,e){const r=await g({missing:e},this);if(!E(r)||!E(e))return[];const n=r.filter(R);return e.filter(R).length-n.length>=m(t)?[]:n},invoke(t){return typeof t!="function"?null:t()},regexp_matches(t,e){let r=t,n="";if(E(t)){const[c,o]=t;r=c,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(T(e))},throw(t){throw new Error(T(t))}};async function g(t,e){if(!t)return t;if(rt(t))return g(await t,e);if(E(t))return Promise.all(t.map(o=>g(o,e)));if(!tt(t))return t;const r=yt(t);let n=r?t[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],e)))return g(n[o+1],e);return n.length%2===1?g(n[n.length-1],e):null;case"and":{let o=null;for(const u of n)if(o=await g(u,e),!await A(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,e),await A(o))return o;return o}case"map":{const o=await g(n[0],e);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],e);return E(o)?(await Promise.all(o.map(async p=>{const y=await A(await g(n[1],p));return{item:p,shouldInclude:y}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],e);if(!E(o))return n.length>2?await g(n[2],e):null;const u=n[1];let y=n.length>2?await g(n[2],e):null;for(const k of o)y=await g(u,{current:k,accumulator:y});return y}case"all":{const o=await g(n[0],e);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],e);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],e);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],e)}catch(o){return tt(o)?await g(o,e):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,e))),c=r?St[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(e,a)}async function A(t){return rt(t)?A(await t):!(Array.isArray(t)&&t.length===0)&&!!t}function yt(t){return Object.keys(t)[0]}function ot(t){return!mt.isEmpty(t)}async function z(t,e,r){const n=t.getStateSnapshot(),a=t.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:()=>p.predicate(n)}),{}),c=t.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:y}=await p.getBucket();return y}}),{}),o={...r,responses:t.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(e,o)}function wt(t){return!H.supportsWindow()||!H.supportsDocument()?[]:Array.from(window.document.querySelectorAll(t)).filter(e=>e instanceof HTMLElement)}function Et(t){if(!H.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return t.attachShadow({mode:"closed"})}function Nt(){return new Promise((t,e)=>{if(!H.supportsDocument()){e();return}document.readyState!=="loading"?t():document.addEventListener("readystatechange",()=>t(),{once:!0})})}function It(t,e){const r=new MutationObserver(n=>{document.contains(t)||(r.disconnect(),e())});r.observe(document.body,{childList:!0,subtree:!0})}const j="picked-root",q="picked-target",xt="picked-root";function kt(t,e){return[...t,{selector:`${xt}[experience-id="${e}"]`,placement:"replace"}].flatMap(n=>{const a=wt(n.selector).filter(c=>!At(c,e)&&!it(c,e));return{...n,elements:a}})}function vt(t,e){return t.flatMap(r=>r.elements.map(n=>Bt(n,r.placement,e)))}function bt(t,e){t.classList.add(q),t.classList.add(`${q}-${e}`)}function At(t,e){return e?t.classList.contains(`${q}-${e}`):t.classList.contains(`${q}`)}function it(t,e){return e?t.classList.contains(`${j}-${e}`):t.classList.contains(j)}function Ot(t){const e=document.createElement("div");return e.style.display="block",e.classList.add(j),e.classList.add(`${j}-${t}`),e}function Bt(t,e,r){let n;const a=Ot(r);if(t instanceof Document)n=t.body.appendChild(a);else{switch(e){case"replace":t.replaceWith(a);break;case"before":t.before(a);break;case"after":t.after(a);break;case"prepend":t.prepend(a);break;default:t.append(a);break}n=a}return n}function Ft(t){return t.type==="conditional"}function L(t){return t.type==="step"}function $t(t){return t.type==="experience"}function et(t){return t.type==="origin"}function nt(t){return t.type==="action"}const st=(t,e,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),L(r)&&!n?[r]:e.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=t.find(p=>p.id===o.destinationNodeId);return u?st(t,e,u,!1,a):[]})),_t=(t,e,r)=>st(t,e,r,!0,new Set),at=(t,e,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=e.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 y=t.find(M=>M.id===p.destinationNodeId);if(!y)continue;const[k,B]=at(t,e,y,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,B+1))}return o===1/0?[-1,-1]:[o,u]},Tt=(t,e,r)=>at(t,e,r,!0,new Set),ct=(t,e,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=e.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=t.find(B=>B.id===u.sourceNodeId);if(!p)continue;const[y,k]=ct(t,e,p,new Set(n));y!==-1&&(c=Math.min(c,y+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},Lt=(t,e,r)=>ct(t,e,r,new Set),ut=t=>t.find(r=>r.type==="origin")||null,W=(t,e,r)=>{if(!t)return ut(e);const n=r.find(c=>c.sourceNodeId===t.id);if(!n)return null;const a=e.find(c=>c.id===n.destinationNodeId);return a||null};async function Mt(t,e,r,n){const a=t?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===e);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const X=s.createDomain("experience-instance"),Dt=G.createFactory(({client:t,experience:e,target:r})=>{const n=s.createEvent(),a=s.createEvent(),c=s.createEvent(),o=s.createEvent(),u=s.createEvent(),p=s.createEvent(),y=e.componentStore,k=X.store("transitioning"),B=t.history.entriesStore.map(i=>i.filter(l=>l.experienceId===e.id)),M=B.map(i=>i.filter(l=>L(l.node))),I=B.map(i=>{var l;return((l=i[i.length-1])==null?void 0:l.node)||null}),f=s.combine(e.treeStore,I,({steps:i},l)=>i.find(d=>l&&L(l)&&d.id===l.stepId)||null),h=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?_t(i,l,d):[]),b=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?Lt(i,l,d):[-1,-1]),F=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?Tt(i,l,d):[-1,-1]),$=e.configStore.getState().initializeOpenLogic,O=X.store($===!0),P=s.createApi(O,{open:()=>!0,close:()=>!1,toggle:i=>!i,set:(i,l)=>l}),lt=s.createEffect(async()=>{t.history.back({experienceId:e.id})}),dt=s.attach({source:e.treeStore,effect:async(i,l)=>{const d=i.nodes.find(w=>L(w)&&w.stepId===l);d&&t.history.push({experienceId:e.id,node:d})}}),J=s.attach({source:I,effect:i=>{}}),K=s.attach({source:e.treeStore,effect:async({nodes:i})=>ut(i)}),U=s.attach({source:e.treeStore,effect:async({nodes:i,edges:l},d)=>W(d,i,l)}),V=s.attach({source:e.treeStore,effect:async({nodes:i,edges:l,conditionals:d},w)=>{if(!w)return;const _=d.find(v=>v.id===w.conditionalId);if(!_)return;const x=w.id,S=await z(t,_.condition);return Mt(!!S,x,i,l)}}),Q=s.attach({source:e.treeStore,effect:async({nodes:i,edges:l},d)=>{if(!d||!nt(d))return;const w=d.action;if(!w){N.logger("warn",`Action node ${d.id} has no action name`);return}const _=t.actions.getByName(w).getState();if(!_){N.logger("warn",`Action '${w}' not registered on client`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?i.find(S=>S.id===x.destinationNodeId):null}if(typeof _.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?i.find(S=>S.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await _.action();const x=l.find(v=>v.sourceNodeId===d.id&&v.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${d.id}`),null;const S=i.find(v=>v.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${S==null?void 0:S.id}`),S||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const S=l.find(C=>C.sourceNodeId===d.id&&C.sourceNodeHandle==="false");if(!S)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const v=i.find(C=>C.id===S.destinationNodeId);return N.logger("info",`Action '${w}' failed, moving to node ${v==null?void 0:v.id}`),v||null}}}),pt=s.createEffect(i=>{if(i)return t.launchExperienceById(i.experienceId)}),Y=s.attach({source:[I,e.treeStore],effect:async([i,{nodes:l,edges:d}])=>W(i,l,d)}),D=s.attach({source:[I,e.treeStore],effect:async([i,{nodes:l,edges:d}])=>W(i,l,d)}),gt=s.createEffect(i=>{t.history.push({experienceId:e.id,node:i})}),Z=s.attach({source:e.configStore,effect:async({initializeOpenLogic:i})=>ot(i)?!!await z(t,i):i??!1});return s.split({source:I,match:i=>i?Ft(i)?"condition":L(i)?"step":$t(i)?"launchExperience":et(i)?"origin":nt(i)?"action":"other":"none",cases:{none:K,origin:U,condition:V,step:J,launchExperience:pt,action:Q,__:s.createEvent()}}),s.sample({clock:[V.doneData,U.doneData,K.doneData,D.doneData,Y.doneData,Q.doneData],filter:Boolean,target:gt}),s.sample({clock:a,target:D}),s.sample({clock:a,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_submit",step:i,experience:e}))}),s.sample({clock:D.done,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_submit_success",step:i,experience:e}))}),s.sample({clock:D.fail,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_submit_error",step:i,experience:e}))}),s.sample({clock:c,target:lt}),s.sample({clock:o,target:dt}),s.sample({source:s.combine([V.pending,U.pending,K.pending,D.pending]),fn:i=>i.some(Boolean)?"transitioning":"ready",target:k}),s.sample({clock:J.doneData,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_enter",step:i,experience:e}))}),s.sample({clock:p,target:Z}),s.sample({source:Z.doneData,fn:i=>!!i,target:O}),s.sample({source:I,clock:n,filter:i=>i?et(i):!0,target:Y}),s.sample({source:O,filter:Boolean,target:t.eventBus.prepend(()=>({type:"experience_open",experience:e}))}),s.sample({source:O,filter:i=>!i,target:t.eventBus.prepend(()=>({type:"experience_close",experience:e}))}),s.sample({clock:u,target:[n,p]}),u(),{id:Math.random().toString(36).substring(7),experienceId:e.id,configStore:e.configStore,target:r,componentStore:y,stateStore:k,isOpenStore:O,open:P.open,close:P.close,toggleOpen:P.toggle,setOpen:P.set,treeStore:e.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:b,stepsToLeafStore:F,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:M}});function ft(t){return G.invoke(Dt,t)}const Rt=G.createFactory(({client:t})=>{const e=X.store({}),r=s.createEvent(),n=s.createEvent(),a=s.createEvent(),c=s.createApi(e,{register(f,h){const b=[...f[h.experienceId]??[]];return b.push(h),{...f,[h.experienceId]:b}},unregister(f,h){var $;const b=h.experienceId,F=($=f[b])==null?void 0:$.filter(O=>O!==h);return{...f,[b]:F??[]}}}),o=s.createEffect(({experience:f,target:h})=>ft({client:t,experience:f,target:h})),u=s.createEffect(f=>{c.register(f)}),p=s.createEffect(f=>{f.target&&It(f.target,()=>{a(f)})}),y=s.createEffect(f=>{c.unregister(f)}),k=s.createEffect(f=>{const h=f.componentStore.getState();if(!h){N.logger("warn","No app component registered. Skipping init.");return}const b=h.frameworkStore.getState();if(!b){N.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const F=f.target;if(!F){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const $=Et(F);try{b.render($,h.component,t,f)}catch(O){N.logger("error",O)}});s.sample({clock:r,target:o}),s.sample({clock:a,target:y}),s.sample({clock:o.doneData,target:[u,p,n]}),s.sample({clock:o.doneData,target:t.eventBus.prepend(f=>({type:"experience_initialized",experienceInstance:f}))}),s.sample({clock:n,target:k});function B(f,h){r({experience:f,target:h})}const M=e.map(f=>Object.values(f).flat());function I(f){return e.map(h=>h[f]||[],{skipVoid:!1})}return{spawn:B,getByExperienceId:I,listStore:M}});function Pt(t){return G.invoke(Rt,t)}exports.createAppHosts=vt;exports.createExperienceInstance=ft;exports.createExperienceInstanceIndex=Pt;exports.domInteractive=Nt;exports.evaluateRuleLogic=z;exports.getTargetElements=kt;exports.isPickedRoot=it;exports.isRulesLogic=ot;exports.isStepNode=L;exports.tagTargetElement=bt;
1
+ "use strict";const s=require("effector"),G=require("@withease/factories"),H=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),mt=require("./object-BbFTsGh3.cjs");function ht(t){return typeof t=="number"&&!isNaN(t)}function R(t){return typeof t=="string"}function E(t){return Array.isArray(t)}function rt(t){return t instanceof Promise}function tt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&Object.keys(t).length===1}function m(t){if(ht(t))return t;const e=parseFloat(`${t}`);return isNaN(e)?0:e}function T(t){return`${t}`}const St={"==":(t,e)=>t==e,"===":(t,e)=>t===e,"!=":(t,e)=>t!=e,"!==":(t,e)=>t!==e,">":(t,e)=>m(t)>m(e),">=":(t,e)=>m(t)>=m(e),"<":(t,e,r)=>{const n=m(t),a=m(e);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(t,e,r)=>{const n=m(t),a=m(e);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async t=>await B(t),"!":async t=>!await B(t),"%":(t,e)=>m(t)%m(e),log:t=>(console.log(t),t),in:(t,e)=>e?R(e)?e.indexOf(T(t))!==-1:E(e)?e.includes(t):!1:!1,cat:(...t)=>t.map(T).join(""),substr:(t,e,r)=>{const n=T(t),a=m(e);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)},"+":(...t)=>t.reduce((e,r)=>m(e)+m(r),0),"*":(...t)=>t.reduce((e,r)=>m(e)*m(r),1),"-":(t,e)=>{const r=m(t);return e===void 0?-r:r-m(e)},"/":(t,e)=>m(t)/m(e),min:(...t)=>Math.min(...t.map(m)),max:(...t)=>Math.max(...t.map(m)),merge:(...t)=>t.reduce((e,r)=>E(r)?e.concat(r):e.concat([r]),[]),var(t,e){const r=arguments.length>1?e:null;if(t===""||t==="."||t===null||t===void 0)return this;if(typeof t=="number"&&Array.isArray(this))return t>=0&&t<this.length?this[t]:r;const n=T(t);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(...t){const e=E(t[0])?t[0]:t,r=[];for(const n of e){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(t,e){const r=await g({missing:e},this);if(!E(r)||!E(e))return[];const n=r.filter(R);return e.filter(R).length-n.length>=m(t)?[]:n},invoke(t){return typeof t!="function"?null:t()},regexp_matches(t,e){let r=t,n="";if(E(t)){const[c,o]=t;r=c,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(T(e))},throw(t){throw new Error(T(t))}};async function g(t,e){if(!t)return t;if(rt(t))return g(await t,e);if(E(t))return Promise.all(t.map(o=>g(o,e)));if(!tt(t))return t;const r=yt(t);let n=r?t[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],e)))return g(n[o+1],e);return n.length%2===1?g(n[n.length-1],e):null;case"and":{let o=null;for(const u of n)if(o=await g(u,e),!await B(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,e),await B(o))return o;return o}case"map":{const o=await g(n[0],e);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],e);return E(o)?(await Promise.all(o.map(async p=>{const y=await B(await g(n[1],p));return{item:p,shouldInclude:y}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],e);if(!E(o))return n.length>2?await g(n[2],e):null;const u=n[1];let y=n.length>2?await g(n[2],e):null;for(const k of o)y=await g(u,{current:k,accumulator:y});return y}case"all":{const o=await g(n[0],e);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],e);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],e);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],e)}catch(o){return tt(o)?await g(o,e):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,e))),c=r?St[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(e,a)}async function B(t){return rt(t)?B(await t):!(Array.isArray(t)&&t.length===0)&&!!t}function yt(t){return Object.keys(t)[0]}function ot(t){return!mt.isEmpty(t)}async function z(t,e,r){const n=t.getStateSnapshot(),a=t.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:()=>p.predicate(n)}),{}),c=t.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:y}=await p.getBucket();return y}}),{}),o={...r,responses:t.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(e,o)}function wt(t){return!H.supportsWindow()||!H.supportsDocument()?[]:Array.from(window.document.querySelectorAll(t)).filter(e=>e instanceof HTMLElement)}function Et(t){if(!H.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return t.attachShadow({mode:"closed"})}function Nt(){return new Promise((t,e)=>{if(!H.supportsDocument()){e();return}document.readyState!=="loading"?t():document.addEventListener("readystatechange",()=>t(),{once:!0})})}function It(t,e){const r=new MutationObserver(n=>{document.contains(t)||(r.disconnect(),e())});r.observe(document.body,{childList:!0,subtree:!0})}const j="picked-root",q="picked-target",xt="picked-root";function kt(t,e){return[...t,{selector:`${xt}[experience-id="${e}"]`,placement:"replace"}].flatMap(n=>{const a=wt(n.selector).filter(c=>!At(c,e)&&!it(c,e));return{...n,elements:a}})}function vt(t,e){return t.flatMap(r=>r.elements.map(n=>Ot(n,r.placement,e)))}function bt(t,e){t.classList.add(q),t.classList.add(`${q}-${e}`)}function At(t,e){return e?t.classList.contains(`${q}-${e}`):t.classList.contains(`${q}`)}function it(t,e){return e?t.classList.contains(`${j}-${e}`):t.classList.contains(j)}function Bt(t){const e=document.createElement("div");return e.style.display="block",e.classList.add(j),e.classList.add(`${j}-${t}`),e}function Ot(t,e,r){let n;const a=Bt(r);if(t instanceof Document)n=t.body.appendChild(a);else{switch(e){case"replace":t.replaceWith(a);break;case"before":t.before(a);break;case"after":t.after(a);break;case"prepend":t.prepend(a);break;default:t.append(a);break}n=a}return n}function Ft(t){return t.type==="conditional"}function L(t){return t.type==="step"}function $t(t){return t.type==="experience"}function et(t){return t.type==="origin"}function nt(t){return t.type==="action"}const st=(t,e,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),L(r)&&!n?[r]:e.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=t.find(p=>p.id===o.destinationNodeId);return u?st(t,e,u,!1,a):[]})),_t=(t,e,r)=>st(t,e,r,!0,new Set),at=(t,e,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=e.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 y=t.find(M=>M.id===p.destinationNodeId);if(!y)continue;const[k,O]=at(t,e,y,!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]},Tt=(t,e,r)=>at(t,e,r,!0,new Set),ct=(t,e,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=e.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=t.find(O=>O.id===u.sourceNodeId);if(!p)continue;const[y,k]=ct(t,e,p,new Set(n));y!==-1&&(c=Math.min(c,y+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},Lt=(t,e,r)=>ct(t,e,r,new Set),ut=t=>t.find(r=>r.type==="origin")||null,W=(t,e,r)=>{if(!t)return ut(e);const n=r.find(c=>c.sourceNodeId===t.id);if(!n)return null;const a=e.find(c=>c.id===n.destinationNodeId);return a||null};async function Mt(t,e,r,n){const a=t?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===e);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const X=s.createDomain("experience-instance"),Dt=G.createFactory(({client:t,experience:e,target:r})=>{const n=s.createEvent(),a=s.createEvent(),c=s.createEvent(),o=s.createEvent(),u=s.createEvent(),p=s.createEvent(),y=e.componentStore,k=X.store("transitioning"),O=t.history.entriesStore.map(i=>i.filter(l=>l.experienceId===e.id)),M=O.map(i=>i.filter(l=>L(l.node))),I=O.map(i=>{var l;return((l=i[i.length-1])==null?void 0:l.node)||null}),f=s.combine(e.treeStore,I,({steps:i},l)=>i.find(d=>l&&L(l)&&d.id===l.stepId)||null),h=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?_t(i,l,d):[]),b=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?Lt(i,l,d):[-1,-1]),$=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?Tt(i,l,d):[-1,-1]),F=e.configStore.getState().initializeOpenLogic,A=X.store(F===!0),P=s.createApi(A,{open:()=>!0,close:()=>!1,toggle:i=>!i,set:(i,l)=>l}),lt=s.createEffect(async()=>{t.history.back({experienceId:e.id})}),dt=s.attach({source:e.treeStore,effect:async(i,l)=>{const d=i.nodes.find(w=>L(w)&&w.stepId===l);d&&t.history.push({experienceId:e.id,node:d})}}),J=s.attach({source:I,effect:i=>{}}),K=s.attach({source:e.treeStore,effect:async({nodes:i})=>ut(i)}),U=s.attach({source:e.treeStore,effect:async({nodes:i,edges:l},d)=>W(d,i,l)}),V=s.attach({source:e.treeStore,effect:async({nodes:i,edges:l,conditionals:d},w)=>{if(!w)return;const _=d.find(v=>v.id===w.conditionalId);if(!_)return;const x=w.id,S=await z(t,_.condition);return Mt(!!S,x,i,l)}}),Q=s.attach({source:e.treeStore,effect:async({nodes:i,edges:l},d)=>{if(!d||!nt(d))return;const w=d.action;if(!w){N.logger("warn",`Action node ${d.id} has no action name`);return}const _=t.actions.getByName(w).getState();if(!_){N.logger("warn",`Action '${w}' not registered on client`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?i.find(S=>S.id===x.destinationNodeId):null}if(typeof _.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?i.find(S=>S.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await _.action();const x=l.find(v=>v.sourceNodeId===d.id&&v.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${d.id}`),null;const S=i.find(v=>v.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${S==null?void 0:S.id}`),S||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const S=l.find(C=>C.sourceNodeId===d.id&&C.sourceNodeHandle==="false");if(!S)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const v=i.find(C=>C.id===S.destinationNodeId);return N.logger("info",`Action '${w}' failed, moving to node ${v==null?void 0:v.id}`),v||null}}}),pt=s.createEffect(i=>{if(i)return t.launchExperienceById(i.experienceId)}),Y=s.attach({source:[I,e.treeStore],effect:async([i,{nodes:l,edges:d}])=>W(i,l,d)}),D=s.attach({source:[I,e.treeStore],effect:async([i,{nodes:l,edges:d}])=>W(i,l,d)}),gt=s.createEffect(i=>{t.history.push({experienceId:e.id,node:i})}),Z=s.attach({source:e.configStore,effect:async({initializeOpenLogic:i})=>ot(i)?!!await z(t,i):i??!1});return s.split({source:I,match:i=>i?Ft(i)?"condition":L(i)?"step":$t(i)?"launchExperience":et(i)?"origin":nt(i)?"action":"other":"none",cases:{none:K,origin:U,condition:V,step:J,launchExperience:pt,action:Q,__:s.createEvent()}}),s.sample({clock:[V.doneData,U.doneData,K.doneData,D.doneData,Y.doneData,Q.doneData],filter:Boolean,target:gt}),s.sample({clock:a,target:D}),s.sample({clock:a,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_submit",step:i,experience:e}))}),s.sample({clock:D.done,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_submit_success",step:i,experience:e}))}),s.sample({clock:D.fail,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_submit_error",step:i,experience:e}))}),s.sample({clock:c,target:lt}),s.sample({clock:o,target:dt}),s.sample({source:s.combine([V.pending,U.pending,K.pending,D.pending]),fn:i=>i.some(Boolean)?"transitioning":"ready",target:k}),s.sample({clock:J.doneData,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_enter",step:i,experience:e}))}),s.sample({clock:p,target:Z}),s.sample({source:Z.doneData,fn:i=>!!i,target:A}),s.sample({source:I,clock:n,filter:i=>i?et(i):!0,target:Y}),F===!0&&n(),s.sample({source:A,filter:i=>!!i,target:n}),s.sample({source:A,filter:Boolean,target:t.eventBus.prepend(()=>({type:"experience_open",experience:e}))}),s.sample({source:A,filter:i=>!i,target:t.eventBus.prepend(()=>({type:"experience_close",experience:e}))}),s.sample({clock:u,target:[p]}),u(),{id:Math.random().toString(36).substring(7),experienceId:e.id,configStore:e.configStore,target:r,componentStore:y,stateStore:k,isOpenStore:A,open:P.open,close:P.close,toggleOpen:P.toggle,setOpen:P.set,treeStore:e.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:b,stepsToLeafStore:$,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:M}});function ft(t){return G.invoke(Dt,t)}const Rt=G.createFactory(({client:t})=>{const e=X.store({}),r=s.createEvent(),n=s.createEvent(),a=s.createEvent(),c=s.createApi(e,{register(f,h){const b=[...f[h.experienceId]??[]];return b.push(h),{...f,[h.experienceId]:b}},unregister(f,h){var F;const b=h.experienceId,$=(F=f[b])==null?void 0:F.filter(A=>A!==h);return{...f,[b]:$??[]}}}),o=s.createEffect(({experience:f,target:h})=>ft({client:t,experience:f,target:h})),u=s.createEffect(f=>{c.register(f)}),p=s.createEffect(f=>{f.target&&It(f.target,()=>{a(f)})}),y=s.createEffect(f=>{c.unregister(f)}),k=s.createEffect(f=>{const h=f.componentStore.getState();if(!h){N.logger("warn","No app component registered. Skipping init.");return}const b=h.frameworkStore.getState();if(!b){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 F=Et($);try{b.render(F,h.component,t,f)}catch(A){N.logger("error",A)}});s.sample({clock:r,target:o}),s.sample({clock:a,target:y}),s.sample({clock:o.doneData,target:[u,p,n]}),s.sample({clock:o.doneData,target:t.eventBus.prepend(f=>({type:"experience_initialized",experienceInstance:f}))}),s.sample({clock:n,target:k});function O(f,h){r({experience:f,target:h})}const M=e.map(f=>Object.values(f).flat());function I(f){return e.map(h=>h[f]||[],{skipVoid:!1})}return{spawn:O,getByExperienceId:I,listStore:M}});function Pt(t){return G.invoke(Rt,t)}exports.createAppHosts=vt;exports.createExperienceInstance=ft;exports.createExperienceInstanceIndex=Pt;exports.domInteractive=Nt;exports.evaluateRuleLogic=z;exports.getTargetElements=kt;exports.isPickedRoot=it;exports.isRulesLogic=ot;exports.isStepNode=L;exports.tagTargetElement=bt;
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuZF,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiaF,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.1-dev.1762750479117",
3
+ "version": "0.0.1-dev.1762930276554",
4
4
  "dependencies": {
5
5
  "@withease/factories": "^1.0.5"
6
6
  },