@sentientui/react 0.16.3 → 0.17.0

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