@sentientui/react 0.17.3 → 0.18.0
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/devtools.js +1 -1
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs +1 -1
- package/dist/devtools.mjs.map +1 -1
- package/dist/index.d.cts +36 -6
- package/dist/index.d.ts +36 -6
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/next/adaptive-root.js +2 -2
- package/dist/next/adaptive-root.js.map +1 -1
- package/dist/testing/node.js.map +1 -1
- package/dist/testing/node.mjs.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +1 -1
- package/dist/testing.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
var qe=Object.defineProperty,Qe=Object.defineProperties;var Ye=Object.getOwnPropertyDescriptors;var pe=Object.getOwnPropertySymbols;var Ze=Object.prototype.hasOwnProperty,et=Object.prototype.propertyIsEnumerable;var me=(e,t,n)=>t in e?qe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,R=(e,t)=>{for(var n in t||(t={}))Ze.call(t,n)&&me(e,n,t[n]);if(pe)for(var n of pe(t))et.call(t,n)&&me(e,n,t[n]);return e},W=(e,t)=>Qe(e,Ye(t));import{createContext as it,useContext as E,useEffect as j,useMemo as _e,useState as ne,useSyncExternalStore as rt}from"react";import{detectDeviceClass as ot,detectTrafficSource as st,init as at}from"@sentientui/core";var ve=new Map,$=new Map;function ye(e,t){let n=$.get(e);return n||(n=new Set,$.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&$.delete(e)}}function Se(e,t){ve.set(e,t);let n=$.get(e);if(n)for(let o of n)try{o(t)}catch(i){}}function he(e){var t;return(t=ve.get(e))!=null?t:null}var tt={on:!1,listeners:new Set};function be(){if(typeof window=="undefined")return tt;let e=window;return e.__sentient_preview||(e.__sentient_preview={on:!1,listeners:new Set}),e.__sentient_preview}function te(){return be().on}function we(e){let t=be().listeners;return t.add(e),()=>{t.delete(e)}}function Ae(e){return{isLocal:e.isLocal,track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},fetchWeights:()=>Promise.resolve([]),getAssignment:(t,n)=>e.getAssignment(t,n),assign:(t,n,o,i)=>e.assign(t,n,o,i),decide:()=>Promise.resolve(null),getSlotResult:t=>e.getSlotResult(t),getPersona:()=>e.getPersona(),getGraph:()=>e.getGraph(),dispose:()=>e.dispose(),destroy:()=>e.destroy()}}var xe="sentient:overrides-changed";function V(){var e;return typeof window=="undefined"?0:(e=window.__sentient_overrides_version)!=null?e:0}function M(e){return typeof window=="undefined"?()=>{}:(window.addEventListener(xe,e),()=>window.removeEventListener(xe,e))}function ke(e){typeof window!="undefined"&&(window.__sentient_devtools_config=e)}var nt={components:new Map,slots:new Map,sections:[],listeners:new Set,version:0};function P(){if(typeof window=="undefined")return nt;let e=window;return e.__sentient_registry||(e.__sentient_registry={components:new Map,slots:new Map,sections:[],listeners:new Set,version:0}),e.__sentient_registry}function K(){P().version+=1;for(let e of P().listeners)e()}function J(e){return P().components.set(e.id,e),K(),()=>{P().components.delete(e.id),K()}}function H(e){return P().slots.set(e.id,e),K(),()=>{P().slots.delete(e.id),K()}}function Ce(e){P().sections=[...e],K()}import{jsx as ft}from"react/jsx-runtime";function lt(){var e,t;if(typeof window=="undefined")return"desktop:direct";try{let n=ot((e=navigator.userAgent)!=null?e:""),o=st((t=document.referrer)!=null?t:"",window.location.origin);return`${n}:${o}`}catch(n){return"desktop:direct"}}var Re="https://api.sentient-ui.com/v1",G=it({client:null,apiKey:"",initialAssignments:{},sessionSegment:"desktop:direct",ssrFallback:"first",onAssignment:void 0,initialLayoutOrder:null,initialSlots:{},initialPersona:null,apiBaseUrl:Re,debug:!1});function ut(e){var m,h;let[t,n]=ne(null),[o]=ne(()=>{var S;return(S=e.sessionSegment)!=null?S:lt()}),[i,a]=ne(te());j(()=>we(()=>a(te())),[]),j(()=>{if(e.consent===!1&&!e.preConsentBehavior){n(b=>(b==null||b.destroy(),null));return}let S={apiKey:e.apiKey,context:e.context,debug:e.debug,initialAssignments:e.initialAssignments,sessionSegment:o,consent:e.consent,preConsentBehavior:e.preConsentBehavior,respectDoNotTrack:e.respectDoNotTrack,ssrSessionId:e.ssrSessionId,country:e.country,localMode:e.localMode,initialSlots:e.initialSlots,initialPersona:e.initialPersona,ingestUrl:e.apiBaseUrl?`${e.apiBaseUrl.replace(/\/$/,"")}/events`:void 0},g=!1,u=null,p=null,c=b=>{e.engagement!==!1&&import("@sentientui/core/engagement").then(({startEngagementCapture:A})=>{g||(p=A(b,{apiKey:e.apiKey,apiBase:e.apiBaseUrl?e.apiBaseUrl.replace(/\/$/,""):void 0}))})};return e.enableGraph!==!1?import("@sentientui/core/graph").then(({init:b})=>{g||(u=b(W(R({},S),{graph:!0})),n(u),c(u))}):(u=at(S),n(u),c(u)),()=>{g=!0,p==null||p(),u==null||u.dispose()}},[e.consent]),j(()=>{if(!t)return;let S=!1,g=async()=>{if(S)return;let p;try{p=await t.fetchWeights()}catch(c){return}if(!S)for(let c of p){let b={componentId:c.componentId,updatedAt:c.updatedAt,variants:c.variants.map(A=>{var _;return{variantId:A.variantId,pulls:A.pulls,avgReward:(_=A.avgReward)!=null?_:0}})};Se(c.componentId,b)}};g();let u=setInterval(()=>{g()},6e4);return()=>{S=!0,clearInterval(u)}},[t]);let r=(m=e.ssrFallback)!=null?m:"first",s=(h=e.apiBaseUrl)!=null?h:Re;j(()=>{var S;typeof process!="undefined"&&((S=process.env)==null?void 0:S.NODE_ENV)==="production"||ke({apiKey:e.apiKey,apiBaseUrl:s,isLocal:(t==null?void 0:t.isLocal)===!0})},[t,e.apiKey,s]),j(()=>{e.initialLayoutOrder&&e.initialLayoutOrder.length>0&&Ce(e.initialLayoutOrder)},[e.initialLayoutOrder]);let l=_e(()=>t&&i?Ae(t):t,[t,i]),y=_e(()=>{var S,g,u,p,c;return{client:l,apiKey:e.apiKey,initialAssignments:(S=e.initialAssignments)!=null?S:{},sessionSegment:o,ssrFallback:r,onAssignment:e.onAssignment,initialLayoutOrder:(g=e.initialLayoutOrder)!=null?g:null,initialSlots:(u=e.initialSlots)!=null?u:{},initialPersona:(p=e.initialPersona)!=null?p:null,apiBaseUrl:s,debug:(c=e.debug)!=null?c:!1}},[l,e.apiKey,e.initialAssignments,o,r,e.onAssignment,e.initialLayoutOrder,e.initialSlots,e.initialPersona,s,e.debug]);return ft(G.Provider,{value:y,children:e.children})}function k(){return E(G).client}function L(){return E(G).apiKey}function ie(){return E(G).initialAssignments}function z(){return E(G).sessionSegment}function Ge(){return E(G).ssrFallback}function X(){return E(G).onAssignment}function Ee(){return E(G).debug}function ct(){let e=E(G).initialLayoutOrder,t=rt(M,()=>{var n;return typeof window=="undefined"?null:(n=window.__sentient_layout_override)!=null?n:null},()=>null);return t!=null?t:e}function Le(){return E(G).initialSlots}function dt(){return E(G).apiBaseUrl}import{memo as yt,useEffect as D,useMemo as De,useRef as q,useState as St}from"react";import{attachMicroSignalDetectors as ht}from"@sentientui/core";import{useEffect as N,useRef as Oe,useState as Ie,useSyncExternalStore as gt}from"react";function pt(e){var n;if(typeof window=="undefined")return null;let t=(n=window.__sentient_overrides)==null?void 0:n[e];if(t)return t;try{let o=new URLSearchParams(window.location.search);for(let i of o.getAll("sentient_variant")){let a=i.indexOf(":");if(a!==-1&&i.slice(0,a)===e)return i.slice(a+1)}}catch(o){}return null}var mt=5;function Te(e,t){var o,i;let n=null;for(let a of e.variants){if(!t.includes(a.variantId))continue;let r=(o=a.pulls)!=null?o:0,s=r>0?r*a.avgReward/(r+mt):0;(!n||s>n.score)&&(n={variantId:a.variantId,score:s})}return(i=n==null?void 0:n.variantId)!=null?i:null}function U(e,t,n,o){let i=ie(),a=Ge(),r=k(),s=z(),l=X(),y=Ee(),m=Oe(null);gt(M,V,()=>0);let[h,S]=Ie(!1);N(()=>S(!0),[]);let g=h?pt(e):null,u=g&&t.includes(g)?g:null,p=Oe(null);N(()=>{y&&u&&p.current!==u&&(p.current=u,console.info(`[sentient] override active: ${e} -> ${u}`))},[y,u,e]);let c=(()=>{var f,w;if(u)return{variantId:u,content:null,isLoading:!1,settled:!0};if(!r){let x=i[e];return x&&t.includes(x)?{variantId:x,content:null,isLoading:!1,settled:!0}:a==="first"&&t.length>0?{variantId:t[0],content:null,isLoading:!1,settled:!1}:{variantId:null,content:null,isLoading:!0,settled:!1}}let d=r.getAssignment(e,s);if(d&&(t.includes(d.variantId)||d.content))return{variantId:d.variantId,content:(f=d.content)!=null?f:null,isLoading:!1,settled:!0};let v=he(e);if(v){let x=Te(v,t);if(x)return{variantId:x,content:null,isLoading:!1,settled:!0}}return{variantId:(w=t[0])!=null?w:null,content:null,isLoading:!1,settled:!1}})(),[b,A]=Ie(c),_=d=>{l&&m.current!==d&&(m.current=d,l(e,d))};return N(()=>{var v;if(u||!r)return;let d=r.getAssignment(e,s);if(d&&(t.includes(d.variantId)||d.content)){A({variantId:d.variantId,content:(v=d.content)!=null?v:null,isLoading:!1,settled:!0}),_(d.variantId);return}A(f=>{var w;return f.variantId?f:{variantId:(w=t[0])!=null?w:null,content:null,isLoading:!1,settled:!1}})},[u,r,e,s]),N(()=>{if(u||!r)return;let d=r.getAssignment(e,s);if(d&&t.includes(d.variantId))return;let v=!1;return r.assign(e,t,n,o).then(f=>{var w;v||f&&(!t.includes(f.variantId)&&!f.content||(A({variantId:f.variantId,content:(w=f.content)!=null?w:null,isLoading:!1,settled:!0}),_(f.variantId)))}),()=>{v=!0}},[u,r,e,s]),N(()=>{if(!u&&r)return ye(e,d=>{var w;let v=r.getAssignment(e,s);if(v&&(t.includes(v.variantId)||v.content)){A({variantId:v.variantId,content:(w=v.content)!=null?w:null,isLoading:!1,settled:!0});return}let f=Te(d,t);f&&A({variantId:f,content:null,isLoading:!1,settled:!0})})},[u,r,e,s]),u?{variantId:u,content:null,isLoading:!1,settled:!0,isOverride:!0}:b}function C(){var e;return typeof process=="undefined"||((e=process.env)==null?void 0:e.NODE_ENV)!=="production"}function O(e){return typeof e=="string"?{type:"click"}:e}function B(e){return typeof e=="string"?e:e.type}function vt(e){if(!(e instanceof Element))return!1;let t=e.tagName.toLowerCase();return t==="a"||t==="button"?!0:e.getAttribute("role")==="button"}function Pe(e,t,n){if(n){try{let i=e;for(;i&&i!==t;){if(i.matches(n))return!0;i=i.parentElement}}catch(i){}return!1}let o=e;for(;o&&o!==t;){if(vt(o))return!0;o=o.parentElement}return!1}function I(e,t,n){if(t.type==="weighted_composite"){let s=new Set,l=[];return t.steps.forEach(({goal:y,name:m,weight:h},S)=>{let g=()=>{s.has(S)||(s.add(S),n.fireStep(m,h,S))};if(y.type==="click"){let u=p=>{let c=p.target;c instanceof Element&&Pe(c,e,y.selector)&&g()};e.addEventListener("click",u),l.push(()=>e.removeEventListener("click",u));return}if(y.type==="form_submit"){let u=p=>{p.target instanceof HTMLFormElement&&e.contains(p.target)&&g()};e.addEventListener("submit",u),l.push(()=>e.removeEventListener("submit",u));return}if(y.type==="scroll_depth"){let u=Math.max(0,Math.min(1,y.threshold)),p=new IntersectionObserver(c=>{for(let b of c)if(b.intersectionRatio>=u){g(),p.disconnect();break}},{threshold:[u]});p.observe(e),l.push(()=>p.disconnect())}}),()=>{for(let y of l)y()}}let o=t.type==="composite"?t.all:[t],i=new Set(o.map((s,l)=>l)),a=s=>{i.delete(s),i.size===0&&n.fireGoal()},r=[];return o.forEach((s,l)=>{if(s.type==="click"){let y=m=>{let h=m.target;h instanceof Element&&Pe(h,e,s.selector)&&(t.type==="composite"?a(l):n.fireGoal())};e.addEventListener("click",y),r.push(()=>e.removeEventListener("click",y));return}if(s.type==="form_submit"){let y=m=>{m.target instanceof HTMLFormElement&&e.contains(m.target)&&(t.type==="composite"?a(l):n.fireGoal())};e.addEventListener("submit",y),r.push(()=>e.removeEventListener("submit",y));return}if(s.type==="scroll_depth"){let y=Math.max(0,Math.min(1,s.threshold)),m=new IntersectionObserver(h=>{for(let S of h)if(S.intersectionRatio>=y){t.type==="composite"?a(l):n.fireGoal(),m.disconnect();break}},{threshold:[y]});m.observe(e),r.push(()=>m.disconnect());return}}),()=>{for(let s of r)s()}}function T(e,t,n,o){e.track({projectId:t,componentId:n,variantId:o,eventType:"variant_assigned",payload:{}})}import{jsx as At}from"react/jsx-runtime";function bt(e){var _;let t=k(),n=L(),o=De(()=>Object.keys(e.variants),[e.variants]),{variantId:i,content:a,isOverride:r,settled:s}=U(e.id,o,e.agentData,e.agentDataByVariant),l=q(null),[y,m]=St(!1);D(()=>{m(!0)},[]);let h=q(!1),S=q(new Set),g=q(null),u=typeof e.goal=="string"?e.goal:JSON.stringify(e.goal),p=De(()=>O(e.goal),[u]),c=typeof e.goal=="string"?e.goal:p.type;if(D(()=>J({id:e.id,variantIds:o,goal:c}),[e.id,o,c]),D(()=>{r||s&&(!t||!i||!n||g.current!==i&&(g.current=i,T(t,n,e.id,i)))},[t,i,n,e.id,r,s]),D(()=>{h.current=!1,S.current=new Set},[i,p]),D(()=>{if(r||!t||!i)return;let d=l.current;if(!d)return;let v=null,f=0,w=()=>{f=Date.now(),v=setTimeout(()=>{t.track({projectId:n,componentId:e.id,variantId:i,eventType:"cursor_signal",payload:{hoverDuration:Date.now()-f}}),v=null},800)},x=()=>{v!==null&&(clearTimeout(v),v=null)};return d.addEventListener("mouseenter",w),d.addEventListener("mouseleave",x),()=>{d.removeEventListener("mouseenter",w),d.removeEventListener("mouseleave",x),v!==null&&clearTimeout(v)}},[t,i,n,e.id,r]),D(()=>{if(r||!t||!i)return;let d=l.current;if(!d)return;let v=Date.now();return ht((f,w={})=>{var de,fe,ge;t.track({projectId:n,componentId:e.id,variantId:i,eventType:"micro_signal",payload:R({signalType:f},w)});let x=(de=e.microSignalGoals)==null?void 0:de[f];if(!x||S.current.has(f))return;S.current.add(f);let He=typeof x=="string"?x:x.name,ze=typeof x=="string"?1:(fe=x.weight)!=null?fe:1,Xe=typeof x=="string"?0:(ge=x.stepIndex)!=null?ge:0;t.goal(He,R({signalType:f},w),ze,Xe)},d,v)},[t,i,n,e.id,e.microSignalGoals,r]),D(()=>{if(r||!t||!i)return;let d=l.current;if(d)return I(d,p,{fireGoal:()=>{h.current||(h.current=!0,t.track({projectId:n,componentId:e.id,variantId:i,eventType:"goal_achieved",goalType:c,payload:{reward:1}}),t.goal(c,{componentId:e.id,variantId:i},1,0))},fireStep:(v,f,w)=>{t.track({projectId:n,componentId:e.id,variantId:i,eventType:"goal_achieved",goalType:v,payload:{reward:f}}),t.goal(v,{},f,w)}})},[t,i,n,e.id,p,c,r]),e.clientOnly&&(!y||!t)||!i)return null;let b=(_=e.variants[i])!=null?_:null,A=b===null?a:null;return C()&&b===null&&A===null&&console.warn(`[sentient] <Adaptive id="${e.id}"> was assigned variant "${i}" but no matching key exists in props.variants. If this is a dashboard-managed text variant, use <AdaptiveText id="${e.id}"> instead.`),At("div",{ref:l,"data-sentient-id":e.id,"data-sentient-variant":i,children:b!=null?b:A})}var wt=yt(bt,(e,t)=>{if(e.id!==t.id||e.goal!==t.goal&&JSON.stringify(e.goal)!==JSON.stringify(t.goal)||e.microSignalGoals!==t.microSignalGoals||e.clientOnly!==t.clientOnly||e.agentData!==t.agentData||e.agentDataByVariant!==t.agentDataByVariant)return!1;if(e.variants===t.variants)return!0;let n=Object.keys(e.variants),o=Object.keys(t.variants);return n.length!==o.length?!1:n.every(i=>i in t.variants&&Object.is(e.variants[i],t.variants[i]))});import{useEffect as Q,useMemo as xt,useRef as re,useState as Me}from"react";import{jsx as Ct}from"react/jsx-runtime";function kt({id:e,default:t,component:n="span",className:o,goal:i}){let a=k(),r=L(),s=X(),l=z(),y=re(null),m=re(null),[h,S]=Me(()=>{var d,v;return(v=(d=a==null?void 0:a.getAssignment(e,l))==null?void 0:d.content)!=null?v:null}),[g,u]=Me(()=>{var d,v;return(v=(d=a==null?void 0:a.getAssignment(e,l))==null?void 0:d.variantId)!=null?v:null});Q(()=>{var v;if(!a||((v=a.getAssignment(e,l))==null?void 0:v.content)!==void 0)return;let d=!1;return a.assign(e).then(f=>{if(!d){if(!f){C()&&console.warn(`[sentient] <AdaptiveText id="${e}"> assignment failed \u2014 showing default text.`);return}u(f.variantId),f.content&&S(f.content)}}),()=>{d=!0}},[a,e,l]),Q(()=>{!a||!g||!r||y.current!==g&&(y.current=g,a.track({projectId:r,componentId:e,variantId:g,eventType:"variant_assigned",payload:{}}),s==null||s(e,g))},[a,g,r,e,s]);let p=i===void 0?"":typeof i=="string"?i:JSON.stringify(i),c=xt(()=>i===void 0?null:O(i),[p]),b=i===void 0?null:typeof i=="string"?i:c.type,A=re(!1);return Q(()=>{A.current=!1},[g,p]),Q(()=>{if(!a||!g||!r||!c||!b)return;let d=m.current;if(d)return I(d,c,{fireGoal:()=>{A.current||(A.current=!0,a.track({projectId:r,componentId:e,variantId:g,eventType:"goal_achieved",goalType:b,payload:{reward:1}}),a.goal(b,{componentId:e,variantId:g},1,0))},fireStep:(v,f,w)=>{a.track({projectId:r,componentId:e,variantId:g,eventType:"goal_achieved",goalType:v,payload:{reward:f}}),a.goal(v,{},f,w)}})},[a,g,r,e,c,b]),Ct(n,{ref:d=>{m.current=d},className:o,children:h!=null?h:t})}import{useCallback as _t}from"react";function Rt(e){let t=k();return _t((n,o)=>{t==null||t.componentGoal(e,n,o)},[t,e])}import{renderPrePaintScript as Gt}from"@sentientui/core";import{confidenceBand as Et}from"@sentientui/policy";import{jsx as It}from"react/jsx-runtime";function Be(e){return JSON.stringify(e).replace(/</g,"\\u003c")}function Lt(e){return e.persona?'(function(){try{var d=document.documentElement;if(d.hasAttribute("data-sentient-persona"))return;d.setAttribute("data-sentient-persona",'+Be(e.persona.persona)+');d.setAttribute("data-sentient-confidence",'+Be(Et(e.persona.confidence))+");}catch(e){}})();":Gt(e.apiKey)}function Ot(e){return It("script",{"data-sentient-persona-script":"",dangerouslySetInnerHTML:{__html:Lt(e)}})}import{useEffect as oe,useMemo as se,useRef as Mt}from"react";import{validateSlotDecl as Bt}from"@sentientui/policy";import{useEffect as Fe,useReducer as Tt,useSyncExternalStore as Pt}from"react";import{armOfResult as Y,baselineResultFor as Dt}from"@sentientui/core";import{confidenceBand as Hn}from"@sentientui/policy";var We=new Set;function Z(e,t){var m;Pt(M,V,()=>0);let n=k(),o=Le(),[,i]=Tt(h=>h+1,0),a=typeof window!="undefined"?(m=window.__sentient_slot_overrides)==null?void 0:m[e]:void 0,r=a===void 0?o[e]:void 0,s=a===void 0&&r===void 0&&n?n.getSlotResult(e):null,l=(n==null?void 0:n.isLocal)===!0&&a===void 0&&r===void 0&&s===null;Fe(()=>{if(!l||!n)return;let h=!1;return n.decide({slots:[t]}).then(S=>{!h&&S&&i()}),()=>{h=!0}},[n,e,l]);let y=(()=>{if(a!==void 0)return{result:a,arm:Y(a),source:"override"};if(r!==void 0)return{result:r,arm:Y(r),source:"preloaded"};if(s!==null)return{result:s,arm:Y(s),source:"client"};let h=Dt(t);return{result:h,arm:Y(h),source:"baseline"}})();return Fe(()=>{C()&&(!n||n.isLocal===!0||y.source==="baseline"&&(We.has(e)||(We.add(e),console.warn(`[sentient] slot "${e}" resolved to its baseline \u2014 no SSR-preloaded or decided result. Keyed clients decide slots server-side, so this slot serves baseline for the whole session and records no exposure. Preload it via loadAdaptiveDecision()/initialSlots so it can serve a decided arm and learn.`))))},[n,y.source,e]),y}var ae=new Set;function Ft(e){return typeof CSS!="undefined"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/"/g,'\\"')}function Wt(e,t,n){let o=k(),i=L(),a=se(()=>({id:e,dims:t}),[e]),{result:r,arm:s,source:l}=Z(e,a),y=se(()=>typeof r=="string"?{}:r,[s]);if(C()&&!ae.has(e)){let g=Bt({id:e,dims:Object.fromEntries(Object.entries(t).map(([p,c])=>[p,[...c]]))}),u=Object.values(t).reduce((p,c)=>p*c.length,1);g.ok?u>4&&(ae.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}") declares ${u} combinations \u2014 more than the recommended 4. Each extra combination needs more traffic to learn; consider fewer dims/values.`)):(ae.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}"): invalid declaration \u2014 ${g.reason}. Serving baseline.`))}let m=(n==null?void 0:n.goal)===void 0?null:typeof n.goal=="string"?n.goal:JSON.stringify(n.goal);oe(()=>H({id:e,dims:t}),[e]);let h=Mt(null);oe(()=>{!o||l==="baseline"||h.current===s||(h.current=s,T(o,i,e,s))},[o,i,e,s,l]),oe(()=>{if(!o||!(n!=null&&n.goal))return;let g=document.querySelector(`[data-sentient-slot="${Ft(e)}"]`);if(!g){C()&&console.warn(`[sentient] useAdaptiveTokens("${e}"): a goal is declared but no element carries the returned props \u2014 spread {...props} on the slot's element.`);return}let u=B(n.goal),p=!1;return I(g,O(n.goal),{fireGoal:()=>{p||(p=!0,o.componentGoal(e,u))},fireStep:(c,b)=>{o.componentGoal(e,c,{reward:b})}})},[o,e,m,s]);let S=se(()=>{let g={"data-sentient-slot":e};for(let[u,p]of Object.entries(y))g[`data-${u}`]=p;return g},[e,y]);return{tokens:y,props:S}}import{useCallback as Ke,useEffect as F,useMemo as le,useRef as ue,useState as Kt}from"react";import{attachMicroSignalDetectors as jt}from"@sentientui/core";var je=new Set;function Nt(e,t){var v;if(C()&&!t.goal)throw new Error(`[sentient] useAdaptive("${e}"): a goal is required \u2014 without one the optimizer accumulates exposures with no rewards and cannot learn. Pass e.g. goal: 'buy_click'.`);let n=k(),o=L(),i=le(()=>Object.keys(t.variants),[e]),{variantId:a,isOverride:r,settled:s}=U(e,i),l=(v=a!=null?a:i[0])!=null?v:"",y=t.variants[l],[m,h]=Kt(null),S=ue(null),g=Ke(f=>{S.current=f,h(f)},[]),u=typeof t.goal=="string"?t.goal:JSON.stringify(t.goal),p=le(()=>O(t.goal),[u]),c=B(t.goal);F(()=>J({id:e,variantIds:i,goal:c}),[e,i,c]);let b=ue(null);F(()=>{r||s&&(!n||!l||!m||b.current!==l&&(b.current=l,T(n,o,e,l)))},[n,o,e,l,m,r,s]);let A=ue(!1);F(()=>{A.current=!1},[l,u]),F(()=>{if(!r&&!(!n||!l||!m))return I(m,p,{fireGoal:()=>{A.current||(A.current=!0,n.track({projectId:o,componentId:e,variantId:l,eventType:"goal_achieved",goalType:c,payload:{reward:1}}),n.goal(c,{componentId:e,variantId:l},1,0))},fireStep:(f,w,x)=>{n.track({projectId:o,componentId:e,variantId:l,eventType:"goal_achieved",goalType:f,payload:{reward:w}}),n.goal(f,{},w,x)}})},[n,m,l,o,e,p,c,r]),F(()=>{if(r||!n||!l||!m)return;let f=Date.now();return jt((w,x={})=>{n.track({projectId:o,componentId:e,variantId:l,eventType:"micro_signal",payload:R({signalType:w},x)})},m,f)},[n,m,l,o,e,r]),F(()=>{if(!C()||!n)return;let f=setTimeout(()=>{!S.current&&!je.has(e)&&(je.add(e),console.warn(`[sentient] useAdaptive("${e}"): bind was never attached \u2014 spread {...bind} on the rendered element, otherwise exposure and goal tracking cannot work and the optimizer learns nothing.`))},0);return()=>clearTimeout(f)},[n,e]);let _=Ke((f,w)=>{r||n==null||n.componentGoal(e,f!=null?f:c,w)},[n,e,c,r]),d=le(()=>({ref:g,"data-sentient-id":e,"data-sentient-variant":l}),[g,e,l]);return{variant:l,value:y,bind:d,fireGoal:_}}import{Children as Ut,isValidElement as $t,useEffect as ce,useMemo as Ne,useRef as Ue}from"react";import{jsx as Jt}from"react/jsx-runtime";var ee=new Set;function Vt(e){var p;let t=k(),n=L(),o=Ue(null),i=Ne(()=>Object.keys(e.arrangements),[e.id]),a=Ne(()=>R({id:e.id,arms:i},e.baseline!==void 0?{baseline:e.baseline}:{}),[e.id,i,e.baseline]),{arm:r,source:s}=Z(e.id,a);C()&&e.baseline!==void 0&&e.baseline!==i[0]&&!ee.has(e.id+":baseline")&&(ee.add(e.id+":baseline"),console.warn(`[sentient] <AdaptiveGroup id="${e.id}">: baseline "${e.baseline}" is not the first-declared arrangement ("${i[0]}"). The first arrangement should usually be the page's real incumbent (the holdout sees it).`));let l=Ut.toArray(e.children).filter($t),y=new Map;for(let c of l)y.set(String((p=c.key)!=null?p:"").replace(/^\.\$/,""),c);let m=e.arrangements[r],h=m!==void 0&&m.length===l.length&&m.every(c=>y.has(c));C()&&m!==void 0&&!h&&!ee.has(e.id+":keys")&&(ee.add(e.id+":keys"),console.warn(`[sentient] <AdaptiveGroup id="${e.id}">: arrangement "${r}" [${m.join(", ")}] does not match the children's keys \u2014 rendering declaration order (fail-safe).`));let S=h?m.map(c=>y.get(c)):l;ce(()=>H({id:e.id,arms:Object.keys(e.arrangements)}),[e.id]);let g=Ue(null);ce(()=>{!t||s==="baseline"||g.current===r||(g.current=r,T(t,n,e.id,r))},[t,n,e.id,r,s]);let u=e.goal===void 0?null:typeof e.goal=="string"?e.goal:JSON.stringify(e.goal);return ce(()=>{if(!t||e.goal===void 0)return;let c=o.current;if(!c)return;let b=B(e.goal),A=!1;return I(c,O(e.goal),{fireGoal:()=>{A||(A=!0,t.componentGoal(e.id,b))},fireStep:(_,d)=>{t.componentGoal(e.id,_,{reward:d})}})},[t,e.id,u,r]),Jt("div",{ref:o,"data-sentient-id":e.id,"data-sentient-variant":r,children:S})}import{deriveSessionSegment as Ht}from"@sentientui/core";var zt=["page","blocks","layoutOrder"],$e=new Map;function Xt(e,t){$e.set(e,t)}function Ve(e){return $e.get(e)}function qt(e){var i,a;let t=(a=(i=e.content)!=null?i:Ve(e.page))!=null?a:{},n={};for(let[r,s]of Object.entries(t))zt.includes(r)||(n[r]=s);let o=W(R({},n),{page:e.page,blocks:e.blocks});return e.layoutOrder&&(o.layoutOrder=e.layoutOrder),o}function Qt(e){return`<script type="application/ld+json">${Je(e)}</script>`}function Je(e){return JSON.stringify(R({"@context":"https://schema.org","@type":"WebPage"},e)).replace(/</g,"\\u003c")}function Yt(e){let t=[];e.title&&t.push(`# ${e.title}`,""),e.summary&&t.push(String(e.summary),"");for(let[n,o]of Object.entries(e))["page","title","summary","blocks","layoutOrder"].includes(n)||t.push(`## ${n}`,"","```json",JSON.stringify(o,null,2),"```","");if(e.blocks.length>0){t.push("## blocks","");for(let n of e.blocks)t.push(`- **${n.id}** \u2192 variant \`${n.variant}\``),n.content!==void 0&&t.push(""," ```json",JSON.stringify(n.content,null,2)," ```");t.push("")}return t.join(`
|
|
2
|
+
var Ze=Object.defineProperty,et=Object.defineProperties;var tt=Object.getOwnPropertyDescriptors;var Se=Object.getOwnPropertySymbols;var nt=Object.prototype.hasOwnProperty,rt=Object.prototype.propertyIsEnumerable;var he=(e,t,n)=>t in e?Ze(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,G=(e,t)=>{for(var n in t||(t={}))nt.call(t,n)&&he(e,n,t[n]);if(Se)for(var n of Se(t))rt.call(t,n)&&he(e,n,t[n]);return e},$=(e,t)=>et(e,tt(t));import{createContext as at,useContext as E,useEffect as N,useMemo as Ie,useState as oe,useSyncExternalStore as lt}from"react";import{detectDeviceClass as ut,detectTrafficSource as ct,init as dt}from"@sentientui/core";var be=new Map,V=new Map;function we(e,t){let n=V.get(e);return n||(n=new Set,V.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&V.delete(e)}}function Ae(e,t){be.set(e,t);let n=V.get(e);if(n)for(let o of n)try{o(t)}catch(r){}}function xe(e){var t;return(t=be.get(e))!=null?t:null}var it={on:!1,listeners:new Set};function Ce(){if(typeof window=="undefined")return it;let e=window;return e.__sentient_preview||(e.__sentient_preview={on:!1,listeners:new Set}),e.__sentient_preview}function re(){return Ce().on}function ke(e){let t=Ce().listeners;return t.add(e),()=>{t.delete(e)}}function _e(e){return{isLocal:e.isLocal,track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},fetchWeights:()=>Promise.resolve([]),getAssignment:(t,n)=>e.getAssignment(t,n),assign:(t,n,o,r)=>e.assign(t,n,o,r),decide:()=>Promise.resolve(null),getSlotResult:t=>e.getSlotResult(t),getPersona:()=>e.getPersona(),getGraph:()=>e.getGraph(),dispose:()=>e.dispose(),destroy:()=>e.destroy()}}var Re="sentient:overrides-changed";function ie(){var e;return typeof window=="undefined"?0:(e=window.__sentient_overrides_version)!=null?e:0}function T(e){return typeof window=="undefined"?()=>{}:(window.addEventListener(Re,e),()=>window.removeEventListener(Re,e))}function Ge(e){typeof window!="undefined"&&(window.__sentient_devtools_config=e)}function k(){var e;return typeof process=="undefined"||((e=process.env)==null?void 0:e.NODE_ENV)!=="production"}function L(e){return typeof e=="string"?{type:"click"}:e}function W(e){return typeof e=="string"?e:e.type}function ot(e){if(!(e instanceof Element))return!1;let t=e.tagName.toLowerCase();return t==="a"||t==="button"?!0:e.getAttribute("role")==="button"}function Oe(e,t,n){if(n){try{let r=e;for(;r&&r!==t;){if(r.matches(n))return!0;r=r.parentElement}}catch(r){}return!1}let o=e;for(;o&&o!==t;){if(ot(o))return!0;o=o.parentElement}return!1}function I(e,t,n){if(t.type==="weighted_composite"){let s=new Set,l=[];return t.steps.forEach(({goal:v,name:p,weight:m},u)=>{let h=()=>{s.has(u)||(s.add(u),n.fireStep(p,m,u))};if(v.type==="click"){let c=g=>{let d=g.target;d instanceof Element&&Oe(d,e,v.selector)&&h()};e.addEventListener("click",c),l.push(()=>e.removeEventListener("click",c));return}if(v.type==="form_submit"){let c=g=>{g.target instanceof HTMLFormElement&&e.contains(g.target)&&h()};e.addEventListener("submit",c),l.push(()=>e.removeEventListener("submit",c));return}if(v.type==="scroll_depth"){let c=Math.max(0,Math.min(1,v.threshold)),g=new IntersectionObserver(d=>{for(let f of d)if(f.intersectionRatio>=c){h(),g.disconnect();break}},{threshold:[c]});g.observe(e),l.push(()=>g.disconnect())}}),()=>{for(let v of l)v()}}let o=t.type==="composite"?t.all:[t],r=new Set(o.map((s,l)=>l)),a=s=>{r.delete(s),r.size===0&&n.fireGoal()},i=[];return o.forEach((s,l)=>{if(s.type==="click"){let v=p=>{let m=p.target;m instanceof Element&&Oe(m,e,s.selector)&&(t.type==="composite"?a(l):n.fireGoal())};e.addEventListener("click",v),i.push(()=>e.removeEventListener("click",v));return}if(s.type==="form_submit"){let v=p=>{p.target instanceof HTMLFormElement&&e.contains(p.target)&&(t.type==="composite"?a(l):n.fireGoal())};e.addEventListener("submit",v),i.push(()=>e.removeEventListener("submit",v));return}if(s.type==="scroll_depth"){let v=Math.max(0,Math.min(1,s.threshold)),p=new IntersectionObserver(m=>{for(let u of m)if(u.intersectionRatio>=v){t.type==="composite"?a(l):n.fireGoal(),p.disconnect();break}},{threshold:[v]});p.observe(e),i.push(()=>p.disconnect());return}}),()=>{for(let s of i)s()}}function D(e,t,n,o){e.track({projectId:t,componentId:n,variantId:o,eventType:"variant_assigned",payload:{}})}var st={components:new Map,slots:new Map,sections:[],listeners:new Set,version:0};function M(){if(typeof window=="undefined")return st;let e=window;return e.__sentient_registry||(e.__sentient_registry={components:new Map,slots:new Map,sections:[],listeners:new Set,version:0}),e.__sentient_registry}function j(){M().version+=1;for(let e of M().listeners)e()}var Ee=()=>{};function J(e){return k()?(M().components.set(e.id,e),j(),()=>{M().components.delete(e.id),j()}):Ee}function H(e){return k()?(M().slots.set(e.id,e),j(),()=>{M().slots.delete(e.id),j()}):Ee}function Le(e){k()&&(M().sections=[...e],j())}import{jsx as vt}from"react/jsx-runtime";function ft(){var e,t;if(typeof window=="undefined")return"desktop:direct";try{let n=ut((e=navigator.userAgent)!=null?e:""),o=ct((t=document.referrer)!=null?t:"",window.location.origin);return`${n}:${o}`}catch(n){return"desktop:direct"}}var Pe="https://api.sentient-ui.com/v1",O=at({client:null,apiKey:"",initialAssignments:{},sessionSegment:"desktop:direct",ssrFallback:"first",onAssignment:void 0,initialLayoutOrder:null,initialSlots:{},initialPersona:null,apiBaseUrl:Pe,debug:!1});function gt(e){var p,m;let[t,n]=oe(null),[o]=oe(()=>{var u;return(u=e.sessionSegment)!=null?u:ft()}),[r,a]=oe(re());N(()=>ke(()=>a(re())),[]),N(()=>{if(e.consent===!1&&!e.preConsentBehavior){n(f=>(f==null||f.destroy(),null));return}let u={apiKey:e.apiKey,context:e.context,debug:e.debug,initialAssignments:e.initialAssignments,sessionSegment:o,consent:e.consent,preConsentBehavior:e.preConsentBehavior,respectDoNotTrack:e.respectDoNotTrack,ssrSessionId:e.ssrSessionId,country:e.country,localMode:e.localMode,initialSlots:e.initialSlots,initialPersona:e.initialPersona,ingestUrl:e.apiBaseUrl?`${e.apiBaseUrl.replace(/\/$/,"")}/events`:void 0},h=!1,c=null,g=null,d=f=>{e.engagement!==!1&&import("@sentientui/core/engagement").then(({startEngagementCapture:S})=>{h||(g=S(f,{apiKey:e.apiKey,apiBase:e.apiBaseUrl?e.apiBaseUrl.replace(/\/$/,""):void 0}))})};return e.enableGraph!==!1?import("@sentientui/core/graph").then(({init:f})=>{h||(c=f($(G({},u),{graph:!0})),n(c),d(c))}):(c=dt(u),n(c),d(c)),()=>{h=!0,g==null||g(),c==null||c.dispose()}},[e.consent]),N(()=>{if(!t)return;let u=!1,h=async()=>{if(u)return;let g;try{g=await t.fetchWeights()}catch(d){return}if(!u)for(let d of g){let f={componentId:d.componentId,updatedAt:d.updatedAt,variants:d.variants.map(S=>{var w;return{variantId:S.variantId,pulls:S.pulls,avgReward:(w=S.avgReward)!=null?w:0}})};Ae(d.componentId,f)}};h();let c=setInterval(()=>{h()},6e4);return()=>{u=!0,clearInterval(c)}},[t]);let i=(p=e.ssrFallback)!=null?p:"first",s=((m=e.apiBaseUrl)!=null?m:Pe).replace(/\/$/,"");N(()=>{var u;typeof process!="undefined"&&((u=process.env)==null?void 0:u.NODE_ENV)==="production"||Ge({apiKey:e.apiKey,apiBaseUrl:s,isLocal:(t==null?void 0:t.isLocal)===!0})},[t,e.apiKey,s]),N(()=>{e.initialLayoutOrder&&e.initialLayoutOrder.length>0&&Le(e.initialLayoutOrder)},[e.initialLayoutOrder]);let l=Ie(()=>t&&r?_e(t):t,[t,r]),v=Ie(()=>{var u,h,c,g,d;return{client:l,apiKey:e.apiKey,initialAssignments:(u=e.initialAssignments)!=null?u:{},sessionSegment:o,ssrFallback:i,onAssignment:e.onAssignment,initialLayoutOrder:(h=e.initialLayoutOrder)!=null?h:null,initialSlots:(c=e.initialSlots)!=null?c:{},initialPersona:(g=e.initialPersona)!=null?g:null,apiBaseUrl:s,debug:(d=e.debug)!=null?d:!1}},[l,e.apiKey,e.initialAssignments,o,i,e.onAssignment,e.initialLayoutOrder,e.initialSlots,e.initialPersona,s,e.debug]);return vt(O.Provider,{value:v,children:e.children})}function _(){return E(O).client}function P(){return E(O).apiKey}function se(){return E(O).initialAssignments}function z(){return E(O).sessionSegment}function Te(){return E(O).ssrFallback}function X(){return E(O).onAssignment}function De(){return E(O).debug}function pt(){let e=E(O).initialLayoutOrder,t=lt(T,()=>{var n;return typeof window=="undefined"?null:(n=window.__sentient_layout_override)!=null?n:null},()=>null);return t!=null?t:e}function Me(){return E(O).initialSlots}function Be(){return E(O).initialPersona}function mt(){return E(O).apiBaseUrl}import{memo as bt,useEffect as B,useMemo as Ke,useRef as Y,useState as wt}from"react";import{attachMicroSignalDetectors as At}from"@sentientui/core";import{useEffect as Q,useRef as Fe,useState as yt,useSyncExternalStore as St}from"react";function q(e){var n;if(typeof window=="undefined")return null;let t=(n=window.__sentient_overrides)==null?void 0:n[e];if(t)return t;if(!window.location.search)return null;try{let o=new URLSearchParams(window.location.search);for(let r of o.getAll("sentient_variant")){let a=r.indexOf(":");if(a!==-1&&r.slice(0,a)===e)return r.slice(a+1)}}catch(o){}return null}var ht=5;function We(e,t){var o,r;let n=null;for(let a of e.variants){if(!t.includes(a.variantId))continue;let i=(o=a.pulls)!=null?o:0,s=i>0?i*a.avgReward/(i+ht):0;(!n||s>n.score)&&(n={variantId:a.variantId,score:s})}return(r=n==null?void 0:n.variantId)!=null?r:null}function U(e,t,n,o){let r=se(),a=Te(),i=_(),s=z(),l=X(),v=De(),p=Fe(null),m=St(T,()=>q(e),()=>null),u=m&&t.includes(m)?m:null,h=Fe(null);Q(()=>{v&&u&&h.current!==u&&(h.current=u,console.info(`[sentient] override active: ${e} -> ${u}`))},[v,u,e]);let[c,g]=yt(()=>{var w,b;if(u)return{variantId:u,content:null,isLoading:!1,settled:!0};if(!i){let C=r[e];return C&&t.includes(C)?{variantId:C,content:null,isLoading:!1,settled:!0}:a==="first"&&t.length>0?{variantId:t[0],content:null,isLoading:!1,settled:!1}:{variantId:null,content:null,isLoading:!0,settled:!1}}let f=i.getAssignment(e,s);if(f&&(t.includes(f.variantId)||f.content))return{variantId:f.variantId,content:(w=f.content)!=null?w:null,isLoading:!1,settled:!0};let S=xe(e);if(S){let C=We(S,t);if(C)return{variantId:C,content:null,isLoading:!1,settled:!0}}return{variantId:(b=t[0])!=null?b:null,content:null,isLoading:!1,settled:!1}}),d=f=>{l&&p.current!==f&&(p.current=f,l(e,f))};return Q(()=>{var S;if(u||!i)return;let f=i.getAssignment(e,s);if(f&&(t.includes(f.variantId)||f.content)){g({variantId:f.variantId,content:(S=f.content)!=null?S:null,isLoading:!1,settled:!0}),d(f.variantId);return}g(w=>{var b;return w.variantId?w:{variantId:(b=t[0])!=null?b:null,content:null,isLoading:!1,settled:!1}})},[u,i,e,s]),Q(()=>{if(u||!i)return;let f=i.getAssignment(e,s);if(f&&t.includes(f.variantId))return;let S=!1;return i.assign(e,t,n,o).then(w=>{var b;S||w&&(!t.includes(w.variantId)&&!w.content||(g({variantId:w.variantId,content:(b=w.content)!=null?b:null,isLoading:!1,settled:!0}),d(w.variantId)))}),()=>{S=!0}},[u,i,e,s]),Q(()=>{if(!u&&i)return we(e,f=>{var b;let S=i.getAssignment(e,s);if(S&&(t.includes(S.variantId)||S.content)){g({variantId:S.variantId,content:(b=S.content)!=null?b:null,isLoading:!1,settled:!0});return}let w=We(f,t);w&&g({variantId:w,content:null,isLoading:!1,settled:!0})})},[u,i,e,s]),u?{variantId:u,content:null,isLoading:!1,settled:!0,isOverride:!0}:c}import{jsx as kt}from"react/jsx-runtime";function xt(e){var w;let t=_(),n=P(),o=Ke(()=>Object.keys(e.variants),[e.variants]),{variantId:r,content:a,isOverride:i,settled:s}=U(e.id,o,e.agentData,e.agentDataByVariant),l=Y(null),[v,p]=wt(!1);B(()=>{p(!0)},[]);let m=Y(!1),u=Y(new Set),h=Y(null),c=typeof e.goal=="string"?e.goal:JSON.stringify(e.goal),g=Ke(()=>L(e.goal),[c]),d=typeof e.goal=="string"?e.goal:g.type;if(B(()=>J({id:e.id,variantIds:o,goal:d}),[e.id,o,d]),B(()=>{i||s&&(!t||!r||!n||h.current!==r&&(h.current=r,D(t,n,e.id,r)))},[t,r,n,e.id,i,s]),B(()=>{m.current=!1,u.current=new Set},[r,g]),B(()=>{if(i||!t||!r)return;let b=l.current;if(!b)return;let C=null,x=0,y=()=>{x=Date.now(),C=setTimeout(()=>{t.track({projectId:n,componentId:e.id,variantId:r,eventType:"cursor_signal",payload:{hoverDuration:Date.now()-x}}),C=null},800)},A=()=>{C!==null&&(clearTimeout(C),C=null)};return b.addEventListener("mouseenter",y),b.addEventListener("mouseleave",A),()=>{b.removeEventListener("mouseenter",y),b.removeEventListener("mouseleave",A),C!==null&&clearTimeout(C)}},[t,r,n,e.id,i]),B(()=>{if(i||!t||!r)return;let b=l.current;if(!b)return;let C=Date.now();return At((x,y={})=>{var me,ve,ye;t.track({projectId:n,componentId:e.id,variantId:r,eventType:"micro_signal",payload:G({signalType:x},y)});let A=(me=e.microSignalGoals)==null?void 0:me[x];if(!A||u.current.has(x))return;u.current.add(x);let R=typeof A=="string"?A:A.name,F=typeof A=="string"?1:(ve=A.weight)!=null?ve:1,Ye=typeof A=="string"?0:(ye=A.stepIndex)!=null?ye:0;t.goal(R,G({signalType:x},y),F,Ye)},b,C)},[t,r,n,e.id,e.microSignalGoals,i]),B(()=>{if(i||!t||!r)return;let b=l.current;if(b)return I(b,g,{fireGoal:()=>{m.current||(m.current=!0,t.track({projectId:n,componentId:e.id,variantId:r,eventType:"goal_achieved",goalType:d,payload:{reward:1}}),t.goal(d,{componentId:e.id,variantId:r},1,0))},fireStep:(C,x,y)=>{t.track({projectId:n,componentId:e.id,variantId:r,eventType:"goal_achieved",goalType:C,payload:{reward:x}}),t.goal(C,{},x,y)}})},[t,r,n,e.id,g,d,i]),e.clientOnly&&(!v||!t)||!r)return null;let f=(w=e.variants[r])!=null?w:null,S=f===null?a:null;return k()&&f===null&&S===null&&console.warn(`[sentient] <Adaptive id="${e.id}"> was assigned variant "${r}" but no matching key exists in props.variants. If this is a dashboard-managed text variant, use <AdaptiveText id="${e.id}"> instead.`),kt("div",{ref:l,"data-sentient-id":e.id,"data-sentient-variant":r,children:f!=null?f:S})}var Ct=bt(xt,(e,t)=>{if(e.id!==t.id||e.goal!==t.goal&&JSON.stringify(e.goal)!==JSON.stringify(t.goal)||e.microSignalGoals!==t.microSignalGoals||e.clientOnly!==t.clientOnly||e.agentData!==t.agentData||e.agentDataByVariant!==t.agentDataByVariant)return!1;if(e.variants===t.variants)return!0;let n=Object.keys(e.variants),o=Object.keys(t.variants);return n.length!==o.length?!1:n.every(r=>r in t.variants&&Object.is(e.variants[r],t.variants[r]))});import{useEffect as Z,useMemo as _t,useRef as ae,useState as je,useSyncExternalStore as Rt}from"react";import{jsx as Ot}from"react/jsx-runtime";function Gt({id:e,default:t,component:n="span",className:o,goal:r}){var x;let a=_(),i=P(),s=X(),l=z(),v=ae(null),p=ae(null),m=Rt(T,()=>q(e),()=>null),[u,h]=je(()=>{var y,A;return(A=(y=a==null?void 0:a.getAssignment(e,l))==null?void 0:y.content)!=null?A:null}),[c,g]=je(()=>{var y,A;return(A=(y=a==null?void 0:a.getAssignment(e,l))==null?void 0:y.variantId)!=null?A:null});Z(()=>{var A;if(m||!a||((A=a.getAssignment(e,l))==null?void 0:A.content)!==void 0)return;let y=!1;return a.assign(e).then(R=>{if(!y){if(!R){k()&&console.warn(`[sentient] <AdaptiveText id="${e}"> assignment failed \u2014 showing default text.`);return}g(R.variantId),R.content&&h(R.content)}}),()=>{y=!0}},[a,e,l,m]),Z(()=>{m||!a||!c||!i||v.current!==c&&(v.current=c,a.track({projectId:i,componentId:e,variantId:c,eventType:"variant_assigned",payload:{}}),s==null||s(e,c))},[a,c,i,e,s,m]);let d=r===void 0?"":typeof r=="string"?r:JSON.stringify(r),f=_t(()=>r===void 0?null:L(r),[d]),S=r===void 0?null:typeof r=="string"?r:f.type,w=ae(!1);Z(()=>{w.current=!1},[c,d]),Z(()=>{if(m||!a||!c||!i||!f||!S)return;let y=p.current;if(y)return I(y,f,{fireGoal:()=>{w.current||(w.current=!0,a.track({projectId:i,componentId:e,variantId:c,eventType:"goal_achieved",goalType:S,payload:{reward:1}}),a.goal(S,{componentId:e,variantId:c},1,0))},fireStep:(A,R,F)=>{a.track({projectId:i,componentId:e,variantId:c,eventType:"goal_achieved",goalType:A,payload:{reward:R}}),a.goal(A,{},R,F)}})},[a,c,i,e,f,S,m]);let b=u!=null?u:t;if(m){let y=a==null?void 0:a.getAssignment(e,l);b=y&&y.variantId===m&&(x=y.content)!=null?x:t}return Ot(n,{ref:y=>{p.current=y},className:o,children:b})}import{useCallback as Et}from"react";function Lt(e){let t=_();return Et((n,o)=>{var r,a;t==null||t.componentGoal(e,n,o),t==null||t.goal(n,(r=o==null?void 0:o.metadata)!=null?r:{},(a=o==null?void 0:o.reward)!=null?a:1,0)},[t,e])}import{renderPrePaintScript as It}from"@sentientui/core";import{confidenceBand as Pt}from"@sentientui/policy";import{jsx as Mt}from"react/jsx-runtime";function Ne(e){return JSON.stringify(e).replace(/</g,"\\u003c")}function Tt(e){return e.persona?'(function(){try{var d=document.documentElement;if(d.hasAttribute("data-sentient-persona"))return;d.setAttribute("data-sentient-persona",'+Ne(e.persona.persona)+');d.setAttribute("data-sentient-confidence",'+Ne(Pt(e.persona.confidence))+");}catch(e){}})();":It(e.apiKey)}function Dt(e){return Mt("script",{"data-sentient-persona-script":"",dangerouslySetInnerHTML:{__html:Tt(e)}})}import{useEffect as ue,useMemo as ce,useRef as Ut}from"react";import{validateSlotDecl as $t}from"@sentientui/policy";import{useEffect as le,useReducer as Bt,useState as Ft,useSyncExternalStore as $e}from"react";import{armOfResult as ee,baselineResultFor as Wt}from"@sentientui/core";import{confidenceBand as Kt}from"@sentientui/policy";var Ue=new Set;function te(e,t){var p;$e(T,ie,()=>0);let n=_(),o=Me(),[,r]=Bt(m=>m+1,0),a=typeof window!="undefined"?(p=window.__sentient_slot_overrides)==null?void 0:p[e]:void 0,i=a===void 0?o[e]:void 0,s=a===void 0&&i===void 0&&n?n.getSlotResult(e):null,l=(n==null?void 0:n.isLocal)===!0&&a===void 0&&i===void 0&&s===null;le(()=>{if(!l||!n)return;let m=!1;return n.decide({slots:[t]}).then(u=>{!m&&u&&r()}),()=>{m=!0}},[n,e,l]);let v=(()=>{if(a!==void 0)return{result:a,arm:ee(a),source:"override"};if(i!==void 0)return{result:i,arm:ee(i),source:"preloaded"};if(s!==null)return{result:s,arm:ee(s),source:"client"};let m=Wt(t);return{result:m,arm:ee(m),source:"baseline"}})();return le(()=>{k()&&(!n||n.isLocal===!0||v.source==="baseline"&&(Ue.has(e)||(Ue.add(e),console.warn(`[sentient] slot "${e}" resolved to its baseline \u2014 no SSR-preloaded or decided result. Keyed clients decide slots server-side, so this slot serves baseline for the whole session and records no exposure. Preload it via loadAdaptiveDecision()/initialSlots so it can serve a decided arm and learn.`))))},[n,v.source,e]),v}function jt(){var t;if(typeof window=="undefined")return null;let e=window.__sentient_persona_override;if(e!=null&&e.persona)return{persona:e.persona,confidence:(t=e.confidence)!=null?t:1};try{let n=new URLSearchParams(window.location.search).get("sentient_persona");if(n)return{persona:n,confidence:1}}catch(n){}return null}function Nt(){let e=_(),t=Be();$e(T,ie,()=>0);let[n,o]=Ft(!1);le(()=>o(!0),[]);let r=s=>({persona:s.persona,confidence:s.confidence,band:Kt(s.confidence)});if(!n)return t?r(t):null;let a=jt();if(a)return r(a);if(t)return r(t);let i=e?e.getPersona():null;return i?r(i):null}var de=new Set;function Vt(e){return typeof CSS!="undefined"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/"/g,'\\"')}function Jt(e,t,n){let o=_(),r=P(),a=ce(()=>({id:e,dims:t}),[e]),{result:i,arm:s,source:l}=te(e,a),v=ce(()=>typeof i=="string"?{}:i,[s]);if(k()&&!de.has(e)){let h=$t({id:e,dims:Object.fromEntries(Object.entries(t).map(([g,d])=>[g,[...d]]))}),c=Object.values(t).reduce((g,d)=>g*d.length,1);h.ok?c>4&&(de.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}") declares ${c} combinations \u2014 more than the recommended 4. Each extra combination needs more traffic to learn; consider fewer dims/values.`)):(de.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}"): invalid declaration \u2014 ${h.reason}. Serving baseline.`))}let p=(n==null?void 0:n.goal)===void 0?null:typeof n.goal=="string"?n.goal:JSON.stringify(n.goal);ue(()=>H({id:e,dims:t}),[e]);let m=Ut(null);ue(()=>{!o||l==="baseline"||l==="override"||m.current===s||(m.current=s,D(o,r,e,s))},[o,r,e,s,l]),ue(()=>{if(!o||!(n!=null&&n.goal)||l==="override")return;let h=document.querySelector(`[data-sentient-slot="${Vt(e)}"]`);if(!h){k()&&console.warn(`[sentient] useAdaptiveTokens("${e}"): a goal is declared but no element carries the returned props \u2014 spread {...props} on the slot's element.`);return}let c=W(n.goal),g=!1;return I(h,L(n.goal),{fireGoal:()=>{g||(g=!0,o.componentGoal(e,c),o.goal(c,{componentId:e,arm:s},1,0))},fireStep:(d,f,S)=>{o.componentGoal(e,d,{reward:f}),o.goal(d,{componentId:e,arm:s},f,S)}})},[o,e,p,s,l]);let u=ce(()=>{let h={"data-sentient-slot":e};for(let[c,g]of Object.entries(v))h[`data-${c}`]=g;return h},[e,v]);return{tokens:v,props:u}}import{useCallback as Ve,useEffect as K,useMemo as fe,useRef as ge,useState as Ht}from"react";import{attachMicroSignalDetectors as zt}from"@sentientui/core";var Je=new Set;function Xt(e,t){var C;if(k()&&!t.goal)throw new Error(`[sentient] useAdaptive("${e}"): a goal is required \u2014 without one the optimizer accumulates exposures with no rewards and cannot learn. Pass e.g. goal: 'buy_click'.`);let n=_(),o=P(),r=fe(()=>Object.keys(t.variants),[e]),{variantId:a,isOverride:i,settled:s}=U(e,r),l=(C=a!=null?a:r[0])!=null?C:"",v=t.variants[l],[p,m]=Ht(null),u=ge(null),h=Ve(x=>{u.current=x,m(x)},[]),c=typeof t.goal=="string"?t.goal:JSON.stringify(t.goal),g=fe(()=>L(t.goal),[c]),d=W(t.goal);K(()=>J({id:e,variantIds:r,goal:d}),[e,r,d]);let f=ge(null);K(()=>{i||s&&(!n||!l||!p||f.current!==l&&(f.current=l,D(n,o,e,l)))},[n,o,e,l,p,i,s]);let S=ge(!1);K(()=>{S.current=!1},[l,c]),K(()=>{if(!i&&!(!n||!l||!p))return I(p,g,{fireGoal:()=>{S.current||(S.current=!0,n.track({projectId:o,componentId:e,variantId:l,eventType:"goal_achieved",goalType:d,payload:{reward:1}}),n.goal(d,{componentId:e,variantId:l},1,0))},fireStep:(x,y,A)=>{n.track({projectId:o,componentId:e,variantId:l,eventType:"goal_achieved",goalType:x,payload:{reward:y}}),n.goal(x,{},y,A)}})},[n,p,l,o,e,g,d,i]),K(()=>{if(i||!n||!l||!p)return;let x=Date.now();return zt((y,A={})=>{n.track({projectId:o,componentId:e,variantId:l,eventType:"micro_signal",payload:G({signalType:y},A)})},p,x)},[n,p,l,o,e,i]),K(()=>{if(!k()||!n)return;let x=setTimeout(()=>{!u.current&&!Je.has(e)&&(Je.add(e),console.warn(`[sentient] useAdaptive("${e}"): bind was never attached \u2014 spread {...bind} on the rendered element, otherwise exposure and goal tracking cannot work and the optimizer learns nothing.`))},0);return()=>clearTimeout(x)},[n,e]);let w=Ve((x,y)=>{var R,F;if(i)return;let A=x!=null?x:d;n==null||n.componentGoal(e,A,y),n==null||n.goal(A,(R=y==null?void 0:y.metadata)!=null?R:{},(F=y==null?void 0:y.reward)!=null?F:1,0)},[n,e,d,i]),b=fe(()=>({ref:h,"data-sentient-id":e,"data-sentient-variant":l}),[h,e,l]);return{variant:l,value:v,bind:b,fireGoal:w}}import{Children as qt,isValidElement as Qt,useEffect as pe,useMemo as He,useRef as ze}from"react";import{jsx as Zt}from"react/jsx-runtime";var ne=new Set;function Yt(e){var g;let t=_(),n=P(),o=ze(null),r=He(()=>Object.keys(e.arrangements),[e.id]),a=He(()=>G({id:e.id,arms:r},e.baseline!==void 0?{baseline:e.baseline}:{}),[e.id,r,e.baseline]),{arm:i,source:s}=te(e.id,a);k()&&e.baseline!==void 0&&e.baseline!==r[0]&&!ne.has(e.id+":baseline")&&(ne.add(e.id+":baseline"),console.warn(`[sentient] <AdaptiveGroup id="${e.id}">: baseline "${e.baseline}" is not the first-declared arrangement ("${r[0]}"). The first arrangement should usually be the page's real incumbent (the holdout sees it).`));let l=qt.toArray(e.children).filter(Qt),v=new Map;for(let d of l)v.set(String((g=d.key)!=null?g:"").replace(/^\.\$/,""),d);let p=e.arrangements[i],m=p!==void 0&&p.length===l.length&&p.every(d=>v.has(d));k()&&p!==void 0&&!m&&!ne.has(e.id+":keys")&&(ne.add(e.id+":keys"),console.warn(`[sentient] <AdaptiveGroup id="${e.id}">: arrangement "${i}" [${p.join(", ")}] does not match the children's keys \u2014 rendering declaration order (fail-safe).`));let u=m?p.map(d=>v.get(d)):l;pe(()=>H({id:e.id,arms:Object.keys(e.arrangements)}),[e.id]);let h=ze(null);pe(()=>{!t||s==="baseline"||s==="override"||h.current===i||(h.current=i,D(t,n,e.id,i))},[t,n,e.id,i,s]);let c=e.goal===void 0?null:typeof e.goal=="string"?e.goal:JSON.stringify(e.goal);return pe(()=>{if(!t||e.goal===void 0||s==="override")return;let d=o.current;if(!d)return;let f=W(e.goal),S=!1;return I(d,L(e.goal),{fireGoal:()=>{S||(S=!0,t.componentGoal(e.id,f),t.goal(f,{componentId:e.id,arm:i},1,0))},fireStep:(w,b,C)=>{t.componentGoal(e.id,w,{reward:b}),t.goal(w,{componentId:e.id,arm:i},b,C)}})},[t,e.id,c,i,s]),Zt("div",{ref:o,"data-sentient-id":e.id,"data-sentient-variant":i,children:u})}import{deriveSessionSegment as en}from"@sentientui/core";var tn=["page","blocks","layoutOrder"],Xe=new Map;function nn(e,t){Xe.set(e,t)}function qe(e){return Xe.get(e)}function rn(e){var r,a;let t=(a=(r=e.content)!=null?r:qe(e.page))!=null?a:{},n={};for(let[i,s]of Object.entries(t))tn.includes(i)||(n[i]=s);let o=$(G({},n),{page:e.page,blocks:e.blocks});return e.layoutOrder&&(o.layoutOrder=e.layoutOrder),o}function on(e){return`<script type="application/ld+json">${Qe(e)}</script>`}function Qe(e){return JSON.stringify(G({"@context":"https://schema.org","@type":"WebPage"},e)).replace(/</g,"\\u003c")}function sn(e){let t=[];e.title&&t.push(`# ${e.title}`,""),e.summary&&t.push(String(e.summary),"");for(let[n,o]of Object.entries(e))["page","title","summary","blocks","layoutOrder"].includes(n)||t.push(`## ${n}`,"","```json",JSON.stringify(o,null,2),"```","");if(e.blocks.length>0){t.push("## blocks","");for(let n of e.blocks)t.push(`- **${n.id}** \u2192 variant \`${n.variant}\``),n.content!==void 0&&t.push(""," ```json",JSON.stringify(n.content,null,2)," ```");t.push("")}return t.join(`
|
|
3
3
|
`).trimEnd()+`
|
|
4
|
-
`}export{
|
|
4
|
+
`}export{Ct as Adaptive,Yt as AdaptiveGroup,gt as AdaptiveProvider,Gt as AdaptiveText,Dt as SentientPersonaScript,rn as buildAgentFeed,nn as defineAgentContent,en as detectSegment,qe as getAgentContent,on as renderAgentJsonLd,Qe as renderAgentJsonLdBody,sn as renderAgentMarkdown,Xt as useAdaptive,mt as useAdaptiveApiBaseUrl,Lt as useAdaptiveGoal,Nt as useAdaptivePersona,Jt as useAdaptiveTokens,U as useAssignment,se as useInitialAssignments,pt as useLayoutOrder,_ as useSentient};
|
|
5
5
|
//# sourceMappingURL=index.mjs.map
|