@picked/client 0.0.36-next.1 → 0.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("effector"),h=require("@withease/factories"),I=require("../experience-instance-CsMhH0DN.cjs"),F=require("../logger-BsmHUUw1.cjs"),v=require("../storage-YlR83AWP.cjs"),_=require("../id-BKIWbSTy.cjs"),q=require("../object-BbFTsGh3.cjs"),S=require("../supports-YvpQZxbh.cjs"),z=g.createDomain("experience"),K=h.createFactory(({client:t,experience:e})=>{const r=z.store(e),n=g.createApi(r,{merge(a,f){return{...a,...f.experience}}}),i=r.map(a=>({name:a.name,decisionLogic:a.condition??a.decide,targetSelectors:a.targets,initializeOpenLogic:e.initializeOpen})),u=t.components.listStore.map(a=>a.find(f=>f.name===`experience:${e.id}`)||a.find(f=>f.name==="experience"),{skipVoid:!1}),o=r.map(a=>({steps:a.steps,nodes:a.nodes,edges:a.edges,conditionals:a.conditionals})),s=e.actions??[];return{id:e.id,configStore:i,treeStore:o,componentStore:u,actions:s,merge:n.merge}});function W(t){return h.invoke(K,t)}const H=h.createFactory(({client:t})=>{const e=z.store({}),r=g.createApi(e,{register(o,s){return{...o,[s.id]:s}}});function n(o){const s=e.getState()[o.id];if(s){s.merge({experience:o,strategy:"override"});return}const a=W({client:t,experience:o});r.register(a)}const i=e.map(o=>Object.values(o));function u(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getById:u,listStore:i}});function G(t){return h.invoke(H,t)}const Y=(t,e)=>{e.register(t)},U=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=I.getTargetElements(r,e.id);n.forEach(({elements:u})=>u.forEach(o=>I.tagTargetElement(o,e.id))),I.createAppHosts(n,e.id).forEach(u=>{t.experienceInstances.spawn(e,u)})},B=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await J(t,e)&&U(t,e)}))},J=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return I.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&I.isRulesLogic(r)?await I.evaluateRuleLogic(t,r)===!0:!0},Q=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const u=r[n]??{};r[n]=Object.freeze({...u,...i})}},X=g.createDomain("component"),Z=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ee(t){return h.invoke(Z,t)}const te=h.createFactory(({client:t})=>{const e=X.store({}),r=g.createApi(e,{register(o,s){return{...o,[s.name]:s}}});function n(o,s){e.getState()[o]&&F.logger("warn",`Component '${o}' already registered. Registering again will override the previous registration.`);const f=ee({client:t,name:o,component:s});r.register(f)}const i=e.map(o=>Object.values(o));function u(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function re(t){return h.invoke(te,t)}const D=(t,e,r)=>{r.register(t,e)},ne=g.createDomain("framework"),se=h.createFactory(({client:t})=>{const e=ne.store({}),r=g.createApi(e,{register(o,s){return{...o,[s.name]:s.framework}}});function n(o,s){e.getState()[o]&&F.logger("warn",`Framework '${o}' already registered. Registering again will override the previous registration.`),r.register({name:o,framework:s})}const i=e.map(o=>Object.values(o));function u(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function ie(t){return h.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ae=6e3,ce=v.createStorageKey("last_ping","global"),ue=t=>`${t}/api/v1/ping`,de=async t=>{try{const e=Date.now(),r=v.localStore.get(ce);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<ae)return!0;const i=ue(t.apiUrl),u={projectId:t.projectId,path:window.location.pathname},o=JSON.stringify(u),s={"Content-Type":"application/json"},f=document.getElementById("picked_script")?.dataset.verceltoken;f&&(s["x-vercel-protection-bypass"]=f);const b=(await fetch(i,{method:"POST",headers:s,body:o})).ok;return b&&r.set(e),b}catch(e){return F.logger("error",e),!1}};function L(t){const e=typeof window<"u",r={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(r)}const le=g.createDomain("predicate"),pe=h.createFactory(({client:t})=>{const e=le.store({}),r=g.createApi(e,{register(s,a){return{...s,[a.name]:{name:a.name,predicate:a.predicate}}}});function n(s,a){e.getState()[s]&&F.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:a}))}const i=e.map(s=>Object.values(s));function u(s){return e.map(a=>a[s]?.predicate,{skipVoid:!1})}function o(s){const a=g.createStore(()=>{},{skipVoid:!1}),f=g.createEffect(async()=>{const k=u(s).getState();if(!k)return;const b=L(t);return(...m)=>k({...b,args:m})});return g.sample({source:{responses:t.responses.listStore,fields:t.fields.listStore},target:f}),g.sample({clock:f.doneData,filter:k=>k!==void 0,target:a}),f(),a}return{register:n,getByName:u,listStore:i,getEvokablePredicate:o}});function ge(t){return h.invoke(pe,t)}const fe=(t,e,r)=>{r.register(t,e)},C=g.createDomain("feature"),me=h.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=g.createApi(e,{register(c,d){return{...c,[d.id]:d.feature}}});function i(c,d){e.getState()[c]&&F.logger("warn",`Feature '${c}' already registered. Registering again will override the previous registration.`);const l={id:c,feature:{...d,id:c}};n.register(Object.freeze({id:c,feature:l}))}const u=g.createEffect(async({id:c,key:d,storage:p="local"})=>{const l=v.createStorageKey(`feature:${c}:${d}`,"global"),w=(p==="session"?v.sessionStore:v.localStore).get(l).boolean();return w===null?null:{id:c,key:d,bucket:w,storage:p}}),o=g.createEffect(c=>{if(!c)return null;const d=v.createStorageKey(`feature:${c.id}:${c.key}`,"global");(c.storage==="session"?v.sessionStore:v.localStore).set(d,c.bucket)}),s=new Map,a=g.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:c,resolvedFeaturesStore:d},{id:p,decide:l,key:y})=>{const w=d.find(R=>R.id===p&&R.key===y);if(w)return w;const E=c[p];if(!E)throw new Error(`Feature with id '${p}' not found`);const x=s.get(`${p}:${y}`);if(x!==void 0){const R=await x;return{id:E.id,bucket:R,key:y,storage:E.feature.storage}}const P=l();s.set(`${p}:${y}`,P);const T=await P;return{id:E.id,bucket:T,key:y,storage:E.feature.storage}}});g.sample({clock:n.register,fn:c=>{const{id:d,feature:p}=c;return{id:d,key:p.feature.key,storage:p.feature.storage}},target:u}),g.sample({source:e,clock:a.doneData,fn:(c,d)=>{const{id:p,bucket:l,storage:y}=d,w=c[p]?.feature.key;return w?{key:w,id:p,bucket:l,storage:y}:null},target:o});const f=g.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:c,resolvedFeaturesStore:d})=>Object.values(c).map(p=>{const l=d.find(y=>y.id===p.id&&y.key===p.feature.key);return l?{id:p.id,name:p.feature.name,key:p.feature.key,getBucket:()=>({id:p.id,bucket:l.bucket}),isResolved:!0}:{id:p.id,name:p.feature.name,key:p.feature.key,getBucket:async()=>await a(p.feature),isResolved:!1}}));g.sample({clock:a.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:c},{id:d,key:p})=>!c.some(y=>y.id===d&&y.key===p),fn:(c,d)=>d,target:t.eventBus.prepend(c=>({type:"feature_decide",feature:c}))}),g.sample({clock:[u.doneData,a.doneData],source:r,fn:(c,d)=>!d||c.some(l=>l.id===d.id&&l.key===d.key)?c:[...c,d],target:r});function k(c){return f.map(d=>d.find(p=>p.id===c))}function b(c){return e.map(d=>d[c],{skipVoid:!1})}function m(c){const d=g.createStore(async()=>{},{skipVoid:!1}),p=g.createEffect(async()=>{const l=k(c).getState();if(l)return async()=>(await l.getBucket()).bucket});return g.sample({source:r,filter:l=>l.some(y=>y.id===c),target:p}),g.sample({clock:p.doneData,filter:l=>l!==void 0,target:d}),p(),d}return{register:i,getById:k,getByName:b,listStore:f,getEvokableFeature:m}});function ye(t){return h.invoke(me,t)}const he=(t,e,r)=>{r.register(t,e)},j=g.createDomain("history");function $(t,e){return{id:_.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const Se=h.createFactory(()=>{const t=j.store({entries:[]}),e=j.event(),r=j.event(),n=j.event(),i=j.event();t.on(e,(o,s)=>({entries:[...o.entries,$(s.experienceId,s.node)]})),t.on(r,(o,s)=>({entries:[...o.entries.slice(0,-1),$(s.experienceId,s.node)]})),t.on(i,(o,s)=>s);function u(o,s){const a={lastStepIndex:-1,secondLastStepIndex:-1};for(let f=o.length-1;f>=0;f--){const k=o[f],b=k?.node;if(!(!b||!I.isStepNode(b))&&!(s&&k?.experienceId!==s))if(a.lastStepIndex===-1)a.lastStepIndex=f;else{a.secondLastStepIndex=f;break}}return a}return t.on(n,(o,s)=>{const{secondLastStepIndex:a}=u(o.entries,s.experienceId),f=a!==-1?o.entries.slice(0,a+1):o.entries;return{...o,entries:f}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(o=>o.entries)}});function ke(){return h.invoke(Se)}const ve=()=>g.createEvent(),we=g.createDomain("field"),Ie=h.createFactory(()=>{const t=we.store({}),e=g.createApi(t,{register(s,a){return{...s,[a.field.id]:a.field}}});function r(s){e.register({field:s})}function n(s,a){const f=u(s).getState();if(!f)return;const k=Object.assign({},f,{...a});e.register({field:{...k}})}const i=t.map(s=>Object.values(s));function u(s){return t.map(a=>a[s]||null)}function o(s){return t.map(a=>Object.values(a).find(f=>f.name===s)||null)}return{register:r,update:n,getById:u,listStore:i,getByName:o}});function be(){return h.invoke(Ie)}const Fe=(t,e)=>{e.register(t)},Ee=g.createDomain("action"),xe=h.createFactory(()=>{const t=Ee.store({}),e=g.createApi(t,{register(o,s){return{...o,[s.name]:{name:s.name,action:s.action}}}});function r(o,s){e.register({name:o,action:s})}const n=t.map(o=>Object.values(o));function i(o){return t.map(s=>s[o],{skipVoid:!1})}function u(o){return t.map(s=>{const a=s[o];return a?a.action:void 0},{skipVoid:!1})}return{register:r,getByName:i,listStore:n,getEvokableAction:u}});function je(){return h.invoke(xe)}const Re=(t,e,r)=>{r.register(t,e)};function O(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Ae=g.createDomain("response"),Pe=h.createFactory(({client:t})=>{const e=Ae.store({}),r=g.createEvent(),n=g.createEvent(),i=g.createApi(e,{register(m,c){return{...m,[c.fieldId]:c.response}},registerBatch(m,c){return{...m,...c}},clear(m,c){const{[c]:d,...p}=m;return p},clearAll(){return{}}});function u(m,c){if(typeof m=="string"){if(c===void 0)throw new Error("Response is required when registering a single field");i.register({fieldId:m,response:c})}else i.registerBatch(m)}async function o(m){const c=[];return await Promise.allSettled(Object.entries(m).map(async([d,p])=>{let l=p;const y=t.fields.getById(d).getState();if(!y){c.push({fieldId:d,userMessage:`Field '${d}' not found`,systemMessage:`No field with ID '${d}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:l});return}if(y.multiple&&(typeof l=="string"||typeof l=="number"||typeof l=="boolean")&&(l=[l]),y.validation&&!q.isEmpty(y.validation)&&!O(l)){const w=await I.evaluateRuleLogic(t,y.validation,{$input:l});if(typeof w=="string"){c.push({fieldId:d,userMessage:w,systemMessage:`Field validation resulted in an error: ${w}.`,value:l});return}if(w===!1){c.push({fieldId:d,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:l});return}}if(y.required&&O(l)){c.push({fieldId:d,userMessage:"This field is required",systemMessage:"Field is required.",value:l});return}if(!y.multiple&&Array.isArray(l)&&l.length>1){c.push({fieldId:d,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:l});return}if(y.options){const w=y.options.map(x=>x.value),E=Array.isArray(l)?l:[l];Array.isArray(l)&&(E.every(x=>w.includes(x))||c.push({fieldId:d,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${w.join(", ")}`,value:l}))}})),{responsesToCommit:m,validationErrors:c}}async function s(m){const{responsesToCommit:c,validationErrors:d}=await o(m);return d.length?{errors:d}:(i.registerBatch(c),{errors:[]})}const a=e.map(m=>m),f=e.map(m=>Object.keys(m).map(d=>({fieldId:d,value:m[d]})));function k(m){const c=t.fields.getById(m),d=e.map(p=>p[m]||null);return g.combine({f:c,r:d},({f:p,r:l})=>l||(p?.defaultValue?p.defaultValue:null))}function b(m){const c=t.fields.getByName(m);return g.combine({f:c,s:e},({f:d,s:p})=>{const l=d&&p[d.id]||null;return l||(d?.defaultValue?d.defaultValue:null)})}return g.sample({clock:r,target:i.clearAll}),g.sample({clock:n,target:i.clear}),{register:u,clearAll:r,clear:n,commit:s,getResponsesToCommit:o,listStore:f,getAllStore:a,getByFieldId:k,getByFieldName:b}});function Be(t){return h.invoke(Pe,t)}const De=()=>"0.0.36-next.1";function Ce(){if(S.supportsDocument()){const t=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of t)if(e?.dataset.api)return e.dataset.api}return"https://api.picked.app"}function $e(){if(!S.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&r.add(i);for(const i of r){const u=i.replace("picked-","");e[u]=t.getAll(i)}const n=v.createStorageKey("s");if(r.size>0)v.sessionStore.set(n,e);else{const i=v.sessionStore.get(n);if(i)return i.json()||{}}return e}function Oe(){if(S.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),r=Math.random().toString(36).substring(2,15),n=Math.random().toString(36).substring(2,15);return`${t}-${e}-${r}-${n}`}const ze=v.createStorageKey("session","global"),Ue=()=>{const t=v.localStore.get(ze);let e;t.isSet()&&(e=t.json());const r=i=>t.set({id:i.id,isUser:i.isUser,identifiers:i.identifiers}),n={id:e?.id??Oe(),isUser:e?.isUser??void 0,identifiers:e?.identifiers??void 0,setIsUser(i){this.isUser=i,r(this)},setIdentifier(i,u){this.identifiers={...this.identifiers,[i]:u},r(this)},removeIdentifier(i){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([u])=>u!==i)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,r(this))}};return r(n),n},Le=()=>S.supportsLocalStorage()?Ue():null;function V(){if(S.supportsWindow())return globalThis.window.pickedConfig}function Ve(){if(!S.supportsWindow())return;const t=V(),e=t?.organizationId,r=t?.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function Me(){if(!S.supportsDocument())return;const t=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!t)return;const e=t.dataset.organizationid||t.getAttribute("organization-id"),r=t.dataset.projectid||t.getAttribute("project-id");return e&&r?{organizationId:e,projectId:r}:void 0}function Ne(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=Ve();if(n)return n;const i=Me();if(i)return i;throw new Error(`organizationId and projectId are required. You can provide them via one of:
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("effector"),h=require("@withease/factories"),I=require("../experience-instance-CsMhH0DN.cjs"),F=require("../logger-BsmHUUw1.cjs"),v=require("../storage-YlR83AWP.cjs"),_=require("../id-BKIWbSTy.cjs"),q=require("../object-BbFTsGh3.cjs"),S=require("../supports-YvpQZxbh.cjs"),z=g.createDomain("experience"),K=h.createFactory(({client:t,experience:e})=>{const r=z.store(e),n=g.createApi(r,{merge(a,f){return{...a,...f.experience}}}),i=r.map(a=>({name:a.name,decisionLogic:a.condition??a.decide,targetSelectors:a.targets,initializeOpenLogic:e.initializeOpen})),u=t.components.listStore.map(a=>a.find(f=>f.name===`experience:${e.id}`)||a.find(f=>f.name==="experience"),{skipVoid:!1}),o=r.map(a=>({steps:a.steps,nodes:a.nodes,edges:a.edges,conditionals:a.conditionals})),s=e.actions??[];return{id:e.id,configStore:i,treeStore:o,componentStore:u,actions:s,merge:n.merge}});function W(t){return h.invoke(K,t)}const H=h.createFactory(({client:t})=>{const e=z.store({}),r=g.createApi(e,{register(o,s){return{...o,[s.id]:s}}});function n(o){const s=e.getState()[o.id];if(s){s.merge({experience:o,strategy:"override"});return}const a=W({client:t,experience:o});r.register(a)}const i=e.map(o=>Object.values(o));function u(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getById:u,listStore:i}});function G(t){return h.invoke(H,t)}const Y=(t,e)=>{e.register(t)},U=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=I.getTargetElements(r,e.id);n.forEach(({elements:u})=>u.forEach(o=>I.tagTargetElement(o,e.id))),I.createAppHosts(n,e.id).forEach(u=>{t.experienceInstances.spawn(e,u)})},B=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await J(t,e)&&U(t,e)}))},J=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return I.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&I.isRulesLogic(r)?await I.evaluateRuleLogic(t,r)===!0:!0},Q=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const u=r[n]??{};r[n]=Object.freeze({...u,...i})}},X=g.createDomain("component"),Z=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ee(t){return h.invoke(Z,t)}const te=h.createFactory(({client:t})=>{const e=X.store({}),r=g.createApi(e,{register(o,s){return{...o,[s.name]:s}}});function n(o,s){e.getState()[o]&&F.logger("warn",`Component '${o}' already registered. Registering again will override the previous registration.`);const f=ee({client:t,name:o,component:s});r.register(f)}const i=e.map(o=>Object.values(o));function u(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function re(t){return h.invoke(te,t)}const D=(t,e,r)=>{r.register(t,e)},ne=g.createDomain("framework"),se=h.createFactory(({client:t})=>{const e=ne.store({}),r=g.createApi(e,{register(o,s){return{...o,[s.name]:s.framework}}});function n(o,s){e.getState()[o]&&F.logger("warn",`Framework '${o}' already registered. Registering again will override the previous registration.`),r.register({name:o,framework:s})}const i=e.map(o=>Object.values(o));function u(o){return e.map(s=>s[o],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function ie(t){return h.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ae=6e3,ce=v.createStorageKey("last_ping","global"),ue=t=>`${t}/api/v1/ping`,de=async t=>{try{const e=Date.now(),r=v.localStore.get(ce);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<ae)return!0;const i=ue(t.apiUrl),u={projectId:t.projectId,path:window.location.pathname},o=JSON.stringify(u),s={"Content-Type":"application/json"},f=document.getElementById("picked_script")?.dataset.verceltoken;f&&(s["x-vercel-protection-bypass"]=f);const b=(await fetch(i,{method:"POST",headers:s,body:o})).ok;return b&&r.set(e),b}catch(e){return F.logger("error",e),!1}};function L(t){const e=typeof window<"u",r={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(r)}const le=g.createDomain("predicate"),pe=h.createFactory(({client:t})=>{const e=le.store({}),r=g.createApi(e,{register(s,a){return{...s,[a.name]:{name:a.name,predicate:a.predicate}}}});function n(s,a){e.getState()[s]&&F.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:a}))}const i=e.map(s=>Object.values(s));function u(s){return e.map(a=>a[s]?.predicate,{skipVoid:!1})}function o(s){const a=g.createStore(()=>{},{skipVoid:!1}),f=g.createEffect(async()=>{const k=u(s).getState();if(!k)return;const b=L(t);return(...m)=>k({...b,args:m})});return g.sample({source:{responses:t.responses.listStore,fields:t.fields.listStore},target:f}),g.sample({clock:f.doneData,filter:k=>k!==void 0,target:a}),f(),a}return{register:n,getByName:u,listStore:i,getEvokablePredicate:o}});function ge(t){return h.invoke(pe,t)}const fe=(t,e,r)=>{r.register(t,e)},C=g.createDomain("feature"),me=h.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=g.createApi(e,{register(c,d){return{...c,[d.id]:d.feature}}});function i(c,d){e.getState()[c]&&F.logger("warn",`Feature '${c}' already registered. Registering again will override the previous registration.`);const l={id:c,feature:{...d,id:c}};n.register(Object.freeze({id:c,feature:l}))}const u=g.createEffect(async({id:c,key:d,storage:p="local"})=>{const l=v.createStorageKey(`feature:${c}:${d}`,"global"),w=(p==="session"?v.sessionStore:v.localStore).get(l).boolean();return w===null?null:{id:c,key:d,bucket:w,storage:p}}),o=g.createEffect(c=>{if(!c)return null;const d=v.createStorageKey(`feature:${c.id}:${c.key}`,"global");(c.storage==="session"?v.sessionStore:v.localStore).set(d,c.bucket)}),s=new Map,a=g.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:c,resolvedFeaturesStore:d},{id:p,decide:l,key:y})=>{const w=d.find(R=>R.id===p&&R.key===y);if(w)return w;const E=c[p];if(!E)throw new Error(`Feature with id '${p}' not found`);const j=s.get(`${p}:${y}`);if(j!==void 0){const R=await j;return{id:E.id,bucket:R,key:y,storage:E.feature.storage}}const P=l();s.set(`${p}:${y}`,P);const T=await P;return{id:E.id,bucket:T,key:y,storage:E.feature.storage}}});g.sample({clock:n.register,fn:c=>{const{id:d,feature:p}=c;return{id:d,key:p.feature.key,storage:p.feature.storage}},target:u}),g.sample({source:e,clock:a.doneData,fn:(c,d)=>{const{id:p,bucket:l,storage:y}=d,w=c[p]?.feature.key;return w?{key:w,id:p,bucket:l,storage:y}:null},target:o});const f=g.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:c,resolvedFeaturesStore:d})=>Object.values(c).map(p=>{const l=d.find(y=>y.id===p.id&&y.key===p.feature.key);return l?{id:p.id,name:p.feature.name,key:p.feature.key,getBucket:()=>({id:p.id,bucket:l.bucket}),isResolved:!0}:{id:p.id,name:p.feature.name,key:p.feature.key,getBucket:async()=>await a(p.feature),isResolved:!1}}));g.sample({clock:a.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:c},{id:d,key:p})=>!c.some(y=>y.id===d&&y.key===p),fn:(c,d)=>d,target:t.eventBus.prepend(c=>({type:"feature_decide",feature:c}))}),g.sample({clock:[u.doneData,a.doneData],source:r,fn:(c,d)=>!d||c.some(l=>l.id===d.id&&l.key===d.key)?c:[...c,d],target:r});function k(c){return f.map(d=>d.find(p=>p.id===c))}function b(c){return e.map(d=>d[c],{skipVoid:!1})}function m(c){const d=g.createStore(async()=>{},{skipVoid:!1}),p=g.createEffect(async()=>{const l=k(c).getState();if(l)return async()=>(await l.getBucket()).bucket});return g.sample({source:r,filter:l=>l.some(y=>y.id===c),target:p}),g.sample({clock:p.doneData,filter:l=>l!==void 0,target:d}),p(),d}return{register:i,getById:k,getByName:b,listStore:f,getEvokableFeature:m}});function ye(t){return h.invoke(me,t)}const he=(t,e,r)=>{r.register(t,e)},x=g.createDomain("history");function $(t,e){return{id:_.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const Se=h.createFactory(()=>{const t=x.store({entries:[]}),e=x.event(),r=x.event(),n=x.event(),i=x.event();t.on(e,(o,s)=>({entries:[...o.entries,$(s.experienceId,s.node)]})),t.on(r,(o,s)=>({entries:[...o.entries.slice(0,-1),$(s.experienceId,s.node)]})),t.on(i,(o,s)=>s);function u(o,s){const a={lastStepIndex:-1,secondLastStepIndex:-1};for(let f=o.length-1;f>=0;f--){const k=o[f],b=k?.node;if(!(!b||!I.isStepNode(b))&&!(s&&k?.experienceId!==s))if(a.lastStepIndex===-1)a.lastStepIndex=f;else{a.secondLastStepIndex=f;break}}return a}return t.on(n,(o,s)=>{const{secondLastStepIndex:a}=u(o.entries,s.experienceId),f=a!==-1?o.entries.slice(0,a+1):o.entries;return{...o,entries:f}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(o=>o.entries)}});function ke(){return h.invoke(Se)}const ve=()=>g.createEvent(),we=g.createDomain("field"),Ie=h.createFactory(()=>{const t=we.store({}),e=g.createApi(t,{register(s,a){return{...s,[a.field.id]:a.field}}});function r(s){e.register({field:s})}function n(s,a){const f=u(s).getState();if(!f)return;const k=Object.assign({},f,{...a});e.register({field:{...k}})}const i=t.map(s=>Object.values(s));function u(s){return t.map(a=>a[s]||null)}function o(s){return t.map(a=>Object.values(a).find(f=>f.name===s)||null)}return{register:r,update:n,getById:u,listStore:i,getByName:o}});function be(){return h.invoke(Ie)}const Fe=(t,e)=>{e.register(t)},Ee=g.createDomain("action"),je=h.createFactory(()=>{const t=Ee.store({}),e=g.createApi(t,{register(o,s){return{...o,[s.name]:{name:s.name,action:s.action}}}});function r(o,s){e.register({name:o,action:s})}const n=t.map(o=>Object.values(o));function i(o){return t.map(s=>s[o],{skipVoid:!1})}function u(o){return t.map(s=>{const a=s[o];return a?a.action:void 0},{skipVoid:!1})}return{register:r,getByName:i,listStore:n,getEvokableAction:u}});function xe(){return h.invoke(je)}const Re=(t,e,r)=>{r.register(t,e)};function O(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Ae=g.createDomain("response"),Pe=h.createFactory(({client:t})=>{const e=Ae.store({}),r=g.createEvent(),n=g.createEvent(),i=g.createApi(e,{register(m,c){return{...m,[c.fieldId]:c.response}},registerBatch(m,c){return{...m,...c}},clear(m,c){const{[c]:d,...p}=m;return p},clearAll(){return{}}});function u(m,c){if(typeof m=="string"){if(c===void 0)throw new Error("Response is required when registering a single field");i.register({fieldId:m,response:c})}else i.registerBatch(m)}async function o(m){const c=[];return await Promise.allSettled(Object.entries(m).map(async([d,p])=>{let l=p;const y=t.fields.getById(d).getState();if(!y){c.push({fieldId:d,userMessage:`Field '${d}' not found`,systemMessage:`No field with ID '${d}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:l});return}if(y.multiple&&(typeof l=="string"||typeof l=="number"||typeof l=="boolean")&&(l=[l]),y.validation&&!q.isEmpty(y.validation)&&!O(l)){const w=await I.evaluateRuleLogic(t,y.validation,{$input:l});if(typeof w=="string"){c.push({fieldId:d,userMessage:w,systemMessage:`Field validation resulted in an error: ${w}.`,value:l});return}if(w===!1){c.push({fieldId:d,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:l});return}}if(y.required&&O(l)){c.push({fieldId:d,userMessage:"This field is required",systemMessage:"Field is required.",value:l});return}if(!y.multiple&&Array.isArray(l)&&l.length>1){c.push({fieldId:d,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:l});return}if(y.options){const w=y.options.map(j=>j.value),E=Array.isArray(l)?l:[l];Array.isArray(l)&&(E.every(j=>w.includes(j))||c.push({fieldId:d,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${w.join(", ")}`,value:l}))}})),{responsesToCommit:m,validationErrors:c}}async function s(m){const{responsesToCommit:c,validationErrors:d}=await o(m);return d.length?{errors:d}:(i.registerBatch(c),{errors:[]})}const a=e.map(m=>m),f=e.map(m=>Object.keys(m).map(d=>({fieldId:d,value:m[d]})));function k(m){const c=t.fields.getById(m),d=e.map(p=>p[m]||null);return g.combine({f:c,r:d},({f:p,r:l})=>l||(p?.defaultValue?p.defaultValue:null))}function b(m){const c=t.fields.getByName(m);return g.combine({f:c,s:e},({f:d,s:p})=>{const l=d&&p[d.id]||null;return l||(d?.defaultValue?d.defaultValue:null)})}return g.sample({clock:r,target:i.clearAll}),g.sample({clock:n,target:i.clear}),{register:u,clearAll:r,clear:n,commit:s,getResponsesToCommit:o,listStore:f,getAllStore:a,getByFieldId:k,getByFieldName:b}});function Be(t){return h.invoke(Pe,t)}const De=()=>"0.0.36";function Ce(){if(S.supportsDocument()){const t=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of t)if(e?.dataset.api)return e.dataset.api}return"https://api.picked.app"}function $e(){if(!S.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&r.add(i);for(const i of r){const u=i.replace("picked-","");e[u]=t.getAll(i)}const n=v.createStorageKey("s");if(r.size>0)v.sessionStore.set(n,e);else{const i=v.sessionStore.get(n);if(i)return i.json()||{}}return e}function Oe(){if(S.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),r=Math.random().toString(36).substring(2,15),n=Math.random().toString(36).substring(2,15);return`${t}-${e}-${r}-${n}`}const ze=v.createStorageKey("session","global"),Ue=()=>{const t=v.localStore.get(ze);let e;t.isSet()&&(e=t.json());const r=i=>t.set({id:i.id,isUser:i.isUser,identifiers:i.identifiers}),n={id:e?.id??Oe(),isUser:e?.isUser??void 0,identifiers:e?.identifiers??void 0,setIsUser(i){this.isUser=i,r(this)},setIdentifier(i,u){this.identifiers={...this.identifiers,[i]:u},r(this)},removeIdentifier(i){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([u])=>u!==i)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,r(this))}};return r(n),n},Le=()=>S.supportsLocalStorage()?Ue():null;function V(){if(S.supportsWindow())return globalThis.window.pickedConfig}function Ve(){if(!S.supportsWindow())return;const t=V(),e=t?.organizationId,r=t?.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function Me(){if(!S.supportsDocument())return;const t=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!t)return;const e=t.dataset.organizationid||t.getAttribute("organization-id"),r=t.dataset.projectid||t.getAttribute("project-id");return e&&r?{organizationId:e,projectId:r}:void 0}function Ne(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=Ve();if(n)return n;const i=Me();if(i)return i;throw new Error(`organizationId and projectId are required. You can provide them via one of:
2
2
  (1) createClient({ organizationId, projectId }) options;
3
3
  (2) window.pickedConfig = { organizationId, projectId };
4
- (3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes data-organizationid/data-projectid (or organization-id/project-id) attributes.`)}function A(t){return t==null||t===""||Number.isNaN(t)}const Te={default:(t,e)=>A(t)?String(e??""):String(t),append:(t,e)=>e&&!A(t)?`${t} ${e}`:t,prepend:(t,e)=>e&&!A(t)?`${e} ${t}`:t,upper:t=>typeof t=="string"?t.toUpperCase():t,lower:t=>typeof t=="string"?t.toLowerCase():t,capitalize:t=>typeof t=="string"?t.charAt(0).toUpperCase()+t.slice(1):t,list:t=>{if(!t||typeof t!="object")return t;const e=new Intl.ListFormat("en",{style:"long",type:"conjunction"});if(Array.isArray(t))return e.format(t.map(String));if(t instanceof Map){const r=Array.from(t.entries()).map(([n,i])=>`${n}: ${i}`);return e.format(r)}return t instanceof Set?e.format(Array.from(t).map(String)):t}};function _e(t){return typeof t=="object"&&t!==null}function qe(t,e){let r=e;for(const n of t.split("."))if(_e(r)&&n in r)r=r[n];else return;return typeof r=="function"?r():r}function Ke(t,e){const r=t.split("|").map(u=>u.trim()),n=r.shift()??"";let i=qe(n,e);for(const u of r){const[o,...s]=u.split(":"),a=o?.trim()??"",f=s.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g,""),k=Te[a];k&&(i=k(i,f))}return A(i)?"":typeof i=="object"?JSON.stringify(i):String(i)}function We(t,e){let r="",n=0;for(;n<t.length;)if(t[n]==="{"&&t[n+1]==="{"){n+=2;let i="";for(;n<t.length;){if(t[n]==="}"&&t[n+1]==="}"){n+=2;break}i+=t[n++]}r+=Ke(i.trim(),e)}else r+=t[n++];return r}class M{static logger=F.logger;options;isReady=!1;project;plugins={};eventBus=ve();organizationId;projectId;apiUrl;session;precondition;condition;searchParams=$e();history=ke();components=re({client:this});experienceInstances=I.createExperienceInstanceIndex({client:this});experiences=G({client:this});frameworks=ie({client:this});predicates=ge({client:this});features=ye({client:this});responses=Be({client:this});fields=be();actions=je();constructor(e){F.logger("info","Picked client initializing.");const{organizationId:r,projectId:n}=Ne(e);this.organizationId=r,this.projectId=n,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Ce(),this.session=Le(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:"load",version:De()}),F.logger("info","Picked client initialized.")}start(){de(this),(async()=>{if(!S.supportsDocument())return;let r;typeof this.precondition>"u"?r=!0:typeof this.precondition=="boolean"?r=this.precondition:r=await I.evaluateRuleLogic(this,this.precondition)===!0;let n;r&&(this.condition===void 0?n=!0:typeof this.condition=="boolean"?n=this.condition:n=await I.evaluateRuleLogic(this,this.condition)===!0);const i=r&&n===!0;if(typeof n=="boolean"&&this.session){const u=n;this.session.setIsUser(u),this.eventBus({type:"user_decide",value:u})}this.eventBus({type:"initialize"}),document.body&&i&&B(this),await I.domInteractive(),i&&B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session})})()}registerFramework(e){oe(e,this.frameworks)}registerComponent(e,r){D(e,r,this.components)}registerPlugin(e){Q(this,e,this.plugins)}registerFeature(e,r){he(e,r,this.features)}registerPredicate(e,r){fe(e,r,this.predicates)}registerField(e){Fe(e,this.fields)}registerAction(e,r){Re(e,r,this.actions)}registerExperience(e){e.component&&D(`experience:${e.id}`,e.component,this.components),Y(e,this.experiences)}getStateSnapshot(){return L(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){F.logger("warn",`Experience with id '${e}' not found.`);return}U(this,r)}setupPlugins(){this.options.plugins?.forEach(e=>{if(Array.isArray(e)){e.forEach(n=>{this.registerPlugin(n)});return}const r=typeof e=="function"?e():e;if(Array.isArray(r)){r.forEach(n=>this.registerPlugin(n));return}this.registerPlugin(r)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const i=typeof n=="function"?n():n;this.registerFeature(r,i)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,i]=r.split(":");if(!n||!i)return;let u=i;u==="true"&&(u=!0),u==="false"&&(u=!1),this.registerFeature(n,{key:`${u}`,name:n,decide:()=>u,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){F.logger("warn",`Predicate "${r}" is not a function.`);return}this.registerPredicate(r,n)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){F.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}renderString=(e,r)=>{const n=this.responses.listStore.getState().reduce((i,u)=>(i[u.fieldId]=u.value,i),{});return We(e,{...r,responses:n})}}function N(t){return t.options?.some(e=>"condition"in e)??!1}function He(t){return t.some(e=>e.condition||N(e))}async function Ge(t,e){return e.length===0||!He(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await I.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!N(n))return n;const o=(await Promise.all(n.options.map(async a=>a.condition?await I.evaluateRuleLogic(t,a.condition)?a:null:a))).filter(a=>a!==null);return o.length===n.options.length?n:o.length===0?null:{...n,options:o}}))).filter(n=>n!==null)}const Ye=t=>{const e=new M(t);return S.bindClient(e),e};exports.evaluateRuleLogic=I.evaluateRuleLogic;exports.isPickedRoot=I.isPickedRoot;exports.createStorageKey=v.createStorageKey;exports.localStore=v.localStore;exports.sessionStore=v.sessionStore;exports.subscribe=v.subscribe;exports.supportsCookies=S.supportsCookies;exports.supportsCryptoRandomUUID=S.supportsCryptoRandomUUID;exports.supportsDocument=S.supportsDocument;exports.supportsHistory=S.supportsHistory;exports.supportsIntersectionObserver=S.supportsIntersectionObserver;exports.supportsLocalStorage=S.supportsLocalStorage;exports.supportsLocation=S.supportsLocation;exports.supportsSessionStorage=S.supportsSessionStorage;exports.supportsShadowRoot=S.supportsShadowRoot;exports.supportsWebComponents=S.supportsWebComponents;exports.supportsWindow=S.supportsWindow;exports.Picked=M;exports.createClient=Ye;exports.getPickedConfig=V;exports.getStepFields=Ge;
4
+ (3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes data-organizationid/data-projectid (or organization-id/project-id) attributes.`)}function A(t){return t==null||t===""||Number.isNaN(t)}const Te={default:(t,e)=>A(t)?String(e??""):String(t),append:(t,e)=>e&&!A(t)?`${t} ${e}`:t,prepend:(t,e)=>e&&!A(t)?`${e} ${t}`:t,upper:t=>typeof t=="string"?t.toUpperCase():t,lower:t=>typeof t=="string"?t.toLowerCase():t,capitalize:t=>typeof t=="string"?t.charAt(0).toUpperCase()+t.slice(1):t,list:t=>{if(!t||typeof t!="object")return t;const e=new Intl.ListFormat("en",{style:"long",type:"conjunction"});if(Array.isArray(t))return e.format(t.map(String));if(t instanceof Map){const r=Array.from(t.entries()).map(([n,i])=>`${n}: ${i}`);return e.format(r)}return t instanceof Set?e.format(Array.from(t).map(String)):t}};function _e(t){return typeof t=="object"&&t!==null}function qe(t,e){let r=e;for(const n of t.split("."))if(_e(r)&&n in r)r=r[n];else return;return typeof r=="function"?r():r}function Ke(t,e){const r=t.split("|").map(u=>u.trim()),n=r.shift()??"";let i=qe(n,e);for(const u of r){const[o,...s]=u.split(":"),a=o?.trim()??"",f=s.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g,""),k=Te[a];k&&(i=k(i,f))}return A(i)?"":typeof i=="object"?JSON.stringify(i):String(i)}function We(t,e){let r="",n=0;for(;n<t.length;)if(t[n]==="{"&&t[n+1]==="{"){n+=2;let i="";for(;n<t.length;){if(t[n]==="}"&&t[n+1]==="}"){n+=2;break}i+=t[n++]}r+=Ke(i.trim(),e)}else r+=t[n++];return r}class M{static logger=F.logger;options;isReady=!1;project;plugins={};eventBus=ve();organizationId;projectId;apiUrl;session;precondition;condition;searchParams=$e();history=ke();components=re({client:this});experienceInstances=I.createExperienceInstanceIndex({client:this});experiences=G({client:this});frameworks=ie({client:this});predicates=ge({client:this});features=ye({client:this});responses=Be({client:this});fields=be();actions=xe();constructor(e){F.logger("info","Picked client initializing.");const{organizationId:r,projectId:n}=Ne(e);this.organizationId=r,this.projectId=n,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Ce(),this.session=Le(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:"load",version:De()}),F.logger("info","Picked client initialized.")}start(){de(this),(async()=>{if(!S.supportsDocument())return;let r;typeof this.precondition>"u"?r=!0:typeof this.precondition=="boolean"?r=this.precondition:r=await I.evaluateRuleLogic(this,this.precondition)===!0;let n;r&&(this.condition===void 0?n=!0:typeof this.condition=="boolean"?n=this.condition:n=await I.evaluateRuleLogic(this,this.condition)===!0);const i=r&&n===!0;if(typeof n=="boolean"&&this.session){const u=n;this.session.setIsUser(u),this.eventBus({type:"user_decide",value:u})}this.eventBus({type:"initialize"}),document.body&&i&&B(this),await I.domInteractive(),i&&B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session})})()}registerFramework(e){oe(e,this.frameworks)}registerComponent(e,r){D(e,r,this.components)}registerPlugin(e){Q(this,e,this.plugins)}registerFeature(e,r){he(e,r,this.features)}registerPredicate(e,r){fe(e,r,this.predicates)}registerField(e){Fe(e,this.fields)}registerAction(e,r){Re(e,r,this.actions)}registerExperience(e){e.component&&D(`experience:${e.id}`,e.component,this.components),Y(e,this.experiences)}getStateSnapshot(){return L(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){F.logger("warn",`Experience with id '${e}' not found.`);return}U(this,r)}setupPlugins(){this.options.plugins?.forEach(e=>{if(Array.isArray(e)){e.forEach(n=>{this.registerPlugin(n)});return}const r=typeof e=="function"?e():e;if(Array.isArray(r)){r.forEach(n=>this.registerPlugin(n));return}this.registerPlugin(r)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const i=typeof n=="function"?n():n;this.registerFeature(r,i)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,i]=r.split(":");if(!n||!i)return;let u=i;u==="true"&&(u=!0),u==="false"&&(u=!1),this.registerFeature(n,{key:`${u}`,name:n,decide:()=>u,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){F.logger("warn",`Predicate "${r}" is not a function.`);return}this.registerPredicate(r,n)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){F.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}renderString=(e,r)=>{const n=this.responses.listStore.getState().reduce((i,u)=>(i[u.fieldId]=u.value,i),{});return We(e,{...r,responses:n})}}function N(t){return t.options?.some(e=>"condition"in e)??!1}function He(t){return t.some(e=>e.condition||N(e))}async function Ge(t,e){return e.length===0||!He(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await I.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!N(n))return n;const o=(await Promise.all(n.options.map(async a=>a.condition?await I.evaluateRuleLogic(t,a.condition)?a:null:a))).filter(a=>a!==null);return o.length===n.options.length?n:o.length===0?null:{...n,options:o}}))).filter(n=>n!==null)}const Ye=t=>{const e=new M(t);return S.bindClient(e),e};exports.evaluateRuleLogic=I.evaluateRuleLogic;exports.isPickedRoot=I.isPickedRoot;exports.createStorageKey=v.createStorageKey;exports.localStore=v.localStore;exports.sessionStore=v.sessionStore;exports.subscribe=v.subscribe;exports.supportsCookies=S.supportsCookies;exports.supportsCryptoRandomUUID=S.supportsCryptoRandomUUID;exports.supportsDocument=S.supportsDocument;exports.supportsHistory=S.supportsHistory;exports.supportsIntersectionObserver=S.supportsIntersectionObserver;exports.supportsLocalStorage=S.supportsLocalStorage;exports.supportsLocation=S.supportsLocation;exports.supportsSessionStorage=S.supportsSessionStorage;exports.supportsShadowRoot=S.supportsShadowRoot;exports.supportsWebComponents=S.supportsWebComponents;exports.supportsWindow=S.supportsWindow;exports.Picked=M;exports.createClient=Ye;exports.getPickedConfig=V;exports.getStepFields=Ge;
package/dist/esm/index.js CHANGED
@@ -699,7 +699,7 @@ const We = b("response"), Ye = w(({ client: t }) => {
699
699
  function Je(t) {
700
700
  return v(Ye, t);
701
701
  }
702
- const Qe = () => "0.0.36-next.1";
702
+ const Qe = () => "0.0.36";
703
703
  function Xe() {
704
704
  if (U()) {
705
705
  const t = [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.36-next.1",
3
+ "version": "0.0.36",
4
4
  "dependencies": {
5
5
  "@withease/factories": "^1.0.5"
6
6
  },