@picked/client 0.0.1-dev.1773804563218 → 0.0.1-dev.1773807602703

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.
@@ -5,7 +5,7 @@ function u(n, t) {
5
5
  [a]: t
6
6
  };
7
7
  }
8
- const d = () => "0.0.1-dev.1773804563218", E = "v1";
8
+ const d = () => "0.0.1-dev.1773807602703", E = "v1";
9
9
  function s(n, t) {
10
10
  return new URL(`/api/${E}/${t}`, n).toString();
11
11
  }
@@ -1 +1 @@
1
- "use strict";const a="Picked-Client",d="Picked-Version";function s(e,t){return{[a]:e,[d]:t}}const o=()=>"0.0.1-dev.1773804563218",E="v1";function c(e,t){return new URL(`/api/${E}/${t}`,e).toString()}function i(e){return{...s("sdk",o()),...e}}async function f(e,t,n){const r=c(e,t);return fetch(r,{headers:i(n)})}async function l(e,t,n,r){const u=c(e,t);return fetch(u,{method:"POST",headers:{"Content-Type":"application/json",...i(r)},body:JSON.stringify(n)})}exports.createClientHeaders=s;exports.get=f;exports.getVersion=o;exports.post=l;
1
+ "use strict";const a="Picked-Client",d="Picked-Version";function s(e,t){return{[a]:e,[d]:t}}const o=()=>"0.0.1-dev.1773807602703",E="v1";function c(e,t){return new URL(`/api/${E}/${t}`,e).toString()}function i(e){return{...s("sdk",o()),...e}}async function f(e,t,n){const r=c(e,t);return fetch(r,{headers:i(n)})}async function l(e,t,n,r){const u=c(e,t);return fetch(u,{method:"POST",headers:{"Content-Type":"application/json",...i(r)},body:JSON.stringify(n)})}exports.createClientHeaders=s;exports.get=f;exports.getVersion=o;exports.post=l;
package/dist/cjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("effector"),S=require("@withease/factories"),I=require("../experience-instance-Bi3-1tP5.cjs"),E=require("../logger-BsmHUUw1.cjs"),v=require("../storage-Be5xWNPC.cjs"),L=require("../api-C90ugp6M.cjs"),W=require("../id-BKIWbSTy.cjs"),J=require("../object-BbFTsGh3.cjs"),b=require("../supports-YvpQZxbh.cjs"),D=g.createDomain("experience"),Y=S.createFactory(({client:t,experience:e})=>{const r=D.store(e),n=g.createApi(r,{merge(f,p){return{...f,...p.experience}}}),i=r.map(f=>({name:f.name,decisionLogic:f.condition,targetSelectors:f.targets,initializeOpenLogic:e.initializeOpen})),u=e.component?{name:`experience:${e.id}`,component:e.component,frameworkStore:t.frameworks.getByName(e.component.frameworkName)}:void 0,s=t.components.listStore.map(f=>u||(e.componentName?f.find(p=>p.name===e.componentName):void 0)||f.find(p=>p.name===`experience:${e.id}`)||f.find(p=>p.name==="experience"),{skipVoid:!1}),o=r.map(f=>({steps:f.steps,nodes:f.nodes,edges:f.edges,conditions:f.conditions??f.conditionals??[]})),l=e.actions??[];return{id:e.id,key:e.key,name:e.name,configStore:i,treeStore:o,componentStore:s,actions:l,merge:n.merge}});function Q(t){return S.invoke(Y,t)}const X=S.createFactory(({client:t})=>{const e=D.store({}),r=D.store({}),n=g.createApi(e,{register(p,k){return{...p,[k.id]:k}}}),i=g.createApi(r,{register(p,{key:k,id:w}){return{...p,[k]:w}}});function u(p){const k=e.getState()[p.id];if(k){k.merge({experience:p,strategy:"override"}),p.key&&i.register({key:p.key,id:p.id});return}const w=Q({client:t,experience:p});n.register(w),p.key&&i.register({key:p.key,id:p.id})}const s=e.map(p=>Object.values(p));function o(p){return g.combine(e,r,(k,w)=>k[p]??k[w[p]??""],{skipVoid:!1})}const l=g.attach({source:{experiences:e,keys:r},effect:async({experiences:p,keys:k},{id:w,options:m})=>{const a=p[w]??p[k[w]??""];if(!a){E.logger("warn",`Experience with id '${w}' not found.`);return}if(m?.bypassCondition){$(t,a,m);return}await _(t,a)&&$(t,a,m)}}),f=g.attach({source:{instances:t.experienceInstances.listStore,keys:r},effect:({instances:p,keys:k},{id:w,options:m})=>{const a=k[w]??w,c=p.filter(d=>d.experienceId===a);if(c.length>0)for(const d of c)d.open();else l({id:a,options:{...m,initialiseOpen:!0}})}});return{register:u,get:o,getById:o,launch:l,open:f,listStore:s}});function Z(t){return S.invoke(X,t)}const ee=(t,e)=>{e.register(t)},$=(t,e,r)=>{const{targetSelectors:n}=e.configStore.getState(),i=I.getTargetElements(n,e.id);i.forEach(({elements:s})=>s.forEach(o=>I.tagTargetElement(o,e.id))),I.createAppHosts(i,e.id).forEach(s=>{r?t.experienceInstances.spawn(e,s,r):t.experienceInstances.spawn(e,s)})},M=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await _(t,e)&&$(t,e)}))},_=async(t,e)=>{if(!t.preconditionPassed||!t.session?.isUser)return!1;const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return I.getTargetElements(n,e.id).length<1||n.length===0?!1:r===void 0?!0:I.isRulesLogic(r)?await I.evaluateRuleLogic(t,r)===!0:!0},te=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const u=r[n]??{};r[n]=Object.freeze({...u,...i})}},re=g.createDomain("component"),ne=S.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function se(t){return S.invoke(ne,t)}const ie=S.createFactory(({client:t})=>{const e=re.store({}),r=g.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&E.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const f=se({client:t,name:s,component:o});r.register(f)}const i=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function oe(t){return S.invoke(ie,t)}const U=(t,e,r)=>{r.register(t,e)},ae=g.createDomain("framework"),ce=S.createFactory(({client:t})=>{const e=ae.store({}),r=g.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&E.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const i=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function ue(t){return S.invoke(ce,t)}const de=(t,e)=>{e.register(t.name,t)},le=6e3,pe=v.createStorageKey("last_ping","global"),fe=async t=>{try{const e=Date.now(),r=v.localStore.get(pe);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<le)return!0;const i={projectId:t.projectId,path:window.location.pathname},u={},o=document.getElementById("picked_script")?.dataset.verceltoken;o&&(u["x-vercel-protection-bypass"]=o);const f=(await L.post(t.apiUrl,"ping",i,u)).ok;return f&&r.set(e),f}catch(e){return E.logger("error",e),!1}};function q(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 ge=g.createDomain("predicate"),me=S.createFactory(({client:t})=>{const e=ge.store({}),r=g.createApi(e,{register(o,l){return{...o,[l.name]:{name:l.name,predicate:l.predicate}}}});function n(o,l){e.getState()[o]&&E.logger("warn",`Predicate '${o}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:o,predicate:l}))}const i=e.map(o=>Object.values(o));function u(o){return e.map(l=>l[o]?.predicate,{skipVoid:!1})}function s(o){const l=g.createStore(()=>{},{skipVoid:!1}),f=g.createEffect(async()=>{const p=u(o).getState();if(!p)return;const k=q(t);return(...w)=>p({...k,args:w})});return g.sample({source:{responses:t.responses.listStore,fields:t.fields.listStore},target:f}),g.sample({clock:f.doneData,filter:p=>p!==void 0,target:l}),f(),l}return{register:n,getByName:u,listStore:i,getEvokablePredicate:s}});function ye(t){return S.invoke(me,t)}const he=(t,e,r)=>{r.register(t,e)},V=g.createDomain("feature"),Se=S.createFactory(({client:t})=>{const e=V.store({}),r=V.store([]),n=g.createApi(e,{register(m,a){return{...m,[a.id]:a.feature}}});function i(m,a){e.getState()[m]&&E.logger("warn",`Feature '${m}' already registered. Registering again will override the previous registration.`);const d={id:m,feature:{...a,id:m}};n.register(Object.freeze({id:m,feature:d}))}const u=g.createEffect(async({id:m,key:a,storage:c="local"})=>{const d=v.createStorageKey(`feature:${m}:${a}`,"global"),h=(c==="session"?v.sessionStore:v.localStore).get(d).boolean();return h===null?null:{id:m,key:a,bucket:h,storage:c}}),s=g.createEffect(m=>{if(!m)return null;const a=v.createStorageKey(`feature:${m.id}:${m.key}`,"global");(m.storage==="session"?v.sessionStore:v.localStore).set(a,m.bucket)}),o=new Map,l=g.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:m,resolvedFeaturesStore:a},{id:c,decide:d,key:y})=>{const h=a.find(A=>A.id===c&&A.key===y);if(h)return h;const F=m[c];if(!F)throw new Error(`Feature with id '${c}' not found`);const j=o.get(`${c}:${y}`);if(j!==void 0){const A=await j;return{id:F.id,bucket:A,key:y,storage:F.feature.storage}}const x=d();o.set(`${c}:${y}`,x);const P=await x;return{id:F.id,bucket:P,key:y,storage:F.feature.storage}}});g.sample({clock:n.register,fn:m=>{const{id:a,feature:c}=m;return{id:a,key:c.feature.key,storage:c.feature.storage}},target:u}),g.sample({source:e,clock:l.doneData,fn:(m,a)=>{const{id:c,bucket:d,storage:y}=a,h=m[c]?.feature.key;return h?{key:h,id:c,bucket:d,storage:y}:null},target:s});const f=g.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:m,resolvedFeaturesStore:a})=>Object.values(m).map(c=>{const d=a.find(y=>y.id===c.id&&y.key===c.feature.key);return d?{id:c.id,name:c.feature.name,key:c.feature.key,getBucket:()=>({id:c.id,bucket:d.bucket}),isResolved:!0}:{id:c.id,name:c.feature.name,key:c.feature.key,getBucket:async()=>await l(c.feature),isResolved:!1}}));g.sample({clock:l.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:m},{id:a,key:c})=>!m.some(y=>y.id===a&&y.key===c),fn:(m,a)=>a,target:t.eventBus.prepend(m=>({type:"feature_decide",feature:m}))}),g.sample({clock:[u.doneData,l.doneData],source:r,fn:(m,a)=>!a||m.some(d=>d.id===a.id&&d.key===a.key)?m:[...m,a],target:r});function p(m){return f.map(a=>a.find(c=>c.id===m))}function k(m){return e.map(a=>a[m],{skipVoid:!1})}function w(m){const a=g.createStore(async()=>{},{skipVoid:!1}),c=g.createEffect(async()=>{const d=p(m).getState();if(d)return async()=>(await d.getBucket()).bucket});return g.sample({source:r,filter:d=>d.some(y=>y.id===m),target:c}),g.sample({clock:c.doneData,filter:d=>d!==void 0,target:a}),c(),a}return{register:i,getById:p,getByName:k,listStore:f,getEvokableFeature:w}});function ke(t){return S.invoke(Se,t)}const be=(t,e,r)=>{r.register(t,e)},C=g.createDomain("history");function N(t,e){return{id:W.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const we=S.createFactory(()=>{const t=C.store({entries:[]}),e=C.event(),r=C.event(),n=C.event(),i=C.event();t.on(e,(s,o)=>({entries:[...s.entries,N(o.experienceId,o.node)]})),t.on(r,(s,o)=>({entries:[...s.entries.slice(0,-1),N(o.experienceId,o.node)]})),t.on(i,(s,o)=>o);function u(s,o){const l={lastStepIndex:-1,secondLastStepIndex:-1};for(let f=s.length-1;f>=0;f--){const p=s[f],k=p?.node;if(!(!k||!I.isStepNode(k))&&!(o&&p?.experienceId!==o))if(l.lastStepIndex===-1)l.lastStepIndex=f;else{l.secondLastStepIndex=f;break}}return l}return t.on(n,(s,o)=>{const{secondLastStepIndex:l}=u(s.entries,o.experienceId),f=l!==-1?s.entries.slice(0,l+1):s.entries;return{...s,entries:f}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(s=>s.entries)}});function ve(){return S.invoke(we)}let Ie=0;const Fe=t=>{const e=g.createStore([]);return g.sample({clock:t,source:e,fn:(r,n)=>[...r,{id:Ie++,at:new Date,payload:n}],target:e}),e},Ee=g.createDomain("field"),je=S.createFactory(()=>{const t=Ee.store({}),e=g.createApi(t,{register(l,f){return{...l,[f.field.id]:f.field}}});function r(l){e.register({field:l})}function n(l,f){const p=t.getState()[l]??null;if(!p)return;const k=Object.assign({},p,{...f});e.register({field:{...k}})}const i=t.map(l=>Object.values(l));function u(l){return t.map(f=>f[l]??null)}function s(l){return t.map(f=>Object.values(f).find(p=>p.key===l)??null)}function o(l){return t.map(f=>Object.values(f).find(p=>p.name===l)??null)}return{register:r,update:n,getById:u,getByKey:s,listStore:i,getByName:o}});function xe(){return S.invoke(je)}const Ae=(t,e)=>{e.register(t)},Pe=g.createDomain("step"),Ce=S.createFactory(()=>{const t=Pe.store({}),e=g.createApi(t,{register(u,s){return{...u,[s.step.id]:s.step}}});function r(u){e.register({step:u})}const n=t.map(u=>Object.values(u));function i(u){return t.map(s=>s[u]??null)}return{register:r,getById:i,listStore:n}});function Be(){return S.invoke(Ce)}function De(t,e){e.register(t)}const $e=g.createDomain("action"),ze=S.createFactory(()=>{const t=$e.store({}),e=g.createApi(t,{register(s,o){return{...s,[o.name]:{name:o.name,action:o.action}}}});function r(s,o){e.register({name:s,action:o})}const n=t.map(s=>Object.values(s));function i(s){return t.map(o=>o[s],{skipVoid:!1})}function u(s){return t.map(o=>{const l=o[s];return l?l.action:void 0},{skipVoid:!1})}return{register:r,getByName:i,listStore:n,getEvokableAction:u}});function Re(){return S.invoke(ze)}const Oe=(t,e,r)=>{r.register(t,e)};function z(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}function Me(t){return typeof t=="string"||typeof t=="number"||typeof t=="boolean"||t===null}function T(t){try{return JSON.stringify(t),!0}catch{return!1}}function Ue(t,e){return e.find(r=>r.id===t)??e.find(r=>r.key===t)??null}function Ve(t,e){return t.multiple&&(typeof e=="string"||typeof e=="number"||typeof e=="boolean")?[e]:e}function Ne(t,e,r){if(t.type!=="object"||z(r))return null;if(t.multiple){if(!Array.isArray(r))return{fieldId:e,userMessage:"This field expects multiple values",systemMessage:"Field expects an array of objects.",value:r};for(const n of r){if(typeof n!="object"||n===null)return{fieldId:e,userMessage:"This field expects object values",systemMessage:"Field expects an array of objects, but received non-object value.",value:r};if(!T(n))return{fieldId:e,userMessage:"This field contains non-serializable data",systemMessage:"Field value contains non-JSON-serializable data (functions, circular references, etc.).",value:r}}return null}return Array.isArray(r)?{fieldId:e,userMessage:"This field expects a single value",systemMessage:"Field expects a single object, not an array.",value:r}:typeof r!="object"||r===null?{fieldId:e,userMessage:"This field expects an object value",systemMessage:"Field expects an object value.",value:r}:T(r)?null:{fieldId:e,userMessage:"This field contains non-serializable data",systemMessage:"Field value contains non-JSON-serializable data (functions, circular references, etc.).",value:r}}function Te(t,e,r){if(!Array.isArray(t.options)||t.options.length===0)return null;const n=Array.isArray(r)?r:[r];if(t.type==="object"){const s=t.options.map(l=>JSON.stringify(l.value));return n.every(l=>s.includes(JSON.stringify(l)))?null:{fieldId:e,userMessage:"This field expects a valid option",systemMessage:"Field expects a valid option from the defined choices.",value:r}}const i=t.options.map(s=>s.value);return n.every(s=>!Me(s)||s===null?!1:i.includes(s))?null:{fieldId:e,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${i.join(", ")}`,value:r}}const Le=g.createDomain("response"),_e=S.createFactory(({client:t})=>{const e=Le.store({}),r=g.createEvent(),n=g.createEvent(),i=g.createApi(e,{register(a,c){return{...a,[c.fieldId]:c.response}},registerBatch(a,c){return{...a,...c}},clear(a,c){return Object.fromEntries(Object.entries(a).filter(([d])=>d!==c))},clearAll(){return{}}});function u(a,c){if(typeof a=="string"){if(c===void 0)throw new Error("Response is required when registering a single field");i.register({fieldId:a,response:c})}else i.registerBatch(a)}async function s(a,c,d){if(a.validation&&!J.isEmpty(a.validation)&&!z(d)){const y=await I.evaluateRuleLogic(t,a.validation,{$input:d});if(typeof y=="string")return{fieldId:c,userMessage:y,systemMessage:`Field validation resulted in an error: ${y}.`,value:d};if(y===!1)return{fieldId:c,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:d}}return a.required&&z(d)?{fieldId:c,userMessage:"This field is required",systemMessage:"Field is required.",value:d}:!a.multiple&&Array.isArray(d)&&d.length>1?{fieldId:c,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:d}:null}async function o(a){const c=[],d={},y=t.fields.listStore.getState();return await Promise.allSettled(Object.entries(a).map(async([h,F])=>{const j=Ue(h,y);if(!j){c.push({fieldId:h,userMessage:`Field '${h}' not found`,systemMessage:`No field with ID or key '${h}' exists. Available field IDs are: ${y.map(G=>G.id).join(",")}.`,value:F});return}const x=j.id,P=Ve(j,F),A=await s(j,x,P);if(A){c.push(A);return}const R=Ne(j,x,P);if(R){c.push(R);return}const O=Te(j,x,P);O&&c.push(O),d[x]=F})),{responsesToCommit:d,validationErrors:c}}async function l(a){const{responsesToCommit:c,validationErrors:d}=await o(a);return d.length?{errors:d}:(i.registerBatch(c),{errors:[]})}const f=e.map(a=>a),p=g.combine({responses:e,fields:t.fields.listStore},({responses:a,fields:c})=>Object.entries(a).map(([d,y])=>{const h=c.find(F=>F.id===d);return{fieldId:d,fieldKey:h?.key??d,value:y}}));function k(a){const c=t.fields.listStore.map(y=>y.find(h=>h.id===a)??null),d=e.map(y=>y[a]??null);return g.combine({f:c,r:d},({f:y,r:h})=>h!==null?h:y?.defaultValue?y.defaultValue:null)}function w(a){const c=t.fields.getByKey(a);return g.combine({f:c,s:e},({f:d,s:y})=>{const h=d?y[d.id]??null:null;return h||(d?.defaultValue?d.defaultValue:null)})}function m(a){const c=t.fields.getByName(a);return g.combine({f:c,s:e},({f:d,s:y})=>{const h=d&&y[d.id]||null;return h||(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:l,getResponsesToCommit:o,listStore:p,getAllStore:f,getByFieldId:k,getByFieldKey:w,getByFieldName:m}});function qe(t){return S.invoke(_e,t)}const He=g.createDomain("condition"),Ke=S.createFactory(()=>{const t=He.store({}),e=g.createApi(t,{register(s,o){return{...s,[o.condition.id]:o.condition}}});function r(s){e.register({condition:s})}const n=t.map(s=>Object.values(s));function i(s){return t.map(o=>o[s]??null)}function u(s){return t.map(o=>Object.values(o).find(l=>l.key===s)??null)}return{register:r,getById:i,getByKey:u,listStore:n}});function Ge(){return S.invoke(Ke)}function We(){if(b.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 Je(){if(!b.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 Ye(){if(b.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 Qe=v.createStorageKey("session","global"),Xe=()=>{const t=v.localStore.get(Qe);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??Ye(),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},Ze=()=>b.supportsLocalStorage()?Xe():null;function H(){if(b.supportsWindow())return globalThis.window.pickedConfig}function et(){if(!b.supportsWindow())return;const t=H(),e=t?.organizationId,r=t?.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function tt(){if(!b.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 rt(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=et();if(n)return n;const i=tt();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"),S=require("@withease/factories"),I=require("../experience-instance-CxiOyYPf.cjs"),E=require("../logger-BsmHUUw1.cjs"),v=require("../storage-Be5xWNPC.cjs"),L=require("../api-GvmToTw0.cjs"),W=require("../nodes-DsL8kMSX.cjs"),J=require("../id-BKIWbSTy.cjs"),Y=require("../object-BbFTsGh3.cjs"),b=require("../supports-YvpQZxbh.cjs"),D=g.createDomain("experience"),Q=S.createFactory(({client:t,experience:e})=>{const r=D.store(e),n=g.createApi(r,{merge(f,p){return{...f,...p.experience}}}),i=r.map(f=>({name:f.name,decisionLogic:f.condition,targetSelectors:f.targets,initializeOpenLogic:e.initializeOpen})),u=e.component?{name:`experience:${e.id}`,component:e.component,frameworkStore:t.frameworks.getByName(e.component.frameworkName)}:void 0,s=t.components.listStore.map(f=>u||(e.componentName?f.find(p=>p.name===e.componentName):void 0)||f.find(p=>p.name===`experience:${e.id}`)||f.find(p=>p.name==="experience"),{skipVoid:!1}),o=r.map(f=>({steps:f.steps,nodes:f.nodes,edges:f.edges,conditions:f.conditions??f.conditionals??[]})),l=e.actions??[];return{id:e.id,key:e.key,name:e.name,configStore:i,treeStore:o,componentStore:s,actions:l,merge:n.merge}});function X(t){return S.invoke(Q,t)}const Z=S.createFactory(({client:t})=>{const e=D.store({}),r=D.store({}),n=g.createApi(e,{register(p,k){return{...p,[k.id]:k}}}),i=g.createApi(r,{register(p,{key:k,id:w}){return{...p,[k]:w}}});function u(p){const k=e.getState()[p.id];if(k){k.merge({experience:p,strategy:"override"}),p.key&&i.register({key:p.key,id:p.id});return}const w=X({client:t,experience:p});n.register(w),p.key&&i.register({key:p.key,id:p.id})}const s=e.map(p=>Object.values(p));function o(p){return g.combine(e,r,(k,w)=>k[p]??k[w[p]??""],{skipVoid:!1})}const l=g.attach({source:{experiences:e,keys:r},effect:async({experiences:p,keys:k},{id:w,options:m})=>{const a=p[w]??p[k[w]??""];if(!a){E.logger("warn",`Experience with id '${w}' not found.`);return}if(m?.bypassCondition){$(t,a,m);return}await q(t,a)&&$(t,a,m)}}),f=g.attach({source:{instances:t.experienceInstances.listStore,keys:r},effect:({instances:p,keys:k},{id:w,options:m})=>{const a=k[w]??w,c=p.filter(d=>d.experienceId===a);if(c.length>0)for(const d of c)d.open();else l({id:a,options:{...m,initialiseOpen:!0}})}});return{register:u,get:o,getById:o,launch:l,open:f,listStore:s}});function ee(t){return S.invoke(Z,t)}const te=(t,e)=>{e.register(t)},$=(t,e,r)=>{const{targetSelectors:n}=e.configStore.getState(),i=I.getTargetElements(n,e.id);i.forEach(({elements:s})=>s.forEach(o=>I.tagTargetElement(o,e.id))),I.createAppHosts(i,e.id).forEach(s=>{r?t.experienceInstances.spawn(e,s,r):t.experienceInstances.spawn(e,s)})},M=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await q(t,e)&&$(t,e)}))},q=async(t,e)=>{if(!t.preconditionPassed||!t.session?.isUser)return!1;const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return I.getTargetElements(n,e.id).length<1||n.length===0?!1:r===void 0?!0:I.isRulesLogic(r)?await I.evaluateRuleLogic(t,r)===!0:!0},re=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const u=r[n]??{};r[n]=Object.freeze({...u,...i})}},ne=g.createDomain("component"),se=S.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ie(t){return S.invoke(se,t)}const oe=S.createFactory(({client:t})=>{const e=ne.store({}),r=g.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&E.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const f=ie({client:t,name:s,component:o});r.register(f)}const i=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function ae(t){return S.invoke(oe,t)}const U=(t,e,r)=>{r.register(t,e)},ce=g.createDomain("framework"),ue=S.createFactory(({client:t})=>{const e=ce.store({}),r=g.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&E.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const i=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function de(t){return S.invoke(ue,t)}const le=(t,e)=>{e.register(t.name,t)},pe=6e3,fe=v.createStorageKey("last_ping","global"),ge=async t=>{try{const e=Date.now(),r=v.localStore.get(fe);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<pe)return!0;const i={projectId:t.projectId,path:window.location.pathname},u={},o=document.getElementById("picked_script")?.dataset.verceltoken;o&&(u["x-vercel-protection-bypass"]=o);const f=(await L.post(t.apiUrl,"ping",i,u)).ok;return f&&r.set(e),f}catch(e){return E.logger("error",e),!1}};function _(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 me=g.createDomain("predicate"),ye=S.createFactory(({client:t})=>{const e=me.store({}),r=g.createApi(e,{register(o,l){return{...o,[l.name]:{name:l.name,predicate:l.predicate}}}});function n(o,l){e.getState()[o]&&E.logger("warn",`Predicate '${o}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:o,predicate:l}))}const i=e.map(o=>Object.values(o));function u(o){return e.map(l=>l[o]?.predicate,{skipVoid:!1})}function s(o){const l=g.createStore(()=>{},{skipVoid:!1}),f=g.createEffect(async()=>{const p=u(o).getState();if(!p)return;const k=_(t);return(...w)=>p({...k,args:w})});return g.sample({source:{responses:t.responses.listStore,fields:t.fields.listStore},target:f}),g.sample({clock:f.doneData,filter:p=>p!==void 0,target:l}),f(),l}return{register:n,getByName:u,listStore:i,getEvokablePredicate:s}});function he(t){return S.invoke(ye,t)}const Se=(t,e,r)=>{r.register(t,e)},V=g.createDomain("feature"),ke=S.createFactory(({client:t})=>{const e=V.store({}),r=V.store([]),n=g.createApi(e,{register(m,a){return{...m,[a.id]:a.feature}}});function i(m,a){e.getState()[m]&&E.logger("warn",`Feature '${m}' already registered. Registering again will override the previous registration.`);const d={id:m,feature:{...a,id:m}};n.register(Object.freeze({id:m,feature:d}))}const u=g.createEffect(async({id:m,key:a,storage:c="local"})=>{const d=v.createStorageKey(`feature:${m}:${a}`,"global"),h=(c==="session"?v.sessionStore:v.localStore).get(d).boolean();return h===null?null:{id:m,key:a,bucket:h,storage:c}}),s=g.createEffect(m=>{if(!m)return null;const a=v.createStorageKey(`feature:${m.id}:${m.key}`,"global");(m.storage==="session"?v.sessionStore:v.localStore).set(a,m.bucket)}),o=new Map,l=g.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:m,resolvedFeaturesStore:a},{id:c,decide:d,key:y})=>{const h=a.find(A=>A.id===c&&A.key===y);if(h)return h;const F=m[c];if(!F)throw new Error(`Feature with id '${c}' not found`);const j=o.get(`${c}:${y}`);if(j!==void 0){const A=await j;return{id:F.id,bucket:A,key:y,storage:F.feature.storage}}const x=d();o.set(`${c}:${y}`,x);const P=await x;return{id:F.id,bucket:P,key:y,storage:F.feature.storage}}});g.sample({clock:n.register,fn:m=>{const{id:a,feature:c}=m;return{id:a,key:c.feature.key,storage:c.feature.storage}},target:u}),g.sample({source:e,clock:l.doneData,fn:(m,a)=>{const{id:c,bucket:d,storage:y}=a,h=m[c]?.feature.key;return h?{key:h,id:c,bucket:d,storage:y}:null},target:s});const f=g.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:m,resolvedFeaturesStore:a})=>Object.values(m).map(c=>{const d=a.find(y=>y.id===c.id&&y.key===c.feature.key);return d?{id:c.id,name:c.feature.name,key:c.feature.key,getBucket:()=>({id:c.id,bucket:d.bucket}),isResolved:!0}:{id:c.id,name:c.feature.name,key:c.feature.key,getBucket:async()=>await l(c.feature),isResolved:!1}}));g.sample({clock:l.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:m},{id:a,key:c})=>!m.some(y=>y.id===a&&y.key===c),fn:(m,a)=>a,target:t.eventBus.prepend(m=>({type:"feature_decide",feature:m}))}),g.sample({clock:[u.doneData,l.doneData],source:r,fn:(m,a)=>!a||m.some(d=>d.id===a.id&&d.key===a.key)?m:[...m,a],target:r});function p(m){return f.map(a=>a.find(c=>c.id===m))}function k(m){return e.map(a=>a[m],{skipVoid:!1})}function w(m){const a=g.createStore(async()=>{},{skipVoid:!1}),c=g.createEffect(async()=>{const d=p(m).getState();if(d)return async()=>(await d.getBucket()).bucket});return g.sample({source:r,filter:d=>d.some(y=>y.id===m),target:c}),g.sample({clock:c.doneData,filter:d=>d!==void 0,target:a}),c(),a}return{register:i,getById:p,getByName:k,listStore:f,getEvokableFeature:w}});function be(t){return S.invoke(ke,t)}const we=(t,e,r)=>{r.register(t,e)},C=g.createDomain("history");function N(t,e){return{id:J.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ve=S.createFactory(()=>{const t=C.store({entries:[]}),e=C.event(),r=C.event(),n=C.event(),i=C.event();t.on(e,(s,o)=>({entries:[...s.entries,N(o.experienceId,o.node)]})),t.on(r,(s,o)=>({entries:[...s.entries.slice(0,-1),N(o.experienceId,o.node)]})),t.on(i,(s,o)=>o);function u(s,o){const l={lastStepIndex:-1,secondLastStepIndex:-1};for(let f=s.length-1;f>=0;f--){const p=s[f],k=p?.node;if(!(!k||!W.isStepNode(k))&&!(o&&p?.experienceId!==o))if(l.lastStepIndex===-1)l.lastStepIndex=f;else{l.secondLastStepIndex=f;break}}return l}return t.on(n,(s,o)=>{const{secondLastStepIndex:l}=u(s.entries,o.experienceId),f=l!==-1?s.entries.slice(0,l+1):s.entries;return{...s,entries:f}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(s=>s.entries)}});function Ie(){return S.invoke(ve)}let Fe=0;const Ee=t=>{const e=g.createStore([]);return g.sample({clock:t,source:e,fn:(r,n)=>[...r,{id:Fe++,at:new Date,payload:n}],target:e}),e},je=g.createDomain("field"),xe=S.createFactory(()=>{const t=je.store({}),e=g.createApi(t,{register(l,f){return{...l,[f.field.id]:f.field}}});function r(l){e.register({field:l})}function n(l,f){const p=t.getState()[l]??null;if(!p)return;const k=Object.assign({},p,{...f});e.register({field:{...k}})}const i=t.map(l=>Object.values(l));function u(l){return t.map(f=>f[l]??null)}function s(l){return t.map(f=>Object.values(f).find(p=>p.key===l)??null)}function o(l){return t.map(f=>Object.values(f).find(p=>p.name===l)??null)}return{register:r,update:n,getById:u,getByKey:s,listStore:i,getByName:o}});function Ae(){return S.invoke(xe)}const Pe=(t,e)=>{e.register(t)},Ce=g.createDomain("step"),Be=S.createFactory(()=>{const t=Ce.store({}),e=g.createApi(t,{register(u,s){return{...u,[s.step.id]:s.step}}});function r(u){e.register({step:u})}const n=t.map(u=>Object.values(u));function i(u){return t.map(s=>s[u]??null)}return{register:r,getById:i,listStore:n}});function De(){return S.invoke(Be)}function $e(t,e){e.register(t)}const ze=g.createDomain("action"),Re=S.createFactory(()=>{const t=ze.store({}),e=g.createApi(t,{register(s,o){return{...s,[o.name]:{name:o.name,action:o.action}}}});function r(s,o){e.register({name:s,action:o})}const n=t.map(s=>Object.values(s));function i(s){return t.map(o=>o[s],{skipVoid:!1})}function u(s){return t.map(o=>{const l=o[s];return l?l.action:void 0},{skipVoid:!1})}return{register:r,getByName:i,listStore:n,getEvokableAction:u}});function Oe(){return S.invoke(Re)}const Me=(t,e,r)=>{r.register(t,e)};function z(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}function Ue(t){return typeof t=="string"||typeof t=="number"||typeof t=="boolean"||t===null}function T(t){try{return JSON.stringify(t),!0}catch{return!1}}function Ve(t,e){return e.find(r=>r.id===t)??e.find(r=>r.key===t)??null}function Ne(t,e){return t.multiple&&(typeof e=="string"||typeof e=="number"||typeof e=="boolean")?[e]:e}function Te(t,e,r){if(t.type!=="object"||z(r))return null;if(t.multiple){if(!Array.isArray(r))return{fieldId:e,userMessage:"This field expects multiple values",systemMessage:"Field expects an array of objects.",value:r};for(const n of r){if(typeof n!="object"||n===null)return{fieldId:e,userMessage:"This field expects object values",systemMessage:"Field expects an array of objects, but received non-object value.",value:r};if(!T(n))return{fieldId:e,userMessage:"This field contains non-serializable data",systemMessage:"Field value contains non-JSON-serializable data (functions, circular references, etc.).",value:r}}return null}return Array.isArray(r)?{fieldId:e,userMessage:"This field expects a single value",systemMessage:"Field expects a single object, not an array.",value:r}:typeof r!="object"||r===null?{fieldId:e,userMessage:"This field expects an object value",systemMessage:"Field expects an object value.",value:r}:T(r)?null:{fieldId:e,userMessage:"This field contains non-serializable data",systemMessage:"Field value contains non-JSON-serializable data (functions, circular references, etc.).",value:r}}function Le(t,e,r){if(!Array.isArray(t.options)||t.options.length===0)return null;const n=Array.isArray(r)?r:[r];if(t.type==="object"){const s=t.options.map(l=>JSON.stringify(l.value));return n.every(l=>s.includes(JSON.stringify(l)))?null:{fieldId:e,userMessage:"This field expects a valid option",systemMessage:"Field expects a valid option from the defined choices.",value:r}}const i=t.options.map(s=>s.value);return n.every(s=>!Ue(s)||s===null?!1:i.includes(s))?null:{fieldId:e,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${i.join(", ")}`,value:r}}const qe=g.createDomain("response"),_e=S.createFactory(({client:t})=>{const e=qe.store({}),r=g.createEvent(),n=g.createEvent(),i=g.createApi(e,{register(a,c){return{...a,[c.fieldId]:c.response}},registerBatch(a,c){return{...a,...c}},clear(a,c){return Object.fromEntries(Object.entries(a).filter(([d])=>d!==c))},clearAll(){return{}}});function u(a,c){if(typeof a=="string"){if(c===void 0)throw new Error("Response is required when registering a single field");i.register({fieldId:a,response:c})}else i.registerBatch(a)}async function s(a,c,d){if(a.validation&&!Y.isEmpty(a.validation)&&!z(d)){const y=await I.evaluateRuleLogic(t,a.validation,{$input:d});if(typeof y=="string")return{fieldId:c,userMessage:y,systemMessage:`Field validation resulted in an error: ${y}.`,value:d};if(y===!1)return{fieldId:c,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:d}}return a.required&&z(d)?{fieldId:c,userMessage:"This field is required",systemMessage:"Field is required.",value:d}:!a.multiple&&Array.isArray(d)&&d.length>1?{fieldId:c,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:d}:null}async function o(a){const c=[],d={},y=t.fields.listStore.getState();return await Promise.allSettled(Object.entries(a).map(async([h,F])=>{const j=Ve(h,y);if(!j){c.push({fieldId:h,userMessage:`Field '${h}' not found`,systemMessage:`No field with ID or key '${h}' exists. Available field IDs are: ${y.map(G=>G.id).join(",")}.`,value:F});return}const x=j.id,P=Ne(j,F),A=await s(j,x,P);if(A){c.push(A);return}const R=Te(j,x,P);if(R){c.push(R);return}const O=Le(j,x,P);O&&c.push(O),d[x]=F})),{responsesToCommit:d,validationErrors:c}}async function l(a){const{responsesToCommit:c,validationErrors:d}=await o(a);return d.length?{errors:d}:(i.registerBatch(c),{errors:[]})}const f=e.map(a=>a),p=g.combine({responses:e,fields:t.fields.listStore},({responses:a,fields:c})=>Object.entries(a).map(([d,y])=>{const h=c.find(F=>F.id===d);return{fieldId:d,fieldKey:h?.key??d,value:y}}));function k(a){const c=t.fields.listStore.map(y=>y.find(h=>h.id===a)??null),d=e.map(y=>y[a]??null);return g.combine({f:c,r:d},({f:y,r:h})=>h!==null?h:y?.defaultValue?y.defaultValue:null)}function w(a){const c=t.fields.getByKey(a);return g.combine({f:c,s:e},({f:d,s:y})=>{const h=d?y[d.id]??null:null;return h||(d?.defaultValue?d.defaultValue:null)})}function m(a){const c=t.fields.getByName(a);return g.combine({f:c,s:e},({f:d,s:y})=>{const h=d&&y[d.id]||null;return h||(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:l,getResponsesToCommit:o,listStore:p,getAllStore:f,getByFieldId:k,getByFieldKey:w,getByFieldName:m}});function He(t){return S.invoke(_e,t)}const Ke=g.createDomain("condition"),Ge=S.createFactory(()=>{const t=Ke.store({}),e=g.createApi(t,{register(s,o){return{...s,[o.condition.id]:o.condition}}});function r(s){e.register({condition:s})}const n=t.map(s=>Object.values(s));function i(s){return t.map(o=>o[s]??null)}function u(s){return t.map(o=>Object.values(o).find(l=>l.key===s)??null)}return{register:r,getById:i,getByKey:u,listStore:n}});function We(){return S.invoke(Ge)}function Je(){if(b.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 Ye(){if(!b.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 Qe(){if(b.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 Xe=v.createStorageKey("session","global"),Ze=()=>{const t=v.localStore.get(Xe);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??Qe(),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},et=()=>b.supportsLocalStorage()?Ze():null;function H(){if(b.supportsWindow())return globalThis.window.pickedConfig}function tt(){if(!b.supportsWindow())return;const t=H(),e=t?.organizationId,r=t?.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function rt(){if(!b.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 nt(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=tt();if(n)return n;const i=rt();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 B(t){return t==null||t===""||Number.isNaN(t)}const nt={default:(t,e)=>B(t)?String(e??""):String(t),append:(t,e)=>e&&!B(t)?`${t} ${e}`:t,prepend:(t,e)=>e&&!B(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 st(t){return typeof t=="object"&&t!==null}function it(t,e){let r=e;for(const n of t.split("."))if(st(r)&&n in r)r=r[n];else return;return typeof r=="function"?r():r}function ot(t,e){const r=t.split("|").map(u=>u.trim()),n=r.shift()??"";let i=it(n,e);for(const u of r){const[s,...o]=u.split(":"),l=s?.trim()??"",f=o.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g,""),p=nt[l];p&&(i=p(i,f))}return B(i)?"":typeof i=="object"?JSON.stringify(i):String(i)}function at(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+=ot(i.trim(),e)}else r+=t[n++];return r}class K{static logger=E.logger;options;isReady=!1;project;plugins={};pluginStartHooks=[];eventBus=g.createEvent();events;organizationId;projectId;apiUrl;dashboardUrl;documentationSiteUrl;session;precondition;condition;preconditionPassed;searchParams=Je();history=ve();components=oe({client:this});experienceInstances=I.createExperienceInstanceIndex({client:this});experiences=Z({client:this});frameworks=ue({client:this});predicates=ye({client:this});features=ke({client:this});conditions=Ge();fields=xe();responses=qe({client:this});steps=Be();actions=Re();constructor(e){E.logger("info","Picked client initializing."),this.events=Fe(this.eventBus);const{organizationId:r,projectId:n}=rt(e);this.organizationId=r,this.projectId=n,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||We(),this.dashboardUrl=e.dashboardUrl??"https://dashboard.picked.app",this.documentationSiteUrl=e.documentationSiteUrl??"https://docs.picked.app",this.session=Ze(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.setupComponents(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:"load",version:L.getVersion()}),E.logger("info","Picked client initialized.")}start=()=>{fe(this),(async()=>{if(!b.supportsDocument())return;await this.runPluginStartHooks();const r=await this.evaluateGate(this.precondition);this.preconditionPassed=r;let n;r&&(n=await this.evaluateGate(this.condition));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})}if(this.eventBus({type:"initialize"}),i&&M(this),await I.domInteractive(),i&&M(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session){const{id:u,isUser:s,identifiers:o}=this.session;this.eventBus({type:"session",id:u,isUser:s,identifiers:o})}})()};registerFramework=e=>{de(e,this.frameworks)};registerComponent=(e,r)=>{U(e,r,this.components)};registerPlugin=e=>{te(this,e,this.plugins);const r=this.plugins[e.name];r?.onStart&&this.pluginStartHooks.push(r.onStart)};registerFeature=(e,r)=>{be(e,r,this.features)};registerPredicate=(e,r)=>{he(e,r,this.predicates)};registerCondition=e=>{this.conditions.register(e)};registerField=e=>{Ae(e,this.fields)};registerStep=e=>{De(e,this.steps)};registerAction=(e,r)=>{Oe(e,r,this.actions)};registerExperience=e=>{e.component&&U(`experience:${e.id}`,e.component,this.components),ee(e,this.experiences)};getStateSnapshot=()=>q(this);launchExperienceById=async(e,r)=>{this.experiences.launch({id:e,options:r})};openExperienceById=async e=>{this.experiences.open({id:e})};async runPluginStartHooks(){for(const e of this.pluginStartHooks)await e()}async evaluateGate(e){return e===void 0?!0:typeof e=="boolean"?e:await I.evaluateRuleLogic(this,e)===!0}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"){E.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"){E.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}setupComponents(){const e=this.options.components;e&&Object.entries(e).forEach(([r,n])=>{this.registerComponent(r,n)})}getPluginConfig=e=>this.plugins[e]??{};renderString=(e,r)=>{const n=this.responses.listStore.getState().reduce((i,u)=>(i[u.fieldId]=u.value,i),{});return at(e,{...r,responses:n})}}function ct(t){return{$$type:"lazy-component",load:t}}function ut(t){return typeof t=="object"&&t!==null&&"$$type"in t&&t.$$type==="lazy-component"}const dt=t=>{const e=new K(t);return b.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=b.supportsCookies;exports.supportsCryptoRandomUUID=b.supportsCryptoRandomUUID;exports.supportsDocument=b.supportsDocument;exports.supportsHistory=b.supportsHistory;exports.supportsIntersectionObserver=b.supportsIntersectionObserver;exports.supportsLocalStorage=b.supportsLocalStorage;exports.supportsLocation=b.supportsLocation;exports.supportsSessionStorage=b.supportsSessionStorage;exports.supportsShadowRoot=b.supportsShadowRoot;exports.supportsWebComponents=b.supportsWebComponents;exports.supportsWindow=b.supportsWindow;exports.Picked=K;exports.createClient=dt;exports.getPickedConfig=H;exports.isLazyLoader=ut;exports.lazyComponent=ct;
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 B(t){return t==null||t===""||Number.isNaN(t)}const st={default:(t,e)=>B(t)?String(e??""):String(t),append:(t,e)=>e&&!B(t)?`${t} ${e}`:t,prepend:(t,e)=>e&&!B(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 it(t){return typeof t=="object"&&t!==null}function ot(t,e){let r=e;for(const n of t.split("."))if(it(r)&&n in r)r=r[n];else return;return typeof r=="function"?r():r}function at(t,e){const r=t.split("|").map(u=>u.trim()),n=r.shift()??"";let i=ot(n,e);for(const u of r){const[s,...o]=u.split(":"),l=s?.trim()??"",f=o.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g,""),p=st[l];p&&(i=p(i,f))}return B(i)?"":typeof i=="object"?JSON.stringify(i):String(i)}function ct(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+=at(i.trim(),e)}else r+=t[n++];return r}class K{static logger=E.logger;options;isReady=!1;project;plugins={};pluginStartHooks=[];eventBus=g.createEvent();events;organizationId;projectId;apiUrl;dashboardUrl;documentationSiteUrl;session;precondition;condition;preconditionPassed;searchParams=Ye();history=Ie();components=ae({client:this});experienceInstances=I.createExperienceInstanceIndex({client:this});experiences=ee({client:this});frameworks=de({client:this});predicates=he({client:this});features=be({client:this});conditions=We();fields=Ae();responses=He({client:this});steps=De();actions=Oe();constructor(e){E.logger("info","Picked client initializing."),this.events=Ee(this.eventBus);const{organizationId:r,projectId:n}=nt(e);this.organizationId=r,this.projectId=n,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Je(),this.dashboardUrl=e.dashboardUrl??"https://dashboard.picked.app",this.documentationSiteUrl=e.documentationSiteUrl??"https://docs.picked.app",this.session=et(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.setupComponents(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:"load",version:L.getVersion()}),E.logger("info","Picked client initialized.")}start=()=>{ge(this),(async()=>{if(!b.supportsDocument())return;await this.runPluginStartHooks();const r=await this.evaluateGate(this.precondition);this.preconditionPassed=r;let n;r&&(n=await this.evaluateGate(this.condition));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})}if(this.eventBus({type:"initialize"}),i&&M(this),await I.domInteractive(),i&&M(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session){const{id:u,isUser:s,identifiers:o}=this.session;this.eventBus({type:"session",id:u,isUser:s,identifiers:o})}})()};registerFramework=e=>{le(e,this.frameworks)};registerComponent=(e,r)=>{U(e,r,this.components)};registerPlugin=e=>{re(this,e,this.plugins);const r=this.plugins[e.name];r?.onStart&&this.pluginStartHooks.push(r.onStart)};registerFeature=(e,r)=>{we(e,r,this.features)};registerPredicate=(e,r)=>{Se(e,r,this.predicates)};registerCondition=e=>{this.conditions.register(e)};registerField=e=>{Pe(e,this.fields)};registerStep=e=>{$e(e,this.steps)};registerAction=(e,r)=>{Me(e,r,this.actions)};registerExperience=e=>{e.component&&U(`experience:${e.id}`,e.component,this.components),te(e,this.experiences)};getStateSnapshot=()=>_(this);launchExperienceById=async(e,r)=>{this.experiences.launch({id:e,options:r})};openExperienceById=async e=>{this.experiences.open({id:e})};async runPluginStartHooks(){for(const e of this.pluginStartHooks)await e()}async evaluateGate(e){return e===void 0?!0:typeof e=="boolean"?e:await I.evaluateRuleLogic(this,e)===!0}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"){E.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"){E.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}setupComponents(){const e=this.options.components;e&&Object.entries(e).forEach(([r,n])=>{this.registerComponent(r,n)})}getPluginConfig=e=>this.plugins[e]??{};renderString=(e,r)=>{const n=this.responses.listStore.getState().reduce((i,u)=>(i[u.fieldId]=u.value,i),{});return ct(e,{...r,responses:n})}}function ut(t){return{$$type:"lazy-component",load:t}}function dt(t){return typeof t=="object"&&t!==null&&"$$type"in t&&t.$$type==="lazy-component"}const lt=t=>{const e=new K(t);return b.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=b.supportsCookies;exports.supportsCryptoRandomUUID=b.supportsCryptoRandomUUID;exports.supportsDocument=b.supportsDocument;exports.supportsHistory=b.supportsHistory;exports.supportsIntersectionObserver=b.supportsIntersectionObserver;exports.supportsLocalStorage=b.supportsLocalStorage;exports.supportsLocation=b.supportsLocation;exports.supportsSessionStorage=b.supportsSessionStorage;exports.supportsShadowRoot=b.supportsShadowRoot;exports.supportsWebComponents=b.supportsWebComponents;exports.supportsWindow=b.supportsWindow;exports.Picked=K;exports.createClient=lt;exports.getPickedConfig=H;exports.isLazyLoader=dt;exports.lazyComponent=ut;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../../../id-BKIWbSTy.cjs"),N=require("../../../logger-BsmHUUw1.cjs"),a={serialize(i){return JSON.stringify(i)},deserialize(i){return JSON.parse(i)}},z=i=>({name:"create-experience",setup:s=>{i.experiences.forEach(l=>{l.fields.forEach(r=>{s.registerField(a.deserialize(r.serialize()))}),l.steps.forEach(r=>{s.registerStep(a.deserialize(r.serialize()))});const o=l.serialize(),n=a.deserialize(o);n.component=l.component,s.registerExperience(n)})}});function m(i){return i.toLowerCase().replaceAll(/[^a-z0-9\s-]/g,"").trim().replaceAll(/\s+/g,"-")}const b=(i,s)=>({id:f.generateId("node"),experience:s,type:"action",action:i.action,addNext(o){if(!o.node)throw new Error("Cannot connect to node");const n=h({sourceNode:this,destinationNode:o.node,sourceNodeHandle:null},s);s.edges.push(n)},onSuccess(o){if(!o.node)throw new Error("Cannot connect to node");const n=h({sourceNode:this,destinationNode:o.node,sourceNodeHandle:"true"},s);s.edges.push(n)},onFail(o){if(!o.node)throw new Error("Cannot connect to node");const n=h({sourceNode:this,destinationNode:o.node,sourceNodeHandle:"false"},s);s.edges.push(n)},serialize(){return a.serialize({id:this.id,type:this.type,action:this.action})}}),v=i=>{const s=i.name??i.label??"",l=i.key??i.id??m(s);return{id:i.id??f.generateId("step"),name:s,key:l,label:s,fields:i.fields??[],addField(o){const n="serialize"in o?o:g(o);return this.fields.includes(n)||this.fields.push(n),n}}},x=(i,s)=>{const l=i.name??i.label??"",o=i.key??i.id??m(l),n={id:i.id??f.generateId("step"),name:l,key:o,label:l,experience:s,fields:i.fields??[],node:null,nextStep(r){return this.experience.addStep(r,this)},nextCondition(r){return this.experience.addCondition(r,this)},nextConditional(r){return this.experience.addCondition(r,this)},addNextExperience(r){return this.experience.addExperience(r,this)},addField(r){return this.experience.addField(r,this)},serialize(){return a.serialize({id:this.id,name:this.name,key:this.key,label:this.name,fieldKeys:this.fields.map(r=>r.key),fieldIds:this.fields.map(r=>r.id)})}};return p({step:n,type:"step"},s),n},p=(i,s)=>{const l={id:f.generateId("node"),experience:s};if(i.type==="step"){const n={...l,type:"step",connectedStep:i.step,serialize(){return a.serialize({id:this.id,type:this.type,stepKey:this.connectedStep.key,name:this.connectedStep.name,label:this.connectedStep.name})}};return n.connectedStep.node=n,n}if(i.type==="conditional"){const n={...l,type:"conditional",connectedCondition:i.conditional,serialize(){return a.serialize({id:this.id,type:this.type,conditionId:this.connectedCondition.id})}};return n.connectedCondition.node=n,n}return i.type==="experience"?{...l,type:"experience",connectedExperience:i.experience,serialize(){return a.serialize({id:this.id,type:this.type,experienceId:this.connectedExperience.id})}}:{...l,type:"origin",serialize(){return a.serialize({id:this.id,type:this.type})}}},h=(i,s)=>({id:f.generateId("edge"),sourceNode:i.sourceNode,sourceNodeHandle:i.sourceNodeHandle,destinationNode:i.destinationNode,experience:s,serialize(){return a.serialize({id:this.id,sourceNodeHandle:this.sourceNodeHandle??void 0,sourceNodeId:this.sourceNode.id,destinationNodeId:this.destinationNode.id})}}),y=(i,s)=>{const l={id:f.generateId("conditional"),label:i.label,condition:i.condition,node:null,experience:s,addTrue(o){if(!this.node||!o.node)throw new Error("todo no node");const n=h({sourceNode:this.node,destinationNode:o.node,sourceNodeHandle:"true"},this.experience);this.experience.edges.push(n)},addFalse(o){if(!this.node||!o.node)throw new Error("todo no node");const n=h({sourceNode:this.node,destinationNode:o.node,sourceNodeHandle:"false"},this.experience);this.experience.edges.push(n)},serialize(){return a.serialize({id:this.id,label:this.label,condition:this.condition})}};return p({conditional:l,type:"conditional"},s),l};function E(...i){return y(...i)}const g=i=>{const s=i.key??i.id??m(i.name);return i.id!==void 0&&N.logger("warn",`createField: 'id' is deprecated. Use 'key' instead of id="${i.id}". The field key "${s}" will be used for lookups.`),{id:i.id??f.generateId("field"),key:s,name:i.name,type:i.type,label:i.label,placeholder:i.placeholder,description:i.description,helpText:i.helpText,defaultValue:i.defaultValue??null,multiple:i.multiple,validation:i.validation??{},condition:i.condition,required:i.required,options:i.options?.map(n=>({id:"id"in n?n.id:f.generateId("option"),...n}))??null,policies:i.policies,serialize(){const n={id:this.id,key:this.key,name:this.name,label:this.label,placeholder:this.placeholder,required:this.required,description:this.description,helpText:this.helpText,validation:this.validation,condition:this.condition,policies:this.policies},r=typeof this.defaultValue=="string"?this.defaultValue:void 0,d=typeof this.defaultValue=="number"?this.defaultValue:void 0,c=typeof this.defaultValue=="boolean"?this.defaultValue:void 0;switch(this.type){case"text":if(this.multiple){let e;if(Array.isArray(this.defaultValue)){e=[];for(const t of this.defaultValue)typeof t=="string"&&e.push(t);e.length===0&&(e=void 0)}return a.serialize({...n,type:"text",multiple:!0,defaultValue:e,options:this.options?this.options.map(t=>({id:t.id,label:t.label,value:`${t.value}`,condition:t.condition})):null})}return a.serialize({...n,type:"text",multiple:!1,defaultValue:r,options:this.options?this.options.map(e=>({id:e.id,label:e.label,value:`${e.value}`,condition:e.condition})):null});case"number":if(this.multiple){let e;if(Array.isArray(this.defaultValue)){e=[];for(const t of this.defaultValue)typeof t=="number"&&e.push(t);e.length===0&&(e=void 0)}return a.serialize({...n,type:"number",multiple:!0,defaultValue:e,options:this.options?this.options.map(t=>({id:t.id,label:t.label,value:Number(t.value),condition:t.condition})):null})}return a.serialize({...n,type:"number",multiple:!1,defaultValue:d,options:this.options?this.options.map(e=>({id:e.id,label:e.label,value:Number(e.value),condition:e.condition})):null});case"boolean":if(this.multiple){let e;if(Array.isArray(this.defaultValue)){e=[];for(const t of this.defaultValue)typeof t=="boolean"&&e.push(t);e.length===0&&(e=void 0)}return a.serialize({...n,type:"boolean",multiple:!0,defaultValue:e,options:this.options?this.options.map(t=>({id:t.id,label:t.label,value:!!t.value,condition:t.condition})):null})}return a.serialize({...n,type:"boolean",multiple:!1,defaultValue:c,options:this.options?this.options.map(e=>({id:e.id,label:e.label,value:!!e.value,condition:e.condition})):null});case"object":return this.multiple?a.serialize({...n,type:"object",multiple:!0,defaultValue:this.defaultValue,options:this.options?this.options.map(e=>({id:e.id,label:e.label,description:e.description,value:e.value,condition:e.condition})):null}):a.serialize({...n,type:"object",multiple:!1,defaultValue:this.defaultValue,options:this.options?this.options.map(e=>({id:e.id,label:e.label,description:e.description,value:e.value,condition:e.condition})):null});default:throw new Error("Unsupported field type")}}}},V=i=>{const s=[],l=[],o=[],n=[],r=[];return{id:i.id,component:i.component,name:i.name,initializeOpen:i.initializeOpen,condition:i.condition,targets:i.targets,steps:s,nodes:l,edges:o,fields:r,conditions:n,get conditionals(){return this.conditions},addStep(d,c){let e=c?.node;this.nodes.length===0&&(e=p({type:"origin"},this),this.nodes.push(e));const t="serialize"in d?d:x(d,this);if(e){if(!t.node)throw new Error("todo no node");const u=h({sourceNode:e,destinationNode:t.node,sourceNodeHandle:null},this);this.edges.push(u)}return t.fields.length>0&&t.fields.forEach(u=>{this.fields.includes(u)||this.fields.push(u)}),this.steps.includes(t)||(this.steps.push(t),t.node&&this.nodes.push(t.node)),t},addAction(d,c){let e=c?.node;this.nodes.length===0&&(e=p({type:"origin"},this),this.nodes.push(e));const t="serialize"in d?d:b(d,this);if(e){const u=h({sourceNode:e,destinationNode:t,sourceNodeHandle:null},this);this.edges.push(u)}return this.nodes.push(t),t},addCondition(d,c){let e=c?.node;this.nodes.length===0&&(e=p({type:"origin"},this),this.nodes.push(e));const t="serialize"in d?d:y(d,this);if(e){if(!t.node)throw new Error("todo no node");const u=h({sourceNode:e,destinationNode:t.node,sourceNodeHandle:null},this);this.edges.push(u)}return this.conditions.includes(t)||(this.conditions.push(t),t.node&&this.nodes.push(t.node)),t},addConditional(d,c){return this.addCondition(d,c)},addExperience(d,c){let e=c?.node;this.nodes.length===0&&(e=p({type:"origin"},this),this.nodes.push(e));const t=p({type:"experience",experience:d},this);if(this.nodes.push(t),e){const u=h({sourceNode:e,destinationNode:t,sourceNodeHandle:null},this);this.edges.push(u)}return d},addField(d,c){const e="serialize"in d?d:g(d);return c&&c.fields.push(e),this.fields.includes(e)||this.fields.push(e),e},serialize(){return a.serialize({id:this.id,component:this.component,name:this.name,initializeOpen:this.initializeOpen,condition:this.condition,targets:this.targets,steps:this.steps.map(d=>d.id),nodes:this.nodes.map(d=>a.deserialize(d.serialize())),edges:this.edges.map(d=>a.deserialize(d.serialize())),conditions:this.conditions.map(d=>a.deserialize(d.serialize()))})}}};exports.createCondition=y;exports.createConditional=E;exports.createEdge=h;exports.createExperience=V;exports.createExperiencePlugin=z;exports.createField=g;exports.createNode=p;exports.createStep=v;exports.serialization=a;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../../../id-BKIWbSTy.cjs"),N=require("../../../logger-BsmHUUw1.cjs"),a={serialize(i){return JSON.stringify(i)},deserialize(i){return JSON.parse(i)}},z=i=>({name:"create-experience",setup:s=>{i.experiences.forEach(l=>{l.fields.forEach(r=>{s.registerField(a.deserialize(r.serialize()))}),l.steps.forEach(r=>{s.registerStep(a.deserialize(r.serialize()))});const o=l.serialize(),n=a.deserialize(o);n.component=l.component,s.registerExperience(n)})}});function y(i){return i.toLowerCase().replaceAll(/[^a-z0-9\s-]/g,"").trim().replaceAll(/\s+/g,"-")}const b=(i,s)=>({id:f.generateId("node"),experience:s,type:"action",action:i.action,addNext(o){if(!o.node)throw new Error("Cannot connect to node");const n=h({sourceNode:this,destinationNode:o.node,sourceNodeHandle:null},s);s.edges.push(n)},onSuccess(o){if(!o.node)throw new Error("Cannot connect to node");const n=h({sourceNode:this,destinationNode:o.node,sourceNodeHandle:"true"},s);s.edges.push(n)},onFail(o){if(!o.node)throw new Error("Cannot connect to node");const n=h({sourceNode:this,destinationNode:o.node,sourceNodeHandle:"false"},s);s.edges.push(n)},serialize(){return a.serialize({id:this.id,type:this.type,action:this.action})}}),v=i=>{const s=i.name??i.label??"",l=i.key??i.id??y(s);return{id:i.id??f.generateId("step"),name:s,key:l,label:s,fields:i.fields??[],addField(o){const n="serialize"in o?o:g(o);return this.fields.includes(n)||this.fields.push(n),n}}},x=(i,s)=>{const l=i.name??i.label??"",o=i.key??i.id??y(l),n={id:i.id??f.generateId("step"),name:l,key:o,label:l,experience:s,fields:i.fields??[],node:null,nextStep(r){return this.experience.addStep(r,this)},nextCondition(r){return this.experience.addCondition(r,this)},nextConditional(r){return this.experience.addCondition(r,this)},addNextExperience(r){return this.experience.addExperience(r,this)},addField(r){return this.experience.addField(r,this)},serialize(){return a.serialize({id:this.id,name:this.name,key:this.key,label:this.name,fieldKeys:this.fields.map(r=>r.key),fieldIds:this.fields.map(r=>r.id)})}};return p({step:n,type:"step"},s),n},p=(i,s)=>{const l={id:f.generateId("node"),experience:s};if(i.type==="step"){const n={...l,type:"step",connectedStep:i.step,serialize(){return a.serialize({id:this.id,type:this.type,stepKey:this.connectedStep.key,stepId:this.connectedStep.key,name:this.connectedStep.name,label:this.connectedStep.name})}};return n.connectedStep.node=n,n}if(i.type==="conditional"){const n={...l,type:"conditional",connectedCondition:i.conditional,serialize(){return a.serialize({id:this.id,type:this.type,conditionId:this.connectedCondition.id})}};return n.connectedCondition.node=n,n}return i.type==="experience"?{...l,type:"experience",connectedExperience:i.experience,serialize(){return a.serialize({id:this.id,type:this.type,experienceId:this.connectedExperience.id})}}:{...l,type:"origin",serialize(){return a.serialize({id:this.id,type:this.type})}}},h=(i,s)=>({id:f.generateId("edge"),sourceNode:i.sourceNode,sourceNodeHandle:i.sourceNodeHandle,destinationNode:i.destinationNode,experience:s,serialize(){return a.serialize({id:this.id,sourceNodeHandle:this.sourceNodeHandle??void 0,sourceNodeId:this.sourceNode.id,destinationNodeId:this.destinationNode.id})}}),m=(i,s)=>{const l={id:f.generateId("conditional"),label:i.label,condition:i.condition,node:null,experience:s,addTrue(o){if(!this.node||!o.node)throw new Error("todo no node");const n=h({sourceNode:this.node,destinationNode:o.node,sourceNodeHandle:"true"},this.experience);this.experience.edges.push(n)},addFalse(o){if(!this.node||!o.node)throw new Error("todo no node");const n=h({sourceNode:this.node,destinationNode:o.node,sourceNodeHandle:"false"},this.experience);this.experience.edges.push(n)},serialize(){return a.serialize({id:this.id,label:this.label,condition:this.condition})}};return p({conditional:l,type:"conditional"},s),l};function E(...i){return m(...i)}const g=i=>{const s=i.key??i.id??y(i.name);return i.id!==void 0&&N.logger("warn",`createField: 'id' is deprecated. Use 'key' instead of id="${i.id}". The field key "${s}" will be used for lookups.`),{id:i.id??f.generateId("field"),key:s,name:i.name,type:i.type,label:i.label,placeholder:i.placeholder,description:i.description,helpText:i.helpText,defaultValue:i.defaultValue??null,multiple:i.multiple,validation:i.validation??{},condition:i.condition,required:i.required,options:i.options?.map(n=>({id:"id"in n?n.id:f.generateId("option"),...n}))??null,policies:i.policies,serialize(){const n={id:this.id,key:this.key,name:this.name,label:this.label,placeholder:this.placeholder,required:this.required,description:this.description,helpText:this.helpText,validation:this.validation,condition:this.condition,policies:this.policies},r=typeof this.defaultValue=="string"?this.defaultValue:void 0,d=typeof this.defaultValue=="number"?this.defaultValue:void 0,c=typeof this.defaultValue=="boolean"?this.defaultValue:void 0;switch(this.type){case"text":if(this.multiple){let e;if(Array.isArray(this.defaultValue)){e=[];for(const t of this.defaultValue)typeof t=="string"&&e.push(t);e.length===0&&(e=void 0)}return a.serialize({...n,type:"text",multiple:!0,defaultValue:e,options:this.options?this.options.map(t=>({id:t.id,label:t.label,value:`${t.value}`,condition:t.condition})):null})}return a.serialize({...n,type:"text",multiple:!1,defaultValue:r,options:this.options?this.options.map(e=>({id:e.id,label:e.label,value:`${e.value}`,condition:e.condition})):null});case"number":if(this.multiple){let e;if(Array.isArray(this.defaultValue)){e=[];for(const t of this.defaultValue)typeof t=="number"&&e.push(t);e.length===0&&(e=void 0)}return a.serialize({...n,type:"number",multiple:!0,defaultValue:e,options:this.options?this.options.map(t=>({id:t.id,label:t.label,value:Number(t.value),condition:t.condition})):null})}return a.serialize({...n,type:"number",multiple:!1,defaultValue:d,options:this.options?this.options.map(e=>({id:e.id,label:e.label,value:Number(e.value),condition:e.condition})):null});case"boolean":if(this.multiple){let e;if(Array.isArray(this.defaultValue)){e=[];for(const t of this.defaultValue)typeof t=="boolean"&&e.push(t);e.length===0&&(e=void 0)}return a.serialize({...n,type:"boolean",multiple:!0,defaultValue:e,options:this.options?this.options.map(t=>({id:t.id,label:t.label,value:!!t.value,condition:t.condition})):null})}return a.serialize({...n,type:"boolean",multiple:!1,defaultValue:c,options:this.options?this.options.map(e=>({id:e.id,label:e.label,value:!!e.value,condition:e.condition})):null});case"object":return this.multiple?a.serialize({...n,type:"object",multiple:!0,defaultValue:this.defaultValue,options:this.options?this.options.map(e=>({id:e.id,label:e.label,description:e.description,value:e.value,condition:e.condition})):null}):a.serialize({...n,type:"object",multiple:!1,defaultValue:this.defaultValue,options:this.options?this.options.map(e=>({id:e.id,label:e.label,description:e.description,value:e.value,condition:e.condition})):null});default:throw new Error("Unsupported field type")}}}},V=i=>{const s=[],l=[],o=[],n=[],r=[];return{id:i.id,component:i.component,name:i.name,initializeOpen:i.initializeOpen,condition:i.condition,targets:i.targets,steps:s,nodes:l,edges:o,fields:r,conditions:n,get conditionals(){return this.conditions},addStep(d,c){let e=c?.node;this.nodes.length===0&&(e=p({type:"origin"},this),this.nodes.push(e));const t="serialize"in d?d:x(d,this);if(e){if(!t.node)throw new Error("todo no node");const u=h({sourceNode:e,destinationNode:t.node,sourceNodeHandle:null},this);this.edges.push(u)}return t.fields.length>0&&t.fields.forEach(u=>{this.fields.includes(u)||this.fields.push(u)}),this.steps.includes(t)||(this.steps.push(t),t.node&&this.nodes.push(t.node)),t},addAction(d,c){let e=c?.node;this.nodes.length===0&&(e=p({type:"origin"},this),this.nodes.push(e));const t="serialize"in d?d:b(d,this);if(e){const u=h({sourceNode:e,destinationNode:t,sourceNodeHandle:null},this);this.edges.push(u)}return this.nodes.push(t),t},addCondition(d,c){let e=c?.node;this.nodes.length===0&&(e=p({type:"origin"},this),this.nodes.push(e));const t="serialize"in d?d:m(d,this);if(e){if(!t.node)throw new Error("todo no node");const u=h({sourceNode:e,destinationNode:t.node,sourceNodeHandle:null},this);this.edges.push(u)}return this.conditions.includes(t)||(this.conditions.push(t),t.node&&this.nodes.push(t.node)),t},addConditional(d,c){return this.addCondition(d,c)},addExperience(d,c){let e=c?.node;this.nodes.length===0&&(e=p({type:"origin"},this),this.nodes.push(e));const t=p({type:"experience",experience:d},this);if(this.nodes.push(t),e){const u=h({sourceNode:e,destinationNode:t,sourceNodeHandle:null},this);this.edges.push(u)}return d},addField(d,c){const e="serialize"in d?d:g(d);return c&&c.fields.push(e),this.fields.includes(e)||this.fields.push(e),e},serialize(){return a.serialize({id:this.id,component:this.component,name:this.name,initializeOpen:this.initializeOpen,condition:this.condition,targets:this.targets,steps:this.steps.map(d=>d.id),nodes:this.nodes.map(d=>a.deserialize(d.serialize())),edges:this.edges.map(d=>a.deserialize(d.serialize())),conditions:this.conditions.map(d=>a.deserialize(d.serialize()))})}}};exports.createCondition=m;exports.createConditional=E;exports.createEdge=h;exports.createExperience=V;exports.createExperiencePlugin=z;exports.createField=g;exports.createNode=p;exports.createStep=v;exports.serialization=a;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../../../api-C90ugp6M.cjs"),a=require("../../../logger-BsmHUUw1.cjs");function m(n){let e=2166136261;for(let t=0;t<n.length;t++)e^=n.charCodeAt(t),e=Math.imul(e,16777619);return e>>>0}function h(n){return m(n)%100}function w(n,e){return e<=0?!1:e>=100?!0:n<e}function v(n){return typeof n!="object"||n===null||!("id"in n&&"name"in n&&"enabled"in n&&"weight"in n&&"version"in n)?!1:typeof n.id=="string"&&typeof n.name=="string"&&typeof n.enabled=="boolean"&&typeof n.weight=="number"&&typeof n.version=="number"}function y(n){return typeof n!="object"||n===null||!("features"in n)||!Array.isArray(n.features)?!1:n.features.every(v)}function j(n){return typeof n!="object"||n===null?!1:"id"in n&&"name"in n&&"nodes"in n&&"edges"in n&&typeof n.id=="string"&&typeof n.name=="string"&&Array.isArray(n.nodes)&&Array.isArray(n.edges)}function C(n,e){const t=new Set,o=[];for(const r of n){if(r.type!=="conditional")continue;const i=r.conditionId??r.conditionalId;if(!i||t.has(i))continue;t.add(i);const s=e.get(i);if(!s){a.logger("warn",`Condition with id '${i}' not found in project conditions`);continue}o.push({id:s.id,label:s.name,condition:s.condition})}return o}function c(n,e){if(e.conditions)for(const t of e.conditions)n.registerCondition(t)}function b(n,e,t){if(!j(e)){a.logger("warn",`Skipping invalid experience payload: ${JSON.stringify(e)}`);return}const o=e.componentName?n.components.listStore.getState().find(r=>r.name===e.componentName)?.component:void 0;n.registerExperience({id:e.id,key:e.key,name:e.name,targets:e.targets??[],steps:e.nodes.filter(r=>r.type==="step").map(r=>r.stepKey),nodes:e.nodes,edges:e.edges,conditions:C(e.nodes,t),actions:e.actions,condition:e.condition,initializeOpen:e.initializeOpen,component:o})}function f(n,e){if(e.fields)for(const t of e.fields)n.registerField(t)}function u(n,e){if(e.steps)for(const t of e.steps)n.registerStep(t)}function d(n,e){const t=new Map;if(e.conditions)for(const o of e.conditions)t.set(o.id,o);if(e.experiences)for(const o of e.experiences)b(n,o,t)}function S(n){const e=n.searchParams["preview-token"];if(e&&e.length>0)return e[0]}function P(n){const e=new Set,t=n.searchParams.feature;if(!t)return e;for(const o of t){const r=o.indexOf(":");r>0&&e.add(o.substring(0,r))}return e}function l(n,e,t){const o=P(n),r=n.session?.id;if(!r)throw new Error("Session ID is required for feature registration");const i=h(r);for(const s of e.features)o.has(s.id)||k(n,s,t,i)}function k(n,e,t,o){n.registerFeature(e.id,{key:`v${e.version}`,name:e.name,storage:t?"session":"local",decide:()=>e.enabled?w(o,e.weight):!1})}function I(){let n;try{n=__PICKED_PROJECT_CONFIG__}catch{return}if(n===void 0)return;let e;if(typeof n=="string")try{e=JSON.parse(n)}catch{a.logger("warn","Build-time project config is not valid JSON");return}else e=n;if(y(e))return e;a.logger("warn","Build-time project config has invalid shape, falling back to runtime fetch")}function E(n){try{const e=new URL(n).hostname;return e==="localhost"||e==="127.0.0.1"||e==="::1"}catch{return!1}}function F(n){if(typeof n!="object"||n===null||!("cause"in n))return!1;const{cause:e}=n;return typeof e!="object"||e===null||!("code"in e)?!1:e.code==="ECONNREFUSED"}async function g(n,e,t){const o=t?.previewToken?`projects/${e}?preview_token=${encodeURIComponent(t.previewToken)}`:`projects/${e}`;let r;try{r=await p.get(n,o,t?.headers)}catch(s){return E(n)&&F(s)||a.logger("warn","Failed to fetch project config",s),null}if(!r.ok)return a.logger("warn",`Project config request failed with status ${r.status.toString()}`),null;let i;try{i=await r.json()}catch{return a.logger("warn","Failed to parse project config response"),null}return y(i)?i:(a.logger("warn","Invalid project config response shape"),null)}function O(n){return{name:"dynamic-experiences",setup:e=>{const t=n?.apiUrl??e.apiUrl;return{onStart:async()=>{const o=S(e);if(o){const s=await g(t,e.projectId,{previewToken:o});s&&(l(e,s,!0),c(e,s),f(e,s),u(e,s),d(e,s));return}const r=n?.projectConfig??I();if(r){l(e,r,!1),c(e,r),f(e,r),u(e,r),d(e,r);return}const i=await g(t,e.projectId);i&&(l(e,i,!1),c(e,i),f(e,i),u(e,i),d(e,i))}}}}}exports.createClientHeaders=p.createClientHeaders;exports.dynamicExperiencesPlugin=O;exports.fetchProject=g;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../../../api-GvmToTw0.cjs"),a=require("../../../logger-BsmHUUw1.cjs"),m=require("../../../nodes-DsL8kMSX.cjs");function h(n){let e=2166136261;for(let t=0;t<n.length;t++)e^=n.charCodeAt(t),e=Math.imul(e,16777619);return e>>>0}function w(n){return h(n)%100}function v(n,e){return e<=0?!1:e>=100?!0:n<e}function j(n){return typeof n!="object"||n===null||!("id"in n&&"name"in n&&"enabled"in n&&"weight"in n&&"version"in n)?!1:typeof n.id=="string"&&typeof n.name=="string"&&typeof n.enabled=="boolean"&&typeof n.weight=="number"&&typeof n.version=="number"}function y(n){return typeof n!="object"||n===null||!("features"in n)||!Array.isArray(n.features)?!1:n.features.every(j)}function C(n){return typeof n!="object"||n===null?!1:"id"in n&&"name"in n&&"nodes"in n&&"edges"in n&&typeof n.id=="string"&&typeof n.name=="string"&&Array.isArray(n.nodes)&&Array.isArray(n.edges)}function S(n,e){const t=new Set,o=[];for(const r of n){if(r.type!=="conditional")continue;const i=r.conditionId??r.conditionalId;if(!i||t.has(i))continue;t.add(i);const s=e.get(i);if(!s){a.logger("warn",`Condition with id '${i}' not found in project conditions`);continue}o.push({id:s.id,label:s.name,condition:s.condition})}return o}function c(n,e){if(e.conditions)for(const t of e.conditions)n.registerCondition(t)}function b(n,e,t){if(!C(e)){a.logger("warn",`Skipping invalid experience payload: ${JSON.stringify(e)}`);return}const o=e.componentName?n.components.listStore.getState().find(r=>r.name===e.componentName)?.component:void 0;n.registerExperience({id:e.id,key:e.key,name:e.name,targets:e.targets??[],steps:e.nodes.filter(r=>r.type==="step").map(r=>m.resolveStepKey(r)),nodes:e.nodes,edges:e.edges,conditions:S(e.nodes,t),actions:e.actions,condition:e.condition,initializeOpen:e.initializeOpen,component:o})}function f(n,e){if(e.fields)for(const t of e.fields)n.registerField(t)}function u(n,e){if(e.steps)for(const t of e.steps)n.registerStep(t)}function d(n,e){const t=new Map;if(e.conditions)for(const o of e.conditions)t.set(o.id,o);if(e.experiences)for(const o of e.experiences)b(n,o,t)}function P(n){const e=n.searchParams["preview-token"];if(e&&e.length>0)return e[0]}function k(n){const e=new Set,t=n.searchParams.feature;if(!t)return e;for(const o of t){const r=o.indexOf(":");r>0&&e.add(o.substring(0,r))}return e}function l(n,e,t){const o=k(n),r=n.session?.id;if(!r)throw new Error("Session ID is required for feature registration");const i=w(r);for(const s of e.features)o.has(s.id)||I(n,s,t,i)}function I(n,e,t,o){n.registerFeature(e.id,{key:`v${e.version}`,name:e.name,storage:t?"session":"local",decide:()=>e.enabled?v(o,e.weight):!1})}function E(){let n;try{n=__PICKED_PROJECT_CONFIG__}catch{return}if(n===void 0)return;let e;if(typeof n=="string")try{e=JSON.parse(n)}catch{a.logger("warn","Build-time project config is not valid JSON");return}else e=n;if(y(e))return e;a.logger("warn","Build-time project config has invalid shape, falling back to runtime fetch")}function F(n){try{const e=new URL(n).hostname;return e==="localhost"||e==="127.0.0.1"||e==="::1"}catch{return!1}}function O(n){if(typeof n!="object"||n===null||!("cause"in n))return!1;const{cause:e}=n;return typeof e!="object"||e===null||!("code"in e)?!1:e.code==="ECONNREFUSED"}async function g(n,e,t){const o=t?.previewToken?`projects/${e}?preview_token=${encodeURIComponent(t.previewToken)}`:`projects/${e}`;let r;try{r=await p.get(n,o,t?.headers)}catch(s){return F(n)&&O(s)||a.logger("warn","Failed to fetch project config",s),null}if(!r.ok)return a.logger("warn",`Project config request failed with status ${r.status.toString()}`),null;let i;try{i=await r.json()}catch{return a.logger("warn","Failed to parse project config response"),null}return y(i)?i:(a.logger("warn","Invalid project config response shape"),null)}function A(n){return{name:"dynamic-experiences",setup:e=>{const t=n?.apiUrl??e.apiUrl;return{onStart:async()=>{const o=P(e);if(o){const s=await g(t,e.projectId,{previewToken:o});s&&(l(e,s,!0),c(e,s),f(e,s),u(e,s),d(e,s));return}const r=n?.projectConfig??E();if(r){l(e,r,!1),c(e,r),f(e,r),u(e,r),d(e,r);return}const i=await g(t,e.projectId);i&&(l(e,i,!1),c(e,i),f(e,i),u(e,i),d(e,i))}}}}}exports.createClientHeaders=p.createClientHeaders;exports.dynamicExperiencesPlugin=A;exports.fetchProject=g;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-Bi3-1tP5.cjs");function S(){let c,i;return{promise:new Promise((t,o)=>{c=t,i=o}),resolve:t=>c(t),reject:t=>i(t)}}function C(c,i){const{promise:E,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),x=r.createEvent(),p=r.createEvent(),f=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),u=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const g=n[d],m=e.componentStore.getState();if(m&&g?.isValidComponent(m.component))return{rendered:await g.render(m.component,c,e),rendererIndex:d}}return null});a.on(l,(e,n)=>({...e,renderedExperiences:[...e.renderedExperiences,n],currentExperienceIndex:e.currentExperienceIndex+1})).on(p,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(x,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:f,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex<e.length&&!n.isComplete,fn:({experiences:e,state:n})=>({experience:e[n.currentExperienceIndex],availableRenderers:i,startRendererIndex:0}),target:u}),r.sample({clock:u.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:u.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:f,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:x});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:x,target:I}),o(),E}exports.render=C;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-CxiOyYPf.cjs");function S(){let c,i;return{promise:new Promise((t,o)=>{c=t,i=o}),resolve:t=>c(t),reject:t=>i(t)}}function C(c,i){const{promise:E,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),x=r.createEvent(),p=r.createEvent(),f=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),u=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const g=n[d],m=e.componentStore.getState();if(m&&g?.isValidComponent(m.component))return{rendered:await g.render(m.component,c,e),rendererIndex:d}}return null});a.on(l,(e,n)=>({...e,renderedExperiences:[...e.renderedExperiences,n],currentExperienceIndex:e.currentExperienceIndex+1})).on(p,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(x,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:f,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex<e.length&&!n.isComplete,fn:({experiences:e,state:n})=>({experience:e[n.currentExperienceIndex],availableRenderers:i,startRendererIndex:0}),target:u}),r.sample({clock:u.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:u.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:f,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:x});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:x,target:I}),o(),E}exports.render=C;
package/dist/esm/index.js CHANGED
@@ -1,15 +1,16 @@
1
1
  import { createDomain as j, createApi as w, attach as V, combine as A, createStore as L, createEffect as C, sample as v, createEvent as D } from "effector";
2
2
  import { createFactory as k, invoke as b } from "@withease/factories";
3
- import { g as Z, t as ne, c as se, i as ie, e as _, a as oe, b as ae, d as ce } from "../experience-instance-8P1fJuPC.js";
4
- import { f as Ht } from "../experience-instance-8P1fJuPC.js";
3
+ import { g as Z, t as ne, c as se, i as ie, e as _, a as oe, d as ae } from "../experience-instance-DCknHRkX.js";
4
+ import { b as Gt } from "../experience-instance-DCknHRkX.js";
5
5
  import { l as F } from "../logger-C9a75KZn.js";
6
6
  import { c as z, l as R, s as M } from "../storage-Co_LbKr_.js";
7
- import { a as Jt } from "../storage-Co_LbKr_.js";
8
- import { p as ue, g as de } from "../api-CQ1Lb-dB.js";
7
+ import { a as qt } from "../storage-Co_LbKr_.js";
8
+ import { p as ce, g as ue } from "../api-GlH9T8_1.js";
9
+ import { i as de } from "../nodes-DQt4TfuO.js";
9
10
  import { g as le } from "../id-BW-g3y32.js";
10
11
  import { i as fe } from "../object-JwZ58NOH.js";
11
12
  import { s as H, a as G, b as pe, c as ge, d as me } from "../supports-8YT4QKI7.js";
12
- import { e as Kt, f as Wt, g as Yt, h as Qt, i as Xt, j as Zt, k as er } from "../supports-8YT4QKI7.js";
13
+ import { e as Wt, f as Yt, g as Qt, h as Xt, i as Zt, j as er, k as tr } from "../supports-8YT4QKI7.js";
13
14
  const U = j("experience"), ye = k(
14
15
  ({ client: t, experience: e }) => {
15
16
  const r = U.store(e), n = w(r, {
@@ -234,7 +235,7 @@ const Be = (t, e) => {
234
235
  path: window.location.pathname
235
236
  }, u = {}, o = document.getElementById("picked_script")?.dataset.verceltoken;
236
237
  o && (u["x-vercel-protection-bypass"] = o);
237
- const p = (await ue(t.apiUrl, "ping", i, u)).ok;
238
+ const p = (await ce(t.apiUrl, "ping", i, u)).ok;
238
239
  return p && r.set(e), p;
239
240
  } catch (e) {
240
241
  return F("error", e), !1;
@@ -491,7 +492,7 @@ const Te = k(() => {
491
492
  const l = { lastStepIndex: -1, secondLastStepIndex: -1 };
492
493
  for (let p = s.length - 1; p >= 0; p--) {
493
494
  const f = s[p], h = f?.node;
494
- if (!(!h || !oe(h)) && !(o && f?.experienceId !== o))
495
+ if (!(!h || !de(h)) && !(o && f?.experienceId !== o))
495
496
  if (l.lastStepIndex === -1)
496
497
  l.lastStepIndex = p;
497
498
  else {
@@ -1095,7 +1096,7 @@ class At {
1095
1096
  searchParams = mt();
1096
1097
  history = Le();
1097
1098
  components = Ee({ client: this });
1098
- experienceInstances = ae({ client: this });
1099
+ experienceInstances = oe({ client: this });
1099
1100
  experiences = ke({ client: this });
1100
1101
  frameworks = Ae({ client: this });
1101
1102
  predicates = Me({ client: this });
@@ -1108,7 +1109,7 @@ class At {
1108
1109
  constructor(e) {
1109
1110
  F("info", "Picked client initializing."), this.events = He(this.eventBus);
1110
1111
  const { organizationId: r, projectId: n } = vt(e);
1111
- this.organizationId = r, this.projectId = n, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || gt(), this.dashboardUrl = e.dashboardUrl ?? "https://dashboard.picked.app", this.documentationSiteUrl = e.documentationSiteUrl ?? "https://docs.picked.app", this.session = kt(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.setupComponents(), this.precondition = e.precondition, this.condition = e.condition, this.eventBus({ type: "load", version: de() }), F("info", "Picked client initialized.");
1112
+ this.organizationId = r, this.projectId = n, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || gt(), this.dashboardUrl = e.dashboardUrl ?? "https://dashboard.picked.app", this.documentationSiteUrl = e.documentationSiteUrl ?? "https://docs.picked.app", this.session = kt(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.setupComponents(), this.precondition = e.precondition, this.condition = e.condition, this.eventBus({ type: "load", version: ue() }), F("info", "Picked client initialized.");
1112
1113
  }
1113
1114
  start = () => {
1114
1115
  Ce(this), (async () => {
@@ -1124,7 +1125,7 @@ class At {
1124
1125
  const u = n;
1125
1126
  this.session.setIsUser(u), this.eventBus({ type: "user_decide", value: u });
1126
1127
  }
1127
- if (this.eventBus({ type: "initialize" }), i && K(this), await ce(), i && K(this), this.eventBus({ type: "ready" }), this.isReady = !0, this.session) {
1128
+ if (this.eventBus({ type: "initialize" }), i && K(this), await ae(), i && K(this), this.eventBus({ type: "ready" }), this.isReady = !0, this.session) {
1128
1129
  const { id: u, isUser: s, identifiers: o } = this.session;
1129
1130
  this.eventBus({ type: "session", id: u, isUser: s, identifiers: o });
1130
1131
  }
@@ -1294,40 +1295,40 @@ class At {
1294
1295
  });
1295
1296
  };
1296
1297
  }
1297
- function Ut(t) {
1298
+ function Nt(t) {
1298
1299
  return {
1299
1300
  $$type: "lazy-component",
1300
1301
  load: t
1301
1302
  };
1302
1303
  }
1303
- function Nt(t) {
1304
+ function Tt(t) {
1304
1305
  return typeof t == "object" && t !== null && "$$type" in t && t.$$type === "lazy-component";
1305
1306
  }
1306
- const Tt = (t) => {
1307
+ const Lt = (t) => {
1307
1308
  const e = new At(t);
1308
1309
  return me(e), e;
1309
1310
  };
1310
1311
  export {
1311
1312
  At as Picked,
1312
- Tt as createClient,
1313
+ Lt as createClient,
1313
1314
  z as createStorageKey,
1314
1315
  _ as evaluateRuleLogic,
1315
1316
  bt as getPickedConfig,
1316
- Nt as isLazyLoader,
1317
- Ht as isPickedRoot,
1318
- Ut as lazyComponent,
1317
+ Tt as isLazyLoader,
1318
+ Gt as isPickedRoot,
1319
+ Nt as lazyComponent,
1319
1320
  R as localStore,
1320
1321
  M as sessionStore,
1321
- Jt as subscribe,
1322
- Kt as supportsCookies,
1322
+ qt as subscribe,
1323
+ Wt as supportsCookies,
1323
1324
  ge as supportsCryptoRandomUUID,
1324
1325
  H as supportsDocument,
1325
- Wt as supportsHistory,
1326
- Yt as supportsIntersectionObserver,
1326
+ Yt as supportsHistory,
1327
+ Qt as supportsIntersectionObserver,
1327
1328
  pe as supportsLocalStorage,
1328
- Qt as supportsLocation,
1329
- Xt as supportsSessionStorage,
1330
- Zt as supportsShadowRoot,
1331
- er as supportsWebComponents,
1329
+ Xt as supportsLocation,
1330
+ Zt as supportsSessionStorage,
1331
+ er as supportsShadowRoot,
1332
+ tr as supportsWebComponents,
1332
1333
  G as supportsWindow
1333
1334
  };
@@ -124,6 +124,7 @@ const z = (i, s) => ({
124
124
  id: this.id,
125
125
  type: this.type,
126
126
  stepKey: this.connectedStep.key,
127
+ stepId: this.connectedStep.key,
127
128
  name: this.connectedStep.name,
128
129
  label: this.connectedStep.name
129
130
  });
@@ -1,44 +1,45 @@
1
- import { a as m } from "../../../api-CQ1Lb-dB.js";
2
- import { c as _ } from "../../../api-CQ1Lb-dB.js";
1
+ import { a as m } from "../../../api-GlH9T8_1.js";
2
+ import { c as U } from "../../../api-GlH9T8_1.js";
3
3
  import { l as a } from "../../../logger-C9a75KZn.js";
4
- function y(n) {
4
+ import { r as y } from "../../../nodes-DQt4TfuO.js";
5
+ function h(n) {
5
6
  let e = 2166136261;
6
7
  for (let t = 0; t < n.length; t++)
7
8
  e ^= n.charCodeAt(t), e = Math.imul(e, 16777619);
8
9
  return e >>> 0;
9
10
  }
10
- function h(n) {
11
- return y(n) % 100;
11
+ function w(n) {
12
+ return h(n) % 100;
12
13
  }
13
- function w(n, e) {
14
+ function v(n, e) {
14
15
  return e <= 0 ? !1 : e >= 100 ? !0 : n < e;
15
16
  }
16
- function v(n) {
17
+ function j(n) {
17
18
  return typeof n != "object" || n === null || !("id" in n && "name" in n && "enabled" in n && "weight" in n && "version" in n) ? !1 : typeof n.id == "string" && typeof n.name == "string" && typeof n.enabled == "boolean" && typeof n.weight == "number" && typeof n.version == "number";
18
19
  }
19
20
  function g(n) {
20
- return typeof n != "object" || n === null || !("features" in n) || !Array.isArray(n.features) ? !1 : n.features.every(v);
21
+ return typeof n != "object" || n === null || !("features" in n) || !Array.isArray(n.features) ? !1 : n.features.every(j);
21
22
  }
22
- function j(n) {
23
+ function C(n) {
23
24
  return typeof n != "object" || n === null ? !1 : "id" in n && "name" in n && "nodes" in n && "edges" in n && typeof n.id == "string" && typeof n.name == "string" && Array.isArray(n.nodes) && Array.isArray(n.edges);
24
25
  }
25
- function C(n, e) {
26
- const t = /* @__PURE__ */ new Set(), i = [];
26
+ function S(n, e) {
27
+ const t = /* @__PURE__ */ new Set(), r = [];
27
28
  for (const o of n) {
28
29
  if (o.type !== "conditional")
29
30
  continue;
30
- const r = o.conditionId ?? o.conditionalId;
31
- if (!r || t.has(r))
31
+ const i = o.conditionId ?? o.conditionalId;
32
+ if (!i || t.has(i))
32
33
  continue;
33
- t.add(r);
34
- const s = e.get(r);
34
+ t.add(i);
35
+ const s = e.get(i);
35
36
  if (!s) {
36
- a("warn", `Condition with id '${r}' not found in project conditions`);
37
+ a("warn", `Condition with id '${i}' not found in project conditions`);
37
38
  continue;
38
39
  }
39
- i.push({ id: s.id, label: s.name, condition: s.condition });
40
+ r.push({ id: s.id, label: s.name, condition: s.condition });
40
41
  }
41
- return i;
42
+ return r;
42
43
  }
43
44
  function c(n, e) {
44
45
  if (e.conditions)
@@ -46,24 +47,24 @@ function c(n, e) {
46
47
  n.registerCondition(t);
47
48
  }
48
49
  function b(n, e, t) {
49
- if (!j(e)) {
50
+ if (!C(e)) {
50
51
  a("warn", `Skipping invalid experience payload: ${JSON.stringify(e)}`);
51
52
  return;
52
53
  }
53
- const i = e.componentName ? n.components.listStore.getState().find((o) => o.name === e.componentName)?.component : void 0;
54
+ const r = e.componentName ? n.components.listStore.getState().find((o) => o.name === e.componentName)?.component : void 0;
54
55
  n.registerExperience({
55
56
  id: e.id,
56
57
  key: e.key,
57
58
  name: e.name,
58
59
  targets: e.targets ?? [],
59
- steps: e.nodes.filter((o) => o.type === "step").map((o) => o.stepKey),
60
+ steps: e.nodes.filter((o) => o.type === "step").map((o) => y(o)),
60
61
  nodes: e.nodes,
61
62
  edges: e.edges,
62
- conditions: C(e.nodes, t),
63
+ conditions: S(e.nodes, t),
63
64
  actions: e.actions,
64
65
  condition: e.condition,
65
66
  initializeOpen: e.initializeOpen,
66
- component: i
67
+ component: r
67
68
  });
68
69
  }
69
70
  function f(n, e) {
@@ -79,44 +80,44 @@ function u(n, e) {
79
80
  function d(n, e) {
80
81
  const t = /* @__PURE__ */ new Map();
81
82
  if (e.conditions)
82
- for (const i of e.conditions)
83
- t.set(i.id, i);
83
+ for (const r of e.conditions)
84
+ t.set(r.id, r);
84
85
  if (e.experiences)
85
- for (const i of e.experiences)
86
- b(n, i, t);
86
+ for (const r of e.experiences)
87
+ b(n, r, t);
87
88
  }
88
- function S(n) {
89
+ function k(n) {
89
90
  const e = n.searchParams["preview-token"];
90
91
  if (e && e.length > 0)
91
92
  return e[0];
92
93
  }
93
- function k(n) {
94
+ function I(n) {
94
95
  const e = /* @__PURE__ */ new Set(), t = n.searchParams.feature;
95
96
  if (!t)
96
97
  return e;
97
- for (const i of t) {
98
- const o = i.indexOf(":");
99
- o > 0 && e.add(i.substring(0, o));
98
+ for (const r of t) {
99
+ const o = r.indexOf(":");
100
+ o > 0 && e.add(r.substring(0, o));
100
101
  }
101
102
  return e;
102
103
  }
103
104
  function l(n, e, t) {
104
- const i = k(n), o = n.session?.id;
105
+ const r = I(n), o = n.session?.id;
105
106
  if (!o)
106
107
  throw new Error("Session ID is required for feature registration");
107
- const r = h(o);
108
+ const i = w(o);
108
109
  for (const s of e.features)
109
- i.has(s.id) || I(n, s, t, r);
110
+ r.has(s.id) || P(n, s, t, i);
110
111
  }
111
- function I(n, e, t, i) {
112
+ function P(n, e, t, r) {
112
113
  n.registerFeature(e.id, {
113
114
  key: `v${e.version}`,
114
115
  name: e.name,
115
116
  storage: t ? "session" : "local",
116
- decide: () => e.enabled ? w(i, e.weight) : !1
117
+ decide: () => e.enabled ? v(r, e.weight) : !1
117
118
  });
118
119
  }
119
- function P() {
120
+ function F() {
120
121
  let n;
121
122
  try {
122
123
  n = __PICKED_PROJECT_CONFIG__;
@@ -139,7 +140,7 @@ function P() {
139
140
  return e;
140
141
  a("warn", "Build-time project config has invalid shape, falling back to runtime fetch");
141
142
  }
142
- function F(n) {
143
+ function E(n) {
143
144
  try {
144
145
  const e = new URL(n).hostname;
145
146
  return e === "localhost" || e === "127.0.0.1" || e === "::1";
@@ -147,57 +148,57 @@ function F(n) {
147
148
  return !1;
148
149
  }
149
150
  }
150
- function E(n) {
151
+ function O(n) {
151
152
  if (typeof n != "object" || n === null || !("cause" in n))
152
153
  return !1;
153
154
  const { cause: e } = n;
154
155
  return typeof e != "object" || e === null || !("code" in e) ? !1 : e.code === "ECONNREFUSED";
155
156
  }
156
157
  async function p(n, e, t) {
157
- const i = t?.previewToken ? `projects/${e}?preview_token=${encodeURIComponent(t.previewToken)}` : `projects/${e}`;
158
+ const r = t?.previewToken ? `projects/${e}?preview_token=${encodeURIComponent(t.previewToken)}` : `projects/${e}`;
158
159
  let o;
159
160
  try {
160
- o = await m(n, i, t?.headers);
161
+ o = await m(n, r, t?.headers);
161
162
  } catch (s) {
162
- return F(n) && E(s) || a("warn", "Failed to fetch project config", s), null;
163
+ return E(n) && O(s) || a("warn", "Failed to fetch project config", s), null;
163
164
  }
164
165
  if (!o.ok)
165
166
  return a("warn", `Project config request failed with status ${o.status.toString()}`), null;
166
- let r;
167
+ let i;
167
168
  try {
168
- r = await o.json();
169
+ i = await o.json();
169
170
  } catch {
170
171
  return a("warn", "Failed to parse project config response"), null;
171
172
  }
172
- return g(r) ? r : (a("warn", "Invalid project config response shape"), null);
173
+ return g(i) ? i : (a("warn", "Invalid project config response shape"), null);
173
174
  }
174
- function N(n) {
175
+ function T(n) {
175
176
  return {
176
177
  name: "dynamic-experiences",
177
178
  setup: (e) => {
178
179
  const t = n?.apiUrl ?? e.apiUrl;
179
180
  return {
180
181
  onStart: async () => {
181
- const i = S(e);
182
- if (i) {
183
- const s = await p(t, e.projectId, { previewToken: i });
182
+ const r = k(e);
183
+ if (r) {
184
+ const s = await p(t, e.projectId, { previewToken: r });
184
185
  s && (l(e, s, !0), c(e, s), f(e, s), u(e, s), d(e, s));
185
186
  return;
186
187
  }
187
- const o = n?.projectConfig ?? P();
188
+ const o = n?.projectConfig ?? F();
188
189
  if (o) {
189
190
  l(e, o, !1), c(e, o), f(e, o), u(e, o), d(e, o);
190
191
  return;
191
192
  }
192
- const r = await p(t, e.projectId);
193
- r && (l(e, r, !1), c(e, r), f(e, r), u(e, r), d(e, r));
193
+ const i = await p(t, e.projectId);
194
+ i && (l(e, i, !1), c(e, i), f(e, i), u(e, i), d(e, i));
194
195
  }
195
196
  };
196
197
  }
197
198
  };
198
199
  }
199
200
  export {
200
- _ as createClientHeaders,
201
- N as dynamicExperiencesPlugin,
201
+ U as createClientHeaders,
202
+ T as dynamicExperiencesPlugin,
202
203
  p as fetchProject
203
204
  };