@sentientui/react 0.17.3 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/devtools.js +1 -1
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs +1 -1
- package/dist/devtools.mjs.map +1 -1
- package/dist/index.d.cts +36 -6
- package/dist/index.d.ts +36 -6
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/next/adaptive-root.js +2 -2
- package/dist/next/adaptive-root.js.map +1 -1
- package/dist/testing/node.js.map +1 -1
- package/dist/testing/node.mjs.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +1 -1
- package/dist/testing.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -234,11 +234,6 @@ type AdaptiveTextProps = {
|
|
|
234
234
|
*/
|
|
235
235
|
declare function AdaptiveText({ id, default: defaultText, component: Tag, className, goal: goalProp, }: AdaptiveTextProps): react_jsx_runtime.JSX.Element;
|
|
236
236
|
|
|
237
|
-
declare global {
|
|
238
|
-
interface Window {
|
|
239
|
-
__sentient_overrides?: Record<string, string>;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
237
|
type AssignmentState = {
|
|
243
238
|
variantId: string | null;
|
|
244
239
|
/** Populated when the assigned variant is a dashboard-managed text variant. */
|
|
@@ -288,6 +283,11 @@ type FireGoal = (goalType: string, opts?: ComponentGoalOptions) => void;
|
|
|
288
283
|
* firing. Use this for imperative handlers (click, form submit, custom events);
|
|
289
284
|
* for purely declarative goals prefer `<Adaptive goal={...}>`.
|
|
290
285
|
*
|
|
286
|
+
* Each call records one bandit reward event AND one session goal-funnel record.
|
|
287
|
+
* It has no cross-call latch, so a component that *also* declares a matching
|
|
288
|
+
* `<Adaptive goal>` (or fires this on every click) records one conversion per
|
|
289
|
+
* call — keep goal labels unique per conversion so counts aren't inflated.
|
|
290
|
+
*
|
|
291
291
|
* @example
|
|
292
292
|
* const fireContact = useAdaptiveGoal('hero_headline');
|
|
293
293
|
* <button onClick={() => fireContact('hero_contact', { metadata: { method } })}>Call</button>
|
|
@@ -376,6 +376,36 @@ declare function useAdaptive<T>(id: string, config: {
|
|
|
376
376
|
goal: string | GoalConfig;
|
|
377
377
|
}): UseAdaptiveResult<T>;
|
|
378
378
|
|
|
379
|
+
declare global {
|
|
380
|
+
interface Window {
|
|
381
|
+
/** Test/devtools forcing: slot id → forced result (applyScenario sets this). */
|
|
382
|
+
__sentient_slot_overrides?: Record<string, SlotResult>;
|
|
383
|
+
/** Test/devtools forcing: forced persona (applyScenario sets this). */
|
|
384
|
+
__sentient_persona_override?: {
|
|
385
|
+
persona: string;
|
|
386
|
+
confidence?: number;
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
type AdaptivePersona = {
|
|
391
|
+
persona: string;
|
|
392
|
+
confidence: number;
|
|
393
|
+
band: 'low' | 'medium' | 'high';
|
|
394
|
+
};
|
|
395
|
+
/**
|
|
396
|
+
* The current persona estimate for React consumers, resolved in priority
|
|
397
|
+
* order: a forced override (devtools / `applyScenario` / `?sentient_persona=`)
|
|
398
|
+
* → the SSR-provided `initialPersona` → the live client estimate (adopted
|
|
399
|
+
* attributes / snapshot / decide). Returns `null` when nothing is known yet.
|
|
400
|
+
*
|
|
401
|
+
* Hydration-safe: the first render (server + pre-hydration client) uses ONLY
|
|
402
|
+
* the SSR-provided persona so server and client agree; the override channel and
|
|
403
|
+
* the live client estimate — neither visible to the server — are read after
|
|
404
|
+
* mount. Re-renders when a persona/variant override is written, so devtools or
|
|
405
|
+
* a test forcing a persona mid-session takes effect immediately.
|
|
406
|
+
*/
|
|
407
|
+
declare function useAdaptivePersona(): AdaptivePersona | null;
|
|
408
|
+
|
|
379
409
|
type AdaptiveGroupProps = {
|
|
380
410
|
id: string;
|
|
381
411
|
/** Arrangement id → ordered child keys. FIRST key = baseline default. */
|
|
@@ -466,4 +496,4 @@ declare function renderAgentJsonLdBody(feed: AgentFeed): string;
|
|
|
466
496
|
/** Render the feed as Markdown for agents that negotiate `text/markdown`. */
|
|
467
497
|
declare function renderAgentMarkdown(feed: AgentFeed): string;
|
|
468
498
|
|
|
469
|
-
export { Adaptive, AdaptiveGroup, type AdaptiveGroupProps, type AdaptiveProps, AdaptiveProvider, type AdaptiveProviderProps, AdaptiveText, type AdaptiveTextProps, type AgentBlock, type AgentFeed, type AssignmentState, type ClickGoal, type ComponentWeights, type CompositeGoal, type FireGoal, type FormSubmitGoal, type GoalConfig, type MicroSignalGoalConfig, type MicroSignalGoals, type ScrollDepthGoal, SentientPersonaScript, type SentientPersonaScriptProps, type SsrFallback, type UseAdaptiveBind, type UseAdaptiveResult, type UseAdaptiveTokensOptions, type UseAdaptiveTokensResult, type VariantWeight, type WeightedCompositeGoal, type WeightedStep, buildAgentFeed, defineAgentContent, getAgentContent, renderAgentJsonLd, renderAgentJsonLdBody, renderAgentMarkdown, useAdaptive, useAdaptiveApiBaseUrl, useAdaptiveGoal, useAdaptiveTokens, useAssignment, useInitialAssignments, useLayoutOrder, useSentient };
|
|
499
|
+
export { Adaptive, AdaptiveGroup, type AdaptiveGroupProps, type AdaptivePersona, type AdaptiveProps, AdaptiveProvider, type AdaptiveProviderProps, AdaptiveText, type AdaptiveTextProps, type AgentBlock, type AgentFeed, type AssignmentState, type ClickGoal, type ComponentWeights, type CompositeGoal, type FireGoal, type FormSubmitGoal, type GoalConfig, type MicroSignalGoalConfig, type MicroSignalGoals, type ScrollDepthGoal, SentientPersonaScript, type SentientPersonaScriptProps, type SsrFallback, type UseAdaptiveBind, type UseAdaptiveResult, type UseAdaptiveTokensOptions, type UseAdaptiveTokensResult, type VariantWeight, type WeightedCompositeGoal, type WeightedStep, buildAgentFeed, defineAgentContent, getAgentContent, renderAgentJsonLd, renderAgentJsonLdBody, renderAgentMarkdown, useAdaptive, useAdaptiveApiBaseUrl, useAdaptiveGoal, useAdaptivePersona, useAdaptiveTokens, useAssignment, useInitialAssignments, useLayoutOrder, useSentient };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
"use strict";var ft=Object.create;var H=Object.defineProperty,gt=Object.defineProperties,pt=Object.getOwnPropertyDescriptor,mt=Object.getOwnPropertyDescriptors,vt=Object.getOwnPropertyNames,ge=Object.getOwnPropertySymbols,yt=Object.getPrototypeOf,me=Object.prototype.hasOwnProperty,St=Object.prototype.propertyIsEnumerable;var pe=(e,t,n)=>t in e?H(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,T=(e,t)=>{for(var n in t||(t={}))me.call(t,n)&&pe(e,n,t[n]);if(ge)for(var n of ge(t))St.call(t,n)&&pe(e,n,t[n]);return e},z=(e,t)=>gt(e,mt(t));var ht=(e,t)=>{for(var n in t)H(e,n,{get:t[n],enumerable:!0})},ve=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of vt(t))!me.call(e,i)&&i!==n&&H(e,i,{get:()=>t[i],enumerable:!(o=pt(t,i))||o.enumerable});return e};var ye=(e,t,n)=>(n=e!=null?ft(yt(e)):{},ve(t||!e||!e.__esModule?H(n,"default",{value:e,enumerable:!0}):n,e)),bt=e=>ve(H({},"__esModule",{value:!0}),e);var It={};ht(It,{Adaptive:()=>We,AdaptiveGroup:()=>nt,AdaptiveProvider:()=>Ee,AdaptiveText:()=>je,SentientPersonaScript:()=>ze,buildAgentFeed:()=>st,defineAgentContent:()=>ot,detectSegment:()=>ae.deriveSessionSegment,getAgentContent:()=>le,renderAgentJsonLd:()=>at,renderAgentJsonLdBody:()=>ue,renderAgentMarkdown:()=>lt,useAdaptive:()=>tt,useAdaptiveApiBaseUrl:()=>Pe,useAdaptiveGoal:()=>$e,useAdaptiveTokens:()=>Ye,useAssignment:()=>V,useInitialAssignments:()=>ee,useLayoutOrder:()=>Ie,useSentient:()=>R});module.exports=bt(It);var A=require("react"),$=require("@sentientui/core");var Se=new Map,q=new Map;function he(e,t){let n=q.get(e);return n||(n=new Set,q.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&q.delete(e)}}function be(e,t){Se.set(e,t);let n=q.get(e);if(n)for(let o of n)try{o(t)}catch(i){}}function we(e){var t;return(t=Se.get(e))!=null?t:null}var wt={on:!1,listeners:new Set};function Ae(){if(typeof window=="undefined")return wt;let e=window;return e.__sentient_preview||(e.__sentient_preview={on:!1,listeners:new Set}),e.__sentient_preview}function oe(){return Ae().on}function xe(e){let t=Ae().listeners;return t.add(e),()=>{t.delete(e)}}function ke(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 Ce="sentient:overrides-changed";function Q(){var e;return typeof window=="undefined"?0:(e=window.__sentient_overrides_version)!=null?e:0}function U(e){return typeof window=="undefined"?()=>{}:(window.addEventListener(Ce,e),()=>window.removeEventListener(Ce,e))}function _e(e){typeof window!="undefined"&&(window.__sentient_devtools_config=e)}var At={components:new Map,slots:new Map,sections:[],listeners:new Set,version:0};function K(){if(typeof window=="undefined")return At;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 X(){K().version+=1;for(let e of K().listeners)e()}function Y(e){return K().components.set(e.id,e),X(),()=>{K().components.delete(e.id),X()}}function Z(e){return K().slots.set(e.id,e),X(),()=>{K().slots.delete(e.id),X()}}function Re(e){K().sections=[...e],X()}var De=require("react/jsx-runtime");function xt(){var e,t;if(typeof window=="undefined")return"desktop:direct";try{let n=(0,$.detectDeviceClass)((e=navigator.userAgent)!=null?e:""),o=(0,$.detectTrafficSource)((t=document.referrer)!=null?t:"",window.location.origin);return`${n}:${o}`}catch(n){return"desktop:direct"}}var Ge="https://api.sentient-ui.com/v1",P=(0,A.createContext)({client:null,apiKey:"",initialAssignments:{},sessionSegment:"desktop:direct",ssrFallback:"first",onAssignment:void 0,initialLayoutOrder:null,initialSlots:{},initialPersona:null,apiBaseUrl:Ge,debug:!1});function Ee(e){var m,h;let[t,n]=(0,A.useState)(null),[o]=(0,A.useState)(()=>{var S;return(S=e.sessionSegment)!=null?S:xt()}),[i,a]=(0,A.useState)(oe());(0,A.useEffect)(()=>xe(()=>a(oe())),[]),(0,A.useEffect)(()=>{if(e.consent===!1&&!e.preConsentBehavior){n(b=>(b==null||b.destroy(),null));return}let S={apiKey:e.apiKey,context:e.context,debug:e.debug,initialAssignments:e.initialAssignments,sessionSegment:o,consent:e.consent,preConsentBehavior:e.preConsentBehavior,respectDoNotTrack:e.respectDoNotTrack,ssrSessionId:e.ssrSessionId,country:e.country,localMode:e.localMode,initialSlots:e.initialSlots,initialPersona:e.initialPersona,ingestUrl:e.apiBaseUrl?`${e.apiBaseUrl.replace(/\/$/,"")}/events`:void 0},g=!1,u=null,p=null,c=b=>{e.engagement!==!1&&import("@sentientui/core/engagement").then(({startEngagementCapture:x})=>{g||(p=x(b,{apiKey:e.apiKey,apiBase:e.apiBaseUrl?e.apiBaseUrl.replace(/\/$/,""):void 0}))})};return e.enableGraph!==!1?import("@sentientui/core/graph").then(({init:b})=>{g||(u=b(z(T({},S),{graph:!0})),n(u),c(u))}):(u=(0,$.init)(S),n(u),c(u)),()=>{g=!0,p==null||p(),u==null||u.dispose()}},[e.consent]),(0,A.useEffect)(()=>{if(!t)return;let S=!1,g=async()=>{if(S)return;let p;try{p=await t.fetchWeights()}catch(c){return}if(!S)for(let c of p){let b={componentId:c.componentId,updatedAt:c.updatedAt,variants:c.variants.map(x=>{var I;return{variantId:x.variantId,pulls:x.pulls,avgReward:(I=x.avgReward)!=null?I:0}})};be(c.componentId,b)}};g();let u=setInterval(()=>{g()},6e4);return()=>{S=!0,clearInterval(u)}},[t]);let r=(m=e.ssrFallback)!=null?m:"first",s=(h=e.apiBaseUrl)!=null?h:Ge;(0,A.useEffect)(()=>{var S;typeof process!="undefined"&&((S=process.env)==null?void 0:S.NODE_ENV)==="production"||_e({apiKey:e.apiKey,apiBaseUrl:s,isLocal:(t==null?void 0:t.isLocal)===!0})},[t,e.apiKey,s]),(0,A.useEffect)(()=>{e.initialLayoutOrder&&e.initialLayoutOrder.length>0&&Re(e.initialLayoutOrder)},[e.initialLayoutOrder]);let l=(0,A.useMemo)(()=>t&&i?ke(t):t,[t,i]),y=(0,A.useMemo)(()=>{var S,g,u,p,c;return{client:l,apiKey:e.apiKey,initialAssignments:(S=e.initialAssignments)!=null?S:{},sessionSegment:o,ssrFallback:r,onAssignment:e.onAssignment,initialLayoutOrder:(g=e.initialLayoutOrder)!=null?g:null,initialSlots:(u=e.initialSlots)!=null?u:{},initialPersona:(p=e.initialPersona)!=null?p:null,apiBaseUrl:s,debug:(c=e.debug)!=null?c:!1}},[l,e.apiKey,e.initialAssignments,o,r,e.onAssignment,e.initialLayoutOrder,e.initialSlots,e.initialPersona,s,e.debug]);return(0,De.jsx)(P.Provider,{value:y,children:e.children})}function R(){return(0,A.useContext)(P).client}function D(){return(0,A.useContext)(P).apiKey}function ee(){return(0,A.useContext)(P).initialAssignments}function te(){return(0,A.useContext)(P).sessionSegment}function Le(){return(0,A.useContext)(P).ssrFallback}function ne(){return(0,A.useContext)(P).onAssignment}function Oe(){return(0,A.useContext)(P).debug}function Ie(){let e=(0,A.useContext)(P).initialLayoutOrder,t=(0,A.useSyncExternalStore)(U,()=>{var n;return typeof window=="undefined"?null:(n=window.__sentient_layout_override)!=null?n:null},()=>null);return t!=null?t:e}function Te(){return(0,A.useContext)(P).initialSlots}function Pe(){return(0,A.useContext)(P).apiBaseUrl}var C=require("react"),Fe=require("@sentientui/core");var E=require("react");function kt(e){var n;if(typeof window=="undefined")return null;let t=(n=window.__sentient_overrides)==null?void 0:n[e];if(t)return t;try{let o=new URLSearchParams(window.location.search);for(let i of o.getAll("sentient_variant")){let a=i.indexOf(":");if(a!==-1&&i.slice(0,a)===e)return i.slice(a+1)}}catch(o){}return null}var Ct=5;function Me(e,t){var o,i;let n=null;for(let a of e.variants){if(!t.includes(a.variantId))continue;let r=(o=a.pulls)!=null?o:0,s=r>0?r*a.avgReward/(r+Ct):0;(!n||s>n.score)&&(n={variantId:a.variantId,score:s})}return(i=n==null?void 0:n.variantId)!=null?i:null}function V(e,t,n,o){let i=ee(),a=Le(),r=R(),s=te(),l=ne(),y=Oe(),m=(0,E.useRef)(null);(0,E.useSyncExternalStore)(U,Q,()=>0);let[h,S]=(0,E.useState)(!1);(0,E.useEffect)(()=>S(!0),[]);let g=h?kt(e):null,u=g&&t.includes(g)?g:null,p=(0,E.useRef)(null);(0,E.useEffect)(()=>{y&&u&&p.current!==u&&(p.current=u,console.info(`[sentient] override active: ${e} -> ${u}`))},[y,u,e]);let c=(()=>{var f,w;if(u)return{variantId:u,content:null,isLoading:!1,settled:!0};if(!r){let k=i[e];return k&&t.includes(k)?{variantId:k,content:null,isLoading:!1,settled:!0}:a==="first"&&t.length>0?{variantId:t[0],content:null,isLoading:!1,settled:!1}:{variantId:null,content:null,isLoading:!0,settled:!1}}let d=r.getAssignment(e,s);if(d&&(t.includes(d.variantId)||d.content))return{variantId:d.variantId,content:(f=d.content)!=null?f:null,isLoading:!1,settled:!0};let v=we(e);if(v){let k=Me(v,t);if(k)return{variantId:k,content:null,isLoading:!1,settled:!0}}return{variantId:(w=t[0])!=null?w:null,content:null,isLoading:!1,settled:!1}})(),[b,x]=(0,E.useState)(c),I=d=>{l&&m.current!==d&&(m.current=d,l(e,d))};return(0,E.useEffect)(()=>{var v;if(u||!r)return;let d=r.getAssignment(e,s);if(d&&(t.includes(d.variantId)||d.content)){x({variantId:d.variantId,content:(v=d.content)!=null?v:null,isLoading:!1,settled:!0}),I(d.variantId);return}x(f=>{var w;return f.variantId?f:{variantId:(w=t[0])!=null?w:null,content:null,isLoading:!1,settled:!1}})},[u,r,e,s]),(0,E.useEffect)(()=>{if(u||!r)return;let d=r.getAssignment(e,s);if(d&&t.includes(d.variantId))return;let v=!1;return r.assign(e,t,n,o).then(f=>{var w;v||f&&(!t.includes(f.variantId)&&!f.content||(x({variantId:f.variantId,content:(w=f.content)!=null?w:null,isLoading:!1,settled:!0}),I(f.variantId)))}),()=>{v=!0}},[u,r,e,s]),(0,E.useEffect)(()=>{if(!u&&r)return he(e,d=>{var w;let v=r.getAssignment(e,s);if(v&&(t.includes(v.variantId)||v.content)){x({variantId:v.variantId,content:(w=v.content)!=null?w:null,isLoading:!1,settled:!0});return}let f=Me(d,t);f&&x({variantId:f,content:null,isLoading:!1,settled:!0})})},[u,r,e,s]),u?{variantId:u,content:null,isLoading:!1,settled:!0,isOverride:!0}:b}function G(){var e;return typeof process=="undefined"||((e=process.env)==null?void 0:e.NODE_ENV)!=="production"}function M(e){return typeof e=="string"?{type:"click"}:e}function J(e){return typeof e=="string"?e:e.type}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 Be(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 B(e,t,n){if(t.type==="weighted_composite"){let s=new Set,l=[];return t.steps.forEach(({goal:y,name:m,weight:h},S)=>{let g=()=>{s.has(S)||(s.add(S),n.fireStep(m,h,S))};if(y.type==="click"){let u=p=>{let c=p.target;c instanceof Element&&Be(c,e,y.selector)&&g()};e.addEventListener("click",u),l.push(()=>e.removeEventListener("click",u));return}if(y.type==="form_submit"){let u=p=>{p.target instanceof HTMLFormElement&&e.contains(p.target)&&g()};e.addEventListener("submit",u),l.push(()=>e.removeEventListener("submit",u));return}if(y.type==="scroll_depth"){let u=Math.max(0,Math.min(1,y.threshold)),p=new IntersectionObserver(c=>{for(let b of c)if(b.intersectionRatio>=u){g(),p.disconnect();break}},{threshold:[u]});p.observe(e),l.push(()=>p.disconnect())}}),()=>{for(let y of l)y()}}let o=t.type==="composite"?t.all:[t],i=new Set(o.map((s,l)=>l)),a=s=>{i.delete(s),i.size===0&&n.fireGoal()},r=[];return o.forEach((s,l)=>{if(s.type==="click"){let y=m=>{let h=m.target;h instanceof Element&&Be(h,e,s.selector)&&(t.type==="composite"?a(l):n.fireGoal())};e.addEventListener("click",y),r.push(()=>e.removeEventListener("click",y));return}if(s.type==="form_submit"){let y=m=>{m.target instanceof HTMLFormElement&&e.contains(m.target)&&(t.type==="composite"?a(l):n.fireGoal())};e.addEventListener("submit",y),r.push(()=>e.removeEventListener("submit",y));return}if(s.type==="scroll_depth"){let y=Math.max(0,Math.min(1,s.threshold)),m=new IntersectionObserver(h=>{for(let S of h)if(S.intersectionRatio>=y){t.type==="composite"?a(l):n.fireGoal(),m.disconnect();break}},{threshold:[y]});m.observe(e),r.push(()=>m.disconnect());return}}),()=>{for(let s of r)s()}}function W(e,t,n,o){e.track({projectId:t,componentId:n,variantId:o,eventType:"variant_assigned",payload:{}})}var Ke=require("react/jsx-runtime");function Rt(e){var I;let t=R(),n=D(),o=(0,C.useMemo)(()=>Object.keys(e.variants),[e.variants]),{variantId:i,content:a,isOverride:r,settled:s}=V(e.id,o,e.agentData,e.agentDataByVariant),l=(0,C.useRef)(null),[y,m]=(0,C.useState)(!1);(0,C.useEffect)(()=>{m(!0)},[]);let h=(0,C.useRef)(!1),S=(0,C.useRef)(new Set),g=(0,C.useRef)(null),u=typeof e.goal=="string"?e.goal:JSON.stringify(e.goal),p=(0,C.useMemo)(()=>M(e.goal),[u]),c=typeof e.goal=="string"?e.goal:p.type;if((0,C.useEffect)(()=>Y({id:e.id,variantIds:o,goal:c}),[e.id,o,c]),(0,C.useEffect)(()=>{r||s&&(!t||!i||!n||g.current!==i&&(g.current=i,W(t,n,e.id,i)))},[t,i,n,e.id,r,s]),(0,C.useEffect)(()=>{h.current=!1,S.current=new Set},[i,p]),(0,C.useEffect)(()=>{if(r||!t||!i)return;let d=l.current;if(!d)return;let v=null,f=0,w=()=>{f=Date.now(),v=setTimeout(()=>{t.track({projectId:n,componentId:e.id,variantId:i,eventType:"cursor_signal",payload:{hoverDuration:Date.now()-f}}),v=null},800)},k=()=>{v!==null&&(clearTimeout(v),v=null)};return d.addEventListener("mouseenter",w),d.addEventListener("mouseleave",k),()=>{d.removeEventListener("mouseenter",w),d.removeEventListener("mouseleave",k),v!==null&&clearTimeout(v)}},[t,i,n,e.id,r]),(0,C.useEffect)(()=>{if(r||!t||!i)return;let d=l.current;if(!d)return;let v=Date.now();return(0,Fe.attachMicroSignalDetectors)((f,w={})=>{var ce,de,fe;t.track({projectId:n,componentId:e.id,variantId:i,eventType:"micro_signal",payload:T({signalType:f},w)});let k=(ce=e.microSignalGoals)==null?void 0:ce[f];if(!k||S.current.has(f))return;S.current.add(f);let ut=typeof k=="string"?k:k.name,ct=typeof k=="string"?1:(de=k.weight)!=null?de:1,dt=typeof k=="string"?0:(fe=k.stepIndex)!=null?fe:0;t.goal(ut,T({signalType:f},w),ct,dt)},d,v)},[t,i,n,e.id,e.microSignalGoals,r]),(0,C.useEffect)(()=>{if(r||!t||!i)return;let d=l.current;if(d)return B(d,p,{fireGoal:()=>{h.current||(h.current=!0,t.track({projectId:n,componentId:e.id,variantId:i,eventType:"goal_achieved",goalType:c,payload:{reward:1}}),t.goal(c,{componentId:e.id,variantId:i},1,0))},fireStep:(v,f,w)=>{t.track({projectId:n,componentId:e.id,variantId:i,eventType:"goal_achieved",goalType:v,payload:{reward:f}}),t.goal(v,{},f,w)}})},[t,i,n,e.id,p,c,r]),e.clientOnly&&(!y||!t)||!i)return null;let b=(I=e.variants[i])!=null?I:null,x=b===null?a:null;return G()&&b===null&&x===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,Ke.jsx)("div",{ref:l,"data-sentient-id":e.id,"data-sentient-variant":i,children:b!=null?b:x})}var We=(0,C.memo)(Rt,(e,t)=>{if(e.id!==t.id||e.goal!==t.goal&&JSON.stringify(e.goal)!==JSON.stringify(t.goal)||e.microSignalGoals!==t.microSignalGoals||e.clientOnly!==t.clientOnly||e.agentData!==t.agentData||e.agentDataByVariant!==t.agentDataByVariant)return!1;if(e.variants===t.variants)return!0;let n=Object.keys(e.variants),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 L=require("react");var Ne=require("react/jsx-runtime");function je({id:e,default:t,component:n="span",className:o,goal:i}){let a=R(),r=D(),s=ne(),l=te(),y=(0,L.useRef)(null),m=(0,L.useRef)(null),[h,S]=(0,L.useState)(()=>{var d,v;return(v=(d=a==null?void 0:a.getAssignment(e,l))==null?void 0:d.content)!=null?v:null}),[g,u]=(0,L.useState)(()=>{var d,v;return(v=(d=a==null?void 0:a.getAssignment(e,l))==null?void 0:d.variantId)!=null?v:null});(0,L.useEffect)(()=>{var v;if(!a||((v=a.getAssignment(e,l))==null?void 0:v.content)!==void 0)return;let d=!1;return a.assign(e).then(f=>{if(!d){if(!f){G()&&console.warn(`[sentient] <AdaptiveText id="${e}"> assignment failed \u2014 showing default text.`);return}u(f.variantId),f.content&&S(f.content)}}),()=>{d=!0}},[a,e,l]),(0,L.useEffect)(()=>{!a||!g||!r||y.current!==g&&(y.current=g,a.track({projectId:r,componentId:e,variantId:g,eventType:"variant_assigned",payload:{}}),s==null||s(e,g))},[a,g,r,e,s]);let p=i===void 0?"":typeof i=="string"?i:JSON.stringify(i),c=(0,L.useMemo)(()=>i===void 0?null:M(i),[p]),b=i===void 0?null:typeof i=="string"?i:c.type,x=(0,L.useRef)(!1);return(0,L.useEffect)(()=>{x.current=!1},[g,p]),(0,L.useEffect)(()=>{if(!a||!g||!r||!c||!b)return;let d=m.current;if(d)return B(d,c,{fireGoal:()=>{x.current||(x.current=!0,a.track({projectId:r,componentId:e,variantId:g,eventType:"goal_achieved",goalType:b,payload:{reward:1}}),a.goal(b,{componentId:e,variantId:g},1,0))},fireStep:(v,f,w)=>{a.track({projectId:r,componentId:e,variantId:g,eventType:"goal_achieved",goalType:v,payload:{reward:f}}),a.goal(v,{},f,w)}})},[a,g,r,e,c,b]),(0,Ne.jsx)(n,{ref:d=>{m.current=d},className:o,children:h!=null?h:t})}var Ue=require("react");function $e(e){let t=R();return(0,Ue.useCallback)((n,o)=>{t==null||t.componentGoal(e,n,o)},[t,e])}var Je=require("@sentientui/core"),He=require("@sentientui/policy"),Xe=require("react/jsx-runtime");function Ve(e){return JSON.stringify(e).replace(/</g,"\\u003c")}function Gt(e){return e.persona?'(function(){try{var d=document.documentElement;if(d.hasAttribute("data-sentient-persona"))return;d.setAttribute("data-sentient-persona",'+Ve(e.persona.persona)+');d.setAttribute("data-sentient-confidence",'+Ve((0,He.confidenceBand)(e.persona.confidence))+");}catch(e){}})();":(0,Je.renderPrePaintScript)(e.apiKey)}function ze(e){return(0,Xe.jsx)("script",{"data-sentient-persona-script":"",dangerouslySetInnerHTML:{__html:Gt(e)}})}var F=require("react"),Qe=require("@sentientui/policy");var N=require("react"),j=require("@sentientui/core"),Et=require("@sentientui/policy");var qe=new Set;function ie(e,t){var m;(0,N.useSyncExternalStore)(U,Q,()=>0);let n=R(),o=Te(),[,i]=(0,N.useReducer)(h=>h+1,0),a=typeof window!="undefined"?(m=window.__sentient_slot_overrides)==null?void 0:m[e]:void 0,r=a===void 0?o[e]:void 0,s=a===void 0&&r===void 0&&n?n.getSlotResult(e):null,l=(n==null?void 0:n.isLocal)===!0&&a===void 0&&r===void 0&&s===null;(0,N.useEffect)(()=>{if(!l||!n)return;let h=!1;return n.decide({slots:[t]}).then(S=>{!h&&S&&i()}),()=>{h=!0}},[n,e,l]);let y=(()=>{if(a!==void 0)return{result:a,arm:(0,j.armOfResult)(a),source:"override"};if(r!==void 0)return{result:r,arm:(0,j.armOfResult)(r),source:"preloaded"};if(s!==null)return{result:s,arm:(0,j.armOfResult)(s),source:"client"};let h=(0,j.baselineResultFor)(t);return{result:h,arm:(0,j.armOfResult)(h),source:"baseline"}})();return(0,N.useEffect)(()=>{G()&&(!n||n.isLocal===!0||y.source==="baseline"&&(qe.has(e)||(qe.add(e),console.warn(`[sentient] slot "${e}" resolved to its baseline \u2014 no SSR-preloaded or decided result. Keyed clients decide slots server-side, so this slot serves baseline for the whole session and records no exposure. Preload it via loadAdaptiveDecision()/initialSlots so it can serve a decided arm and learn.`))))},[n,y.source,e]),y}var se=new Set;function Lt(e){return typeof CSS!="undefined"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/"/g,'\\"')}function Ye(e,t,n){let o=R(),i=D(),a=(0,F.useMemo)(()=>({id:e,dims:t}),[e]),{result:r,arm:s,source:l}=ie(e,a),y=(0,F.useMemo)(()=>typeof r=="string"?{}:r,[s]);if(G()&&!se.has(e)){let g=(0,Qe.validateSlotDecl)({id:e,dims:Object.fromEntries(Object.entries(t).map(([p,c])=>[p,[...c]]))}),u=Object.values(t).reduce((p,c)=>p*c.length,1);g.ok?u>4&&(se.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}") declares ${u} combinations \u2014 more than the recommended 4. Each extra combination needs more traffic to learn; consider fewer dims/values.`)):(se.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}"): invalid declaration \u2014 ${g.reason}. Serving baseline.`))}let m=(n==null?void 0:n.goal)===void 0?null:typeof n.goal=="string"?n.goal:JSON.stringify(n.goal);(0,F.useEffect)(()=>Z({id:e,dims:t}),[e]);let h=(0,F.useRef)(null);(0,F.useEffect)(()=>{!o||l==="baseline"||h.current===s||(h.current=s,W(o,i,e,s))},[o,i,e,s,l]),(0,F.useEffect)(()=>{if(!o||!(n!=null&&n.goal))return;let g=document.querySelector(`[data-sentient-slot="${Lt(e)}"]`);if(!g){G()&&console.warn(`[sentient] useAdaptiveTokens("${e}"): a goal is declared but no element carries the returned props \u2014 spread {...props} on the slot's element.`);return}let u=J(n.goal),p=!1;return B(g,M(n.goal),{fireGoal:()=>{p||(p=!0,o.componentGoal(e,u))},fireStep:(c,b)=>{o.componentGoal(e,c,{reward:b})}})},[o,e,m,s]);let S=(0,F.useMemo)(()=>{let g={"data-sentient-slot":e};for(let[u,p]of Object.entries(y))g[`data-${u}`]=p;return g},[e,y]);return{tokens:y,props:S}}var _=require("react"),et=require("@sentientui/core");var Ze=new Set;function tt(e,t){var v;if(G()&&!t.goal)throw new Error(`[sentient] useAdaptive("${e}"): a goal is required \u2014 without one the optimizer accumulates exposures with no rewards and cannot learn. Pass e.g. goal: 'buy_click'.`);let n=R(),o=D(),i=(0,_.useMemo)(()=>Object.keys(t.variants),[e]),{variantId:a,isOverride:r,settled:s}=V(e,i),l=(v=a!=null?a:i[0])!=null?v:"",y=t.variants[l],[m,h]=(0,_.useState)(null),S=(0,_.useRef)(null),g=(0,_.useCallback)(f=>{S.current=f,h(f)},[]),u=typeof t.goal=="string"?t.goal:JSON.stringify(t.goal),p=(0,_.useMemo)(()=>M(t.goal),[u]),c=J(t.goal);(0,_.useEffect)(()=>Y({id:e,variantIds:i,goal:c}),[e,i,c]);let b=(0,_.useRef)(null);(0,_.useEffect)(()=>{r||s&&(!n||!l||!m||b.current!==l&&(b.current=l,W(n,o,e,l)))},[n,o,e,l,m,r,s]);let x=(0,_.useRef)(!1);(0,_.useEffect)(()=>{x.current=!1},[l,u]),(0,_.useEffect)(()=>{if(!r&&!(!n||!l||!m))return B(m,p,{fireGoal:()=>{x.current||(x.current=!0,n.track({projectId:o,componentId:e,variantId:l,eventType:"goal_achieved",goalType:c,payload:{reward:1}}),n.goal(c,{componentId:e,variantId:l},1,0))},fireStep:(f,w,k)=>{n.track({projectId:o,componentId:e,variantId:l,eventType:"goal_achieved",goalType:f,payload:{reward:w}}),n.goal(f,{},w,k)}})},[n,m,l,o,e,p,c,r]),(0,_.useEffect)(()=>{if(r||!n||!l||!m)return;let f=Date.now();return(0,et.attachMicroSignalDetectors)((w,k={})=>{n.track({projectId:o,componentId:e,variantId:l,eventType:"micro_signal",payload:T({signalType:w},k)})},m,f)},[n,m,l,o,e,r]),(0,_.useEffect)(()=>{if(!G()||!n)return;let f=setTimeout(()=>{!S.current&&!Ze.has(e)&&(Ze.add(e),console.warn(`[sentient] useAdaptive("${e}"): bind was never attached \u2014 spread {...bind} on the rendered element, otherwise exposure and goal tracking cannot work and the optimizer learns nothing.`))},0);return()=>clearTimeout(f)},[n,e]);let I=(0,_.useCallback)((f,w)=>{r||n==null||n.componentGoal(e,f!=null?f:c,w)},[n,e,c,r]),d=(0,_.useMemo)(()=>({ref:g,"data-sentient-id":e,"data-sentient-variant":l}),[g,e,l]);return{variant:l,value:y,bind:d,fireGoal:I}}var O=require("react");var it=require("react/jsx-runtime"),re=new Set;function nt(e){var p;let t=R(),n=D(),o=(0,O.useRef)(null),i=(0,O.useMemo)(()=>Object.keys(e.arrangements),[e.id]),a=(0,O.useMemo)(()=>T({id:e.id,arms:i},e.baseline!==void 0?{baseline:e.baseline}:{}),[e.id,i,e.baseline]),{arm:r,source:s}=ie(e.id,a);G()&&e.baseline!==void 0&&e.baseline!==i[0]&&!re.has(e.id+":baseline")&&(re.add(e.id+":baseline"),console.warn(`[sentient] <AdaptiveGroup id="${e.id}">: baseline "${e.baseline}" is not the first-declared arrangement ("${i[0]}"). The first arrangement should usually be the page's real incumbent (the holdout sees it).`));let l=O.Children.toArray(e.children).filter(O.isValidElement),y=new Map;for(let c of l)y.set(String((p=c.key)!=null?p:"").replace(/^\.\$/,""),c);let m=e.arrangements[r],h=m!==void 0&&m.length===l.length&&m.every(c=>y.has(c));G()&&m!==void 0&&!h&&!re.has(e.id+":keys")&&(re.add(e.id+":keys"),console.warn(`[sentient] <AdaptiveGroup id="${e.id}">: arrangement "${r}" [${m.join(", ")}] does not match the children's keys \u2014 rendering declaration order (fail-safe).`));let S=h?m.map(c=>y.get(c)):l;(0,O.useEffect)(()=>Z({id:e.id,arms:Object.keys(e.arrangements)}),[e.id]);let g=(0,O.useRef)(null);(0,O.useEffect)(()=>{!t||s==="baseline"||g.current===r||(g.current=r,W(t,n,e.id,r))},[t,n,e.id,r,s]);let u=e.goal===void 0?null:typeof e.goal=="string"?e.goal:JSON.stringify(e.goal);return(0,O.useEffect)(()=>{if(!t||e.goal===void 0)return;let c=o.current;if(!c)return;let b=J(e.goal),x=!1;return B(c,M(e.goal),{fireGoal:()=>{x||(x=!0,t.componentGoal(e.id,b))},fireStep:(I,d)=>{t.componentGoal(e.id,I,{reward:d})}})},[t,e.id,u,r]),(0,it.jsx)("div",{ref:o,"data-sentient-id":e.id,"data-sentient-variant":r,children:S})}var ae=require("@sentientui/core");var Ot=["page","blocks","layoutOrder"],rt=new Map;function ot(e,t){rt.set(e,t)}function le(e){return rt.get(e)}function st(e){var i,a;let t=(a=(i=e.content)!=null?i:le(e.page))!=null?a:{},n={};for(let[r,s]of Object.entries(t))Ot.includes(r)||(n[r]=s);let o=z(T({},n),{page:e.page,blocks:e.blocks});return e.layoutOrder&&(o.layoutOrder=e.layoutOrder),o}function at(e){return`<script type="application/ld+json">${ue(e)}</script>`}function ue(e){return JSON.stringify(T({"@context":"https://schema.org","@type":"WebPage"},e)).replace(/</g,"\\u003c")}function lt(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 yt=Object.create;var X=Object.defineProperty,St=Object.defineProperties,ht=Object.getOwnPropertyDescriptor,bt=Object.getOwnPropertyDescriptors,wt=Object.getOwnPropertyNames,ve=Object.getOwnPropertySymbols,At=Object.getPrototypeOf,Se=Object.prototype.hasOwnProperty,xt=Object.prototype.propertyIsEnumerable;var ye=(e,t,n)=>t in e?X(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,P=(e,t)=>{for(var n in t||(t={}))Se.call(t,n)&&ye(e,n,t[n]);if(ve)for(var n of ve(t))xt.call(t,n)&&ye(e,n,t[n]);return e},Q=(e,t)=>St(e,bt(t));var Ct=(e,t)=>{for(var n in t)X(e,n,{get:t[n],enumerable:!0})},he=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wt(t))!Se.call(e,r)&&r!==n&&X(e,r,{get:()=>t[r],enumerable:!(i=ht(t,r))||i.enumerable});return e};var be=(e,t,n)=>(n=e!=null?yt(At(e)):{},he(t||!e||!e.__esModule?X(n,"default",{value:e,enumerable:!0}):n,e)),kt=e=>he(X({},"__esModule",{value:!0}),e);var Mt={};Ct(Mt,{Adaptive:()=>$e,AdaptiveGroup:()=>ut,AdaptiveProvider:()=>Te,AdaptiveText:()=>Je,SentientPersonaScript:()=>Ze,buildAgentFeed:()=>gt,defineAgentContent:()=>ft,detectSegment:()=>ce.deriveSessionSegment,getAgentContent:()=>de,renderAgentJsonLd:()=>pt,renderAgentJsonLdBody:()=>fe,renderAgentMarkdown:()=>mt,useAdaptive:()=>lt,useAdaptiveApiBaseUrl:()=>Ke,useAdaptiveGoal:()=>Xe,useAdaptivePersona:()=>rt,useAdaptiveTokens:()=>ot,useAssignment:()=>z,useInitialAssignments:()=>te,useLayoutOrder:()=>Be,useSentient:()=>O});module.exports=kt(Mt);var x=require("react"),H=require("@sentientui/core");var we=new Map,Y=new Map;function Ae(e,t){let n=Y.get(e);return n||(n=new Set,Y.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&Y.delete(e)}}function xe(e,t){we.set(e,t);let n=Y.get(e);if(n)for(let i of n)try{i(t)}catch(r){}}function Ce(e){var t;return(t=we.get(e))!=null?t:null}var _t={on:!1,listeners:new Set};function ke(){if(typeof window=="undefined")return _t;let e=window;return e.__sentient_preview||(e.__sentient_preview={on:!1,listeners:new Set}),e.__sentient_preview}function ae(){return ke().on}function _e(e){let t=ke().listeners;return t.add(e),()=>{t.delete(e)}}function Re(e){return{isLocal:e.isLocal,track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},fetchWeights:()=>Promise.resolve([]),getAssignment:(t,n)=>e.getAssignment(t,n),assign:(t,n,i,r)=>e.assign(t,n,i,r),decide:()=>Promise.resolve(null),getSlotResult:t=>e.getSlotResult(t),getPersona:()=>e.getPersona(),getGraph:()=>e.getGraph(),dispose:()=>e.dispose(),destroy:()=>e.destroy()}}var Ge="sentient:overrides-changed";function le(){var e;return typeof window=="undefined"?0:(e=window.__sentient_overrides_version)!=null?e:0}function j(e){return typeof window=="undefined"?()=>{}:(window.addEventListener(Ge,e),()=>window.removeEventListener(Ge,e))}function Oe(e){typeof window!="undefined"&&(window.__sentient_devtools_config=e)}function G(){var e;return typeof process=="undefined"||((e=process.env)==null?void 0:e.NODE_ENV)!=="production"}function B(e){return typeof e=="string"?{type:"click"}:e}function J(e){return typeof e=="string"?e:e.type}function Rt(e){if(!(e instanceof Element))return!1;let t=e.tagName.toLowerCase();return t==="a"||t==="button"?!0:e.getAttribute("role")==="button"}function Ee(e,t,n){if(n){try{let r=e;for(;r&&r!==t;){if(r.matches(n))return!0;r=r.parentElement}}catch(r){}return!1}let i=e;for(;i&&i!==t;){if(Rt(i))return!0;i=i.parentElement}return!1}function F(e,t,n){if(t.type==="weighted_composite"){let s=new Set,l=[];return t.steps.forEach(({goal:v,name:p,weight:m},u)=>{let h=()=>{s.has(u)||(s.add(u),n.fireStep(p,m,u))};if(v.type==="click"){let c=g=>{let d=g.target;d instanceof Element&&Ee(d,e,v.selector)&&h()};e.addEventListener("click",c),l.push(()=>e.removeEventListener("click",c));return}if(v.type==="form_submit"){let c=g=>{g.target instanceof HTMLFormElement&&e.contains(g.target)&&h()};e.addEventListener("submit",c),l.push(()=>e.removeEventListener("submit",c));return}if(v.type==="scroll_depth"){let c=Math.max(0,Math.min(1,v.threshold)),g=new IntersectionObserver(d=>{for(let f of d)if(f.intersectionRatio>=c){h(),g.disconnect();break}},{threshold:[c]});g.observe(e),l.push(()=>g.disconnect())}}),()=>{for(let v of l)v()}}let i=t.type==="composite"?t.all:[t],r=new Set(i.map((s,l)=>l)),a=s=>{r.delete(s),r.size===0&&n.fireGoal()},o=[];return i.forEach((s,l)=>{if(s.type==="click"){let v=p=>{let m=p.target;m instanceof Element&&Ee(m,e,s.selector)&&(t.type==="composite"?a(l):n.fireGoal())};e.addEventListener("click",v),o.push(()=>e.removeEventListener("click",v));return}if(s.type==="form_submit"){let v=p=>{p.target instanceof HTMLFormElement&&e.contains(p.target)&&(t.type==="composite"?a(l):n.fireGoal())};e.addEventListener("submit",v),o.push(()=>e.removeEventListener("submit",v));return}if(s.type==="scroll_depth"){let v=Math.max(0,Math.min(1,s.threshold)),p=new IntersectionObserver(m=>{for(let u of m)if(u.intersectionRatio>=v){t.type==="composite"?a(l):n.fireGoal(),p.disconnect();break}},{threshold:[v]});p.observe(e),o.push(()=>p.disconnect());return}}),()=>{for(let s of o)s()}}function N(e,t,n,i){e.track({projectId:t,componentId:n,variantId:i,eventType:"variant_assigned",payload:{}})}var Gt={components:new Map,slots:new Map,sections:[],listeners:new Set,version:0};function U(){if(typeof window=="undefined")return Gt;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 q(){U().version+=1;for(let e of U().listeners)e()}var Le=()=>{};function Z(e){return G()?(U().components.set(e.id,e),q(),()=>{U().components.delete(e.id),q()}):Le}function ee(e){return G()?(U().slots.set(e.id,e),q(),()=>{U().slots.delete(e.id),q()}):Le}function Ie(e){G()&&(U().sections=[...e],q())}var je=require("react/jsx-runtime");function Ot(){var e,t;if(typeof window=="undefined")return"desktop:direct";try{let n=(0,H.detectDeviceClass)((e=navigator.userAgent)!=null?e:""),i=(0,H.detectTrafficSource)((t=document.referrer)!=null?t:"",window.location.origin);return`${n}:${i}`}catch(n){return"desktop:direct"}}var Pe="https://api.sentient-ui.com/v1",T=(0,x.createContext)({client:null,apiKey:"",initialAssignments:{},sessionSegment:"desktop:direct",ssrFallback:"first",onAssignment:void 0,initialLayoutOrder:null,initialSlots:{},initialPersona:null,apiBaseUrl:Pe,debug:!1});function Te(e){var p,m;let[t,n]=(0,x.useState)(null),[i]=(0,x.useState)(()=>{var u;return(u=e.sessionSegment)!=null?u:Ot()}),[r,a]=(0,x.useState)(ae());(0,x.useEffect)(()=>_e(()=>a(ae())),[]),(0,x.useEffect)(()=>{if(e.consent===!1&&!e.preConsentBehavior){n(f=>(f==null||f.destroy(),null));return}let u={apiKey:e.apiKey,context:e.context,debug:e.debug,initialAssignments:e.initialAssignments,sessionSegment:i,consent:e.consent,preConsentBehavior:e.preConsentBehavior,respectDoNotTrack:e.respectDoNotTrack,ssrSessionId:e.ssrSessionId,country:e.country,localMode:e.localMode,initialSlots:e.initialSlots,initialPersona:e.initialPersona,ingestUrl:e.apiBaseUrl?`${e.apiBaseUrl.replace(/\/$/,"")}/events`:void 0},h=!1,c=null,g=null,d=f=>{e.engagement!==!1&&import("@sentientui/core/engagement").then(({startEngagementCapture:S})=>{h||(g=S(f,{apiKey:e.apiKey,apiBase:e.apiBaseUrl?e.apiBaseUrl.replace(/\/$/,""):void 0}))})};return e.enableGraph!==!1?import("@sentientui/core/graph").then(({init:f})=>{h||(c=f(Q(P({},u),{graph:!0})),n(c),d(c))}):(c=(0,H.init)(u),n(c),d(c)),()=>{h=!0,g==null||g(),c==null||c.dispose()}},[e.consent]),(0,x.useEffect)(()=>{if(!t)return;let u=!1,h=async()=>{if(u)return;let g;try{g=await t.fetchWeights()}catch(d){return}if(!u)for(let d of g){let f={componentId:d.componentId,updatedAt:d.updatedAt,variants:d.variants.map(S=>{var w;return{variantId:S.variantId,pulls:S.pulls,avgReward:(w=S.avgReward)!=null?w:0}})};xe(d.componentId,f)}};h();let c=setInterval(()=>{h()},6e4);return()=>{u=!0,clearInterval(c)}},[t]);let o=(p=e.ssrFallback)!=null?p:"first",s=((m=e.apiBaseUrl)!=null?m:Pe).replace(/\/$/,"");(0,x.useEffect)(()=>{var u;typeof process!="undefined"&&((u=process.env)==null?void 0:u.NODE_ENV)==="production"||Oe({apiKey:e.apiKey,apiBaseUrl:s,isLocal:(t==null?void 0:t.isLocal)===!0})},[t,e.apiKey,s]),(0,x.useEffect)(()=>{e.initialLayoutOrder&&e.initialLayoutOrder.length>0&&Ie(e.initialLayoutOrder)},[e.initialLayoutOrder]);let l=(0,x.useMemo)(()=>t&&r?Re(t):t,[t,r]),v=(0,x.useMemo)(()=>{var u,h,c,g,d;return{client:l,apiKey:e.apiKey,initialAssignments:(u=e.initialAssignments)!=null?u:{},sessionSegment:i,ssrFallback:o,onAssignment:e.onAssignment,initialLayoutOrder:(h=e.initialLayoutOrder)!=null?h:null,initialSlots:(c=e.initialSlots)!=null?c:{},initialPersona:(g=e.initialPersona)!=null?g:null,apiBaseUrl:s,debug:(d=e.debug)!=null?d:!1}},[l,e.apiKey,e.initialAssignments,i,o,e.onAssignment,e.initialLayoutOrder,e.initialSlots,e.initialPersona,s,e.debug]);return(0,je.jsx)(T.Provider,{value:v,children:e.children})}function O(){return(0,x.useContext)(T).client}function W(){return(0,x.useContext)(T).apiKey}function te(){return(0,x.useContext)(T).initialAssignments}function ne(){return(0,x.useContext)(T).sessionSegment}function De(){return(0,x.useContext)(T).ssrFallback}function re(){return(0,x.useContext)(T).onAssignment}function Me(){return(0,x.useContext)(T).debug}function Be(){let e=(0,x.useContext)(T).initialLayoutOrder,t=(0,x.useSyncExternalStore)(j,()=>{var n;return typeof window=="undefined"?null:(n=window.__sentient_layout_override)!=null?n:null},()=>null);return t!=null?t:e}function Fe(){return(0,x.useContext)(T).initialSlots}function We(){return(0,x.useContext)(T).initialPersona}function Ke(){return(0,x.useContext)(T).apiBaseUrl}var _=require("react"),Ue=require("@sentientui/core");var D=require("react");function ie(e){var n;if(typeof window=="undefined")return null;let t=(n=window.__sentient_overrides)==null?void 0:n[e];if(t)return t;if(!window.location.search)return null;try{let i=new URLSearchParams(window.location.search);for(let r of i.getAll("sentient_variant")){let a=r.indexOf(":");if(a!==-1&&r.slice(0,a)===e)return r.slice(a+1)}}catch(i){}return null}var Et=5;function Ne(e,t){var i,r;let n=null;for(let a of e.variants){if(!t.includes(a.variantId))continue;let o=(i=a.pulls)!=null?i:0,s=o>0?o*a.avgReward/(o+Et):0;(!n||s>n.score)&&(n={variantId:a.variantId,score:s})}return(r=n==null?void 0:n.variantId)!=null?r:null}function z(e,t,n,i){let r=te(),a=De(),o=O(),s=ne(),l=re(),v=Me(),p=(0,D.useRef)(null),m=(0,D.useSyncExternalStore)(j,()=>ie(e),()=>null),u=m&&t.includes(m)?m:null,h=(0,D.useRef)(null);(0,D.useEffect)(()=>{v&&u&&h.current!==u&&(h.current=u,console.info(`[sentient] override active: ${e} -> ${u}`))},[v,u,e]);let[c,g]=(0,D.useState)(()=>{var w,b;if(u)return{variantId:u,content:null,isLoading:!1,settled:!0};if(!o){let k=r[e];return k&&t.includes(k)?{variantId:k,content:null,isLoading:!1,settled:!0}:a==="first"&&t.length>0?{variantId:t[0],content:null,isLoading:!1,settled:!1}:{variantId:null,content:null,isLoading:!0,settled:!1}}let f=o.getAssignment(e,s);if(f&&(t.includes(f.variantId)||f.content))return{variantId:f.variantId,content:(w=f.content)!=null?w:null,isLoading:!1,settled:!0};let S=Ce(e);if(S){let k=Ne(S,t);if(k)return{variantId:k,content:null,isLoading:!1,settled:!0}}return{variantId:(b=t[0])!=null?b:null,content:null,isLoading:!1,settled:!1}}),d=f=>{l&&p.current!==f&&(p.current=f,l(e,f))};return(0,D.useEffect)(()=>{var S;if(u||!o)return;let f=o.getAssignment(e,s);if(f&&(t.includes(f.variantId)||f.content)){g({variantId:f.variantId,content:(S=f.content)!=null?S:null,isLoading:!1,settled:!0}),d(f.variantId);return}g(w=>{var b;return w.variantId?w:{variantId:(b=t[0])!=null?b:null,content:null,isLoading:!1,settled:!1}})},[u,o,e,s]),(0,D.useEffect)(()=>{if(u||!o)return;let f=o.getAssignment(e,s);if(f&&t.includes(f.variantId))return;let S=!1;return o.assign(e,t,n,i).then(w=>{var b;S||w&&(!t.includes(w.variantId)&&!w.content||(g({variantId:w.variantId,content:(b=w.content)!=null?b:null,isLoading:!1,settled:!0}),d(w.variantId)))}),()=>{S=!0}},[u,o,e,s]),(0,D.useEffect)(()=>{if(!u&&o)return Ae(e,f=>{var b;let S=o.getAssignment(e,s);if(S&&(t.includes(S.variantId)||S.content)){g({variantId:S.variantId,content:(b=S.content)!=null?b:null,isLoading:!1,settled:!0});return}let w=Ne(f,t);w&&g({variantId:w,content:null,isLoading:!1,settled:!0})})},[u,o,e,s]),u?{variantId:u,content:null,isLoading:!1,settled:!0,isOverride:!0}:c}var Ve=require("react/jsx-runtime");function Lt(e){var w;let t=O(),n=W(),i=(0,_.useMemo)(()=>Object.keys(e.variants),[e.variants]),{variantId:r,content:a,isOverride:o,settled:s}=z(e.id,i,e.agentData,e.agentDataByVariant),l=(0,_.useRef)(null),[v,p]=(0,_.useState)(!1);(0,_.useEffect)(()=>{p(!0)},[]);let m=(0,_.useRef)(!1),u=(0,_.useRef)(new Set),h=(0,_.useRef)(null),c=typeof e.goal=="string"?e.goal:JSON.stringify(e.goal),g=(0,_.useMemo)(()=>B(e.goal),[c]),d=typeof e.goal=="string"?e.goal:g.type;if((0,_.useEffect)(()=>Z({id:e.id,variantIds:i,goal:d}),[e.id,i,d]),(0,_.useEffect)(()=>{o||s&&(!t||!r||!n||h.current!==r&&(h.current=r,N(t,n,e.id,r)))},[t,r,n,e.id,o,s]),(0,_.useEffect)(()=>{m.current=!1,u.current=new Set},[r,g]),(0,_.useEffect)(()=>{if(o||!t||!r)return;let b=l.current;if(!b)return;let k=null,C=0,y=()=>{C=Date.now(),k=setTimeout(()=>{t.track({projectId:n,componentId:e.id,variantId:r,eventType:"cursor_signal",payload:{hoverDuration:Date.now()-C}}),k=null},800)},A=()=>{k!==null&&(clearTimeout(k),k=null)};return b.addEventListener("mouseenter",y),b.addEventListener("mouseleave",A),()=>{b.removeEventListener("mouseenter",y),b.removeEventListener("mouseleave",A),k!==null&&clearTimeout(k)}},[t,r,n,e.id,o]),(0,_.useEffect)(()=>{if(o||!t||!r)return;let b=l.current;if(!b)return;let k=Date.now();return(0,Ue.attachMicroSignalDetectors)((C,y={})=>{var ge,pe,me;t.track({projectId:n,componentId:e.id,variantId:r,eventType:"micro_signal",payload:P({signalType:C},y)});let A=(ge=e.microSignalGoals)==null?void 0:ge[C];if(!A||u.current.has(C))return;u.current.add(C);let I=typeof A=="string"?A:A.name,V=typeof A=="string"?1:(pe=A.weight)!=null?pe:1,vt=typeof A=="string"?0:(me=A.stepIndex)!=null?me:0;t.goal(I,P({signalType:C},y),V,vt)},b,k)},[t,r,n,e.id,e.microSignalGoals,o]),(0,_.useEffect)(()=>{if(o||!t||!r)return;let b=l.current;if(b)return F(b,g,{fireGoal:()=>{m.current||(m.current=!0,t.track({projectId:n,componentId:e.id,variantId:r,eventType:"goal_achieved",goalType:d,payload:{reward:1}}),t.goal(d,{componentId:e.id,variantId:r},1,0))},fireStep:(k,C,y)=>{t.track({projectId:n,componentId:e.id,variantId:r,eventType:"goal_achieved",goalType:k,payload:{reward:C}}),t.goal(k,{},C,y)}})},[t,r,n,e.id,g,d,o]),e.clientOnly&&(!v||!t)||!r)return null;let f=(w=e.variants[r])!=null?w:null,S=f===null?a:null;return G()&&f===null&&S===null&&console.warn(`[sentient] <Adaptive id="${e.id}"> was assigned variant "${r}" but no matching key exists in props.variants. If this is a dashboard-managed text variant, use <AdaptiveText id="${e.id}"> instead.`),(0,Ve.jsx)("div",{ref:l,"data-sentient-id":e.id,"data-sentient-variant":r,children:f!=null?f:S})}var $e=(0,_.memo)(Lt,(e,t)=>{if(e.id!==t.id||e.goal!==t.goal&&JSON.stringify(e.goal)!==JSON.stringify(t.goal)||e.microSignalGoals!==t.microSignalGoals||e.clientOnly!==t.clientOnly||e.agentData!==t.agentData||e.agentDataByVariant!==t.agentDataByVariant)return!1;if(e.variants===t.variants)return!0;let n=Object.keys(e.variants),i=Object.keys(t.variants);return n.length!==i.length?!1:n.every(r=>r in t.variants&&Object.is(e.variants[r],t.variants[r]))});var E=require("react");var He=require("react/jsx-runtime");function Je({id:e,default:t,component:n="span",className:i,goal:r}){var C;let a=O(),o=W(),s=re(),l=ne(),v=(0,E.useRef)(null),p=(0,E.useRef)(null),m=(0,E.useSyncExternalStore)(j,()=>ie(e),()=>null),[u,h]=(0,E.useState)(()=>{var y,A;return(A=(y=a==null?void 0:a.getAssignment(e,l))==null?void 0:y.content)!=null?A:null}),[c,g]=(0,E.useState)(()=>{var y,A;return(A=(y=a==null?void 0:a.getAssignment(e,l))==null?void 0:y.variantId)!=null?A:null});(0,E.useEffect)(()=>{var A;if(m||!a||((A=a.getAssignment(e,l))==null?void 0:A.content)!==void 0)return;let y=!1;return a.assign(e).then(I=>{if(!y){if(!I){G()&&console.warn(`[sentient] <AdaptiveText id="${e}"> assignment failed \u2014 showing default text.`);return}g(I.variantId),I.content&&h(I.content)}}),()=>{y=!0}},[a,e,l,m]),(0,E.useEffect)(()=>{m||!a||!c||!o||v.current!==c&&(v.current=c,a.track({projectId:o,componentId:e,variantId:c,eventType:"variant_assigned",payload:{}}),s==null||s(e,c))},[a,c,o,e,s,m]);let d=r===void 0?"":typeof r=="string"?r:JSON.stringify(r),f=(0,E.useMemo)(()=>r===void 0?null:B(r),[d]),S=r===void 0?null:typeof r=="string"?r:f.type,w=(0,E.useRef)(!1);(0,E.useEffect)(()=>{w.current=!1},[c,d]),(0,E.useEffect)(()=>{if(m||!a||!c||!o||!f||!S)return;let y=p.current;if(y)return F(y,f,{fireGoal:()=>{w.current||(w.current=!0,a.track({projectId:o,componentId:e,variantId:c,eventType:"goal_achieved",goalType:S,payload:{reward:1}}),a.goal(S,{componentId:e,variantId:c},1,0))},fireStep:(A,I,V)=>{a.track({projectId:o,componentId:e,variantId:c,eventType:"goal_achieved",goalType:A,payload:{reward:I}}),a.goal(A,{},I,V)}})},[a,c,o,e,f,S,m]);let b=u!=null?u:t;if(m){let y=a==null?void 0:a.getAssignment(e,l);b=y&&y.variantId===m&&(C=y.content)!=null?C:t}return(0,He.jsx)(n,{ref:y=>{p.current=y},className:i,children:b})}var ze=require("react");function Xe(e){let t=O();return(0,ze.useCallback)((n,i)=>{var r,a;t==null||t.componentGoal(e,n,i),t==null||t.goal(n,(r=i==null?void 0:i.metadata)!=null?r:{},(a=i==null?void 0:i.reward)!=null?a:1,0)},[t,e])}var Qe=require("@sentientui/core"),Ye=require("@sentientui/policy"),et=require("react/jsx-runtime");function qe(e){return JSON.stringify(e).replace(/</g,"\\u003c")}function It(e){return e.persona?'(function(){try{var d=document.documentElement;if(d.hasAttribute("data-sentient-persona"))return;d.setAttribute("data-sentient-persona",'+qe(e.persona.persona)+');d.setAttribute("data-sentient-confidence",'+qe((0,Ye.confidenceBand)(e.persona.confidence))+");}catch(e){}})();":(0,Qe.renderPrePaintScript)(e.apiKey)}function Ze(e){return(0,et.jsx)("script",{"data-sentient-persona-script":"",dangerouslySetInnerHTML:{__html:It(e)}})}var K=require("react"),it=require("@sentientui/policy");var M=require("react"),$=require("@sentientui/core"),nt=require("@sentientui/policy");var tt=new Set;function oe(e,t){var p;(0,M.useSyncExternalStore)(j,le,()=>0);let n=O(),i=Fe(),[,r]=(0,M.useReducer)(m=>m+1,0),a=typeof window!="undefined"?(p=window.__sentient_slot_overrides)==null?void 0:p[e]:void 0,o=a===void 0?i[e]:void 0,s=a===void 0&&o===void 0&&n?n.getSlotResult(e):null,l=(n==null?void 0:n.isLocal)===!0&&a===void 0&&o===void 0&&s===null;(0,M.useEffect)(()=>{if(!l||!n)return;let m=!1;return n.decide({slots:[t]}).then(u=>{!m&&u&&r()}),()=>{m=!0}},[n,e,l]);let v=(()=>{if(a!==void 0)return{result:a,arm:(0,$.armOfResult)(a),source:"override"};if(o!==void 0)return{result:o,arm:(0,$.armOfResult)(o),source:"preloaded"};if(s!==null)return{result:s,arm:(0,$.armOfResult)(s),source:"client"};let m=(0,$.baselineResultFor)(t);return{result:m,arm:(0,$.armOfResult)(m),source:"baseline"}})();return(0,M.useEffect)(()=>{G()&&(!n||n.isLocal===!0||v.source==="baseline"&&(tt.has(e)||(tt.add(e),console.warn(`[sentient] slot "${e}" resolved to its baseline \u2014 no SSR-preloaded or decided result. Keyed clients decide slots server-side, so this slot serves baseline for the whole session and records no exposure. Preload it via loadAdaptiveDecision()/initialSlots so it can serve a decided arm and learn.`))))},[n,v.source,e]),v}function Pt(){var t;if(typeof window=="undefined")return null;let e=window.__sentient_persona_override;if(e!=null&&e.persona)return{persona:e.persona,confidence:(t=e.confidence)!=null?t:1};try{let n=new URLSearchParams(window.location.search).get("sentient_persona");if(n)return{persona:n,confidence:1}}catch(n){}return null}function rt(){let e=O(),t=We();(0,M.useSyncExternalStore)(j,le,()=>0);let[n,i]=(0,M.useState)(!1);(0,M.useEffect)(()=>i(!0),[]);let r=s=>({persona:s.persona,confidence:s.confidence,band:(0,nt.confidenceBand)(s.confidence)});if(!n)return t?r(t):null;let a=Pt();if(a)return r(a);if(t)return r(t);let o=e?e.getPersona():null;return o?r(o):null}var ue=new Set;function Tt(e){return typeof CSS!="undefined"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/"/g,'\\"')}function ot(e,t,n){let i=O(),r=W(),a=(0,K.useMemo)(()=>({id:e,dims:t}),[e]),{result:o,arm:s,source:l}=oe(e,a),v=(0,K.useMemo)(()=>typeof o=="string"?{}:o,[s]);if(G()&&!ue.has(e)){let h=(0,it.validateSlotDecl)({id:e,dims:Object.fromEntries(Object.entries(t).map(([g,d])=>[g,[...d]]))}),c=Object.values(t).reduce((g,d)=>g*d.length,1);h.ok?c>4&&(ue.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}") declares ${c} combinations \u2014 more than the recommended 4. Each extra combination needs more traffic to learn; consider fewer dims/values.`)):(ue.add(e),console.warn(`[sentient] useAdaptiveTokens("${e}"): invalid declaration \u2014 ${h.reason}. Serving baseline.`))}let p=(n==null?void 0:n.goal)===void 0?null:typeof n.goal=="string"?n.goal:JSON.stringify(n.goal);(0,K.useEffect)(()=>ee({id:e,dims:t}),[e]);let m=(0,K.useRef)(null);(0,K.useEffect)(()=>{!i||l==="baseline"||l==="override"||m.current===s||(m.current=s,N(i,r,e,s))},[i,r,e,s,l]),(0,K.useEffect)(()=>{if(!i||!(n!=null&&n.goal)||l==="override")return;let h=document.querySelector(`[data-sentient-slot="${Tt(e)}"]`);if(!h){G()&&console.warn(`[sentient] useAdaptiveTokens("${e}"): a goal is declared but no element carries the returned props \u2014 spread {...props} on the slot's element.`);return}let c=J(n.goal),g=!1;return F(h,B(n.goal),{fireGoal:()=>{g||(g=!0,i.componentGoal(e,c),i.goal(c,{componentId:e,arm:s},1,0))},fireStep:(d,f,S)=>{i.componentGoal(e,d,{reward:f}),i.goal(d,{componentId:e,arm:s},f,S)}})},[i,e,p,s,l]);let u=(0,K.useMemo)(()=>{let h={"data-sentient-slot":e};for(let[c,g]of Object.entries(v))h[`data-${c}`]=g;return h},[e,v]);return{tokens:v,props:u}}var R=require("react"),at=require("@sentientui/core");var st=new Set;function lt(e,t){var k;if(G()&&!t.goal)throw new Error(`[sentient] useAdaptive("${e}"): a goal is required \u2014 without one the optimizer accumulates exposures with no rewards and cannot learn. Pass e.g. goal: 'buy_click'.`);let n=O(),i=W(),r=(0,R.useMemo)(()=>Object.keys(t.variants),[e]),{variantId:a,isOverride:o,settled:s}=z(e,r),l=(k=a!=null?a:r[0])!=null?k:"",v=t.variants[l],[p,m]=(0,R.useState)(null),u=(0,R.useRef)(null),h=(0,R.useCallback)(C=>{u.current=C,m(C)},[]),c=typeof t.goal=="string"?t.goal:JSON.stringify(t.goal),g=(0,R.useMemo)(()=>B(t.goal),[c]),d=J(t.goal);(0,R.useEffect)(()=>Z({id:e,variantIds:r,goal:d}),[e,r,d]);let f=(0,R.useRef)(null);(0,R.useEffect)(()=>{o||s&&(!n||!l||!p||f.current!==l&&(f.current=l,N(n,i,e,l)))},[n,i,e,l,p,o,s]);let S=(0,R.useRef)(!1);(0,R.useEffect)(()=>{S.current=!1},[l,c]),(0,R.useEffect)(()=>{if(!o&&!(!n||!l||!p))return F(p,g,{fireGoal:()=>{S.current||(S.current=!0,n.track({projectId:i,componentId:e,variantId:l,eventType:"goal_achieved",goalType:d,payload:{reward:1}}),n.goal(d,{componentId:e,variantId:l},1,0))},fireStep:(C,y,A)=>{n.track({projectId:i,componentId:e,variantId:l,eventType:"goal_achieved",goalType:C,payload:{reward:y}}),n.goal(C,{},y,A)}})},[n,p,l,i,e,g,d,o]),(0,R.useEffect)(()=>{if(o||!n||!l||!p)return;let C=Date.now();return(0,at.attachMicroSignalDetectors)((y,A={})=>{n.track({projectId:i,componentId:e,variantId:l,eventType:"micro_signal",payload:P({signalType:y},A)})},p,C)},[n,p,l,i,e,o]),(0,R.useEffect)(()=>{if(!G()||!n)return;let C=setTimeout(()=>{!u.current&&!st.has(e)&&(st.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(C)},[n,e]);let w=(0,R.useCallback)((C,y)=>{var I,V;if(o)return;let A=C!=null?C:d;n==null||n.componentGoal(e,A,y),n==null||n.goal(A,(I=y==null?void 0:y.metadata)!=null?I:{},(V=y==null?void 0:y.reward)!=null?V:1,0)},[n,e,d,o]),b=(0,R.useMemo)(()=>({ref:h,"data-sentient-id":e,"data-sentient-variant":l}),[h,e,l]);return{variant:l,value:v,bind:b,fireGoal:w}}var L=require("react");var ct=require("react/jsx-runtime"),se=new Set;function ut(e){var g;let t=O(),n=W(),i=(0,L.useRef)(null),r=(0,L.useMemo)(()=>Object.keys(e.arrangements),[e.id]),a=(0,L.useMemo)(()=>P({id:e.id,arms:r},e.baseline!==void 0?{baseline:e.baseline}:{}),[e.id,r,e.baseline]),{arm:o,source:s}=oe(e.id,a);G()&&e.baseline!==void 0&&e.baseline!==r[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 ("${r[0]}"). The first arrangement should usually be the page's real incumbent (the holdout sees it).`));let l=L.Children.toArray(e.children).filter(L.isValidElement),v=new Map;for(let d of l)v.set(String((g=d.key)!=null?g:"").replace(/^\.\$/,""),d);let p=e.arrangements[o],m=p!==void 0&&p.length===l.length&&p.every(d=>v.has(d));G()&&p!==void 0&&!m&&!se.has(e.id+":keys")&&(se.add(e.id+":keys"),console.warn(`[sentient] <AdaptiveGroup id="${e.id}">: arrangement "${o}" [${p.join(", ")}] does not match the children's keys \u2014 rendering declaration order (fail-safe).`));let u=m?p.map(d=>v.get(d)):l;(0,L.useEffect)(()=>ee({id:e.id,arms:Object.keys(e.arrangements)}),[e.id]);let h=(0,L.useRef)(null);(0,L.useEffect)(()=>{!t||s==="baseline"||s==="override"||h.current===o||(h.current=o,N(t,n,e.id,o))},[t,n,e.id,o,s]);let c=e.goal===void 0?null:typeof e.goal=="string"?e.goal:JSON.stringify(e.goal);return(0,L.useEffect)(()=>{if(!t||e.goal===void 0||s==="override")return;let d=i.current;if(!d)return;let f=J(e.goal),S=!1;return F(d,B(e.goal),{fireGoal:()=>{S||(S=!0,t.componentGoal(e.id,f),t.goal(f,{componentId:e.id,arm:o},1,0))},fireStep:(w,b,k)=>{t.componentGoal(e.id,w,{reward:b}),t.goal(w,{componentId:e.id,arm:o},b,k)}})},[t,e.id,c,o,s]),(0,ct.jsx)("div",{ref:i,"data-sentient-id":e.id,"data-sentient-variant":o,children:u})}var ce=require("@sentientui/core");var Dt=["page","blocks","layoutOrder"],dt=new Map;function ft(e,t){dt.set(e,t)}function de(e){return dt.get(e)}function gt(e){var r,a;let t=(a=(r=e.content)!=null?r:de(e.page))!=null?a:{},n={};for(let[o,s]of Object.entries(t))Dt.includes(o)||(n[o]=s);let i=Q(P({},n),{page:e.page,blocks:e.blocks});return e.layoutOrder&&(i.layoutOrder=e.layoutOrder),i}function pt(e){return`<script type="application/ld+json">${fe(e)}</script>`}function fe(e){return JSON.stringify(P({"@context":"https://schema.org","@type":"WebPage"},e)).replace(/</g,"\\u003c")}function mt(e){let t=[];e.title&&t.push(`# ${e.title}`,""),e.summary&&t.push(String(e.summary),"");for(let[n,i]of Object.entries(e))["page","title","summary","blocks","layoutOrder"].includes(n)||t.push(`## ${n}`,"","```json",JSON.stringify(i,null,2),"```","");if(e.blocks.length>0){t.push("## blocks","");for(let n of e.blocks)t.push(`- **${n.id}** \u2192 variant \`${n.variant}\``),n.content!==void 0&&t.push(""," ```json",JSON.stringify(n.content,null,2)," ```");t.push("")}return t.join(`
|
|
3
3
|
`).trimEnd()+`
|
|
4
|
-
`}0&&(module.exports={Adaptive,AdaptiveGroup,AdaptiveProvider,AdaptiveText,SentientPersonaScript,buildAgentFeed,defineAgentContent,detectSegment,getAgentContent,renderAgentJsonLd,renderAgentJsonLdBody,renderAgentMarkdown,useAdaptive,useAdaptiveApiBaseUrl,useAdaptiveGoal,useAdaptiveTokens,useAssignment,useInitialAssignments,useLayoutOrder,useSentient});
|
|
4
|
+
`}0&&(module.exports={Adaptive,AdaptiveGroup,AdaptiveProvider,AdaptiveText,SentientPersonaScript,buildAgentFeed,defineAgentContent,detectSegment,getAgentContent,renderAgentJsonLd,renderAgentJsonLdBody,renderAgentMarkdown,useAdaptive,useAdaptiveApiBaseUrl,useAdaptiveGoal,useAdaptivePersona,useAdaptiveTokens,useAssignment,useInitialAssignments,useLayoutOrder,useSentient});
|
|
5
5
|
//# sourceMappingURL=index.js.map
|