@picked/client 0.0.1-dev.1762985685249 → 0.0.1-dev.1763014928671

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-B2l_MG7I.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.1762985685249";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-CF6m7G83.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 j=(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,$=w.createStorageKey("last_ping","global"),ie=t=>`${t}/api/v1/ping`,ae=async t=>{try{const e=Date.now(),r=localStorage.getItem($);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($,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 g={id:p,feature:{...a,id:p}};n.register(Object.freeze({id:p,feature:g}))}const u=f.createEffect(async({id:p,key:a,storage:i="local"})=>{const g=w.createStorageKey(`feature:${p}:${a}`,"global"),d=(i==="session"?w.sessionStore:w.localStore).get(g).boolean();return d===null?null:{id:p,key:a,bucket:d,storage:i}}),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:g,key:m})=>{const d=a.find(A=>A.id===i);if(d)return d;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=g();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,source:e,filter:(p,a)=>{const i=p[a.id];return i?i.feature.key!==a.feature.feature.key||i.feature.storage!==a.feature.feature.storage:!0},fn:(p,a)=>{const{id:i,feature:g}=a;return{id:i,key:g.feature.key,storage:g.feature.storage}},target:u}),f.sample({source:e,clock:l.doneData,fn:(p,a)=>{var v;const{id:i,bucket:g,storage:m}=a,d=(v=p[i])==null?void 0:v.feature.key;return d?{key:d,id:i,bucket:g,storage:m}:null},target:s});const S=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:p,resolvedFeaturesStore:a})=>Object.values(p).map(i=>{const g=a.find(m=>m.id===i.id);return g?{id:i.id,name:i.feature.name,key:i.feature.key,getBucket:()=>({id:i.id,bucket:g.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]:g,...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([g,m])=>{let d=m;const v=t.fields.getById(g).getState();if(!v){i.push({fieldId:g,userMessage:`Field '${g}' not found`,systemMessage:`No field with ID '${g}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:d});return}if(v.multiple&&(typeof d=="string"||typeof d=="number"||typeof d=="boolean")&&(d=[d]),v.validation&&!z.isEmpty(v.validation)){const x=await F.evaluateRuleLogic(t,v.validation,{$input:d});if(typeof x=="string"){i.push({fieldId:g,userMessage:x,systemMessage:`Field validation resulted in an error: ${x}.`,value:d});return}if(x===!1){i.push({fieldId:g,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:d});return}}if(v.required&&(typeof d>"u"||d===null||d===""||Array.isArray(d)&&!d.length)){i.push({fieldId:g,userMessage:"This field is required",systemMessage:"Field is required.",value:d});return}if(!v.multiple&&Array.isArray(d)&&d.length>1){i.push({fieldId:g,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:d});return}if(v.options){const x=v.options.map(E=>E.value),P=Array.isArray(d)?d:[d];Array.isArray(d)&&(P.every(E=>x.includes(E))||i.push({fieldId:g,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${x.join(", ")}`,value:d}))}})),{responsesToCommit:a,validationErrors:i}}async function o(a){const{responsesToCommit:i,validationErrors:g}=await s(a);return g.length?{errors:g}:(c.registerBatch(i),{errors:[]})}const l=e.map(a=>a),S=e.map(a=>Object.keys(a).map(g=>({fieldId:g,value:a[g]})));function b(a){const i=t.fields.getById(a),g=e.map(m=>m[a]||null);return f.combine({f:i,r:g},({f:m,r:d})=>d||(m!=null&&m.defaultValue?m.defaultValue:null))}function p(a){const i=t.fields.getByName(a);return f.combine({f:i,s:e},({f:g,s:m})=>{const d=g&&m[g.id]||null;return d||(g!=null&&g.defaultValue?g.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.1763014928671";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 je(){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 $e(){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:$e()}),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",je());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){j(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&&j(`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-B2l_MG7I.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-CF6m7G83.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,14 +3,14 @@ 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 A, a as ee, b as te, d as re } from "../experience-instance-QtGs0N3g.js";
7
- import { f as St } from "../experience-instance-QtGs0N3g.js";
6
+ import { g as L, t as Q, c as X, i as Z, e as A, a as ee, b as te, d as re } from "../experience-instance-CKru5var.js";
7
+ import { f as St } from "../experience-instance-CKru5var.js";
8
8
  import { l as v } from "../logger-C9a75KZn.js";
9
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
- import { s as _, a as oe, b as ie, c as ae, d as ce } from "../supports-BjhuLJ8z.js";
13
+ import { s as U, a as oe, b as ie, c as ae, d as ce } from "../supports-BjhuLJ8z.js";
14
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 }) => {
@@ -82,7 +82,7 @@ function pe(t) {
82
82
  const ge = (t, e) => {
83
83
  e.register(t);
84
84
  }, K = (t, e) => {
85
- const { targetSelectors: r } = e.configStore.getState(), n = U(r, e.id);
85
+ const { targetSelectors: r } = e.configStore.getState(), n = L(r, e.id);
86
86
  n.forEach(
87
87
  ({ elements: u }) => u.forEach((s) => Q(s, e.id))
88
88
  ), X(n, e.id).forEach((u) => {
@@ -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 A(t, r) === !0 : !0;
99
+ return L(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) {
@@ -259,7 +259,7 @@ const je = (t, e, r) => {
259
259
  "warn",
260
260
  `Feature '${d}' already registered. Registering again will override the previous registration.`
261
261
  );
262
- const g = {
262
+ const p = {
263
263
  id: d,
264
264
  feature: {
265
265
  ...a,
@@ -269,7 +269,7 @@ const je = (t, e, r) => {
269
269
  n.register(
270
270
  Object.freeze({
271
271
  id: d,
272
- feature: g
272
+ feature: p
273
273
  })
274
274
  );
275
275
  }
@@ -279,8 +279,8 @@ const je = (t, e, r) => {
279
279
  key: a,
280
280
  storage: i = "local"
281
281
  }) => {
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 };
282
+ const p = B(`feature:${d}:${a}`, "global"), g = (i === "session" ? $ : D).get(p).boolean();
283
+ return g === null ? null : { id: d, key: a, bucket: g, storage: i };
284
284
  }
285
285
  ), s = M((d) => {
286
286
  if (!d)
@@ -289,10 +289,10 @@ const je = (t, e, r) => {
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 },
292
- effect: async ({ allFeaturesStore: d, resolvedFeaturesStore: a }, { id: i, decide: g, key: f }) => {
293
- const p = a.find((j) => j.id === i);
294
- if (p)
295
- return p;
292
+ effect: async ({ allFeaturesStore: d, resolvedFeaturesStore: a }, { id: i, decide: p, key: f }) => {
293
+ const g = a.find((j) => j.id === i);
294
+ if (g)
295
+ return g;
296
296
  const y = d[i];
297
297
  if (!y)
298
298
  throw new Error(`Feature with id '${i}' not found`);
@@ -301,7 +301,7 @@ 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 R = g();
304
+ const R = p();
305
305
  o.set(`${i}:${f}`, R);
306
306
  const E = await R;
307
307
  return { id: y.id, bucket: E, key: f, storage: y.feature.storage };
@@ -309,9 +309,14 @@ const je = (t, e, r) => {
309
309
  });
310
310
  F({
311
311
  clock: n.register,
312
- fn: (d) => {
313
- const { id: a, feature: i } = d;
314
- return { id: a, key: i.feature.key, storage: i.feature.storage };
312
+ source: e,
313
+ filter: (d, a) => {
314
+ const i = d[a.id];
315
+ return i ? i.feature.key !== a.feature.feature.key || i.feature.storage !== a.feature.feature.storage : !0;
316
+ },
317
+ fn: (d, a) => {
318
+ const { id: i, feature: p } = a;
319
+ return { id: i, key: p.feature.key, storage: p.feature.storage };
315
320
  },
316
321
  target: u
317
322
  }), F({
@@ -319,8 +324,8 @@ const je = (t, e, r) => {
319
324
  clock: l.doneData,
320
325
  fn: (d, a) => {
321
326
  var y;
322
- const { id: i, bucket: g, storage: f } = a, p = (y = d[i]) == null ? void 0 : y.feature.key;
323
- return p ? { key: p, id: i, bucket: g, storage: f } : null;
327
+ const { id: i, bucket: p, storage: f } = a, g = (y = d[i]) == null ? void 0 : y.feature.key;
328
+ return g ? { key: g, id: i, bucket: p, storage: f } : null;
324
329
  },
325
330
  target: s
326
331
  });
@@ -329,12 +334,12 @@ const je = (t, e, r) => {
329
334
  allFeaturesStore: d,
330
335
  resolvedFeaturesStore: a
331
336
  }) => Object.values(d).map((i) => {
332
- const g = a.find((f) => f.id === i.id);
333
- return g ? {
337
+ const p = a.find((f) => f.id === i.id);
338
+ return p ? {
334
339
  id: i.id,
335
340
  name: i.feature.name,
336
341
  key: i.feature.key,
337
- getBucket: () => ({ id: i.id, bucket: g.bucket }),
342
+ getBucket: () => ({ id: i.id, bucket: p.bucket }),
338
343
  isResolved: !0
339
344
  } : {
340
345
  id: i.id,
@@ -375,7 +380,7 @@ function Ce(t) {
375
380
  const De = (t, e, r) => {
376
381
  r.register(t, e);
377
382
  }, P = I("history");
378
- function L(t, e) {
383
+ function _(t, e) {
379
384
  return {
380
385
  // eslint-disable-next-line sonarjs/pseudo-random
381
386
  id: se(`history-entry-${Date.now()}-${Math.random()}}`),
@@ -387,11 +392,11 @@ function L(t, e) {
387
392
  const Me = w(() => {
388
393
  const t = P.store({ entries: [] }), e = P.event(), r = P.event(), n = P.event(), c = P.event();
389
394
  t.on(e, (s, o) => ({
390
- entries: [...s.entries, L(o.experienceId, o.node)]
395
+ entries: [...s.entries, _(o.experienceId, o.node)]
391
396
  })), t.on(r, (s, o) => ({
392
397
  entries: [
393
398
  ...s.entries.slice(0, -1),
394
- L(o.experienceId, o.node)
399
+ _(o.experienceId, o.node)
395
400
  ]
396
401
  })), t.on(c, (s, o) => o);
397
402
  function u(s, o) {
@@ -451,13 +456,13 @@ const Ve = () => C(), Ne = I("field"), ze = w(() => {
451
456
  getByName: u
452
457
  };
453
458
  });
454
- function Le() {
459
+ function _e() {
455
460
  return k(ze);
456
461
  }
457
- const Ue = (t, e) => {
462
+ const Le = (t, e) => {
458
463
  e.register(t);
459
- }, _e = I("action"), He = w(() => {
460
- const t = _e.store({}), e = x(t, {
464
+ }, Ue = I("action"), He = w(() => {
465
+ const t = Ue.store({}), e = x(t, {
461
466
  register(u, s) {
462
467
  return {
463
468
  ...u,
@@ -501,7 +506,7 @@ const qe = (t, e, r) => {
501
506
  };
502
507
  },
503
508
  clear(a, i) {
504
- const { [i]: g, ...f } = a;
509
+ const { [i]: p, ...f } = a;
505
510
  return f;
506
511
  },
507
512
  clearAll() {
@@ -514,88 +519,88 @@ const qe = (t, e, r) => {
514
519
  async function s(a) {
515
520
  const i = [];
516
521
  return await Promise.allSettled(
517
- Object.entries(a).map(async ([g, f]) => {
518
- let p = f;
519
- const y = t.fields.getById(g).getState();
522
+ Object.entries(a).map(async ([p, f]) => {
523
+ let g = f;
524
+ const y = t.fields.getById(p).getState();
520
525
  if (!y) {
521
526
  i.push({
522
- fieldId: g,
523
- userMessage: `Field '${g}' not found`,
524
- systemMessage: `No field with ID '${g}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,
525
- value: p
527
+ fieldId: p,
528
+ userMessage: `Field '${p}' not found`,
529
+ systemMessage: `No field with ID '${p}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,
530
+ value: g
526
531
  });
527
532
  return;
528
533
  }
529
- if (y.multiple && (typeof p == "string" || typeof p == "number" || typeof p == "boolean") && (p = [p]), y.validation && !ne(y.validation)) {
534
+ if (y.multiple && (typeof g == "string" || typeof g == "number" || typeof g == "boolean") && (g = [g]), y.validation && !ne(y.validation)) {
530
535
  const b = await A(t, y.validation, {
531
- $input: p
536
+ $input: g
532
537
  });
533
538
  if (typeof b == "string") {
534
539
  i.push({
535
- fieldId: g,
540
+ fieldId: p,
536
541
  userMessage: b,
537
542
  systemMessage: `Field validation resulted in an error: ${b}.`,
538
- value: p
543
+ value: g
539
544
  });
540
545
  return;
541
546
  }
542
547
  if (b === !1) {
543
548
  i.push({
544
- fieldId: g,
549
+ fieldId: p,
545
550
  userMessage: "This field is invalid",
546
551
  systemMessage: "Field validation resulted in an unspecified error.",
547
- value: p
552
+ value: g
548
553
  });
549
554
  return;
550
555
  }
551
556
  }
552
- if (y.required && (typeof p > "u" || p === null || p === "" || Array.isArray(p) && !p.length)) {
557
+ if (y.required && (typeof g > "u" || g === null || g === "" || Array.isArray(g) && !g.length)) {
553
558
  i.push({
554
- fieldId: g,
559
+ fieldId: p,
555
560
  userMessage: "This field is required",
556
561
  systemMessage: "Field is required.",
557
- value: p
562
+ value: g
558
563
  });
559
564
  return;
560
565
  }
561
- if (!y.multiple && Array.isArray(p) && p.length > 1) {
566
+ if (!y.multiple && Array.isArray(g) && g.length > 1) {
562
567
  i.push({
563
- fieldId: g,
568
+ fieldId: p,
564
569
  userMessage: "This field expects a single response",
565
570
  systemMessage: "Field expects a single response.",
566
- value: p
571
+ value: g
567
572
  });
568
573
  return;
569
574
  }
570
575
  if (y.options) {
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
- fieldId: g,
576
+ const b = y.options.map((E) => E.value), R = Array.isArray(g) ? g : [g];
577
+ Array.isArray(g) && (R.every((E) => b.includes(E)) || i.push({
578
+ fieldId: p,
574
579
  userMessage: "This field expects a valid option",
575
580
  systemMessage: `Field expects a valid option. Valid options are: ${b.join(", ")}`,
576
- value: p
581
+ value: g
577
582
  }));
578
583
  }
579
584
  })
580
585
  ), { responsesToCommit: a, validationErrors: i };
581
586
  }
582
587
  async function o(a) {
583
- const { responsesToCommit: i, validationErrors: g } = await s(a);
584
- return g.length ? { errors: g } : (c.registerBatch(i), { errors: [] });
588
+ const { responsesToCommit: i, validationErrors: p } = await s(a);
589
+ return p.length ? { errors: p } : (c.registerBatch(i), { errors: [] });
585
590
  }
586
- const l = e.map((a) => a), h = e.map((a) => Object.keys(a).map((g) => ({
587
- fieldId: g,
588
- value: a[g]
591
+ const l = e.map((a) => a), h = e.map((a) => Object.keys(a).map((p) => ({
592
+ fieldId: p,
593
+ value: a[p]
589
594
  })));
590
595
  function S(a) {
591
- const i = t.fields.getById(a), g = e.map((f) => f[a] || null);
592
- return O({ f: i, r: g }, ({ f, r: p }) => p || (f != null && f.defaultValue ? f.defaultValue : null));
596
+ const i = t.fields.getById(a), p = e.map((f) => f[a] || null);
597
+ return O({ f: i, r: p }, ({ f, r: g }) => g || (f != null && f.defaultValue ? f.defaultValue : null));
593
598
  }
594
599
  function d(a) {
595
600
  const i = t.fields.getByName(a);
596
- return O({ f: i, s: e }, ({ f: g, s: f }) => {
597
- const p = g && f[g.id] || null;
598
- return p || (g != null && g.defaultValue ? g.defaultValue : null);
601
+ return O({ f: i, s: e }, ({ f: p, s: f }) => {
602
+ const g = p && f[p.id] || null;
603
+ return g || (p != null && p.defaultValue ? p.defaultValue : null);
599
604
  });
600
605
  }
601
606
  return F({
@@ -619,9 +624,9 @@ const qe = (t, e, r) => {
619
624
  function Ye(t) {
620
625
  return k(We, t);
621
626
  }
622
- const Je = () => "0.0.1-dev.1762985685249";
627
+ const Je = () => "0.0.1-dev.1763014928671";
623
628
  function Qe() {
624
- if (_()) {
629
+ if (U()) {
625
630
  const t = [
626
631
  document.currentScript,
627
632
  document.getElementById("picked_script"),
@@ -689,13 +694,13 @@ class q {
689
694
  m(this, "predicates", $e({ client: this }));
690
695
  m(this, "features", Ce({ client: this }));
691
696
  m(this, "responses", Ye({ client: this }));
692
- m(this, "fields", Le());
697
+ m(this, "fields", _e());
693
698
  m(this, "actions", Ke());
694
699
  v("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || Qe(), this.session = st(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.eventBus({ type: "initialized", version: Je() }), v("info", "Picked client initialized.");
695
700
  }
696
701
  start() {
697
702
  Pe(this), (async () => {
698
- _() && (document.body && T(this), await re(), await T(this), this.eventBus({ type: "ready" }), this.isReady = !0, this.session && this.eventBus({ type: "session", ...this.session }));
703
+ U() && (document.body && T(this), await re(), await T(this), this.eventBus({ type: "ready" }), this.isReady = !0, this.session && this.eventBus({ type: "session", ...this.session }));
699
704
  })();
700
705
  }
701
706
  registerFramework(e) {
@@ -714,7 +719,7 @@ class q {
714
719
  je(e, r, this.predicates);
715
720
  }
716
721
  registerField(e) {
717
- Ue(e, this.fields);
722
+ Le(e, this.fields);
718
723
  }
719
724
  registerAction(e, r) {
720
725
  qe(e, r, this.actions);
@@ -844,7 +849,7 @@ export {
844
849
  wt as subscribe,
845
850
  bt as supportsCookies,
846
851
  ae as supportsCryptoRandomUUID,
847
- _ as supportsDocument,
852
+ U as supportsDocument,
848
853
  It as supportsHistory,
849
854
  xt as supportsIntersectionObserver,
850
855
  ie as supportsLocalStorage,
@@ -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-QtGs0N3g.js";
2
+ import { h as F } from "../../experience-instance-CKru5var.js";
3
3
  function R() {
4
4
  let c, p;
5
5
  return {
@@ -0,0 +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 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]),F=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?Tt(i,l,d):[-1,-1]),$=e.configStore.getState().initializeOpenLogic,A=X.store($===!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}),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: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(A=>A!==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(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,9 +1,9 @@
1
- import { createDomain as ht, createEvent as B, combine as C, createApi as ot, createEffect as M, attach as F, split as yt, sample as m } from "effector";
2
- import { createFactory as it, invoke as st } from "@withease/factories";
3
- import { i as wt, s as at, a as Nt } from "./supports-BjhuLJ8z.js";
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
+ import { createFactory as st, invoke as at } from "@withease/factories";
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";
5
- import { i as It } from "./object-JwZ58NOH.js";
6
- function xt(t) {
5
+ import { i as xt } from "./object-JwZ58NOH.js";
6
+ function Et(t) {
7
7
  return typeof t == "number" && !isNaN(t);
8
8
  }
9
9
  function H(t) {
@@ -12,21 +12,21 @@ function H(t) {
12
12
  function N(t) {
13
13
  return Array.isArray(t);
14
14
  }
15
- function ct(t) {
15
+ function ut(t) {
16
16
  return t instanceof Promise;
17
17
  }
18
- function tt(t) {
18
+ function et(t) {
19
19
  return typeof t == "object" && t !== null && !Array.isArray(t) && Object.keys(t).length === 1;
20
20
  }
21
21
  function g(t) {
22
- if (xt(t)) return t;
22
+ if (Et(t)) return t;
23
23
  const e = parseFloat(`${t}`);
24
24
  return isNaN(e) ? 0 : e;
25
25
  }
26
26
  function D(t) {
27
27
  return `${t}`;
28
28
  }
29
- const Et = {
29
+ const kt = {
30
30
  // eslint-disable-next-line eqeqeq
31
31
  "==": (t, e) => t == e,
32
32
  "===": (t, e) => t === e,
@@ -47,8 +47,8 @@ const Et = {
47
47
  const a = g(r);
48
48
  return n <= s && s <= a;
49
49
  },
50
- "!!": async (t) => await $(t),
51
- "!": async (t) => !await $(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),
@@ -130,31 +130,31 @@ const Et = {
130
130
  };
131
131
  async function p(t, e) {
132
132
  if (!t) return t;
133
- if (ct(t))
133
+ if (ut(t))
134
134
  return p(await t, e);
135
135
  if (N(t))
136
136
  return Promise.all(t.map((o) => p(o, e)));
137
- if (!tt(t)) return t;
138
- const r = kt(t);
137
+ if (!et(t)) return t;
138
+ const r = At(t);
139
139
  let n = r ? t[r] ?? [] : [];
140
140
  switch (N(n) || (n = [n]), r) {
141
141
  case "if":
142
142
  case "?:":
143
143
  for (let o = 0; o < n.length - 1; o += 2)
144
- if (await $(await p(n[o], e)))
144
+ if (await O(await p(n[o], e)))
145
145
  return p(n[o + 1], e);
146
146
  return n.length % 2 === 1 ? p(n[n.length - 1], e) : null;
147
147
  case "and": {
148
148
  let o = null;
149
149
  for (const c of n)
150
- if (o = await p(c, e), !await $(o))
150
+ if (o = await p(c, e), !await O(o))
151
151
  return o;
152
152
  return o;
153
153
  }
154
154
  case "or": {
155
155
  let o = null;
156
156
  for (const c of n)
157
- if (o = await p(c, e), await $(o)) return o;
157
+ if (o = await p(c, e), await O(o)) return o;
158
158
  return o;
159
159
  }
160
160
  case "map": {
@@ -165,7 +165,7 @@ async function p(t, e) {
165
165
  const o = await p(n[0], e);
166
166
  return N(o) ? (await Promise.all(
167
167
  o.map(async (d) => {
168
- const y = await $(await p(n[1], d));
168
+ const y = await O(await p(n[1], d));
169
169
  return { item: d, shouldInclude: y };
170
170
  })
171
171
  )).filter(({ shouldInclude: d }) => d).map(({ item: d }) => d) : [];
@@ -184,44 +184,44 @@ async function p(t, e) {
184
184
  const o = await p(n[0], e);
185
185
  if (!N(o) || o.length === 0) return !1;
186
186
  for (const c of o)
187
- if (!await $(await p(n[1], c))) return !1;
187
+ if (!await O(await p(n[1], c))) return !1;
188
188
  return !0;
189
189
  }
190
190
  case "some": {
191
191
  const o = await p(n[0], e);
192
192
  if (!N(o)) return !1;
193
193
  for (const c of o)
194
- if (await $(await p(n[1], c))) return !0;
194
+ if (await O(await p(n[1], c))) return !0;
195
195
  return !1;
196
196
  }
197
197
  case "none": {
198
198
  const o = await p(n[0], e);
199
199
  if (!N(o)) return !0;
200
200
  for (const c of o)
201
- if (await $(await p(n[1], c))) return !1;
201
+ if (await O(await p(n[1], c))) return !1;
202
202
  return !0;
203
203
  }
204
204
  case "catch":
205
205
  try {
206
206
  return await p(n[0], e);
207
207
  } catch (o) {
208
- return tt(o) ? await p(o, e) : n[1] ? await p(n[1], o) : o instanceof Error ? o.message : o;
208
+ return et(o) ? await p(o, e) : n[1] ? await p(n[1], o) : o instanceof Error ? o.message : o;
209
209
  }
210
210
  }
211
- const s = await Promise.all(n.map((o) => p(o, e))), a = r ? Et[r] : void 0;
211
+ const s = await Promise.all(n.map((o) => p(o, e))), a = r ? kt[r] : void 0;
212
212
  if (!a) throw new Error(`Unrecognized operation ${r}`);
213
213
  return a.apply(e, s);
214
214
  }
215
- async function $(t) {
216
- return ct(t) ? $(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
215
+ async function O(t) {
216
+ return ut(t) ? O(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
217
217
  }
218
- function kt(t) {
218
+ function At(t) {
219
219
  return Object.keys(t)[0];
220
220
  }
221
- function At(t) {
222
- return !It(t);
221
+ function bt(t) {
222
+ return !xt(t);
223
223
  }
224
- async function et(t, e, r) {
224
+ async function nt(t, e, r) {
225
225
  const n = t.getStateSnapshot(), s = t.predicates.listStore.getState().reduce((c, d) => ({
226
226
  ...c,
227
227
  [d.name]: () => d.predicate(n)
@@ -250,33 +250,33 @@ async function et(t, e, r) {
250
250
  };
251
251
  return await p(e, o);
252
252
  }
253
- function bt(t) {
254
- return !Nt() || !at() ? [] : Array.from(window.document.querySelectorAll(t)).filter(
253
+ function vt(t) {
254
+ return !It() || !ct() ? [] : Array.from(window.document.querySelectorAll(t)).filter(
255
255
  (e) => e instanceof HTMLElement
256
256
  );
257
257
  }
258
- function vt(t) {
259
- if (!wt())
258
+ function Bt(t) {
259
+ if (!Nt())
260
260
  throw new Error("Shadow DOM is not supported in this environment");
261
261
  return t.attachShadow({ mode: "closed" });
262
262
  }
263
263
  function Xt() {
264
264
  return new Promise((t, e) => {
265
- if (!at()) {
265
+ if (!ct()) {
266
266
  e();
267
267
  return;
268
268
  }
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
  });
276
276
  r.observe(document.body, { childList: !0, subtree: !0 });
277
277
  }
278
- const K = "picked-root", U = "picked-target", $t = "picked-root";
279
- function zt(t, e) {
278
+ const U = "picked-root", V = "picked-target", $t = "picked-root";
279
+ function Jt(t, e) {
280
280
  return [
281
281
  ...t,
282
282
  // Target and replace picked-root web components
@@ -285,8 +285,8 @@ function zt(t, e) {
285
285
  placement: "replace"
286
286
  }
287
287
  ].flatMap((n) => {
288
- const s = bt(n.selector).filter(
289
- (a) => !Ft(a, e) && !Ot(a, e)
288
+ const s = vt(n.selector).filter(
289
+ (a) => !Ft(a, e) && !_t(a, e)
290
290
  );
291
291
  return {
292
292
  ...n,
@@ -294,25 +294,25 @@ function zt(t, e) {
294
294
  };
295
295
  });
296
296
  }
297
- function Jt(t, e) {
298
- return t.flatMap((r) => r.elements.map((n) => Mt(n, r.placement, e)));
299
- }
300
297
  function Qt(t, e) {
301
- t.classList.add(U), t.classList.add(`${U}-${e}`);
298
+ return t.flatMap((r) => r.elements.map((n) => Tt(n, r.placement, e)));
299
+ }
300
+ function Yt(t, e) {
301
+ t.classList.add(V), t.classList.add(`${V}-${e}`);
302
302
  }
303
303
  function Ft(t, e) {
304
- return e ? t.classList.contains(`${U}-${e}`) : t.classList.contains(`${U}`);
304
+ return e ? t.classList.contains(`${V}-${e}`) : t.classList.contains(`${V}`);
305
305
  }
306
- function Ot(t, e) {
307
- return e ? t.classList.contains(`${K}-${e}`) : t.classList.contains(K);
306
+ function _t(t, e) {
307
+ return e ? t.classList.contains(`${U}-${e}`) : t.classList.contains(U);
308
308
  }
309
- function _t(t) {
309
+ function Mt(t) {
310
310
  const e = document.createElement("div");
311
- return e.style.display = "block", e.classList.add(K), e.classList.add(`${K}-${t}`), e;
311
+ return e.style.display = "block", e.classList.add(U), e.classList.add(`${U}-${t}`), e;
312
312
  }
313
- function Mt(t, e, r) {
313
+ function Tt(t, e, r) {
314
314
  let n;
315
- const s = _t(r);
315
+ const s = Mt(r);
316
316
  if (t instanceof Document)
317
317
  n = t.body.appendChild(s);
318
318
  else {
@@ -337,25 +337,25 @@ function Mt(t, e, r) {
337
337
  }
338
338
  return n;
339
339
  }
340
- function Tt(t) {
340
+ function Lt(t) {
341
341
  return t.type === "conditional";
342
342
  }
343
343
  function j(t) {
344
344
  return t.type === "step";
345
345
  }
346
- function Lt(t) {
346
+ function Dt(t) {
347
347
  return t.type === "experience";
348
348
  }
349
- function nt(t) {
349
+ function rt(t) {
350
350
  return t.type === "origin";
351
351
  }
352
- function rt(t) {
352
+ function ot(t) {
353
353
  return t.type === "action";
354
354
  }
355
- const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.add(r.id), j(r) && !n ? [r] : e.filter((o) => o.sourceNodeId === r.id).flatMap((o) => {
355
+ const ft = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.add(r.id), j(r) && !n ? [r] : e.filter((o) => o.sourceNodeId === r.id).flatMap((o) => {
356
356
  const c = t.find((d) => d.id === o.destinationNodeId);
357
- return c ? ut(t, e, c, !1, s) : [];
358
- })), Dt = (t, e, r) => ut(t, e, r, !0, /* @__PURE__ */ new Set()), ft = (t, e, r, n, s = /* @__PURE__ */ new Set()) => {
357
+ return c ? ft(t, e, c, !1, s) : [];
358
+ })), Pt = (t, e, r) => ft(t, e, r, !0, /* @__PURE__ */ new Set()), lt = (t, e, r, n, s = /* @__PURE__ */ new Set()) => {
359
359
  if (s.has(r.id)) return [-1, -1];
360
360
  s.add(r.id);
361
361
  const a = e.filter((d) => d.sourceNodeId === r.id);
@@ -364,26 +364,26 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
364
364
  for (const d of a) {
365
365
  const y = t.find((P) => P.id === d.destinationNodeId);
366
366
  if (!y) continue;
367
- const [k, O] = ft(
367
+ const [k, F] = lt(
368
368
  t,
369
369
  e,
370
370
  y,
371
371
  !1,
372
372
  new Set(s)
373
373
  );
374
- k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, O + 1));
374
+ k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, F + 1));
375
375
  }
376
376
  return o === 1 / 0 ? [-1, -1] : [o, c];
377
- }, Pt = (t, e, r) => ft(t, e, r, !0, /* @__PURE__ */ new Set()), lt = (t, e, r, n = /* @__PURE__ */ new Set()) => {
377
+ }, Rt = (t, e, r) => lt(t, e, r, !0, /* @__PURE__ */ new Set()), dt = (t, e, r, n = /* @__PURE__ */ new Set()) => {
378
378
  if (n.has(r.id)) return [-1, -1];
379
379
  if (n.add(r.id), r.type === "origin") return [0, 0];
380
380
  const s = e.filter((c) => c.destinationNodeId === r.id);
381
381
  if (s.length === 0) return [-1, -1];
382
382
  let a = 1 / 0, o = -1 / 0;
383
383
  for (const c of s) {
384
- const d = t.find((O) => O.id === c.sourceNodeId);
384
+ const d = t.find((F) => F.id === c.sourceNodeId);
385
385
  if (!d) continue;
386
- const [y, k] = lt(
386
+ const [y, k] = dt(
387
387
  t,
388
388
  e,
389
389
  d,
@@ -392,28 +392,28 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
392
392
  y !== -1 && (a = Math.min(a, y + 1), o = Math.max(o, k + 1));
393
393
  }
394
394
  return a === 1 / 0 ? [-1, -1] : [a, o];
395
- }, Rt = (t, e, r) => lt(t, e, r, /* @__PURE__ */ new Set()), dt = (t) => t.find((r) => r.type === "origin") || null, X = (t, e, r) => {
395
+ }, Ct = (t, e, r) => dt(t, e, r, /* @__PURE__ */ new Set()), pt = (t) => t.find((r) => r.type === "origin") || null, X = (t, e, r) => {
396
396
  if (!t)
397
- return dt(e);
397
+ return pt(e);
398
398
  const n = r.find((a) => a.sourceNodeId === t.id);
399
399
  if (!n)
400
400
  return null;
401
401
  const s = e.find((a) => a.id === n.destinationNodeId);
402
402
  return s || null;
403
403
  };
404
- async function Ct(t, e, r, n) {
404
+ async function Ht(t, e, r, n) {
405
405
  const s = t ? "true" : "false", a = n.find(
406
406
  (o) => o.sourceNodeHandle === s && o.sourceNodeId === e
407
407
  );
408
408
  return r.find((o) => o.id === (a == null ? void 0 : a.destinationNodeId));
409
409
  }
410
- const z = ht("experience-instance"), Ht = it(
410
+ const J = yt("experience-instance"), jt = st(
411
411
  ({
412
412
  client: t,
413
413
  experience: e,
414
414
  target: r
415
415
  }) => {
416
- const n = B(), s = B(), a = B(), o = B(), c = B(), d = B(), y = e.componentStore, k = z.store("transitioning"), O = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), P = O.map((i) => i.filter((f) => j(f.node))), x = O.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(
@@ -423,53 +423,53 @@ const z = ht("experience-instance"), Ht = it(
423
423
  ), S = C(
424
424
  e.treeStore,
425
425
  x,
426
- ({ nodes: i, edges: f }, l) => l ? Dt(i, f, l) : []
427
- ), v = C(
426
+ ({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : []
427
+ ), b = C(
428
428
  e.treeStore,
429
429
  x,
430
- ({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : [-1, -1]
431
- ), T = C(
430
+ ({ nodes: i, edges: f }, l) => l ? Ct(i, f, l) : [-1, -1]
431
+ ), M = C(
432
432
  e.treeStore,
433
433
  x,
434
- ({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : [-1, -1]
435
- ), A = z.store(!1), _ = ot(A, {
434
+ ({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : [-1, -1]
435
+ ), T = e.configStore.getState().initializeOpenLogic, v = J.store(T === !0), G = it(v, {
436
436
  open: () => !0,
437
437
  close: () => !1,
438
438
  toggle: (i) => !i,
439
439
  set: (i, f) => f
440
- }), pt = M(async () => {
440
+ }), gt = _(async () => {
441
441
  t.history.back({ experienceId: e.id });
442
- }), gt = F({
442
+ }), mt = $({
443
443
  source: e.treeStore,
444
444
  effect: async (i, f) => {
445
445
  const l = i.nodes.find((w) => j(w) && w.stepId === f);
446
446
  l && t.history.push({ experienceId: e.id, node: l });
447
447
  }
448
- }), J = F({
448
+ }), Q = $({
449
449
  source: x,
450
450
  effect: (i) => {
451
451
  }
452
- }), V = F({
452
+ }), W = $({
453
453
  source: e.treeStore,
454
- effect: async ({ nodes: i }) => dt(i)
455
- }), W = F({
454
+ effect: async ({ nodes: i }) => pt(i)
455
+ }), q = $({
456
456
  source: e.treeStore,
457
457
  effect: async ({ nodes: i, edges: f }, l) => X(l, i, f)
458
- }), q = F({
458
+ }), z = $({
459
459
  source: e.treeStore,
460
460
  effect: async ({ nodes: i, edges: f, conditionals: l }, w) => {
461
461
  if (!w)
462
462
  return;
463
- const L = l.find((b) => b.id === w.conditionalId);
463
+ const L = l.find((A) => A.id === w.conditionalId);
464
464
  if (!L)
465
465
  return;
466
- const E = w.id, h = await et(t, L.condition);
467
- return Ct(!!h, E, i, f);
466
+ const E = w.id, h = await nt(t, L.condition);
467
+ return Ht(!!h, E, i, f);
468
468
  }
469
- }), Q = F({
469
+ }), Y = $({
470
470
  source: e.treeStore,
471
471
  effect: async ({ nodes: i, edges: f }, l) => {
472
- if (!l || !rt(l))
472
+ if (!l || !ot(l))
473
473
  return;
474
474
  const w = l.action;
475
475
  if (!w) {
@@ -494,61 +494,61 @@ const z = ht("experience-instance"), Ht = it(
494
494
  try {
495
495
  I("info", `Executing action: ${w}`), await L.action();
496
496
  const E = f.find(
497
- (b) => b.sourceNodeId === l.id && b.sourceNodeHandle === "true"
497
+ (A) => A.sourceNodeId === l.id && A.sourceNodeHandle === "true"
498
498
  );
499
499
  if (!E)
500
500
  return I("warn", `No 'true' edge found for action node ${l.id}`), null;
501
- const h = i.find((b) => b.id === E.destinationNodeId);
501
+ const h = i.find((A) => A.id === E.destinationNodeId);
502
502
  return I("info", `Action '${w}' succeeded, moving to node ${h == null ? void 0 : h.id}`), h || null;
503
503
  } catch (E) {
504
504
  I("warn", `Action '${w}' failed:`, E);
505
505
  const h = f.find(
506
- (G) => G.sourceNodeId === l.id && G.sourceNodeHandle === "false"
506
+ (K) => K.sourceNodeId === l.id && K.sourceNodeHandle === "false"
507
507
  );
508
508
  if (!h)
509
509
  return I("warn", `No 'false' edge found for action node ${l.id}`), null;
510
- const b = i.find((G) => G.id === h.destinationNodeId);
511
- return I("info", `Action '${w}' failed, moving to node ${b == null ? void 0 : b.id}`), b || null;
510
+ const A = i.find((K) => K.id === h.destinationNodeId);
511
+ return I("info", `Action '${w}' failed, moving to node ${A == null ? void 0 : A.id}`), A || null;
512
512
  }
513
513
  }
514
- }), mt = M((i) => {
514
+ }), St = _((i) => {
515
515
  if (i)
516
516
  return t.launchExperienceById(i.experienceId);
517
- }), Y = F({
517
+ }), Z = $({
518
518
  source: [x, e.treeStore],
519
519
  effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
520
- }), R = F({
520
+ }), R = $({
521
521
  source: [x, e.treeStore],
522
522
  effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
523
- }), St = M((i) => {
523
+ }), ht = _((i) => {
524
524
  t.history.push({ experienceId: e.id, node: i });
525
- }), Z = F({
525
+ }), tt = $({
526
526
  source: e.configStore,
527
- effect: async ({ initializeOpenLogic: i }) => At(i) ? !!await et(t, i) : i ?? !1
527
+ effect: async ({ initializeOpenLogic: i }) => bt(i) ? !!await nt(t, i) : i ?? !1
528
528
  });
529
- return yt({
529
+ return wt({
530
530
  source: x,
531
- match: (i) => i ? Tt(i) ? "condition" : j(i) ? "step" : Lt(i) ? "launchExperience" : nt(i) ? "origin" : rt(i) ? "action" : "other" : "none",
531
+ match: (i) => i ? Lt(i) ? "condition" : j(i) ? "step" : Dt(i) ? "launchExperience" : rt(i) ? "origin" : ot(i) ? "action" : "other" : "none",
532
532
  cases: {
533
- none: V,
534
- origin: W,
535
- condition: q,
536
- step: J,
537
- launchExperience: mt,
538
- action: Q,
533
+ none: W,
534
+ origin: q,
535
+ condition: z,
536
+ step: Q,
537
+ launchExperience: St,
538
+ action: Y,
539
539
  __: B()
540
540
  }
541
541
  }), m({
542
542
  clock: [
543
+ z.doneData,
543
544
  q.doneData,
544
545
  W.doneData,
545
- V.doneData,
546
546
  R.doneData,
547
- Y.doneData,
548
- Q.doneData
547
+ Z.doneData,
548
+ Y.doneData
549
549
  ],
550
550
  filter: Boolean,
551
- target: St
551
+ target: ht
552
552
  }), m({
553
553
  clock: s,
554
554
  target: R
@@ -581,18 +581,18 @@ const z = ht("experience-instance"), Ht = it(
581
581
  }))
582
582
  }), m({
583
583
  clock: a,
584
- target: pt
585
- }), m({ clock: o, target: gt }), m({
584
+ target: gt
585
+ }), m({ clock: o, target: mt }), m({
586
586
  source: C([
587
+ z.pending,
587
588
  q.pending,
588
589
  W.pending,
589
- V.pending,
590
590
  R.pending
591
591
  ]),
592
592
  fn: (i) => i.some(Boolean) ? "transitioning" : "ready",
593
593
  target: k
594
594
  }), m({
595
- clock: J.doneData,
595
+ clock: Q.doneData,
596
596
  source: u,
597
597
  filter: Boolean,
598
598
  target: t.eventBus.prepend((i) => ({
@@ -602,29 +602,29 @@ const z = ht("experience-instance"), Ht = it(
602
602
  }))
603
603
  }), m({
604
604
  clock: d,
605
- target: Z
605
+ target: tt
606
606
  }), m({
607
- source: Z.doneData,
608
- fn: Boolean,
609
- target: A
607
+ source: tt.doneData,
608
+ fn: (i) => !!i,
609
+ target: v
610
610
  }), m({
611
611
  source: x,
612
612
  clock: n,
613
- filter: (i) => i ? nt(i) : !0,
614
- target: Y
613
+ filter: (i) => i ? rt(i) : !0,
614
+ target: Z
615
615
  }), m({
616
- source: A,
617
- filter: Boolean,
616
+ source: v,
617
+ filter: (i) => !!i,
618
618
  target: n
619
619
  }), m({
620
- source: A,
620
+ source: v,
621
621
  filter: Boolean,
622
622
  target: t.eventBus.prepend(() => ({
623
623
  type: "experience_open",
624
624
  experience: e
625
625
  }))
626
626
  }), m({
627
- source: A,
627
+ source: v,
628
628
  filter: (i) => !i,
629
629
  target: t.eventBus.prepend(() => ({
630
630
  type: "experience_close",
@@ -643,18 +643,18 @@ const z = ht("experience-instance"), Ht = it(
643
643
  // state
644
644
  stateStore: k,
645
645
  // open close
646
- isOpenStore: A,
647
- open: _.open,
648
- close: _.close,
649
- toggleOpen: _.toggle,
650
- setOpen: _.set,
646
+ isOpenStore: v,
647
+ open: G.open,
648
+ close: G.close,
649
+ toggleOpen: G.toggle,
650
+ setOpen: G.set,
651
651
  // nodes
652
652
  treeStore: e.treeStore,
653
653
  currentNodeStore: x,
654
654
  currentStepStore: u,
655
655
  nextReachableStepNodesStore: S,
656
- stepsToOriginStore: v,
657
- stepsToLeafStore: T,
656
+ stepsToOriginStore: b,
657
+ stepsToLeafStore: M,
658
658
  // history
659
659
  goToNextStep: s,
660
660
  goToPreviousStep: a,
@@ -663,69 +663,69 @@ const z = ht("experience-instance"), Ht = it(
663
663
  };
664
664
  }
665
665
  );
666
- function jt(t) {
667
- return st(Ht, t);
666
+ function Gt(t) {
667
+ return at(jt, t);
668
668
  }
669
- const Gt = it(({ client: t }) => {
670
- const e = z.store({}), r = B(), n = B(), s = B(), a = ot(e, {
669
+ const Kt = st(({ client: t }) => {
670
+ const e = J.store({}), r = B(), n = B(), s = B(), a = it(e, {
671
671
  register(u, S) {
672
- const v = [
672
+ const b = [
673
673
  ...u[S.experienceId] ?? []
674
674
  ];
675
- return v.push(S), {
675
+ return b.push(S), {
676
676
  ...u,
677
- [S.experienceId]: v
677
+ [S.experienceId]: b
678
678
  };
679
679
  },
680
680
  unregister(u, S) {
681
- var A;
682
- const v = S.experienceId, T = (A = u[v]) == null ? void 0 : A.filter(
683
- (_) => _ !== S
681
+ var T;
682
+ const b = S.experienceId, M = (T = u[b]) == null ? void 0 : T.filter(
683
+ (v) => v !== S
684
684
  );
685
685
  return {
686
686
  ...u,
687
- [v]: T ?? []
687
+ [b]: M ?? []
688
688
  };
689
689
  }
690
- }), o = M(
691
- ({ experience: u, target: S }) => jt({ client: t, experience: u, target: S })
692
- ), c = M((u) => {
690
+ }), o = _(
691
+ ({ experience: u, target: S }) => Gt({ client: t, experience: u, target: S })
692
+ ), c = _((u) => {
693
693
  a.register(u);
694
- }), d = M(
694
+ }), d = _(
695
695
  (u) => {
696
- u.target && Bt(u.target, () => {
696
+ u.target && Ot(u.target, () => {
697
697
  s(u);
698
698
  });
699
699
  }
700
- ), y = M((u) => {
700
+ ), y = _((u) => {
701
701
  a.unregister(u);
702
- }), k = M((u) => {
702
+ }), k = _((u) => {
703
703
  const S = u.componentStore.getState();
704
704
  if (!S) {
705
705
  I("warn", "No app component registered. Skipping init.");
706
706
  return;
707
707
  }
708
- const v = S.frameworkStore.getState();
709
- if (!v) {
708
+ const b = S.frameworkStore.getState();
709
+ if (!b) {
710
710
  I(
711
711
  "error",
712
712
  `No framework registered for component '${S.name}'. Skipping rendering.`
713
713
  );
714
714
  return;
715
715
  }
716
- const T = u.target;
717
- if (!T) {
716
+ const M = u.target;
717
+ if (!M) {
718
718
  I(
719
719
  "error",
720
720
  `No target element registered for experience '${u.experienceId}'. Skipping rendering.`
721
721
  );
722
722
  return;
723
723
  }
724
- const A = vt(T);
724
+ const T = Bt(M);
725
725
  try {
726
- v.render(A, S.component, t, u);
727
- } catch (_) {
728
- I("error", _);
726
+ b.render(T, S.component, t, u);
727
+ } catch (v) {
728
+ I("error", v);
729
729
  }
730
730
  });
731
731
  m({
@@ -751,7 +751,7 @@ const Gt = it(({ client: t }) => {
751
751
  clock: n,
752
752
  target: k
753
753
  });
754
- function O(u, S) {
754
+ function F(u, S) {
755
755
  r({ experience: u, target: S });
756
756
  }
757
757
  const P = e.map((u) => Object.values(u).flat());
@@ -759,23 +759,23 @@ const Gt = it(({ client: t }) => {
759
759
  return e.map((S) => S[u] || [], { skipVoid: !1 });
760
760
  }
761
761
  return {
762
- spawn: O,
762
+ spawn: F,
763
763
  getByExperienceId: x,
764
764
  listStore: P
765
765
  };
766
766
  });
767
- function Yt(t) {
768
- return st(Gt, t);
767
+ function Zt(t) {
768
+ return at(Kt, t);
769
769
  }
770
770
  export {
771
771
  j as a,
772
- Yt as b,
773
- Jt as c,
772
+ Zt as b,
773
+ Qt as c,
774
774
  Xt as d,
775
- et as e,
776
- Ot as f,
777
- zt as g,
778
- jt as h,
779
- At as i,
780
- Qt as t
775
+ nt as e,
776
+ _t as f,
777
+ Jt as g,
778
+ Gt as h,
779
+ bt as i,
780
+ Yt as t
781
781
  };
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4ZF,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6ZF,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 +1 @@
1
- {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../../src/entities/feature/feature.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,UAAU,EAAE,KAAK,CAAA;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,UAAU,EAAE,IAAI,CAAA;IAChB,SAAS,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC1D;AAED,MAAM,MAAM,aAAa,GAAG,uBAAuB,GAAG,qBAAqB,CAAA;AAK3E,QAAA,MAAM,yBAAyB,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;mBAgBvD,MAAM,WAAW,OAAO,KAAG,IAAI;sBA6L5B,MAAM;;CAS/B,CAAA;AAEF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAC1F,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAE9C;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,SAAS,OAAO,EAAE,UAAU,aAAa,SAEnF,CAAA"}
1
+ {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../../src/entities/feature/feature.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,UAAU,EAAE,KAAK,CAAA;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,UAAU,EAAE,IAAI,CAAA;IAChB,SAAS,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC1D;AAED,MAAM,MAAM,aAAa,GAAG,uBAAuB,GAAG,qBAAqB,CAAA;AAK3E,QAAA,MAAM,yBAAyB,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;mBAgBvD,MAAM,WAAW,OAAO,KAAG,IAAI;sBAyM5B,MAAM;;CAS/B,CAAA;AAEF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAC1F,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAE9C;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,SAAS,OAAO,EAAE,UAAU,aAAa,SAEnF,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.1-dev.1762985685249",
3
+ "version": "0.0.1-dev.1763014928671",
4
4
  "dependencies": {
5
5
  "@withease/factories": "^1.0.5"
6
6
  },
@@ -1 +0,0 @@
1
- "use strict";const i=require("effector"),q=require("@withease/factories"),C=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),ge=require("./object-BbFTsGh3.cjs");function me(e){return typeof e=="number"&&!isNaN(e)}function R(e){return typeof e=="string"}function E(e){return Array.isArray(e)}function ne(e){return e instanceof Promise}function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function m(e){if(me(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function T(e){return`${e}`}const he={"==":(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(T(e))!==-1:E(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(T).join(""),substr:(e,t,r)=>{const n=T(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=T(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){return typeof e!="function"?null:e()},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(T(t))},throw(e){throw new Error(T(e))}};async function g(e,t){if(!e)return e;if(ne(e))return g(await e,t);if(E(e))return Promise.all(e.map(o=>g(o,t)));if(!Z(e))return e;const r=Se(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 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],t);if(!E(o))return n.length>2?await g(n[2],t):null;const u=n[1];let y=n.length>2?await g(n[2],t):null;for(const k of o)y=await g(u,{current:k,accumulator:y});return y}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 Z(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?he[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,a)}async function B(e){return ne(e)?B(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function Se(e){return Object.keys(e)[0]}function re(e){return!ge.isEmpty(e)}async function W(e,t,r){const n=e.getStateSnapshot(),a=e.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:()=>p.predicate(n)}),{}),c=e.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:y}=await p.getBucket();return y}}),{}),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 ye(e){return!C.supportsWindow()||!C.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}function we(e){if(!C.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:"closed"})}function Ee(){return new Promise((e,t)=>{if(!C.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Ne(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const H="picked-root",j="picked-target",Ie="picked-root";function xe(e,t){return[...e,{selector:`${Ie}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=ye(n.selector).filter(c=>!be(c,t)&&!oe(c,t));return{...n,elements:a}})}function ke(e,t){return e.flatMap(r=>r.elements.map(n=>Be(n,r.placement,t)))}function ve(e,t){e.classList.add(j),e.classList.add(`${j}-${t}`)}function be(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(`${j}`)}function oe(e,t){return t?e.classList.contains(`${H}-${t}`):e.classList.contains(H)}function Ae(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(H),t.classList.add(`${H}-${e}`),t}function Be(e,t,r){let n;const a=Ae(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 Fe(e){return e.type==="conditional"}function M(e){return e.type==="step"}function $e(e){return e.type==="experience"}function ee(e){return e.type==="origin"}function te(e){return e.type==="action"}const se=(e,t,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),M(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=e.find(p=>p.id===o.destinationNodeId);return u?se(e,t,u,!1,a):[]})),Oe=(e,t,r)=>se(e,t,r,!0,new Set),ie=(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 y=e.find(L=>L.id===p.destinationNodeId);if(!y)continue;const[k,F]=ie(e,t,y,!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]},_e=(e,t,r)=>ie(e,t,r,!0,new Set),ae=(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[y,k]=ae(e,t,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]},Te=(e,t,r)=>ae(e,t,r,new Set),ce=e=>e.find(r=>r.type==="origin")||null,V=(e,t,r)=>{if(!e)return ce(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 Me(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==null?void 0:c.destinationNodeId))}const X=i.createDomain("experience-instance"),Le=q.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(),y=t.componentStore,k=X.store("transitioning"),F=e.history.entriesStore.map(s=>s.filter(l=>l.experienceId===t.id)),L=F.map(s=>s.filter(l=>M(l.node))),I=F.map(s=>{var l;return((l=s[s.length-1])==null?void 0:l.node)||null}),f=i.combine(t.treeStore,I,({steps:s},l)=>s.find(d=>l&&M(l)&&d.id===l.stepId)||null),h=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Oe(s,l,d):[]),A=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Te(s,l,d):[-1,-1]),O=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?_e(s,l,d):[-1,-1]),v=X.store(!1),$=i.createApi(v,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,l)=>l}),fe=i.createEffect(async()=>{e.history.back({experienceId:t.id})}),le=i.attach({source:t.treeStore,effect:async(s,l)=>{const d=s.nodes.find(w=>M(w)&&w.stepId===l);d&&e.history.push({experienceId:t.id,node:d})}}),z=i.attach({source:I,effect:s=>{}}),G=i.attach({source:t.treeStore,effect:async({nodes:s})=>ce(s)}),K=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>V(d,s,l)}),U=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l,conditionals:d},w)=>{if(!w)return;const _=d.find(b=>b.id===w.conditionalId);if(!_)return;const x=w.id,S=await W(e,_.condition);return Me(!!S,x,s,l)}}),J=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>{if(!d||!te(d))return;const w=d.action;if(!w){N.logger("warn",`Action node ${d.id} has no action name`);return}const _=e.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?s.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?s.find(S=>S.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await _.action();const x=l.find(b=>b.sourceNodeId===d.id&&b.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${d.id}`),null;const S=s.find(b=>b.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(P=>P.sourceNodeId===d.id&&P.sourceNodeHandle==="false");if(!S)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const b=s.find(P=>P.id===S.destinationNodeId);return N.logger("info",`Action '${w}' failed, moving to node ${b==null?void 0:b.id}`),b||null}}}),de=i.createEffect(s=>{if(s)return e.launchExperienceById(s.experienceId)}),Q=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>V(s,l,d)}),D=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>V(s,l,d)}),pe=i.createEffect(s=>{e.history.push({experienceId:t.id,node:s})}),Y=i.attach({source:t.configStore,effect:async({initializeOpenLogic:s})=>re(s)?!!await W(e,s):s??!1});return i.split({source:I,match:s=>s?Fe(s)?"condition":M(s)?"step":$e(s)?"launchExperience":ee(s)?"origin":te(s)?"action":"other":"none",cases:{none:G,origin:K,condition:U,step:z,launchExperience:de,action:J,__:i.createEvent()}}),i.sample({clock:[U.doneData,K.doneData,G.doneData,D.doneData,Q.doneData,J.doneData],filter:Boolean,target:pe}),i.sample({clock:a,target:D}),i.sample({clock:a,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),i.sample({clock:D.done,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t}))}),i.sample({clock:D.fail,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t}))}),i.sample({clock:c,target:fe}),i.sample({clock:o,target:le}),i.sample({source:i.combine([U.pending,K.pending,G.pending,D.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:k}),i.sample({clock:z.doneData,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t}))}),i.sample({clock:p,target:Y}),i.sample({source:Y.doneData,fn:Boolean,target:v}),i.sample({source:I,clock:n,filter:s=>s?ee(s):!0,target:Q}),i.sample({source:v,filter:Boolean,target:n}),i.sample({source:v,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t}))}),i.sample({source:v,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:y,stateStore:k,isOpenStore:v,open:$.open,close:$.close,toggleOpen:$.toggle,setOpen:$.set,treeStore:t.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:A,stepsToLeafStore:O,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:L}});function ue(e){return q.invoke(Le,e)}const De=q.createFactory(({client:e})=>{const t=X.store({}),r=i.createEvent(),n=i.createEvent(),a=i.createEvent(),c=i.createApi(t,{register(f,h){const A=[...f[h.experienceId]??[]];return A.push(h),{...f,[h.experienceId]:A}},unregister(f,h){var v;const A=h.experienceId,O=(v=f[A])==null?void 0:v.filter($=>$!==h);return{...f,[A]:O??[]}}}),o=i.createEffect(({experience:f,target:h})=>ue({client:e,experience:f,target:h})),u=i.createEffect(f=>{c.register(f)}),p=i.createEffect(f=>{f.target&&Ne(f.target,()=>{a(f)})}),y=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 A=h.frameworkStore.getState();if(!A){N.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const O=f.target;if(!O){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const v=we(O);try{A.render(v,h.component,e,f)}catch($){N.logger("error",$)}});i.sample({clock:r,target:o}),i.sample({clock:a,target:y}),i.sample({clock:o.doneData,target:[u,p,n]}),i.sample({clock:o.doneData,target:e.eventBus.prepend(f=>({type:"experience_initialized",experienceInstance:f}))}),i.sample({clock:n,target:k});function F(f,h){r({experience:f,target:h})}const L=t.map(f=>Object.values(f).flat());function I(f){return t.map(h=>h[f]||[],{skipVoid:!1})}return{spawn:F,getByExperienceId:I,listStore:L}});function Re(e){return q.invoke(De,e)}exports.createAppHosts=ke;exports.createExperienceInstance=ue;exports.createExperienceInstanceIndex=Re;exports.domInteractive=Ee;exports.evaluateRuleLogic=W;exports.getTargetElements=xe;exports.isPickedRoot=oe;exports.isRulesLogic=re;exports.isStepNode=M;exports.tagTargetElement=ve;