@picked/client 0.0.1-dev.1767836126674 → 0.0.1-dev.1767922288295

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var N=Object.defineProperty;var V=(t,e,r)=>e in t?N(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var h=(t,e,r)=>V(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),S=require("@withease/factories"),b=require("../experience-instance-Dn8Wxj2o.cjs"),F=require("../logger-BsmHUUw1.cjs"),w=require("../storage-YlR83AWP.cjs"),_=require("../id-BKIWbSTy.cjs"),q=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),U=f.createDomain("experience"),K=S.createFactory(({client:t,experience:e})=>{const r=U.store(e),n=f.createApi(r,{merge(c,m){return{...c,...m.experience}}}),i=r.map(c=>({name:c.name,decisionLogic:c.condition??c.decide,targetSelectors:c.targets,initializeOpenLogic:e.initializeOpen})),a=t.components.listStore.map(c=>c.find(m=>m.name===`experience:${e.id}`)||c.find(m=>m.name==="experience"),{skipVoid:!1}),s=r.map(c=>({steps:c.steps,nodes:c.nodes,edges:c.edges,conditionals:c.conditionals})),o=e.actions??[];return{id:e.id,configStore:i,treeStore:s,componentStore:a,actions:o,merge:n.merge}});function W(t){return S.invoke(K,t)}const H=S.createFactory(({client:t})=>{const e=U.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 c=W({client:t,experience:s});r.register(c)}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getById:a,listStore:i}});function G(t){return S.invoke(H,t)}const Y=(t,e)=>{e.register(t)},L=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=b.getTargetElements(r,e.id);n.forEach(({elements:a})=>a.forEach(s=>b.tagTargetElement(s,e.id))),b.createAppHosts(n,e.id).forEach(a=>{t.experienceInstances.spawn(e,a)})},$=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await J(t,e)&&L(t,e)}))},J=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return b.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&b.isRulesLogic(r)?await b.evaluateRuleLogic(t,r)===!0:!0},Q=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const a=r[n]??{};r[n]=Object.freeze({...a,...i})}},X=f.createDomain("component"),Z=S.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ee(t){return S.invoke(Z,t)}const te=S.createFactory(({client:t})=>{const e=X.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&F.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const m=ee({client:t,name:s,component:o});r.register(m)}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:a,listStore:i}});function re(t){return S.invoke(te,t)}const B=(t,e,r)=>{r.register(t,e)},ne=f.createDomain("framework"),se=S.createFactory(({client:t})=>{const e=ne.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&F.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:a,listStore:i}});function ie(t){return S.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ae=6e3,ce=w.createStorageKey("last_ping","global"),ue=t=>`${t}/api/v1/ping`,de=async t=>{try{const e=Date.now(),r=w.localStore.get(ce);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<ae)return!0;const i=ue(t.apiUrl),a={projectId:t.projectId,path:window.location.pathname},s=JSON.stringify(a),o={"Content-Type":"application/json"},c=document.getElementById("picked_script"),m=c==null?void 0:c.dataset.verceltoken;m&&(o["x-vercel-protection-bypass"]=m);const l=(await fetch(i,{method:"POST",headers:o,body:s})).ok;return l&&r.set(e),l}catch(e){return F.logger("error",e),!1}};function le(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 pe=f.createDomain("predicate"),ge=S.createFactory(({client:t})=>{const e=pe.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]&&F.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:o}))}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:a,listStore:i}});function fe(t){return S.invoke(ge,t)}const me=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),ye=S.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=f.createApi(e,{register(l,d){return{...l,[d.id]:d.feature}}});function i(l,d){e.getState()[l]&&F.logger("warn",`Feature '${l}' already registered. Registering again will override the previous registration.`);const p={id:l,feature:{...d,id:l}};n.register(Object.freeze({id:l,feature:p}))}const a=f.createEffect(async({id:l,key:d,storage:u="local"})=>{const p=w.createStorageKey(`feature:${l}:${d}`,"global"),g=(u==="session"?w.sessionStore:w.localStore).get(p).boolean();return g===null?null:{id:l,key:d,bucket:g,storage:u}}),s=f.createEffect(l=>{if(!l)return null;const d=w.createStorageKey(`feature:${l.id}:${l.key}`,"global");(l.storage==="session"?w.sessionStore:w.localStore).set(d,l.bucket)}),o=new Map,c=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:l,resolvedFeaturesStore:d},{id:u,decide:p,key:y})=>{const g=d.find(A=>A.id===u&&A.key===y);if(g)return g;const v=l[u];if(!v)throw new Error(`Feature with id '${u}' not found`);const E=o.get(`${u}:${y}`);if(E!==void 0){const A=await E;return{id:v.id,bucket:A,key:y,storage:v.feature.storage}}const R=p();o.set(`${u}:${y}`,R);const j=await R;return{id:v.id,bucket:j,key:y,storage:v.feature.storage}}});f.sample({clock:n.register,fn:l=>{const{id:d,feature:u}=l;return{id:d,key:u.feature.key,storage:u.feature.storage}},target:a}),f.sample({source:e,clock:c.doneData,fn:(l,d)=>{var v;const{id:u,bucket:p,storage:y}=d,g=(v=l[u])==null?void 0:v.feature.key;return g?{key:g,id:u,bucket:p,storage:y}:null},target:s});const m=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:l,resolvedFeaturesStore:d})=>Object.values(l).map(u=>{const p=d.find(y=>y.id===u.id&&y.key===u.feature.key);return p?{id:u.id,name:u.feature.name,key:u.feature.key,getBucket:()=>({id:u.id,bucket:p.bucket}),isResolved:!0}:{id:u.id,name:u.feature.name,key:u.feature.key,getBucket:async()=>await c(u.feature),isResolved:!1}}));f.sample({clock:c.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:l},{id:d,key:u})=>!l.some(y=>y.id===d&&y.key===u),fn:(l,d)=>d,target:t.eventBus.prepend(l=>({type:"feature_decide",feature:l}))}),f.sample({clock:[a.doneData,c.doneData],source:r,fn:(l,d)=>!d||l.some(p=>p.id===d.id&&p.key===d.key)?l:[...l,d],target:r});function I(l){return e.map(d=>d[l],{skipVoid:!1})}return{register:i,getByName:I,listStore:m}});function he(t){return S.invoke(ye,t)}const Se=(t,e,r)=>{r.register(t,e)},x=f.createDomain("history");function O(t,e){return{id:_.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ke=S.createFactory(()=>{const t=x.store({entries:[]}),e=x.event(),r=x.event(),n=x.event(),i=x.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(i,(s,o)=>o);function a(s,o){const c={lastStepIndex:-1,secondLastStepIndex:-1};for(let m=s.length-1;m>=0;m--){const I=s[m],l=I==null?void 0:I.node;if(!(!l||!b.isStepNode(l))&&!(o&&(I==null?void 0:I.experienceId)!==o))if(c.lastStepIndex===-1)c.lastStepIndex=m;else{c.secondLastStepIndex=m;break}}return c}return t.on(n,(s,o)=>{const{secondLastStepIndex:c}=a(s.entries,o.experienceId),m=c!==-1?s.entries.slice(0,c+1):s.entries;return{...s,entries:m}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(s=>s.entries)}});function ve(){return S.invoke(ke)}const we=()=>f.createEvent(),Ie=f.createDomain("field"),be=S.createFactory(()=>{const t=Ie.store({}),e=f.createApi(t,{register(o,c){return{...o,[c.field.id]:c.field}}});function r(o){e.register({field:o})}function n(o,c){const m=a(o).getState();if(!m)return;const I=Object.assign({},m,{...c});e.register({field:{...I}})}const i=t.map(o=>Object.values(o));function a(o){return t.map(c=>c[o]||null)}function s(o){return t.map(c=>Object.values(c).find(m=>m.name===o)||null)}return{register:r,update:n,getById:a,listStore:i,getByName:s}});function Fe(){return S.invoke(be)}const Ee=(t,e)=>{e.register(t)},je=f.createDomain("action"),xe=S.createFactory(()=>{const t=je.store({}),e=f.createApi(t,{register(a,s){return{...a,[s.name]:{name:s.name,action:s.action}}}});function r(a,s){e.register({name:a,action:s})}const n=t.map(a=>Object.values(a));function i(a){return t.map(s=>s[a],{skipVoid:!1})}return{register:r,getByName:i,listStore:n}});function Re(){return S.invoke(xe)}const Ae=(t,e,r)=>{r.register(t,e)};function z(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Pe=f.createDomain("response"),De=S.createFactory(({client:t})=>{const e=Pe.store({}),r=f.createEvent(),n=f.createEvent(),i=f.createApi(e,{register(d,u){return{...d,[u.fieldId]:u.response}},registerBatch(d,u){return{...d,...u}},clear(d,u){const{[u]:p,...y}=d;return y},clearAll(){return{}}});function a(d,u){i.register({fieldId:d,response:u})}async function s(d){const u=[];return await Promise.allSettled(Object.entries(d).map(async([p,y])=>{let g=y;const v=t.fields.getById(p).getState();if(!v){u.push({fieldId:p,userMessage:`Field '${p}' not found`,systemMessage:`No field with ID '${p}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:g});return}if(v.multiple&&(typeof g=="string"||typeof g=="number"||typeof g=="boolean")&&(g=[g]),v.validation&&!q.isEmpty(v.validation)&&!z(g)){const E=await b.evaluateRuleLogic(t,v.validation,{$input:g});if(typeof E=="string"){u.push({fieldId:p,userMessage:E,systemMessage:`Field validation resulted in an error: ${E}.`,value:g});return}if(E===!1){u.push({fieldId:p,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:g});return}}if(v.required&&z(g)){u.push({fieldId:p,userMessage:"This field is required",systemMessage:"Field is required.",value:g});return}if(!v.multiple&&Array.isArray(g)&&g.length>1){u.push({fieldId:p,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:g});return}if(v.options){const E=v.options.map(j=>j.value),R=Array.isArray(g)?g:[g];Array.isArray(g)&&(R.every(j=>E.includes(j))||u.push({fieldId:p,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${E.join(", ")}`,value:g}))}})),{responsesToCommit:d,validationErrors:u}}async function o(d){const{responsesToCommit:u,validationErrors:p}=await s(d);return p.length?{errors:p}:(i.registerBatch(u),{errors:[]})}const c=e.map(d=>d),m=e.map(d=>Object.keys(d).map(p=>({fieldId:p,value:d[p]})));function I(d){const u=t.fields.getById(d),p=e.map(y=>y[d]||null);return f.combine({f:u,r:p},({f:y,r:g})=>g||(y!=null&&y.defaultValue?y.defaultValue:null))}function l(d){const u=t.fields.getByName(d);return f.combine({f:u,s:e},({f:p,s:y})=>{const g=p&&y[p.id]||null;return g||(p!=null&&p.defaultValue?p.defaultValue:null)})}return f.sample({clock:r,target:i.clearAll}),f.sample({clock:n,target:i.clear}),{register:a,clearAll:r,clear:n,commit:o,getResponsesToCommit:s,listStore:m,getAllStore:c,getByFieldId:I,getByFieldName:l}});function $e(t){return S.invoke(De,t)}const Be=()=>"0.0.1-dev.1767836126674";function Ce(){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 Oe(){if(!k.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&r.add(i);for(const i of r){const a=i.replace("picked-","");e[a]=t.getAll(i)}const n=w.createStorageKey("s");if(r.size>0)w.sessionStore.set(n,e);else{const i=w.sessionStore.get(n);if(i)return i.json()||{}}return e}function ze(){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 Ue=w.createStorageKey("session","global"),Le=()=>{const t=w.localStore.get(Ue);let e;t.isSet()&&(e=t.json());const r=i=>t.set({id:i.id,isUser:i.isUser,identifiers:i.identifiers}),n={id:(e==null?void 0:e.id)??ze(),isUser:(e==null?void 0:e.isUser)??void 0,identifiers:(e==null?void 0:e.identifiers)??void 0,setIsUser(i){this.isUser=i,r(this)},setIdentifier(i,a){this.identifiers={...this.identifiers,[i]:a},r(this)},removeIdentifier(i){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([a])=>a!==i)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,r(this))}};return r(n),n},Me=()=>k.supportsLocalStorage()?Le():null;function M(){if(k.supportsWindow())return globalThis.window.pickedConfig}function Te(){if(!k.supportsWindow())return;const t=M(),e=t==null?void 0:t.organizationId,r=t==null?void 0:t.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function Ne(){if(!k.supportsDocument())return;const t=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!t)return;const e=t.dataset.organizationid||t.getAttribute("organization-id"),r=t.dataset.projectid||t.getAttribute("project-id");return e&&r?{organizationId:e,projectId:r}:void 0}function Ve(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=Te();if(n)return n;const i=Ne();if(i)return i;throw new Error(`organizationId and projectId are required. You can provide them via one of:
1
+ "use strict";var N=Object.defineProperty;var V=(t,e,r)=>e in t?N(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var h=(t,e,r)=>V(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),S=require("@withease/factories"),b=require("../experience-instance-DjjpHk0t.cjs"),F=require("../logger-BsmHUUw1.cjs"),w=require("../storage-YlR83AWP.cjs"),_=require("../id-BKIWbSTy.cjs"),q=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),U=f.createDomain("experience"),K=S.createFactory(({client:t,experience:e})=>{const r=U.store(e),n=f.createApi(r,{merge(c,m){return{...c,...m.experience}}}),i=r.map(c=>({name:c.name,decisionLogic:c.condition??c.decide,targetSelectors:c.targets,initializeOpenLogic:e.initializeOpen})),a=t.components.listStore.map(c=>c.find(m=>m.name===`experience:${e.id}`)||c.find(m=>m.name==="experience"),{skipVoid:!1}),s=r.map(c=>({steps:c.steps,nodes:c.nodes,edges:c.edges,conditionals:c.conditionals})),o=e.actions??[];return{id:e.id,configStore:i,treeStore:s,componentStore:a,actions:o,merge:n.merge}});function W(t){return S.invoke(K,t)}const H=S.createFactory(({client:t})=>{const e=U.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 c=W({client:t,experience:s});r.register(c)}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getById:a,listStore:i}});function G(t){return S.invoke(H,t)}const Y=(t,e)=>{e.register(t)},L=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=b.getTargetElements(r,e.id);n.forEach(({elements:a})=>a.forEach(s=>b.tagTargetElement(s,e.id))),b.createAppHosts(n,e.id).forEach(a=>{t.experienceInstances.spawn(e,a)})},$=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await J(t,e)&&L(t,e)}))},J=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return b.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&b.isRulesLogic(r)?await b.evaluateRuleLogic(t,r)===!0:!0},Q=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const a=r[n]??{};r[n]=Object.freeze({...a,...i})}},X=f.createDomain("component"),Z=S.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ee(t){return S.invoke(Z,t)}const te=S.createFactory(({client:t})=>{const e=X.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&F.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const m=ee({client:t,name:s,component:o});r.register(m)}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:a,listStore:i}});function re(t){return S.invoke(te,t)}const B=(t,e,r)=>{r.register(t,e)},ne=f.createDomain("framework"),se=S.createFactory(({client:t})=>{const e=ne.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&F.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:a,listStore:i}});function ie(t){return S.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ae=6e3,ce=w.createStorageKey("last_ping","global"),ue=t=>`${t}/api/v1/ping`,de=async t=>{try{const e=Date.now(),r=w.localStore.get(ce);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<ae)return!0;const i=ue(t.apiUrl),a={projectId:t.projectId,path:window.location.pathname},s=JSON.stringify(a),o={"Content-Type":"application/json"},c=document.getElementById("picked_script"),m=c==null?void 0:c.dataset.verceltoken;m&&(o["x-vercel-protection-bypass"]=m);const l=(await fetch(i,{method:"POST",headers:o,body:s})).ok;return l&&r.set(e),l}catch(e){return F.logger("error",e),!1}};function le(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 pe=f.createDomain("predicate"),ge=S.createFactory(({client:t})=>{const e=pe.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]&&F.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:o}))}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:a,listStore:i}});function fe(t){return S.invoke(ge,t)}const me=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),ye=S.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=f.createApi(e,{register(l,d){return{...l,[d.id]:d.feature}}});function i(l,d){e.getState()[l]&&F.logger("warn",`Feature '${l}' already registered. Registering again will override the previous registration.`);const p={id:l,feature:{...d,id:l}};n.register(Object.freeze({id:l,feature:p}))}const a=f.createEffect(async({id:l,key:d,storage:u="local"})=>{const p=w.createStorageKey(`feature:${l}:${d}`,"global"),g=(u==="session"?w.sessionStore:w.localStore).get(p).boolean();return g===null?null:{id:l,key:d,bucket:g,storage:u}}),s=f.createEffect(l=>{if(!l)return null;const d=w.createStorageKey(`feature:${l.id}:${l.key}`,"global");(l.storage==="session"?w.sessionStore:w.localStore).set(d,l.bucket)}),o=new Map,c=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:l,resolvedFeaturesStore:d},{id:u,decide:p,key:y})=>{const g=d.find(A=>A.id===u&&A.key===y);if(g)return g;const v=l[u];if(!v)throw new Error(`Feature with id '${u}' not found`);const E=o.get(`${u}:${y}`);if(E!==void 0){const A=await E;return{id:v.id,bucket:A,key:y,storage:v.feature.storage}}const R=p();o.set(`${u}:${y}`,R);const j=await R;return{id:v.id,bucket:j,key:y,storage:v.feature.storage}}});f.sample({clock:n.register,fn:l=>{const{id:d,feature:u}=l;return{id:d,key:u.feature.key,storage:u.feature.storage}},target:a}),f.sample({source:e,clock:c.doneData,fn:(l,d)=>{var v;const{id:u,bucket:p,storage:y}=d,g=(v=l[u])==null?void 0:v.feature.key;return g?{key:g,id:u,bucket:p,storage:y}:null},target:s});const m=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:l,resolvedFeaturesStore:d})=>Object.values(l).map(u=>{const p=d.find(y=>y.id===u.id&&y.key===u.feature.key);return p?{id:u.id,name:u.feature.name,key:u.feature.key,getBucket:()=>({id:u.id,bucket:p.bucket}),isResolved:!0}:{id:u.id,name:u.feature.name,key:u.feature.key,getBucket:async()=>await c(u.feature),isResolved:!1}}));f.sample({clock:c.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:l},{id:d,key:u})=>!l.some(y=>y.id===d&&y.key===u),fn:(l,d)=>d,target:t.eventBus.prepend(l=>({type:"feature_decide",feature:l}))}),f.sample({clock:[a.doneData,c.doneData],source:r,fn:(l,d)=>!d||l.some(p=>p.id===d.id&&p.key===d.key)?l:[...l,d],target:r});function I(l){return e.map(d=>d[l],{skipVoid:!1})}return{register:i,getByName:I,listStore:m}});function he(t){return S.invoke(ye,t)}const Se=(t,e,r)=>{r.register(t,e)},x=f.createDomain("history");function O(t,e){return{id:_.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ke=S.createFactory(()=>{const t=x.store({entries:[]}),e=x.event(),r=x.event(),n=x.event(),i=x.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(i,(s,o)=>o);function a(s,o){const c={lastStepIndex:-1,secondLastStepIndex:-1};for(let m=s.length-1;m>=0;m--){const I=s[m],l=I==null?void 0:I.node;if(!(!l||!b.isStepNode(l))&&!(o&&(I==null?void 0:I.experienceId)!==o))if(c.lastStepIndex===-1)c.lastStepIndex=m;else{c.secondLastStepIndex=m;break}}return c}return t.on(n,(s,o)=>{const{secondLastStepIndex:c}=a(s.entries,o.experienceId),m=c!==-1?s.entries.slice(0,c+1):s.entries;return{...s,entries:m}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(s=>s.entries)}});function ve(){return S.invoke(ke)}const we=()=>f.createEvent(),Ie=f.createDomain("field"),be=S.createFactory(()=>{const t=Ie.store({}),e=f.createApi(t,{register(o,c){return{...o,[c.field.id]:c.field}}});function r(o){e.register({field:o})}function n(o,c){const m=a(o).getState();if(!m)return;const I=Object.assign({},m,{...c});e.register({field:{...I}})}const i=t.map(o=>Object.values(o));function a(o){return t.map(c=>c[o]||null)}function s(o){return t.map(c=>Object.values(c).find(m=>m.name===o)||null)}return{register:r,update:n,getById:a,listStore:i,getByName:s}});function Fe(){return S.invoke(be)}const Ee=(t,e)=>{e.register(t)},je=f.createDomain("action"),xe=S.createFactory(()=>{const t=je.store({}),e=f.createApi(t,{register(a,s){return{...a,[s.name]:{name:s.name,action:s.action}}}});function r(a,s){e.register({name:a,action:s})}const n=t.map(a=>Object.values(a));function i(a){return t.map(s=>s[a],{skipVoid:!1})}return{register:r,getByName:i,listStore:n}});function Re(){return S.invoke(xe)}const Ae=(t,e,r)=>{r.register(t,e)};function z(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Pe=f.createDomain("response"),De=S.createFactory(({client:t})=>{const e=Pe.store({}),r=f.createEvent(),n=f.createEvent(),i=f.createApi(e,{register(d,u){return{...d,[u.fieldId]:u.response}},registerBatch(d,u){return{...d,...u}},clear(d,u){const{[u]:p,...y}=d;return y},clearAll(){return{}}});function a(d,u){i.register({fieldId:d,response:u})}async function s(d){const u=[];return await Promise.allSettled(Object.entries(d).map(async([p,y])=>{let g=y;const v=t.fields.getById(p).getState();if(!v){u.push({fieldId:p,userMessage:`Field '${p}' not found`,systemMessage:`No field with ID '${p}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:g});return}if(v.multiple&&(typeof g=="string"||typeof g=="number"||typeof g=="boolean")&&(g=[g]),v.validation&&!q.isEmpty(v.validation)&&!z(g)){const E=await b.evaluateRuleLogic(t,v.validation,{$input:g});if(typeof E=="string"){u.push({fieldId:p,userMessage:E,systemMessage:`Field validation resulted in an error: ${E}.`,value:g});return}if(E===!1){u.push({fieldId:p,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:g});return}}if(v.required&&z(g)){u.push({fieldId:p,userMessage:"This field is required",systemMessage:"Field is required.",value:g});return}if(!v.multiple&&Array.isArray(g)&&g.length>1){u.push({fieldId:p,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:g});return}if(v.options){const E=v.options.map(j=>j.value),R=Array.isArray(g)?g:[g];Array.isArray(g)&&(R.every(j=>E.includes(j))||u.push({fieldId:p,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${E.join(", ")}`,value:g}))}})),{responsesToCommit:d,validationErrors:u}}async function o(d){const{responsesToCommit:u,validationErrors:p}=await s(d);return p.length?{errors:p}:(i.registerBatch(u),{errors:[]})}const c=e.map(d=>d),m=e.map(d=>Object.keys(d).map(p=>({fieldId:p,value:d[p]})));function I(d){const u=t.fields.getById(d),p=e.map(y=>y[d]||null);return f.combine({f:u,r:p},({f:y,r:g})=>g||(y!=null&&y.defaultValue?y.defaultValue:null))}function l(d){const u=t.fields.getByName(d);return f.combine({f:u,s:e},({f:p,s:y})=>{const g=p&&y[p.id]||null;return g||(p!=null&&p.defaultValue?p.defaultValue:null)})}return f.sample({clock:r,target:i.clearAll}),f.sample({clock:n,target:i.clear}),{register:a,clearAll:r,clear:n,commit:o,getResponsesToCommit:s,listStore:m,getAllStore:c,getByFieldId:I,getByFieldName:l}});function $e(t){return S.invoke(De,t)}const Be=()=>"0.0.1-dev.1767922288295";function Ce(){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 Oe(){if(!k.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&r.add(i);for(const i of r){const a=i.replace("picked-","");e[a]=t.getAll(i)}const n=w.createStorageKey("s");if(r.size>0)w.sessionStore.set(n,e);else{const i=w.sessionStore.get(n);if(i)return i.json()||{}}return e}function ze(){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 Ue=w.createStorageKey("session","global"),Le=()=>{const t=w.localStore.get(Ue);let e;t.isSet()&&(e=t.json());const r=i=>t.set({id:i.id,isUser:i.isUser,identifiers:i.identifiers}),n={id:(e==null?void 0:e.id)??ze(),isUser:(e==null?void 0:e.isUser)??void 0,identifiers:(e==null?void 0:e.identifiers)??void 0,setIsUser(i){this.isUser=i,r(this)},setIdentifier(i,a){this.identifiers={...this.identifiers,[i]:a},r(this)},removeIdentifier(i){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([a])=>a!==i)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,r(this))}};return r(n),n},Me=()=>k.supportsLocalStorage()?Le():null;function M(){if(k.supportsWindow())return globalThis.window.pickedConfig}function Te(){if(!k.supportsWindow())return;const t=M(),e=t==null?void 0:t.organizationId,r=t==null?void 0:t.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function Ne(){if(!k.supportsDocument())return;const t=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!t)return;const e=t.dataset.organizationid||t.getAttribute("organization-id"),r=t.dataset.projectid||t.getAttribute("project-id");return e&&r?{organizationId:e,projectId:r}:void 0}function Ve(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=Te();if(n)return n;const i=Ne();if(i)return i;throw new Error(`organizationId and projectId are required. You can provide them via one of:
2
2
  (1) createClient({ organizationId, projectId }) options;
3
3
  (2) window.pickedConfig = { organizationId, projectId };
4
4
  (3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes data-organizationid/data-projectid (or organization-id/project-id) attributes.`)}function P(t){return t==null||t===""||Number.isNaN(t)}const _e={default:(t,e)=>P(t)?String(e??""):String(t),append:(t,e)=>e&&!P(t)?`${t} ${e}`:t,prepend:(t,e)=>e&&!P(t)?`${e} ${t}`:t,upper:t=>typeof t=="string"?t.toUpperCase():t,lower:t=>typeof t=="string"?t.toLowerCase():t,capitalize:t=>typeof t=="string"?t.charAt(0).toUpperCase()+t.slice(1):t,list:t=>{if(!t||typeof t!="object")return t;const e=new Intl.ListFormat("en",{style:"long",type:"conjunction"});if(Array.isArray(t))return e.format(t.map(String));if(t instanceof Map){const r=Array.from(t.entries()).map(([n,i])=>`${n}: ${i}`);return e.format(r)}return t instanceof Set?e.format(Array.from(t).map(String)):t}};function qe(t){return typeof t=="object"&&t!==null}function Ke(t,e){let r=e;for(const n of t.split("."))if(qe(r)&&n in r)r=r[n];else return;return typeof r=="function"?r():r}function We(t,e){const r=t.split("|").map(a=>a.trim()),n=r.shift()??"";let i=Ke(n,e);for(const a of r){const[s,...o]=a.split(":"),c=(s==null?void 0:s.trim())??"",m=o.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g,""),I=_e[c];I&&(i=I(i,m))}return P(i)?"":typeof i=="object"?JSON.stringify(i):String(i)}function He(t,e){let r="",n=0;for(;n<t.length;)if(t[n]==="{"&&t[n+1]==="{"){n+=2;let i="";for(;n<t.length;){if(t[n]==="}"&&t[n+1]==="}"){n+=2;break}i+=t[n++]}r+=We(i.trim(),e)}else r+=t[n++];return r}class D{constructor(e){h(this,"options");h(this,"isReady",!1);h(this,"project");h(this,"plugins",{});h(this,"eventBus",we());h(this,"organizationId");h(this,"projectId");h(this,"apiUrl");h(this,"session");h(this,"precondition");h(this,"condition");h(this,"searchParams",Oe());h(this,"history",ve());h(this,"components",re({client:this}));h(this,"experienceInstances",b.createExperienceInstanceIndex({client:this}));h(this,"experiences",G({client:this}));h(this,"frameworks",ie({client:this}));h(this,"predicates",fe({client:this}));h(this,"features",he({client:this}));h(this,"responses",$e({client:this}));h(this,"fields",Fe());h(this,"actions",Re());h(this,"renderString",(e,r)=>{const n=this.responses.listStore.getState().reduce((i,a)=>(i[a.fieldId]=a.value,i),{});return He(e,{...r,responses:n})});F.logger("info","Picked client initializing.");const{organizationId:r,projectId:n}=Ve(e);this.organizationId=r,this.projectId=n,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Ce(),this.session=Me(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:"load",version:Be()}),F.logger("info","Picked client initialized.")}start(){de(this),(async()=>{if(!k.supportsDocument())return;let r;typeof this.precondition>"u"?r=!0:typeof this.precondition=="boolean"?r=this.precondition:r=await b.evaluateRuleLogic(this,this.precondition)===!0;let n;r&&(this.condition===void 0?n=!0:typeof this.condition=="boolean"?n=this.condition:n=await b.evaluateRuleLogic(this,this.condition)===!0);const i=r&&n===!0;if(typeof n=="boolean"&&this.session){const a=n;this.session.setIsUser(a),this.eventBus({type:"user_decide",value:a})}this.eventBus({type:"initialize"}),document.body&&i&&$(this),await b.domInteractive(),i&&$(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){B(e,r,this.components)}registerPlugin(e){Q(this,e,this.plugins)}registerFeature(e,r){Se(e,r,this.features)}registerPredicate(e,r){me(e,r,this.predicates)}registerField(e){Ee(e,this.fields)}registerAction(e,r){Ae(e,r,this.actions)}registerExperience(e){e.component&&B(`experience:${e.id}`,e.component,this.components),Y(e,this.experiences)}getStateSnapshot(){return le(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){F.logger("warn",`Experience with id '${e}' not found.`);return}L(this,r)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(r=>{if(Array.isArray(r)){r.forEach(i=>{this.registerPlugin(i)});return}const n=typeof r=="function"?r():r;if(Array.isArray(n)){n.forEach(i=>this.registerPlugin(i));return}this.registerPlugin(n)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const i=typeof n=="function"?n():n;this.registerFeature(r,i)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,i]=r.split(":");if(!n||!i)return;let a=i;a==="true"&&(a=!0),a==="false"&&(a=!1),this.registerFeature(n,{key:`${a}`,name:n,decide:()=>a,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){F.logger("warn",`Predicate "${r}" is not a function.`);return}this.registerPredicate(r,n)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){F.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}}h(D,"logger",F.logger);function T(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Ge(t){return t.some(e=>e.condition||T(e))}async function Ye(t,e){return e.length===0||!Ge(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await b.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!T(n))return n;const s=(await Promise.all(n.options.map(async c=>c.condition?await b.evaluateRuleLogic(t,c.condition)?c:null:c))).filter(c=>c!==null);return s.length===n.options.length?n:s.length===0?null:{...n,options:s}}))).filter(n=>n!==null)}const Je=t=>{const e=new D(t);return k.bindClient(e),e};exports.evaluateRuleLogic=b.evaluateRuleLogic;exports.isPickedRoot=b.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=Je;exports.getPickedConfig=M;exports.getStepFields=Ye;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-Dn8Wxj2o.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-DjjpHk0t.cjs");function S(){let c,i;return{promise:new Promise((t,o)=>{c=t,i=o}),resolve:t=>c(t),reject:t=>i(t)}}function C(c,i){const{promise:f,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),u=r.createEvent(),p=r.createEvent(),g=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const x=n[d],E=e.componentStore.getState();if(E&&(x!=null&&x.isValidComponent(E.component)))return{rendered:await x.render(E.component,c,e),rendererIndex:d}}return null});a.on(l,(e,n)=>({...e,renderedExperiences:[...e.renderedExperiences,n],currentExperienceIndex:e.currentExperienceIndex+1})).on(p,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(u,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex<e.length&&!n.isComplete,fn:({experiences:e,state:n})=>({experience:e[n.currentExperienceIndex],availableRenderers:i,startRendererIndex:0}),target:m}),r.sample({clock:m.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:m.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:u});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:u,target:I}),o(),f}exports.render=C;
package/dist/esm/index.js CHANGED
@@ -3,8 +3,8 @@ var Q = (t, e, r) => e in t ? J(t, e, { enumerable: !0, configurable: !0, writab
3
3
  var h = (t, e, r) => Q(t, typeof e != "symbol" ? e + "" : e, r);
4
4
  import { createDomain as b, createApi as F, createEffect as N, attach as X, sample as x, combine as z, createEvent as D } from "effector";
5
5
  import { createFactory as w, invoke as I } from "@withease/factories";
6
- import { g as H, t as Z, c as ee, i as te, e as j, a as re, b as ne, d as se } from "../experience-instance-Du9HFg3P.js";
7
- import { f as Pt } from "../experience-instance-Du9HFg3P.js";
6
+ import { g as H, t as Z, c as ee, i as te, e as j, a as re, b as ne, d as se } from "../experience-instance-C4INDX6a.js";
7
+ import { f as Pt } from "../experience-instance-C4INDX6a.js";
8
8
  import { l as k } from "../logger-C9a75KZn.js";
9
9
  import { c as A, l as O, s as C } from "../storage-BLmAhfhl.js";
10
10
  import { a as Rt } from "../storage-BLmAhfhl.js";
@@ -642,7 +642,7 @@ const Ye = b("response"), Je = w(({ client: t }) => {
642
642
  function Qe(t) {
643
643
  return I(Je, t);
644
644
  }
645
- const Xe = () => "0.0.1-dev.1767836126674";
645
+ const Xe = () => "0.0.1-dev.1767922288295";
646
646
  function Ze() {
647
647
  if (U()) {
648
648
  const t = [
@@ -1,5 +1,5 @@
1
1
  import { createEvent as i, createStore as v, createEffect as C, sample as n, attach as S } from "effector";
2
- import { h as F } from "../../experience-instance-Du9HFg3P.js";
2
+ import { h as F } from "../../experience-instance-C4INDX6a.js";
3
3
  function R() {
4
4
  let c, p;
5
5
  return {
@@ -1,4 +1,4 @@
1
- import { createDomain as ht, createEvent as O, 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";
@@ -112,21 +112,9 @@ const Et = {
112
112
  const n = r.filter(H);
113
113
  return e.filter(H).length - n.length >= g(t) ? [] : n;
114
114
  },
115
- /**
116
- * Invoke operator - executes a function with optional arguments
117
- *
118
- * Object format (no arguments):
119
- * { "invoke": { "var": "functionName" } }
120
- *
121
- * Array format (with arguments):
122
- * { "invoke": [{ "var": "functionName" }, arg1, arg2, ...] }
123
- *
124
- * Arguments are evaluated as JSONLogic expressions before being passed to the function.
125
- */
126
115
  // eslint-disable-next-line sonarjs/function-return-type
127
- invoke(...t) {
128
- const [e, ...r] = t;
129
- return typeof e != "function" ? null : Reflect.apply(e, null, r);
116
+ invoke(t) {
117
+ return typeof t != "function" ? null : t();
130
118
  },
131
119
  regexp_matches(t, e) {
132
120
  let r = t, n = "";
@@ -177,8 +165,8 @@ async function p(t, e) {
177
165
  const o = await p(n[0], e);
178
166
  return N(o) ? (await Promise.all(
179
167
  o.map(async (d) => {
180
- const S = await B(await p(n[1], d));
181
- return { item: d, shouldInclude: S };
168
+ const y = await B(await p(n[1], d));
169
+ return { item: d, shouldInclude: y };
182
170
  })
183
171
  )).filter(({ shouldInclude: d }) => d).map(({ item: d }) => d) : [];
184
172
  }
@@ -187,10 +175,10 @@ async function p(t, e) {
187
175
  if (!N(o))
188
176
  return n.length > 2 ? await p(n[2], e) : null;
189
177
  const c = n[1];
190
- let S = n.length > 2 ? await p(n[2], e) : null;
178
+ let y = n.length > 2 ? await p(n[2], e) : null;
191
179
  for (const k of o)
192
- S = await p(c, { current: k, accumulator: S });
193
- return S;
180
+ y = await p(c, { current: k, accumulator: y });
181
+ return y;
194
182
  }
195
183
  case "all": {
196
184
  const o = await p(n[0], e);
@@ -236,12 +224,12 @@ function At(t) {
236
224
  async function et(t, e, r) {
237
225
  const n = t.getStateSnapshot(), s = t.predicates.listStore.getState().reduce((c, d) => ({
238
226
  ...c,
239
- [d.name]: (...S) => d.predicate({ ...n, args: S })
227
+ [d.name]: () => d.predicate(n)
240
228
  }), {}), a = t.features.listStore.getState().reduce((c, d) => ({
241
229
  ...c,
242
230
  [d.id]: async () => {
243
- const { bucket: S } = await d.getBucket();
244
- return S;
231
+ const { bucket: y } = await d.getBucket();
232
+ return y;
245
233
  }
246
234
  }), {}), o = {
247
235
  ...r,
@@ -288,18 +276,18 @@ function Bt(t, e) {
288
276
  });
289
277
  r.observe(document.body, { childList: !0, subtree: !0 });
290
278
  }
291
- const G = "picked-root", K = "picked-target", Ft = "picked-root";
279
+ const G = "picked-root", K = "picked-target", _t = "picked-root";
292
280
  function Jt(t, e) {
293
281
  return [
294
282
  ...t,
295
283
  // Target and replace picked-root web components
296
284
  {
297
- selector: `${Ft}[experience-id="${e}"]`,
285
+ selector: `${_t}[experience-id="${e}"]`,
298
286
  placement: "replace"
299
287
  }
300
288
  ].flatMap((n) => {
301
289
  const s = bt(n.selector).filter(
302
- (a) => !_t(a, e) && !$t(a, e)
290
+ (a) => !$t(a, e) && !Ft(a, e)
303
291
  );
304
292
  return {
305
293
  ...n,
@@ -313,10 +301,10 @@ function Qt(t, e) {
313
301
  function Yt(t, e) {
314
302
  t.classList.add(K), t.classList.add(`${K}-${e}`);
315
303
  }
316
- function _t(t, e) {
304
+ function $t(t, e) {
317
305
  return e ? t.classList.contains(`${K}-${e}`) : t.classList.contains(`${K}`);
318
306
  }
319
- function $t(t, e) {
307
+ function Ft(t, e) {
320
308
  return e ? t.classList.contains(`${G}-${e}`) : t.classList.contains(G);
321
309
  }
322
310
  function Mt(t) {
@@ -368,41 +356,41 @@ function rt(t) {
368
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) => {
369
357
  const c = t.find((d) => d.id === o.destinationNodeId);
370
358
  return c ? ut(t, e, c, !1, s) : [];
371
- })), Rt = (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()) => {
372
360
  if (s.has(r.id)) return [-1, -1];
373
361
  s.add(r.id);
374
362
  const a = e.filter((d) => d.sourceNodeId === r.id);
375
363
  if (a.length === 0) return [0, 0];
376
364
  let o = 1 / 0, c = -1 / 0;
377
365
  for (const d of a) {
378
- const S = t.find((R) => R.id === d.destinationNodeId);
379
- if (!S) continue;
380
- const [k, _] = ft(
366
+ const y = t.find((P) => P.id === d.destinationNodeId);
367
+ if (!y) continue;
368
+ const [k, $] = ft(
381
369
  t,
382
370
  e,
383
- S,
371
+ y,
384
372
  !1,
385
373
  new Set(s)
386
374
  );
387
- k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, _ + 1));
375
+ k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, $ + 1));
388
376
  }
389
377
  return o === 1 / 0 ? [-1, -1] : [o, c];
390
- }, 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()) => {
391
379
  if (n.has(r.id)) return [-1, -1];
392
380
  if (n.add(r.id), r.type === "origin") return [0, 0];
393
381
  const s = e.filter((c) => c.destinationNodeId === r.id);
394
382
  if (s.length === 0) return [-1, -1];
395
383
  let a = 1 / 0, o = -1 / 0;
396
384
  for (const c of s) {
397
- const d = t.find((_) => _.id === c.sourceNodeId);
385
+ const d = t.find(($) => $.id === c.sourceNodeId);
398
386
  if (!d) continue;
399
- const [S, k] = lt(
387
+ const [y, k] = lt(
400
388
  t,
401
389
  e,
402
390
  d,
403
391
  new Set(n)
404
392
  );
405
- S !== -1 && (a = Math.min(a, S + 1), o = Math.max(o, k + 1));
393
+ y !== -1 && (a = Math.min(a, y + 1), o = Math.max(o, k + 1));
406
394
  }
407
395
  return a === 1 / 0 ? [-1, -1] : [a, o];
408
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) => {
@@ -426,17 +414,17 @@ const z = ht("experience-instance"), jt = it(
426
414
  experience: e,
427
415
  target: r
428
416
  }) => {
429
- const n = O(), s = O(), a = O(), o = O(), c = O(), d = O(), S = e.componentStore, k = z.store("transitioning"), _ = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), R = _.map((i) => i.filter((f) => j(f.node))), x = _.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) => {
430
418
  var f;
431
419
  return ((f = i[i.length - 1]) == null ? void 0 : f.node) || null;
432
420
  }), u = C(
433
421
  e.treeStore,
434
422
  x,
435
423
  ({ steps: i }, f) => i.find((l) => f && j(f) && l.id === f.stepId) || null
436
- ), h = C(
424
+ ), S = C(
437
425
  e.treeStore,
438
426
  x,
439
- ({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : []
427
+ ({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : []
440
428
  ), v = C(
441
429
  e.treeStore,
442
430
  x,
@@ -444,31 +432,31 @@ const z = ht("experience-instance"), jt = it(
444
432
  ), T = C(
445
433
  e.treeStore,
446
434
  x,
447
- ({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : [-1, -1]
448
- ), 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, {
449
437
  open: () => !0,
450
438
  close: () => !1,
451
439
  toggle: (i) => !i,
452
440
  set: (i, f) => f
453
441
  }), pt = M(async () => {
454
442
  t.history.back({ experienceId: e.id });
455
- }), gt = F({
443
+ }), gt = _({
456
444
  source: e.treeStore,
457
445
  effect: async (i, f) => {
458
446
  const l = i.nodes.find((w) => j(w) && w.stepId === f);
459
447
  l && t.history.push({ experienceId: e.id, node: l });
460
448
  }
461
- }), J = F({
449
+ }), J = _({
462
450
  source: x,
463
451
  effect: (i) => {
464
452
  }
465
- }), U = F({
453
+ }), U = _({
466
454
  source: e.treeStore,
467
455
  effect: async ({ nodes: i }) => dt(i)
468
- }), V = F({
456
+ }), V = _({
469
457
  source: e.treeStore,
470
458
  effect: async ({ nodes: i, edges: f }, l) => X(l, i, f)
471
- }), q = F({
459
+ }), q = _({
472
460
  source: e.treeStore,
473
461
  effect: async ({ nodes: i, edges: f, conditionals: l }, w) => {
474
462
  if (!w)
@@ -476,10 +464,10 @@ const z = ht("experience-instance"), jt = it(
476
464
  const L = l.find((b) => b.id === w.conditionalId);
477
465
  if (!L)
478
466
  return;
479
- const E = w.id, y = await et(t, L.condition);
480
- return Ht(!!y, E, i, f);
467
+ const E = w.id, h = await et(t, L.condition);
468
+ return Ht(!!h, E, i, f);
481
469
  }
482
- }), Q = F({
470
+ }), Q = _({
483
471
  source: e.treeStore,
484
472
  effect: async ({ nodes: i, edges: f }, l) => {
485
473
  if (!l || !rt(l))
@@ -493,16 +481,16 @@ const z = ht("experience-instance"), jt = it(
493
481
  if (!L) {
494
482
  I("warn", `Action '${w}' not registered on client`);
495
483
  const E = f.find(
496
- (y) => y.sourceNodeId === l.id && y.sourceNodeHandle === "false"
484
+ (h) => h.sourceNodeId === l.id && h.sourceNodeHandle === "false"
497
485
  );
498
- return E ? i.find((y) => y.id === E.destinationNodeId) : null;
486
+ return E ? i.find((h) => h.id === E.destinationNodeId) : null;
499
487
  }
500
488
  if (typeof L.action != "function") {
501
489
  I("warn", `Action '${w}' is not a function`);
502
490
  const E = f.find(
503
- (y) => y.sourceNodeId === l.id && y.sourceNodeHandle === "false"
491
+ (h) => h.sourceNodeId === l.id && h.sourceNodeHandle === "false"
504
492
  );
505
- return E ? i.find((y) => y.id === E.destinationNodeId) : null;
493
+ return E ? i.find((h) => h.id === E.destinationNodeId) : null;
506
494
  }
507
495
  try {
508
496
  I("info", `Executing action: ${w}`), await L.action();
@@ -511,31 +499,31 @@ const z = ht("experience-instance"), jt = it(
511
499
  );
512
500
  if (!E)
513
501
  return I("warn", `No 'true' edge found for action node ${l.id}`), null;
514
- const y = i.find((b) => b.id === E.destinationNodeId);
515
- return I("info", `Action '${w}' succeeded, moving to node ${y == null ? void 0 : y.id}`), y || null;
502
+ const h = i.find((b) => b.id === E.destinationNodeId);
503
+ return I("info", `Action '${w}' succeeded, moving to node ${h == null ? void 0 : h.id}`), h || null;
516
504
  } catch (E) {
517
505
  I("warn", `Action '${w}' failed:`, E);
518
- const y = f.find(
506
+ const h = f.find(
519
507
  (W) => W.sourceNodeId === l.id && W.sourceNodeHandle === "false"
520
508
  );
521
- if (!y)
509
+ if (!h)
522
510
  return I("warn", `No 'false' edge found for action node ${l.id}`), null;
523
- const b = i.find((W) => W.id === y.destinationNodeId);
511
+ const b = i.find((W) => W.id === h.destinationNodeId);
524
512
  return I("info", `Action '${w}' failed, moving to node ${b == null ? void 0 : b.id}`), b || null;
525
513
  }
526
514
  }
527
515
  }), mt = M((i) => {
528
516
  if (i)
529
517
  return t.launchExperienceById(i.experienceId);
530
- }), Y = F({
518
+ }), Y = _({
531
519
  source: [x, e.treeStore],
532
520
  effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
533
- }), P = F({
521
+ }), R = _({
534
522
  source: [x, e.treeStore],
535
523
  effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
536
524
  }), St = M((i) => {
537
525
  t.history.push({ experienceId: e.id, node: i });
538
- }), Z = F({
526
+ }), Z = _({
539
527
  source: e.configStore,
540
528
  effect: async ({ initializeOpenLogic: i }) => At(i) ? !!await et(t, i) : i ?? !1
541
529
  });
@@ -556,7 +544,7 @@ const z = ht("experience-instance"), jt = it(
556
544
  q.doneData,
557
545
  V.doneData,
558
546
  U.doneData,
559
- P.doneData,
547
+ R.doneData,
560
548
  Y.doneData,
561
549
  Q.doneData
562
550
  ],
@@ -564,7 +552,7 @@ const z = ht("experience-instance"), jt = it(
564
552
  target: St
565
553
  }), m({
566
554
  clock: s,
567
- target: P
555
+ target: R
568
556
  }), m({
569
557
  clock: s,
570
558
  source: u,
@@ -575,7 +563,7 @@ const z = ht("experience-instance"), jt = it(
575
563
  experience: e
576
564
  }))
577
565
  }), m({
578
- clock: P.done,
566
+ clock: R.done,
579
567
  source: u,
580
568
  filter: Boolean,
581
569
  target: t.eventBus.prepend((i) => ({
@@ -584,7 +572,7 @@ const z = ht("experience-instance"), jt = it(
584
572
  experience: e
585
573
  }))
586
574
  }), m({
587
- clock: P.fail,
575
+ clock: R.fail,
588
576
  source: u,
589
577
  filter: Boolean,
590
578
  target: t.eventBus.prepend((i) => ({
@@ -600,7 +588,7 @@ const z = ht("experience-instance"), jt = it(
600
588
  q.pending,
601
589
  V.pending,
602
590
  U.pending,
603
- P.pending
591
+ R.pending
604
592
  ]),
605
593
  fn: (i) => i.some(Boolean) ? "transitioning" : "ready",
606
594
  target: k
@@ -652,27 +640,27 @@ const z = ht("experience-instance"), jt = it(
652
640
  experienceId: e.id,
653
641
  configStore: e.configStore,
654
642
  target: r,
655
- componentStore: S,
643
+ componentStore: y,
656
644
  // state
657
645
  stateStore: k,
658
646
  // open close
659
647
  isOpenStore: A,
660
- open: $.open,
661
- close: $.close,
662
- toggleOpen: $.toggle,
663
- setOpen: $.set,
648
+ open: F.open,
649
+ close: F.close,
650
+ toggleOpen: F.toggle,
651
+ setOpen: F.set,
664
652
  // nodes
665
653
  treeStore: e.treeStore,
666
654
  currentNodeStore: x,
667
655
  currentStepStore: u,
668
- nextReachableStepNodesStore: h,
656
+ nextReachableStepNodesStore: S,
669
657
  stepsToOriginStore: v,
670
658
  stepsToLeafStore: T,
671
659
  // history
672
660
  goToNextStep: s,
673
661
  goToPreviousStep: a,
674
662
  goToStepById: o,
675
- stepsHistoryStore: R
663
+ stepsHistoryStore: P
676
664
  };
677
665
  }
678
666
  );
@@ -681,19 +669,19 @@ function Wt(t) {
681
669
  }
682
670
  const Gt = it(({ client: t }) => {
683
671
  const e = z.store({}), r = O(), n = O(), s = O(), a = ot(e, {
684
- register(u, h) {
672
+ register(u, S) {
685
673
  const v = [
686
- ...u[h.experienceId] ?? []
674
+ ...u[S.experienceId] ?? []
687
675
  ];
688
- return v.push(h), {
676
+ return v.push(S), {
689
677
  ...u,
690
- [h.experienceId]: v
678
+ [S.experienceId]: v
691
679
  };
692
680
  },
693
- unregister(u, h) {
681
+ unregister(u, S) {
694
682
  var A;
695
- const v = h.experienceId, T = (A = u[v]) == null ? void 0 : A.filter(
696
- ($) => $ !== h
683
+ const v = S.experienceId, T = (A = u[v]) == null ? void 0 : A.filter(
684
+ (F) => F !== S
697
685
  );
698
686
  return {
699
687
  ...u,
@@ -701,7 +689,7 @@ const Gt = it(({ client: t }) => {
701
689
  };
702
690
  }
703
691
  }), o = M(
704
- ({ experience: u, target: h }) => Wt({ client: t, experience: u, target: h })
692
+ ({ experience: u, target: S }) => Wt({ client: t, experience: u, target: S })
705
693
  ), c = M((u) => {
706
694
  a.register(u);
707
695
  }), d = M(
@@ -710,19 +698,19 @@ const Gt = it(({ client: t }) => {
710
698
  s(u);
711
699
  });
712
700
  }
713
- ), S = M((u) => {
701
+ ), y = M((u) => {
714
702
  a.unregister(u);
715
703
  }), k = M((u) => {
716
- const h = u.componentStore.getState();
717
- if (!h) {
704
+ const S = u.componentStore.getState();
705
+ if (!S) {
718
706
  I("warn", "No app component registered. Skipping init.");
719
707
  return;
720
708
  }
721
- const v = h.frameworkStore.getState();
709
+ const v = S.frameworkStore.getState();
722
710
  if (!v) {
723
711
  I(
724
712
  "error",
725
- `No framework registered for component '${h.name}'. Skipping rendering.`
713
+ `No framework registered for component '${S.name}'. Skipping rendering.`
726
714
  );
727
715
  return;
728
716
  }
@@ -736,9 +724,9 @@ const Gt = it(({ client: t }) => {
736
724
  }
737
725
  const A = Ot(T);
738
726
  try {
739
- v.render(A, h.component, t, u);
740
- } catch ($) {
741
- I("error", $);
727
+ v.render(A, S.component, t, u);
728
+ } catch (F) {
729
+ I("error", F);
742
730
  }
743
731
  });
744
732
  m({
@@ -746,7 +734,7 @@ const Gt = it(({ client: t }) => {
746
734
  target: o
747
735
  }), m({
748
736
  clock: s,
749
- target: S
737
+ target: y
750
738
  }), m({
751
739
  clock: o.doneData,
752
740
  target: [
@@ -764,17 +752,17 @@ const Gt = it(({ client: t }) => {
764
752
  clock: n,
765
753
  target: k
766
754
  });
767
- function _(u, h) {
768
- r({ experience: u, target: h });
755
+ function $(u, S) {
756
+ r({ experience: u, target: S });
769
757
  }
770
- const R = e.map((u) => Object.values(u).flat());
758
+ const P = e.map((u) => Object.values(u).flat());
771
759
  function x(u) {
772
- return e.map((h) => h[u] || [], { skipVoid: !1 });
760
+ return e.map((S) => S[u] || [], { skipVoid: !1 });
773
761
  }
774
762
  return {
775
- spawn: _,
763
+ spawn: $,
776
764
  getByExperienceId: x,
777
- listStore: R
765
+ listStore: P
778
766
  };
779
767
  });
780
768
  function Zt(t) {
@@ -786,7 +774,7 @@ export {
786
774
  Qt as c,
787
775
  zt as d,
788
776
  et as e,
789
- $t as f,
777
+ Ft as f,
790
778
  Jt as g,
791
779
  Wt as h,
792
780
  At as i,
@@ -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_initialize",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,8 +1,6 @@
1
1
  import { StateSnapshot } from '../../utils/state-snaphot';
2
2
  import { Picked } from '../../picked';
3
- export type Predicate = (snapshot: StateSnapshot & {
4
- args: unknown[];
5
- }) => boolean | Promise<boolean> | string | Promise<string> | string[] | Promise<string[]> | undefined;
3
+ export type Predicate = (snapshot: StateSnapshot) => boolean | Promise<boolean> | string | Promise<string> | string[] | Promise<string[]> | undefined;
6
4
  export type PredicatesStore = ReturnType<typeof createPredicateIndex>;
7
5
  export interface PredicateIndexItem {
8
6
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../../../src/entities/predicate/predicate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,MAAM,SAAS,GAAG,CACtB,QAAQ,EAAE,aAAa,GAAG;IAAE,IAAI,EAAE,OAAO,EAAE,CAAA;CAAE,KAE3C,OAAO,GACP,OAAO,CAAC,OAAO,CAAC,GAChB,MAAM,GACN,OAAO,CAAC,MAAM,CAAC,GACf,MAAM,EAAE,GACR,OAAO,CAAC,MAAM,EAAE,CAAC,GACjB,SAAS,CAAA;AAEb,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAErE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,SAAS,CAAA;CACrB;AAKD,QAAA,MAAM,2BAA2B,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;qBAoBvD,MAAM,aAAa,SAAS,KAAG,IAAI;sBAiBlC,MAAM;cAlCrB,MAAM;mBACD,SAAS;;;cADd,MAAM;mBACD,SAAS;;CA0CxB,CAAA;AAEF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAC9F,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAEhD;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,WAAW,SAAS,EAAE,YAAY,eAAe,SAE7F,CAAA"}
1
+ {"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../../../src/entities/predicate/predicate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,MAAM,SAAS,GAAG,CACtB,QAAQ,EAAE,aAAa,KAErB,OAAO,GACP,OAAO,CAAC,OAAO,CAAC,GAChB,MAAM,GACN,OAAO,CAAC,MAAM,CAAC,GACf,MAAM,EAAE,GACR,OAAO,CAAC,MAAM,EAAE,CAAC,GACjB,SAAS,CAAA;AAEb,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAErE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,SAAS,CAAA;CACrB;AAKD,QAAA,MAAM,2BAA2B,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;qBAoBvD,MAAM,aAAa,SAAS,KAAG,IAAI;sBAiBlC,MAAM;cAlCrB,MAAM;mBACD,SAAS;;;cADd,MAAM;mBACD,SAAS;;CA0CxB,CAAA;AAEF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAC9F,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAEhD;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,WAAW,SAAS,EAAE,YAAY,eAAe,SAE7F,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"logic-engine.d.ts","sourceRoot":"","sources":["../../src/logic-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAA;AAEpG,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,CAAC,MAAM,UAAU,CAAC,GAClB,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC,CAAA;AAE3B,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAA;CAC1B;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;AAE1C,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,GACT,SAAS,EAAE,GACX,cAAc,EAAE,CAAA;AAEpB,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,EAAE,CAAA;CACjD;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,OAAO,CAAA;AAC3E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAA;AACrF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,CAAA;AAC1D,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;AACzF,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,CAAA;AACpE,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAA;AAEzD,MAAM,MAAM,YAAY,GACpB;IACE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAA;CAC1B,GACD,UAAU,CAAA;AAqCd,MAAM,MAAM,SAAS,GAAG,CACtB,IAAI,EAAE,YAAY,EAClB,GAAG,IAAI,EAAE,UAAU,EAAE,KAClB,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAuMzC,wBAAsB,KAAK,CACzB,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,EAC3C,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,UAAU,CAAC,CAoJrB"}
1
+ {"version":3,"file":"logic-engine.d.ts","sourceRoot":"","sources":["../../src/logic-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAA;AAEpG,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,CAAC,MAAM,UAAU,CAAC,GAClB,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC,CAAA;AAE3B,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAA;CAC1B;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;AAE1C,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,GACT,SAAS,EAAE,GACX,cAAc,EAAE,CAAA;AAEpB,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,EAAE,CAAA;CACjD;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,OAAO,CAAA;AAC3E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAA;AACrF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,CAAA;AAC1D,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;AACzF,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,CAAA;AACpE,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAA;AAEzD,MAAM,MAAM,YAAY,GACpB;IACE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAA;CAC1B,GACD,UAAU,CAAA;AAqCd,MAAM,MAAM,SAAS,GAAG,CACtB,IAAI,EAAE,YAAY,EAClB,GAAG,IAAI,EAAE,UAAU,EAAE,KAClB,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAyLzC,wBAAsB,KAAK,CACzB,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,EAC3C,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,UAAU,CAAC,CAoJrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.1-dev.1767836126674",
3
+ "version": "0.0.1-dev.1767922288295",
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"),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){const[t,...r]=e;return typeof t!="function"?null:Reflect.apply(t,null,r)},regexp_matches(e,t){let r=e,n="";if(E(e)){const[c,o]=e;r=c,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(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 h=await O(await g(n[1],p));return{item:p,shouldInclude:h}}))).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 h=n.length>2?await g(n[2],t):null;for(const k of o)h=await g(u,{current:k,accumulator:h});return h}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]:(...h)=>p.predicate({...n,args:h})}),{}),c=e.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:h}=await p.getBucket();return h}}),{}),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=>Fe(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 Fe(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 Be(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 h=e.find(L=>L.id===p.destinationNodeId);if(!h)continue;const[k,F]=ie(e,t,h,!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]},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(F=>F.id===u.sourceNodeId);if(!p)continue;const[h,k]=ae(e,t,p,new Set(n));h!==-1&&(c=Math.min(c,h+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(),h=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),S=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),B=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,y=await V(e,$.condition);return Le(!!y,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(y=>y.sourceNodeId===d.id&&y.sourceNodeHandle==="false");return x?s.find(y=>y.id===x.destinationNodeId):null}if(typeof $.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=l.find(y=>y.sourceNodeId===d.id&&y.sourceNodeHandle==="false");return x?s.find(y=>y.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 y=s.find(b=>b.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${y==null?void 0:y.id}`),y||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const y=l.find(P=>P.sourceNodeId===d.id&&P.sourceNodeHandle==="false");if(!y)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const b=s.find(P=>P.id===y.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?Be(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:h,stateStore:k,isOpenStore:v,open:B.open,close:B.close,toggleOpen:B.toggle,setOpen:B.set,treeStore:t.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:S,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,S){const A=[...f[S.experienceId]??[]];return A.push(S),{...f,[S.experienceId]:A}},unregister(f,S){var v;const A=S.experienceId,_=(v=f[A])==null?void 0:v.filter(B=>B!==S);return{...f,[A]:_??[]}}}),o=i.createEffect(({experience:f,target:S})=>ue({client:e,experience:f,target:S})),u=i.createEffect(f=>{c.register(f)}),p=i.createEffect(f=>{f.target&&Ie(f.target,()=>{a(f)})}),h=i.createEffect(f=>{c.unregister(f)}),k=i.createEffect(f=>{const S=f.componentStore.getState();if(!S){N.logger("warn","No app component registered. Skipping init.");return}const A=S.frameworkStore.getState();if(!A){N.logger("error",`No framework registered for component '${S.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,S.component,e,f)}catch(B){N.logger("error",B)}});i.sample({clock:r,target:o}),i.sample({clock:a,target:h}),i.sample({clock:o.doneData,target:[u,p,n]}),i.sample({clock:o.doneData,target:e.eventBus.prepend(f=>({type:"experience_initialize",experienceInstance:f}))}),i.sample({clock:n,target:k});function F(f,S){r({experience:f,target:S})}const L=t.map(f=>Object.values(f).flat());function I(f){return t.map(S=>S[f]||[],{skipVoid:!1})}return{spawn:F,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;