@sentientui/react 0.14.1 → 0.14.2

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