@sentientui/react 0.15.3 → 0.15.5

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.d.cts CHANGED
@@ -194,7 +194,15 @@ type AdaptiveProps = {
194
194
  agentData?: unknown;
195
195
  };
196
196
  declare function AdaptiveImpl(props: AdaptiveProps): JSX.Element | null;
197
- /** Re-renders only when the chosen variant changes. */
197
+ /**
198
+ * Skips re-render only when nothing the output depends on has changed. The
199
+ * variant node values must be compared, not just their keys: the assigned
200
+ * `variantId` is stable, so if we compared keys alone, dynamic content inside a
201
+ * variant (e.g. `<Price value={price}/>`) would render once and then freeze when
202
+ * `price` changes. Elements are compared by reference — a caller that recreates
203
+ * variant JSX on every render re-renders every time (correct), while stable/
204
+ * memoized elements keep the optimization.
205
+ */
198
206
  declare const Adaptive: react.MemoExoticComponent<typeof AdaptiveImpl>;
199
207
 
200
208
  type AdaptiveTextProps = {
package/dist/index.d.ts CHANGED
@@ -194,7 +194,15 @@ type AdaptiveProps = {
194
194
  agentData?: unknown;
195
195
  };
196
196
  declare function AdaptiveImpl(props: AdaptiveProps): JSX.Element | null;
197
- /** Re-renders only when the chosen variant changes. */
197
+ /**
198
+ * Skips re-render only when nothing the output depends on has changed. The
199
+ * variant node values must be compared, not just their keys: the assigned
200
+ * `variantId` is stable, so if we compared keys alone, dynamic content inside a
201
+ * variant (e.g. `<Price value={price}/>`) would render once and then freeze when
202
+ * `price` changes. Elements are compared by reference — a caller that recreates
203
+ * variant JSX on every render re-renders every time (correct), while stable/
204
+ * memoized elements keep the optimization.
205
+ */
198
206
  declare const Adaptive: react.MemoExoticComponent<typeof AdaptiveImpl>;
199
207
 
200
208
  type AdaptiveTextProps = {
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- "use strict";var lt=Object.create;var H=Object.defineProperty,ct=Object.defineProperties,ut=Object.getOwnPropertyDescriptor,dt=Object.getOwnPropertyDescriptors,ft=Object.getOwnPropertyNames,me=Object.getOwnPropertySymbols,gt=Object.getPrototypeOf,ye=Object.prototype.hasOwnProperty,pt=Object.prototype.propertyIsEnumerable;var ve=(e,t,n)=>t in e?H(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,E=(e,t)=>{for(var n in t||(t={}))ye.call(t,n)&&ve(e,n,t[n]);if(me)for(var n of me(t))pt.call(t,n)&&ve(e,n,t[n]);return e},J=(e,t)=>ct(e,dt(t));var mt=(e,t)=>{for(var n in t)H(e,n,{get:t[n],enumerable:!0})},Se=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ft(t))!ye.call(e,i)&&i!==n&&H(e,i,{get:()=>t[i],enumerable:!(o=ut(t,i))||o.enumerable});return e};var vt=(e,t,n)=>(n=e!=null?lt(gt(e)):{},Se(t||!e||!e.__esModule?H(n,"default",{value:e,enumerable:!0}):n,e)),yt=e=>Se(H({},"__esModule",{value:!0}),e);var Lt={};mt(Lt,{Adaptive:()=>Me,AdaptiveGroup:()=>Ye,AdaptiveProvider:()=>Re,AdaptiveText:()=>Fe,SentientPersonaScript:()=>Ve,buildAgentFeed:()=>nt,defineAgentContent:()=>tt,detectSegment:()=>ce.deriveSessionSegment,getAgentContent:()=>ue,getWeights:()=>Y,renderAgentJsonLd:()=>it,renderAgentJsonLdBody:()=>de,renderAgentMarkdown:()=>rt,subscribeWeights:()=>q,updateWeights:()=>Q,useAdaptive:()=>Qe,useAdaptiveApiBaseUrl:()=>Oe,useAdaptiveGoal:()=>Ke,useAdaptiveTokens:()=>ze,useAssignment:()=>$,useInitialAssignments:()=>ne,useLayoutOrder:()=>Ee,useSentient:()=>_});module.exports=yt(Lt);var w=require("react"),N=require("@sentientui/core");var he=new Map,X=new Map;function q(e,t){let n=X.get(e);return n||(n=new Set,X.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&X.delete(e)}}function Q(e,t){he.set(e,t);let n=X.get(e);if(n)for(let o of n)try{o(t)}catch(i){}}function Y(e){var t;return(t=he.get(e))!=null?t:null}var St={on:!1,listeners:new Set};function we(){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 ae(){return we().on}function be(e){let t=we().listeners;return t.add(e),()=>{t.delete(e)}}function Ae(e){return{isLocal:e.isLocal,track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},fetchWeights:()=>Promise.resolve([]),getAssignment:(t,n)=>e.getAssignment(t,n),assign:(t,n,o,i)=>e.assign(t,n,o,i),decide:()=>Promise.resolve(null),getSlotResult:t=>e.getSlotResult(t),getPersona:()=>e.getPersona(),getGraph:()=>e.getGraph(),dispose:()=>e.dispose(),destroy:()=>e.destroy()}}var xe="sentient:overrides-changed";function Z(){var e;return typeof window=="undefined"?0:(e=window.__sentient_overrides_version)!=null?e:0}function K(e){return typeof window=="undefined"?()=>{}:(window.addEventListener(xe,e),()=>window.removeEventListener(xe,e))}function ke(e){typeof window!="undefined"&&(window.__sentient_devtools_config=e)}var ht={components:new Map,slots:new Map,sections:[],listeners:new Set,version:0};function B(){if(typeof window=="undefined")return ht;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 z(){B().version+=1;for(let e of B().listeners)e()}function ee(e){return B().components.set(e.id,e),z(),()=>{B().components.delete(e.id),z()}}function te(e){return B().slots.set(e.id,e),z(),()=>{B().slots.delete(e.id),z()}}function _e(e){B().sections=[...e],z()}var Ie=require("react/jsx-runtime");function wt(){var e,t;if(typeof window=="undefined")return"desktop:direct";try{let n=(0,N.detectDeviceClass)((e=navigator.userAgent)!=null?e:""),o=(0,N.detectTrafficSource)((t=document.referrer)!=null?t:"",window.location.origin);return`${n}:${o}`}catch(n){return"desktop:direct"}}var Ce="https://api.sentient-ui.com/v1",I=(0,w.createContext)({client:null,apiKey:"",initialAssignments:{},sessionSegment:"desktop:direct",ssrFallback:"first",onAssignment:void 0,initialLayoutOrder:null,initialSlots:{},initialPersona:null,apiBaseUrl:Ce});function Re(e){var S,u;let[t,n]=(0,w.useState)(null),[o]=(0,w.useState)(()=>{var d;return(d=e.sessionSegment)!=null?d:wt()}),[i,f]=(0,w.useState)(ae());(0,w.useEffect)(()=>be(()=>f(ae())),[]),(0,w.useEffect)(()=>{if(e.consent===!1&&!e.preConsentBehavior){n(a=>(a==null||a.destroy(),null));return}let d={apiKey:e.apiKey,context:e.context,debug:e.debug,initialAssignments:e.initialAssignments,sessionSegment:o,consent:e.consent,preConsentBehavior:e.preConsentBehavior,respectDoNotTrack:e.respectDoNotTrack,ssrSessionId:e.ssrSessionId,country:e.country,localMode:e.localMode,initialSlots:e.initialSlots,initialPersona:e.initialPersona,ingestUrl:e.apiBaseUrl?`${e.apiBaseUrl.replace(/\/$/,"")}/events`:void 0},g=!1,l=null;return e.enableGraph?import("@sentientui/core/graph").then(({init:a})=>{g||(l=a(J(E({},d),{graph:!0})),n(l))}):(l=(0,N.init)(d),n(l)),()=>{g=!0,l==null||l.dispose()}},[e.consent]),(0,w.useEffect)(()=>{if(!t)return;let d=!1,g=async()=>{if(d)return;let a;try{a=await t.fetchWeights()}catch(b){return}if(!d)for(let b of a){let m={componentId:b.componentId,updatedAt:b.updatedAt,variants:b.variants.map(A=>{var v;return{variantId:A.variantId,pulls:A.pulls,avgReward:(v=A.avgReward)!=null?v:0}})};Q(b.componentId,m)}};g();let l=setInterval(()=>{g()},6e4);return()=>{d=!0,clearInterval(l)}},[t]);let s=(S=e.ssrFallback)!=null?S:"first",r=(u=e.apiBaseUrl)!=null?u:Ce;(0,w.useEffect)(()=>{var d;typeof process!="undefined"&&((d=process.env)==null?void 0:d.NODE_ENV)==="production"||ke({apiKey:e.apiKey,apiBaseUrl:r,isLocal:(t==null?void 0:t.isLocal)===!0})},[t,e.apiKey,r]),(0,w.useEffect)(()=>{e.initialLayoutOrder&&e.initialLayoutOrder.length>0&&_e(e.initialLayoutOrder)},[e.initialLayoutOrder]);let p=(0,w.useMemo)(()=>t&&i?Ae(t):t,[t,i]),c=(0,w.useMemo)(()=>{var d,g,l,a;return{client:p,apiKey:e.apiKey,initialAssignments:(d=e.initialAssignments)!=null?d:{},sessionSegment:o,ssrFallback:s,onAssignment:e.onAssignment,initialLayoutOrder:(g=e.initialLayoutOrder)!=null?g:null,initialSlots:(l=e.initialSlots)!=null?l:{},initialPersona:(a=e.initialPersona)!=null?a:null,apiBaseUrl:r}},[p,e.apiKey,e.initialAssignments,o,s,e.onAssignment,e.initialLayoutOrder,e.initialSlots,e.initialPersona,r]);return(0,Ie.jsx)(I.Provider,{value:c,children:e.children})}function _(){return(0,w.useContext)(I).client}function P(){return(0,w.useContext)(I).apiKey}function ne(){return(0,w.useContext)(I).initialAssignments}function ie(){return(0,w.useContext)(I).sessionSegment}function Ge(){return(0,w.useContext)(I).ssrFallback}function re(){return(0,w.useContext)(I).onAssignment}function Ee(){let e=(0,w.useContext)(I).initialLayoutOrder,t=(0,w.useSyncExternalStore)(K,()=>{var n;return typeof window=="undefined"?null:(n=window.__sentient_layout_override)!=null?n:null},()=>null);return t!=null?t:e}function Le(){return(0,w.useContext)(I).initialSlots}function Oe(){return(0,w.useContext)(I).apiBaseUrl}var x=require("react"),De=require("@sentientui/core");var O=require("react");function bt(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 f=i.indexOf(":");if(f!==-1&&i.slice(0,f)===e)return i.slice(f+1)}}catch(o){}return null}function Pe(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 $(e,t,n,o){let i=ne(),f=Ge(),s=_(),r=ie(),p=re(),c=(0,O.useRef)(null);(0,O.useSyncExternalStore)(K,Z,()=>0);let S=bt(e),u=S&&t.includes(S)?S:null,d=(0,O.useRef)(null);u&&d.current!==u&&(d.current=u,console.info(`[sentient] override active: ${e} -> ${u}`));let g=(()=>{var v,h;if(u)return{variantId:u,content:null,isLoading:!1};if(!s){let y=i[e];return y&&t.includes(y)?{variantId:y,content:null,isLoading:!1}:f==="first"&&t.length>0?{variantId:t[0],content:null,isLoading:!1}:{variantId:null,content:null,isLoading:!0}}let m=s.getAssignment(e,r);if(m&&(t.includes(m.variantId)||m.content))return{variantId:m.variantId,content:(v=m.content)!=null?v:null,isLoading:!1};let A=Y(e);if(A){let y=Pe(A,t);if(y)return{variantId:y,content:null,isLoading:!1}}return{variantId:(h=t[0])!=null?h:null,content:null,isLoading:!1}})(),[l,a]=(0,O.useState)(g),b=m=>{p&&c.current!==m&&(c.current=m,p(e,m))};return(0,O.useEffect)(()=>{var A;if(u||!s)return;let m=s.getAssignment(e,r);if(m&&(t.includes(m.variantId)||m.content)){a({variantId:m.variantId,content:(A=m.content)!=null?A:null,isLoading:!1}),b(m.variantId);return}a(v=>{var h;return v.variantId?v:{variantId:(h=t[0])!=null?h:null,content:null,isLoading:!1}})},[u,s,e,r]),(0,O.useEffect)(()=>{if(u||!s)return;let m=s.getAssignment(e,r);if(m&&t.includes(m.variantId))return;let A=!1;return s.assign(e,t,n,o).then(v=>{var h;A||v&&(!t.includes(v.variantId)&&!v.content||(a({variantId:v.variantId,content:(h=v.content)!=null?h:null,isLoading:!1}),b(v.variantId)))}),()=>{A=!0}},[u,s,e,r]),(0,O.useEffect)(()=>{if(!u&&s)return q(e,m=>{var h;let A=s.getAssignment(e,r);if(A&&(t.includes(A.variantId)||A.content)){a({variantId:A.variantId,content:(h=A.content)!=null?h:null,isLoading:!1});return}let v=Pe(m,t);v&&a({variantId:v,content:null,isLoading:!1})})},[u,s,e,r]),u?{variantId:u,content:null,isLoading:!1,isOverride:!0}:l}function L(){var e;return typeof process=="undefined"||((e=process.env)==null?void 0:e.NODE_ENV)!=="production"}function D(e){return typeof e=="string"?{type:"click"}:e}function U(e){return typeof e=="string"?e:e.type}var At=3e4;function xt(e,t){try{let n=`_snt_pv_${e}_${t}`;return sessionStorage.getItem(n)?!1:(sessionStorage.setItem(n,"1"),!0)}catch(n){return!0}}function kt(e){if(!(e instanceof Element))return!1;let t=e.tagName.toLowerCase();return t==="a"||t==="button"?!0:e.getAttribute("role")==="button"}function Te(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(kt(o))return!0;o=o.parentElement}return!1}function M(e,t,n){if(t.type==="weighted_composite"){let r=new Set,p=[];return t.steps.forEach(({goal:c,name:S,weight:u},d)=>{let g=()=>{r.has(d)||(r.add(d),n.fireStep(S,u,d))};if(c.type==="click"){let l=a=>{let b=a.target;b instanceof Element&&Te(b,e,c.selector)&&g()};e.addEventListener("click",l),p.push(()=>e.removeEventListener("click",l));return}if(c.type==="form_submit"){let l=a=>{a.target instanceof HTMLFormElement&&e.contains(a.target)&&g()};e.addEventListener("submit",l),p.push(()=>e.removeEventListener("submit",l));return}if(c.type==="scroll_depth"){let l=Math.max(0,Math.min(1,c.threshold)),a=new IntersectionObserver(b=>{for(let m of b)if(m.intersectionRatio>=l){g(),a.disconnect();break}},{threshold:[l]});a.observe(e),p.push(()=>a.disconnect())}}),()=>{for(let c of p)c()}}let o=t.type==="composite"?t.all:[t],i=new Set(o.map((r,p)=>p)),f=r=>{i.delete(r),i.size===0&&n.fireGoal()},s=[];return o.forEach((r,p)=>{if(r.type==="click"){let c=S=>{let u=S.target;u instanceof Element&&Te(u,e,r.selector)&&(t.type==="composite"?f(p):n.fireGoal())};e.addEventListener("click",c),s.push(()=>e.removeEventListener("click",c));return}if(r.type==="form_submit"){let c=S=>{S.target instanceof HTMLFormElement&&e.contains(S.target)&&(t.type==="composite"?f(p):n.fireGoal())};e.addEventListener("submit",c),s.push(()=>e.removeEventListener("submit",c));return}if(r.type==="scroll_depth"){let c=Math.max(0,Math.min(1,r.threshold)),S=new IntersectionObserver(u=>{for(let d of u)if(d.intersectionRatio>=c){t.type==="composite"?f(p):n.fireGoal(),S.disconnect();break}},{threshold:[c]});S.observe(e),s.push(()=>S.disconnect());return}}),()=>{for(let r of s)r()}}function W(e,t,n,o,i){var r;let f=(r=i==null?void 0:i.innerHTML)!=null?r:"",s=f!==""&&xt(n,o);e.track({projectId:t,componentId:n,variantId:o,eventType:"variant_assigned",payload:s?{previewHtml:f.slice(0,At)}:{}})}var We=require("react/jsx-runtime");function _t(e){var A;let t=_(),n=P(),o=(0,x.useMemo)(()=>Object.keys(e.variants),[e.variants]),{variantId:i,content:f,isOverride:s}=$(e.id,o,e.agentData,e.agentDataByVariant),r=(0,x.useRef)(null),[p,c]=(0,x.useState)(!1);(0,x.useEffect)(()=>{c(!0)},[]);let S=(0,x.useRef)(!1),u=(0,x.useRef)(new Set),d=(0,x.useRef)(null),g=typeof e.goal=="string"?e.goal:JSON.stringify(e.goal),l=(0,x.useMemo)(()=>D(e.goal),[g]),a=typeof e.goal=="string"?e.goal:l.type;if((0,x.useEffect)(()=>ee({id:e.id,variantIds:o,goal:a}),[e.id,o,a]),(0,x.useEffect)(()=>{var h,y;s||!t||!i||!n||d.current===i||!((y=(h=r.current)==null?void 0:h.innerHTML)!=null&&y)||(d.current=i,W(t,n,e.id,i,r.current))},[t,i,n,e.id,p,f,s]),(0,x.useEffect)(()=>{S.current=!1,u.current=new Set},[i,l]),(0,x.useEffect)(()=>{if(s||!t||!i)return;let v=r.current;if(!v)return;let h=null,y=0,R=()=>{y=Date.now(),h=setTimeout(()=>{t.track({projectId:n,componentId:e.id,variantId:i,eventType:"cursor_signal",payload:{hoverDuration:Date.now()-y}}),h=null},800)},C=()=>{h!==null&&(clearTimeout(h),h=null)};return v.addEventListener("mouseenter",R),v.addEventListener("mouseleave",C),()=>{v.removeEventListener("mouseenter",R),v.removeEventListener("mouseleave",C),h!==null&&clearTimeout(h)}},[t,i,n,e.id,s]),(0,x.useEffect)(()=>{if(s||!t||!i)return;let v=r.current;if(!v)return;let h=Date.now();return(0,De.attachMicroSignalDetectors)((y,R={})=>{var fe,ge,pe;t.track({projectId:n,componentId:e.id,variantId:i,eventType:"micro_signal",payload:E({signalType:y},R)});let C=(fe=e.microSignalGoals)==null?void 0:fe[y];if(!C||u.current.has(y))return;u.current.add(y);let ot=typeof C=="string"?C:C.name,st=typeof C=="string"?1:(ge=C.weight)!=null?ge:1,at=typeof C=="string"?0:(pe=C.stepIndex)!=null?pe:0;t.goal(ot,E({signalType:y},R),st,at)},v,h)},[t,i,n,e.id,e.microSignalGoals,s]),(0,x.useEffect)(()=>{if(s||!t||!i)return;let v=r.current;if(v)return M(v,l,{fireGoal:()=>{S.current||(S.current=!0,t.track({projectId:n,componentId:e.id,variantId:i,eventType:"goal_achieved",goalType:a,payload:{reward:1}}),t.goal(a,{componentId:e.id,variantId:i},1,0))},fireStep:(h,y,R)=>{t.track({projectId:n,componentId:e.id,variantId:i,eventType:"goal_achieved",goalType:h,payload:{reward:y}}),t.goal(h,{},y,R)}})},[t,i,n,e.id,l,a,s]),e.clientOnly&&(!p||!t)||!i)return null;let b=(A=e.variants[i])!=null?A:null,m=b===null?f:null;return L()&&b===null&&m===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.`),(0,We.jsx)("div",{ref:r,"data-sentient-id":e.id,"data-sentient-variant":i,children:b!=null?b:m})}var Me=(0,x.memo)(_t,(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)});var F=require("react");var Be=require("react/jsx-runtime");function Fe({id:e,default:t,component:n="span",className:o}){let i=_(),f=P(),s=re(),r=ie(),p=(0,F.useRef)(null),[c,S]=(0,F.useState)(()=>{var g,l;return(l=(g=i==null?void 0:i.getAssignment(e,r))==null?void 0:g.content)!=null?l:null}),[u,d]=(0,F.useState)(()=>{var g,l;return(l=(g=i==null?void 0:i.getAssignment(e,r))==null?void 0:g.variantId)!=null?l:null});return(0,F.useEffect)(()=>{var l;if(!i||((l=i.getAssignment(e,r))==null?void 0:l.content)!==void 0)return;let g=!1;return i.assign(e).then(a=>{if(!g){if(!a){L()&&console.warn(`[sentient] <AdaptiveText id="${e}"> assignment failed \u2014 showing default text.`);return}d(a.variantId),a.content&&S(a.content)}}),()=>{g=!0}},[i,e,r]),(0,F.useEffect)(()=>{!i||!u||!f||p.current!==u&&(p.current=u,i.track({projectId:f,componentId:e,variantId:u,eventType:"variant_assigned",payload:{}}),s==null||s(e,u))},[i,u,f,e,s]),(0,Be.jsx)(n,{className:o,children:c!=null?c:t})}var je=require("react");function Ke(e){let t=_();return(0,je.useCallback)((n,o)=>{t==null||t.componentGoal(e,n,o)},[t,e])}var $e=require("@sentientui/core"),Ue=require("@sentientui/policy"),He=require("react/jsx-runtime");function Ne(e){return JSON.stringify(e).replace(/</g,"\\u003c")}function Ct(e){return e.persona?'(function(){try{var d=document.documentElement;if(d.hasAttribute("data-sentient-persona"))return;d.setAttribute("data-sentient-persona",'+Ne(e.persona.persona)+');d.setAttribute("data-sentient-confidence",'+Ne((0,Ue.confidenceBand)(e.persona.confidence))+");}catch(e){}})();":(0,$e.renderPrePaintScript)(e.apiKey)}function Ve(e){return(0,He.jsx)("script",{"data-sentient-persona-script":"",dangerouslySetInnerHTML:{__html:Ct(e)}})}var T=require("react"),Je=require("@sentientui/policy");var V=require("react"),j=require("@sentientui/core"),Rt=require("@sentientui/policy");function oe(e,t){var S;(0,V.useSyncExternalStore)(K,Z,()=>0);let n=_(),o=Le(),[,i]=(0,V.useReducer)(u=>u+1,0),f=typeof window!="undefined"?(S=window.__sentient_slot_overrides)==null?void 0:S[e]:void 0,s=f===void 0?o[e]:void 0,r=f===void 0&&s===void 0&&n?n.getSlotResult(e):null,p=(n==null?void 0:n.isLocal)===!0&&f===void 0&&s===void 0&&r===null;if((0,V.useEffect)(()=>{if(!p||!n)return;let u=!1;return n.decide({slots:[t]}).then(d=>{!u&&d&&i()}),()=>{u=!0}},[n,e,p]),f!==void 0)return{result:f,arm:(0,j.armOfResult)(f),source:"override"};if(s!==void 0)return{result:s,arm:(0,j.armOfResult)(s),source:"preloaded"};if(r!==null)return{result:r,arm:(0,j.armOfResult)(r),source:"client"};let c=(0,j.baselineResultFor)(t);return{result:c,arm:(0,j.armOfResult)(c),source:"baseline"}}var le=new Set;function Gt(e){return typeof CSS!="undefined"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/"/g,'\\"')}function ze(e,t,n){let o=_(),i=P(),f=(0,T.useMemo)(()=>({id:e,dims:t}),[e]),{result:s,arm:r}=oe(e,f),p=(0,T.useMemo)(()=>typeof s=="string"?{}:s,[r]);if(L()&&!le.has(e)){let d=(0,Je.validateSlotDecl)({id:e,dims:Object.fromEntries(Object.entries(t).map(([l,a])=>[l,[...a]]))}),g=Object.values(t).reduce((l,a)=>l*a.length,1);d.ok?g>4&&(le.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}") declares ${g} combinations \u2014 more than the recommended 4. Each extra combination needs more traffic to learn; consider fewer dims/values.`)):(le.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}"): invalid declaration \u2014 ${d.reason}. Serving baseline.`))}let c=(n==null?void 0:n.goal)===void 0?null:typeof n.goal=="string"?n.goal:JSON.stringify(n.goal);(0,T.useEffect)(()=>te({id:e,dims:t}),[e]);let S=(0,T.useRef)(null);(0,T.useEffect)(()=>{!o||S.current===r||(S.current=r,W(o,i,e,r,null))},[o,i,e,r]),(0,T.useEffect)(()=>{if(!o||!(n!=null&&n.goal))return;let d=document.querySelector(`[data-sentient-slot="${Gt(e)}"]`);if(!d){L()&&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 g=U(n.goal),l=!1;return M(d,D(n.goal),{fireGoal:()=>{l||(l=!0,o.componentGoal(e,g))},fireStep:(a,b)=>{o.componentGoal(e,a,{reward:b})}})},[o,e,c,r]);let u=(0,T.useMemo)(()=>{let d={"data-sentient-slot":e};for(let[g,l]of Object.entries(p))d[`data-${g}`]=l;return d},[e,p]);return{tokens:p,props:u}}var k=require("react"),qe=require("@sentientui/core");var Xe=new Set;function Qe(e,t){var h;if(L()&&!t.goal)throw new Error(`[sentient] useAdaptive("${e}"): a goal is required \u2014 without one the optimizer accumulates exposures with no rewards and cannot learn. Pass e.g. goal: 'buy_click'.`);let n=_(),o=P(),i=(0,k.useMemo)(()=>Object.keys(t.variants),[e]),{variantId:f,isOverride:s}=$(e,i),r=(h=f!=null?f:i[0])!=null?h:"",p=t.variants[r],[c,S]=(0,k.useState)(null),u=(0,k.useRef)(null),d=(0,k.useCallback)(y=>{u.current=y,S(y)},[]),g=typeof t.goal=="string"?t.goal:JSON.stringify(t.goal),l=(0,k.useMemo)(()=>D(t.goal),[g]),a=U(t.goal);(0,k.useEffect)(()=>ee({id:e,variantIds:i,goal:a}),[e,i,a]);let b=(0,k.useRef)(null);(0,k.useEffect)(()=>{s||!n||!r||!c||b.current!==r&&(b.current=r,W(n,o,e,r,c))},[n,o,e,r,c,s]);let m=(0,k.useRef)(!1);(0,k.useEffect)(()=>{m.current=!1},[r,g]),(0,k.useEffect)(()=>{if(!s&&!(!n||!r||!c))return M(c,l,{fireGoal:()=>{m.current||(m.current=!0,n.track({projectId:o,componentId:e,variantId:r,eventType:"goal_achieved",goalType:a,payload:{reward:1}}),n.goal(a,{componentId:e,variantId:r},1,0))},fireStep:(y,R,C)=>{n.track({projectId:o,componentId:e,variantId:r,eventType:"goal_achieved",goalType:y,payload:{reward:R}}),n.goal(y,{},R,C)}})},[n,c,r,o,e,l,a,s]),(0,k.useEffect)(()=>{if(s||!n||!r||!c)return;let y=Date.now();return(0,qe.attachMicroSignalDetectors)((R,C={})=>{n.track({projectId:o,componentId:e,variantId:r,eventType:"micro_signal",payload:E({signalType:R},C)})},c,y)},[n,c,r,o,e,s]),(0,k.useEffect)(()=>{if(!L()||!n)return;let y=setTimeout(()=>{!u.current&&!Xe.has(e)&&(Xe.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(y)},[n,e]);let A=(0,k.useCallback)((y,R)=>{s||n==null||n.componentGoal(e,y!=null?y:a,R)},[n,e,a,s]),v=(0,k.useMemo)(()=>({ref:d,"data-sentient-id":e,"data-sentient-variant":r}),[d,e,r]);return{variant:r,value:p,bind:v,fireGoal:A}}var G=require("react");var Ze=require("react/jsx-runtime"),se=new Set;function Ye(e){var l;let t=_(),n=P(),o=(0,G.useRef)(null),i=(0,G.useMemo)(()=>Object.keys(e.arrangements),[e.id]),f=(0,G.useMemo)(()=>E({id:e.id,arms:i},e.baseline!==void 0?{baseline:e.baseline}:{}),[e.id,i,e.baseline]),{arm:s}=oe(e.id,f);L()&&e.baseline!==void 0&&e.baseline!==i[0]&&!se.has(e.id+":baseline")&&(se.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 r=G.Children.toArray(e.children).filter(G.isValidElement),p=new Map;for(let a of r)p.set(String((l=a.key)!=null?l:"").replace(/^\.\$/,""),a);let c=e.arrangements[s],S=c!==void 0&&c.length===r.length&&c.every(a=>p.has(a));L()&&c!==void 0&&!S&&!se.has(e.id+":keys")&&(se.add(e.id+":keys"),console.warn(`[sentient] <AdaptiveGroup id="${e.id}">: arrangement "${s}" [${c.join(", ")}] does not match the children's keys \u2014 rendering declaration order (fail-safe).`));let u=S?c.map(a=>p.get(a)):r;(0,G.useEffect)(()=>te({id:e.id,arms:Object.keys(e.arrangements)}),[e.id]);let d=(0,G.useRef)(null);(0,G.useEffect)(()=>{!t||d.current===s||(d.current=s,W(t,n,e.id,s,o.current))},[t,n,e.id,s]);let g=e.goal===void 0?null:typeof e.goal=="string"?e.goal:JSON.stringify(e.goal);return(0,G.useEffect)(()=>{if(!t||e.goal===void 0)return;let a=o.current;if(!a)return;let b=U(e.goal),m=!1;return M(a,D(e.goal),{fireGoal:()=>{m||(m=!0,t.componentGoal(e.id,b))},fireStep:(A,v)=>{t.componentGoal(e.id,A,{reward:v})}})},[t,e.id,g,s]),(0,Ze.jsx)("div",{ref:o,"data-sentient-id":e.id,"data-sentient-variant":s,children:u})}var ce=require("@sentientui/core");var Et=["page","blocks","layoutOrder"],et=new Map;function tt(e,t){et.set(e,t)}function ue(e){return et.get(e)}function nt(e){var i,f;let t=(f=(i=e.content)!=null?i:ue(e.page))!=null?f:{},n={};for(let[s,r]of Object.entries(t))Et.includes(s)||(n[s]=r);let o=J(E({},n),{page:e.page,blocks:e.blocks});return e.layoutOrder&&(o.layoutOrder=e.layoutOrder),o}function it(e){return`<script type="application/ld+json">${de(e)}</script>`}function de(e){return JSON.stringify(E({"@context":"https://schema.org","@type":"WebPage"},e)).replace(/</g,"\\u003c")}function rt(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
+ "use strict";var lt=Object.create;var H=Object.defineProperty,ct=Object.defineProperties,ut=Object.getOwnPropertyDescriptor,dt=Object.getOwnPropertyDescriptors,ft=Object.getOwnPropertyNames,me=Object.getOwnPropertySymbols,gt=Object.getPrototypeOf,ye=Object.prototype.hasOwnProperty,pt=Object.prototype.propertyIsEnumerable;var ve=(e,t,n)=>t in e?H(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,E=(e,t)=>{for(var n in t||(t={}))ye.call(t,n)&&ve(e,n,t[n]);if(me)for(var n of me(t))pt.call(t,n)&&ve(e,n,t[n]);return e},J=(e,t)=>ct(e,dt(t));var mt=(e,t)=>{for(var n in t)H(e,n,{get:t[n],enumerable:!0})},Se=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ft(t))!ye.call(e,i)&&i!==n&&H(e,i,{get:()=>t[i],enumerable:!(o=ut(t,i))||o.enumerable});return e};var vt=(e,t,n)=>(n=e!=null?lt(gt(e)):{},Se(t||!e||!e.__esModule?H(n,"default",{value:e,enumerable:!0}):n,e)),yt=e=>Se(H({},"__esModule",{value:!0}),e);var Ot={};mt(Ot,{Adaptive:()=>Me,AdaptiveGroup:()=>Ye,AdaptiveProvider:()=>Re,AdaptiveText:()=>Fe,SentientPersonaScript:()=>Ve,buildAgentFeed:()=>nt,defineAgentContent:()=>tt,detectSegment:()=>ce.deriveSessionSegment,getAgentContent:()=>ue,getWeights:()=>Y,renderAgentJsonLd:()=>it,renderAgentJsonLdBody:()=>de,renderAgentMarkdown:()=>rt,subscribeWeights:()=>q,updateWeights:()=>Q,useAdaptive:()=>Qe,useAdaptiveApiBaseUrl:()=>Le,useAdaptiveGoal:()=>Ke,useAdaptiveTokens:()=>ze,useAssignment:()=>$,useInitialAssignments:()=>ne,useLayoutOrder:()=>Ee,useSentient:()=>k});module.exports=yt(Ot);var w=require("react"),N=require("@sentientui/core");var he=new Map,X=new Map;function q(e,t){let n=X.get(e);return n||(n=new Set,X.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&X.delete(e)}}function Q(e,t){he.set(e,t);let n=X.get(e);if(n)for(let o of n)try{o(t)}catch(i){}}function Y(e){var t;return(t=he.get(e))!=null?t:null}var St={on:!1,listeners:new Set};function we(){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 ae(){return we().on}function be(e){let t=we().listeners;return t.add(e),()=>{t.delete(e)}}function Ae(e){return{isLocal:e.isLocal,track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},fetchWeights:()=>Promise.resolve([]),getAssignment:(t,n)=>e.getAssignment(t,n),assign:(t,n,o,i)=>e.assign(t,n,o,i),decide:()=>Promise.resolve(null),getSlotResult:t=>e.getSlotResult(t),getPersona:()=>e.getPersona(),getGraph:()=>e.getGraph(),dispose:()=>e.dispose(),destroy:()=>e.destroy()}}var xe="sentient:overrides-changed";function Z(){var e;return typeof window=="undefined"?0:(e=window.__sentient_overrides_version)!=null?e:0}function K(e){return typeof window=="undefined"?()=>{}:(window.addEventListener(xe,e),()=>window.removeEventListener(xe,e))}function _e(e){typeof window!="undefined"&&(window.__sentient_devtools_config=e)}var ht={components:new Map,slots:new Map,sections:[],listeners:new Set,version:0};function B(){if(typeof window=="undefined")return ht;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 z(){B().version+=1;for(let e of B().listeners)e()}function ee(e){return B().components.set(e.id,e),z(),()=>{B().components.delete(e.id),z()}}function te(e){return B().slots.set(e.id,e),z(),()=>{B().slots.delete(e.id),z()}}function ke(e){B().sections=[...e],z()}var Ie=require("react/jsx-runtime");function wt(){var e,t;if(typeof window=="undefined")return"desktop:direct";try{let n=(0,N.detectDeviceClass)((e=navigator.userAgent)!=null?e:""),o=(0,N.detectTrafficSource)((t=document.referrer)!=null?t:"",window.location.origin);return`${n}:${o}`}catch(n){return"desktop:direct"}}var Ce="https://api.sentient-ui.com/v1",I=(0,w.createContext)({client:null,apiKey:"",initialAssignments:{},sessionSegment:"desktop:direct",ssrFallback:"first",onAssignment:void 0,initialLayoutOrder:null,initialSlots:{},initialPersona:null,apiBaseUrl:Ce});function Re(e){var S,u;let[t,n]=(0,w.useState)(null),[o]=(0,w.useState)(()=>{var d;return(d=e.sessionSegment)!=null?d:wt()}),[i,f]=(0,w.useState)(ae());(0,w.useEffect)(()=>be(()=>f(ae())),[]),(0,w.useEffect)(()=>{if(e.consent===!1&&!e.preConsentBehavior){n(a=>(a==null||a.destroy(),null));return}let d={apiKey:e.apiKey,context:e.context,debug:e.debug,initialAssignments:e.initialAssignments,sessionSegment:o,consent:e.consent,preConsentBehavior:e.preConsentBehavior,respectDoNotTrack:e.respectDoNotTrack,ssrSessionId:e.ssrSessionId,country:e.country,localMode:e.localMode,initialSlots:e.initialSlots,initialPersona:e.initialPersona,ingestUrl:e.apiBaseUrl?`${e.apiBaseUrl.replace(/\/$/,"")}/events`:void 0},g=!1,l=null;return e.enableGraph?import("@sentientui/core/graph").then(({init:a})=>{g||(l=a(J(E({},d),{graph:!0})),n(l))}):(l=(0,N.init)(d),n(l)),()=>{g=!0,l==null||l.dispose()}},[e.consent]),(0,w.useEffect)(()=>{if(!t)return;let d=!1,g=async()=>{if(d)return;let a;try{a=await t.fetchWeights()}catch(b){return}if(!d)for(let b of a){let m={componentId:b.componentId,updatedAt:b.updatedAt,variants:b.variants.map(A=>{var v;return{variantId:A.variantId,pulls:A.pulls,avgReward:(v=A.avgReward)!=null?v:0}})};Q(b.componentId,m)}};g();let l=setInterval(()=>{g()},6e4);return()=>{d=!0,clearInterval(l)}},[t]);let s=(S=e.ssrFallback)!=null?S:"first",r=(u=e.apiBaseUrl)!=null?u:Ce;(0,w.useEffect)(()=>{var d;typeof process!="undefined"&&((d=process.env)==null?void 0:d.NODE_ENV)==="production"||_e({apiKey:e.apiKey,apiBaseUrl:r,isLocal:(t==null?void 0:t.isLocal)===!0})},[t,e.apiKey,r]),(0,w.useEffect)(()=>{e.initialLayoutOrder&&e.initialLayoutOrder.length>0&&ke(e.initialLayoutOrder)},[e.initialLayoutOrder]);let p=(0,w.useMemo)(()=>t&&i?Ae(t):t,[t,i]),c=(0,w.useMemo)(()=>{var d,g,l,a;return{client:p,apiKey:e.apiKey,initialAssignments:(d=e.initialAssignments)!=null?d:{},sessionSegment:o,ssrFallback:s,onAssignment:e.onAssignment,initialLayoutOrder:(g=e.initialLayoutOrder)!=null?g:null,initialSlots:(l=e.initialSlots)!=null?l:{},initialPersona:(a=e.initialPersona)!=null?a:null,apiBaseUrl:r}},[p,e.apiKey,e.initialAssignments,o,s,e.onAssignment,e.initialLayoutOrder,e.initialSlots,e.initialPersona,r]);return(0,Ie.jsx)(I.Provider,{value:c,children:e.children})}function k(){return(0,w.useContext)(I).client}function P(){return(0,w.useContext)(I).apiKey}function ne(){return(0,w.useContext)(I).initialAssignments}function ie(){return(0,w.useContext)(I).sessionSegment}function Ge(){return(0,w.useContext)(I).ssrFallback}function re(){return(0,w.useContext)(I).onAssignment}function Ee(){let e=(0,w.useContext)(I).initialLayoutOrder,t=(0,w.useSyncExternalStore)(K,()=>{var n;return typeof window=="undefined"?null:(n=window.__sentient_layout_override)!=null?n:null},()=>null);return t!=null?t:e}function Oe(){return(0,w.useContext)(I).initialSlots}function Le(){return(0,w.useContext)(I).apiBaseUrl}var x=require("react"),De=require("@sentientui/core");var L=require("react");function bt(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 f=i.indexOf(":");if(f!==-1&&i.slice(0,f)===e)return i.slice(f+1)}}catch(o){}return null}function Pe(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 $(e,t,n,o){let i=ne(),f=Ge(),s=k(),r=ie(),p=re(),c=(0,L.useRef)(null);(0,L.useSyncExternalStore)(K,Z,()=>0);let S=bt(e),u=S&&t.includes(S)?S:null,d=(0,L.useRef)(null);u&&d.current!==u&&(d.current=u,console.info(`[sentient] override active: ${e} -> ${u}`));let g=(()=>{var v,h;if(u)return{variantId:u,content:null,isLoading:!1};if(!s){let y=i[e];return y&&t.includes(y)?{variantId:y,content:null,isLoading:!1}:f==="first"&&t.length>0?{variantId:t[0],content:null,isLoading:!1}:{variantId:null,content:null,isLoading:!0}}let m=s.getAssignment(e,r);if(m&&(t.includes(m.variantId)||m.content))return{variantId:m.variantId,content:(v=m.content)!=null?v:null,isLoading:!1};let A=Y(e);if(A){let y=Pe(A,t);if(y)return{variantId:y,content:null,isLoading:!1}}return{variantId:(h=t[0])!=null?h:null,content:null,isLoading:!1}})(),[l,a]=(0,L.useState)(g),b=m=>{p&&c.current!==m&&(c.current=m,p(e,m))};return(0,L.useEffect)(()=>{var A;if(u||!s)return;let m=s.getAssignment(e,r);if(m&&(t.includes(m.variantId)||m.content)){a({variantId:m.variantId,content:(A=m.content)!=null?A:null,isLoading:!1}),b(m.variantId);return}a(v=>{var h;return v.variantId?v:{variantId:(h=t[0])!=null?h:null,content:null,isLoading:!1}})},[u,s,e,r]),(0,L.useEffect)(()=>{if(u||!s)return;let m=s.getAssignment(e,r);if(m&&t.includes(m.variantId))return;let A=!1;return s.assign(e,t,n,o).then(v=>{var h;A||v&&(!t.includes(v.variantId)&&!v.content||(a({variantId:v.variantId,content:(h=v.content)!=null?h:null,isLoading:!1}),b(v.variantId)))}),()=>{A=!0}},[u,s,e,r]),(0,L.useEffect)(()=>{if(!u&&s)return q(e,m=>{var h;let A=s.getAssignment(e,r);if(A&&(t.includes(A.variantId)||A.content)){a({variantId:A.variantId,content:(h=A.content)!=null?h:null,isLoading:!1});return}let v=Pe(m,t);v&&a({variantId:v,content:null,isLoading:!1})})},[u,s,e,r]),u?{variantId:u,content:null,isLoading:!1,isOverride:!0}:l}function O(){var e;return typeof process=="undefined"||((e=process.env)==null?void 0:e.NODE_ENV)!=="production"}function D(e){return typeof e=="string"?{type:"click"}:e}function U(e){return typeof e=="string"?e:e.type}var At=3e4;function xt(e,t){try{let n=`_snt_pv_${e}_${t}`;return sessionStorage.getItem(n)?!1:(sessionStorage.setItem(n,"1"),!0)}catch(n){return!0}}function _t(e){if(!(e instanceof Element))return!1;let t=e.tagName.toLowerCase();return t==="a"||t==="button"?!0:e.getAttribute("role")==="button"}function Te(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(_t(o))return!0;o=o.parentElement}return!1}function M(e,t,n){if(t.type==="weighted_composite"){let r=new Set,p=[];return t.steps.forEach(({goal:c,name:S,weight:u},d)=>{let g=()=>{r.has(d)||(r.add(d),n.fireStep(S,u,d))};if(c.type==="click"){let l=a=>{let b=a.target;b instanceof Element&&Te(b,e,c.selector)&&g()};e.addEventListener("click",l),p.push(()=>e.removeEventListener("click",l));return}if(c.type==="form_submit"){let l=a=>{a.target instanceof HTMLFormElement&&e.contains(a.target)&&g()};e.addEventListener("submit",l),p.push(()=>e.removeEventListener("submit",l));return}if(c.type==="scroll_depth"){let l=Math.max(0,Math.min(1,c.threshold)),a=new IntersectionObserver(b=>{for(let m of b)if(m.intersectionRatio>=l){g(),a.disconnect();break}},{threshold:[l]});a.observe(e),p.push(()=>a.disconnect())}}),()=>{for(let c of p)c()}}let o=t.type==="composite"?t.all:[t],i=new Set(o.map((r,p)=>p)),f=r=>{i.delete(r),i.size===0&&n.fireGoal()},s=[];return o.forEach((r,p)=>{if(r.type==="click"){let c=S=>{let u=S.target;u instanceof Element&&Te(u,e,r.selector)&&(t.type==="composite"?f(p):n.fireGoal())};e.addEventListener("click",c),s.push(()=>e.removeEventListener("click",c));return}if(r.type==="form_submit"){let c=S=>{S.target instanceof HTMLFormElement&&e.contains(S.target)&&(t.type==="composite"?f(p):n.fireGoal())};e.addEventListener("submit",c),s.push(()=>e.removeEventListener("submit",c));return}if(r.type==="scroll_depth"){let c=Math.max(0,Math.min(1,r.threshold)),S=new IntersectionObserver(u=>{for(let d of u)if(d.intersectionRatio>=c){t.type==="composite"?f(p):n.fireGoal(),S.disconnect();break}},{threshold:[c]});S.observe(e),s.push(()=>S.disconnect());return}}),()=>{for(let r of s)r()}}function W(e,t,n,o,i){var r;let f=(r=i==null?void 0:i.innerHTML)!=null?r:"",s=f!==""&&xt(n,o);e.track({projectId:t,componentId:n,variantId:o,eventType:"variant_assigned",payload:s?{previewHtml:f.slice(0,At)}:{}})}var We=require("react/jsx-runtime");function kt(e){var A;let t=k(),n=P(),o=(0,x.useMemo)(()=>Object.keys(e.variants),[e.variants]),{variantId:i,content:f,isOverride:s}=$(e.id,o,e.agentData,e.agentDataByVariant),r=(0,x.useRef)(null),[p,c]=(0,x.useState)(!1);(0,x.useEffect)(()=>{c(!0)},[]);let S=(0,x.useRef)(!1),u=(0,x.useRef)(new Set),d=(0,x.useRef)(null),g=typeof e.goal=="string"?e.goal:JSON.stringify(e.goal),l=(0,x.useMemo)(()=>D(e.goal),[g]),a=typeof e.goal=="string"?e.goal:l.type;if((0,x.useEffect)(()=>ee({id:e.id,variantIds:o,goal:a}),[e.id,o,a]),(0,x.useEffect)(()=>{var h,y;s||!t||!i||!n||d.current===i||!((y=(h=r.current)==null?void 0:h.innerHTML)!=null&&y)||(d.current=i,W(t,n,e.id,i,r.current))},[t,i,n,e.id,p,f,s]),(0,x.useEffect)(()=>{S.current=!1,u.current=new Set},[i,l]),(0,x.useEffect)(()=>{if(s||!t||!i)return;let v=r.current;if(!v)return;let h=null,y=0,R=()=>{y=Date.now(),h=setTimeout(()=>{t.track({projectId:n,componentId:e.id,variantId:i,eventType:"cursor_signal",payload:{hoverDuration:Date.now()-y}}),h=null},800)},C=()=>{h!==null&&(clearTimeout(h),h=null)};return v.addEventListener("mouseenter",R),v.addEventListener("mouseleave",C),()=>{v.removeEventListener("mouseenter",R),v.removeEventListener("mouseleave",C),h!==null&&clearTimeout(h)}},[t,i,n,e.id,s]),(0,x.useEffect)(()=>{if(s||!t||!i)return;let v=r.current;if(!v)return;let h=Date.now();return(0,De.attachMicroSignalDetectors)((y,R={})=>{var fe,ge,pe;t.track({projectId:n,componentId:e.id,variantId:i,eventType:"micro_signal",payload:E({signalType:y},R)});let C=(fe=e.microSignalGoals)==null?void 0:fe[y];if(!C||u.current.has(y))return;u.current.add(y);let ot=typeof C=="string"?C:C.name,st=typeof C=="string"?1:(ge=C.weight)!=null?ge:1,at=typeof C=="string"?0:(pe=C.stepIndex)!=null?pe:0;t.goal(ot,E({signalType:y},R),st,at)},v,h)},[t,i,n,e.id,e.microSignalGoals,s]),(0,x.useEffect)(()=>{if(s||!t||!i)return;let v=r.current;if(v)return M(v,l,{fireGoal:()=>{S.current||(S.current=!0,t.track({projectId:n,componentId:e.id,variantId:i,eventType:"goal_achieved",goalType:a,payload:{reward:1}}),t.goal(a,{componentId:e.id,variantId:i},1,0))},fireStep:(h,y,R)=>{t.track({projectId:n,componentId:e.id,variantId:i,eventType:"goal_achieved",goalType:h,payload:{reward:y}}),t.goal(h,{},y,R)}})},[t,i,n,e.id,l,a,s]),e.clientOnly&&(!p||!t)||!i)return null;let b=(A=e.variants[i])!=null?A:null,m=b===null?f:null;return O()&&b===null&&m===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.`),(0,We.jsx)("div",{ref:r,"data-sentient-id":e.id,"data-sentient-variant":i,children:b!=null?b:m})}var Me=(0,x.memo)(kt,(e,t)=>{if(e.id!==t.id||JSON.stringify(e.goal)!==JSON.stringify(t.goal)||e.microSignalGoals!==t.microSignalGoals||e.clientOnly!==t.clientOnly||e.agentData!==t.agentData||e.agentDataByVariant!==t.agentDataByVariant)return!1;if(e.variants===t.variants)return!0;let n=Object.keys(e.variants),o=Object.keys(t.variants);return n.length!==o.length?!1:n.every(i=>i in t.variants&&Object.is(e.variants[i],t.variants[i]))});var F=require("react");var Be=require("react/jsx-runtime");function Fe({id:e,default:t,component:n="span",className:o}){let i=k(),f=P(),s=re(),r=ie(),p=(0,F.useRef)(null),[c,S]=(0,F.useState)(()=>{var g,l;return(l=(g=i==null?void 0:i.getAssignment(e,r))==null?void 0:g.content)!=null?l:null}),[u,d]=(0,F.useState)(()=>{var g,l;return(l=(g=i==null?void 0:i.getAssignment(e,r))==null?void 0:g.variantId)!=null?l:null});return(0,F.useEffect)(()=>{var l;if(!i||((l=i.getAssignment(e,r))==null?void 0:l.content)!==void 0)return;let g=!1;return i.assign(e).then(a=>{if(!g){if(!a){O()&&console.warn(`[sentient] <AdaptiveText id="${e}"> assignment failed \u2014 showing default text.`);return}d(a.variantId),a.content&&S(a.content)}}),()=>{g=!0}},[i,e,r]),(0,F.useEffect)(()=>{!i||!u||!f||p.current!==u&&(p.current=u,i.track({projectId:f,componentId:e,variantId:u,eventType:"variant_assigned",payload:{}}),s==null||s(e,u))},[i,u,f,e,s]),(0,Be.jsx)(n,{className:o,children:c!=null?c:t})}var je=require("react");function Ke(e){let t=k();return(0,je.useCallback)((n,o)=>{t==null||t.componentGoal(e,n,o)},[t,e])}var $e=require("@sentientui/core"),Ue=require("@sentientui/policy"),He=require("react/jsx-runtime");function Ne(e){return JSON.stringify(e).replace(/</g,"\\u003c")}function Ct(e){return e.persona?'(function(){try{var d=document.documentElement;if(d.hasAttribute("data-sentient-persona"))return;d.setAttribute("data-sentient-persona",'+Ne(e.persona.persona)+');d.setAttribute("data-sentient-confidence",'+Ne((0,Ue.confidenceBand)(e.persona.confidence))+");}catch(e){}})();":(0,$e.renderPrePaintScript)(e.apiKey)}function Ve(e){return(0,He.jsx)("script",{"data-sentient-persona-script":"",dangerouslySetInnerHTML:{__html:Ct(e)}})}var T=require("react"),Je=require("@sentientui/policy");var V=require("react"),j=require("@sentientui/core"),Rt=require("@sentientui/policy");function oe(e,t){var S;(0,V.useSyncExternalStore)(K,Z,()=>0);let n=k(),o=Oe(),[,i]=(0,V.useReducer)(u=>u+1,0),f=typeof window!="undefined"?(S=window.__sentient_slot_overrides)==null?void 0:S[e]:void 0,s=f===void 0?o[e]:void 0,r=f===void 0&&s===void 0&&n?n.getSlotResult(e):null,p=(n==null?void 0:n.isLocal)===!0&&f===void 0&&s===void 0&&r===null;if((0,V.useEffect)(()=>{if(!p||!n)return;let u=!1;return n.decide({slots:[t]}).then(d=>{!u&&d&&i()}),()=>{u=!0}},[n,e,p]),f!==void 0)return{result:f,arm:(0,j.armOfResult)(f),source:"override"};if(s!==void 0)return{result:s,arm:(0,j.armOfResult)(s),source:"preloaded"};if(r!==null)return{result:r,arm:(0,j.armOfResult)(r),source:"client"};let c=(0,j.baselineResultFor)(t);return{result:c,arm:(0,j.armOfResult)(c),source:"baseline"}}var le=new Set;function Gt(e){return typeof CSS!="undefined"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/"/g,'\\"')}function ze(e,t,n){let o=k(),i=P(),f=(0,T.useMemo)(()=>({id:e,dims:t}),[e]),{result:s,arm:r}=oe(e,f),p=(0,T.useMemo)(()=>typeof s=="string"?{}:s,[r]);if(O()&&!le.has(e)){let d=(0,Je.validateSlotDecl)({id:e,dims:Object.fromEntries(Object.entries(t).map(([l,a])=>[l,[...a]]))}),g=Object.values(t).reduce((l,a)=>l*a.length,1);d.ok?g>4&&(le.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}") declares ${g} combinations \u2014 more than the recommended 4. Each extra combination needs more traffic to learn; consider fewer dims/values.`)):(le.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}"): invalid declaration \u2014 ${d.reason}. Serving baseline.`))}let c=(n==null?void 0:n.goal)===void 0?null:typeof n.goal=="string"?n.goal:JSON.stringify(n.goal);(0,T.useEffect)(()=>te({id:e,dims:t}),[e]);let S=(0,T.useRef)(null);(0,T.useEffect)(()=>{!o||S.current===r||(S.current=r,W(o,i,e,r,null))},[o,i,e,r]),(0,T.useEffect)(()=>{if(!o||!(n!=null&&n.goal))return;let d=document.querySelector(`[data-sentient-slot="${Gt(e)}"]`);if(!d){O()&&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 g=U(n.goal),l=!1;return M(d,D(n.goal),{fireGoal:()=>{l||(l=!0,o.componentGoal(e,g))},fireStep:(a,b)=>{o.componentGoal(e,a,{reward:b})}})},[o,e,c,r]);let u=(0,T.useMemo)(()=>{let d={"data-sentient-slot":e};for(let[g,l]of Object.entries(p))d[`data-${g}`]=l;return d},[e,p]);return{tokens:p,props:u}}var _=require("react"),qe=require("@sentientui/core");var Xe=new Set;function Qe(e,t){var h;if(O()&&!t.goal)throw new Error(`[sentient] useAdaptive("${e}"): a goal is required \u2014 without one the optimizer accumulates exposures with no rewards and cannot learn. Pass e.g. goal: 'buy_click'.`);let n=k(),o=P(),i=(0,_.useMemo)(()=>Object.keys(t.variants),[e]),{variantId:f,isOverride:s}=$(e,i),r=(h=f!=null?f:i[0])!=null?h:"",p=t.variants[r],[c,S]=(0,_.useState)(null),u=(0,_.useRef)(null),d=(0,_.useCallback)(y=>{u.current=y,S(y)},[]),g=typeof t.goal=="string"?t.goal:JSON.stringify(t.goal),l=(0,_.useMemo)(()=>D(t.goal),[g]),a=U(t.goal);(0,_.useEffect)(()=>ee({id:e,variantIds:i,goal:a}),[e,i,a]);let b=(0,_.useRef)(null);(0,_.useEffect)(()=>{s||!n||!r||!c||b.current!==r&&(b.current=r,W(n,o,e,r,c))},[n,o,e,r,c,s]);let m=(0,_.useRef)(!1);(0,_.useEffect)(()=>{m.current=!1},[r,g]),(0,_.useEffect)(()=>{if(!s&&!(!n||!r||!c))return M(c,l,{fireGoal:()=>{m.current||(m.current=!0,n.track({projectId:o,componentId:e,variantId:r,eventType:"goal_achieved",goalType:a,payload:{reward:1}}),n.goal(a,{componentId:e,variantId:r},1,0))},fireStep:(y,R,C)=>{n.track({projectId:o,componentId:e,variantId:r,eventType:"goal_achieved",goalType:y,payload:{reward:R}}),n.goal(y,{},R,C)}})},[n,c,r,o,e,l,a,s]),(0,_.useEffect)(()=>{if(s||!n||!r||!c)return;let y=Date.now();return(0,qe.attachMicroSignalDetectors)((R,C={})=>{n.track({projectId:o,componentId:e,variantId:r,eventType:"micro_signal",payload:E({signalType:R},C)})},c,y)},[n,c,r,o,e,s]),(0,_.useEffect)(()=>{if(!O()||!n)return;let y=setTimeout(()=>{!u.current&&!Xe.has(e)&&(Xe.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(y)},[n,e]);let A=(0,_.useCallback)((y,R)=>{s||n==null||n.componentGoal(e,y!=null?y:a,R)},[n,e,a,s]),v=(0,_.useMemo)(()=>({ref:d,"data-sentient-id":e,"data-sentient-variant":r}),[d,e,r]);return{variant:r,value:p,bind:v,fireGoal:A}}var G=require("react");var Ze=require("react/jsx-runtime"),se=new Set;function Ye(e){var l;let t=k(),n=P(),o=(0,G.useRef)(null),i=(0,G.useMemo)(()=>Object.keys(e.arrangements),[e.id]),f=(0,G.useMemo)(()=>E({id:e.id,arms:i},e.baseline!==void 0?{baseline:e.baseline}:{}),[e.id,i,e.baseline]),{arm:s}=oe(e.id,f);O()&&e.baseline!==void 0&&e.baseline!==i[0]&&!se.has(e.id+":baseline")&&(se.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 r=G.Children.toArray(e.children).filter(G.isValidElement),p=new Map;for(let a of r)p.set(String((l=a.key)!=null?l:"").replace(/^\.\$/,""),a);let c=e.arrangements[s],S=c!==void 0&&c.length===r.length&&c.every(a=>p.has(a));O()&&c!==void 0&&!S&&!se.has(e.id+":keys")&&(se.add(e.id+":keys"),console.warn(`[sentient] <AdaptiveGroup id="${e.id}">: arrangement "${s}" [${c.join(", ")}] does not match the children's keys \u2014 rendering declaration order (fail-safe).`));let u=S?c.map(a=>p.get(a)):r;(0,G.useEffect)(()=>te({id:e.id,arms:Object.keys(e.arrangements)}),[e.id]);let d=(0,G.useRef)(null);(0,G.useEffect)(()=>{!t||d.current===s||(d.current=s,W(t,n,e.id,s,o.current))},[t,n,e.id,s]);let g=e.goal===void 0?null:typeof e.goal=="string"?e.goal:JSON.stringify(e.goal);return(0,G.useEffect)(()=>{if(!t||e.goal===void 0)return;let a=o.current;if(!a)return;let b=U(e.goal),m=!1;return M(a,D(e.goal),{fireGoal:()=>{m||(m=!0,t.componentGoal(e.id,b))},fireStep:(A,v)=>{t.componentGoal(e.id,A,{reward:v})}})},[t,e.id,g,s]),(0,Ze.jsx)("div",{ref:o,"data-sentient-id":e.id,"data-sentient-variant":s,children:u})}var ce=require("@sentientui/core");var Et=["page","blocks","layoutOrder"],et=new Map;function tt(e,t){et.set(e,t)}function ue(e){return et.get(e)}function nt(e){var i,f;let t=(f=(i=e.content)!=null?i:ue(e.page))!=null?f:{},n={};for(let[s,r]of Object.entries(t))Et.includes(s)||(n[s]=r);let o=J(E({},n),{page:e.page,blocks:e.blocks});return e.layoutOrder&&(o.layoutOrder=e.layoutOrder),o}function it(e){return`<script type="application/ld+json">${de(e)}</script>`}function de(e){return JSON.stringify(E({"@context":"https://schema.org","@type":"WebPage"},e)).replace(/</g,"\\u003c")}function rt(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
  `}0&&(module.exports={Adaptive,AdaptiveGroup,AdaptiveProvider,AdaptiveText,SentientPersonaScript,buildAgentFeed,defineAgentContent,detectSegment,getAgentContent,getWeights,renderAgentJsonLd,renderAgentJsonLdBody,renderAgentMarkdown,subscribeWeights,updateWeights,useAdaptive,useAdaptiveApiBaseUrl,useAdaptiveGoal,useAdaptiveTokens,useAssignment,useInitialAssignments,useLayoutOrder,useSentient});
5
5
  //# sourceMappingURL=index.js.map