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