@picked/client 0.0.1-dev.1764025609515 → 0.0.1-dev.1764090824933

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 N=(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)=>N(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"),z=require("../id-BKIWbSTy.cjs"),_=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),M=f.createDomain("experience"),q=h.createFactory(({client:t,experience:e})=>{const r=M.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 K(t){return h.invoke(q,t)}const H=h.createFactory(({client:t})=>{const e=M.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=K({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 W(t){return h.invoke(H,t)}const G=(t,e)=>{e.register(t)},T=(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 Y(t,e)&&T(t,e)}))},Y=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},J=(t,e,r)=>{const n=e.name,c=e.setup(t);if(c){const u=r[n]??{};r[n]=Object.freeze({...u,...c})}},Q=f.createDomain("component"),X=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function Z(t){return h.invoke(X,t)}const ee=h.createFactory(({client:t})=>{const e=Q.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=Z({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 te(t){return h.invoke(ee,t)}const j=(t,e,r)=>{r.register(t,e)},re=f.createDomain("framework"),se=h.createFactory(({client:t})=>{const e=re.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 ne(t){return h.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ie=6e3,$=w.createStorageKey("last_ping","global"),ae=t=>`${t}/api/v1/ping`,ce=async t=>{try{const e=Date.now(),r=localStorage.getItem($);if(r&&e-parseInt(r)<ie)return!0;const n=ae(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 ue(t){const e=typeof window<"u",r={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(r)}const le=f.createDomain("predicate"),pe=h.createFactory(({client:t})=>{const e=le.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 ge(t){return h.invoke(pe,t)}const de=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),fe=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 me(t){return h.invoke(fe,t)}const ye=(t,e,r)=>{r.register(t,e)},R=f.createDomain("history");function O(t,e){return{id:z.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const he=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 Se(){return h.invoke(he)}const ve=()=>f.createEvent(),ke=f.createDomain("field"),we=h.createFactory(()=>{const t=ke.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 Fe(){return h.invoke(we)}const be=(t,e)=>{e.register(t)},Ie=f.createDomain("action"),xe=h.createFactory(()=>{const t=Ie.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 Ee(){return h.invoke(xe)}const Re=(t,e,r)=>{r.register(t,e)};function L(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Pe=f.createDomain("response"),Ae=h.createFactory(({client:t})=>{const e=Pe.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&&!_.isEmpty(v.validation)&&!L(d)){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&&L(d)){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 De(t){return h.invoke(Ae,t)}const Be=()=>"0.0.1-dev.1764025609515";function je(){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 Ce(){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 Oe=()=>({id:Ce()}),Le=w.createStorageKey("session","global"),Me=()=>{if(!k.supportsLocalStorage())return null;const t=w.localStore.get(Le);let e=t.isSet()?t.json():null;return e||(e=Oe(),t.set(e)),e},Te=()=>Me();class D{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",ve());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"searchParams",$e());y(this,"history",Se());y(this,"components",te({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",W({client:this}));y(this,"frameworks",ne({client:this}));y(this,"predicates",ge({client:this}));y(this,"features",me({client:this}));y(this,"responses",De({client:this}));y(this,"fields",Fe());y(this,"actions",Ee());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||je(),this.session=Te(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:Be()}),I.logger("info","Picked client initialized.")}start(){ce(this),(async()=>{k.supportsDocument()&&(document.body&&B(this),await F.domInteractive(),B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){oe(e,this.frameworks)}registerComponent(e,r){j(e,r,this.components)}registerPlugin(e){J(this,e,this.plugins)}registerFeature(e,r){ye(e,r,this.features)}registerPredicate(e,r){de(e,r,this.predicates)}registerField(e){be(e,this.fields)}registerAction(e,r){Re(e,r,this.actions)}registerExperience(e){e.component&&j(`experience:${e.id}`,e.component,this.components),G(e,this.experiences)}getStateSnapshot(){return ue(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){I.logger("warn",`Experience with id '${e}' not found.`);return}T(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 V(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Ve(t){return t.some(e=>e.condition||V(e))}async function Ue(t,e){return e.length===0||!Ve(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!V(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 Ne=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=Ne;exports.getStepFields=Ue;
1
+ "use strict";var U=Object.defineProperty;var N=(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)=>N(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-BpQMqclI.cjs"),I=require("../logger-BsmHUUw1.cjs"),w=require("../storage-DuRlyFaY.cjs"),z=require("../id-BKIWbSTy.cjs"),_=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),M=f.createDomain("experience"),q=h.createFactory(({client:t,experience:e})=>{const r=M.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 K(t){return h.invoke(q,t)}const H=h.createFactory(({client:t})=>{const e=M.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=K({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 W(t){return h.invoke(H,t)}const G=(t,e)=>{e.register(t)},T=(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 Y(t,e)&&T(t,e)}))},Y=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},J=(t,e,r)=>{const n=e.name,c=e.setup(t);if(c){const u=r[n]??{};r[n]=Object.freeze({...u,...c})}},Q=f.createDomain("component"),X=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function Z(t){return h.invoke(X,t)}const ee=h.createFactory(({client:t})=>{const e=Q.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=Z({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 te(t){return h.invoke(ee,t)}const j=(t,e,r)=>{r.register(t,e)},re=f.createDomain("framework"),se=h.createFactory(({client:t})=>{const e=re.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 ne(t){return h.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ie=6e3,$=w.createStorageKey("last_ping","global"),ae=t=>`${t}/api/v1/ping`,ce=async t=>{try{const e=Date.now(),r=localStorage.getItem($);if(r&&e-parseInt(r)<ie)return!0;const n=ae(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 ue(t){const e=typeof window<"u",r={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(r)}const le=f.createDomain("predicate"),pe=h.createFactory(({client:t})=>{const e=le.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 ge(t){return h.invoke(pe,t)}const de=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),fe=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&&A.key===m);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,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: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&&m.key===i.feature.key);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,key:i})=>!p.some(m=>m.id===a&&m.key===i),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(g=>g.id===a.id&&g.key===a.key)?p:[...p,a],target:r});function b(p){return e.map(a=>a[p],{skipVoid:!1})}return{register:c,getByName:b,listStore:S}});function me(t){return h.invoke(fe,t)}const ye=(t,e,r)=>{r.register(t,e)},R=f.createDomain("history");function O(t,e){return{id:z.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const he=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 Se(){return h.invoke(he)}const ve=()=>f.createEvent(),ke=f.createDomain("field"),we=h.createFactory(()=>{const t=ke.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 Fe(){return h.invoke(we)}const be=(t,e)=>{e.register(t)},Ie=f.createDomain("action"),xe=h.createFactory(()=>{const t=Ie.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 Ee(){return h.invoke(xe)}const Re=(t,e,r)=>{r.register(t,e)};function L(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Pe=f.createDomain("response"),Ae=h.createFactory(({client:t})=>{const e=Pe.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&&!_.isEmpty(v.validation)&&!L(d)){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&&L(d)){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 De(t){return h.invoke(Ae,t)}const Be=()=>"0.0.1-dev.1764090824933";function je(){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 Ce(){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 Oe=()=>({id:Ce()}),Le=w.createStorageKey("session","global"),Me=()=>{if(!k.supportsLocalStorage())return null;const t=w.localStore.get(Le);let e=t.isSet()?t.json():null;return e||(e=Oe(),t.set(e)),e},Te=()=>Me();class D{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",ve());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"searchParams",$e());y(this,"history",Se());y(this,"components",te({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",W({client:this}));y(this,"frameworks",ne({client:this}));y(this,"predicates",ge({client:this}));y(this,"features",me({client:this}));y(this,"responses",De({client:this}));y(this,"fields",Fe());y(this,"actions",Ee());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||je(),this.session=Te(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:Be()}),I.logger("info","Picked client initialized.")}start(){ce(this),(async()=>{k.supportsDocument()&&(document.body&&B(this),await F.domInteractive(),B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){oe(e,this.frameworks)}registerComponent(e,r){j(e,r,this.components)}registerPlugin(e){J(this,e,this.plugins)}registerFeature(e,r){ye(e,r,this.features)}registerPredicate(e,r){de(e,r,this.predicates)}registerField(e){be(e,this.fields)}registerAction(e,r){Re(e,r,this.actions)}registerExperience(e){e.component&&j(`experience:${e.id}`,e.component,this.components),G(e,this.experiences)}getStateSnapshot(){return ue(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){I.logger("warn",`Experience with id '${e}' not found.`);return}T(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 V(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Ve(t){return t.some(e=>e.condition||V(e))}async function Ue(t,e){return e.length===0||!Ve(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!V(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 Ne=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=Ne;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-BpQMqclI.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
@@ -1,20 +1,20 @@
1
1
  var Y = Object.defineProperty;
2
2
  var J = (t, e, r) => e in t ? Y(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
3
  var m = (t, e, r) => J(t, typeof e != "symbol" ? e + "" : e, r);
4
- import { createDomain as I, createApi as x, createEffect as M, attach as Q, sample as F, combine as O, createEvent as C } from "effector";
5
- import { createFactory as k, invoke as w } from "@withease/factories";
6
- import { g as U, t as X, c as Z, i as ee, e as A, a as te, b as re, d as se } from "../experience-instance-QtGs0N3g.js";
7
- import { f as vt } from "../experience-instance-QtGs0N3g.js";
8
- import { l as v } from "../logger-C9a75KZn.js";
9
- import { c as R, s as $, l as D } from "../storage-Cb_71y48.js";
4
+ import { createDomain as b, createApi as I, createEffect as M, attach as Q, sample as x, combine as O, createEvent as C } from "effector";
5
+ import { createFactory as v, invoke as w } from "@withease/factories";
6
+ import { g as _, t as X, c as Z, i as ee, e as $, a as te, b as re, d as se } from "../experience-instance-CMrX6QA2.js";
7
+ import { f as kt } from "../experience-instance-CMrX6QA2.js";
8
+ import { l as k } from "../logger-C9a75KZn.js";
9
+ import { c as R, s as j, l as D } from "../storage-Cb_71y48.js";
10
10
  import { a as wt } from "../storage-Cb_71y48.js";
11
11
  import { g as ne } from "../id-BW-g3y32.js";
12
12
  import { i as oe } from "../object-JwZ58NOH.js";
13
13
  import { s as H, a as ie, b as ae, c as ce, d as ue } from "../supports-BjhuLJ8z.js";
14
- import { h as It, f as xt, j as Ft, e as Et, g as Pt, i as Rt, k as Bt } from "../supports-BjhuLJ8z.js";
15
- const K = I("experience"), le = k(
14
+ import { h as bt, f as It, j as xt, e as Et, g as Pt, i as Rt, k as Bt } from "../supports-BjhuLJ8z.js";
15
+ const K = b("experience"), le = v(
16
16
  ({ client: t, experience: e }) => {
17
- const r = K.store(e), n = x(r, {
17
+ const r = K.store(e), n = I(r, {
18
18
  merge(l, h) {
19
19
  return {
20
20
  ...l,
@@ -48,8 +48,8 @@ const K = I("experience"), le = k(
48
48
  function de(t) {
49
49
  return w(le, t);
50
50
  }
51
- const pe = k(({ client: t }) => {
52
- const e = K.store({}), r = x(e, {
51
+ const pe = v(({ client: t }) => {
52
+ const e = K.store({}), r = I(e, {
53
53
  register(s, o) {
54
54
  return {
55
55
  ...s,
@@ -82,7 +82,7 @@ function ge(t) {
82
82
  const fe = (t, e) => {
83
83
  e.register(t);
84
84
  }, q = (t, e) => {
85
- const { targetSelectors: r } = e.configStore.getState(), n = U(r, e.id);
85
+ const { targetSelectors: r } = e.configStore.getState(), n = _(r, e.id);
86
86
  n.forEach(
87
87
  ({ elements: u }) => u.forEach((s) => X(s, e.id))
88
88
  ), Z(n, e.id).forEach((u) => {
@@ -96,14 +96,14 @@ const fe = (t, e) => {
96
96
  );
97
97
  }, me = 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 && ee(r) ? await A(t, r) === !0 : !0;
99
+ return _(n, e.id).length < 1 || n.length === 0 ? !1 : r && ee(r) ? await $(t, r) === !0 : !0;
100
100
  }, he = (t, e, r) => {
101
101
  const n = e.name, c = e.setup(t);
102
102
  if (c) {
103
103
  const u = r[n] ?? {};
104
104
  r[n] = Object.freeze({ ...u, ...c });
105
105
  }
106
- }, ye = I("component"), Se = k(
106
+ }, ye = b("component"), Se = v(
107
107
  ({ client: t, component: e, name: r }) => {
108
108
  const n = t.frameworks.getByName(e.frameworkName);
109
109
  return {
@@ -113,11 +113,11 @@ const fe = (t, e) => {
113
113
  };
114
114
  }
115
115
  );
116
- function ve(t) {
116
+ function ke(t) {
117
117
  return w(Se, t);
118
118
  }
119
- const ke = k(({ client: t }) => {
120
- const e = ye.store({}), r = x(e, {
119
+ const ve = v(({ client: t }) => {
120
+ const e = ye.store({}), r = I(e, {
121
121
  register(s, o) {
122
122
  return {
123
123
  ...s,
@@ -126,11 +126,11 @@ const ke = k(({ client: t }) => {
126
126
  }
127
127
  });
128
128
  function n(s, o) {
129
- e.getState()[s] && v(
129
+ e.getState()[s] && k(
130
130
  "warn",
131
131
  `Component '${s}' already registered. Registering again will override the previous registration.`
132
132
  );
133
- const h = ve({ client: t, name: s, component: o });
133
+ const h = ke({ client: t, name: s, component: o });
134
134
  r.register(h);
135
135
  }
136
136
  const c = e.map((s) => Object.values(s));
@@ -144,12 +144,12 @@ const ke = k(({ client: t }) => {
144
144
  };
145
145
  });
146
146
  function we(t) {
147
- return w(ke, t);
147
+ return w(ve, t);
148
148
  }
149
149
  const T = (t, e, r) => {
150
150
  r.register(t, e);
151
- }, be = I("framework"), Ie = k(({ client: t }) => {
152
- const e = be.store({}), r = x(e, {
151
+ }, Fe = b("framework"), be = v(({ client: t }) => {
152
+ const e = Fe.store({}), r = I(e, {
153
153
  register(s, o) {
154
154
  return {
155
155
  ...s,
@@ -158,7 +158,7 @@ const T = (t, e, r) => {
158
158
  }
159
159
  });
160
160
  function n(s, o) {
161
- e.getState()[s] && v(
161
+ e.getState()[s] && k(
162
162
  "warn",
163
163
  `Framework '${s}' already registered. Registering again will override the previous registration.`
164
164
  ), r.register({ name: s, framework: o });
@@ -173,10 +173,10 @@ const T = (t, e, r) => {
173
173
  listStore: c
174
174
  };
175
175
  });
176
- function xe(t) {
177
- return w(Ie, t);
176
+ function Ie(t) {
177
+ return w(be, t);
178
178
  }
179
- const Fe = (t, e) => {
179
+ const xe = (t, e) => {
180
180
  e.register(t.name, t);
181
181
  }, Ee = 6e3, N = R("last_ping", "global"), Pe = (t) => `${t}/api/v1/ping`, Re = async (t) => {
182
182
  try {
@@ -197,7 +197,7 @@ const Fe = (t, e) => {
197
197
  })).ok;
198
198
  return S && localStorage.setItem(N, e.toString()), S;
199
199
  } catch (e) {
200
- return v("error", e), !1;
200
+ return k("error", e), !1;
201
201
  }
202
202
  };
203
203
  function Be(t) {
@@ -212,8 +212,8 @@ function Be(t) {
212
212
  };
213
213
  return Object.freeze(r);
214
214
  }
215
- const Ae = I("predicate"), $e = k(({ client: t }) => {
216
- const e = Ae.store({}), r = x(e, {
215
+ const Ae = b("predicate"), $e = v(({ client: t }) => {
216
+ const e = Ae.store({}), r = I(e, {
217
217
  register(s, o) {
218
218
  return {
219
219
  ...s,
@@ -225,7 +225,7 @@ const Ae = I("predicate"), $e = k(({ client: t }) => {
225
225
  }
226
226
  });
227
227
  function n(s, o) {
228
- e.getState()[s] && v(
228
+ e.getState()[s] && k(
229
229
  "warn",
230
230
  `Predicate '${s}' already registered. Registering again will override the previous registration.`
231
231
  ), r.register(Object.freeze({ name: s, predicate: o }));
@@ -245,8 +245,8 @@ function je(t) {
245
245
  }
246
246
  const Oe = (t, e, r) => {
247
247
  r.register(t, e);
248
- }, z = I("feature"), Ce = k(({ client: t }) => {
249
- const e = z.store({}), r = z.store([]), n = x(e, {
248
+ }, z = b("feature"), Ce = v(({ client: t }) => {
249
+ const e = z.store({}), r = z.store([]), n = I(e, {
250
250
  register(d, a) {
251
251
  return {
252
252
  ...d,
@@ -255,7 +255,7 @@ const Oe = (t, e, r) => {
255
255
  }
256
256
  });
257
257
  function c(d, a) {
258
- e.getState()[d] && v(
258
+ e.getState()[d] && k(
259
259
  "warn",
260
260
  `Feature '${d}' already registered. Registering again will override the previous registration.`
261
261
  );
@@ -279,27 +279,29 @@ const Oe = (t, e, r) => {
279
279
  key: a,
280
280
  storage: i = "local"
281
281
  }) => {
282
- const p = R(`feature:${d}:${a}`, "global"), g = (i === "session" ? $ : D).get(p).boolean();
282
+ const p = R(`feature:${d}:${a}`, "global"), g = (i === "session" ? j : D).get(p).boolean();
283
283
  return g === null ? null : { id: d, key: a, bucket: g, storage: i };
284
284
  }
285
285
  ), s = M((d) => {
286
286
  if (!d)
287
287
  return null;
288
288
  const a = R(`feature:${d.id}:${d.key}`, "global");
289
- (d.storage === "session" ? $ : D).set(a, d.bucket);
289
+ (d.storage === "session" ? j : D).set(a, d.bucket);
290
290
  }), o = /* @__PURE__ */ new Map(), l = Q({
291
291
  source: { allFeaturesStore: e, resolvedFeaturesStore: r },
292
292
  effect: async ({ allFeaturesStore: d, resolvedFeaturesStore: a }, { id: i, decide: p, key: f }) => {
293
- const g = a.find((j) => j.id === i);
293
+ const g = a.find(
294
+ (A) => A.id === i && A.key === f
295
+ );
294
296
  if (g)
295
297
  return g;
296
298
  const y = d[i];
297
299
  if (!y)
298
300
  throw new Error(`Feature with id '${i}' not found`);
299
- const b = o.get(`${i}:${f}`);
300
- if (b !== void 0) {
301
- const j = await b;
302
- return { id: y.id, bucket: j, key: f, storage: y.feature.storage };
301
+ const F = o.get(`${i}:${f}`);
302
+ if (F !== void 0) {
303
+ const A = await F;
304
+ return { id: y.id, bucket: A, key: f, storage: y.feature.storage };
303
305
  }
304
306
  const B = p();
305
307
  o.set(`${i}:${f}`, B);
@@ -307,19 +309,14 @@ const Oe = (t, e, r) => {
307
309
  return { id: y.id, bucket: E, key: f, storage: y.feature.storage };
308
310
  }
309
311
  });
310
- F({
312
+ x({
311
313
  clock: n.register,
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 };
314
+ fn: (d) => {
315
+ const { id: a, feature: i } = d;
316
+ return { id: a, key: i.feature.key, storage: i.feature.storage };
320
317
  },
321
318
  target: u
322
- }), F({
319
+ }), x({
323
320
  source: e,
324
321
  clock: l.doneData,
325
322
  fn: (d, a) => {
@@ -334,7 +331,9 @@ const Oe = (t, e, r) => {
334
331
  allFeaturesStore: d,
335
332
  resolvedFeaturesStore: a
336
333
  }) => Object.values(d).map((i) => {
337
- const p = a.find((f) => f.id === i.id);
334
+ const p = a.find(
335
+ (f) => f.id === i.id && f.key === i.feature.key
336
+ );
338
337
  return p ? {
339
338
  id: i.id,
340
339
  name: i.feature.name,
@@ -350,19 +349,23 @@ const Oe = (t, e, r) => {
350
349
  };
351
350
  })
352
351
  );
353
- F({
352
+ x({
354
353
  clock: l.doneData,
355
354
  source: { resolvedFeatures: r },
356
- filter: ({ resolvedFeatures: d }, { id: a }) => !d.some((i) => i.id === a),
355
+ filter: ({ resolvedFeatures: d }, { id: a, key: i }) => !d.some(
356
+ (f) => f.id === a && f.key === i
357
+ ),
357
358
  fn: (d, a) => a,
358
359
  target: t.eventBus.prepend((d) => ({
359
360
  type: "feature_decide",
360
361
  feature: d
361
362
  }))
362
- }), F({
363
+ }), x({
363
364
  clock: [u.doneData, l.doneData],
364
365
  source: r,
365
- fn: (d, a) => !a || d.some((i) => i.id === a.id) ? d : [...d, a],
366
+ fn: (d, a) => !a || d.some(
367
+ (p) => p.id === a.id && p.key === a.key
368
+ ) ? d : [...d, a],
366
369
  target: r
367
370
  });
368
371
  function S(d) {
@@ -379,8 +382,8 @@ function De(t) {
379
382
  }
380
383
  const Me = (t, e, r) => {
381
384
  r.register(t, e);
382
- }, P = I("history");
383
- function _(t, e) {
385
+ }, P = b("history");
386
+ function L(t, e) {
384
387
  return {
385
388
  // eslint-disable-next-line sonarjs/pseudo-random
386
389
  id: ne(`history-entry-${Date.now()}-${Math.random()}}`),
@@ -389,14 +392,14 @@ function _(t, e) {
389
392
  experienceId: t
390
393
  };
391
394
  }
392
- const Ve = k(() => {
395
+ const Ve = v(() => {
393
396
  const t = P.store({ entries: [] }), e = P.event(), r = P.event(), n = P.event(), c = P.event();
394
397
  t.on(e, (s, o) => ({
395
- entries: [...s.entries, _(o.experienceId, o.node)]
398
+ entries: [...s.entries, L(o.experienceId, o.node)]
396
399
  })), t.on(r, (s, o) => ({
397
400
  entries: [
398
401
  ...s.entries.slice(0, -1),
399
- _(o.experienceId, o.node)
402
+ L(o.experienceId, o.node)
400
403
  ]
401
404
  })), t.on(c, (s, o) => o);
402
405
  function u(s, o) {
@@ -430,8 +433,8 @@ const Ve = k(() => {
430
433
  function Te() {
431
434
  return w(Ve);
432
435
  }
433
- const Ne = () => C(), ze = I("field"), _e = k(() => {
434
- const t = ze.store({}), e = x(t, {
436
+ const Ne = () => C(), ze = b("field"), Le = v(() => {
437
+ const t = ze.store({}), e = I(t, {
435
438
  register(s, o) {
436
439
  return {
437
440
  ...s,
@@ -456,13 +459,13 @@ const Ne = () => C(), ze = I("field"), _e = k(() => {
456
459
  getByName: u
457
460
  };
458
461
  });
459
- function Le() {
460
- return w(_e);
462
+ function Ue() {
463
+ return w(Le);
461
464
  }
462
- const Ue = (t, e) => {
465
+ const _e = (t, e) => {
463
466
  e.register(t);
464
- }, He = I("action"), Ke = k(() => {
465
- const t = He.store({}), e = x(t, {
467
+ }, He = b("action"), Ke = v(() => {
468
+ const t = He.store({}), e = I(t, {
466
469
  register(u, s) {
467
470
  return {
468
471
  ...u,
@@ -492,11 +495,11 @@ function qe() {
492
495
  const Ge = (t, e, r) => {
493
496
  r.register(t, e);
494
497
  };
495
- function L(t) {
498
+ function U(t) {
496
499
  return typeof t > "u" || t === null || t === "" || Array.isArray(t) && !t.length;
497
500
  }
498
- const We = I("response"), Ye = k(({ client: t }) => {
499
- const e = We.store({}), r = C(), n = C(), c = x(e, {
501
+ const We = b("response"), Ye = v(({ client: t }) => {
502
+ const e = We.store({}), r = C(), n = C(), c = I(e, {
500
503
  register(a, i) {
501
504
  return {
502
505
  ...a,
@@ -535,20 +538,20 @@ const We = I("response"), Ye = k(({ client: t }) => {
535
538
  });
536
539
  return;
537
540
  }
538
- if (y.multiple && (typeof g == "string" || typeof g == "number" || typeof g == "boolean") && (g = [g]), y.validation && !oe(y.validation) && !L(g)) {
539
- const b = await A(t, y.validation, {
541
+ if (y.multiple && (typeof g == "string" || typeof g == "number" || typeof g == "boolean") && (g = [g]), y.validation && !oe(y.validation) && !U(g)) {
542
+ const F = await $(t, y.validation, {
540
543
  $input: g
541
544
  });
542
- if (typeof b == "string") {
545
+ if (typeof F == "string") {
543
546
  i.push({
544
547
  fieldId: p,
545
- userMessage: b,
546
- systemMessage: `Field validation resulted in an error: ${b}.`,
548
+ userMessage: F,
549
+ systemMessage: `Field validation resulted in an error: ${F}.`,
547
550
  value: g
548
551
  });
549
552
  return;
550
553
  }
551
- if (b === !1) {
554
+ if (F === !1) {
552
555
  i.push({
553
556
  fieldId: p,
554
557
  userMessage: "This field is invalid",
@@ -558,7 +561,7 @@ const We = I("response"), Ye = k(({ client: t }) => {
558
561
  return;
559
562
  }
560
563
  }
561
- if (y.required && L(g)) {
564
+ if (y.required && U(g)) {
562
565
  i.push({
563
566
  fieldId: p,
564
567
  userMessage: "This field is required",
@@ -577,11 +580,11 @@ const We = I("response"), Ye = k(({ client: t }) => {
577
580
  return;
578
581
  }
579
582
  if (y.options) {
580
- const b = y.options.map((E) => E.value), B = Array.isArray(g) ? g : [g];
581
- Array.isArray(g) && (B.every((E) => b.includes(E)) || i.push({
583
+ const F = y.options.map((E) => E.value), B = Array.isArray(g) ? g : [g];
584
+ Array.isArray(g) && (B.every((E) => F.includes(E)) || i.push({
582
585
  fieldId: p,
583
586
  userMessage: "This field expects a valid option",
584
- systemMessage: `Field expects a valid option. Valid options are: ${b.join(", ")}`,
587
+ systemMessage: `Field expects a valid option. Valid options are: ${F.join(", ")}`,
585
588
  value: g
586
589
  }));
587
590
  }
@@ -607,10 +610,10 @@ const We = I("response"), Ye = k(({ client: t }) => {
607
610
  return g || (p != null && p.defaultValue ? p.defaultValue : null);
608
611
  });
609
612
  }
610
- return F({
613
+ return x({
611
614
  clock: r,
612
615
  target: c.clearAll
613
- }), F({
616
+ }), x({
614
617
  clock: n,
615
618
  target: c.clear
616
619
  }), {
@@ -628,7 +631,7 @@ const We = I("response"), Ye = k(({ client: t }) => {
628
631
  function Je(t) {
629
632
  return w(Ye, t);
630
633
  }
631
- const Qe = () => "0.0.1-dev.1764025609515";
634
+ const Qe = () => "0.0.1-dev.1764090824933";
632
635
  function Xe() {
633
636
  if (H()) {
634
637
  const t = [
@@ -656,9 +659,9 @@ function Ze() {
656
659
  }
657
660
  const n = R("s");
658
661
  if (r.size > 0)
659
- $.set(n, e);
662
+ j.set(n, e);
660
663
  else {
661
- const c = $.get(n);
664
+ const c = j.get(n);
662
665
  if (c)
663
666
  return c.json() || {};
664
667
  }
@@ -694,13 +697,13 @@ class G {
694
697
  m(this, "components", we({ client: this }));
695
698
  m(this, "experienceInstances", re({ client: this }));
696
699
  m(this, "experiences", ge({ client: this }));
697
- m(this, "frameworks", xe({ client: this }));
700
+ m(this, "frameworks", Ie({ client: this }));
698
701
  m(this, "predicates", je({ client: this }));
699
702
  m(this, "features", De({ client: this }));
700
703
  m(this, "responses", Je({ client: this }));
701
- m(this, "fields", Le());
704
+ m(this, "fields", Ue());
702
705
  m(this, "actions", qe());
703
- v("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || Xe(), this.session = nt(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.eventBus({ type: "initialized", version: Qe() }), v("info", "Picked client initialized.");
706
+ k("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || Xe(), this.session = nt(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.eventBus({ type: "initialized", version: Qe() }), k("info", "Picked client initialized.");
704
707
  }
705
708
  start() {
706
709
  Re(this), (async () => {
@@ -708,7 +711,7 @@ class G {
708
711
  })();
709
712
  }
710
713
  registerFramework(e) {
711
- Fe(e, this.frameworks);
714
+ xe(e, this.frameworks);
712
715
  }
713
716
  registerComponent(e, r) {
714
717
  T(e, r, this.components);
@@ -723,7 +726,7 @@ class G {
723
726
  Oe(e, r, this.predicates);
724
727
  }
725
728
  registerField(e) {
726
- Ue(e, this.fields);
729
+ _e(e, this.fields);
727
730
  }
728
731
  registerAction(e, r) {
729
732
  Ge(e, r, this.actions);
@@ -737,7 +740,7 @@ class G {
737
740
  async launchExperienceById(e) {
738
741
  const r = this.experiences.getById(e).getState();
739
742
  if (!r) {
740
- v("warn", `Experience with id '${e}' not found.`);
743
+ k("warn", `Experience with id '${e}' not found.`);
741
744
  return;
742
745
  }
743
746
  q(this, r);
@@ -795,7 +798,7 @@ class G {
795
798
  const e = this.options.predicates;
796
799
  e && Object.entries(e).forEach(([r, n]) => {
797
800
  if (typeof n != "function") {
798
- v("warn", `Predicate "${r}" is not a function.`);
801
+ k("warn", `Predicate "${r}" is not a function.`);
799
802
  return;
800
803
  }
801
804
  this.registerPredicate(r, n);
@@ -805,7 +808,7 @@ class G {
805
808
  const e = this.options.actions;
806
809
  e && Object.entries(e).forEach(([r, n]) => {
807
810
  if (typeof n != "function") {
808
- v("warn", `Action "${r}" is not a function.`);
811
+ k("warn", `Action "${r}" is not a function.`);
809
812
  return;
810
813
  }
811
814
  this.registerAction(r, n);
@@ -815,7 +818,7 @@ class G {
815
818
  return this.plugins[e] ?? {};
816
819
  }
817
820
  }
818
- m(G, "logger", v);
821
+ m(G, "logger", k);
819
822
  function W(t) {
820
823
  var e;
821
824
  return ((e = t.options) == null ? void 0 : e.some((r) => "condition" in r)) ?? !1;
@@ -826,12 +829,12 @@ function ot(t) {
826
829
  async function mt(t, e) {
827
830
  return e.length === 0 || !ot(e) ? e : (await Promise.all(
828
831
  e.map(async (n) => {
829
- if (!(n.condition ? await A(t, n.condition) : !0))
832
+ if (!(n.condition ? await $(t, n.condition) : !0))
830
833
  return null;
831
834
  if (!n.options || !W(n))
832
835
  return n;
833
836
  const s = (await Promise.all(
834
- n.options.map(async (l) => l.condition ? await A(t, l.condition) ? l : null : l)
837
+ n.options.map(async (l) => l.condition ? await $(t, l.condition) ? l : null : l)
835
838
  )).filter((l) => l !== null);
836
839
  return s.length === n.options.length ? n : s.length === 0 ? null : { ...n, options: s };
837
840
  })
@@ -845,17 +848,17 @@ export {
845
848
  G as Picked,
846
849
  ht as createClient,
847
850
  R as createStorageKey,
848
- A as evaluateRuleLogic,
851
+ $ as evaluateRuleLogic,
849
852
  mt as getStepFields,
850
- vt as isPickedRoot,
853
+ kt as isPickedRoot,
851
854
  D as localStore,
852
- $ as sessionStore,
855
+ j as sessionStore,
853
856
  wt as subscribe,
854
- It as supportsCookies,
857
+ bt as supportsCookies,
855
858
  ce as supportsCryptoRandomUUID,
856
859
  H as supportsDocument,
857
- xt as supportsHistory,
858
- Ft as supportsIntersectionObserver,
860
+ It as supportsHistory,
861
+ xt as supportsIntersectionObserver,
859
862
  ae as supportsLocalStorage,
860
863
  Et as supportsLocation,
861
864
  Pt as supportsSessionStorage,
@@ -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-CMrX6QA2.js";
3
3
  function R() {
4
4
  let c, p;
5
5
  return {
@@ -0,0 +1 @@
1
+ "use strict";const i=require("effector"),q=require("@withease/factories"),H=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 O(e),"!":async e=>!await O(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 O(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 O(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,t),await O(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 O(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 O(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 O(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 O(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 O(e){return ne(e)?O(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 V(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!H.supportsWindow()||!H.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}const we="open";function Ee(e){if(!H.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:we})}function Ne(){return new Promise((e,t)=>{if(!H.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Ie(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const C="picked-root",j="picked-target",xe="picked-root";function ke(e,t){return[...e,{selector:`${xe}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=ye(n.selector).filter(c=>!Ae(c,t)&&!oe(c,t));return{...n,elements:a}})}function ve(e,t){return e.flatMap(r=>r.elements.map(n=>Be(n,r.placement,t)))}function be(e,t){e.classList.add(j),e.classList.add(`${j}-${t}`)}function Ae(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(`${j}`)}function oe(e,t){return t?e.classList.contains(`${C}-${t}`):e.classList.contains(C)}function Oe(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(C),t.classList.add(`${C}-${e}`),t}function Be(e,t,r){let n;const a=Oe(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):[]})),$e=(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,B]=ie(e,t,y,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,B+1))}return o===1/0?[-1,-1]:[o,u]},Te=(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(B=>B.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]},Me=(e,t,r)=>ae(e,t,r,new Set),ce=e=>e.find(r=>r.type==="origin")||null,U=(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 Le(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"),De=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"),B=e.history.entriesStore.map(s=>s.filter(l=>l.experienceId===t.id)),L=B.map(s=>s.filter(l=>M(l.node))),I=B.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?$e(s,l,d):[]),A=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Me(s,l,d):[-1,-1]),_=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Te(s,l,d):[-1,-1]),v=X.store(!1),F=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=>{}}),W=i.attach({source:t.treeStore,effect:async({nodes:s})=>ce(s)}),G=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>U(d,s,l)}),K=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 V(e,$.condition);return Le(!!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}])=>U(s,l,d)}),D=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>U(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 V(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:W,origin:G,condition:K,step:z,launchExperience:de,action:J,__:i.createEvent()}}),i.sample({clock:[K.doneData,G.doneData,W.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([K.pending,G.pending,W.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:F.open,close:F.close,toggleOpen:F.toggle,setOpen:F.set,treeStore:t.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:A,stepsToLeafStore:_,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:L}});function ue(e){return q.invoke(De,e)}const Re=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,_=(v=f[A])==null?void 0:v.filter(F=>F!==h);return{...f,[A]:_??[]}}}),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&&Ie(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 _=f.target;if(!_){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const v=Ee(_);try{A.render(v,h.component,e,f)}catch(F){N.logger("error",F)}});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 B(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:B,getByExperienceId:I,listStore:L}});function Pe(e){return q.invoke(Re,e)}exports.createAppHosts=ve;exports.createExperienceInstance=ue;exports.createExperienceInstanceIndex=Pe;exports.domInteractive=Ne;exports.evaluateRuleLogic=V;exports.getTargetElements=ke;exports.isPickedRoot=oe;exports.isRulesLogic=re;exports.isStepNode=M;exports.tagTargetElement=be;
@@ -1,4 +1,4 @@
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";
1
+ import { createDomain as ht, createEvent as O, combine as C, createApi as ot, createEffect as M, attach as _, split as yt, sample as m } from "effector";
2
2
  import { createFactory as it, invoke as st } from "@withease/factories";
3
3
  import { i as wt, s as at, a as Nt } from "./supports-BjhuLJ8z.js";
4
4
  import { l as I } from "./logger-C9a75KZn.js";
@@ -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 B(t),
51
+ "!": async (t) => !await B(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),
@@ -141,20 +141,20 @@ async function p(t, e) {
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 B(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 B(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 B(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 B(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,21 +184,21 @@ 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 B(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 B(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 B(await p(n[1], c))) return !1;
202
202
  return !0;
203
203
  }
204
204
  case "catch":
@@ -212,8 +212,8 @@ async function p(t, e) {
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 B(t) {
216
+ return ct(t) ? B(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
217
217
  }
218
218
  function kt(t) {
219
219
  return Object.keys(t)[0];
@@ -255,12 +255,13 @@ function bt(t) {
255
255
  (e) => e instanceof HTMLElement
256
256
  );
257
257
  }
258
- function vt(t) {
258
+ const vt = "open";
259
+ function Ot(t) {
259
260
  if (!wt())
260
261
  throw new Error("Shadow DOM is not supported in this environment");
261
- return t.attachShadow({ mode: "closed" });
262
+ return t.attachShadow({ mode: vt });
262
263
  }
263
- function Xt() {
264
+ function zt() {
264
265
  return new Promise((t, e) => {
265
266
  if (!at()) {
266
267
  e();
@@ -275,18 +276,18 @@ function Bt(t, e) {
275
276
  });
276
277
  r.observe(document.body, { childList: !0, subtree: !0 });
277
278
  }
278
- const K = "picked-root", U = "picked-target", $t = "picked-root";
279
- function zt(t, e) {
279
+ const G = "picked-root", K = "picked-target", _t = "picked-root";
280
+ function Jt(t, e) {
280
281
  return [
281
282
  ...t,
282
283
  // Target and replace picked-root web components
283
284
  {
284
- selector: `${$t}[experience-id="${e}"]`,
285
+ selector: `${_t}[experience-id="${e}"]`,
285
286
  placement: "replace"
286
287
  }
287
288
  ].flatMap((n) => {
288
289
  const s = bt(n.selector).filter(
289
- (a) => !Ft(a, e) && !Ot(a, e)
290
+ (a) => !$t(a, e) && !Ft(a, e)
290
291
  );
291
292
  return {
292
293
  ...n,
@@ -294,25 +295,25 @@ function zt(t, e) {
294
295
  };
295
296
  });
296
297
  }
297
- function Jt(t, e) {
298
- return t.flatMap((r) => r.elements.map((n) => Mt(n, r.placement, e)));
299
- }
300
298
  function Qt(t, e) {
301
- t.classList.add(U), t.classList.add(`${U}-${e}`);
299
+ return t.flatMap((r) => r.elements.map((n) => Tt(n, r.placement, e)));
302
300
  }
303
- function Ft(t, e) {
304
- return e ? t.classList.contains(`${U}-${e}`) : t.classList.contains(`${U}`);
301
+ function Yt(t, e) {
302
+ t.classList.add(K), t.classList.add(`${K}-${e}`);
303
+ }
304
+ function $t(t, e) {
305
+ return e ? t.classList.contains(`${K}-${e}`) : t.classList.contains(`${K}`);
305
306
  }
306
- function Ot(t, e) {
307
- return e ? t.classList.contains(`${K}-${e}`) : t.classList.contains(K);
307
+ function Ft(t, e) {
308
+ return e ? t.classList.contains(`${G}-${e}`) : t.classList.contains(G);
308
309
  }
309
- function _t(t) {
310
+ function Mt(t) {
310
311
  const e = document.createElement("div");
311
- return e.style.display = "block", e.classList.add(K), e.classList.add(`${K}-${t}`), e;
312
+ return e.style.display = "block", e.classList.add(G), e.classList.add(`${G}-${t}`), e;
312
313
  }
313
- function Mt(t, e, r) {
314
+ function Tt(t, e, r) {
314
315
  let n;
315
- const s = _t(r);
316
+ const s = Mt(r);
316
317
  if (t instanceof Document)
317
318
  n = t.body.appendChild(s);
318
319
  else {
@@ -337,13 +338,13 @@ function Mt(t, e, r) {
337
338
  }
338
339
  return n;
339
340
  }
340
- function Tt(t) {
341
+ function Lt(t) {
341
342
  return t.type === "conditional";
342
343
  }
343
344
  function j(t) {
344
345
  return t.type === "step";
345
346
  }
346
- function Lt(t) {
347
+ function Dt(t) {
347
348
  return t.type === "experience";
348
349
  }
349
350
  function nt(t) {
@@ -355,7 +356,7 @@ function rt(t) {
355
356
  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) => {
356
357
  const c = t.find((d) => d.id === o.destinationNodeId);
357
358
  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()) => {
359
+ })), Pt = (t, e, r) => ut(t, e, r, !0, /* @__PURE__ */ new Set()), ft = (t, e, r, n, s = /* @__PURE__ */ new Set()) => {
359
360
  if (s.has(r.id)) return [-1, -1];
360
361
  s.add(r.id);
361
362
  const a = e.filter((d) => d.sourceNodeId === r.id);
@@ -364,24 +365,24 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
364
365
  for (const d of a) {
365
366
  const y = t.find((P) => P.id === d.destinationNodeId);
366
367
  if (!y) continue;
367
- const [k, O] = ft(
368
+ const [k, $] = ft(
368
369
  t,
369
370
  e,
370
371
  y,
371
372
  !1,
372
373
  new Set(s)
373
374
  );
374
- k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, O + 1));
375
+ k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, $ + 1));
375
376
  }
376
377
  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()) => {
378
+ }, Rt = (t, e, r) => ft(t, e, r, !0, /* @__PURE__ */ new Set()), lt = (t, e, r, n = /* @__PURE__ */ new Set()) => {
378
379
  if (n.has(r.id)) return [-1, -1];
379
380
  if (n.add(r.id), r.type === "origin") return [0, 0];
380
381
  const s = e.filter((c) => c.destinationNodeId === r.id);
381
382
  if (s.length === 0) return [-1, -1];
382
383
  let a = 1 / 0, o = -1 / 0;
383
384
  for (const c of s) {
384
- const d = t.find((O) => O.id === c.sourceNodeId);
385
+ const d = t.find(($) => $.id === c.sourceNodeId);
385
386
  if (!d) continue;
386
387
  const [y, k] = lt(
387
388
  t,
@@ -392,7 +393,7 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
392
393
  y !== -1 && (a = Math.min(a, y + 1), o = Math.max(o, k + 1));
393
394
  }
394
395
  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) => {
396
+ }, Ct = (t, e, r) => lt(t, e, r, /* @__PURE__ */ new Set()), dt = (t) => t.find((r) => r.type === "origin") || null, X = (t, e, r) => {
396
397
  if (!t)
397
398
  return dt(e);
398
399
  const n = r.find((a) => a.sourceNodeId === t.id);
@@ -401,19 +402,19 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
401
402
  const s = e.find((a) => a.id === n.destinationNodeId);
402
403
  return s || null;
403
404
  };
404
- async function Ct(t, e, r, n) {
405
+ async function Ht(t, e, r, n) {
405
406
  const s = t ? "true" : "false", a = n.find(
406
407
  (o) => o.sourceNodeHandle === s && o.sourceNodeId === e
407
408
  );
408
409
  return r.find((o) => o.id === (a == null ? void 0 : a.destinationNodeId));
409
410
  }
410
- const z = ht("experience-instance"), Ht = it(
411
+ const z = ht("experience-instance"), jt = it(
411
412
  ({
412
413
  client: t,
413
414
  experience: e,
414
415
  target: r
415
416
  }) => {
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) => {
417
+ const n = O(), s = O(), a = O(), o = O(), c = O(), d = O(), y = e.componentStore, k = z.store("transitioning"), $ = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), P = $.map((i) => i.filter((f) => j(f.node))), x = $.map((i) => {
417
418
  var f;
418
419
  return ((f = i[i.length - 1]) == null ? void 0 : f.node) || null;
419
420
  }), u = C(
@@ -423,39 +424,39 @@ const z = ht("experience-instance"), Ht = it(
423
424
  ), S = C(
424
425
  e.treeStore,
425
426
  x,
426
- ({ nodes: i, edges: f }, l) => l ? Dt(i, f, l) : []
427
+ ({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : []
427
428
  ), v = C(
428
429
  e.treeStore,
429
430
  x,
430
- ({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : [-1, -1]
431
+ ({ nodes: i, edges: f }, l) => l ? Ct(i, f, l) : [-1, -1]
431
432
  ), T = C(
432
433
  e.treeStore,
433
434
  x,
434
- ({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : [-1, -1]
435
- ), A = z.store(!1), _ = ot(A, {
435
+ ({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : [-1, -1]
436
+ ), A = z.store(!1), F = ot(A, {
436
437
  open: () => !0,
437
438
  close: () => !1,
438
439
  toggle: (i) => !i,
439
440
  set: (i, f) => f
440
441
  }), pt = M(async () => {
441
442
  t.history.back({ experienceId: e.id });
442
- }), gt = F({
443
+ }), gt = _({
443
444
  source: e.treeStore,
444
445
  effect: async (i, f) => {
445
446
  const l = i.nodes.find((w) => j(w) && w.stepId === f);
446
447
  l && t.history.push({ experienceId: e.id, node: l });
447
448
  }
448
- }), J = F({
449
+ }), J = _({
449
450
  source: x,
450
451
  effect: (i) => {
451
452
  }
452
- }), V = F({
453
+ }), U = _({
453
454
  source: e.treeStore,
454
455
  effect: async ({ nodes: i }) => dt(i)
455
- }), W = F({
456
+ }), V = _({
456
457
  source: e.treeStore,
457
458
  effect: async ({ nodes: i, edges: f }, l) => X(l, i, f)
458
- }), q = F({
459
+ }), q = _({
459
460
  source: e.treeStore,
460
461
  effect: async ({ nodes: i, edges: f, conditionals: l }, w) => {
461
462
  if (!w)
@@ -464,9 +465,9 @@ const z = ht("experience-instance"), Ht = it(
464
465
  if (!L)
465
466
  return;
466
467
  const E = w.id, h = await et(t, L.condition);
467
- return Ct(!!h, E, i, f);
468
+ return Ht(!!h, E, i, f);
468
469
  }
469
- }), Q = F({
470
+ }), Q = _({
470
471
  source: e.treeStore,
471
472
  effect: async ({ nodes: i, edges: f }, l) => {
472
473
  if (!l || !rt(l))
@@ -503,46 +504,46 @@ const z = ht("experience-instance"), Ht = it(
503
504
  } catch (E) {
504
505
  I("warn", `Action '${w}' failed:`, E);
505
506
  const h = f.find(
506
- (G) => G.sourceNodeId === l.id && G.sourceNodeHandle === "false"
507
+ (W) => W.sourceNodeId === l.id && W.sourceNodeHandle === "false"
507
508
  );
508
509
  if (!h)
509
510
  return I("warn", `No 'false' edge found for action node ${l.id}`), null;
510
- const b = i.find((G) => G.id === h.destinationNodeId);
511
+ const b = i.find((W) => W.id === h.destinationNodeId);
511
512
  return I("info", `Action '${w}' failed, moving to node ${b == null ? void 0 : b.id}`), b || null;
512
513
  }
513
514
  }
514
515
  }), mt = M((i) => {
515
516
  if (i)
516
517
  return t.launchExperienceById(i.experienceId);
517
- }), Y = F({
518
+ }), Y = _({
518
519
  source: [x, e.treeStore],
519
520
  effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
520
- }), R = F({
521
+ }), R = _({
521
522
  source: [x, e.treeStore],
522
523
  effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
523
524
  }), St = M((i) => {
524
525
  t.history.push({ experienceId: e.id, node: i });
525
- }), Z = F({
526
+ }), Z = _({
526
527
  source: e.configStore,
527
528
  effect: async ({ initializeOpenLogic: i }) => At(i) ? !!await et(t, i) : i ?? !1
528
529
  });
529
530
  return yt({
530
531
  source: x,
531
- match: (i) => i ? Tt(i) ? "condition" : j(i) ? "step" : Lt(i) ? "launchExperience" : nt(i) ? "origin" : rt(i) ? "action" : "other" : "none",
532
+ match: (i) => i ? Lt(i) ? "condition" : j(i) ? "step" : Dt(i) ? "launchExperience" : nt(i) ? "origin" : rt(i) ? "action" : "other" : "none",
532
533
  cases: {
533
- none: V,
534
- origin: W,
534
+ none: U,
535
+ origin: V,
535
536
  condition: q,
536
537
  step: J,
537
538
  launchExperience: mt,
538
539
  action: Q,
539
- __: B()
540
+ __: O()
540
541
  }
541
542
  }), m({
542
543
  clock: [
543
544
  q.doneData,
544
- W.doneData,
545
545
  V.doneData,
546
+ U.doneData,
546
547
  R.doneData,
547
548
  Y.doneData,
548
549
  Q.doneData
@@ -585,8 +586,8 @@ const z = ht("experience-instance"), Ht = it(
585
586
  }), m({ clock: o, target: gt }), m({
586
587
  source: C([
587
588
  q.pending,
588
- W.pending,
589
589
  V.pending,
590
+ U.pending,
590
591
  R.pending
591
592
  ]),
592
593
  fn: (i) => i.some(Boolean) ? "transitioning" : "ready",
@@ -644,10 +645,10 @@ const z = ht("experience-instance"), Ht = it(
644
645
  stateStore: k,
645
646
  // open close
646
647
  isOpenStore: A,
647
- open: _.open,
648
- close: _.close,
649
- toggleOpen: _.toggle,
650
- setOpen: _.set,
648
+ open: F.open,
649
+ close: F.close,
650
+ toggleOpen: F.toggle,
651
+ setOpen: F.set,
651
652
  // nodes
652
653
  treeStore: e.treeStore,
653
654
  currentNodeStore: x,
@@ -663,11 +664,11 @@ const z = ht("experience-instance"), Ht = it(
663
664
  };
664
665
  }
665
666
  );
666
- function jt(t) {
667
- return st(Ht, t);
667
+ function Wt(t) {
668
+ return st(jt, t);
668
669
  }
669
670
  const Gt = it(({ client: t }) => {
670
- const e = z.store({}), r = B(), n = B(), s = B(), a = ot(e, {
671
+ const e = z.store({}), r = O(), n = O(), s = O(), a = ot(e, {
671
672
  register(u, S) {
672
673
  const v = [
673
674
  ...u[S.experienceId] ?? []
@@ -680,7 +681,7 @@ const Gt = it(({ client: t }) => {
680
681
  unregister(u, S) {
681
682
  var A;
682
683
  const v = S.experienceId, T = (A = u[v]) == null ? void 0 : A.filter(
683
- (_) => _ !== S
684
+ (F) => F !== S
684
685
  );
685
686
  return {
686
687
  ...u,
@@ -688,7 +689,7 @@ const Gt = it(({ client: t }) => {
688
689
  };
689
690
  }
690
691
  }), o = M(
691
- ({ experience: u, target: S }) => jt({ client: t, experience: u, target: S })
692
+ ({ experience: u, target: S }) => Wt({ client: t, experience: u, target: S })
692
693
  ), c = M((u) => {
693
694
  a.register(u);
694
695
  }), d = M(
@@ -721,11 +722,11 @@ const Gt = it(({ client: t }) => {
721
722
  );
722
723
  return;
723
724
  }
724
- const A = vt(T);
725
+ const A = Ot(T);
725
726
  try {
726
727
  v.render(A, S.component, t, u);
727
- } catch (_) {
728
- I("error", _);
728
+ } catch (F) {
729
+ I("error", F);
729
730
  }
730
731
  });
731
732
  m({
@@ -751,7 +752,7 @@ const Gt = it(({ client: t }) => {
751
752
  clock: n,
752
753
  target: k
753
754
  });
754
- function O(u, S) {
755
+ function $(u, S) {
755
756
  r({ experience: u, target: S });
756
757
  }
757
758
  const P = e.map((u) => Object.values(u).flat());
@@ -759,23 +760,23 @@ const Gt = it(({ client: t }) => {
759
760
  return e.map((S) => S[u] || [], { skipVoid: !1 });
760
761
  }
761
762
  return {
762
- spawn: O,
763
+ spawn: $,
763
764
  getByExperienceId: x,
764
765
  listStore: P
765
766
  };
766
767
  });
767
- function Yt(t) {
768
+ function Zt(t) {
768
769
  return st(Gt, t);
769
770
  }
770
771
  export {
771
772
  j as a,
772
- Yt as b,
773
- Jt as c,
774
- Xt as d,
773
+ Zt as b,
774
+ Qt as c,
775
+ zt as d,
775
776
  et as e,
776
- Ot as f,
777
- zt as g,
778
- jt as h,
777
+ Ft as f,
778
+ Jt as g,
779
+ Wt as h,
779
780
  At as i,
780
- Qt as t
781
+ Yt as t
781
782
  };
@@ -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;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"}
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;sBAwM5B,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 +1 @@
1
- {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/utils/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAGzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ7D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAMhE;AAED,wBAAgB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAa9C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,QAS1E;AAED,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;AAOtE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,EAAE,EACrD,YAAY,EAAE,MAAM,GACnB,CAAC,gBAAgB,GAAG;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,EAAE,CAqBpD;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,CAAC,gBAAgB,GAAG;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,EAAE,EAC3D,YAAY,EAAE,MAAM,iBAOrB;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAG1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,WAMzE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,WAMvE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,kBAMpD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,GAAG,QAAQ,EAC9B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,MAAM,eA+BrB"}
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/utils/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAGzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ7D;AAID,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAMhE;AAED,wBAAgB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAa9C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,QAS1E;AAED,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;AAOtE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,EAAE,EACrD,YAAY,EAAE,MAAM,GACnB,CAAC,gBAAgB,GAAG;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,EAAE,CAqBpD;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,CAAC,gBAAgB,GAAG;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,EAAE,EAC3D,YAAY,EAAE,MAAM,iBAOrB;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAG1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,WAMzE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,WAMvE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,kBAMpD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,GAAG,QAAQ,EAC9B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,MAAM,eA+BrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.1-dev.1764025609515",
3
+ "version": "0.0.1-dev.1764090824933",
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;