@picked/client 0.0.1-dev.1784001148032 → 0.0.1-dev.1784003142683

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.
Files changed (27) hide show
  1. package/dist/{api-BJ8EHkg5.js → api-CsddE4DI.js} +1 -1
  2. package/dist/{api-B1wdTDNv.cjs → api-U2LgcKqF.cjs} +1 -1
  3. package/dist/cjs/index.js +1 -1
  4. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  5. package/dist/cjs/server/index.js +1 -1
  6. package/dist/docs/actions.mdx +16 -2
  7. package/dist/docs/sdk/actions.md +33 -3
  8. package/dist/esm/index.js +32 -28
  9. package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
  10. package/dist/esm/server/index.js +2 -2
  11. package/dist/experience-instance-BWL-yghq.cjs +1 -0
  12. package/dist/{experience-instance-M2kR3nTp.js → experience-instance-QSrdjfn6.js} +196 -168
  13. package/dist/{plugin-D3z3IXOb.cjs → plugin-CWvFEvt5.cjs} +1 -1
  14. package/dist/{plugin-B04iPuj_.js → plugin-CnCP2N-8.js} +1 -1
  15. package/dist/types/entities/action/action.d.ts +7 -1
  16. package/dist/types/entities/action/action.d.ts.map +1 -1
  17. package/dist/types/entities/experience-instance/experience-instance.d.ts +10 -0
  18. package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
  19. package/dist/types/entities/history/history.d.ts +20 -3
  20. package/dist/types/entities/history/history.d.ts.map +1 -1
  21. package/dist/types/lifecycle/condition-selection.d.ts.map +1 -1
  22. package/dist/types/picked.d.ts +9 -1
  23. package/dist/types/picked.d.ts.map +1 -1
  24. package/dist/types/utils/node-tree/get-next-node-from-action.d.ts +24 -0
  25. package/dist/types/utils/node-tree/get-next-node-from-action.d.ts.map +1 -0
  26. package/package.json +1 -1
  27. package/dist/experience-instance-BbSXoRrr.cjs +0 -1
@@ -8,7 +8,7 @@ function n(n, r) {
8
8
  }
9
9
  //#endregion
10
10
  //#region src/utils/version.ts
11
- var r = () => "0.0.1-dev.1784001148032", i = "v1";
11
+ var r = () => "0.0.1-dev.1784003142683", i = "v1";
12
12
  function a(e, t) {
13
13
  return new URL(`/api/${i}/${t}`, e).toString();
14
14
  }
@@ -1 +1 @@
1
- var e=`Picked-Client`,t=`Picked-Version`;function n(n,r){return{[e]:n,[t]:r}}var r=()=>`0.0.1-dev.1784001148032`,i=`v1`;function a(e,t){return new URL(`/api/${i}/${t}`,e).toString()}function o(e){return{...n(`sdk`,r()),...e}}async function s(e,t,n,r){let i=a(e,t);return fetch(i,{headers:o(n),signal:r})}async function c(e,t,n,r){let i=a(e,t);return fetch(i,{method:`POST`,headers:{"Content-Type":`application/json`,...o(r)},body:JSON.stringify(n)})}Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
1
+ var e=`Picked-Client`,t=`Picked-Version`;function n(n,r){return{[e]:n,[t]:r}}var r=()=>`0.0.1-dev.1784003142683`,i=`v1`;function a(e,t){return new URL(`/api/${i}/${t}`,e).toString()}function o(e){return{...n(`sdk`,r()),...e}}async function s(e,t,n,r){let i=a(e,t);return fetch(i,{headers:o(n),signal:r})}async function c(e,t,n,r){let i=a(e,t);return fetch(i,{method:`POST`,headers:{"Content-Type":`application/json`,...o(r)},body:JSON.stringify(n)})}Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
package/dist/cjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../object-CIkt7Fkr.cjs"),t=require("../rules-logic-CGZIYgAI.cjs"),n=require("../logger-CSTvAyyB.cjs"),r=require("../supports-DBzjGaWD.cjs"),i=require("../dom-CdxDV3e-.cjs"),a=require("../experience-instance-BbSXoRrr.cjs"),o=require("../storage-DUw9UJ2h.cjs"),s=require("../api-B1wdTDNv.cjs"),c=require("../id-Js-62re-.cjs");let l=require("effector"),u=require("@withease/factories");var d=(0,l.createDomain)(`experience`);function f(e,t,n){let r=new Set(t.filter(e=>e.elements.length>0).map(e=>e.selector));for(let t of e){if(t.placement!==`replace`||r.has(t.selector))continue;let e=i.i(t.selector);!e||e===n||`${t.selector}${e}${n}`}}var p=(0,u.createFactory)(({client:e,experience:n})=>{let r=d.store(n),o=(0,l.createApi)(r,{merge(e,t){return{...e,...t.experience}}}),s=r.map(e=>({name:e.name,decisionLogic:e.condition,targetSelectors:e.targets,initializeOpenLogic:e.initializeOpen})),c=(0,l.combine)(r,e.components.listStore,(e,t)=>(e.componentName?t.find(t=>t.name===e.componentName):void 0)||t.find(t=>t.name===`experience:${e.id}`)||t.find(e=>e.name===`experience`),{skipVoid:!1}),u=(0,l.combine)(r,e.steps.indexStore,e.conditions.indexStore,(e,t,n)=>{let r=e.nodes.filter(a.u).map(e=>t[e.stepId]).filter(e=>e!==void 0),i=e.nodes.filter(a.l).map(e=>n[e.conditionId]).filter(e=>e!==void 0);return{steps:r,nodes:e.nodes,edges:e.edges,conditions:i}}),p=n.actions??[],m,h=(0,l.attach)({source:s,effect:(t,r)=>{let a=i.a(t.targetSelectors,n.id);a.forEach(({elements:e})=>e.forEach(e=>i.c(e,n.id))),i.t(a,n.id,n.key).forEach(t=>{r?e.experienceInstances.spawn(m,t,r):e.experienceInstances.spawn(m,t)}),f(t.targetSelectors,a,n.id)}}),g=(0,l.attach)({source:(0,l.combine)({preconditionPassed:e.preconditionPassedStore,isUser:e.session.store.map(e=>e.isUser,{skipVoid:!1}),config:s}),effect:async({preconditionPassed:r,isUser:a,config:o})=>{if(!r||!a)return!1;let{decisionLogic:s,targetSelectors:c}=o;return c.length===0||i.a(c,n.id).length<1?!1:s===void 0?!0:t.n(s)?await t.t(e,s)===!0:!0}}),_=(0,l.createEffect)(async()=>{if(!e.contentLoader)return!0;try{await e.contentLoader({id:n.id,key:n.key})}catch{`${n.id}`}return!0}),v=(0,l.createEvent)(),y=(0,l.createEvent)(),b=d.createStore(void 0,{skipVoid:!1}).on(v,(e,t)=>t).on(y,(e,t)=>t);return(0,l.sample)({clock:v,target:g}),(0,l.sample)({clock:g.doneData,source:b,filter:(e,t)=>t,fn:e=>e,target:h}),(0,l.sample)({clock:g.doneData,filter:Boolean,target:_}),(0,l.sample)({clock:y,source:b,fn:e=>e,target:h}),(0,l.sample)({clock:y,target:_}),m={id:n.id,key:n.key,name:n.name,configStore:s,treeStore:u,componentStore:c,actions:p,merge:o.merge,initialiseFx:h,shouldInitialiseFx:g,initialiseRequested:v,initialiseDirectly:y,prepareExperienceContentFx:_},m});function m(e){return(0,u.invoke)(p,e)}var h=5e3;function g(e,t){return new Promise(n=>{let r=setTimeout(n,t);e.then(()=>{clearTimeout(r),n()})})}function _(e){return e.configStore.getState().targetSelectors.filter(e=>e.placement===`replace`).map(e=>e.selector)}function v(e){let t=new Map;for(let n of e)for(let e of _(n))t.set(e,(t.get(e)??0)+1);let n=[],r=[];for(let i of e)_(i).some(e=>(t.get(e)??0)>1)?n.push(i):r.push(i);return{serialised:n,parallel:r}}async function y(e){let t;try{let n=new Promise(n=>{t=e.initialiseFx.finally.watch(()=>n())});await e.shouldInitialiseFx()&&await g(n,h)}catch{`${e.id}`}finally{t?.()}}async function b(e){for(let t of e)await y(t)}var x=(0,u.createFactory)(({client:e})=>{let t=d.store({}),n=(0,l.createApi)(t,{register(e,t){return{...e,[t.id]:t}}}),r=(0,l.createEvent)(),i=(0,l.createEffect)(t=>{n.register(m({client:e,experience:t}))});(0,l.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]!==void 0,fn:(e,t)=>({existing:e[t.id],experience:t})}).watch(({existing:e,experience:t})=>{e?.merge({experience:t,strategy:`override`})}),(0,l.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]===void 0,fn:(e,t)=>t,target:i});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}function s(e){return t.map(t=>Object.values(t).find(t=>t.key===e)??t[e],{skipVoid:!1})}let c=(0,l.attach)({source:t,effect:(e,t)=>{let n=`key`in t?Object.values(e).find(e=>e.key===t.key):e[t.id];if(!n){`key`in t?`${t.key}`:`${t.id}`;return}let{options:r}=t;r?.bypassCondition?n.initialiseDirectly(r):n.initialiseRequested(r)}});return{register:r,get:o,getById:o,getByKey:s,launch:c,open:(0,l.attach)({source:{experiences:t,instances:e.experienceInstances.listStore},effect:async({experiences:e,instances:t},n)=>{let r=`key`in n?Object.values(e).find(e=>e.key===n.key):e[n.id],i=t.filter(e=>e.experienceId===r?.id);if(i.length>0){for(let e of i)e.open();return}await c(`key`in n?{key:n.key,options:{...n.options,initialiseOpen:!0}}:{id:n.id,options:{...n.options,initialiseOpen:!0}})}}),listStore:a,initialiseExperiencesFx:(0,l.attach)({source:a,effect:async e=>{let{serialised:t,parallel:n}=v(e);await Promise.all([b(t),...n.map(e=>y(e))])}})}});function S(e){return(0,u.invoke)(x,e)}var ee=async e=>{await e.experiences.initialiseExperiencesFx()};function C(e){return(0,l.createEffect)(async()=>{await e()})}var w=(e,t,n)=>{let r=t.name,i=t.setup(e);if(i){let e=n[r]??{};n[r]=Object.freeze({...e,...i})}},T=(0,l.createDomain)(`component`),E=(0,u.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function D(e){return(0,u.invoke)(E,e)}var O=(0,u.createFactory)(({client:e})=>{let t=T.store({}),r=(0,l.createApi)(t,{register(e,t){return{...e,[t.name]:t}}}),i=(0,l.createEvent)();(0,l.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Component '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:i,fn:({name:t,component:n})=>D({client:e,name:t,component:n}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function k(e){return(0,u.invoke)(O,e)}var A=(e,t,n)=>{n.register({name:e,component:t})},te=(0,l.createDomain)(`framework`),ne=(0,u.createFactory)(e=>{let t=te.store({}),r=(0,l.createApi)(t,{register(e,t){return{...e,[t.name]:t.framework}}}),i=(0,l.createEvent)();(0,l.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Framework '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:i,target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function re(e){return(0,u.invoke)(ne,e)}var ie=(e,t)=>{t.register({name:e.name,framework:e})},ae=(0,u.createFactory)(({client:e})=>{let t=`window`in globalThis,n={location:t?globalThis.location:void 0,document:t?globalThis.document:void 0,sessionStorage:t?globalThis.sessionStorage:void 0,localStorage:t?globalThis.localStorage:void 0};return(0,l.combine)(e.responses.listStore,e.fields.listStore,(t,r)=>Object.freeze({client:e,responses:t,fields:r,...n}))});function oe(e){return(0,u.invoke)(ae,e)}function se(e){return typeof e==`number`&&!isNaN(e)}function j(e){return typeof e==`string`}function M(e){return Array.isArray(e)}function N(e){return e instanceof Promise}function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.keys(e).length===1}function F(e){if(se(e))return e;let t=parseFloat(`${e}`);return isNaN(t)?0:t}function I(e){return`${e}`}var ce={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>F(e)>F(t),">=":(e,t)=>F(e)>=F(t),"<":(e,t,n)=>{let r=F(e),i=F(t);if(n===void 0)return r<i;let a=F(n);return r<i&&i<a},"<=":(e,t,n)=>{let r=F(e),i=F(t);if(n===void 0)return r<=i;let a=F(n);return r<=i&&i<=a},"!!":async e=>await R(e),"!":async e=>!await R(e),"%":(e,t)=>F(e)%F(t),log:e=>(console.log(e),e),in:(e,t)=>t?j(t)?t.indexOf(I(e))!==-1:M(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(I).join(``),substr:(e,t,n)=>{let r=I(e),i=F(t);if(n===void 0)return r.substr(i);let a=F(n);if(a<0){let e=r.substr(i);return e.substr(0,e.length+a)}return r.substr(i,a)},"+":(...e)=>e.reduce((e,t)=>F(e)+F(t),0),"*":(...e)=>e.reduce((e,t)=>F(e)*F(t),1),"-":(e,t)=>{let n=F(e);return t===void 0?-n:n-F(t)},"/":(e,t)=>F(e)/F(t),min:(...e)=>Math.min(...e.map(F)),max:(...e)=>Math.max(...e.map(F)),merge:(...e)=>e.reduce((e,t)=>M(t)?e.concat(t):e.concat([t]),[]),var(e,t){let n=arguments.length>1?t:null;if(e===``||e===`.`||e==null)return this;if(typeof e==`number`&&Array.isArray(this))return e>=0&&e<this.length?this[e]:n;let r=I(e);if(r===``||r===`.`)return this;let i=r.split(`.`),a=this;for(let e of i){if(a==null)return n;if(Array.isArray(a)){let t=parseInt(e,10);a=isNaN(t)?a[e]:a[t]}else a=a[e]}return a===void 0?n:a},async missing(...e){let t=M(e[0])?e[0]:e,n=[];for(let e of t){let t=await L({var:e},this);(t===null||t===``)&&n.push(`${e}`)}return n},async missing_some(e,t){let n=await L({missing:t},this);if(!M(n)||!M(t))return[];let r=n.filter(j);return t.filter(j).length-r.length>=F(e)?[]:r},invoke(...e){let[t,...n]=e;return typeof t==`function`?Reflect.apply(t,null,n):null},startsWith:(e,t)=>j(e)&&j(t)&&e.startsWith(t),endsWith:(e,t)=>j(e)&&j(t)&&e.endsWith(t),regexp_matches(e,t){let n=e,r=``;if(M(e)){let[t,i]=e;n=t,r=i}return!j(n)||!j(r)?!1:new RegExp(n,r).test(I(t))},throw(e){throw Error(I(e))}};async function L(e,t){if(!e)return e;if(N(e))return L(await e,t);if(M(e))return Promise.all(e.map(e=>L(e,t)));if(!P(e))return e;let n=le(e),r=n?e[n]??[]:[];switch(M(r)||(r=[r]),n){case`if`:case`?:`:for(let e=0;e<r.length-1;e+=2)if(await R(await L(r[e],t)))return L(r[e+1],t);return r.length%2==1?L(r[r.length-1],t):null;case`and`:{let e=null;for(let n of r)if(e=await L(n,t),!await R(e))return e;return e}case`or`:{let e=null;for(let n of r)if(e=await L(n,t),await R(e))return e;return e}case`map`:{let e=await L(r[0],t);return M(e)?await Promise.all(e.map(e=>L(r[1],e))):[]}case`filter`:{let e=await L(r[0],t);return M(e)?(await Promise.all(e.map(async e=>({item:e,shouldInclude:await R(await L(r[1],e))})))).filter(({shouldInclude:e})=>e).map(({item:e})=>e):[]}case`reduce`:{let e=await L(r[0],t);if(!M(e))return r.length>2?await L(r[2],t):null;let n=r[1],i=r.length>2?await L(r[2],t):null;for(let t of e)i=await L(n,{current:t,accumulator:i});return i}case`all`:{let e=await L(r[0],t);if(!M(e)||e.length===0)return!1;for(let t of e)if(!await R(await L(r[1],t)))return!1;return!0}case`some`:{let e=await L(r[0],t);if(!M(e))return!1;for(let t of e)if(await R(await L(r[1],t)))return!0;return!1}case`none`:{let e=await L(r[0],t);if(!M(e))return!0;for(let t of e)if(await R(await L(r[1],t)))return!1;return!0}case`catch`:try{return await L(r[0],t)}catch(e){return P(e)?await L(e,t):r[1]?await L(r[1],e):e instanceof Error?e.message:e}}let i=await Promise.all(r.map(e=>L(e,t))),a=n?ce[n]:void 0;if(!a)throw Error(`Unrecognized operation ${n}`);return a.apply(t,i)}async function R(e){return N(e)?R(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function le(e){return Object.keys(e)[0]}function z(e,t,n){return new Proxy(Object.create(null),{get(r,i){if(typeof i!=`string`)return;let a=e.find(e=>e.key===i);if(a!==void 0)return async()=>n.has(i)?!1:await L(a.logic,{...t,conditions:z(e,t,new Set(n).add(i))})===!0}})}var ue=(0,u.createFactory)(({client:e})=>(0,l.attach)({source:{stateSnapshot:e.stateSnapshotStore,predicates:e.predicates.listStore,actions:e.actions.listStore,features:e.features.listStore,responses:e.responses.getAllStore,conditions:e.conditions.listStore},effect:async({stateSnapshot:e,predicates:t,actions:n,features:r,responses:i,conditions:a},{rule:o,context:s})=>{let c=t.reduce((t,n)=>(t[n.name]=async(...t)=>await n.predicate({...e,args:t}),t),{}),l=n.reduce((t,n)=>(t[n.key]=async(...t)=>await n.action({...e,args:t},null)??void 0,t),{}),u=r.reduce((e,t)=>(e[t.id]=async()=>{let{bucket:e}=await t.getBucket();return e},e),{}),d={responses:i,location:typeof e.location==`object`?{hash:e.location.hash,host:e.location.host,hostname:e.location.hostname,href:e.location.href,origin:e.location.origin,pathname:e.location.pathname,port:e.location.port,protocol:e.location.protocol,search:e.location.search}:void 0,predicates:c,actions:l,features:u,...s};return await L(o,{...d,conditions:z(a,d,new Set)})}}));function de(e){return(0,u.invoke)(ue,e)}var fe=6e3,B=o.t(`last_ping`,`global`),V=async e=>{try{let t=Date.now(),n=o.n.get(B),r=0;if(n.isSet()&&(r=n.json()??0),r&&t-r<fe)return!0;let i={projectId:e.projectId,path:window.location.pathname},a={},c=document.getElementById(`picked_script`)?.dataset.verceltoken;c&&(a[`x-vercel-protection-bypass`]=c);let l=(await s.n(e.apiUrl,`ping`,i,a)).ok;return l&&n.set(t),l}catch{return!1}},H=(0,l.createDomain)(`lifecycle`),pe=(0,u.createFactory)(({client:e})=>{let n=H.store(!1),a=(0,l.createStore)(void 0,{skipVoid:!1,domain:H}),o=(0,l.createStore)(void 0,{skipVoid:!1,domain:H}),s=H.store(`idle`),c=H.store([]),u=(0,l.createStore)(void 0,{skipVoid:!1,domain:H}),d=(0,l.createStore)(void 0,{skipVoid:!1,domain:H}),f=(0,l.createEvent)(),p=(0,l.createEvent)(),m=(0,l.createEvent)(),h=(0,l.createEvent)(),g=(0,l.createEvent)(),_=(0,l.createEvent)();c.on(h,(e,t)=>[...e,t]),u.on(g,(e,t)=>t),d.on(_,(e,t)=>t),n.on(p,()=>!0);let v=(0,l.createEffect)(()=>{V(e)}),y=(0,l.createEffect)(async()=>{await i.r()}),b=(0,l.createEffect)(async()=>{await ee(e)}),x=(0,l.attach)({effect:b}),S=(0,l.attach)({source:c,effect:async e=>{for(let t of e)await t()}}),C=(0,l.attach)({source:u,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),w=(0,l.attach)({source:d,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),T=(0,l.sample)({clock:f,source:s,filter:e=>e===`idle`&&r.i(),fn:()=>void 0});(0,l.sample)({clock:T,fn:()=>`starting`,target:s}),(0,l.sample)({clock:T,target:v}),(0,l.sample)({clock:T,target:S}),(0,l.sample)({clock:T,target:y}),(0,l.sample)({clock:S.done,target:C}),(0,l.sample)({clock:C.doneData,target:a}),(0,l.sample)({clock:w.doneData,target:o}),(0,l.sample)({clock:C.doneData,filter:e=>e,target:w}),(0,l.sample)({clock:w.doneData,target:e.session.setIsUser}),(0,l.sample)({clock:w.doneData,fn:e=>({type:`user_decide`,value:e}),target:e.eventBus}),(0,l.sample)({clock:C.doneData,filter:e=>!e,fn:()=>void 0,target:m}),(0,l.sample)({clock:w.doneData,fn:()=>void 0,target:m}),(0,l.sample)({clock:m,fn:()=>({type:`initialize`}),target:e.eventBus});let E=(0,l.createStore)(!1).on(y.done,()=>!0),D=(0,l.createStore)(!1).on(m,()=>!0),O=(0,l.createStore)(!1).on(x.done,()=>!0),k=(0,l.combine)(a,o,(e,t)=>e===!0&&t===!0);return(0,l.sample)({clock:m,source:k,filter:e=>e,fn:()=>void 0,target:b}),(0,l.sample)({clock:(0,l.combine)(E,D,k,(e,t,n)=>e&&t&&n),filter:e=>e,fn:()=>void 0,target:x}),(0,l.sample)({clock:(0,l.combine)(E,D,k,O,(e,t,n,r)=>e&&t&&(!n||r)),filter:e=>e,fn:()=>void 0,target:p}),(0,l.sample)({clock:p,fn:()=>`ready`,target:s}),(0,l.sample)({clock:p,fn:()=>({type:`ready`}),target:e.eventBus}),(0,l.sample)({clock:p,source:e.session.store,fn:({id:e,isUser:t,identifiers:n})=>({type:`session`,id:e,isUser:t,identifiers:n}),target:e.eventBus}),(0,l.sample)({clock:[S.fail,C.fail,w.fail,b.fail,x.fail,y.fail],fn:()=>`failed`,target:s}),{start:f,readyStore:n,preconditionPassedStore:a,conditionPassedStore:o,lifecycleStageStore:s,registerPluginStartHook:h,setPrecondition:g,setCondition:_}});function me(e){return(0,u.invoke)(pe,e)}var he=(0,l.createDomain)(`predicate`),ge=(0,u.createFactory)(({client:e})=>{let t=he.store({}),r=(0,l.createApi)(t,{register(e,t){return{...e,[t.name]:{name:t.name,predicate:t.predicate}}}}),i=(0,l.createEvent)();(0,l.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Predicate '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:i,fn:({name:e,predicate:t})=>Object.freeze({name:e,predicate:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.predicate,{skipVoid:!1})}function s(t){let n=(0,l.createStore)(()=>void 0,{skipVoid:!1}),r=(0,l.attach)({source:{predicate:o(t),snapshot:e.stateSnapshotStore},effect:({predicate:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n})}});return(0,l.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,l.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:i,getByName:o,listStore:a,getEvokablePredicate:s}});function _e(e){return(0,u.invoke)(ge,e)}var ve=(e,t,n)=>{n.register({name:e,predicate:t})},U=(0,l.createDomain)(`feature`),ye=(0,u.createFactory)(({client:e})=>{let t=U.store({}),r=U.store([]),i=(0,l.createApi)(t,{register(e,t){return{...e,[t.id]:t.feature}}}),a=(0,l.createEvent)();(0,l.sample)({clock:a,source:t,filter:(e,{id:t})=>e[t]!==void 0,fn:(e,{id:t})=>`Feature '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:a,fn:({id:e,feature:t})=>Object.freeze({id:e,feature:{id:e,feature:{...t,id:e}}}),target:i.register});let s=(0,l.createEffect)(async({id:e,key:t,storage:n=`local`})=>{let r=o.t(`feature:${e}:${t}`,`global`),i=(n===`session`?o.r:o.n).get(r).boolean();return i===null?null:{id:e,key:t,bucket:i,storage:n}}),c=(0,l.createEffect)(e=>{if(!e)return null;let t=o.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?o.r:o.n).set(t,e.bucket)}),u=new Map,d=(0,l.attach)({source:{allFeaturesStore:t,resolvedFeaturesStore:r},effect:async({allFeaturesStore:e,resolvedFeaturesStore:t},{id:n,decide:r,key:i})=>{let a=t.find(e=>e.id===n&&e.key===i);if(a)return a;let o=e[n];if(!o)throw Error(`Feature with id '${n}' not found`);let s=u.get(`${n}:${i}`);if(s!==void 0){let e=await s;return{id:o.id,bucket:e,key:i,storage:o.feature.storage}}let c=r();u.set(`${n}:${i}`,c);let l=await c;return{id:o.id,bucket:l,key:i,storage:o.feature.storage}}});(0,l.sample)({clock:i.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage}},target:s}),(0,l.sample)({source:t,clock:d.doneData,fn:(e,t)=>{let{id:n,bucket:r,storage:i}=t,a=e[n]?.feature.key;return a?{key:a,id:n,bucket:r,storage:i}:null},target:c});let f=(0,l.combine)({allFeaturesStore:t,resolvedFeaturesStore:r}).map(({allFeaturesStore:e,resolvedFeaturesStore:t})=>Object.values(e).map(e=>{let n=t.find(t=>t.id===e.id&&t.key===e.feature.key);return n?{id:e.id,name:e.feature.name,key:e.feature.key,getBucket:()=>({id:e.id,bucket:n.bucket}),isResolved:!0}:{id:e.id,name:e.feature.name,key:e.feature.key,getBucket:async()=>await d(e.feature),isResolved:!1}}));(0,l.sample)({clock:d.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:e},{id:t,key:n})=>!e.some(e=>e.id===t&&e.key===n),fn:(e,t)=>t,target:e.eventBus.prepend(e=>({type:`feature_decide`,feature:e}))}),(0,l.sample)({clock:[s.doneData,d.doneData],source:r,fn:(e,t)=>!t||e.some(e=>e.id===t.id&&e.key===t.key)?e:[...e,t],target:r});function p(e){return f.map(t=>t.find(t=>t.id===e))}function m(e){return t.map(t=>t[e],{skipVoid:!1})}function h(e){let t=(0,l.createStore)(async()=>void 0,{skipVoid:!1}),n=(0,l.attach)({source:p(e),effect:async e=>{if(e)return async()=>(await e.getBucket()).bucket}});return(0,l.sample)({source:r,filter:t=>t.some(t=>t.id===e),target:n}),(0,l.sample)({clock:n.doneData,filter:e=>e!==void 0,target:t}),n(),t}return{register:a,getById:p,getByName:m,listStore:f,getEvokableFeature:h}});function be(e){return(0,u.invoke)(ye,e)}var xe=(e,t,n)=>{n.register({id:e,feature:t})},W=(0,l.createDomain)(`history`);function G(e,t,n){return{id:c.t(`history-entry`),node:n,at:Date.now(),instanceId:e,experienceId:t}}function Se(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n&&a.u(n.node))return e.slice(0,t+1)}return[]}var Ce=(0,u.createFactory)(()=>{let e=W.store([]),t=W.event(),n=W.event(),r=W.event(),i=W.event(),o=W.event(),s=W.event(),u=W.event();e.on(t,(e,t)=>[...e,G(t.instanceId,t.experienceId,t.node)]),e.on(n,(e,t)=>{let n=G(t.instanceId,t.experienceId,t.node),r=-1;for(let n=e.length-1;n>=0;n--)if(e[n]?.instanceId===t.instanceId){r=n;break}return r===-1?[...e,n]:[...e.slice(0,r),n,...e.slice(r+1)]}),e.on(r,(e,{instanceId:t})=>{let n=0,r=-1;for(let i=e.length-1;i>=0;i--){let o=e[i];if(!(o?.instanceId!==t||!a.u(o.node))&&++n===2){r=i;break}}return r===-1?e:e.filter((e,n)=>e.instanceId!==t||n<=r)}),e.on(i,(e,{snapshots:t})=>{let n=new Set(e.map(e=>e.experienceId)),r=[];for(let e of Object.keys(t)){if(n.has(e))continue;let i=t[e];i&&r.push(...i)}return r.length===0?e:[...e,...r]}),e.on(u,(e,t)=>[...e,...t]),e.on(s,(e,{instanceId:t})=>{let n=e.filter(e=>e.instanceId!==t);return n.length===e.length?e:n});let d=e.map(e=>{let t=new Map;for(let n of e)t.set(n.experienceId,n.instanceId);let n={};for(let r of e){if(t.get(r.experienceId)!==r.instanceId)continue;let e=n[r.experienceId]??[];e.push(r),n[r.experienceId]=e}return n});return(0,l.sample)({clock:o,source:d,fn:(e,{instanceId:t,experienceId:n})=>Se(e[n]??[]).map(e=>({...e,id:c.t(`history-entry`),instanceId:t})),target:u}),{push:t,replace:n,back:r,restoreSnapshots:i,seedInstanceFromSnapshot:o,clearForInstance:s,entriesStore:e,snapshotStore:d}});function we(){return(0,u.invoke)(Ce)}var Te=0,Ee=e=>{let t=(0,l.createStore)([]);return t.on(e,(e,t)=>[...e,{id:Te++,at:new Date,payload:t}]),t},De=(0,l.createDomain)(`field`),Oe=(0,u.createFactory)(()=>{let e=De.store({}),t=(0,l.createApi)(e,{register(e,t){return{...e,[t.field.id]:t.field}},updateByKey(e,t){let n=Object.values(e).find(e=>e.key===t.fieldKey);return n?{...e,[n.id]:Object.assign({},n,t.updates)}:e}});function n(e){t.register({field:e})}let r={};e.watch(e=>{r=e});function i(e,n){let i=Object.values(r).find(t=>t.key===e)?.key;i&&t.updateByKey({fieldKey:i,updates:n})}let a=e.map(e=>Object.values(e));function o(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function s(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}function c(t){return e.map(e=>Object.values(e).find(e=>e.name===t)??null,{skipVoid:!1})}return{register:n,update:i,getById:o,getByKey:s,listStore:a,getByName:c}});function ke(){return(0,u.invoke)(Oe)}var Ae=(0,l.createDomain)(`step`),je=(0,u.createFactory)(()=>{let e=Ae.store({}),t=(0,l.createApi)(e,{register(e,t){return{...e,[t.step.id]:t.step}}});function n(e){t.register({step:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function Me(){return(0,u.invoke)(je)}function Ne(e,t){t.register(e)}var Pe=(0,l.createDomain)(`content`),Fe=(0,u.createFactory)(()=>{let e=Pe.store({}),t=(0,l.createApi)(e,{register(e,t){return{...e,[t.content.id]:t.content}}});function n(e){t.register({content:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}return{register:n,getById:i,listStore:r,indexStore:e}});function Ie(){return(0,u.invoke)(Fe)}function Le(e,t){t.register(e)}var Re=(0,l.createDomain)(`action`),ze=(0,u.createFactory)(({client:e})=>{let t=Re.store({}),r=(0,l.createApi)(t,{register(e,t){return{...e,[t.key]:{key:t.key,action:t.action}}}}),i=(0,l.createEvent)();(0,l.sample)({clock:i,source:t,filter:(e,{key:t})=>e[t]!==void 0,fn:(e,{key:t})=>`Action '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:i,fn:({key:e,action:t})=>Object.freeze({key:e,action:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.action,{skipVoid:!1})}function s(t,n){let r=(0,l.createStore)(()=>void 0,{skipVoid:!1}),i=n?{experience:n.experience}:null,a=(0,l.attach)({source:{action:o(t),snapshot:e.stateSnapshotStore},effect:({action:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n},i)}});return(0,l.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:a}),(0,l.sample)({clock:a.doneData,filter:e=>e!==void 0,target:r}),a(),r}return{register:i,getByKey:o,listStore:a,getEvokableAction:s}});function Be(e){return(0,u.invoke)(ze,e)}var Ve=(e,t,n)=>{n.register({key:e,action:t})};function K(e,t,n,r){return{fieldKey:e.key,userMessage:n,systemMessage:r,value:t}}function q(e){return e===null||e===``||Array.isArray(e)&&!e.length}function He(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null}function J(e){try{return JSON.stringify(e),!0}catch{return!1}}function Ue(e,t){return t.find(t=>t.key===e)??null}function We(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function Ge(e,t){if(e.type!==`object`||q(t))return null;if(e.multiple){if(!Array.isArray(t))return K(e,t,`This field expects multiple values`,`Field expects an array of objects.`);for(let n of t){if(typeof n!=`object`||!n)return K(e,t,`This field expects object values`,`Field expects an array of objects, but received non-object value.`);if(!J(n))return K(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}return null}return Array.isArray(t)?K(e,t,`This field expects a single value`,`Field expects a single object, not an array.`):typeof t!=`object`||!t?K(e,t,`This field expects an object value`,`Field expects an object value.`):J(t)?null:K(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}function Ke(e,t){if(q(t)||!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=new Set(e.options.map(e=>JSON.stringify(e.value)));return n.every(e=>r.has(JSON.stringify(e)))?null:K(e,t,`This field expects a valid option`,`Field expects a valid option from the defined choices.`)}let r=e.options.map(e=>e.value);return n.every(e=>!He(e)||e===null?!1:r.includes(e))?null:K(e,t,`This field expects a valid option`,`Field expects a valid option. Valid options are: ${r.join(`, `)}`)}async function qe(t,n,r,i){if(n.validation&&!e.t(n.validation)&&!q(r)){let e=i?{$input:r,responses:i}:{$input:r},a=await t(n.validation,e);if(typeof a==`string`)return K(n,r,a,`Field validation resulted in an error: ${a}.`);if(a===!1)return K(n,r,`This field is invalid`,`Field validation resulted in an unspecified error.`)}return n.required&&q(r)?K(n,r,`This field is required`,`Field is required.`):!n.multiple&&Array.isArray(r)&&r.length>1?K(n,r,`This field expects a single response`,`Field expects a single response.`):null}var Je=(0,l.createDomain)(`response`),Ye=(0,u.createFactory)(({client:e})=>{let n=Je.store({}),r=(0,l.createEvent)(),i=(0,l.createEvent)(),a=(0,l.createApi)(n,{register(e,t){return{...e,[t.fieldKey]:t.response}},registerBatch(e,t){return{...e,...t}},clear(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))},clearAll(){return{}}});function o(e,t){if(typeof e==`string`){if(t===void 0)throw Error(`Response is required when registering a single field`);a.register({fieldKey:e,response:t})}else a.registerBatch(e)}let s=(n,r)=>t.t(e,n,r),c=(0,l.attach)({source:{allFields:e.fields.listStore,existingResponses:n},effect:async({allFields:e,existingResponses:t},n)=>{let r=[],i={},a={...t,...n},o=Object.entries(n),c=await Promise.allSettled(o.map(async([t,n])=>{let o=Ue(t,e);if(!o){r.push({fieldKey:t,userMessage:`Field '${t}' not found`,systemMessage:`No field with key '${t}' exists. Available field keys are: ${e.map(e=>e.key).join(`,`)}.`,value:n});return}let c=We(o,n),l=await qe(s,o,c,a);if(l){r.push(l);return}let u=Ge(o,c);if(u){r.push(u);return}let d=Ke(o,c);if(d){r.push(d);return}i[o.key]=n}));for(let[e,t]of c.entries()){if(t.status!==`rejected`)continue;let n=o[e];if(!n)continue;let[i,a]=n,s=t.reason instanceof Error?t.reason.message:String(t.reason);r.push({fieldKey:i,userMessage:`An unexpected error occurred validating this field`,systemMessage:`Validation threw for field '${i}': ${s}`,value:a})}return{responsesToCommit:i,validationErrors:r}}});async function u(e){return c(e)}let d=(0,l.attach)({source:n,effect:async(e,t)=>{let{responsesToCommit:n,validationErrors:r}=await c(t);return r.length?{errors:r}:(a.registerBatch(n),{errors:[]})}});async function f(e){return d(e)}let p=n.map(e=>e),m=n.map(e=>Object.entries(e).map(([e,t])=>({fieldKey:e,value:t})));function h(e){return(0,l.combine)({f:e,s:n},({f:e,s:t})=>{let n=e?t[e.key]??null:null;return n===null?e?.defaultValue!==void 0&&e.defaultValue!==null?e.defaultValue:null:n})}function g(t){return h(e.fields.getById(t))}function _(t){return h(e.fields.getByKey(t))}function v(t){return h(e.fields.getByName(t))}(0,l.sample)({clock:r,target:a.clearAll}),(0,l.sample)({clock:i,target:a.clear});let y=(0,l.attach)({source:e.experiences.listStore,effect:(e,t)=>{let n=e.find(e=>e.id===t);if(!n)return;let{steps:r}=n.treeStore.getState(),a=r.flatMap(e=>e.fieldKeys);for(let e of a)i(e)}});function b(e){y(e)}return{register:o,clearAll:r,clear:i,clearByExperience:b,commit:f,getResponsesToCommit:u,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function Xe(e){return(0,u.invoke)(Ye,e)}var Ze=(0,l.createDomain)(`condition`),Qe=(0,u.createFactory)(()=>{let e=Ze.store({}),t=(0,l.createApi)(e,{register(e,t){return{...e,[t.condition.id]:t.condition}}});function n(e){t.register({condition:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function $e(){return(0,u.invoke)(Qe)}function et(){if(r.i()){let e=[document.currentScript,document.getElementById(`picked_script`),document.getElementById(`picked`),document.getElementById(`cvly`),document.getElementById(`cvly-x`)];for(let t of e)if(t?.dataset.api)return t.dataset.api}return`https://api.picked.app`}function tt(){if(!r.f())return{};let e=new URLSearchParams(window.location.search),t={},n=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&n.add(t);for(let r of n){let n=r.replace(`picked-`,``);t[n]=e.getAll(r)}let i=o.t(`s`);if(n.size>0)o.r.set(i,t);else{let e=o.r.get(i);if(e)return e.json()||{}}return t}var Y=o.t(`session`,`global`);function nt(){return r.r()?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}`}function rt(){if(!r.s())return null;let e=o.n.get(Y);if(!e.isSet())return null;try{return e.json()}catch{return null}}var it=(0,u.createFactory)(()=>{let e=rt(),t={id:e?.id??nt()};e?.isUser!==void 0&&(t.isUser=e.isUser),e?.identifiers&&Object.keys(e.identifiers).length>0&&(t.identifiers=e.identifiers);let n=(0,l.createStore)(t),i=(0,l.createApi)(n,{setIsUser:(e,t)=>({...e,isUser:t}),setIdentifier:(e,{key:t,value:n})=>({...e,identifiers:{...e.identifiers??{},[t]:n}}),removeIdentifier:(e,t)=>{let n=e.identifiers;if(!n||!(t in n))return e;let r={};for(let[e,i]of Object.entries(n))e!==t&&(r[e]=i);let i={id:e.id};return e.isUser!==void 0&&(i.isUser=e.isUser),Object.keys(r).length>0&&(i.identifiers=r),i}});return(0,l.sample)({source:n,target:(0,l.attach)({source:n,effect:e=>{if(r.s())try{o.n.get(Y).set(e)}catch{}}})}),{store:n,setIsUser:i.setIsUser,setIdentifier:i.setIdentifier,removeIdentifier:i.removeIdentifier}});function at(){return(0,u.invoke)(it,void 0)}function X(){if(r.f())return globalThis.window.pickedConfig}function ot(){if(r.f())return X()?.projectId}function Z(){if(!r.i())return;let e=document.getElementById(`picked_script`)||document.querySelector(`script#picked`)||document.getElementById(`cvly`);if(e)return e.dataset.projectid||e.getAttribute(`project-id`)||void 0}function st(e){if(e.projectId)return e.projectId;let t=ot();if(t)return t;let n=Z();if(n)return n;throw Error(`projectId is required. You can provide it via one of:
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../object-CIkt7Fkr.cjs"),t=require("../rules-logic-CGZIYgAI.cjs"),n=require("../logger-CSTvAyyB.cjs"),r=require("../supports-DBzjGaWD.cjs"),i=require("../dom-CdxDV3e-.cjs"),a=require("../experience-instance-BWL-yghq.cjs"),o=require("../storage-DUw9UJ2h.cjs"),s=require("../api-U2LgcKqF.cjs"),c=require("../id-Js-62re-.cjs");let l=require("effector"),u=require("@withease/factories");var d=(0,l.createDomain)(`experience`);function f(e,t,n){let r=new Set(t.filter(e=>e.elements.length>0).map(e=>e.selector));for(let t of e){if(t.placement!==`replace`||r.has(t.selector))continue;let e=i.i(t.selector);!e||e===n||`${t.selector}${e}${n}`}}var p=(0,u.createFactory)(({client:e,experience:n})=>{let r=d.store(n),o=(0,l.createApi)(r,{merge(e,t){return{...e,...t.experience}}}),s=r.map(e=>({name:e.name,decisionLogic:e.condition,targetSelectors:e.targets,initializeOpenLogic:e.initializeOpen})),c=(0,l.combine)(r,e.components.listStore,(e,t)=>(e.componentName?t.find(t=>t.name===e.componentName):void 0)||t.find(t=>t.name===`experience:${e.id}`)||t.find(e=>e.name===`experience`),{skipVoid:!1}),u=(0,l.combine)(r,e.steps.indexStore,e.conditions.indexStore,(e,t,n)=>{let r=e.nodes.filter(a.u).map(e=>t[e.stepId]).filter(e=>e!==void 0),i=e.nodes.filter(a.l).map(e=>n[e.conditionId]).filter(e=>e!==void 0);return{steps:r,nodes:e.nodes,edges:e.edges,conditions:i}}),p=n.actions??[],m,h=(0,l.attach)({source:s,effect:(t,r)=>{let a=i.a(t.targetSelectors,n.id);a.forEach(({elements:e})=>e.forEach(e=>i.c(e,n.id))),i.t(a,n.id,n.key).forEach(t=>{r?e.experienceInstances.spawn(m,t,r):e.experienceInstances.spawn(m,t)}),f(t.targetSelectors,a,n.id)}}),g=(0,l.attach)({source:(0,l.combine)({preconditionPassed:e.preconditionPassedStore,isUser:e.session.store.map(e=>e.isUser,{skipVoid:!1}),config:s}),effect:async({preconditionPassed:r,isUser:a,config:o})=>{if(!r||!a)return!1;let{decisionLogic:s,targetSelectors:c}=o;return c.length===0||i.a(c,n.id).length<1?!1:s===void 0?!0:t.n(s)?await t.t(e,s)===!0:!0}}),_=(0,l.createEffect)(async()=>{if(!e.contentLoader)return!0;try{await e.contentLoader({id:n.id,key:n.key})}catch{`${n.id}`}return!0}),v=(0,l.createEvent)(),y=(0,l.createEvent)(),b=d.createStore(void 0,{skipVoid:!1}).on(v,(e,t)=>t).on(y,(e,t)=>t);return(0,l.sample)({clock:v,target:g}),(0,l.sample)({clock:g.doneData,source:b,filter:(e,t)=>t,fn:e=>e,target:h}),(0,l.sample)({clock:g.doneData,filter:Boolean,target:_}),(0,l.sample)({clock:y,source:b,fn:e=>e,target:h}),(0,l.sample)({clock:y,target:_}),m={id:n.id,key:n.key,name:n.name,configStore:s,treeStore:u,componentStore:c,actions:p,merge:o.merge,initialiseFx:h,shouldInitialiseFx:g,initialiseRequested:v,initialiseDirectly:y,prepareExperienceContentFx:_},m});function m(e){return(0,u.invoke)(p,e)}var h=5e3;function g(e,t){return new Promise(n=>{let r=setTimeout(n,t);e.then(()=>{clearTimeout(r),n()})})}function _(e){return e.configStore.getState().targetSelectors.filter(e=>e.placement===`replace`).map(e=>e.selector)}function v(e){let t=new Map;for(let n of e)for(let e of _(n))t.set(e,(t.get(e)??0)+1);let n=[],r=[];for(let i of e)_(i).some(e=>(t.get(e)??0)>1)?n.push(i):r.push(i);return{serialised:n,parallel:r}}async function y(e){let t;try{let n=new Promise(n=>{t=e.initialiseFx.finally.watch(()=>n())});await e.shouldInitialiseFx()&&await g(n,h)}catch{`${e.id}`}finally{t?.()}}async function b(e){for(let t of e)await y(t)}var x=(0,u.createFactory)(({client:e})=>{let t=d.store({}),n=(0,l.createApi)(t,{register(e,t){return{...e,[t.id]:t}}}),r=(0,l.createEvent)(),i=(0,l.createEffect)(t=>{n.register(m({client:e,experience:t}))});(0,l.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]!==void 0,fn:(e,t)=>({existing:e[t.id],experience:t})}).watch(({existing:e,experience:t})=>{e?.merge({experience:t,strategy:`override`})}),(0,l.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]===void 0,fn:(e,t)=>t,target:i});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}function s(e){return t.map(t=>Object.values(t).find(t=>t.key===e)??t[e],{skipVoid:!1})}let c=(0,l.attach)({source:t,effect:(e,t)=>{let n=`key`in t?Object.values(e).find(e=>e.key===t.key):e[t.id];if(!n){`key`in t?`${t.key}`:`${t.id}`;return}let{options:r}=t;r?.bypassCondition?n.initialiseDirectly(r):n.initialiseRequested(r)}});return{register:r,get:o,getById:o,getByKey:s,launch:c,open:(0,l.attach)({source:{experiences:t,instances:e.experienceInstances.listStore},effect:async({experiences:e,instances:t},n)=>{let r=`key`in n?Object.values(e).find(e=>e.key===n.key):e[n.id],i=t.filter(e=>e.experienceId===r?.id);if(i.length>0){for(let e of i)e.open();return}await c(`key`in n?{key:n.key,options:{...n.options,initialiseOpen:!0}}:{id:n.id,options:{...n.options,initialiseOpen:!0}})}}),listStore:a,initialiseExperiencesFx:(0,l.attach)({source:a,effect:async e=>{let{serialised:t,parallel:n}=v(e);await Promise.all([b(t),...n.map(e=>y(e))])}})}});function S(e){return(0,u.invoke)(x,e)}var ee=async e=>{await e.experiences.initialiseExperiencesFx()};function C(e){return(0,l.createEffect)(async()=>{await e()})}var w=(e,t,n)=>{let r=t.name,i=t.setup(e);if(i){let e=n[r]??{};n[r]=Object.freeze({...e,...i})}},T=(0,l.createDomain)(`component`),E=(0,u.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function D(e){return(0,u.invoke)(E,e)}var O=(0,u.createFactory)(({client:e})=>{let t=T.store({}),r=(0,l.createApi)(t,{register(e,t){return{...e,[t.name]:t}}}),i=(0,l.createEvent)();(0,l.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Component '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:i,fn:({name:t,component:n})=>D({client:e,name:t,component:n}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function k(e){return(0,u.invoke)(O,e)}var A=(e,t,n)=>{n.register({name:e,component:t})},te=(0,l.createDomain)(`framework`),ne=(0,u.createFactory)(e=>{let t=te.store({}),r=(0,l.createApi)(t,{register(e,t){return{...e,[t.name]:t.framework}}}),i=(0,l.createEvent)();(0,l.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Framework '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:i,target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function re(e){return(0,u.invoke)(ne,e)}var ie=(e,t)=>{t.register({name:e.name,framework:e})},ae=(0,u.createFactory)(({client:e})=>{let t=`window`in globalThis,n={location:t?globalThis.location:void 0,document:t?globalThis.document:void 0,sessionStorage:t?globalThis.sessionStorage:void 0,localStorage:t?globalThis.localStorage:void 0};return(0,l.combine)(e.responses.listStore,e.fields.listStore,(t,r)=>Object.freeze({client:e,responses:t,fields:r,...n}))});function oe(e){return(0,u.invoke)(ae,e)}function se(e){return typeof e==`number`&&!isNaN(e)}function j(e){return typeof e==`string`}function M(e){return Array.isArray(e)}function N(e){return e instanceof Promise}function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.keys(e).length===1}function F(e){if(se(e))return e;let t=parseFloat(`${e}`);return isNaN(t)?0:t}function I(e){return`${e}`}var ce={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>F(e)>F(t),">=":(e,t)=>F(e)>=F(t),"<":(e,t,n)=>{let r=F(e),i=F(t);if(n===void 0)return r<i;let a=F(n);return r<i&&i<a},"<=":(e,t,n)=>{let r=F(e),i=F(t);if(n===void 0)return r<=i;let a=F(n);return r<=i&&i<=a},"!!":async e=>await R(e),"!":async e=>!await R(e),"%":(e,t)=>F(e)%F(t),log:e=>(console.log(e),e),in:(e,t)=>t?j(t)?t.indexOf(I(e))!==-1:M(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(I).join(``),substr:(e,t,n)=>{let r=I(e),i=F(t);if(n===void 0)return r.substr(i);let a=F(n);if(a<0){let e=r.substr(i);return e.substr(0,e.length+a)}return r.substr(i,a)},"+":(...e)=>e.reduce((e,t)=>F(e)+F(t),0),"*":(...e)=>e.reduce((e,t)=>F(e)*F(t),1),"-":(e,t)=>{let n=F(e);return t===void 0?-n:n-F(t)},"/":(e,t)=>F(e)/F(t),min:(...e)=>Math.min(...e.map(F)),max:(...e)=>Math.max(...e.map(F)),merge:(...e)=>e.reduce((e,t)=>M(t)?e.concat(t):e.concat([t]),[]),var(e,t){let n=arguments.length>1?t:null;if(e===``||e===`.`||e==null)return this;if(typeof e==`number`&&Array.isArray(this))return e>=0&&e<this.length?this[e]:n;let r=I(e);if(r===``||r===`.`)return this;let i=r.split(`.`),a=this;for(let e of i){if(a==null)return n;if(Array.isArray(a)){let t=parseInt(e,10);a=isNaN(t)?a[e]:a[t]}else a=a[e]}return a===void 0?n:a},async missing(...e){let t=M(e[0])?e[0]:e,n=[];for(let e of t){let t=await L({var:e},this);(t===null||t===``)&&n.push(`${e}`)}return n},async missing_some(e,t){let n=await L({missing:t},this);if(!M(n)||!M(t))return[];let r=n.filter(j);return t.filter(j).length-r.length>=F(e)?[]:r},invoke(...e){let[t,...n]=e;return typeof t==`function`?Reflect.apply(t,null,n):null},startsWith:(e,t)=>j(e)&&j(t)&&e.startsWith(t),endsWith:(e,t)=>j(e)&&j(t)&&e.endsWith(t),regexp_matches(e,t){let n=e,r=``;if(M(e)){let[t,i]=e;n=t,r=i}return!j(n)||!j(r)?!1:new RegExp(n,r).test(I(t))},throw(e){throw Error(I(e))}};async function L(e,t){if(!e)return e;if(N(e))return L(await e,t);if(M(e))return Promise.all(e.map(e=>L(e,t)));if(!P(e))return e;let n=le(e),r=n?e[n]??[]:[];switch(M(r)||(r=[r]),n){case`if`:case`?:`:for(let e=0;e<r.length-1;e+=2)if(await R(await L(r[e],t)))return L(r[e+1],t);return r.length%2==1?L(r[r.length-1],t):null;case`and`:{let e=null;for(let n of r)if(e=await L(n,t),!await R(e))return e;return e}case`or`:{let e=null;for(let n of r)if(e=await L(n,t),await R(e))return e;return e}case`map`:{let e=await L(r[0],t);return M(e)?await Promise.all(e.map(e=>L(r[1],e))):[]}case`filter`:{let e=await L(r[0],t);return M(e)?(await Promise.all(e.map(async e=>({item:e,shouldInclude:await R(await L(r[1],e))})))).filter(({shouldInclude:e})=>e).map(({item:e})=>e):[]}case`reduce`:{let e=await L(r[0],t);if(!M(e))return r.length>2?await L(r[2],t):null;let n=r[1],i=r.length>2?await L(r[2],t):null;for(let t of e)i=await L(n,{current:t,accumulator:i});return i}case`all`:{let e=await L(r[0],t);if(!M(e)||e.length===0)return!1;for(let t of e)if(!await R(await L(r[1],t)))return!1;return!0}case`some`:{let e=await L(r[0],t);if(!M(e))return!1;for(let t of e)if(await R(await L(r[1],t)))return!0;return!1}case`none`:{let e=await L(r[0],t);if(!M(e))return!0;for(let t of e)if(await R(await L(r[1],t)))return!1;return!0}case`catch`:try{return await L(r[0],t)}catch(e){return P(e)?await L(e,t):r[1]?await L(r[1],e):e instanceof Error?e.message:e}}let i=await Promise.all(r.map(e=>L(e,t))),a=n?ce[n]:void 0;if(!a)throw Error(`Unrecognized operation ${n}`);return a.apply(t,i)}async function R(e){return N(e)?R(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function le(e){return Object.keys(e)[0]}function z(e,t,n){return new Proxy(Object.create(null),{get(r,i){if(typeof i!=`string`)return;let a=e.find(e=>e.key===i);if(a!==void 0)return async()=>n.has(i)?!1:await L(a.logic,{...t,conditions:z(e,t,new Set(n).add(i))})===!0}})}var ue=(0,u.createFactory)(({client:e})=>(0,l.attach)({source:{stateSnapshot:e.stateSnapshotStore,predicates:e.predicates.listStore,actions:e.actions.listStore,features:e.features.listStore,responses:e.responses.getAllStore,conditions:e.conditions.listStore},effect:async({stateSnapshot:e,predicates:t,actions:n,features:r,responses:i,conditions:a},{rule:o,context:s})=>{let c=t.reduce((t,n)=>(t[n.name]=async(...t)=>await n.predicate({...e,args:t}),t),{}),l=n.reduce((t,n)=>(t[n.key]=async(...t)=>await n.action({...e,args:t},null)??void 0,t),{}),u=r.reduce((e,t)=>(e[t.id]=async()=>{let{bucket:e}=await t.getBucket();return e},e),{}),d={responses:i,location:typeof e.location==`object`?{hash:e.location.hash,host:e.location.host,hostname:e.location.hostname,href:e.location.href,origin:e.location.origin,pathname:e.location.pathname,port:e.location.port,protocol:e.location.protocol,search:e.location.search}:void 0,predicates:c,actions:l,features:u,...s};return await L(o,{...d,conditions:z(a,d,new Set)})}}));function de(e){return(0,u.invoke)(ue,e)}var fe=6e3,B=o.t(`last_ping`,`global`),V=async e=>{try{let t=Date.now(),n=o.n.get(B),r=0;if(n.isSet()&&(r=n.json()??0),r&&t-r<fe)return!0;let i={projectId:e.projectId,path:window.location.pathname},a={},c=document.getElementById(`picked_script`)?.dataset.verceltoken;c&&(a[`x-vercel-protection-bypass`]=c);let l=(await s.n(e.apiUrl,`ping`,i,a)).ok;return l&&n.set(t),l}catch{return!1}},H=(0,l.createDomain)(`lifecycle`),pe=(0,u.createFactory)(({client:e})=>{let n=H.store(!1),a=(0,l.createStore)(void 0,{skipVoid:!1,domain:H}),o=(0,l.createStore)(void 0,{skipVoid:!1,domain:H}),s=H.store(`idle`),c=H.store([]),u=(0,l.createStore)(void 0,{skipVoid:!1,domain:H}),d=(0,l.createStore)(void 0,{skipVoid:!1,domain:H}),f=(0,l.createEvent)(),p=(0,l.createEvent)(),m=(0,l.createEvent)(),h=(0,l.createEvent)(),g=(0,l.createEvent)(),_=(0,l.createEvent)();c.on(h,(e,t)=>[...e,t]),u.on(g,(e,t)=>t),d.on(_,(e,t)=>t),n.on(p,()=>!0);let v=(0,l.createEffect)(()=>{V(e)}),y=(0,l.createEffect)(async()=>{await i.r()}),b=(0,l.createEffect)(async()=>{await ee(e)}),x=(0,l.attach)({effect:b}),S=(0,l.attach)({source:c,effect:async e=>{for(let t of e)await t()}}),C=(0,l.attach)({source:u,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),w=(0,l.attach)({source:d,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),T=(0,l.sample)({clock:f,source:s,filter:e=>e===`idle`&&r.i(),fn:()=>void 0});(0,l.sample)({clock:T,fn:()=>`starting`,target:s}),(0,l.sample)({clock:T,target:v}),(0,l.sample)({clock:T,target:S}),(0,l.sample)({clock:T,target:y}),(0,l.sample)({clock:S.done,target:C}),(0,l.sample)({clock:C.doneData,target:a}),(0,l.sample)({clock:w.doneData,target:o}),(0,l.sample)({clock:C.doneData,filter:e=>e,target:w}),(0,l.sample)({clock:w.doneData,target:e.session.setIsUser}),(0,l.sample)({clock:w.doneData,fn:e=>({type:`user_decide`,value:e}),target:e.eventBus}),(0,l.sample)({clock:C.doneData,filter:e=>!e,fn:()=>void 0,target:m}),(0,l.sample)({clock:w.doneData,fn:()=>void 0,target:m}),(0,l.sample)({clock:m,fn:()=>({type:`initialize`}),target:e.eventBus});let E=(0,l.createStore)(!1).on(y.done,()=>!0),D=(0,l.createStore)(!1).on(m,()=>!0),O=(0,l.createStore)(!1).on(x.done,()=>!0),k=(0,l.combine)(a,o,(e,t)=>e===!0&&t===!0);return(0,l.sample)({clock:m,source:k,filter:e=>e,fn:()=>void 0,target:b}),(0,l.sample)({clock:(0,l.combine)(E,D,k,(e,t,n)=>e&&t&&n),filter:e=>e,fn:()=>void 0,target:x}),(0,l.sample)({clock:(0,l.combine)(E,D,k,O,(e,t,n,r)=>e&&t&&(!n||r)),filter:e=>e,fn:()=>void 0,target:p}),(0,l.sample)({clock:p,fn:()=>`ready`,target:s}),(0,l.sample)({clock:p,fn:()=>({type:`ready`}),target:e.eventBus}),(0,l.sample)({clock:p,source:e.session.store,fn:({id:e,isUser:t,identifiers:n})=>({type:`session`,id:e,isUser:t,identifiers:n}),target:e.eventBus}),(0,l.sample)({clock:[S.fail,C.fail,w.fail,b.fail,x.fail,y.fail],fn:()=>`failed`,target:s}),{start:f,readyStore:n,preconditionPassedStore:a,conditionPassedStore:o,lifecycleStageStore:s,registerPluginStartHook:h,setPrecondition:g,setCondition:_}});function me(e){return(0,u.invoke)(pe,e)}var he=(0,l.createDomain)(`predicate`),ge=(0,u.createFactory)(({client:e})=>{let t=he.store({}),r=(0,l.createApi)(t,{register(e,t){return{...e,[t.name]:{name:t.name,predicate:t.predicate}}}}),i=(0,l.createEvent)();(0,l.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Predicate '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:i,fn:({name:e,predicate:t})=>Object.freeze({name:e,predicate:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.predicate,{skipVoid:!1})}function s(t){let n=(0,l.createStore)(()=>void 0,{skipVoid:!1}),r=(0,l.attach)({source:{predicate:o(t),snapshot:e.stateSnapshotStore},effect:({predicate:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n})}});return(0,l.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,l.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:i,getByName:o,listStore:a,getEvokablePredicate:s}});function _e(e){return(0,u.invoke)(ge,e)}var ve=(e,t,n)=>{n.register({name:e,predicate:t})},U=(0,l.createDomain)(`feature`),ye=(0,u.createFactory)(({client:e})=>{let t=U.store({}),r=U.store([]),i=(0,l.createApi)(t,{register(e,t){return{...e,[t.id]:t.feature}}}),a=(0,l.createEvent)();(0,l.sample)({clock:a,source:t,filter:(e,{id:t})=>e[t]!==void 0,fn:(e,{id:t})=>`Feature '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:a,fn:({id:e,feature:t})=>Object.freeze({id:e,feature:{id:e,feature:{...t,id:e}}}),target:i.register});let s=(0,l.createEffect)(async({id:e,key:t,storage:n=`local`})=>{let r=o.t(`feature:${e}:${t}`,`global`),i=(n===`session`?o.r:o.n).get(r).boolean();return i===null?null:{id:e,key:t,bucket:i,storage:n}}),c=(0,l.createEffect)(e=>{if(!e)return null;let t=o.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?o.r:o.n).set(t,e.bucket)}),u=new Map,d=(0,l.attach)({source:{allFeaturesStore:t,resolvedFeaturesStore:r},effect:async({allFeaturesStore:e,resolvedFeaturesStore:t},{id:n,decide:r,key:i})=>{let a=t.find(e=>e.id===n&&e.key===i);if(a)return a;let o=e[n];if(!o)throw Error(`Feature with id '${n}' not found`);let s=u.get(`${n}:${i}`);if(s!==void 0){let e=await s;return{id:o.id,bucket:e,key:i,storage:o.feature.storage}}let c=r();u.set(`${n}:${i}`,c);let l=await c;return{id:o.id,bucket:l,key:i,storage:o.feature.storage}}});(0,l.sample)({clock:i.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage}},target:s}),(0,l.sample)({source:t,clock:d.doneData,fn:(e,t)=>{let{id:n,bucket:r,storage:i}=t,a=e[n]?.feature.key;return a?{key:a,id:n,bucket:r,storage:i}:null},target:c});let f=(0,l.combine)({allFeaturesStore:t,resolvedFeaturesStore:r}).map(({allFeaturesStore:e,resolvedFeaturesStore:t})=>Object.values(e).map(e=>{let n=t.find(t=>t.id===e.id&&t.key===e.feature.key);return n?{id:e.id,name:e.feature.name,key:e.feature.key,getBucket:()=>({id:e.id,bucket:n.bucket}),isResolved:!0}:{id:e.id,name:e.feature.name,key:e.feature.key,getBucket:async()=>await d(e.feature),isResolved:!1}}));(0,l.sample)({clock:d.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:e},{id:t,key:n})=>!e.some(e=>e.id===t&&e.key===n),fn:(e,t)=>t,target:e.eventBus.prepend(e=>({type:`feature_decide`,feature:e}))}),(0,l.sample)({clock:[s.doneData,d.doneData],source:r,fn:(e,t)=>!t||e.some(e=>e.id===t.id&&e.key===t.key)?e:[...e,t],target:r});function p(e){return f.map(t=>t.find(t=>t.id===e))}function m(e){return t.map(t=>t[e],{skipVoid:!1})}function h(e){let t=(0,l.createStore)(async()=>void 0,{skipVoid:!1}),n=(0,l.attach)({source:p(e),effect:async e=>{if(e)return async()=>(await e.getBucket()).bucket}});return(0,l.sample)({source:r,filter:t=>t.some(t=>t.id===e),target:n}),(0,l.sample)({clock:n.doneData,filter:e=>e!==void 0,target:t}),n(),t}return{register:a,getById:p,getByName:m,listStore:f,getEvokableFeature:h}});function be(e){return(0,u.invoke)(ye,e)}var xe=(e,t,n)=>{n.register({id:e,feature:t})},W=(0,l.createDomain)(`history`);function G(e,t,n){return{id:c.t(`history-entry`),node:n,at:Date.now(),instanceId:e,experienceId:t}}function Se(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n&&a.u(n.node))return e.slice(0,t+1)}return[]}var Ce=(0,u.createFactory)(()=>{let e=W.store([]),t=W.event(),n=W.event(),r=W.event(),i=W.event(),o=W.event(),s=W.event(),u=W.event(),d=W.event();e.on(t,(e,t)=>[...e,G(t.instanceId??t.experienceId,t.experienceId,t.node)]),e.on(n,(e,t)=>{let n=t.instanceId??t.experienceId,r=G(n,t.experienceId,t.node),i=-1;for(let t=e.length-1;t>=0;t--)if(e[t]?.instanceId===n){i=t;break}return i===-1?[...e,r]:[...e.slice(0,i),r,...e.slice(i+1)]}),e.on(r,(e,t)=>{let n=e=>(t.instanceId===void 0||e.instanceId===t.instanceId)&&(t.experienceId===void 0||e.experienceId===t.experienceId),r=0,i=-1;for(let t=e.length-1;t>=0;t--){let o=e[t];if(!(!o||!n(o)||!a.u(o.node))&&++r===2){i=t;break}}return i===-1?e:e.filter((e,t)=>!n(e)||t<=i)}),e.on(i,(e,{entries:t})=>t.map(e=>({...e,instanceId:e.instanceId??e.experienceId}))),e.on(o,(e,{snapshots:t})=>{let n=new Set(e.map(e=>e.experienceId)),r=[];for(let e of Object.keys(t)){if(n.has(e))continue;let i=t[e];i&&r.push(...i)}return r.length===0?e:[...e,...r]}),e.on(d,(e,t)=>[...e,...t]),e.on(u,(e,{instanceId:t})=>{let n=e.filter(e=>e.instanceId!==t);return n.length===e.length?e:n});let f=e.map(e=>{let t=new Map;for(let n of e)t.set(n.experienceId,n.instanceId);let n={};for(let r of e){if(t.get(r.experienceId)!==r.instanceId)continue;let e=n[r.experienceId]??[];e.push(r),n[r.experienceId]=e}return n});return(0,l.sample)({clock:s,source:f,fn:(e,{instanceId:t,experienceId:n})=>Se(e[n]??[]).map(e=>({...e,id:c.t(`history-entry`),instanceId:t})),target:d}),{push:t,replace:n,back:r,restore:i,restoreSnapshots:o,seedInstanceFromSnapshot:s,clearForInstance:u,entriesStore:e,snapshotStore:f}});function we(){return(0,u.invoke)(Ce)}var Te=0,Ee=e=>{let t=(0,l.createStore)([]);return t.on(e,(e,t)=>[...e,{id:Te++,at:new Date,payload:t}]),t},De=(0,l.createDomain)(`field`),Oe=(0,u.createFactory)(()=>{let e=De.store({}),t=(0,l.createApi)(e,{register(e,t){return{...e,[t.field.id]:t.field}},updateByKey(e,t){let n=Object.values(e).find(e=>e.key===t.fieldKey);return n?{...e,[n.id]:Object.assign({},n,t.updates)}:e}});function n(e){t.register({field:e})}let r={};e.watch(e=>{r=e});function i(e,n){let i=Object.values(r).find(t=>t.key===e)?.key;i&&t.updateByKey({fieldKey:i,updates:n})}let a=e.map(e=>Object.values(e));function o(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function s(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}function c(t){return e.map(e=>Object.values(e).find(e=>e.name===t)??null,{skipVoid:!1})}return{register:n,update:i,getById:o,getByKey:s,listStore:a,getByName:c}});function ke(){return(0,u.invoke)(Oe)}var Ae=(0,l.createDomain)(`step`),je=(0,u.createFactory)(()=>{let e=Ae.store({}),t=(0,l.createApi)(e,{register(e,t){return{...e,[t.step.id]:t.step}}});function n(e){t.register({step:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function Me(){return(0,u.invoke)(je)}function Ne(e,t){t.register(e)}var Pe=(0,l.createDomain)(`content`),Fe=(0,u.createFactory)(()=>{let e=Pe.store({}),t=(0,l.createApi)(e,{register(e,t){return{...e,[t.content.id]:t.content}}});function n(e){t.register({content:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}return{register:n,getById:i,listStore:r,indexStore:e}});function Ie(){return(0,u.invoke)(Fe)}function Le(e,t){t.register(e)}var Re=(0,l.createDomain)(`action`),ze=(0,u.createFactory)(({client:e})=>{let t=Re.store({}),r=(0,l.createApi)(t,{register(e,t){return{...e,[t.key]:{key:t.key,action:t.action}}}}),i=(0,l.createEvent)();(0,l.sample)({clock:i,source:t,filter:(e,{key:t})=>e[t]!==void 0,fn:(e,{key:t})=>`Action '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,l.sample)({clock:i,fn:({key:e,action:t})=>Object.freeze({key:e,action:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.action,{skipVoid:!1})}function s(t,n){let r=(0,l.createStore)(()=>void 0,{skipVoid:!1}),i=n?{experience:n.experience}:null,a=(0,l.attach)({source:{action:o(t),snapshot:e.stateSnapshotStore},effect:({action:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n},i)}});return(0,l.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:a}),(0,l.sample)({clock:a.doneData,filter:e=>e!==void 0,target:r}),a(),r}return{register:i,getByKey:o,listStore:a,getEvokableAction:s}});function Be(e){return(0,u.invoke)(ze,e)}var Ve=(e,t,n)=>{n.register({key:e,action:t})};function K(e,t,n,r){return{fieldKey:e.key,userMessage:n,systemMessage:r,value:t}}function q(e){return e===null||e===``||Array.isArray(e)&&!e.length}function He(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null}function J(e){try{return JSON.stringify(e),!0}catch{return!1}}function Ue(e,t){return t.find(t=>t.key===e)??null}function We(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function Ge(e,t){if(e.type!==`object`||q(t))return null;if(e.multiple){if(!Array.isArray(t))return K(e,t,`This field expects multiple values`,`Field expects an array of objects.`);for(let n of t){if(typeof n!=`object`||!n)return K(e,t,`This field expects object values`,`Field expects an array of objects, but received non-object value.`);if(!J(n))return K(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}return null}return Array.isArray(t)?K(e,t,`This field expects a single value`,`Field expects a single object, not an array.`):typeof t!=`object`||!t?K(e,t,`This field expects an object value`,`Field expects an object value.`):J(t)?null:K(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}function Ke(e,t){if(q(t)||!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=new Set(e.options.map(e=>JSON.stringify(e.value)));return n.every(e=>r.has(JSON.stringify(e)))?null:K(e,t,`This field expects a valid option`,`Field expects a valid option from the defined choices.`)}let r=e.options.map(e=>e.value);return n.every(e=>!He(e)||e===null?!1:r.includes(e))?null:K(e,t,`This field expects a valid option`,`Field expects a valid option. Valid options are: ${r.join(`, `)}`)}async function qe(t,n,r,i){if(n.validation&&!e.t(n.validation)&&!q(r)){let e=i?{$input:r,responses:i}:{$input:r},a=await t(n.validation,e);if(typeof a==`string`)return K(n,r,a,`Field validation resulted in an error: ${a}.`);if(a===!1)return K(n,r,`This field is invalid`,`Field validation resulted in an unspecified error.`)}return n.required&&q(r)?K(n,r,`This field is required`,`Field is required.`):!n.multiple&&Array.isArray(r)&&r.length>1?K(n,r,`This field expects a single response`,`Field expects a single response.`):null}var Je=(0,l.createDomain)(`response`),Ye=(0,u.createFactory)(({client:e})=>{let n=Je.store({}),r=(0,l.createEvent)(),i=(0,l.createEvent)(),a=(0,l.createApi)(n,{register(e,t){return{...e,[t.fieldKey]:t.response}},registerBatch(e,t){return{...e,...t}},clear(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))},clearAll(){return{}}});function o(e,t){if(typeof e==`string`){if(t===void 0)throw Error(`Response is required when registering a single field`);a.register({fieldKey:e,response:t})}else a.registerBatch(e)}let s=(n,r)=>t.t(e,n,r),c=(0,l.attach)({source:{allFields:e.fields.listStore,existingResponses:n},effect:async({allFields:e,existingResponses:t},n)=>{let r=[],i={},a={...t,...n},o=Object.entries(n),c=await Promise.allSettled(o.map(async([t,n])=>{let o=Ue(t,e);if(!o){r.push({fieldKey:t,userMessage:`Field '${t}' not found`,systemMessage:`No field with key '${t}' exists. Available field keys are: ${e.map(e=>e.key).join(`,`)}.`,value:n});return}let c=We(o,n),l=await qe(s,o,c,a);if(l){r.push(l);return}let u=Ge(o,c);if(u){r.push(u);return}let d=Ke(o,c);if(d){r.push(d);return}i[o.key]=n}));for(let[e,t]of c.entries()){if(t.status!==`rejected`)continue;let n=o[e];if(!n)continue;let[i,a]=n,s=t.reason instanceof Error?t.reason.message:String(t.reason);r.push({fieldKey:i,userMessage:`An unexpected error occurred validating this field`,systemMessage:`Validation threw for field '${i}': ${s}`,value:a})}return{responsesToCommit:i,validationErrors:r}}});async function u(e){return c(e)}let d=(0,l.attach)({source:n,effect:async(e,t)=>{let{responsesToCommit:n,validationErrors:r}=await c(t);return r.length?{errors:r}:(a.registerBatch(n),{errors:[]})}});async function f(e){return d(e)}let p=n.map(e=>e),m=n.map(e=>Object.entries(e).map(([e,t])=>({fieldKey:e,value:t})));function h(e){return(0,l.combine)({f:e,s:n},({f:e,s:t})=>{let n=e?t[e.key]??null:null;return n===null?e?.defaultValue!==void 0&&e.defaultValue!==null?e.defaultValue:null:n})}function g(t){return h(e.fields.getById(t))}function _(t){return h(e.fields.getByKey(t))}function v(t){return h(e.fields.getByName(t))}(0,l.sample)({clock:r,target:a.clearAll}),(0,l.sample)({clock:i,target:a.clear});let y=(0,l.attach)({source:e.experiences.listStore,effect:(e,t)=>{let n=e.find(e=>e.id===t);if(!n)return;let{steps:r}=n.treeStore.getState(),a=r.flatMap(e=>e.fieldKeys);for(let e of a)i(e)}});function b(e){y(e)}return{register:o,clearAll:r,clear:i,clearByExperience:b,commit:f,getResponsesToCommit:u,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function Xe(e){return(0,u.invoke)(Ye,e)}var Ze=(0,l.createDomain)(`condition`),Qe=(0,u.createFactory)(()=>{let e=Ze.store({}),t=(0,l.createApi)(e,{register(e,t){return{...e,[t.condition.id]:t.condition}}});function n(e){t.register({condition:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function $e(){return(0,u.invoke)(Qe)}function et(){if(r.i()){let e=[document.currentScript,document.getElementById(`picked_script`),document.getElementById(`picked`),document.getElementById(`cvly`),document.getElementById(`cvly-x`)];for(let t of e)if(t?.dataset.api)return t.dataset.api}return`https://api.picked.app`}function tt(){if(!r.f())return{};let e=new URLSearchParams(window.location.search),t={},n=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&n.add(t);for(let r of n){let n=r.replace(`picked-`,``);t[n]=e.getAll(r)}let i=o.t(`s`);if(n.size>0)o.r.set(i,t);else{let e=o.r.get(i);if(e)return e.json()||{}}return t}var Y=o.t(`session`,`global`);function nt(){return r.r()?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}`}function rt(){if(!r.s())return null;let e=o.n.get(Y);if(!e.isSet())return null;try{return e.json()}catch{return null}}var it=(0,u.createFactory)(()=>{let e=rt(),t={id:e?.id??nt()};e?.isUser!==void 0&&(t.isUser=e.isUser),e?.identifiers&&Object.keys(e.identifiers).length>0&&(t.identifiers=e.identifiers);let n=(0,l.createStore)(t),i=(0,l.createApi)(n,{setIsUser:(e,t)=>({...e,isUser:t}),setIdentifier:(e,{key:t,value:n})=>({...e,identifiers:{...e.identifiers??{},[t]:n}}),removeIdentifier:(e,t)=>{let n=e.identifiers;if(!n||!(t in n))return e;let r={};for(let[e,i]of Object.entries(n))e!==t&&(r[e]=i);let i={id:e.id};return e.isUser!==void 0&&(i.isUser=e.isUser),Object.keys(r).length>0&&(i.identifiers=r),i}});return(0,l.sample)({source:n,target:(0,l.attach)({source:n,effect:e=>{if(r.s())try{o.n.get(Y).set(e)}catch{}}})}),{store:n,setIsUser:i.setIsUser,setIdentifier:i.setIdentifier,removeIdentifier:i.removeIdentifier}});function at(){return(0,u.invoke)(it,void 0)}function X(){if(r.f())return globalThis.window.pickedConfig}function ot(){if(r.f())return X()?.projectId}function Z(){if(!r.i())return;let e=document.getElementById(`picked_script`)||document.querySelector(`script#picked`)||document.getElementById(`cvly`);if(e)return e.dataset.projectid||e.getAttribute(`project-id`)||void 0}function st(e){if(e.projectId)return e.projectId;let t=ot();if(t)return t;let n=Z();if(n)return n;throw Error(`projectId is required. You can provide it via one of:
2
2
  (1) createClient({ projectId }) options;
3
3
  (2) window.pickedConfig = { projectId };
4
4
  (3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes a data-projectid (or project-id) attribute.`)}function Q(e){return e==null||e===``||Number.isNaN(e)}var ct={default:(e,t)=>Q(e)?String(t??``):String(e),append:(e,t)=>t&&!Q(e)?`${e} ${t}`:e,prepend:(e,t)=>t&&!Q(e)?`${t} ${e}`:e,upper:e=>typeof e==`string`?e.toUpperCase():e,lower:e=>typeof e==`string`?e.toLowerCase():e,capitalize:e=>typeof e==`string`?e.charAt(0).toUpperCase()+e.slice(1):e,list:e=>{if(!e||typeof e!=`object`)return e;let t=new Intl.ListFormat(`en`,{style:`long`,type:`conjunction`});if(Array.isArray(e))return t.format(e.map(String));if(e instanceof Map){let n=Array.from(e.entries()).map(([e,t])=>`${e}: ${t}`);return t.format(n)}return e instanceof Set?t.format(Array.from(e).map(String)):e}};function lt(e){return typeof e==`object`&&!!e}function ut(e,t){let n=t;for(let t of e.split(`.`))if(lt(n)&&t in n)n=n[t];else return;return typeof n==`function`?n():n}function dt(e,t){let n=e.split(`|`).map(e=>e.trim()),r=ut(n.shift()??``,t);for(let e of n){let[t,...n]=e.split(`:`),i=t?.trim()??``,a=n.join(`:`).trim().replaceAll(/(?:^['"]|['"]$)/g,``),o=ct[i];o&&(r=o(r,a))}return Q(r)?``:typeof r==`object`?JSON.stringify(r):String(r)}function ft(e,t){let n=``,r=0;for(;r<e.length;)if(e[r]===`{`&&e[r+1]===`{`){r+=2;let i=``;for(;r<e.length;){if(e[r]===`}`&&e[r+1]===`}`){r+=2;break}i+=e[r++]}n+=dt(i.trim(),t)}else n+=e[r++];return n}var $=class{static logger=n.t;options;dataSource=null;contentLoader;plugins={};eventBus=(0,l.createEvent)();events;projectId;apiUrl;dashboardUrl;documentationSiteUrl;session=at();searchParams=tt();history=we();components=k({client:this});experienceInstances=a.n({client:this});experiences=S({client:this});frameworks=re({client:this});predicates=_e({client:this});features=be({client:this});conditions=$e();fields=ke();responses=Xe({client:this});steps=Me();contents=Ie();actions=Be({client:this});conditionResults=a.r();stateSnapshotStore=oe({client:this});evaluateRuleLogicFx=de({client:this});start;readyStore;preconditionPassedStore;conditionPassedStore;lifecycleStageStore;lifecycle=me({client:this});renderStringFx=(0,l.attach)({source:this.responses.listStore,effect:(e,{template:t,context:n})=>{let r={};for(let t of e)r[t.fieldKey]=t.value;return ft(t,{...n,responses:r})}});constructor(e){this.events=Ee(this.eventBus),this.projectId=st(e),this.options=Object.freeze(e),this.apiUrl=e.apiUrl||et(),this.dashboardUrl=e.dashboardUrl??`https://dashboard.picked.app`,this.documentationSiteUrl=e.documentationSiteUrl??`https://docs.picked.app`,this.start=this.lifecycle.start,this.readyStore=this.lifecycle.readyStore,this.preconditionPassedStore=this.lifecycle.preconditionPassedStore,this.conditionPassedStore=this.lifecycle.conditionPassedStore,this.lifecycleStageStore=this.lifecycle.lifecycleStageStore,this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.setupComponents(),this.lifecycle.setPrecondition(e.precondition),this.lifecycle.setCondition(e.condition),this.eventBus({type:`load`,version:s.r()}),this.maybeStartPreviewBridge()}maybeStartPreviewBridge(){!r.f()||!r.t()||this.searchParams[`preview-token`]?.[0]&&Promise.resolve().then(()=>require("../preview-bridge-CpX1BkSA.cjs")).then(e=>e.initPreviewBridge()).catch(()=>void 0)}registerFramework=e=>{ie(e,this.frameworks)};registerComponent=(e,t)=>{A(e,t,this.components)};registerPlugin=e=>{w(this,e,this.plugins);let t=this.plugins[e.name];t?.onStart&&this.lifecycle.registerPluginStartHook(t.onStart)};registerFeature=(e,t)=>{xe(e,t,this.features)};registerPredicate=(e,t)=>{ve(e,t,this.predicates)};registerCondition=e=>{this.conditions.register(e)};registerField=e=>{this.fields.register(e)};registerStep=e=>{Ne(e,this.steps)};registerContent=e=>{Le(e,this.contents)};registerAction=(e,t)=>{Ve(e,t,this.actions)};registerExperience=e=>{e.component&&A(`experience:${e.id}`,e.component,this.components),this.experiences.register(e)};launchExperienceById=async(e,t)=>{this.experiences.launch({id:e,options:t})};launchExperienceByKey=async(e,t)=>{this.experiences.launch({key:e,options:t})};openExperienceById=async e=>{this.experiences.open({id:e})};openExperienceByKey=async e=>{this.experiences.open({key:e})};setupPlugins(){this.options.plugins?.forEach(e=>{if(Array.isArray(e)){e.forEach(e=>{this.registerPlugin(e)});return}let t=typeof e==`function`?e():e;if(Array.isArray(t)){t.forEach(e=>this.registerPlugin(e));return}this.registerPlugin(t)})}setupFeatures(){let e=this.options.features;e&&Object.entries(e).forEach(([e,t])=>{let n=typeof t==`function`?t():t;this.registerFeature(e,n)}),this.searchParams.feature&&this.searchParams.feature.forEach(e=>{try{let[t,n]=e.split(`:`);if(!t||!n)return;let r=n;r===`true`&&(r=!0),r===`false`&&(r=!1),this.registerFeature(t,{key:`${r}`,name:t,decide:()=>r,storage:`session`})}catch{}})}setupPredicates(){let e=this.options.predicates;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerPredicate(e,t)})}setupActions(){let e=this.options.actions;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerAction(e,t)})}setupComponents(){let e=this.options.components;e&&Object.entries(e).forEach(([e,t])=>{this.registerComponent(e,t)})}getPluginConfig=e=>this.plugins[e]??{}};function pt(e){return{$$type:`lazy-component`,load:e}}function mt(e){return typeof e==`object`&&!!e&&`$$type`in e&&e.$$type===`lazy-component`}var ht=e=>{let t=new $(e);return r.m(t),t};exports.Picked=$,exports.createClient=ht,exports.createPluginEffect=C,exports.createStorageKey=o.t,exports.evaluateRuleLogic=t.t,exports.getPickedConfig=X,exports.isInsideIframe=r.t,exports.isLazyLoader=mt,exports.isPickedRoot=i.o,exports.lazyComponent=pt,exports.localStore=o.n,exports.sessionStore=o.r,exports.subscribe=o.i,exports.supportsCookies=r.n,exports.supportsCryptoRandomUUID=r.r,exports.supportsDocument=r.i,exports.supportsHistory=r.a,exports.supportsIntersectionObserver=r.o,exports.supportsLocalStorage=r.s,exports.supportsLocation=r.c,exports.supportsSessionStorage=r.l,exports.supportsShadowRoot=r.u,exports.supportsWebComponents=r.d,exports.supportsWindow=r.f;
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../api-B1wdTDNv.cjs"),t=require("../../../plugin-D3z3IXOb.cjs");exports.createClientHeaders=e.i,exports.dynamicExperiencesPlugin=t.t,exports.fetchExperienceContent=t.n,exports.fetchProject=t.r;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../api-U2LgcKqF.cjs"),t=require("../../../plugin-CWvFEvt5.cjs");exports.createClientHeaders=e.i,exports.dynamicExperiencesPlugin=t.t,exports.fetchExperienceContent=t.n,exports.fetchProject=t.r;
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../experience-instance-BbSXoRrr.cjs"),t=require("../../plugin-D3z3IXOb.cjs");let n=require("effector");var r=1e4;function i(e){if(e?.location!==void 0)return{location:e.location}}function a(t,n){return t.nodes.filter(e.u).some(e=>n.get(e.stepId)===!0)}async function o(n,o){let{projectConfig:s}=o,c=n.session.store.getState().id;n.conditionResults.reset(),t.i(n,s,{isPreview:!1,sessionId:c});let l=i(o.attributes),u=o.timeoutMs??r,d=new Map(s.steps.map(e=>[e.id,e.layoutContentId!==void 0&&e.layoutContentId!==null])),f=[];for(let t of s.experiences)await e.o(n,{condition:t.condition},{context:l})&&f.push(t);let p=new Map;for(let e of f){if(!a(e,d))continue;let r=o.getContent?await o.getContent({id:e.id,key:e.key},{previewToken:o.previewToken}):await t.n(n.apiUrl,n.projectId,e.id,{previewToken:o.previewToken,signal:AbortSignal.timeout(u)});if(r)for(let e of r.content)p.set(e.id,e)}return{versionId:s.versionId,projectConfig:s,content:Array.from(p.values()),conditionResults:n.conditionResults.store.getState()}}function s(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:t=>e(t),reject:e=>t(e)}}function c(t,r){let{promise:i,resolve:a}=s(),o=(0,n.createEvent)(),c=(0,n.createEvent)(),l=(0,n.createEvent)(),u=(0,n.createEvent)(),d=(0,n.createEvent)(),f=t.experiences.listStore.map(n=>n.map(n=>e.t({client:t,experience:n}))),p=(0,n.createStore)({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=(0,n.createEffect)(async e=>{let r=(0,n.attach)({source:e.experience.componentStore,effect:async(n,r)=>{let i=e.availableRenderers[r];return n&&i?.isValidComponent(n.component)?{rendered:await i.render(n.component,t,e.experience),rendererIndex:r}:null}}),i=e.startRendererIndex??0;for(let t=i;t<e.availableRenderers.length;t++){let e=await r(t);if(e)return e}return null}),h=(0,n.createEffect)(async({experience:e,availableRenderers:t,startRendererIndex:n=0})=>e?m({experience:e,availableRenderers:t,startRendererIndex:n}):null);return p.on(l,(e,t)=>({...e,renderedExperiences:[...e.renderedExperiences,t],currentExperienceIndex:e.currentExperienceIndex+1})).on(d,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(u,e=>({...e,isComplete:!0})).reset(o),(0,n.sample)({clock:o,target:c}),(0,n.sample)({clock:c,source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex<e.length&&!t.isComplete,fn:({experiences:e,state:t})=>({experience:e[t.currentExperienceIndex],availableRenderers:r,startRendererIndex:0}),target:h}),(0,n.sample)({clock:h.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),(0,n.sample)({clock:l,target:c}),(0,n.sample)({clock:h.doneData,filter:e=>e===null,target:d}),(0,n.sample)({clock:d,target:c}),(0,n.sample)({clock:[c,d,l],source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex>=e.length,target:u}),(0,n.sample)({clock:u,target:(0,n.attach)({source:p,effect:e=>{e.isComplete&&a(e.renderedExperiences)}})}),o(),i}exports.createExperienceInstance=e.t,exports.evaluateConditionMemo=e.i,exports.hashRule=e.a,exports.isExperienceActive=e.o,exports.registerProjectConfig=t.i,exports.render=c,exports.ruleReferencesAction=e.s,exports.ruleReferencesActionDeep=e.c,exports.serialize=o;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../experience-instance-BWL-yghq.cjs"),t=require("../../plugin-CWvFEvt5.cjs");let n=require("effector");var r=1e4;function i(e){if(e?.location!==void 0)return{location:e.location}}function a(t,n){return t.nodes.filter(e.u).some(e=>n.get(e.stepId)===!0)}async function o(n,o){let{projectConfig:s}=o,c=n.session.store.getState().id;n.conditionResults.reset(),t.i(n,s,{isPreview:!1,sessionId:c});let l=i(o.attributes),u=o.timeoutMs??r,d=new Map(s.steps.map(e=>[e.id,e.layoutContentId!==void 0&&e.layoutContentId!==null])),f=[];for(let t of s.experiences)await e.o(n,{condition:t.condition},{context:l})&&f.push(t);let p=new Map;for(let e of f){if(!a(e,d))continue;let r=o.getContent?await o.getContent({id:e.id,key:e.key},{previewToken:o.previewToken}):await t.n(n.apiUrl,n.projectId,e.id,{previewToken:o.previewToken,signal:AbortSignal.timeout(u)});if(r)for(let e of r.content)p.set(e.id,e)}return{versionId:s.versionId,projectConfig:s,content:Array.from(p.values()),conditionResults:n.conditionResults.store.getState()}}function s(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:t=>e(t),reject:e=>t(e)}}function c(t,r){let{promise:i,resolve:a}=s(),o=(0,n.createEvent)(),c=(0,n.createEvent)(),l=(0,n.createEvent)(),u=(0,n.createEvent)(),d=(0,n.createEvent)(),f=t.experiences.listStore.map(n=>n.map(n=>e.t({client:t,experience:n}))),p=(0,n.createStore)({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=(0,n.createEffect)(async e=>{let r=(0,n.attach)({source:e.experience.componentStore,effect:async(n,r)=>{let i=e.availableRenderers[r];return n&&i?.isValidComponent(n.component)?{rendered:await i.render(n.component,t,e.experience),rendererIndex:r}:null}}),i=e.startRendererIndex??0;for(let t=i;t<e.availableRenderers.length;t++){let e=await r(t);if(e)return e}return null}),h=(0,n.createEffect)(async({experience:e,availableRenderers:t,startRendererIndex:n=0})=>e?m({experience:e,availableRenderers:t,startRendererIndex:n}):null);return p.on(l,(e,t)=>({...e,renderedExperiences:[...e.renderedExperiences,t],currentExperienceIndex:e.currentExperienceIndex+1})).on(d,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(u,e=>({...e,isComplete:!0})).reset(o),(0,n.sample)({clock:o,target:c}),(0,n.sample)({clock:c,source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex<e.length&&!t.isComplete,fn:({experiences:e,state:t})=>({experience:e[t.currentExperienceIndex],availableRenderers:r,startRendererIndex:0}),target:h}),(0,n.sample)({clock:h.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),(0,n.sample)({clock:l,target:c}),(0,n.sample)({clock:h.doneData,filter:e=>e===null,target:d}),(0,n.sample)({clock:d,target:c}),(0,n.sample)({clock:[c,d,l],source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex>=e.length,target:u}),(0,n.sample)({clock:u,target:(0,n.attach)({source:p,effect:e=>{e.isComplete&&a(e.renderedExperiences)}})}),o(),i}exports.createExperienceInstance=e.t,exports.evaluateConditionMemo=e.i,exports.hashRule=e.a,exports.isExperienceActive=e.o,exports.registerProjectConfig=t.i,exports.render=c,exports.ruleReferencesAction=e.s,exports.ruleReferencesActionDeep=e.c,exports.serialize=o;
@@ -45,11 +45,16 @@ const picked = createClient({
45
45
  'notify': (params) => {
46
46
  sendNotification(params)
47
47
  },
48
+ 'check-eligibility': async () => {
49
+ const response = await fetch('/api/eligibility')
50
+ // Throw only when the request itself fails — that takes the failure branch.
51
+ if (!response.ok) throw new Error('Eligibility request failed')
52
+ },
48
53
  },
49
54
  })
50
55
  ```
51
56
 
52
- Each action is a function that receives optional parameters and returns nothing. When the flow reaches an action node, the SDK calls the matching function.
57
+ Each action is a function that receives optional parameters and usually runs a side effect. When the flow reaches an action node, the SDK calls the matching function and branches on whether it succeeds or throws — see [Success and failure branching](#success-and-failure-branching).
53
58
 
54
59
  See [SDK Actions](/sdk/actions) for more details.
55
60
 
@@ -57,7 +62,16 @@ See [SDK Actions](/sdk/actions) for more details.
57
62
 
58
63
  In the flow builder, drag an action from the entity browser onto the canvas. Connect it to the point in the flow where you want it to trigger.
59
64
 
60
- Actions execute when the flow reaches their node. They don't interrupt the visitor's experience — the flow continues to the next connected node.
65
+ Actions execute when the flow reaches their node. They don't interrupt the visitor's experience — by default the flow continues to the next connected node.
66
+
67
+ ### Success and failure branching
68
+
69
+ An action node can have two outgoing branches: **success** and **failure**. The SDK chooses the branch from the action's outcome:
70
+
71
+ - **Failure** — the action throws (or its promise rejects). The flow follows the failure branch.
72
+ - **Success** — the action resolves to any value: nothing, `true`, `false`, or a string. A returned `false` is a valid response, not a failure. The flow follows the success branch.
73
+
74
+ Reserve the failure branch for genuine errors — throw on the failure case, for example `if (!response.ok) throw new Error(...)`. A valid negative result is _not_ a failure: an API that returns `200` with, say, `{ serviced: false }` should record that value as a response and branch on it with a condition rather than throw. If an action node has only a single plain connection (no explicit success or failure branch), the flow continues through it on either outcome.
61
75
 
62
76
  ## Reuse actions
63
77
 
@@ -26,11 +26,41 @@ const picked = createClient({
26
26
  })
27
27
  ```
28
28
 
29
- Each action is a function that receives optional parameters and returns nothing. When the flow reaches an action node, the SDK calls the matching function.
29
+ Each action is a function that receives optional parameters and usually runs a side effect. When the flow reaches an action node, the SDK calls the matching function and branches on whether it succeeds or throws (see [Success and failure branching](#success-and-failure-branching)).
30
30
 
31
31
  ## How actions work
32
32
 
33
33
  1. **Registration**: Actions are registered to the Picked client during initialization
34
34
  2. **Flow traversal**: When the SDK traverses the experience flow and reaches an action node, it looks up the action by its key
35
- 3. **Execution**: The matching function is called. Actions execute synchronously within the flow — the SDK continues to the next node after the function returns
36
- 4. **Non-blocking**: Actions don't interrupt the visitor's experience. The flow continues to the next connected node automatically
35
+ 3. **Execution**: The matching function is called and awaited. The SDK then continues to the next node based on the action's outcome
36
+ 4. **Non-blocking**: Actions don't interrupt the visitor's experience. The current step stays on screen while an async action runs
37
+
38
+ ## Success and failure branching
39
+
40
+ An action node can have separate **success** and **failure** branches. The SDK selects the branch from the action's outcome:
41
+
42
+ - **Failure** — the action throws (or its promise rejects). The flow follows the failure (`onFail`) branch.
43
+ - **Success** — the action resolves to any value (`void`, `true`, `false`, or a string). A resolved `false` is a valid response, not a failure. The flow follows the success (`onSuccess`) branch.
44
+
45
+ Reserve the failure branch for genuine errors — throw on the failure case, since a returned value never routes to `onFail`:
46
+
47
+ ```ts
48
+ 'check-eligibility': async () => {
49
+ const response = await fetch('/api/eligibility')
50
+ // Throw only when the request itself fails — that takes the failure branch.
51
+ if (!response.ok) throw new Error('Eligibility request failed')
52
+ }
53
+ ```
54
+
55
+ A valid negative result is not a failure. An API that returns `200` with a "no" (for example `{ serviced: false }`) should record that value as a response and branch on it with a condition, rather than throw:
56
+
57
+ ```ts
58
+ 'check-serviced-area': async ({ client, responses }) => {
59
+ const postcode = responses.find((r) => r.fieldKey === 'postcode')?.value
60
+ const { serviced } = await fetch(`/api/serviced?postcode=${postcode}`).then((r) => r.json())
61
+ // Commit the outcome as a response; a downstream condition routes the flow.
62
+ client.responses.register('is-serviced', serviced)
63
+ }
64
+ ```
65
+
66
+ If an action node has only a single plain connection (no explicit success or failure branch), the flow continues through it on either outcome.
package/dist/esm/index.js CHANGED
@@ -3,9 +3,9 @@ import { n as t, t as n } from "../rules-logic-HesIUCu6.js";
3
3
  import { t as r } from "../logger-DMN6TxJJ.js";
4
4
  import { a as i, c as a, d as o, f as s, i as c, l, m as u, n as d, o as f, r as p, s as m, t as h, u as g } from "../supports-CO9bJGNl.js";
5
5
  import { a as _, c as v, i as y, o as b, r as ee, t as x } from "../dom-CZyRgp2P.js";
6
- import { l as S, n as C, r as w, u as T } from "../experience-instance-M2kR3nTp.js";
6
+ import { l as S, n as C, r as w, u as T } from "../experience-instance-QSrdjfn6.js";
7
7
  import { i as E, n as D, r as O, t as k } from "../storage-1MW3-_As.js";
8
- import { n as te, r as ne } from "../api-BJ8EHkg5.js";
8
+ import { n as te, r as ne } from "../api-CsddE4DI.js";
9
9
  import { t as re } from "../id-Bo4RBeOs.js";
10
10
  import { attach as A, combine as j, createApi as M, createDomain as N, createEffect as P, createEvent as F, createStore as I, sample as L } from "effector";
11
11
  import { createFactory as R, invoke as z } from "@withease/factories";
@@ -1033,29 +1033,32 @@ function Xe(e) {
1033
1033
  return [];
1034
1034
  }
1035
1035
  var Ze = R(() => {
1036
- let e = Y.store([]), t = Y.event(), n = Y.event(), r = Y.event(), i = Y.event(), a = Y.event(), o = Y.event(), s = Y.event();
1037
- e.on(t, (e, t) => [...e, X(t.instanceId, t.experienceId, t.node)]), e.on(n, (e, t) => {
1038
- let n = X(t.instanceId, t.experienceId, t.node), r = -1;
1039
- for (let n = e.length - 1; n >= 0; n--) if (e[n]?.instanceId === t.instanceId) {
1040
- r = n;
1036
+ let e = Y.store([]), t = Y.event(), n = Y.event(), r = Y.event(), i = Y.event(), a = Y.event(), o = Y.event(), s = Y.event(), c = Y.event();
1037
+ e.on(t, (e, t) => [...e, X(t.instanceId ?? t.experienceId, t.experienceId, t.node)]), e.on(n, (e, t) => {
1038
+ let n = t.instanceId ?? t.experienceId, r = X(n, t.experienceId, t.node), i = -1;
1039
+ for (let t = e.length - 1; t >= 0; t--) if (e[t]?.instanceId === n) {
1040
+ i = t;
1041
1041
  break;
1042
1042
  }
1043
- return r === -1 ? [...e, n] : [
1044
- ...e.slice(0, r),
1045
- n,
1046
- ...e.slice(r + 1)
1043
+ return i === -1 ? [...e, r] : [
1044
+ ...e.slice(0, i),
1045
+ r,
1046
+ ...e.slice(i + 1)
1047
1047
  ];
1048
- }), e.on(r, (e, { instanceId: t }) => {
1049
- let n = 0, r = -1;
1050
- for (let i = e.length - 1; i >= 0; i--) {
1051
- let a = e[i];
1052
- if (!(a?.instanceId !== t || !T(a.node)) && ++n === 2) {
1053
- r = i;
1048
+ }), e.on(r, (e, t) => {
1049
+ let n = (e) => (t.instanceId === void 0 || e.instanceId === t.instanceId) && (t.experienceId === void 0 || e.experienceId === t.experienceId), r = 0, i = -1;
1050
+ for (let t = e.length - 1; t >= 0; t--) {
1051
+ let a = e[t];
1052
+ if (!(!a || !n(a) || !T(a.node)) && ++r === 2) {
1053
+ i = t;
1054
1054
  break;
1055
1055
  }
1056
1056
  }
1057
- return r === -1 ? e : e.filter((e, n) => e.instanceId !== t || n <= r);
1058
- }), e.on(i, (e, { snapshots: t }) => {
1057
+ return i === -1 ? e : e.filter((e, t) => !n(e) || t <= i);
1058
+ }), e.on(i, (e, { entries: t }) => t.map((e) => ({
1059
+ ...e,
1060
+ instanceId: e.instanceId ?? e.experienceId
1061
+ }))), e.on(a, (e, { snapshots: t }) => {
1059
1062
  let n = new Set(e.map((e) => e.experienceId)), r = [];
1060
1063
  for (let e of Object.keys(t)) {
1061
1064
  if (n.has(e)) continue;
@@ -1063,11 +1066,11 @@ var Ze = R(() => {
1063
1066
  i && r.push(...i);
1064
1067
  }
1065
1068
  return r.length === 0 ? e : [...e, ...r];
1066
- }), e.on(s, (e, t) => [...e, ...t]), e.on(o, (e, { instanceId: t }) => {
1069
+ }), e.on(c, (e, t) => [...e, ...t]), e.on(s, (e, { instanceId: t }) => {
1067
1070
  let n = e.filter((e) => e.instanceId !== t);
1068
1071
  return n.length === e.length ? e : n;
1069
1072
  });
1070
- let c = e.map((e) => {
1073
+ let l = e.map((e) => {
1071
1074
  let t = /* @__PURE__ */ new Map();
1072
1075
  for (let n of e) t.set(n.experienceId, n.instanceId);
1073
1076
  let n = {};
@@ -1079,23 +1082,24 @@ var Ze = R(() => {
1079
1082
  return n;
1080
1083
  });
1081
1084
  return L({
1082
- clock: a,
1083
- source: c,
1085
+ clock: o,
1086
+ source: l,
1084
1087
  fn: (e, { instanceId: t, experienceId: n }) => Xe(e[n] ?? []).map((e) => ({
1085
1088
  ...e,
1086
1089
  id: re("history-entry"),
1087
1090
  instanceId: t
1088
1091
  })),
1089
- target: s
1092
+ target: c
1090
1093
  }), {
1091
1094
  push: t,
1092
1095
  replace: n,
1093
1096
  back: r,
1094
- restoreSnapshots: i,
1095
- seedInstanceFromSnapshot: a,
1096
- clearForInstance: o,
1097
+ restore: i,
1098
+ restoreSnapshots: a,
1099
+ seedInstanceFromSnapshot: o,
1100
+ clearForInstance: s,
1097
1101
  entriesStore: e,
1098
- snapshotStore: c
1102
+ snapshotStore: l
1099
1103
  };
1100
1104
  });
1101
1105
  function Qe() {
@@ -1,3 +1,3 @@
1
- import { i as e } from "../../../api-BJ8EHkg5.js";
2
- import { n as t, r as n, t as r } from "../../../plugin-B04iPuj_.js";
1
+ import { i as e } from "../../../api-CsddE4DI.js";
2
+ import { n as t, r as n, t as r } from "../../../plugin-CnCP2N-8.js";
3
3
  export { e as createClientHeaders, r as dynamicExperiencesPlugin, t as fetchExperienceContent, n as fetchProject };
@@ -1,5 +1,5 @@
1
- import { a as e, c as t, i as n, o as r, s as i, t as a, u as o } from "../../experience-instance-M2kR3nTp.js";
2
- import { i as s, n as c } from "../../plugin-B04iPuj_.js";
1
+ import { a as e, c as t, i as n, o as r, s as i, t as a, u as o } from "../../experience-instance-QSrdjfn6.js";
2
+ import { i as s, n as c } from "../../plugin-CnCP2N-8.js";
3
3
  import { attach as l, createEffect as u, createEvent as d, createStore as f, sample as p } from "effector";
4
4
  //#region src/server/serialize.ts
5
5
  var m = 1e4;
@@ -0,0 +1 @@
1
+ const e=require("./rules-logic-CGZIYgAI.cjs");require("./logger-CSTvAyyB.cjs");const t=require("./dom-CdxDV3e-.cjs"),n=require("./id-Js-62re-.cjs");let r=require("effector"),i=require("@withease/factories");function a(e){return e.type===`condition`}function o(e){return e.type===`step`}function s(e){return e.type===`experience`}function c(e){return e.type===`origin`}function l(e){return e.type===`action`}var u=`conditions.`,d=(0,r.createDomain)(`condition-results`);function f(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function p(e){if(e===void 0)return null;if(Array.isArray(e))return e.map(e=>p(e));if(f(e)){let t=Object.keys(e).sort((e,t)=>e.localeCompare(t)),n={};for(let r of t)n[r]=p(e[r]);return n}return e}function m(e){return JSON.stringify(p(e))}var h=(0,i.createFactory)(()=>{let e=d.store({}),t=(0,r.createApi)(e,{set(e,t){return e[t.hash]===t.result?e:{...e,[t.hash]:t.result}},seed(e,t){return Object.keys(t).every(n=>e[n]===t[n])?e:{...e,...t}},clear(){return{}}});function n(e){t.set(e)}function i(e){t.seed(e)}function a(){t.clear()}function o(t){return e.getState()[t]}return{store:e,set:n,seed:i,peek:o,reset:a}});function g(){return(0,i.invoke)(h)}async function _(t,n,r){return n==null?!0:typeof n==`boolean`?n:e.n(n)?await e.t(t,n,r)===!0:!0}function v(e){if(typeof e==`string`)return e;if(Array.isArray(e)&&typeof e[0]==`string`)return e[0]}function y(e){if(Array.isArray(e))return e.some(y);if(f(e)){let t=v(e.var);return t!==void 0&&(t===`actions`||t.startsWith(`actions.`))?!0:Object.values(e).some(y)}return!1}function b(e){if(Array.isArray(e))return e.flatMap(b);if(f(e)){let t=v(e.var);return[...t!==void 0&&t.startsWith(u)?[t.slice(11)]:[],...Object.values(e).flatMap(b)]}return[]}function x(e,t,n=new Set){if(y(e))return!0;for(let r of b(e)){if(n.has(r))continue;n.add(r);let e=t[r];if(e!==void 0&&x(e.logic,t,n))return!0}return!1}async function S(e,t,n){let r={};for(let t of e.conditions.listStore.getState())r[t.key]=t;let i=x(t,r),a=m(t);if(!i){let t=e.conditionResults.peek(a);if(t!==void 0)return t}let o=await _(e,t,n?.context);return i||e.conditionResults.set({hash:a,result:o}),o}async function C(e,t,n){let r=n?.context,i=[n?.precondition,n?.condition,t.condition];for(let t of i)if(!await S(e,t,{context:r}))return!1;return!0}var w=(e,t,n,r,i=new Set)=>i.has(n.id)?[]:(i.add(n.id),o(n)&&!r?[n]:t.filter(e=>e.sourceNodeId===n.id).flatMap(n=>{let r=e.find(e=>e.id===n.destinationNodeId);return r?w(e,t,r,!1,i):[]})),T=(e,t,n)=>w(e,t,n,!0,new Set),E=(e,t,n,r,i=new Set)=>{if(i.has(n.id))return[-1,-1];i.add(n.id);let a=t.filter(e=>e.sourceNodeId===n.id);if(a.length===0)return[0,0];let o=1/0,s=-1/0;for(let n of a){let r=e.find(e=>e.id===n.destinationNodeId);if(!r)continue;let[a,c]=E(e,t,r,!1,new Set(i));a!==-1&&(o=Math.min(o,a+1),s=Math.max(s,c+1))}return o===1/0?[-1,-1]:[o,s]},ee=(e,t,n)=>E(e,t,n,!0,new Set),D=(e,t,n,r=new Set)=>{if(r.has(n.id))return[-1,-1];if(r.add(n.id),n.type===`origin`)return[0,0];let i=t.filter(e=>e.destinationNodeId===n.id);if(i.length===0)return[-1,-1];let a=1/0,o=-1/0;for(let n of i){let i=e.find(e=>e.id===n.sourceNodeId);if(!i)continue;let[s,c]=D(e,t,i,new Set(r));s!==-1&&(a=Math.min(a,s+1),o=Math.max(o,c+1))}return a===1/0?[-1,-1]:[a,o]},te=(e,t,n)=>D(e,t,n,new Set),O=e=>e.find(e=>e.type===`origin`)||null,k=(e,t,n)=>{if(!e)return O(t);let r=n.find(t=>t.sourceNodeId===e.id);return r&&t.find(e=>e.id===r.destinationNodeId)||null};async function ne(e,t,n,r){let i=e?`true`:`false`,a=r.find(e=>e.sourceHandle===i&&e.sourceNodeId===t);return n.find(e=>e.id===a?.destinationNodeId)}function A(e,t,n,r){let i=r.filter(e=>e.sourceNodeId===t),a=e?`true`:`false`,o=i.find(e=>e.sourceHandle===a)??i.find(e=>e.sourceHandle==null);return n.find(e=>e.id===o?.destinationNodeId)}var j=(0,r.createDomain)(`experience-instance`),M=(0,i.createFactory)(({client:i,experience:u,target:d,options:f})=>{let p=n.t(`exp-instance`);i.history.seedInstanceFromSnapshot({instanceId:p,experienceId:u.id});let m=(0,r.createEvent)(),h=(0,r.createEvent)(),g=(0,r.createEvent)(),_=(0,r.createEvent)(),v=(0,r.createEvent)(),y=(0,r.createEvent)(),b=(0,r.createEvent)(),x=(0,r.createEvent)(),S=(0,r.createEvent)(),C=u.componentStore,w=j.store(`transitioning`),E=i.history.entriesStore.map(e=>e.filter(e=>e.instanceId===p)),D=E.map(e=>e.filter(e=>o(e.node))),M=D.map(e=>e.length>=2),N=E.map(e=>e.at(-1)?.node||null),P=j.store(null);(0,r.sample)({clock:[N,i.steps.listStore],source:{steps:i.steps.listStore,node:N},filter:({node:e})=>e!==null&&o(e),fn:({steps:e,node:t})=>t&&o(t)?e.find(e=>e.id===t.stepId)??null:null,target:P});let F=(0,r.combine)(i.steps.listStore,D,(e,t)=>{let n=t.at(-2);if(!n||!o(n.node))return null;let r=n.node;return e.find(e=>e.id===r.stepId)||null}),re=(0,r.combine)(u.treeStore,N,({nodes:e,edges:t},n)=>n?T(e,t,n):[]),I=(0,r.combine)(u.treeStore,N,({nodes:e,edges:t},n)=>n?te(e,t,n):[-1,-1]),L=(0,r.combine)(u.treeStore,N,({nodes:e,edges:t},n)=>n?ee(e,t,n):[-1,-1]),R=j.store(!1),z=(0,r.createApi)(R,{open:()=>!0,close:()=>!1,toggle:e=>!e,set:(e,t)=>t}),ie=(0,r.createEffect)(()=>{i.history.back({instanceId:p})}),ae=(0,r.attach)({source:u.treeStore,effect:(e,t)=>{let n=e.nodes.find(e=>o(e)&&e.stepId===t);n&&i.history.push({instanceId:p,experienceId:u.id,node:n})}}),oe=(0,r.attach)({source:u.treeStore,effect:(e,t)=>{let n=e.steps.find(e=>e.key===t);if(!n)return;let r=e.nodes.find(e=>o(e)&&e.stepId===n.id);r&&i.history.push({instanceId:p,experienceId:u.id,node:r})}}),B=(0,r.attach)({source:N,effect:e=>{}}),V=(0,r.attach)({source:u.treeStore,effect:async({nodes:e})=>O(e)}),H=(0,r.attach)({source:u.treeStore,effect:async({nodes:e,edges:t},n)=>{if(c(n))return k(n,e,t)}}),U=(0,r.attach)({source:u.treeStore,effect:async({nodes:t,edges:n,conditions:r},o)=>{if(!a(o))return;let s=r.find(e=>e.id===o.conditionId)?.logic;return s?ne(!!await e.t(i,s),o.id,t,n):void 0}}),W=(0,r.attach)({source:{tree:u.treeStore,actions:i.actions.listStore,snapshot:i.stateSnapshotStore},effect:async({tree:e,actions:t,snapshot:n},r)=>{let{nodes:i,edges:a}=e;if(!l(r))return;let o=r.actionKey;if(!o){`${r.id}`;return}let s=t.find(e=>e.key===o)?.action;if(typeof s!=`function`)return`${o}`,A(!1,r.id,i,a)??null;let c=!0;try{`${o}`,await s({...n,args:[]},{experience:Z})}catch{`${o}`,c=!1}let u=A(c,r.id,i,a);if(!u){let e=a.some(e=>e.sourceNodeId===r.id)?`no edge for its outcome`:`no outgoing edge`;return`${r.id}${e}`,null}return`${o}${u.id}`,u}}),G=(0,r.createEffect)(e=>{s(e)&&i.experiences.launch({key:e.experienceKey})}),K=(0,r.attach)({source:[N,u.treeStore],effect:async([e,{nodes:t,edges:n}])=>k(e,t,n)}),q=(0,r.attach)({source:[N,u.treeStore],effect:async([e,{nodes:t,edges:n}])=>k(e,t,n)}),J=(0,r.createEffect)(e=>{i.history.push({instanceId:p,experienceId:u.id,node:e})}),Y=(0,r.attach)({source:u.configStore,effect:async({initializeOpenLogic:t})=>f?.initialiseOpen===void 0?e.n(t)?!!await e.t(i,t):t??!1:f.initialiseOpen}),X=(0,r.combine)(C,i.frameworks.listStore,(e,t)=>{if(!e)return null;let n=t.find(t=>t.name===e.component.frameworkName);return n?{component:e,framework:n}:null},{skipVoid:!1}),Z,se=(0,r.attach)({source:X,effect:e=>{if(!e)return;if(!d){`${u.id}`;return}let n=t.n(d);try{e.framework.render(n,e.component.component,i,Z)}catch{}}});Z=Object.freeze({id:p,experienceKey:u.key,experienceId:u.id,experienceName:u.name,configStore:u.configStore,target:d,componentStore:C,componentAndFrameworkStore:X,stateStore:w,isOpenStore:R,open:z.open,close:z.close,toggleOpen:z.toggle,setOpen:z.set,treeStore:u.treeStore,currentNodeStore:N,currentStepStore:P,previousStepStore:F,nextReachableStepNodesStore:re,stepsToOriginStore:I,stepsToLeafStore:L,goToNextStep:h,goToPreviousStep:g,goToStepById:_,goToStepByKey:v,reset:y,stepsHistoryStore:D,isResumableStore:M,restart:b,mountFx:se});let Q=(0,r.createEvent)(),$=(0,r.createEvent)();return(0,r.sample)({clock:N,target:Q}),(0,r.sample)({clock:Q,filter:e=>e===null,target:V}),(0,r.sample)({clock:Q,filter:e=>e!==null,target:$}),(0,r.split)({source:$,match:e=>a(e)?`condition`:o(e)?`step`:s(e)?`launchExperience`:c(e)?`origin`:l(e)?`action`:`other`,cases:{origin:H,condition:U,step:B,launchExperience:G,action:W,__:(0,r.createEvent)()}}),(0,r.sample)({clock:[U.doneData,H.doneData,V.doneData,q.doneData,K.doneData,W.doneData],filter:Boolean,target:J}),(0,r.sample)({clock:h,target:q}),(0,r.sample)({clock:h,source:P,filter:Boolean,target:i.eventBus.prepend(e=>({type:`step_submit`,step:e,experience:Z}))}),(0,r.sample)({clock:q.done,source:P,filter:Boolean,target:i.eventBus.prepend(e=>({type:`step_submit_success`,step:e,experience:Z}))}),(0,r.sample)({clock:q.fail,source:P,filter:Boolean,target:i.eventBus.prepend(e=>({type:`step_submit_error`,step:e,experience:Z}))}),(0,r.sample)({clock:g,target:ie}),(0,r.sample)({clock:_,target:ae}),(0,r.sample)({clock:v,target:oe}),(0,r.sample)({clock:[y,b],fn:()=>({instanceId:p}),target:i.history.clearForInstance}),(0,r.sample)({clock:b,target:(0,r.createEffect)(()=>{i.responses.clearByExperience(u.id)})}),(0,r.sample)({source:(0,r.combine)([U.pending,H.pending,V.pending,q.pending,K.pending,W.pending]),fn:e=>e.some(Boolean)?`transitioning`:`ready`,target:w}),(0,r.sample)({clock:B.doneData,source:P,filter:Boolean,target:i.eventBus.prepend(e=>({type:`step_enter`,step:e,experience:Z}))}),(0,r.sample)({clock:S,target:Y}),(0,r.sample)({source:Y.doneData,fn:Boolean,target:R}),(0,r.sample)({source:N,clock:m,filter:e=>e?c(e):!0,target:K}),(0,r.sample)({source:R,filter:Boolean,target:m}),(0,r.sample)({source:R,filter:Boolean,target:i.eventBus.prepend(()=>({type:`experience_open`,experience:Z}))}),(0,r.sample)({source:R,filter:e=>!e,target:i.eventBus.prepend(()=>({type:`experience_close`,experience:Z}))}),(0,r.sample)({clock:x,target:[S]}),x(),Z});function N(e){return(0,i.invoke)(M,e)}var P=(0,i.createFactory)(({client:e})=>{let n=j.store({}),i=(0,r.createEvent)(),a=(0,r.createEvent)(),o=(0,r.createEvent)(),s=(0,r.createApi)(n,{register(e,t){let n=[...e[t.experienceId]??[]];return n.push(t),{...e,[t.experienceId]:n}},unregister(e,t){let n=t.experienceId,r=e[n]?.filter(e=>e!==t);return{...e,[n]:r??[]}}}),c=(0,r.createEffect)(({experience:t,target:n,options:r})=>N({client:e,experience:t,target:n,options:r})),l=(0,r.createEffect)(e=>{s.register(e)}),u=(0,r.createEffect)(e=>{e.target&&t.s(e.target,()=>{o(e)})}),d=(0,r.createEffect)(e=>{s.unregister(e)}),f=(0,r.createEffect)(async e=>{await e.mountFx()});(0,r.sample)({clock:i,target:c}),(0,r.sample)({clock:o,target:d}),(0,r.sample)({clock:c.doneData,target:[l,u,a]}),(0,r.sample)({clock:c.doneData,target:e.eventBus.prepend(e=>({type:`experience_initialize`,experience:e}))}),(0,r.sample)({clock:a,target:f});function p(e,t,n){i({experience:e,target:t,options:n})}let m=n.map(e=>Object.values(e).flat());function h(e){return m.map(t=>t.filter(t=>t.experienceKey===e),{skipVoid:!1})}function g(e){return n.map(t=>t[e]||[],{skipVoid:!1})}return{spawn:p,getByExperienceKey:h,getByExperienceId:g,listStore:m}});function F(e){return(0,i.invoke)(P,e)}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return o}});