@picked/client 0.0.1-dev.1786601464574 → 0.0.1-dev.1787019239195
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{api-DS7fA9kj.cjs → api-TWnRLh3X.cjs} +1 -1
- package/dist/{api-C8B96Kwv.js → api-uttjU_Tg.js} +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
- package/dist/cjs/server/index.js +1 -1
- package/dist/docs/_root.css +101 -0
- package/dist/docs/how-to/analytics/index.md +2 -0
- package/dist/docs/how-to/authenticate-the-cli.md +15 -13
- package/dist/docs/how-to/create-and-revoke-an-api-key.md +7 -2
- package/dist/docs/how-to/debug-with-the-chrome-extension.md +1 -1
- package/dist/docs/how-to/install-the-sdk.md +30 -12
- package/dist/docs/how-to/install-the-vite-plugin.md +22 -9
- package/dist/docs/how-to/read-a-feature-flag.md +1 -1
- package/dist/docs/how-to/register-a-component.md +2 -2
- package/dist/docs/how-to/register-an-action-handler.md +1 -1
- package/dist/docs/how-to/server-render-a-page.md +1 -1
- package/dist/docs/how-to/write-a-predicate.md +1 -1
- package/dist/docs/reference/dashboard/api-keys.mdx +5 -4
- package/dist/docs/reference/pickedql/dimensions.md +10 -0
- package/dist/docs/reference/sdk/analytics-events.md +445 -0
- package/dist/docs/reference/sdk/content.md +1 -1
- package/dist/docs/reference/sdk/features.md +1 -1
- package/dist/docs/reference/sdk/plugins/dynamic-experiences.md +1 -1
- package/dist/docs/reference/sdk/plugins/window-object.md +1 -1
- package/dist/docs/reference/sdk/ssr/serialize.md +1 -1
- package/dist/docs/reference/sdk/type-generation.md +58 -17
- package/dist/docs/reference/tools/cli.md +16 -9
- package/dist/docs/reference/tools/vite-plugin.md +32 -6
- package/dist/docs/tutorials/first-experience.mdx +4 -4
- package/dist/docs/tutorials/first-server-rendered-page.mdx +3 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
- package/dist/esm/server/index.js +1 -1
- package/dist/{plugin-C8hWW3ed.js → plugin-Bb2fJVFr.js} +1 -1
- package/dist/{plugin-Dtg2sOad.cjs → plugin-hFQIiHOB.cjs} +1 -1
- package/dist/{provider-BEpRDCyr.js → provider-B8vTLrFT.js} +1 -1
- package/dist/{provider-ixdOyYTA.cjs → provider-DZEDUlIk.cjs} +1 -1
- package/dist/version-CfTz7TK0.cjs +1 -0
- package/dist/{version-IAAIvoH9.js → version-DjCWhJD5.js} +1 -1
- package/package.json +2 -2
- package/dist/version-BLzNWQ-j.cjs +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
require("./logger-CSTvAyyB.cjs");const e=require("./version-
|
|
1
|
+
require("./logger-CSTvAyyB.cjs");const e=require("./version-CfTz7TK0.cjs");let t=require("@picked/delivery-api-client");function n(n){return{...n,headers:{...(0,t.createClientHeaders)(`sdk`,e.t()),...n?.headers},onWarn:(e,t)=>{}}}async function r(e,r,i){return(0,t.fetchProject)(e,r,n(i))}async function i(e,r,i,a){return(0,t.fetchExperienceContent)(e,r,i,n(a))}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./logger-DMN6TxJJ.js";
|
|
2
|
-
import { t as e } from "./version-
|
|
2
|
+
import { t as e } from "./version-DjCWhJD5.js";
|
|
3
3
|
import { createClientHeaders as t, fetchExperienceContent as n, fetchProject as r } from "@picked/delivery-api-client";
|
|
4
4
|
//#region src/data-source/api.ts
|
|
5
5
|
function i(n) {
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../object-CIkt7Fkr.cjs"),t=require("../rules-logic-CGZIYgAI.cjs"),n=require("../logger-CSTvAyyB.cjs"),r=require("../supports-DBzjGaWD.cjs"),i=require("../dom-DlLH3FxV.cjs"),a=require("../experience-instance-Dej3P1sE.cjs"),o=require("../storage-DUw9UJ2h.cjs"),s=require("../id-Js-62re-.cjs"),c=require("../version-BLzNWQ-j.cjs"),l=require("../inert-script-report-ijRHPtcY.cjs");let u=require("effector"),d=require("@withease/factories"),f=require("@picked/delivery-api-client");var p=(0,u.createDomain)(`experience`),m=(0,d.createFactory)(({client:e,experience:n})=>{let r=p.store(n),o=(0,u.createApi)(r,{merge(e,t){return{...e,...t.experience}}}),s=r.map(e=>({name:e.name,decisionLogic:e.condition,targetSelectors:e.targets,initializeOpenLogic:e.initializeOpen})),c=(0,u.combine)(r,e.components.listStore,(e,t)=>(e.componentName?t.find(t=>t.name===e.componentName):void 0)||t.find(t=>t.name===`experience:${e.id}`)||t.find(e=>e.name===`experience`),{skipVoid:!1}),l=(0,u.combine)(r,e.steps.indexStore,e.conditions.indexStore,(e,t,n)=>{let r=e.nodes.filter(a.u).map(e=>t[e.stepId]).filter(e=>e!==void 0),i=e.nodes.filter(a.l).map(e=>n[e.conditionId]).filter(e=>e!==void 0);return{steps:r,nodes:e.nodes,edges:e.edges,conditions:i}}),d=n.actions??[],f,m=(0,u.attach)({source:s,effect:(t,r)=>{let a=i.i(t.targetSelectors,n.id);a.forEach(({elements:e})=>e.forEach(e=>i.s(e,n.id))),i.t(a,n.id,n.key).forEach(t=>{r?e.experienceInstances.spawn(f,t,r):e.experienceInstances.spawn(f,t)})}}),h=(0,u.combine)({preconditionPassed:e.preconditionPassedStore,isUser:e.session.store.map(e=>e.isUser,{skipVoid:!1}),config:s}),g=(0,u.attach)({source:h,effect:async({preconditionPassed:r,isUser:a,config:o})=>{if(!r||!a)return!1;let{decisionLogic:s,targetSelectors:c}=o;return c.length===0||i.i(c,n.id).length<1?!1:s===void 0||!t.n(s)||await t.t(e,s)===!0}}),_=(0,u.createEffect)(async()=>{if(!e.contentLoader)return!0;try{await e.contentLoader({id:n.id,key:n.key})}catch{`${n.id}`}return!0}),v=(0,u.createEvent)(),y=(0,u.createEvent)(),b=p.createStore(void 0,{skipVoid:!1}).on(v,(e,t)=>t).on(y,(e,t)=>t);return(0,u.sample)({clock:v,target:g}),(0,u.sample)({clock:g.doneData,source:b,filter:(e,t)=>t,fn:e=>e,target:m}),(0,u.sample)({clock:g.doneData,filter:Boolean,target:_}),(0,u.sample)({clock:y,source:b,fn:e=>e,target:m}),(0,u.sample)({clock:y,target:_}),f={id:n.id,key:n.key,name:n.name,configStore:s,treeStore:l,componentStore:c,actions:d,merge:o.merge,initialiseFx:m,shouldInitialiseFx:g,initialiseRequested:v,initialiseDirectly:y,prepareExperienceContentFx:_},f});function h(e){return(0,d.invoke)(m,e)}var g=(0,d.createFactory)(({client:e})=>{let t=p.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.id]:t}}}),r=(0,u.createEvent)(),i=(0,u.createEffect)(t=>{n.register(h({client:e,experience:t}))});(0,u.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]!==void 0,fn:(e,t)=>({existing:e[t.id],experience:t})}).watch(({existing:e,experience:t})=>{e?.merge({experience:t,strategy:`override`})}),(0,u.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]===void 0,fn:(e,t)=>t,target:i});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}function s(e){return t.map(t=>Object.values(t).find(t=>t.key===e)??t[e],{skipVoid:!1})}let c=(0,u.attach)({source:t,effect:(e,t)=>{let n=`key`in t?Object.values(e).find(e=>e.key===t.key):e[t.id];if(!n){`key`in t?`${t.key}`:`${t.id}`;return}let{options:r}=t;r?.bypassCondition?n.initialiseDirectly(r):n.initialiseRequested(r)}});return{register:r,get:o,getById:o,getByKey:s,launch:c,open:(0,u.attach)({source:{experiences:t,instances:e.experienceInstances.listStore},effect:async({experiences:e,instances:t},n)=>{let r=`key`in n?Object.values(e).find(e=>e.key===n.key):e[n.id],i=t.filter(e=>e.experienceId===r?.id);if(i.length>0){for(let e of i)e.open();return}let a=`key`in n?{key:n.key,options:{...n.options,initialiseOpen:!0}}:{id:n.id,options:{...n.options,initialiseOpen:!0}};await c(a)}}),listStore:a,initialiseExperiencesFx:(0,u.attach)({source:a,effect:e=>{for(let t of e)t.initialiseRequested(void 0)}})}});function _(e){return(0,d.invoke)(g,e)}var v=async e=>{await e.experiences.initialiseExperiencesFx()};function y(e){return(0,u.createEffect)(async()=>{await e()})}var b=(e,t,n)=>{let r=t.name,i=t.setup(e);if(i){let e=n[r]??{};n[r]=Object.freeze({...e,...i})}},x=(0,u.createDomain)(`component`),S=(0,d.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function C(e){return(0,d.invoke)(S,e)}var w=(0,d.createFactory)(({client:e})=>{let t=x.store({}),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:t}}}),i=(0,u.createEvent)();(0,u.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Component '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:i,fn:({name:t,component:n})=>C({client:e,name:t,component:n}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function T(e){return(0,d.invoke)(w,e)}var E=(e,t,n)=>{n.register({name:e,component:t})},D=(0,u.createDomain)(`framework`),O=(0,d.createFactory)(e=>{let t=D.store({}),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:t.framework}}}),i=(0,u.createEvent)();(0,u.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Framework '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:i,target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function ee(e){return(0,d.invoke)(O,e)}var k=(e,t)=>{t.register({name:e.name,framework:e})},A=(0,d.createFactory)(({client:e})=>{let t=`window`in globalThis,n={location:t?globalThis.location:void 0,document:t?globalThis.document:void 0,sessionStorage:t?globalThis.sessionStorage:void 0,localStorage:t?globalThis.localStorage:void 0};return(0,u.combine)(e.responses.listStore,e.fields.listStore,(t,r)=>Object.freeze({client:e,responses:t,fields:r,...n}))});function te(e){return(0,d.invoke)(A,e)}function ne(e){return typeof e==`number`&&!isNaN(e)}function j(e){return typeof e==`string`}function M(e){return Array.isArray(e)}function N(e){return e instanceof Promise}function re(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.keys(e).length===1}function P(e){if(ne(e))return e;let t=parseFloat(`${e}`);return isNaN(t)?0:t}function F(e){return`${e}`}var ie={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>P(e)>P(t),">=":(e,t)=>P(e)>=P(t),"<":(e,t,n)=>{let r=P(e),i=P(t);if(n===void 0)return r<i;let a=P(n);return r<i&&i<a},"<=":(e,t,n)=>{let r=P(e),i=P(t);if(n===void 0)return r<=i;let a=P(n);return r<=i&&i<=a},"!!":async e=>await L(e),"!":async e=>!await L(e),"%":(e,t)=>P(e)%P(t),log:e=>(console.log(e),e),in:(e,t)=>t?j(t)?t.indexOf(F(e))!==-1:M(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(F).join(``),substr:(e,t,n)=>{let r=F(e),i=P(t);if(n===void 0)return r.substr(i);let a=P(n);if(a<0){let e=r.substr(i);return e.substr(0,e.length+a)}return r.substr(i,a)},"+":(...e)=>e.reduce((e,t)=>P(e)+P(t),0),"*":(...e)=>e.reduce((e,t)=>P(e)*P(t),1),"-":(e,t)=>{let n=P(e);return t===void 0?-n:n-P(t)},"/":(e,t)=>P(e)/P(t),min:(...e)=>Math.min(...e.map(P)),max:(...e)=>Math.max(...e.map(P)),merge:(...e)=>e.reduce((e,t)=>M(t)?e.concat(t):e.concat([t]),[]),var(e,t){let n=arguments.length>1?t:null;if(e===``||e===`.`||e==null)return this;if(typeof e==`number`&&Array.isArray(this))return e>=0&&e<this.length?this[e]:n;let r=F(e);if(r===``||r===`.`)return this;let i=r.split(`.`),a=this;for(let e of i){if(a==null)return n;if(Array.isArray(a)){let t=parseInt(e,10);a=isNaN(t)?a[e]:a[t]}else a=a[e]}return a===void 0?n:a},async missing(...e){let t=M(e[0])?e[0]:e,n=[];for(let e of t){let t=await I({var:e},this);(t===null||t===``)&&n.push(`${e}`)}return n},async missing_some(e,t){let n=await I({missing:t},this);if(!M(n)||!M(t))return[];let r=n.filter(j);return t.filter(j).length-r.length>=P(e)?[]:r},invoke(...e){let[t,...n]=e;return typeof t==`function`?Reflect.apply(t,null,n):null},startsWith:(e,t)=>j(e)&&j(t)&&e.startsWith(t),endsWith:(e,t)=>j(e)&&j(t)&&e.endsWith(t),regexp_matches(e,t){let n=e,r=``;if(M(e)){let[t,i]=e;n=t,r=i}return!j(n)||!j(r)?!1:new RegExp(n,r).test(F(t))},throw(e){throw Error(F(e))}};async function I(e,t){if(!e)return e;if(N(e))return I(await e,t);if(M(e))return Promise.all(e.map(e=>I(e,t)));if(!re(e))return e;let n=ae(e),r=n?e[n]??[]:[];switch(M(r)||(r=[r]),n){case`if`:case`?:`:for(let e=0;e<r.length-1;e+=2)if(await L(await I(r[e],t)))return I(r[e+1],t);return r.length%2==1?I(r[r.length-1],t):null;case`and`:{let e=null;for(let n of r)if(e=await I(n,t),!await L(e))return e;return e}case`or`:{let e=null;for(let n of r)if(e=await I(n,t),await L(e))return e;return e}case`map`:{let e=await I(r[0],t);return M(e)?await Promise.all(e.map(e=>I(r[1],e))):[]}case`filter`:{let e=await I(r[0],t);return M(e)?(await Promise.all(e.map(async e=>({item:e,shouldInclude:await L(await I(r[1],e))})))).filter(({shouldInclude:e})=>e).map(({item:e})=>e):[]}case`reduce`:{let e=await I(r[0],t);if(!M(e))return r.length>2?await I(r[2],t):null;let n=r[1],i=r.length>2?await I(r[2],t):null;for(let t of e)i=await I(n,{current:t,accumulator:i});return i}case`all`:{let e=await I(r[0],t);if(!M(e)||e.length===0)return!1;for(let t of e)if(!await L(await I(r[1],t)))return!1;return!0}case`some`:{let e=await I(r[0],t);if(!M(e))return!1;for(let t of e)if(await L(await I(r[1],t)))return!0;return!1}case`none`:{let e=await I(r[0],t);if(!M(e))return!0;for(let t of e)if(await L(await I(r[1],t)))return!1;return!0}case`catch`:try{return await I(r[0],t)}catch(e){return re(e)?await I(e,t):r[1]?await I(r[1],e):e instanceof Error?e.message:e}}let i=await Promise.all(r.map(e=>I(e,t))),a=n?ie[n]:void 0;if(!a)throw Error(`Unrecognized operation ${n}`);return a.apply(t,i)}async function L(e){return N(e)?L(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function ae(e){return Object.keys(e)[0]}function R(e,t,n){return new Proxy(Object.create(null),{get(r,i){if(typeof i!=`string`)return;let a=e.find(e=>e.key===i);if(a!==void 0)return async()=>!n.has(i)&&await I(a.logic,{...t,conditions:R(e,t,new Set(n).add(i))})===!0}})}var oe=(0,d.createFactory)(({client:e})=>(0,u.attach)({source:{stateSnapshot:e.stateSnapshotStore,predicates:e.predicates.listStore,actions:e.actions.listStore,features:e.features.listStore,responses:e.responses.getAllStore,conditions:e.conditions.listStore},effect:async({stateSnapshot:e,predicates:t,actions:n,features:r,responses:i,conditions:a},{rule:o,context:s})=>{let c=t.reduce((t,n)=>(t[n.name]=async(...t)=>await n.predicate({...e,args:t}),t),{}),l=n.reduce((t,n)=>(t[n.key]=async(...t)=>await n.action({...e,args:t},null)??void 0,t),{}),u=r.reduce((e,t)=>(e[t.id]=async()=>{let{bucket:e}=await t.getBucket();return e},e),{}),d={responses:i,location:typeof e.location==`object`?{hash:e.location.hash,host:e.location.host,hostname:e.location.hostname,href:e.location.href,origin:e.location.origin,pathname:e.location.pathname,port:e.location.port,protocol:e.location.protocol,search:e.location.search}:void 0,predicates:c,actions:l,features:u,...s};return await I(o,{...d,conditions:R(a,d,new Set)})}}));function se(e){return(0,d.invoke)(oe,e)}var ce=6e3,le=o.t(`last_ping`,`global`),ue=async e=>{try{let t=Date.now(),n=o.n.get(le),r=0;if(n.isSet()&&(r=n.json()??0),r&&t-r<ce)return!0;let i={},a=document.getElementById(`picked_script`)?.dataset.verceltoken;a&&(i[`x-vercel-protection-bypass`]=a);let s=await(0,f.sendPing)(e.apiUrl,{projectId:e.projectId,path:window.location.pathname},{headers:i});return s&&n.set(t),s}catch{return!1}},z=(0,u.createDomain)(`lifecycle`),de=(0,d.createFactory)(({client:e})=>{let n=z.store(!1),a=(0,u.createStore)(void 0,{skipVoid:!1,domain:z}),o=(0,u.createStore)(void 0,{skipVoid:!1,domain:z}),s=z.store(`idle`),c=z.store([]),l=(0,u.createStore)(void 0,{skipVoid:!1,domain:z}),d=(0,u.createStore)(void 0,{skipVoid:!1,domain:z}),f=(0,u.createEvent)(),p=(0,u.createEvent)(),m=(0,u.createEvent)(),h=(0,u.createEvent)(),g=(0,u.createEvent)(),_=(0,u.createEvent)();c.on(h,(e,t)=>[...e,t]),l.on(g,(e,t)=>t),d.on(_,(e,t)=>t),n.on(p,()=>!0);let y=(0,u.createEffect)(()=>{ue(e)}),b=(0,u.createEffect)(async()=>{await i.r()}),x=(0,u.createEffect)(async()=>{await v(e)}),S=(0,u.attach)({effect:x}),C=(0,u.attach)({source:c,effect:async e=>{for(let t of e)await t()}}),w=(0,u.attach)({source:l,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),T=(0,u.attach)({source:d,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),E=(0,u.sample)({clock:f,source:s,filter:e=>e===`idle`&&r.i(),fn:()=>void 0});(0,u.sample)({clock:E,fn:()=>`starting`,target:s}),(0,u.sample)({clock:E,target:y}),(0,u.sample)({clock:E,target:C}),(0,u.sample)({clock:E,target:b}),(0,u.sample)({clock:C.done,target:w}),(0,u.sample)({clock:w.doneData,target:a}),(0,u.sample)({clock:T.doneData,target:o}),(0,u.sample)({clock:w.doneData,filter:e=>e,target:T}),(0,u.sample)({clock:T.doneData,target:e.session.setIsUser}),(0,u.sample)({clock:T.doneData,fn:e=>({type:`user_decide`,value:e}),target:e.eventBus}),(0,u.sample)({clock:w.doneData,filter:e=>!e,fn:()=>void 0,target:m}),(0,u.sample)({clock:T.doneData,fn:()=>void 0,target:m}),(0,u.sample)({clock:m,fn:()=>({type:`initialize`}),target:e.eventBus});let D=(0,u.createStore)(!1).on(b.done,()=>!0),O=(0,u.createStore)(!1).on(m,()=>!0),ee=(0,u.createStore)(!1).on(S.done,()=>!0),k=(0,u.combine)(a,o,(e,t)=>e===!0&&t===!0);(0,u.sample)({clock:m,source:k,filter:e=>e,fn:()=>void 0,target:x});let A=(0,u.combine)(D,O,k,(e,t,n)=>e&&t&&n);(0,u.sample)({clock:A,filter:e=>e,fn:()=>void 0,target:S});let te=(0,u.combine)(D,O,k,ee,(e,t,n,r)=>e&&t&&(!n||r));return(0,u.sample)({clock:te,filter:e=>e,fn:()=>void 0,target:p}),(0,u.sample)({clock:p,fn:()=>`ready`,target:s}),(0,u.sample)({clock:p,fn:()=>({type:`ready`}),target:e.eventBus}),(0,u.sample)({clock:p,source:e.session.store,fn:({id:e,isUser:t,identifiers:n})=>({type:`session`,id:e,isUser:t,identifiers:n}),target:e.eventBus}),(0,u.sample)({clock:[C.fail,w.fail,T.fail,x.fail,S.fail,b.fail],fn:()=>`failed`,target:s}),{start:f,readyStore:n,preconditionPassedStore:a,conditionPassedStore:o,lifecycleStageStore:s,registerPluginStartHook:h,setPrecondition:g,setCondition:_}});function fe(e){return(0,d.invoke)(de,e)}var pe=(0,u.createDomain)(`predicate`),me=(0,d.createFactory)(({client:e})=>{let t=pe.store({}),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:{name:t.name,predicate:t.predicate}}}}),i=(0,u.createEvent)();(0,u.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Predicate '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:i,fn:({name:e,predicate:t})=>Object.freeze({name:e,predicate:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.predicate,{skipVoid:!1})}function s(t){let n=(0,u.createStore)(()=>void 0,{skipVoid:!1}),r=(0,u.attach)({source:{predicate:o(t),snapshot:e.stateSnapshotStore},effect:({predicate:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n})}});return(0,u.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,u.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:i,getByName:o,listStore:a,getEvokablePredicate:s}});function he(e){return(0,d.invoke)(me,e)}var ge=(e,t,n)=>{n.register({name:e,predicate:t})},_e=(0,u.createDomain)(`feature`);function B(e){return e?.enabled===!1}function ve(e){return e===`true`||e!==`false`&&e}var ye=(0,d.createFactory)(({client:e})=>{let t=_e.store({}),r=_e.store([]),i=(0,u.createApi)(t,{register(e,t){return{...e,[t.id]:t.feature}}}),a=(0,u.createEvent)();(0,u.sample)({clock:a,source:t,filter:(e,{id:t})=>e[t]!==void 0,fn:(e,{id:t})=>`Feature '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:a,fn:({id:e,feature:t})=>Object.freeze({id:e,feature:{id:e,feature:{...t,id:e}}}),target:i.register});let s=(0,u.createEffect)(async({id:e,key:t,storage:n=`local`,enabled:r})=>{if(r===!1)return null;let i=o.t(`feature:${e}:${t}`,`global`),a=(n===`session`?o.r:o.n).get(i).text();return a?{id:e,key:t,bucket:ve(a),storage:n}:null}),c=(0,u.createEffect)(e=>{if(!e)return null;let t=o.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?o.r:o.n).set(t,e.bucket)}),l=new Map,d=(0,u.attach)({source:{allFeaturesStore:t,resolvedFeaturesStore:r},effect:async({allFeaturesStore:e,resolvedFeaturesStore:t},{id:n,decide:r,key:i})=>{let a=t.find(e=>e.id===n&&e.key===i);if(a)return a;let o=e[n];if(!o)throw Error(`Feature with id '${n}' not found`);if(B(o.feature))return{id:o.id,bucket:!1,key:i,storage:o.feature.storage};let s=l.get(`${n}:${i}`);if(s!==void 0){let e=await s;return{id:o.id,bucket:e,key:i,storage:o.feature.storage}}let c=r();l.set(`${n}:${i}`,c);let u=await c;return{id:o.id,bucket:u,key:i,storage:o.feature.storage}}});(0,u.sample)({clock:i.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage,enabled:n.feature.enabled}},target:s}),(0,u.sample)({source:t,clock:d.doneData,filter:(e,t)=>!B(e[t.id]?.feature),fn:(e,t)=>{let{id:n,bucket:r,storage:i}=t,a=e[n]?.feature.key;return a?{key:a,id:n,bucket:r,storage:i}:null},target:c});let f=(0,u.combine)({allFeaturesStore:t,resolvedFeaturesStore:r}).map(({allFeaturesStore:e,resolvedFeaturesStore:t})=>Object.values(e).map(e=>{let n=t.find(t=>t.id===e.id&&t.key===e.feature.key);return n?{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,getBucket:()=>({id:e.id,bucket:n.bucket}),isResolved:!0}:{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,getBucket:async()=>await d(e.feature),isResolved:!1}}));(0,u.sample)({clock:d.doneData,source:{resolvedFeatures:r,allFeatures:t},filter:({resolvedFeatures:e,allFeatures:t},{id:n,key:r})=>!B(t[n]?.feature)&&!e.some(e=>e.id===n&&e.key===r),fn:(e,t)=>t,target:e.eventBus.prepend(e=>({type:`feature_decide`,feature:e}))}),(0,u.sample)({clock:[s.doneData,d.doneData],source:{resolvedFeatures:r,allFeatures:t},fn:({resolvedFeatures:e,allFeatures:t},n)=>!n||B(t[n.id]?.feature)||e.some(e=>e.id===n.id&&e.key===n.key)?e:[...e,n],target:r});function p(e){return f.map(t=>t.find(t=>t.id===e))}let m=new Map,h=new Map,g=new Map;function _(e){let t=m.get(e);if(t)return t;let n=p(e);return m.set(e,n),n}function v(e){return t.map(t=>t[e],{skipVoid:!1})}function y(e){let t=(0,u.createStore)(async()=>void 0,{skipVoid:!1}),n=_(e),r=(0,u.attach)({source:n,effect:async e=>{if(e)return async()=>(await e.getBucket()).bucket}});return(0,u.sample)({clock:n,target:r}),(0,u.sample)({clock:r.doneData,filter:e=>e!==void 0,target:t}),r(),t}function b(e){let t=h.get(e);if(t)return t;let n=y(e);return h.set(e,n),n}function x(e){let t=b(e),n=(0,u.createStore)(void 0,{skipVoid:!1}),r=(0,u.attach)({source:t,mapParams:(e,t)=>t,effect:(0,u.createEffect)(async e=>await e())});return(0,u.sample)({clock:r.doneData,fn:t=>{if(t!==void 0)return{id:e,bucket:t}},target:n}),(0,u.sample)({clock:t,target:r}),r(),n}function S(e){let t=g.get(e);if(t)return t;let n=x(e);return g.set(e,n),n}return{register:a,getById:_,getByName:v,listStore:f,getEvokableFeature:b,getFeatureResult:S}});function be(e){return(0,d.invoke)(ye,e)}var xe=(e,t,n)=>{n.register({id:e,feature:t})},V=(0,u.createDomain)(`history`);function H(e,t){return{id:s.t(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}var Se=(0,d.createFactory)(()=>{let e=V.store({entries:[]}),t=V.event(),n=V.event(),r=V.event(),i=V.event();e.on(t,(e,t)=>({entries:[...e.entries,H(t.experienceId,t.node)]})),e.on(n,(e,t)=>({entries:[...e.entries.slice(0,-1),H(t.experienceId,t.node)]})),e.on(i,(e,t)=>t);function o(e,t){let n={lastStepIndex:-1,secondLastStepIndex:-1};for(let r=e.length-1;r>=0;r--){let i=e[r],o=i?.node;if(!(!o||!a.u(o))&&!(t&&i.experienceId!==t))if(n.lastStepIndex===-1)n.lastStepIndex=r;else{n.secondLastStepIndex=r;break}}return n}return e.on(r,(e,t)=>{let{secondLastStepIndex:n}=o(e.entries,t.experienceId),r=n===-1?e.entries:e.entries.slice(0,n+1);return{...e,entries:r}}),{push:t,replace:n,back:r,restore:i,entriesStore:e.map(e=>e.entries)}});function Ce(){return(0,d.invoke)(Se)}var we=0,Te=e=>{let t=(0,u.createStore)([]);return t.on(e,(e,t)=>[...e,{id:we++,at:new Date,payload:t}]),t},Ee=(0,u.createDomain)(`field`),De=(0,d.createFactory)(()=>{let e=Ee.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.field.id]:t.field}},updateByKey(e,t){let n=Object.values(e).find(e=>e.key===t.fieldKey);return n?{...e,[n.id]:Object.assign({},n,t.updates)}:e}});function n(e){t.register({field:e})}let r={};e.watch(e=>{r=e});function i(e,n){let i=Object.values(r).find(t=>t.key===e)?.key;i&&t.updateByKey({fieldKey:i,updates:n})}let a=e.map(e=>Object.values(e));function o(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function s(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}function c(t){return e.map(e=>Object.values(e).find(e=>e.name===t)??null,{skipVoid:!1})}return{register:n,update:i,getById:o,getByKey:s,listStore:a,getByName:c}});function Oe(){return(0,d.invoke)(De)}var ke=(0,u.createDomain)(`step`),Ae=(0,d.createFactory)(()=>{let e=ke.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.step.id]:t.step}}});function n(e){t.register({step:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function je(){return(0,d.invoke)(Ae)}function Me(e,t){t.register(e)}var Ne=(0,u.createDomain)(`content`),Pe=(0,d.createFactory)(()=>{let e=Ne.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.content.id]:t.content}},patch(e,t){let n=e[t.id];if(!n)return e;let r=t.apply(n.data);return r===n.data?e:{...e,[t.id]:{...n,data:r}}}});function n(e){t.register({content:e})}function r(e,n){t.patch({id:e,apply:n})}let i=e.map(e=>Object.values(e));function a(t){return e.map(e=>e[t]??null,{skipVoid:!1})}return{register:n,patch:r,getById:a,listStore:i,indexStore:e}});function Fe(){return(0,d.invoke)(Pe)}function Ie(e,t){t.register(e)}var Le=(0,u.createDomain)(`action`),Re=(0,d.createFactory)(({client:e})=>{let t=Le.store({}),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.key]:{key:t.key,action:t.action}}}}),i=(0,u.createEvent)();(0,u.sample)({clock:i,source:t,filter:(e,{key:t})=>e[t]!==void 0,fn:(e,{key:t})=>`Action '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:i,fn:({key:e,action:t})=>Object.freeze({key:e,action:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.action,{skipVoid:!1})}function s(t,n){let r=(0,u.createStore)(()=>void 0,{skipVoid:!1}),i=n?{experience:n.experience}:null,a=(0,u.attach)({source:{action:o(t),snapshot:e.stateSnapshotStore},effect:({action:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n},i)}});return(0,u.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:a}),(0,u.sample)({clock:a.doneData,filter:e=>e!==void 0,target:r}),a(),r}return{register:i,getByKey:o,listStore:a,getEvokableAction:s}});function ze(e){return(0,d.invoke)(Re,e)}var Be=(e,t,n)=>{n.register({key:e,action:t})};function U(e,t,n,r){return{fieldKey:e.key,userMessage:n,systemMessage:r,value:t}}function W(e){return e===null||e===``||Array.isArray(e)&&!e.length}function Ve(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null}function G(e){try{return JSON.stringify(e),!0}catch{return!1}}function He(e,t){return t.find(t=>t.key===e)??null}function Ue(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function We(e,t){if(e.type!==`object`||W(t))return null;if(e.multiple){if(!Array.isArray(t))return U(e,t,`This field expects multiple values`,`Field expects an array of objects.`);for(let n of t){if(typeof n!=`object`||!n)return U(e,t,`This field expects object values`,`Field expects an array of objects, but received non-object value.`);if(!G(n))return U(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}return null}return Array.isArray(t)?U(e,t,`This field expects a single value`,`Field expects a single object, not an array.`):typeof t!=`object`||!t?U(e,t,`This field expects an object value`,`Field expects an object value.`):G(t)?null:U(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}function Ge(e,t){if(W(t)||!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=new Set(e.options.map(e=>JSON.stringify(e.value)));return n.every(e=>r.has(JSON.stringify(e)))?null:U(e,t,`This field expects a valid option`,`Field expects a valid option from the defined choices.`)}let r=e.options.map(e=>e.value);return n.every(e=>!Ve(e)||e===null?!1:r.includes(e))?null:U(e,t,`This field expects a valid option`,`Field expects a valid option. Valid options are: ${r.join(`, `)}`)}async function Ke(t,n,r,i){if(n.validation&&!e.t(n.validation)&&!W(r)){let e=i?{$input:r,responses:i}:{$input:r},a=await t(n.validation,e);if(typeof a==`string`)return U(n,r,a,`Field validation resulted in an error: ${a}.`);if(a===!1)return U(n,r,`This field is invalid`,`Field validation resulted in an unspecified error.`)}return n.required&&W(r)?U(n,r,`This field is required`,`Field is required.`):!n.multiple&&Array.isArray(r)&&r.length>1?U(n,r,`This field expects a single response`,`Field expects a single response.`):null}var qe=(0,u.createDomain)(`response`),Je=(0,d.createFactory)(({client:e})=>{let n=qe.store({}),r=(0,u.createEvent)(),i=(0,u.createEvent)(),a=(0,u.createApi)(n,{register(e,t){return{...e,[t.fieldKey]:t.response}},registerBatch(e,t){return{...e,...t}},clear(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))},clearAll(){return{}}});function o(e,t){if(typeof e==`string`){if(t===void 0)throw Error(`Response is required when registering a single field`);a.register({fieldKey:e,response:t})}else a.registerBatch(e)}let s=(n,r)=>t.t(e,n,r),c=(0,u.attach)({source:{allFields:e.fields.listStore,existingResponses:n},effect:async({allFields:e,existingResponses:t},n)=>{let r=[],i={},a={...t,...n},o=Object.entries(n),c=await Promise.allSettled(o.map(async([t,n])=>{let o=He(t,e);if(!o){r.push({fieldKey:t,userMessage:`Field '${t}' not found`,systemMessage:`No field with key '${t}' exists. Available field keys are: ${e.map(e=>e.key).join(`,`)}.`,value:n});return}let c=Ue(o,n),l=await Ke(s,o,c,a);if(l){r.push(l);return}let u=We(o,c);if(u){r.push(u);return}let d=Ge(o,c);if(d){r.push(d);return}i[o.key]=n}));for(let[e,t]of c.entries()){if(t.status!==`rejected`)continue;let n=o[e];if(!n)continue;let[i,a]=n,s=t.reason instanceof Error?t.reason.message:String(t.reason);r.push({fieldKey:i,userMessage:`An unexpected error occurred validating this field`,systemMessage:`Validation threw for field '${i}': ${s}`,value:a})}return{responsesToCommit:i,validationErrors:r}}});async function l(e){return c(e)}let d=(0,u.attach)({source:n,effect:async(e,t)=>{let{responsesToCommit:n,validationErrors:r}=await c(t);return r.length?{errors:r}:(a.registerBatch(n),{errors:[]})}});async function f(e){return d(e)}let p=n.map(e=>e),m=n.map(e=>Object.entries(e).map(([e,t])=>({fieldKey:e,value:t})));function h(e){return(0,u.combine)({f:e,s:n},({f:e,s:t})=>{let n=e?t[e.key]??null:null;return n===null?e?.defaultValue!==void 0&&e.defaultValue!==null?e.defaultValue:null:n})}function g(t){return h(e.fields.getById(t))}function _(t){return h(e.fields.getByKey(t))}function v(t){return h(e.fields.getByName(t))}return(0,u.sample)({clock:r,target:a.clearAll}),(0,u.sample)({clock:i,target:a.clear}),{register:o,clearAll:r,clear:i,commit:f,getResponsesToCommit:l,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function Ye(e){return(0,d.invoke)(Je,e)}var Xe=(0,u.createDomain)(`condition`),Ze=(0,d.createFactory)(()=>{let e=Xe.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.condition.id]:t.condition}}});function n(e){t.register({condition:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function Qe(){return(0,d.invoke)(Ze)}function $e(){if(r.i()){let e=[document.currentScript,document.getElementById(`picked_script`),document.getElementById(`picked`),document.getElementById(`cvly`),document.getElementById(`cvly-x`)];for(let t of e)if(t?.dataset.api)return t.dataset.api}return`https://api.picked.app`}function K(){if(!r.f())return{};let e=new URLSearchParams(window.location.search),t={},n=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&n.add(t);for(let r of n){let n=r.replace(`picked-`,``);t[n]=e.getAll(r)}let i=o.t(`s`);if(n.size>0)o.r.set(i,t);else{let e=o.r.get(i);if(e)return e.json()||{}}return t}var q=o.t(`session`,`global`);function et(){return r.r()?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}`}function tt(){if(!r.s())return null;let e=o.n.get(q);if(!e.isSet())return null;try{return e.json()}catch{return null}}var nt=(0,d.createFactory)(()=>{let e=tt(),t={id:e?.id??et()};e?.isUser!==void 0&&(t.isUser=e.isUser),e?.identifiers&&Object.keys(e.identifiers).length>0&&(t.identifiers=e.identifiers);let n=(0,u.createStore)(t),i=(0,u.createApi)(n,{setIsUser:(e,t)=>({...e,isUser:t}),setIdentifier:(e,{key:t,value:n})=>({...e,identifiers:{...e.identifiers??{},[t]:n}}),removeIdentifier:(e,t)=>{let n=e.identifiers;if(!n||!(t in n))return e;let r={};for(let[e,i]of Object.entries(n))e!==t&&(r[e]=i);let i={id:e.id};return e.isUser!==void 0&&(i.isUser=e.isUser),Object.keys(r).length>0&&(i.identifiers=r),i}}),a=(0,u.attach)({source:n,effect:e=>{if(r.s())try{o.n.get(q).set(e)}catch{}}});return(0,u.sample)({source:n,target:a}),{store:n,setIsUser:i.setIsUser,setIdentifier:i.setIdentifier,removeIdentifier:i.removeIdentifier}});function rt(){return(0,d.invoke)(nt,void 0)}function J(){if(r.f())return globalThis.window.pickedConfig}function it(){if(r.f())return J()?.projectId}function at(){if(!r.i())return;let e=document.getElementById(`picked_script`)||document.querySelector(`script#picked`)||document.getElementById(`cvly`);if(e)return e.dataset.projectid||e.getAttribute(`project-id`)||void 0}function ot(e){if(e.projectId)return e.projectId;let t=it();if(t)return t;let n=at();if(n)return n;throw Error(`projectId is required. You can provide it via one of:
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../object-CIkt7Fkr.cjs"),t=require("../rules-logic-CGZIYgAI.cjs"),n=require("../logger-CSTvAyyB.cjs"),r=require("../supports-DBzjGaWD.cjs"),i=require("../dom-DlLH3FxV.cjs"),a=require("../experience-instance-Dej3P1sE.cjs"),o=require("../storage-DUw9UJ2h.cjs"),s=require("../id-Js-62re-.cjs"),c=require("../version-CfTz7TK0.cjs"),l=require("../inert-script-report-ijRHPtcY.cjs");let u=require("effector"),d=require("@withease/factories"),f=require("@picked/delivery-api-client");var p=(0,u.createDomain)(`experience`),m=(0,d.createFactory)(({client:e,experience:n})=>{let r=p.store(n),o=(0,u.createApi)(r,{merge(e,t){return{...e,...t.experience}}}),s=r.map(e=>({name:e.name,decisionLogic:e.condition,targetSelectors:e.targets,initializeOpenLogic:e.initializeOpen})),c=(0,u.combine)(r,e.components.listStore,(e,t)=>(e.componentName?t.find(t=>t.name===e.componentName):void 0)||t.find(t=>t.name===`experience:${e.id}`)||t.find(e=>e.name===`experience`),{skipVoid:!1}),l=(0,u.combine)(r,e.steps.indexStore,e.conditions.indexStore,(e,t,n)=>{let r=e.nodes.filter(a.u).map(e=>t[e.stepId]).filter(e=>e!==void 0),i=e.nodes.filter(a.l).map(e=>n[e.conditionId]).filter(e=>e!==void 0);return{steps:r,nodes:e.nodes,edges:e.edges,conditions:i}}),d=n.actions??[],f,m=(0,u.attach)({source:s,effect:(t,r)=>{let a=i.i(t.targetSelectors,n.id);a.forEach(({elements:e})=>e.forEach(e=>i.s(e,n.id))),i.t(a,n.id,n.key).forEach(t=>{r?e.experienceInstances.spawn(f,t,r):e.experienceInstances.spawn(f,t)})}}),h=(0,u.combine)({preconditionPassed:e.preconditionPassedStore,isUser:e.session.store.map(e=>e.isUser,{skipVoid:!1}),config:s}),g=(0,u.attach)({source:h,effect:async({preconditionPassed:r,isUser:a,config:o})=>{if(!r||!a)return!1;let{decisionLogic:s,targetSelectors:c}=o;return c.length===0||i.i(c,n.id).length<1?!1:s===void 0||!t.n(s)||await t.t(e,s)===!0}}),_=(0,u.createEffect)(async()=>{if(!e.contentLoader)return!0;try{await e.contentLoader({id:n.id,key:n.key})}catch{`${n.id}`}return!0}),v=(0,u.createEvent)(),y=(0,u.createEvent)(),b=p.createStore(void 0,{skipVoid:!1}).on(v,(e,t)=>t).on(y,(e,t)=>t);return(0,u.sample)({clock:v,target:g}),(0,u.sample)({clock:g.doneData,source:b,filter:(e,t)=>t,fn:e=>e,target:m}),(0,u.sample)({clock:g.doneData,filter:Boolean,target:_}),(0,u.sample)({clock:y,source:b,fn:e=>e,target:m}),(0,u.sample)({clock:y,target:_}),f={id:n.id,key:n.key,name:n.name,configStore:s,treeStore:l,componentStore:c,actions:d,merge:o.merge,initialiseFx:m,shouldInitialiseFx:g,initialiseRequested:v,initialiseDirectly:y,prepareExperienceContentFx:_},f});function h(e){return(0,d.invoke)(m,e)}var g=(0,d.createFactory)(({client:e})=>{let t=p.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.id]:t}}}),r=(0,u.createEvent)(),i=(0,u.createEffect)(t=>{n.register(h({client:e,experience:t}))});(0,u.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]!==void 0,fn:(e,t)=>({existing:e[t.id],experience:t})}).watch(({existing:e,experience:t})=>{e?.merge({experience:t,strategy:`override`})}),(0,u.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]===void 0,fn:(e,t)=>t,target:i});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}function s(e){return t.map(t=>Object.values(t).find(t=>t.key===e)??t[e],{skipVoid:!1})}let c=(0,u.attach)({source:t,effect:(e,t)=>{let n=`key`in t?Object.values(e).find(e=>e.key===t.key):e[t.id];if(!n){`key`in t?`${t.key}`:`${t.id}`;return}let{options:r}=t;r?.bypassCondition?n.initialiseDirectly(r):n.initialiseRequested(r)}});return{register:r,get:o,getById:o,getByKey:s,launch:c,open:(0,u.attach)({source:{experiences:t,instances:e.experienceInstances.listStore},effect:async({experiences:e,instances:t},n)=>{let r=`key`in n?Object.values(e).find(e=>e.key===n.key):e[n.id],i=t.filter(e=>e.experienceId===r?.id);if(i.length>0){for(let e of i)e.open();return}let a=`key`in n?{key:n.key,options:{...n.options,initialiseOpen:!0}}:{id:n.id,options:{...n.options,initialiseOpen:!0}};await c(a)}}),listStore:a,initialiseExperiencesFx:(0,u.attach)({source:a,effect:e=>{for(let t of e)t.initialiseRequested(void 0)}})}});function _(e){return(0,d.invoke)(g,e)}var v=async e=>{await e.experiences.initialiseExperiencesFx()};function y(e){return(0,u.createEffect)(async()=>{await e()})}var b=(e,t,n)=>{let r=t.name,i=t.setup(e);if(i){let e=n[r]??{};n[r]=Object.freeze({...e,...i})}},x=(0,u.createDomain)(`component`),S=(0,d.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function C(e){return(0,d.invoke)(S,e)}var w=(0,d.createFactory)(({client:e})=>{let t=x.store({}),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:t}}}),i=(0,u.createEvent)();(0,u.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Component '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:i,fn:({name:t,component:n})=>C({client:e,name:t,component:n}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function T(e){return(0,d.invoke)(w,e)}var E=(e,t,n)=>{n.register({name:e,component:t})},D=(0,u.createDomain)(`framework`),O=(0,d.createFactory)(e=>{let t=D.store({}),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:t.framework}}}),i=(0,u.createEvent)();(0,u.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Framework '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:i,target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function ee(e){return(0,d.invoke)(O,e)}var k=(e,t)=>{t.register({name:e.name,framework:e})},A=(0,d.createFactory)(({client:e})=>{let t=`window`in globalThis,n={location:t?globalThis.location:void 0,document:t?globalThis.document:void 0,sessionStorage:t?globalThis.sessionStorage:void 0,localStorage:t?globalThis.localStorage:void 0};return(0,u.combine)(e.responses.listStore,e.fields.listStore,(t,r)=>Object.freeze({client:e,responses:t,fields:r,...n}))});function te(e){return(0,d.invoke)(A,e)}function ne(e){return typeof e==`number`&&!isNaN(e)}function j(e){return typeof e==`string`}function M(e){return Array.isArray(e)}function N(e){return e instanceof Promise}function re(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.keys(e).length===1}function P(e){if(ne(e))return e;let t=parseFloat(`${e}`);return isNaN(t)?0:t}function F(e){return`${e}`}var ie={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>P(e)>P(t),">=":(e,t)=>P(e)>=P(t),"<":(e,t,n)=>{let r=P(e),i=P(t);if(n===void 0)return r<i;let a=P(n);return r<i&&i<a},"<=":(e,t,n)=>{let r=P(e),i=P(t);if(n===void 0)return r<=i;let a=P(n);return r<=i&&i<=a},"!!":async e=>await L(e),"!":async e=>!await L(e),"%":(e,t)=>P(e)%P(t),log:e=>(console.log(e),e),in:(e,t)=>t?j(t)?t.indexOf(F(e))!==-1:M(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(F).join(``),substr:(e,t,n)=>{let r=F(e),i=P(t);if(n===void 0)return r.substr(i);let a=P(n);if(a<0){let e=r.substr(i);return e.substr(0,e.length+a)}return r.substr(i,a)},"+":(...e)=>e.reduce((e,t)=>P(e)+P(t),0),"*":(...e)=>e.reduce((e,t)=>P(e)*P(t),1),"-":(e,t)=>{let n=P(e);return t===void 0?-n:n-P(t)},"/":(e,t)=>P(e)/P(t),min:(...e)=>Math.min(...e.map(P)),max:(...e)=>Math.max(...e.map(P)),merge:(...e)=>e.reduce((e,t)=>M(t)?e.concat(t):e.concat([t]),[]),var(e,t){let n=arguments.length>1?t:null;if(e===``||e===`.`||e==null)return this;if(typeof e==`number`&&Array.isArray(this))return e>=0&&e<this.length?this[e]:n;let r=F(e);if(r===``||r===`.`)return this;let i=r.split(`.`),a=this;for(let e of i){if(a==null)return n;if(Array.isArray(a)){let t=parseInt(e,10);a=isNaN(t)?a[e]:a[t]}else a=a[e]}return a===void 0?n:a},async missing(...e){let t=M(e[0])?e[0]:e,n=[];for(let e of t){let t=await I({var:e},this);(t===null||t===``)&&n.push(`${e}`)}return n},async missing_some(e,t){let n=await I({missing:t},this);if(!M(n)||!M(t))return[];let r=n.filter(j);return t.filter(j).length-r.length>=P(e)?[]:r},invoke(...e){let[t,...n]=e;return typeof t==`function`?Reflect.apply(t,null,n):null},startsWith:(e,t)=>j(e)&&j(t)&&e.startsWith(t),endsWith:(e,t)=>j(e)&&j(t)&&e.endsWith(t),regexp_matches(e,t){let n=e,r=``;if(M(e)){let[t,i]=e;n=t,r=i}return!j(n)||!j(r)?!1:new RegExp(n,r).test(F(t))},throw(e){throw Error(F(e))}};async function I(e,t){if(!e)return e;if(N(e))return I(await e,t);if(M(e))return Promise.all(e.map(e=>I(e,t)));if(!re(e))return e;let n=ae(e),r=n?e[n]??[]:[];switch(M(r)||(r=[r]),n){case`if`:case`?:`:for(let e=0;e<r.length-1;e+=2)if(await L(await I(r[e],t)))return I(r[e+1],t);return r.length%2==1?I(r[r.length-1],t):null;case`and`:{let e=null;for(let n of r)if(e=await I(n,t),!await L(e))return e;return e}case`or`:{let e=null;for(let n of r)if(e=await I(n,t),await L(e))return e;return e}case`map`:{let e=await I(r[0],t);return M(e)?await Promise.all(e.map(e=>I(r[1],e))):[]}case`filter`:{let e=await I(r[0],t);return M(e)?(await Promise.all(e.map(async e=>({item:e,shouldInclude:await L(await I(r[1],e))})))).filter(({shouldInclude:e})=>e).map(({item:e})=>e):[]}case`reduce`:{let e=await I(r[0],t);if(!M(e))return r.length>2?await I(r[2],t):null;let n=r[1],i=r.length>2?await I(r[2],t):null;for(let t of e)i=await I(n,{current:t,accumulator:i});return i}case`all`:{let e=await I(r[0],t);if(!M(e)||e.length===0)return!1;for(let t of e)if(!await L(await I(r[1],t)))return!1;return!0}case`some`:{let e=await I(r[0],t);if(!M(e))return!1;for(let t of e)if(await L(await I(r[1],t)))return!0;return!1}case`none`:{let e=await I(r[0],t);if(!M(e))return!0;for(let t of e)if(await L(await I(r[1],t)))return!1;return!0}case`catch`:try{return await I(r[0],t)}catch(e){return re(e)?await I(e,t):r[1]?await I(r[1],e):e instanceof Error?e.message:e}}let i=await Promise.all(r.map(e=>I(e,t))),a=n?ie[n]:void 0;if(!a)throw Error(`Unrecognized operation ${n}`);return a.apply(t,i)}async function L(e){return N(e)?L(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function ae(e){return Object.keys(e)[0]}function R(e,t,n){return new Proxy(Object.create(null),{get(r,i){if(typeof i!=`string`)return;let a=e.find(e=>e.key===i);if(a!==void 0)return async()=>!n.has(i)&&await I(a.logic,{...t,conditions:R(e,t,new Set(n).add(i))})===!0}})}var oe=(0,d.createFactory)(({client:e})=>(0,u.attach)({source:{stateSnapshot:e.stateSnapshotStore,predicates:e.predicates.listStore,actions:e.actions.listStore,features:e.features.listStore,responses:e.responses.getAllStore,conditions:e.conditions.listStore},effect:async({stateSnapshot:e,predicates:t,actions:n,features:r,responses:i,conditions:a},{rule:o,context:s})=>{let c=t.reduce((t,n)=>(t[n.name]=async(...t)=>await n.predicate({...e,args:t}),t),{}),l=n.reduce((t,n)=>(t[n.key]=async(...t)=>await n.action({...e,args:t},null)??void 0,t),{}),u=r.reduce((e,t)=>(e[t.id]=async()=>{let{bucket:e}=await t.getBucket();return e},e),{}),d={responses:i,location:typeof e.location==`object`?{hash:e.location.hash,host:e.location.host,hostname:e.location.hostname,href:e.location.href,origin:e.location.origin,pathname:e.location.pathname,port:e.location.port,protocol:e.location.protocol,search:e.location.search}:void 0,predicates:c,actions:l,features:u,...s};return await I(o,{...d,conditions:R(a,d,new Set)})}}));function se(e){return(0,d.invoke)(oe,e)}var ce=6e3,le=o.t(`last_ping`,`global`),ue=async e=>{try{let t=Date.now(),n=o.n.get(le),r=0;if(n.isSet()&&(r=n.json()??0),r&&t-r<ce)return!0;let i={},a=document.getElementById(`picked_script`)?.dataset.verceltoken;a&&(i[`x-vercel-protection-bypass`]=a);let s=await(0,f.sendPing)(e.apiUrl,{projectId:e.projectId,path:window.location.pathname},{headers:i});return s&&n.set(t),s}catch{return!1}},z=(0,u.createDomain)(`lifecycle`),de=(0,d.createFactory)(({client:e})=>{let n=z.store(!1),a=(0,u.createStore)(void 0,{skipVoid:!1,domain:z}),o=(0,u.createStore)(void 0,{skipVoid:!1,domain:z}),s=z.store(`idle`),c=z.store([]),l=(0,u.createStore)(void 0,{skipVoid:!1,domain:z}),d=(0,u.createStore)(void 0,{skipVoid:!1,domain:z}),f=(0,u.createEvent)(),p=(0,u.createEvent)(),m=(0,u.createEvent)(),h=(0,u.createEvent)(),g=(0,u.createEvent)(),_=(0,u.createEvent)();c.on(h,(e,t)=>[...e,t]),l.on(g,(e,t)=>t),d.on(_,(e,t)=>t),n.on(p,()=>!0);let y=(0,u.createEffect)(()=>{ue(e)}),b=(0,u.createEffect)(async()=>{await i.r()}),x=(0,u.createEffect)(async()=>{await v(e)}),S=(0,u.attach)({effect:x}),C=(0,u.attach)({source:c,effect:async e=>{for(let t of e)await t()}}),w=(0,u.attach)({source:l,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),T=(0,u.attach)({source:d,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),E=(0,u.sample)({clock:f,source:s,filter:e=>e===`idle`&&r.i(),fn:()=>void 0});(0,u.sample)({clock:E,fn:()=>`starting`,target:s}),(0,u.sample)({clock:E,target:y}),(0,u.sample)({clock:E,target:C}),(0,u.sample)({clock:E,target:b}),(0,u.sample)({clock:C.done,target:w}),(0,u.sample)({clock:w.doneData,target:a}),(0,u.sample)({clock:T.doneData,target:o}),(0,u.sample)({clock:w.doneData,filter:e=>e,target:T}),(0,u.sample)({clock:T.doneData,target:e.session.setIsUser}),(0,u.sample)({clock:T.doneData,fn:e=>({type:`user_decide`,value:e}),target:e.eventBus}),(0,u.sample)({clock:w.doneData,filter:e=>!e,fn:()=>void 0,target:m}),(0,u.sample)({clock:T.doneData,fn:()=>void 0,target:m}),(0,u.sample)({clock:m,fn:()=>({type:`initialize`}),target:e.eventBus});let D=(0,u.createStore)(!1).on(b.done,()=>!0),O=(0,u.createStore)(!1).on(m,()=>!0),ee=(0,u.createStore)(!1).on(S.done,()=>!0),k=(0,u.combine)(a,o,(e,t)=>e===!0&&t===!0);(0,u.sample)({clock:m,source:k,filter:e=>e,fn:()=>void 0,target:x});let A=(0,u.combine)(D,O,k,(e,t,n)=>e&&t&&n);(0,u.sample)({clock:A,filter:e=>e,fn:()=>void 0,target:S});let te=(0,u.combine)(D,O,k,ee,(e,t,n,r)=>e&&t&&(!n||r));return(0,u.sample)({clock:te,filter:e=>e,fn:()=>void 0,target:p}),(0,u.sample)({clock:p,fn:()=>`ready`,target:s}),(0,u.sample)({clock:p,fn:()=>({type:`ready`}),target:e.eventBus}),(0,u.sample)({clock:p,source:e.session.store,fn:({id:e,isUser:t,identifiers:n})=>({type:`session`,id:e,isUser:t,identifiers:n}),target:e.eventBus}),(0,u.sample)({clock:[C.fail,w.fail,T.fail,x.fail,S.fail,b.fail],fn:()=>`failed`,target:s}),{start:f,readyStore:n,preconditionPassedStore:a,conditionPassedStore:o,lifecycleStageStore:s,registerPluginStartHook:h,setPrecondition:g,setCondition:_}});function fe(e){return(0,d.invoke)(de,e)}var pe=(0,u.createDomain)(`predicate`),me=(0,d.createFactory)(({client:e})=>{let t=pe.store({}),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:{name:t.name,predicate:t.predicate}}}}),i=(0,u.createEvent)();(0,u.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Predicate '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:i,fn:({name:e,predicate:t})=>Object.freeze({name:e,predicate:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.predicate,{skipVoid:!1})}function s(t){let n=(0,u.createStore)(()=>void 0,{skipVoid:!1}),r=(0,u.attach)({source:{predicate:o(t),snapshot:e.stateSnapshotStore},effect:({predicate:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n})}});return(0,u.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,u.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:i,getByName:o,listStore:a,getEvokablePredicate:s}});function he(e){return(0,d.invoke)(me,e)}var ge=(e,t,n)=>{n.register({name:e,predicate:t})},_e=(0,u.createDomain)(`feature`);function B(e){return e?.enabled===!1}function ve(e){return e===`true`||e!==`false`&&e}var ye=(0,d.createFactory)(({client:e})=>{let t=_e.store({}),r=_e.store([]),i=(0,u.createApi)(t,{register(e,t){return{...e,[t.id]:t.feature}}}),a=(0,u.createEvent)();(0,u.sample)({clock:a,source:t,filter:(e,{id:t})=>e[t]!==void 0,fn:(e,{id:t})=>`Feature '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:a,fn:({id:e,feature:t})=>Object.freeze({id:e,feature:{id:e,feature:{...t,id:e}}}),target:i.register});let s=(0,u.createEffect)(async({id:e,key:t,storage:n=`local`,enabled:r})=>{if(r===!1)return null;let i=o.t(`feature:${e}:${t}`,`global`),a=(n===`session`?o.r:o.n).get(i).text();return a?{id:e,key:t,bucket:ve(a),storage:n}:null}),c=(0,u.createEffect)(e=>{if(!e)return null;let t=o.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?o.r:o.n).set(t,e.bucket)}),l=new Map,d=(0,u.attach)({source:{allFeaturesStore:t,resolvedFeaturesStore:r},effect:async({allFeaturesStore:e,resolvedFeaturesStore:t},{id:n,decide:r,key:i})=>{let a=t.find(e=>e.id===n&&e.key===i);if(a)return a;let o=e[n];if(!o)throw Error(`Feature with id '${n}' not found`);if(B(o.feature))return{id:o.id,bucket:!1,key:i,storage:o.feature.storage};let s=l.get(`${n}:${i}`);if(s!==void 0){let e=await s;return{id:o.id,bucket:e,key:i,storage:o.feature.storage}}let c=r();l.set(`${n}:${i}`,c);let u=await c;return{id:o.id,bucket:u,key:i,storage:o.feature.storage}}});(0,u.sample)({clock:i.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage,enabled:n.feature.enabled}},target:s}),(0,u.sample)({source:t,clock:d.doneData,filter:(e,t)=>!B(e[t.id]?.feature),fn:(e,t)=>{let{id:n,bucket:r,storage:i}=t,a=e[n]?.feature.key;return a?{key:a,id:n,bucket:r,storage:i}:null},target:c});let f=(0,u.combine)({allFeaturesStore:t,resolvedFeaturesStore:r}).map(({allFeaturesStore:e,resolvedFeaturesStore:t})=>Object.values(e).map(e=>{let n=t.find(t=>t.id===e.id&&t.key===e.feature.key);return n?{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,getBucket:()=>({id:e.id,bucket:n.bucket}),isResolved:!0}:{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,getBucket:async()=>await d(e.feature),isResolved:!1}}));(0,u.sample)({clock:d.doneData,source:{resolvedFeatures:r,allFeatures:t},filter:({resolvedFeatures:e,allFeatures:t},{id:n,key:r})=>!B(t[n]?.feature)&&!e.some(e=>e.id===n&&e.key===r),fn:(e,t)=>t,target:e.eventBus.prepend(e=>({type:`feature_decide`,feature:e}))}),(0,u.sample)({clock:[s.doneData,d.doneData],source:{resolvedFeatures:r,allFeatures:t},fn:({resolvedFeatures:e,allFeatures:t},n)=>!n||B(t[n.id]?.feature)||e.some(e=>e.id===n.id&&e.key===n.key)?e:[...e,n],target:r});function p(e){return f.map(t=>t.find(t=>t.id===e))}let m=new Map,h=new Map,g=new Map;function _(e){let t=m.get(e);if(t)return t;let n=p(e);return m.set(e,n),n}function v(e){return t.map(t=>t[e],{skipVoid:!1})}function y(e){let t=(0,u.createStore)(async()=>void 0,{skipVoid:!1}),n=_(e),r=(0,u.attach)({source:n,effect:async e=>{if(e)return async()=>(await e.getBucket()).bucket}});return(0,u.sample)({clock:n,target:r}),(0,u.sample)({clock:r.doneData,filter:e=>e!==void 0,target:t}),r(),t}function b(e){let t=h.get(e);if(t)return t;let n=y(e);return h.set(e,n),n}function x(e){let t=b(e),n=(0,u.createStore)(void 0,{skipVoid:!1}),r=(0,u.attach)({source:t,mapParams:(e,t)=>t,effect:(0,u.createEffect)(async e=>await e())});return(0,u.sample)({clock:r.doneData,fn:t=>{if(t!==void 0)return{id:e,bucket:t}},target:n}),(0,u.sample)({clock:t,target:r}),r(),n}function S(e){let t=g.get(e);if(t)return t;let n=x(e);return g.set(e,n),n}return{register:a,getById:_,getByName:v,listStore:f,getEvokableFeature:b,getFeatureResult:S}});function be(e){return(0,d.invoke)(ye,e)}var xe=(e,t,n)=>{n.register({id:e,feature:t})},V=(0,u.createDomain)(`history`);function H(e,t){return{id:s.t(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}var Se=(0,d.createFactory)(()=>{let e=V.store({entries:[]}),t=V.event(),n=V.event(),r=V.event(),i=V.event();e.on(t,(e,t)=>({entries:[...e.entries,H(t.experienceId,t.node)]})),e.on(n,(e,t)=>({entries:[...e.entries.slice(0,-1),H(t.experienceId,t.node)]})),e.on(i,(e,t)=>t);function o(e,t){let n={lastStepIndex:-1,secondLastStepIndex:-1};for(let r=e.length-1;r>=0;r--){let i=e[r],o=i?.node;if(!(!o||!a.u(o))&&!(t&&i.experienceId!==t))if(n.lastStepIndex===-1)n.lastStepIndex=r;else{n.secondLastStepIndex=r;break}}return n}return e.on(r,(e,t)=>{let{secondLastStepIndex:n}=o(e.entries,t.experienceId),r=n===-1?e.entries:e.entries.slice(0,n+1);return{...e,entries:r}}),{push:t,replace:n,back:r,restore:i,entriesStore:e.map(e=>e.entries)}});function Ce(){return(0,d.invoke)(Se)}var we=0,Te=e=>{let t=(0,u.createStore)([]);return t.on(e,(e,t)=>[...e,{id:we++,at:new Date,payload:t}]),t},Ee=(0,u.createDomain)(`field`),De=(0,d.createFactory)(()=>{let e=Ee.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.field.id]:t.field}},updateByKey(e,t){let n=Object.values(e).find(e=>e.key===t.fieldKey);return n?{...e,[n.id]:Object.assign({},n,t.updates)}:e}});function n(e){t.register({field:e})}let r={};e.watch(e=>{r=e});function i(e,n){let i=Object.values(r).find(t=>t.key===e)?.key;i&&t.updateByKey({fieldKey:i,updates:n})}let a=e.map(e=>Object.values(e));function o(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function s(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}function c(t){return e.map(e=>Object.values(e).find(e=>e.name===t)??null,{skipVoid:!1})}return{register:n,update:i,getById:o,getByKey:s,listStore:a,getByName:c}});function Oe(){return(0,d.invoke)(De)}var ke=(0,u.createDomain)(`step`),Ae=(0,d.createFactory)(()=>{let e=ke.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.step.id]:t.step}}});function n(e){t.register({step:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function je(){return(0,d.invoke)(Ae)}function Me(e,t){t.register(e)}var Ne=(0,u.createDomain)(`content`),Pe=(0,d.createFactory)(()=>{let e=Ne.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.content.id]:t.content}},patch(e,t){let n=e[t.id];if(!n)return e;let r=t.apply(n.data);return r===n.data?e:{...e,[t.id]:{...n,data:r}}}});function n(e){t.register({content:e})}function r(e,n){t.patch({id:e,apply:n})}let i=e.map(e=>Object.values(e));function a(t){return e.map(e=>e[t]??null,{skipVoid:!1})}return{register:n,patch:r,getById:a,listStore:i,indexStore:e}});function Fe(){return(0,d.invoke)(Pe)}function Ie(e,t){t.register(e)}var Le=(0,u.createDomain)(`action`),Re=(0,d.createFactory)(({client:e})=>{let t=Le.store({}),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.key]:{key:t.key,action:t.action}}}}),i=(0,u.createEvent)();(0,u.sample)({clock:i,source:t,filter:(e,{key:t})=>e[t]!==void 0,fn:(e,{key:t})=>`Action '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,u.sample)({clock:i,fn:({key:e,action:t})=>Object.freeze({key:e,action:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.action,{skipVoid:!1})}function s(t,n){let r=(0,u.createStore)(()=>void 0,{skipVoid:!1}),i=n?{experience:n.experience}:null,a=(0,u.attach)({source:{action:o(t),snapshot:e.stateSnapshotStore},effect:({action:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n},i)}});return(0,u.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:a}),(0,u.sample)({clock:a.doneData,filter:e=>e!==void 0,target:r}),a(),r}return{register:i,getByKey:o,listStore:a,getEvokableAction:s}});function ze(e){return(0,d.invoke)(Re,e)}var Be=(e,t,n)=>{n.register({key:e,action:t})};function U(e,t,n,r){return{fieldKey:e.key,userMessage:n,systemMessage:r,value:t}}function W(e){return e===null||e===``||Array.isArray(e)&&!e.length}function Ve(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null}function G(e){try{return JSON.stringify(e),!0}catch{return!1}}function He(e,t){return t.find(t=>t.key===e)??null}function Ue(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function We(e,t){if(e.type!==`object`||W(t))return null;if(e.multiple){if(!Array.isArray(t))return U(e,t,`This field expects multiple values`,`Field expects an array of objects.`);for(let n of t){if(typeof n!=`object`||!n)return U(e,t,`This field expects object values`,`Field expects an array of objects, but received non-object value.`);if(!G(n))return U(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}return null}return Array.isArray(t)?U(e,t,`This field expects a single value`,`Field expects a single object, not an array.`):typeof t!=`object`||!t?U(e,t,`This field expects an object value`,`Field expects an object value.`):G(t)?null:U(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}function Ge(e,t){if(W(t)||!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=new Set(e.options.map(e=>JSON.stringify(e.value)));return n.every(e=>r.has(JSON.stringify(e)))?null:U(e,t,`This field expects a valid option`,`Field expects a valid option from the defined choices.`)}let r=e.options.map(e=>e.value);return n.every(e=>!Ve(e)||e===null?!1:r.includes(e))?null:U(e,t,`This field expects a valid option`,`Field expects a valid option. Valid options are: ${r.join(`, `)}`)}async function Ke(t,n,r,i){if(n.validation&&!e.t(n.validation)&&!W(r)){let e=i?{$input:r,responses:i}:{$input:r},a=await t(n.validation,e);if(typeof a==`string`)return U(n,r,a,`Field validation resulted in an error: ${a}.`);if(a===!1)return U(n,r,`This field is invalid`,`Field validation resulted in an unspecified error.`)}return n.required&&W(r)?U(n,r,`This field is required`,`Field is required.`):!n.multiple&&Array.isArray(r)&&r.length>1?U(n,r,`This field expects a single response`,`Field expects a single response.`):null}var qe=(0,u.createDomain)(`response`),Je=(0,d.createFactory)(({client:e})=>{let n=qe.store({}),r=(0,u.createEvent)(),i=(0,u.createEvent)(),a=(0,u.createApi)(n,{register(e,t){return{...e,[t.fieldKey]:t.response}},registerBatch(e,t){return{...e,...t}},clear(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))},clearAll(){return{}}});function o(e,t){if(typeof e==`string`){if(t===void 0)throw Error(`Response is required when registering a single field`);a.register({fieldKey:e,response:t})}else a.registerBatch(e)}let s=(n,r)=>t.t(e,n,r),c=(0,u.attach)({source:{allFields:e.fields.listStore,existingResponses:n},effect:async({allFields:e,existingResponses:t},n)=>{let r=[],i={},a={...t,...n},o=Object.entries(n),c=await Promise.allSettled(o.map(async([t,n])=>{let o=He(t,e);if(!o){r.push({fieldKey:t,userMessage:`Field '${t}' not found`,systemMessage:`No field with key '${t}' exists. Available field keys are: ${e.map(e=>e.key).join(`,`)}.`,value:n});return}let c=Ue(o,n),l=await Ke(s,o,c,a);if(l){r.push(l);return}let u=We(o,c);if(u){r.push(u);return}let d=Ge(o,c);if(d){r.push(d);return}i[o.key]=n}));for(let[e,t]of c.entries()){if(t.status!==`rejected`)continue;let n=o[e];if(!n)continue;let[i,a]=n,s=t.reason instanceof Error?t.reason.message:String(t.reason);r.push({fieldKey:i,userMessage:`An unexpected error occurred validating this field`,systemMessage:`Validation threw for field '${i}': ${s}`,value:a})}return{responsesToCommit:i,validationErrors:r}}});async function l(e){return c(e)}let d=(0,u.attach)({source:n,effect:async(e,t)=>{let{responsesToCommit:n,validationErrors:r}=await c(t);return r.length?{errors:r}:(a.registerBatch(n),{errors:[]})}});async function f(e){return d(e)}let p=n.map(e=>e),m=n.map(e=>Object.entries(e).map(([e,t])=>({fieldKey:e,value:t})));function h(e){return(0,u.combine)({f:e,s:n},({f:e,s:t})=>{let n=e?t[e.key]??null:null;return n===null?e?.defaultValue!==void 0&&e.defaultValue!==null?e.defaultValue:null:n})}function g(t){return h(e.fields.getById(t))}function _(t){return h(e.fields.getByKey(t))}function v(t){return h(e.fields.getByName(t))}return(0,u.sample)({clock:r,target:a.clearAll}),(0,u.sample)({clock:i,target:a.clear}),{register:o,clearAll:r,clear:i,commit:f,getResponsesToCommit:l,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function Ye(e){return(0,d.invoke)(Je,e)}var Xe=(0,u.createDomain)(`condition`),Ze=(0,d.createFactory)(()=>{let e=Xe.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.condition.id]:t.condition}}});function n(e){t.register({condition:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function Qe(){return(0,d.invoke)(Ze)}function $e(){if(r.i()){let e=[document.currentScript,document.getElementById(`picked_script`),document.getElementById(`picked`),document.getElementById(`cvly`),document.getElementById(`cvly-x`)];for(let t of e)if(t?.dataset.api)return t.dataset.api}return`https://api.picked.app`}function K(){if(!r.f())return{};let e=new URLSearchParams(window.location.search),t={},n=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&n.add(t);for(let r of n){let n=r.replace(`picked-`,``);t[n]=e.getAll(r)}let i=o.t(`s`);if(n.size>0)o.r.set(i,t);else{let e=o.r.get(i);if(e)return e.json()||{}}return t}var q=o.t(`session`,`global`);function et(){return r.r()?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}`}function tt(){if(!r.s())return null;let e=o.n.get(q);if(!e.isSet())return null;try{return e.json()}catch{return null}}var nt=(0,d.createFactory)(()=>{let e=tt(),t={id:e?.id??et()};e?.isUser!==void 0&&(t.isUser=e.isUser),e?.identifiers&&Object.keys(e.identifiers).length>0&&(t.identifiers=e.identifiers);let n=(0,u.createStore)(t),i=(0,u.createApi)(n,{setIsUser:(e,t)=>({...e,isUser:t}),setIdentifier:(e,{key:t,value:n})=>({...e,identifiers:{...e.identifiers??{},[t]:n}}),removeIdentifier:(e,t)=>{let n=e.identifiers;if(!n||!(t in n))return e;let r={};for(let[e,i]of Object.entries(n))e!==t&&(r[e]=i);let i={id:e.id};return e.isUser!==void 0&&(i.isUser=e.isUser),Object.keys(r).length>0&&(i.identifiers=r),i}}),a=(0,u.attach)({source:n,effect:e=>{if(r.s())try{o.n.get(q).set(e)}catch{}}});return(0,u.sample)({source:n,target:a}),{store:n,setIsUser:i.setIsUser,setIdentifier:i.setIdentifier,removeIdentifier:i.removeIdentifier}});function rt(){return(0,d.invoke)(nt,void 0)}function J(){if(r.f())return globalThis.window.pickedConfig}function it(){if(r.f())return J()?.projectId}function at(){if(!r.i())return;let e=document.getElementById(`picked_script`)||document.querySelector(`script#picked`)||document.getElementById(`cvly`);if(e)return e.dataset.projectid||e.getAttribute(`project-id`)||void 0}function ot(e){if(e.projectId)return e.projectId;let t=it();if(t)return t;let n=at();if(n)return n;throw Error(`projectId is required. You can provide it via one of:
|
|
2
2
|
(1) createClient({ projectId }) options;
|
|
3
3
|
(2) window.pickedConfig = { projectId };
|
|
4
|
-
(3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes a data-projectid (or project-id) attribute.`)}function Y(e){return e==null||e===``||Number.isNaN(e)}var st={default:(e,t)=>Y(e)?String(t??``):String(e),append:(e,t)=>t&&!Y(e)?`${e} ${t}`:e,prepend:(e,t)=>t&&!Y(e)?`${t} ${e}`:e,upper:e=>typeof e==`string`?e.toUpperCase():e,lower:e=>typeof e==`string`?e.toLowerCase():e,capitalize:e=>typeof e==`string`?e.charAt(0).toUpperCase()+e.slice(1):e,list:e=>{if(!e||typeof e!=`object`)return e;let t=new Intl.ListFormat(`en`,{style:`long`,type:`conjunction`});if(Array.isArray(e))return t.format(e.map(String));if(e instanceof Map){let n=Array.from(e.entries()).map(([e,t])=>`${e}: ${t}`);return t.format(n)}return e instanceof Set?t.format(Array.from(e).map(String)):e}};function ct(e){return typeof e==`object`&&!!e}function lt(e,t){let n=t;for(let t of e.split(`.`))if(ct(n)&&t in n)n=n[t];else return;return typeof n==`function`?n():n}function ut(e,t){let n=e.split(`|`).map(e=>e.trim()),r=lt(n.shift()??``,t);for(let e of n){let[t,...n]=e.split(`:`),i=t?.trim()??``,a=n.join(`:`).trim().replaceAll(/(?:^['"]|['"]$)/g,``),o=st[i];o&&(r=o(r,a))}return Y(r)?``:typeof r==`object`?JSON.stringify(r):String(r)}function dt(e,t){let n=``,r=0;for(;r<e.length;)if(e[r]===`{`&&e[r+1]===`{`){r+=2;let i=``;for(;r<e.length;){if(e[r]===`}`&&e[r+1]===`}`){r+=2;break}i+=e[r++]}n+=ut(i.trim(),t)}else n+=e[r++];return n}var X=`preview-token`;function ft(){return!r.f()||!r.t()?!1:!!K()[X]?.[0]}var pt=class{static logger=n.t;options;dataSource=null;seededVersionId=null;versionSkew=null;contentLoader;previewEmbedderOrigins=null;plugins={};dataProviders=new Map;eventBus=(0,u.createEvent)();events;projectId;apiUrl;dashboardUrl;documentationSiteUrl;session=rt();searchParams=K();history=Ce();components=T({client:this});experienceInstances=a.n({client:this});experiences=_({client:this});frameworks=ee({client:this});predicates=he({client:this});features=be({client:this});conditions=Qe();fields=Oe();responses=Ye({client:this});steps=je();contents=Fe();actions=ze({client:this});conditionResults=a.r();stateSnapshotStore=te({client:this});evaluateRuleLogicFx=se({client:this});start;readyStore;preconditionPassedStore;conditionPassedStore;lifecycleStageStore;lifecycle=fe({client:this});renderStringFx=(0,u.attach)({source:this.responses.listStore,effect:(e,{template:t,context:n})=>{let r={};for(let t of e)r[t.fieldKey]=t.value;return dt(t,{...n,responses:r})}});constructor(e){this.events=Te(this.eventBus),this.projectId=ot(e),this.options=Object.freeze(e),this.apiUrl=e.apiUrl||$e(),this.dashboardUrl=e.dashboardUrl??`https://dashboard.picked.app`,this.documentationSiteUrl=e.documentationSiteUrl??`https://docs.picked.app`,this.start=this.lifecycle.start,this.readyStore=this.lifecycle.readyStore,this.preconditionPassedStore=this.lifecycle.preconditionPassedStore,this.conditionPassedStore=this.lifecycle.conditionPassedStore,this.lifecycleStageStore=this.lifecycle.lifecycleStageStore,this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.setupComponents(),this.lifecycle.setPrecondition(e.precondition),this.lifecycle.setCondition(e.condition),this.eventBus({type:`load`,version:c.t()}),this.maybeStartPreviewChannel()}dataProviderFor(e){let t=e??``,n=this.dataProviders.get(t);if(n)return n;let r=Promise.resolve().then(()=>require("../provider-
|
|
4
|
+
(3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes a data-projectid (or project-id) attribute.`)}function Y(e){return e==null||e===``||Number.isNaN(e)}var st={default:(e,t)=>Y(e)?String(t??``):String(e),append:(e,t)=>t&&!Y(e)?`${e} ${t}`:e,prepend:(e,t)=>t&&!Y(e)?`${t} ${e}`:e,upper:e=>typeof e==`string`?e.toUpperCase():e,lower:e=>typeof e==`string`?e.toLowerCase():e,capitalize:e=>typeof e==`string`?e.charAt(0).toUpperCase()+e.slice(1):e,list:e=>{if(!e||typeof e!=`object`)return e;let t=new Intl.ListFormat(`en`,{style:`long`,type:`conjunction`});if(Array.isArray(e))return t.format(e.map(String));if(e instanceof Map){let n=Array.from(e.entries()).map(([e,t])=>`${e}: ${t}`);return t.format(n)}return e instanceof Set?t.format(Array.from(e).map(String)):e}};function ct(e){return typeof e==`object`&&!!e}function lt(e,t){let n=t;for(let t of e.split(`.`))if(ct(n)&&t in n)n=n[t];else return;return typeof n==`function`?n():n}function ut(e,t){let n=e.split(`|`).map(e=>e.trim()),r=lt(n.shift()??``,t);for(let e of n){let[t,...n]=e.split(`:`),i=t?.trim()??``,a=n.join(`:`).trim().replaceAll(/(?:^['"]|['"]$)/g,``),o=st[i];o&&(r=o(r,a))}return Y(r)?``:typeof r==`object`?JSON.stringify(r):String(r)}function dt(e,t){let n=``,r=0;for(;r<e.length;)if(e[r]===`{`&&e[r+1]===`{`){r+=2;let i=``;for(;r<e.length;){if(e[r]===`}`&&e[r+1]===`}`){r+=2;break}i+=e[r++]}n+=ut(i.trim(),t)}else n+=e[r++];return n}var X=`preview-token`;function ft(){return!r.f()||!r.t()?!1:!!K()[X]?.[0]}var pt=class{static logger=n.t;options;dataSource=null;seededVersionId=null;versionSkew=null;contentLoader;previewEmbedderOrigins=null;plugins={};dataProviders=new Map;eventBus=(0,u.createEvent)();events;projectId;apiUrl;dashboardUrl;documentationSiteUrl;session=rt();searchParams=K();history=Ce();components=T({client:this});experienceInstances=a.n({client:this});experiences=_({client:this});frameworks=ee({client:this});predicates=he({client:this});features=be({client:this});conditions=Qe();fields=Oe();responses=Ye({client:this});steps=je();contents=Fe();actions=ze({client:this});conditionResults=a.r();stateSnapshotStore=te({client:this});evaluateRuleLogicFx=se({client:this});start;readyStore;preconditionPassedStore;conditionPassedStore;lifecycleStageStore;lifecycle=fe({client:this});renderStringFx=(0,u.attach)({source:this.responses.listStore,effect:(e,{template:t,context:n})=>{let r={};for(let t of e)r[t.fieldKey]=t.value;return dt(t,{...n,responses:r})}});constructor(e){this.events=Te(this.eventBus),this.projectId=ot(e),this.options=Object.freeze(e),this.apiUrl=e.apiUrl||$e(),this.dashboardUrl=e.dashboardUrl??`https://dashboard.picked.app`,this.documentationSiteUrl=e.documentationSiteUrl??`https://docs.picked.app`,this.start=this.lifecycle.start,this.readyStore=this.lifecycle.readyStore,this.preconditionPassedStore=this.lifecycle.preconditionPassedStore,this.conditionPassedStore=this.lifecycle.conditionPassedStore,this.lifecycleStageStore=this.lifecycle.lifecycleStageStore,this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.setupComponents(),this.lifecycle.setPrecondition(e.precondition),this.lifecycle.setCondition(e.condition),this.eventBus({type:`load`,version:c.t()}),this.maybeStartPreviewChannel()}dataProviderFor(e){let t=e??``,n=this.dataProviders.get(t);if(n)return n;let r=Promise.resolve().then(()=>require("../provider-DZEDUlIk.cjs")).then(t=>t.createPickedDataProvider({apiUrl:this.apiUrl,projectId:this.projectId,...e!==void 0&&{previewToken:e}}));return this.dataProviders.set(t,r),r}async getProjectConfig(e){let t=await this.dataProviderFor(e?.previewToken),n=await t.getProjectConfig();if(this.dataSource=t.meta.manifest,n===null)throw Error(`Picked could not resolve the configuration for project "${this.projectId}" from ${this.apiUrl}.`);return n}async getExperienceContent(e,t){return(await this.dataProviderFor(t?.previewToken)).getContent(e,t?.signal===void 0?void 0:{signal:t.signal})}maybeStartPreviewChannel(){ft()&&Promise.resolve().then(()=>require("../preview-channel-Cx0e6fye.cjs")).then(e=>e.initPreviewChannel(this)).catch(()=>void 0)}registerFramework=e=>{k(e,this.frameworks)};registerComponent=(e,t)=>{E(e,t,this.components)};registerPlugin=e=>{b(this,e,this.plugins);let t=this.plugins[e.name];t?.onStart&&this.lifecycle.registerPluginStartHook(t.onStart)};registerFeature=(e,t)=>{xe(e,t,this.features)};registerPredicate=(e,t)=>{ge(e,t,this.predicates)};registerCondition=e=>{this.conditions.register(e)};registerField=e=>{this.fields.register(e)};registerStep=e=>{Me(e,this.steps)};registerContent=e=>{Ie(e,this.contents)};patchContent=(e,t)=>{this.contents.patch(e,t)};registerAction=(e,t)=>{Be(e,t,this.actions)};registerExperience=e=>{e.component&&E(`experience:${e.id}`,e.component,this.components),this.experiences.register(e)};launchExperienceById=async(e,t)=>{this.experiences.launch({id:e,options:t})};launchExperienceByKey=async(e,t)=>{this.experiences.launch({key:e,options:t})};openExperienceById=async e=>{this.experiences.open({id:e})};openExperienceByKey=async e=>{this.experiences.open({key:e})};setupPlugins(){this.options.plugins?.forEach(e=>{if(Array.isArray(e)){e.forEach(e=>{this.registerPlugin(e)});return}let t=typeof e==`function`?e():e;if(Array.isArray(t)){t.forEach(e=>this.registerPlugin(e));return}this.registerPlugin(t)})}setupFeatures(){let e=this.options.features;e&&Object.entries(e).forEach(([e,t])=>{let n=typeof t==`function`?t():t;this.registerFeature(e,n)}),this.searchParams.feature&&this.searchParams.feature.forEach(e=>{try{let[t,n]=e.split(`:`);if(!t||!n)return;let r=ve(n);this.registerFeature(t,{key:`${r}`,name:t,decide:()=>r,storage:`session`})}catch{}})}setupPredicates(){let e=this.options.predicates;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerPredicate(e,t)})}setupActions(){let e=this.options.actions;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerAction(e,t)})}setupComponents(){let e=this.options.components;e&&Object.entries(e).forEach(([e,t])=>{this.registerComponent(e,t)})}getPluginConfig=e=>this.plugins[e]??{}},mt=`application/picked-javascript`,ht=`application/picked-module`,gt=`data-picked-hydrated`;async function _t(e){if(!(`document`in globalThis))return;let t=`application/picked-module`,n=`data-picked-hydrated`;function r(e){try{Function(e.textContent)}catch(t){return t instanceof SyntaxError&&(console.error(`[picked] Skipped a rehydrated inline script that failed to parse.`,t),e.setAttribute(n,``),!0)}return!1}function i(e,t){let r=document.createElement(`script`);for(let t of Array.from(e.attributes))t.name!==`type`&&r.setAttribute(t.name,t.value);t&&r.setAttribute(`type`,t),r.setAttribute(n,``),e.src?r.async=!1:r.textContent=e.textContent;let i=e.src?new Promise(e=>{r.addEventListener(`load`,()=>e(),{once:!0}),r.addEventListener(`error`,()=>e(),{once:!0})}):null;return e.src?e.replaceWith(r):(globalThis.__pickedEmbedScriptRoot=e.getRootNode(),e.replaceWith(r),globalThis.__pickedEmbedScriptRoot=null),i}let a=Array.from(e.querySelectorAll(`script[type="application/picked-javascript"]:not([${n}]), script[type="${t}"]:not([${n}])`)).filter(e=>e instanceof HTMLScriptElement);for(let e of a){if(!e.isConnected)continue;let n=e.getAttribute(`type`)===t?`module`:null;if(!e.src&&n===null&&r(e))continue;let a=i(e,n);a&&await a}}function vt(){return`<script>(${_t.toString()})(document)<\/script>`}function yt(e){return typeof e==`object`&&!!e&&`id`in e&&typeof e.id==`string`&&`content`in e&&(typeof e.content==`string`||e.content===null)}function bt(e){return{$$type:`lazy-component`,load:e}}function xt(e){return typeof e==`object`&&!!e&&`$$type`in e&&e.$$type===`lazy-component`}function Z(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&`contentEntryId`in e&&typeof e.contentEntryId==`string`}function Q(e){return Z(e)?e.contentEntryId:null}function $(e){let t=Array.isArray(e)?e:[e],n=[];for(let e of t)Z(e)&&n.push(e.contentEntryId);return n}function St(e,t){return t===null?null:e[t]??null}function Ct(e,t){let n=[];for(let r of t){let t=e[r];t!==void 0&&n.push(t)}return n}function wt(e,t){if(u.is.store(t))return(0,u.combine)(t,e.indexStore,(e,t)=>St(t,Q(e)));let n=Q(t);return e.indexStore.map(e=>St(e,n),{skipVoid:!1})}function Tt(e,t){if(u.is.store(t))return(0,u.combine)(t,e.indexStore,(e,t)=>Ct(t,$(e)));let n=$(t);return e.indexStore.map(e=>Ct(e,n),{skipVoid:!1})}var Et=e=>{let t=new pt(e);return r.m(t),t};function Dt(e){return typeof e.data==`object`}function Ot(e){return e.map(e=>!e||!Dt(e)?null:e,{skipVoid:!1})}exports.PICKED_HYDRATED_ATTR=gt,exports.PICKED_MODULE_SCRIPT_TYPE=ht,exports.PICKED_SCRIPT_TYPE=mt,exports.PREVIEW_TOKEN_PARAM=X,exports.Picked=pt,exports.buildRehydrateBootstrap=vt,exports.createClient=Et,exports.createPluginEffect=y,exports.createStorageKey=o.t,exports.deriveReference=wt,exports.deriveReferences=Tt,exports.evaluateRuleLogic=t.t,exports.getPickedConfig=J,exports.isContentReference=Z,exports.isHtmlAssetValue=yt,exports.isInsideIframe=r.t,exports.isLazyLoader=xt,exports.isPickedRoot=i.a,exports.isPreviewSession=ft,exports.lazyComponent=bt,exports.localStore=o.n,exports.onInertScriptSubtrees=l.t,exports.readReferenceId=Q,exports.readReferenceIds=$,exports.rehydrateScripts=_t,exports.reportInertScriptSubtrees=l.n,exports.resetInertScriptReport=l.r,exports.sessionStore=o.r,exports.subscribe=o.i,exports.supportsCookies=r.n,exports.supportsCryptoRandomUUID=r.r,exports.supportsDocument=r.i,exports.supportsHistory=r.a,exports.supportsIntersectionObserver=r.o,exports.supportsLocalStorage=r.s,exports.supportsLocation=r.c,exports.supportsSessionStorage=r.l,exports.supportsShadowRoot=r.u,exports.supportsWebComponents=r.d,exports.supportsWindow=r.f,exports.toTypedContentStore=Ot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../plugin-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../plugin-hFQIiHOB.cjs"),t=require("../../../api-TWnRLh3X.cjs"),n=require("../../../registry-C1t8l3t9.cjs");let r=require("@picked/delivery-api-client");Object.defineProperty(exports,"createClientHeaders",{enumerable:!0,get:function(){return r.createClientHeaders}}),exports.dynamicExperiencesPlugin=e.t,exports.fetchExperienceContent=t.t,exports.fetchProject=t.n,Object.defineProperty(exports,"fetchSchema",{enumerable:!0,get:function(){return r.fetchSchema}}),exports.registerPickedBundle=n.n;
|
package/dist/cjs/server/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../experience-instance-Dej3P1sE.cjs"),t=require("../../plugin-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../experience-instance-Dej3P1sE.cjs"),t=require("../../plugin-hFQIiHOB.cjs");let n=require("effector");var r=1e4;function i(e){if(e?.location!==void 0)return{location:e.location}}function a(t,n){return t.nodes.filter(e.u).some(e=>n.get(e.stepId)===!0)}async function o(n,o={}){let s=o.previewToken===void 0?void 0:{previewToken:o.previewToken},c=await n.getProjectConfig(s),l=n.session.store.getState().id;n.conditionResults.reset(),t.n(n,c,{isPreview:!1,sessionId:l});let u=i(o.attributes),d=o.timeoutMs??r,f=new Map(c.steps.map(e=>[e.id,e.layoutContentId!==void 0&&e.layoutContentId!==null])),p=Object.fromEntries(c.conditions.map(e=>[e.key,e])),m=c.experiences.filter(t=>!e.c(t.condition,p)),h=(await Promise.all(m.map(async t=>({experience:t,active:await e.o(n,{condition:t.condition},{context:u})})))).filter(e=>e.active).map(e=>e.experience),g=await Promise.all(h.filter(e=>a(e,f)).map(e=>n.getExperienceContent({id:e.id,key:e.key},{...s,signal:AbortSignal.timeout(d)}))),_=new Map;for(let e of g)if(e)for(let t of[...e.references??[],...e.content])_.set(t.id,t);return{versionId:c.versionId,projectConfig:c,content:Array.from(_.values()),conditionResults:n.conditionResults.store.getState()}}function s(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:t=>e(t),reject:e=>t(e)}}function c(t,r){let{promise:i,resolve:a}=s(),o=(0,n.createEvent)(),c=(0,n.createEvent)(),l=(0,n.createEvent)(),u=(0,n.createEvent)(),d=(0,n.createEvent)(),f=t.experiences.listStore.map(n=>n.map(n=>e.t({client:t,experience:n}))),p=(0,n.createStore)({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=(0,n.createEffect)(async e=>{let r=(0,n.attach)({source:e.experience.componentStore,effect:async(n,r)=>{let i=e.availableRenderers[r];return n&&i?.isValidComponent(n.component)?{rendered:await i.render(n.component,t,e.experience),rendererIndex:r}:null}}),i=e.startRendererIndex??0;for(let t=i;t<e.availableRenderers.length;t++){let e=await r(t);if(e)return e}return null}),h=(0,n.createEffect)(async({experience:e,availableRenderers:t,startRendererIndex:n=0})=>e?m({experience:e,availableRenderers:t,startRendererIndex:n}):null);p.on(l,(e,t)=>({...e,renderedExperiences:[...e.renderedExperiences,t],currentExperienceIndex:e.currentExperienceIndex+1})).on(d,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(u,e=>({...e,isComplete:!0})).reset(o),(0,n.sample)({clock:o,target:c}),(0,n.sample)({clock:c,source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex<e.length&&!t.isComplete,fn:({experiences:e,state:t})=>({experience:e[t.currentExperienceIndex],availableRenderers:r,startRendererIndex:0}),target:h}),(0,n.sample)({clock:h.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),(0,n.sample)({clock:l,target:c}),(0,n.sample)({clock:h.doneData,filter:e=>e===null,target:d}),(0,n.sample)({clock:d,target:c}),(0,n.sample)({clock:[c,d,l],source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex>=e.length,target:u});let g=(0,n.attach)({source:p,effect:e=>{e.isComplete&&a(e.renderedExperiences)}});return(0,n.sample)({clock:u,target:g}),o(),i}exports.createExperienceInstance=e.t,exports.evaluateConditionMemo=e.i,exports.hashRule=e.a,exports.isExperienceActive=e.o,exports.registerProjectConfig=t.n,exports.render=c,exports.ruleReferencesAction=e.s,exports.ruleReferencesActionDeep=e.c,exports.serialize=o;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Site font. Vocs 2 has no `font` config option, so Inter is declared here.
|
|
3
|
+
*/
|
|
4
|
+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap');
|
|
5
|
+
|
|
6
|
+
:root {
|
|
7
|
+
--vocs-fontFamily-default: 'Inter', sans-serif;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* Embed mode — activated by the ?embed query param.
|
|
12
|
+
* Hides site chrome (gutters, top nav, sidebar, outline, footer) so the docs
|
|
13
|
+
* content can be displayed inside an iframe in the dashboard's docs panel.
|
|
14
|
+
*
|
|
15
|
+
* Every selector targets a `data-v-*` attribute. These are the hooks Vocs
|
|
16
|
+
* publishes for styling its layout, and they are what this file must use:
|
|
17
|
+
* matching on class names instead would bind to generated Tailwind utilities
|
|
18
|
+
* that carry no compatibility promise, and a rename would break the dashboard's
|
|
19
|
+
* docs panel silently — build and tests stay green while the panel renders with
|
|
20
|
+
* a sidebar and a top nav inside it.
|
|
21
|
+
*
|
|
22
|
+
* Nothing automated covers the visual result. After any Vocs upgrade, open the
|
|
23
|
+
* dashboard docs panel and look at it.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
* Hide the gutters. These hold the top nav, the sidebar and the outline, so
|
|
28
|
+
* hiding them removes the chrome in one step.
|
|
29
|
+
*
|
|
30
|
+
* Do NOT add `[data-v-sidebar]` or `[data-v-topnav]` here. Those sit on the
|
|
31
|
+
* layout root as flags describing which regions the layout has — the root
|
|
32
|
+
* carries both — so hiding them blanks the entire page, content included.
|
|
33
|
+
*/
|
|
34
|
+
.vocs-embed [data-v-gutter-top],
|
|
35
|
+
.vocs-embed [data-v-gutter-top-left],
|
|
36
|
+
.vocs-embed [data-v-gutter-left],
|
|
37
|
+
.vocs-embed [data-v-gutter-right],
|
|
38
|
+
.vocs-embed [data-v-gutter-logo],
|
|
39
|
+
.vocs-embed [data-v-mobile-nav] {
|
|
40
|
+
display: none !important;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Hide the sidebar's own container and the curtains behind it */
|
|
44
|
+
.vocs-embed [data-v-sidebar-container],
|
|
45
|
+
.vocs-embed [data-v-sidebar-curtain],
|
|
46
|
+
.vocs-embed [data-v-sidebar-footer-curtain] {
|
|
47
|
+
display: none !important;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* Hide the surface layer that paints the sidebar and top-nav backgrounds.
|
|
52
|
+
* It sits behind the chrome rather than inside it, so hiding the gutters alone
|
|
53
|
+
* leaves its fill behind as a ghost panel down the left edge.
|
|
54
|
+
*/
|
|
55
|
+
.vocs-embed [data-v-surface-bg] {
|
|
56
|
+
display: none !important;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/*
|
|
60
|
+
* Hide the "Ask AI" prompt. The dashboard embeds these pages beside its own
|
|
61
|
+
* agent, so a second assistant entry point inside the panel competes with it.
|
|
62
|
+
*/
|
|
63
|
+
.vocs-embed [data-v-ask-ai-container] {
|
|
64
|
+
display: none !important;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/*
|
|
68
|
+
* Hide the mobile outline trigger, the footer, the skip link and the bottom
|
|
69
|
+
* observer. The outline and footer render on the client rather than into the
|
|
70
|
+
* prerendered HTML, so they are covered here even though a static build of this
|
|
71
|
+
* site does not emit them.
|
|
72
|
+
*/
|
|
73
|
+
.vocs-embed [data-v-outline],
|
|
74
|
+
.vocs-embed [data-v-outline-mobile],
|
|
75
|
+
.vocs-embed [data-v-footer],
|
|
76
|
+
.vocs-embed [data-v-skip-to-content],
|
|
77
|
+
.vocs-embed [data-bottom-observer],
|
|
78
|
+
.vocs-embed footer {
|
|
79
|
+
display: none !important;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* Reclaim the space the hidden gutters and top nav were holding */
|
|
83
|
+
.vocs-embed [data-v-main] {
|
|
84
|
+
margin-left: 0 !important;
|
|
85
|
+
padding-top: 0 !important;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Expand content to fill the embed viewport */
|
|
89
|
+
.vocs-embed [data-v-content] {
|
|
90
|
+
max-width: 100% !important;
|
|
91
|
+
margin-left: auto !important;
|
|
92
|
+
margin-right: auto !important;
|
|
93
|
+
padding-left: 1.25rem !important;
|
|
94
|
+
padding-right: 1.25rem !important;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* Remove the top margin on the first child so there is no gap at the panel top */
|
|
98
|
+
.vocs-embed article > :first-child,
|
|
99
|
+
.vocs-embed [data-v-content] > :first-child {
|
|
100
|
+
margin-top: 0 !important;
|
|
101
|
+
}
|
|
@@ -311,4 +311,6 @@ WHERE project_id = '{{ your project ID }}'
|
|
|
311
311
|
- [About PickedQL](/explanation/how-pickedql-works) — what the layer expands for you.
|
|
312
312
|
- [Virtual functions](/reference/pickedql/virtual-functions) — every function.
|
|
313
313
|
- [Dimensions](/reference/pickedql/dimensions) — every dimension column.
|
|
314
|
+
- [Analytics events](/reference/sdk/analytics-events) — every `event_type` value that a
|
|
315
|
+
filter can use.
|
|
314
316
|
- [Reports](/reference/dashboard/reports) — the same data as an embedded dashboard.
|
|
@@ -5,24 +5,24 @@ layout: docs
|
|
|
5
5
|
|
|
6
6
|
# How to authenticate the CLI
|
|
7
7
|
|
|
8
|
-
This guide shows you how to install
|
|
9
|
-
organizations, projects, and workspaces then know who you are. It expects a Picked
|
|
10
|
-
and a project directory to work in.
|
|
8
|
+
This guide shows you how to install the `picked` command and sign it in. Commands that read
|
|
9
|
+
your organizations, projects, and workspaces then know who you are. It expects a Picked
|
|
10
|
+
account and a project directory to work in.
|
|
11
11
|
|
|
12
12
|
## 1. Install the CLI
|
|
13
13
|
|
|
14
14
|
:::code-group
|
|
15
15
|
|
|
16
16
|
```bash [npm]
|
|
17
|
-
npm install
|
|
17
|
+
npm install picked
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
```bash [pnpm]
|
|
21
|
-
pnpm add
|
|
21
|
+
pnpm add picked
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
```bash [yarn]
|
|
25
|
-
yarn add
|
|
25
|
+
yarn add picked
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
:::
|
|
@@ -44,8 +44,7 @@ https://api.picked.app/…/oauth/authorize?…
|
|
|
44
44
|
Logged in as you@example.com (https://api.picked.app)
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
The CLI stores the session in `~/.picked/auth/<origin>.json
|
|
48
|
-
file mode `600`. It refreshes the session as it nears expiry.
|
|
47
|
+
The CLI stores the session in `~/.picked/auth/<origin>.json`. It refreshes the session as it nears expiry.
|
|
49
48
|
|
|
50
49
|
## 3. Confirm the session
|
|
51
50
|
|
|
@@ -70,15 +69,18 @@ Logged out of https://api.picked.app.
|
|
|
70
69
|
|
|
71
70
|
## Run the CLI in CI
|
|
72
71
|
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
`picked generate types` reads the workspace schema, not your account, so CI needs no
|
|
73
|
+
session for it. A workspace you read with `source: 'preview'` needs that workspace's token.
|
|
74
|
+
Run `picked workspace use` once on your machine, then give CI the two values it wrote:
|
|
75
75
|
|
|
76
76
|
```bash
|
|
77
|
-
|
|
77
|
+
PICKED_PROJECT_ID=your-project-id \
|
|
78
|
+
PICKED_PREVIEW_TOKEN=$YOUR_CI_SECRET \
|
|
79
|
+
picked generate types --check
|
|
78
80
|
```
|
|
79
81
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
+
`picked workspace list` and `picked workspace use` read your organizations and projects, so
|
|
83
|
+
those two do need a session. Run them on your machine, where a browser can sign you in.
|
|
82
84
|
|
|
83
85
|
:::note
|
|
84
86
|
This is a developer session for local tooling. It is not the same as an
|
|
@@ -5,8 +5,13 @@ layout: docs
|
|
|
5
5
|
|
|
6
6
|
# How to create and revoke an API key
|
|
7
7
|
|
|
8
|
-
This guide shows you how to give your code access to the Picked API. Use a key
|
|
9
|
-
|
|
8
|
+
This guide shows you how to give your code access to the Picked API. Use a key where your
|
|
9
|
+
own code calls the API, such as a server-side integration.
|
|
10
|
+
|
|
11
|
+
An API key does not sign the [CLI](/reference/tools/cli) in. The CLI reads a session, which
|
|
12
|
+
`picked login` writes. See
|
|
13
|
+
[How to authenticate the CLI](/how-to/authenticate-the-cli) for the commands that CI can
|
|
14
|
+
run without one.
|
|
10
15
|
|
|
11
16
|
## Create a key
|
|
12
17
|
|
|
@@ -16,7 +16,7 @@ Install it from the
|
|
|
16
16
|
## 2. Add the devtools plugin
|
|
17
17
|
|
|
18
18
|
```typescript
|
|
19
|
-
import { createClient } from '
|
|
19
|
+
import { createClient } from 'picked'
|
|
20
20
|
import { svelteDevtoolsPlugin } from '@picked/svelte/plugins/devtools'
|
|
21
21
|
|
|
22
22
|
const picked = createClient({
|
|
@@ -13,28 +13,41 @@ ID from the dashboard.
|
|
|
13
13
|
:::code-group
|
|
14
14
|
|
|
15
15
|
```bash [React]
|
|
16
|
-
npm install
|
|
16
|
+
npm install picked @picked/react effector effector-react
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
```bash [Svelte]
|
|
20
|
-
npm install
|
|
20
|
+
npm install picked @picked/svelte effector
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
:::
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
`picked` gives you the client, the `picked.config` helpers, and the `picked` command. Your
|
|
26
|
+
package manager adds `@picked/client` with it, which carries the runtime and holds the
|
|
27
|
+
generated types.
|
|
28
|
+
|
|
29
|
+
## 2. Add `picked.config.ts`
|
|
30
|
+
|
|
31
|
+
Create this file in the root of your project. The `picked` command and the
|
|
32
|
+
[Vite plugin](/reference/tools/vite-plugin) read your project identity from it:
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { defineConfig } from 'picked/config'
|
|
36
|
+
|
|
37
|
+
export default defineConfig({
|
|
38
|
+
projectId: 'your-project-id',
|
|
39
|
+
})
|
|
40
|
+
```
|
|
31
41
|
|
|
32
|
-
|
|
42
|
+
[Type generation](/reference/sdk/type-generation) reads this file, and gives your fields,
|
|
43
|
+
features and steps the types the workspace declares.
|
|
44
|
+
|
|
45
|
+
## 3. Create and start the client
|
|
33
46
|
|
|
34
47
|
:::code-group
|
|
35
48
|
|
|
36
49
|
```tsx [React]
|
|
37
|
-
import { createClient } from '
|
|
50
|
+
import { createClient } from 'picked'
|
|
38
51
|
import { dynamicExperiencesPlugin } from '@picked/client/plugins/dynamic-experiences'
|
|
39
52
|
import { reactFrameworkPlugin } from '@picked/react/plugins/framework'
|
|
40
53
|
|
|
@@ -47,7 +60,7 @@ picked.start()
|
|
|
47
60
|
```
|
|
48
61
|
|
|
49
62
|
```ts [Svelte]
|
|
50
|
-
import { createClient } from '
|
|
63
|
+
import { createClient } from 'picked'
|
|
51
64
|
import { dynamicExperiencesPlugin } from '@picked/client/plugins/dynamic-experiences'
|
|
52
65
|
import { svelteFrameworkPlugin } from '@picked/svelte/plugins/framework'
|
|
53
66
|
|
|
@@ -61,9 +74,13 @@ picked.start()
|
|
|
61
74
|
|
|
62
75
|
:::
|
|
63
76
|
|
|
77
|
+
`picked` carries the client's root entry. Each deeper import path, such as
|
|
78
|
+
`@picked/client/plugins/dynamic-experiences` and `@picked/client/server`, keeps its own
|
|
79
|
+
name.
|
|
80
|
+
|
|
64
81
|
`start()` is idempotent. A second call changes nothing on a client that started already.
|
|
65
82
|
|
|
66
|
-
##
|
|
83
|
+
## 4. Add the optional plugins
|
|
67
84
|
|
|
68
85
|
- `windowObjectPlugin()` puts the client on `window.Picked`, which helps when you debug.
|
|
69
86
|
- `singlePageAppPlugin()` starts the client again on a history event.
|
|
@@ -72,4 +89,5 @@ picked.start()
|
|
|
72
89
|
|
|
73
90
|
- [Add Picked to your application](/tutorials/first-experience) — the whole path.
|
|
74
91
|
- [SDK installation](/reference/sdk) — every client option.
|
|
92
|
+
- [Type generation](/reference/sdk/type-generation) — types from your workspace.
|
|
75
93
|
- [How to register a component](/how-to/register-a-component).
|
|
@@ -13,37 +13,49 @@ API request at runtime.
|
|
|
13
13
|
:::code-group
|
|
14
14
|
|
|
15
15
|
```bash [npm]
|
|
16
|
-
npm install @picked/vite-plugin-picked
|
|
16
|
+
npm install @picked/vite-plugin-picked picked
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
```bash [pnpm]
|
|
20
|
-
pnpm add @picked/vite-plugin-picked
|
|
20
|
+
pnpm add @picked/vite-plugin-picked picked
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
```bash [yarn]
|
|
24
|
-
yarn add @picked/vite-plugin-picked
|
|
24
|
+
yarn add @picked/vite-plugin-picked picked
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
:::
|
|
28
28
|
|
|
29
|
-
## 2.
|
|
29
|
+
## 2. Name your project
|
|
30
|
+
|
|
31
|
+
Create `picked.config.ts` in the root of your project. The plugin reads your project
|
|
32
|
+
identity from this file:
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { defineConfig } from 'picked/config'
|
|
36
|
+
|
|
37
|
+
export default defineConfig({
|
|
38
|
+
projectId: 'your-project-id',
|
|
39
|
+
})
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 3. Add the plugin to your Vite config
|
|
30
43
|
|
|
31
44
|
```typescript
|
|
32
45
|
import { defineConfig } from 'vite'
|
|
33
46
|
import { picked } from '@picked/vite-plugin-picked'
|
|
34
47
|
|
|
35
48
|
export default defineConfig({
|
|
36
|
-
plugins: [
|
|
37
|
-
picked({
|
|
38
|
-
projectId: 'your-project-id',
|
|
39
|
-
}),
|
|
40
|
-
],
|
|
49
|
+
plugins: [picked()],
|
|
41
50
|
})
|
|
42
51
|
```
|
|
43
52
|
|
|
44
53
|
When Vite starts, the plugin reads your project configuration and embeds them in your bundle.
|
|
45
54
|
The SDK then reads the embedded configuration and makes no network request.
|
|
46
55
|
|
|
56
|
+
The plugin also writes `picked-env.d.ts`, which types your fields, features and steps
|
|
57
|
+
against the workspace. See [Type generation](/reference/sdk/type-generation).
|
|
58
|
+
|
|
47
59
|
:::note
|
|
48
60
|
When a preview token is there at runtime, the SDK ignores the embedded configuration and reads
|
|
49
61
|
fresh data from the API.
|
|
@@ -52,5 +64,6 @@ fresh data from the API.
|
|
|
52
64
|
## Related
|
|
53
65
|
|
|
54
66
|
- [Vite plugin](/reference/tools/vite-plugin) — every option.
|
|
67
|
+
- [Type generation](/reference/sdk/type-generation) — the `picked.config.ts` options.
|
|
55
68
|
- [About how Picked works](/explanation/how-picked-works) — where build-time configuration sit
|
|
56
69
|
in the startup order.
|
|
@@ -77,7 +77,7 @@ renders, and they commit the visitor to a bucket at that moment.
|
|
|
77
77
|
The event bus works with any framework, and with none:
|
|
78
78
|
|
|
79
79
|
```ts
|
|
80
|
-
import { createClient } from '
|
|
80
|
+
import { createClient } from 'picked'
|
|
81
81
|
|
|
82
82
|
const client = createClient({
|
|
83
83
|
/* Put your client options here. */
|
|
@@ -17,7 +17,7 @@ the dashboard.
|
|
|
17
17
|
:::code-group
|
|
18
18
|
|
|
19
19
|
```tsx [React]
|
|
20
|
-
import { createClient } from '
|
|
20
|
+
import { createClient } from 'picked'
|
|
21
21
|
import { adaptReactComponent } from '@picked/react'
|
|
22
22
|
import { MyWidget } from './MyWidget'
|
|
23
23
|
|
|
@@ -30,7 +30,7 @@ const picked = createClient({
|
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
```ts [Svelte]
|
|
33
|
-
import { createClient } from '
|
|
33
|
+
import { createClient } from 'picked'
|
|
34
34
|
import { adaptSvelteComponent } from '@picked/svelte'
|
|
35
35
|
import MyWidget from './MyWidget.svelte'
|
|
36
36
|
|
|
@@ -15,7 +15,7 @@ Pass an `actions` object to `createClient()`. Each key must match an action key
|
|
|
15
15
|
dashboard:
|
|
16
16
|
|
|
17
17
|
```ts
|
|
18
|
-
import { createClient } from '
|
|
18
|
+
import { createClient } from 'picked'
|
|
19
19
|
|
|
20
20
|
const picked = createClient({
|
|
21
21
|
projectId: 'your-project-id',
|