@sentientui/snippet 0.14.1 → 0.15.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/README.md CHANGED
@@ -2,7 +2,10 @@
2
2
 
3
3
  Style-rung [SentientUI](https://sentient-ui.com) for sites that are not built with React.
4
4
  One script tag: visitor-type attributes on `<html>` plus learned `data-*` style tokens on the
5
- elements you declare. Plain CSS does the rest. No DOM reordering, ever; if anything fails, your
5
+ elements you declare. Plain CSS does the rest. No markup is ever injected text is written as
6
+ `textContent` and styles come from a bounded, validated set. The only structural change possible
7
+ is moving a declared element among its own siblings (a registry `moveBefore`/`moveAfter` op,
8
+ applied after the decision returns); a drifted anchor applies nothing. If anything fails, your
6
9
  page is left exactly as it was.
7
10
 
8
11
  ```html
@@ -1,2 +1,2 @@
1
- "use strict";var SentientSnippet=(()=>{var Se=Object.defineProperty;var ln=Object.getOwnPropertyDescriptor;var cn=Object.getOwnPropertyNames,Ze=Object.getOwnPropertySymbols;var et=Object.prototype.hasOwnProperty,un=Object.prototype.propertyIsEnumerable;var Qe=(e,t,n)=>t in e?Se(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,le=(e,t)=>{for(var n in t||(t={}))et.call(t,n)&&Qe(e,n,t[n]);if(Ze)for(var n of Ze(t))un.call(t,n)&&Qe(e,n,t[n]);return e};var tt=(e,t)=>()=>(e&&(t=e(e=0)),t);var nt=(e,t)=>{for(var n in t)Se(e,n,{get:t[n],enumerable:!0})},dn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of cn(t))!et.call(e,a)&&a!==n&&Se(e,a,{get:()=>t[a],enumerable:!(r=ln(t,a))||r.enumerable});return e};var pn=e=>dn(Se({},"__esModule",{value:!0}),e);var fn,gn,mn,rt,hn,yn,ot,T,me,Ae=tt(()=>{"use strict";fn=Object.defineProperty,gn=Object.defineProperties,mn=Object.getOwnPropertyDescriptors,rt=Object.getOwnPropertySymbols,hn=Object.prototype.hasOwnProperty,yn=Object.prototype.propertyIsEnumerable,ot=(e,t,n)=>t in e?fn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,T=(e,t)=>{for(var n in t||(t={}))hn.call(t,n)&&ot(e,n,t[n]);if(rt)for(var n of rt(t))yn.call(t,n)&&ot(e,n,t[n]);return e},me=(e,t)=>gn(e,mn(t))});var ft={};nt(ft,{LOCAL_ENGINE_AVAILABLE:()=>wn,createLocalEngine:()=>Sn});function Sn(e){throw new Error("[sentient] createLocalEngine is not available in production builds. The local engine only exists under the `development` export condition.")}var wn,gt=tt(()=>{"use strict";wn=!1});var Ir={};nt(Ir,{applyPersonaAttributes:()=>Re,applyRegistrySlots:()=>Me,applySlotArms:()=>De,applySlotAttributes:()=>Pe,parseEditorToken:()=>tn,parsePersonaPreview:()=>rn,parsePreview:()=>nn,parseSnippetConfig:()=>Le,reapply:()=>Ye,run:()=>sn,version:()=>Je});Ae();function xe(e){return Object.keys(e).sort().map(t=>`${t}=${e[t]}`).join("|")}function it(e){if(e.length===0)return null;let t={};for(let n of e.split("|")){let r=n.indexOf("=");if(r<=0||r!==n.lastIndexOf("=")||r===n.length-1)return null;let a=n.slice(0,r);if(a in t)return null;t[a]=n.slice(r+1)}return t}function Be(e){var t,n,r;if(e.arms)return typeof e.baseline=="string"?e.baseline:(t=e.arms[0])!=null?t:"";if(e.baseline!==void 0&&typeof e.baseline=="object")return xe(e.baseline);if(typeof e.baseline=="string")return e.baseline;let a={};for(let[o,l]of Object.entries((n=e.dims)!=null?n:{}))a[o]=(r=l[0])!=null?r:"";return xe(a)}function st(e,t){var n,r;return e.dims!=null?(r=(n=it(t))!=null?n:it(Be(e)))!=null?r:{}:t}function ce(e){return e>=.3?e<.7?"medium":"high":"low"}var vn=["GPTBot","ChatGPT-User","OAI-SearchBot","ClaudeBot","Claude-User","Claude-SearchBot","PerplexityBot","Perplexity-User","Google-Extended","Applebot-Extended","Meta-ExternalAgent","Bytespider","CCBot","Amazonbot","cohere-ai","Diffbot"];function at(e){return bn(e)!==null}function bn(e){var t;if(!e)return null;let n=e.toLowerCase();return(t=vn.find(r=>n.includes(r.toLowerCase())))!=null?t:null}function lt(e){let t=e.toLowerCase();return/ipad|tablet|playbook|kindle|silk/.test(t)?"tablet":/mobi|iphone|ipod|android.*mobile|phone/.test(t)?"mobile":"desktop"}function ct(e,t){if(!e)return"direct";try{let n=new URL(e);if(t)try{if(new URL(t).host===n.host)return"direct"}catch(a){}let r=n.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(r)?"search":/(^|\.)(twitter\.com|x\.com|facebook\.com|linkedin\.com|reddit\.com|t\.co)$/.test(r)?"social":"referral"}catch(n){return"direct"}}function ut(e){if(!e)return null;try{return new URL(e).hostname}catch(t){return null}}function dt(e){let t=e.getHours();return t<6?"night":t<12?"morning":t<18?"afternoon":"evening"}function Ue(e){return T(T(T({id:e.id},e.arms?{arms:[...e.arms]}:{}),e.dims?{dims:Object.fromEntries(Object.entries(e.dims).map(([t,n])=>[t,[...n]]))}:{}),e.baseline!==void 0?{baseline:e.baseline}:{})}function Ge(e){let t=Ue(e);return st(t,Be(t))}function pt(e){return typeof e=="string"?e:xe(e)}Ae();function ht(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(e){}try{if(typeof crypto!="undefined"&&typeof crypto.getRandomValues=="function"){let e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t="";for(let n=0;n<16;n++)t+=e[n].toString(16).padStart(2,"0"),(n===3||n===5||n===7||n===9)&&(t+="-");return t}}catch(e){}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}function yt(e){return e?`_${e.slice(0,12)}`:""}var An="_snt_uid",xn=365,In="_snt_uid";function kn(){return ht()}function En(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function Cn(e,t,n){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${n}; SameSite=strict; path=/`}catch(r){}}function On(e){try{return localStorage.getItem(e)}catch(t){return null}}function _n(e,t){try{return localStorage.setItem(e,t),!0}catch(n){return!1}}function Tn(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function Ln(e,t){try{return sessionStorage.setItem(e,t),!0}catch(n){return!1}}function Rn(e){try{sessionStorage.removeItem(e)}catch(t){}}function Pn(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function Dn(e){try{localStorage.removeItem(e)}catch(t){}}function Mn(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var Nn={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function vt(e){var t,n,r,a,o,l;if(typeof window=="undefined")return Nn;let d=yt(e==null?void 0:e.apiKey),i=(t=e==null?void 0:e.cookieName)!=null?t:`${An}${d}`,s=`${In}${d}`,c=((n=e==null?void 0:e.cookieTTLDays)!=null?n:xn)*24*60*60,u=g=>g&&g.length>0?g:null,m=(l=(o=(a=(r=u(En(i)))!=null?r:u(On(s)))!=null?a:u(Tn(s)))!=null?o:u(e==null?void 0:e.ssrSessionId))!=null?l:kn();Cn(i,m,c);let w=_n(s,m),E=Pn(i),C=w?!1:Ln(s,m),k=!w&&!E&&!C;return{getSessionId:()=>m,isEphemeral:()=>k,destroy:()=>{m=null,Mn(i),Dn(s),Rn(s)}}}function Ee(e){return Math.min(6e4,1e3*2**Math.min(e,6))}function bt(e){if(e.ok===!0)return"delivered";let{status:t}=e;return typeof t!="number"?"retry":t>=200&&t<300?"delivered":t>=400&&t<500&&t!==429?"dropped":"retry"}function wt(e,t){try{let n=localStorage.getItem(e);if(!n)return[];let r=JSON.parse(n);return Array.isArray(r)?(localStorage.removeItem(e),r.slice(-t)):[]}catch(n){return[]}}function Ce(e,t,n){try{let r=(()=>{try{let o=localStorage.getItem(n);if(!o)return[];let l=JSON.parse(o);return Array.isArray(l)?l:[]}catch(o){return[]}})(),a=new Map;for(let o of r)a.set(o.id,o);for(let o of e)a.set(o.id,o);localStorage.setItem(n,JSON.stringify([...a.values()].slice(-t)))}catch(r){}}function St(e,t){try{let n=localStorage.getItem(t);if(!n)return;let r=JSON.parse(n);if(!Array.isArray(r))return;let a=new Set(e),o=r.filter(l=>!a.has(l.id));if(o.length===r.length)return;o.length===0?localStorage.removeItem(t):localStorage.setItem(t,JSON.stringify(o))}catch(n){}}var $n=500,jn=56*1024;function At(e){return`_snt_retry_${e.slice(0,12)}`}var Kn={push:()=>{},flush:()=>{},destroy:()=>{}};function Bn(e){var t,n,r;if(typeof window=="undefined")return Kn;let a=(t=e.flushIntervalMs)!=null?t:5e3,o=(n=e.maxBatchSize)!=null?n:20,l=(r=e.maxRetrySize)!=null?r:100,d=e.ingestUrl,i=e.apiKey,s=At(i),c=[],u=new Set,m=[],w=h=>{for(let I of h)E.delete(I),!u.has(I)&&(u.add(I),m.push(I));for(;m.length>$n;){let I=m.shift();I&&u.delete(I)}St(h,s)},E=new Set,C=h=>{u.has(h.id)||E.has(h.id)||(E.add(h.id),c.push(h))},k=h=>{for(let I of h)u.has(I.id)||(E.add(I.id),c.push(I))},g=wt(s,l);for(let h of g)C(h);let f=0,x=0,O=h=>{if(h.length===0)return;let I=JSON.stringify(h),Y=h.map(X=>X.id),B;try{B=fetch(d,{method:"POST",keepalive:!0,body:I,headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`}})}catch(X){Ce(h,l,s),k(h),x++,f=Date.now()+Ee(x);return}let ne=X=>{if(bt(X)!=="retry"){w(Y),x=0,f=0;return}Ce(h,l,s),k(h),x++,f=Date.now()+Ee(x)};B instanceof Promise?B.then(ne).catch(()=>{Ce(h,l,s),k(h),x++,f=Date.now()+Ee(x)}):ne(B)},G=typeof TextEncoder!="undefined"?new TextEncoder:null,v=h=>G?G.encode(h).length:h.length,D=h=>{let I=[],Y=2;for(let B of h){let ne=v(JSON.stringify(B))+1;if(I.length>0&&Y+ne>jn||I.length>=o)break;I.push(B),Y+=ne}return I},$=()=>{try{if(Date.now()<f)return;for(;c.length>0&&!(Date.now()<f);){let h=c.filter(Y=>!u.has(Y.id));if(c.length=0,h.length===0)break;let I=D(h);if(I.length===0)break;I.length<h.length&&c.push(...h.slice(I.length)),O(I)}}catch(h){}},M=!0,S=null;S=setInterval(()=>{M&&$()},a);let A=()=>{document.visibilityState==="hidden"&&$()},b=()=>{$()};return document.addEventListener("visibilitychange",A),window.addEventListener("pagehide",b),{push(h){C(h),c.length>=o&&$()},flush:$,destroy(){M=!1,S!==null&&(clearInterval(S),S=null),document.removeEventListener("visibilitychange",A),window.removeEventListener("pagehide",b),$()}}}var Un=200;function xt(e){return`_snt_goal_retry_${e.slice(0,12)}`}var Gn={send:()=>{},flush:()=>{},destroy:()=>{}};function qn(e){var t,n,r;if(typeof window=="undefined")return Gn;let a=(t=e.flushIntervalMs)!=null?t:5e3,o=(n=e.maxRetrySize)!=null?n:100,l=(r=e.maxPerFlush)!=null?r:5,d=xt(e.apiKey),i=[],s=new Set,c=new Set,u=[],m=0,w=0,E=!1,C=v=>{for(s.delete(v.id),c.has(v.id)||(c.add(v.id),u.push(v.id));u.length>Un;){let D=u.shift();D&&c.delete(D)}St([v.id],d)},k=v=>{Ce([v],o,d),!c.has(v.id)&&!s.has(v.id)&&(s.add(v.id),i.push(v)),w++,m=Date.now()+Ee(w)},g=v=>{let D;try{D=fetch(e.url,{method:"POST",keepalive:!0,body:v.body,headers:e.headers})}catch(M){k(v);return}let $=M=>{var S;let A=bt(M);if(A==="retry"){k(v);return}A==="dropped"&&((S=e.onDrop)==null||S.call(e,v,M.status)),C(v),w=0,m=0};D instanceof Promise?D.then($).catch(()=>k(v)):$(D)},f=()=>{try{if(E||Date.now()<m)return;let v=0;for(;i.length>0&&v<l&&!(Date.now()<m);){let D=i.shift();s.delete(D.id),!c.has(D.id)&&(v++,g(D))}}catch(v){}};for(let v of wt(d,o))s.has(v.id)||(s.add(v.id),i.push(v));let x=setInterval(f,a),O=()=>{document.visibilityState==="hidden"&&f()},G=()=>f();return document.addEventListener("visibilitychange",O),window.addEventListener("pagehide",G),{send(v){if(!E&&!(c.has(v.id)||s.has(v.id))){if(Date.now()<m){s.add(v.id),i.push(v);return}g(v)}},flush:f,destroy(){clearInterval(x),document.removeEventListener("visibilitychange",O),window.removeEventListener("pagehide",G),f(),E=!0}}}var Wn=1800*1e3;function Ie(e,t){return`${encodeURIComponent(e)}:${encodeURIComponent(t)}`}function Vn(e=Wn,t){let n=new Map,r=`_snt_asgn${yt(t)}_`,a=(i,s)=>`${r}${encodeURIComponent(i)}:${encodeURIComponent(s)}`,o=i=>{let s=i.slice(r.length),c=s.indexOf(":");if(c<0)return null;try{return{componentId:decodeURIComponent(s.slice(0,c)),segment:decodeURIComponent(s.slice(c+1))}}catch(u){return null}},l=()=>{try{let i=[];for(let s=0;s<localStorage.length;s++){let c=localStorage.key(s);c!=null&&c.startsWith(r)&&i.push(c)}return i}catch(i){return[]}},d=i=>i.assignedAt+(i.ttlMs&&i.ttlMs>0?i.ttlMs:e)<Date.now();return typeof window!="undefined"&&(()=>{for(let i of l())try{let s=localStorage.getItem(i);if(!s)continue;let c=JSON.parse(s);if(d(c)){localStorage.removeItem(i);continue}let u=o(i);if(!u)continue;n.set(Ie(u.componentId,u.segment),c)}catch(s){}})(),{get(i,s){let c=n.get(Ie(i,s));return c?d(c)?(n.delete(Ie(i,s)),null):c:null},set(i,s,c){let u=Ie(i,s);n.set(u,c);try{localStorage.setItem(a(i,s),JSON.stringify(c))}catch(m){}},invalidate(i){let s=`${encodeURIComponent(i)}:`;for(let c of[...n.keys()])c.startsWith(s)&&n.delete(c);for(let c of l()){let u=o(c);if((u==null?void 0:u.componentId)===i)try{localStorage.removeItem(c)}catch(m){}}},clear(){n.clear();for(let i of l())try{localStorage.removeItem(i)}catch(s){}}}}var Oe="_snt_snap:",zn=["low","medium","high"];function _e(e){try{let t=localStorage.getItem(Oe+e);if(!t)return null;let n=JSON.parse(t);return!n||typeof n!="object"||n.v!==1||typeof n.persona!="string"||typeof n.band!="string"||!zn.includes(n.band)||typeof n.slots!="object"||n.slots===null||Array.isArray(n.slots)||!(n.layoutOrder===null||Array.isArray(n.layoutOrder))||typeof n.savedAt!="number"||!(n.slotConfig===void 0||typeof n.slotConfig=="object"&&n.slotConfig!==null&&!Array.isArray(n.slotConfig))?null:n}catch(t){return null}}function ye(e,t){try{localStorage.setItem(Oe+e,JSON.stringify(t))}catch(n){}}var We="[sentient] No API key configured \u2014 nothing is being learned. Set NEXT_PUBLIC_SENTIENT_API_KEY or pass localMode: true for local development.",It="[sentient] Local mode \u2014 decisions are simulated on-device and nothing is sent over the network. Add an API key to learn from real traffic.",mt=!1,ke=!1;function Jn(){var e;try{return(e=new URLSearchParams(window.location.search).get("sentient_persona"))!=null?e:void 0}catch(t){return}}function Fn(e){var t;let n=vt({ssrSessionId:e.ssrSessionId,apiKey:e.apiKey}),r=(t=n.getSessionId())!=null?t:"local",a=Jn(),o=Promise.resolve().then(()=>(gt(),ft)).then(i=>{let s=i;return s.LOCAL_ENGINE_AVAILABLE?(mt||(mt=!0,console.info(It)),s):(ke||(ke=!0,console.error(We)),null)}).catch(()=>(ke||(ke=!0,console.error(We)),null)),l=null;function d(i){let s=document.documentElement;s.dataset.sentientPersona===void 0&&(s.dataset.sentientPersona=i.persona,s.dataset.sentientConfidence=ce(i.confidence))}return{isLocal:!0,async decide(i){var s,c,u;let m=await o;if(!m)return null;let w=m.createLocalEngine({sessionId:r,forcedPersona:a}).decide(i);return l=me(T({},w),{layoutOrder:(c=(s=w.layoutOrder)!=null?s:l==null?void 0:l.layoutOrder)!=null?c:null,slots:T(T({},(u=l==null?void 0:l.slots)!=null?u:{}),w.slots)}),ye(e.apiKey||"local",{v:1,persona:l.persona,band:ce(l.confidence),slots:l.slots,layoutOrder:l.layoutOrder,savedAt:Date.now()}),d(w),w},getSlotResult(i){var s,c,u;return(u=(c=l==null?void 0:l.slots[i])!=null?c:(s=e.initialSlots)==null?void 0:s[i])!=null?u:null},getPersona(){return l?{persona:l.persona,confidence:l.confidence,band:ce(l.confidence)}:null},async assign(i,s){var c;let u=await o;return!u||!s||s.length===0?s!=null&&s[0]?{variantId:s[0],assignmentTtlMs:0}:null:{variantId:(c=u.createLocalEngine({sessionId:r,forcedPersona:a}).decide({components:[{id:i,variantIds:s}]}).assignments[i])!=null?c:s[0],assignmentTtlMs:0}},track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,fetchWeights:()=>Promise.resolve([]),getGraph:()=>({pageNodes:[],capturedAt:0}),dispose:()=>{},destroy:()=>n.destroy()}}function ve(e,t,n,r){let a=[];{let o=!1,l=[],d=()=>{if(o)return;let i=Date.now();for(l.push(i);l.length>0&&i-l[0]>500;)l.shift();l.length>=3&&(o=!0,e("rage_click"))};t.addEventListener("click",d),a.push(()=>t.removeEventListener("click",d))}{let o=!1,l=d=>{if(o||!(d.target instanceof Node)||!t.contains(d.target)&&t!==d.target)return;o=!0;let i=typeof window!="undefined"?window.getSelection():null,s=i?i.toString().length:0;e("text_copy",{selectionLength:s})};document.addEventListener("copy",l),a.push(()=>document.removeEventListener("copy",l))}{let o=!1,l=!1,d=null,i=()=>{d!==null&&(clearTimeout(d),d=null)},s=()=>{o||!l||(i(),d=setTimeout(()=>{!o&&l&&(o=!0,e("scroll_hesitation"))},3e3))},c=()=>{i(),s()},u=w=>{for(let E of w)l=E.intersectionRatio>.3,l?s():i()},m=new IntersectionObserver(u,{threshold:[.3]});m.observe(t),window.addEventListener("scroll",c,{passive:!0}),a.push(()=>{m.disconnect(),window.removeEventListener("scroll",c),i()})}if((r==null?void 0:r.tabLoss)!==!1){let o=!1,l=n!=null?n:Date.now(),d=()=>{if(o||document.visibilityState!=="hidden")return;let i=Date.now()-l;i<15e3&&(o=!0,e("tab_loss",{timeOnPage:i}))};document.addEventListener("visibilitychange",d),a.push(()=>document.removeEventListener("visibilitychange",d))}return()=>{for(let o of a)o()}}var kt="https://api.sentient-ui.com/v1/events",W=new Map,Et=null;function Hn(e){return"value"in e||"currency"in e||"externalId"in e||"metadata"in e||"weight"in e||"stepIndex"in e}function qe(){return ht()}var he={track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,assign:()=>Promise.resolve(null),decide:()=>Promise.resolve(null),getSlotResult:()=>null,getPersona:()=>null,fetchWeights:()=>Promise.resolve([]),getGraph:()=>({pageNodes:[],capturedAt:0}),dispose:()=>{},destroy:()=>{}};function Yn(){try{let e={},t=new URLSearchParams(window.location.search);for(let[n,r]of t)n.startsWith("utm_")&&(e[n]=r);return e}catch(e){return{}}}function Ct(e){return e.replace(/\/events\/?$/,"")}function ue(){return typeof navigator!="undefined"&&navigator.globalPrivacyControl===!0?!0:[typeof navigator!="undefined"?navigator.doNotTrack:void 0,typeof window!="undefined"?window.doNotTrack:void 0,typeof navigator!="undefined"?navigator.msDoNotTrack:void 0].some(e=>e==="1"||e==="yes")}function Ve(e){var t;if(typeof window=="undefined")return;let n=e!=null?e:Et;if(!n){console.warn("[sentient] grantConsent() called before init()");return}let r=W.get(n);if(!r){console.warn("[sentient] grantConsent() called before init()");return}let{config:a,upgrade:o}=r;if(!o||a.respectDoNotTrack!==!1&&ue())return;let l=Te(me(T({},a),{consent:!0}));o(l);let d=(t=W.get(n))==null?void 0:t.dispose;W.set(n,{config:me(T({},a),{consent:!0}),upgrade:null,dispose:d})}function Xn(e){var t;let n=e.preConsentBehavior==="statistical_winner",r=Ct((t=e.ingestUrl)!=null?t:kt),a={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},o={track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,fetchWeights:()=>Promise.resolve([]),async assign(i,s,c){if(!n)return null;try{let u=new URLSearchParams({componentId:i});for(let w of s!=null?s:[])u.append("variantIds[]",w);let m=await fetch(`${r}/winner?${u.toString()}`,{headers:a});return m.ok?{variantId:(await m.json()).variantId,assignmentTtlMs:0}:s!=null&&s[0]?{variantId:s[0],assignmentTtlMs:0}:null}catch(u){return s!=null&&s[0]?{variantId:s[0],assignmentTtlMs:0}:null}},decide:()=>Promise.resolve(null),getSlotResult:()=>null,getPersona:()=>null,getGraph:()=>({pageNodes:[],capturedAt:0}),dispose:()=>{},destroy:()=>{}},l={track:i=>o.track(i),goal:((i,s,c,u)=>o.goal(i,s,c,u)),componentGoal:(i,s,c)=>o.componentGoal(i,s,c),identify:i=>o.identify(i),getAssignment:(i,s)=>o.getAssignment(i,s),assign:(i,s,c,u)=>o.assign(i,s,c,u),decide:i=>o.decide(i),getSlotResult:i=>o.getSlotResult(i),getPersona:()=>o.getPersona(),fetchWeights:()=>o.fetchWeights(),getGraph:()=>o.getGraph(),dispose:()=>o.dispose(),destroy:()=>o.destroy()};function d(i){o=i}return{proxy:l,setInner:d}}function Te(e){var t,n,r,a,o,l,d,i,s;if(typeof window=="undefined")return he;Et=e.apiKey;let c=W.get(e.apiKey||"local");if(c!=null&&c.dispose)try{c.dispose()}catch(p){}let u=e.respectDoNotTrack!==!1&&ue(),m=e.consent===!1||u,w=typeof e.apiKey=="string"&&e.apiKey.startsWith("pk_");if(e.localMode===!0||!w&&e.localMode!==!1)return m?(W.set(e.apiKey||"local",{config:e,upgrade:null}),he):(W.set(e.apiKey||"local",{config:e,upgrade:null}),Fn(e));if(m){if(!e.apiKey||!e.apiKey.startsWith("pk_"))return e.preConsentBehavior==="statistical_winner"&&console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),W.set(e.apiKey,{config:e,upgrade:null}),he;let{proxy:p,setInner:y}=Xn(e);return W.set(e.apiKey,{config:e,upgrade:u?null:y}),p}if(!e.apiKey||!e.apiKey.startsWith("pk_"))return console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),he;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),he;let E=(t=e.ingestUrl)!=null?t:kt,C=Date.now(),k=vt({ssrSessionId:e.ssrSessionId,apiKey:e.apiKey}),g=Vn(void 0,e.apiKey),f=Bn({ingestUrl:E,apiKey:e.apiKey}),x=Ct(E),O={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},G=qn({url:`${x}/goals`,apiKey:e.apiKey,headers:O,onDrop:(p,y)=>{e.debug&&console.warn(`[sentient] goal dropped (HTTP ${y}) \u2014 this will not be retried. `+(y===400?"The session was not found: call init() and let the session upsert complete before firing goals.":y===401||y===403?"Check the API key and that this origin is on the project allowlist.":"See the response status for the cause."),p)}}),v=lt((n=navigator.userAgent)!=null?n:""),D=typeof window!="undefined"?window.location.origin:void 0,$=ct((r=document.referrer)!=null?r:"",D),M=(a=e.sessionSegment)!=null?a:`${v}:${$}`,S=new Map,A=new Map,b=null,h=p=>{for(let y of p)A.has(y.id)||A.set(y.id,Ge(y))};if(e.initialSlots)for(let[p,y]of Object.entries(e.initialSlots))A.set(p,y);let I=_e(e.apiKey);if(I)for(let[p,y]of Object.entries(I.slots))A.has(p)||A.set(p,y);let Y={low:.15,medium:.5,high:.85};if(e.initialPersona)b=T({},e.initialPersona);else{let p=document.documentElement.dataset;p.sentientPersona?b={persona:p.sentientPersona,confidence:(l=Y[(o=p.sentientConfidence)!=null?o:"low"])!=null?l:.15}:I&&(b={persona:I.persona,confidence:(d=Y[I.band])!=null?d:.15})}if(e.initialAssignments)for(let[p,y]of Object.entries(e.initialAssignments))g.set(p,M,{variantId:y,assignedAt:Date.now(),segment:M,confidence:1});let B=Promise.resolve(),ne=k.getSessionId();if(ne){let p=ut((i=document.referrer)!=null?i:""),y=T(T({sessionId:ne,deviceClass:v,trafficSource:$,referrerDomain:p,utmParams:Yn(),timeOfDay:dt(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:k.isEphemeral(),automation:typeof navigator!="undefined"&&navigator.webdriver===!0||at((s=navigator.userAgent)!=null?s:"")},e.userId?{userId:e.userId}:{}),e.country?{country:e.country}:{});try{B=fetch(`${x}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(y),headers:O}).then(_=>{_.status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentient-ui.com/pricing")}).catch(()=>{})}catch(_){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:f});let X={goal(p,y={},_=1,Z=0){var J,j,F;let q=k.getSessionId();if(!q)return;let R=Hn(y)?y:{metadata:y},Q=qe(),U={sessionId:q,name:p,metadata:(J=R.metadata)!=null?J:{},weight:(j=R.weight)!=null?j:_,stepIndex:(F=R.stepIndex)!=null?F:Z,goalId:Q,value:R.value,currency:R.currency,externalId:R.externalId};e.debug&&console.log("[sentient] goal",U);let se={id:Q,body:JSON.stringify(U)};B.then(()=>G.send(se))},componentGoal(p,y,_){var Z,J,j;let F=k.getSessionId();if(!F)return;let q=g.get(p,M),R=q?null:(Z=A.get(p))!=null?Z:null;if(!q&&R===null){e.debug&&console.warn(`[sentient] componentGoal("${p}"): no assignment or slot decision yet \u2014 render its <Adaptive>/adaptive hook or call assign()/decide() before recording a goal.`);return}let Q=q?q.variantId:pt(R),U={id:qe(),sessionId:F,projectId:e.apiKey,componentId:p,variantId:Q,eventType:"goal_achieved",goalType:y,payload:T({reward:(J=_==null?void 0:_.reward)!=null?J:1,goalValue:_==null?void 0:_.value,currency:_==null?void 0:_.currency},(j=_==null?void 0:_.metadata)!=null?j:{}),timestamp:Date.now(),timeInSession:Date.now()-C};e.debug&&console.log("[sentient] componentGoal",U),B.then(()=>f.push(U))},identify(p){let y=k.getSessionId();y&&B.then(()=>{fetch(`${x}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:y,userId:p,ephemeral:k.isEphemeral()}),headers:O}).catch(()=>{})})},track(p){let y=k.getSessionId();if(!y)return;let _=me(T({},p),{id:qe(),sessionId:y,timestamp:Date.now(),timeInSession:Date.now()-C});e.debug&&console.log("[sentient] track",_),B.then(()=>f.push(_))},getAssignment(p,y){return g.get(p,y)},async assign(p,y,_,Z){let J=k.getSessionId();if(!J)return null;let j=g.get(p,M);if(j&&(y!=null&&y.length||j.content!==void 0)){let R=j.ttlMs&&j.ttlMs>0?Math.max(0,j.assignedAt+j.ttlMs-Date.now()):0;return{variantId:j.variantId,assignmentTtlMs:R,content:j.content}}let F=S.get(p);if(F)return F;let q=(async()=>{await B;try{let R={sessionId:J,componentId:p,variantIds:y};Z!==void 0?R.agentDataByVariant=Z:_!==void 0&&(R.agentData=_);let Q=await fetch(`${x}/assign`,{method:"POST",body:JSON.stringify(R),headers:O});if(!Q.ok)return null;let U=await Q.json();return g.set(p,M,T({variantId:U.variantId,assignedAt:Date.now(),segment:M,confidence:1,content:U.content},U.assignmentTtlMs&&U.assignmentTtlMs>0?{ttlMs:U.assignmentTtlMs}:{})),U}catch(R){return null}finally{S.delete(p)}})();return S.set(p,q),q},async decide(p){var y,_,Z,J,j,F,q,R,Q;let U=k.getSessionId();if(!U)return null;let se=(y=p.slots)!=null?y:[];await B;try{let ae={sessionId:U};p.sections&&p.sections.length>0&&(ae.sections=p.sections.map(z=>({id:z}))),ae.components=(_=p.components)!=null?_:[],se.length>0&&(ae.slots=se.map(Ue)),p.slotsFrom==="registry"&&(ae.slotsFrom="registry"),p.v&&(ae.v=p.v);let Xe=await fetch(`${x}/decide`,{method:"POST",body:JSON.stringify(ae),headers:O});if(!Xe.ok)return h(se),null;let P=await Xe.json(),fe={};for(let z of se)fe[z.id]=(J=(Z=P.slots)==null?void 0:Z[z.id])!=null?J:Ge(z);if(P.slots)for(let[z,ge]of Object.entries(P.slots))z in fe||(fe[z]=ge);for(let[z,ge]of Object.entries(fe))A.set(z,ge);let an=b!=null&&b.persona!=="unknown";P.persona&&!(P.persona==="unknown"&&an)?b={persona:P.persona,confidence:(j=P.confidence)!=null?j:0}:b||(b={persona:"unknown",confidence:0});for(let[z,ge]of Object.entries((F=P.assignments)!=null?F:{}))g.set(z,M,{variantId:ge,assignedAt:Date.now(),segment:M,confidence:1});return ye(e.apiKey,T({v:1,persona:b.persona,band:ce(b.confidence),slots:Object.fromEntries(A),layoutOrder:(q=P.layoutOrder)!=null?q:null,savedAt:Date.now()},P.slotConfig?{slotConfig:P.slotConfig}:{})),T(T(T({layoutOrder:(R=P.layoutOrder)!=null?R:null,assignments:(Q=P.assignments)!=null?Q:{},slots:fe,persona:b.persona,confidence:b.confidence},P.slotConfig?{slotConfig:P.slotConfig}:{}),P.goals?{goals:P.goals}:{}),P.sectionMap?{sectionMap:P.sectionMap}:{})}catch(ae){return h(se),null}},getSlotResult(p){var y;return(y=A.get(p))!=null?y:null},getPersona(){return b?{persona:b.persona,confidence:b.confidence,band:ce(b.confidence)}:null},async fetchWeights(){var p;try{let y=await fetch(`${x}/weights`,{headers:O});return y.ok?(p=(await y.json()).components)!=null?p:[]:[]}catch(y){return[]}},getGraph(){return{pageNodes:[],capturedAt:0}},dispose(){var p;f.destroy(),G.destroy(),((p=W.get(e.apiKey))==null?void 0:p.dispose)===X.dispose&&W.delete(e.apiKey),e.debug&&console.log("[sentient] disposed")},destroy(){var p;f.destroy(),G.destroy(),k.destroy(),((p=W.get(e.apiKey))==null?void 0:p.dispose)===X.dispose&&W.delete(e.apiKey);try{localStorage.removeItem(Oe+e.apiKey),localStorage.removeItem(At(e.apiKey)),localStorage.removeItem(xt(e.apiKey))}catch(y){}e.debug&&console.log("[sentient] destroyed")}};if(W.set(e.apiKey,{config:e,upgrade:null,dispose:X.dispose}),e.debug){let p=window;p.__sentient&&(p.__sentient.client=X)}return X}var Ot=["pricing","hero","social_proof","cta","features","faq","comparison","trust","navigation","generic"],Zn=[["pricing",/\b(pricing|price|plans?|subscriptions?|per month|\/mo|tier)\b/i],["faq",/\b(faq|frequently asked|common questions?)\b/i],["comparison",/\b(compare|comparison|versus|vs\.)\b/i],["social_proof",/\b(testimonial|reviews?|trusted by|loved by|customers?|logos|rated|case stud)\b/i],["trust",/\b(security|guarantee|privacy|compliance|secure|gdpr|soc ?2|encrypt)\b/i],["features",/\b(features?|how it works|benefits?|capabilit|what you get)\b/i]],Qn=[["pricing",/(?:[$€£]\s?\d[\d,.]*\s*(?:\/|per\s)\s*(?:mo|month|yr|year|seat|user))|(?:\b(?:starter|basic|pro|growth|premium|enterprise)\b[^.]{0,60}[$€£]\s?\d)/i],["social_proof",/(?:★{2,})|(?:\b\d(?:\.\d)?\s*(?:out of|\/)\s*5\b)|(?:\brated\b)|(?:["“][^"”]{20,160}["”]\s*[—–-]\s*[A-Z][a-z]+)/],["trust",/\b(?:money[- ]back guarantee|refund(?:s)? within|encrypted|soc ?2|iso ?27001|gdpr[- ]compliant|cancel anytime)\b/i],["comparison",/\b(?:vs|versus)\b\.?[^.!?]{0,80}\b(?:compare|comparison|plans?|features?|alternative)\b|\bhow (?:we|it) compares?\b/i]];function er(e){var t;let n=e.querySelector("h1, h2, h3");return((t=n==null?void 0:n.textContent)!=null?t:"").slice(0,160)}function _t(e){if(e.tag==="nav"||e.tag==="footer")return{type:"navigation",strength:"weak"};let t=`${e.idClass} ${e.headingText}`.toLowerCase();for(let[n,r]of Zn)if(r.test(t))return{type:n,strength:"strong"};for(let[n,r]of Qn)if(r.test(e.bodyText))return{type:n,strength:"strong"};return e.actionCount>=1&&e.textLength>0&&e.textLength<200?{type:"cta",strength:"weak"}:e.tag==="header"?{type:"hero",strength:"weak"}:/\b(hero|headline|banner)\b/i.test(t)?{type:"hero",strength:"weak"}:{type:"generic",strength:"weak"}}function Tt(e){var t,n;let r=((t=e.textContent)!=null?t:"").replace(/\s+/g," ").trim();return{tag:e.tagName.toLowerCase(),idClass:`${e.id} ${String((n=e.className)!=null?n:"")}`,headingText:er(e),bodyText:r.slice(0,2e3),actionCount:e.querySelectorAll('a, button, [role="button"]').length,textLength:r.length}}function Lt(e){return _t(Tt(e)).type}Ae();var Pt="section, header, footer, nav, main > div, [data-sentient-section]";function tr(e){var t;return((t=e.parentElement)==null?void 0:t.closest(Pt))!=null}function nr(e,t,n,r){try{fetch(`${t}/v1/section-map`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({pageUrl:n,sections:r})}).catch(()=>{})}catch(a){}}var Rt=()=>{};function Dt(e,t){var n,r,a,o,l,d,i,s,c;let u=(n=t.doc)!=null?n:typeof document!="undefined"?document:void 0;if(!u||typeof IntersectionObserver=="undefined"||ue()||!t.apiKey)return Rt;let m=((r=t.apiBase)!=null?r:"https://api.sentient-ui.com").replace(/\/+$/,"").replace(/\/v1$/,""),w=Array.from(u.querySelectorAll(Pt)).filter(S=>!tr(S));if(w.length===0)return Rt;let E=new Map,C=new Map,k=new Map;for(let S of w){let A=S.getAttribute("data-sentient-type"),b=A&&Ot.includes(A)?A:null,h=(o=b!=null?b:(a=t.typeOf)==null?void 0:a.call(t,S))!=null?o:Lt(S),I=`nc-${h}`;E.set(S,I),C.set(I,h),b?k.set(I,"markup"):k.has(I)||k.set(I,"auto")}let g=(s=(i=(d=(l=u.defaultView)!=null?l:typeof window!="undefined"?window:void 0)==null?void 0:d.location)==null?void 0:i.pathname)!=null?s:"/";nr(t.apiKey,m,g,[...C.entries()].map(([S,A])=>{var b;return{componentId:S,semanticType:A,source:(b=k.get(S))!=null?b:"auto"}}));let f=new Map,x=S=>{let A=f.get(S);return A||(A={ms:0,scroll:0,enterAt:null,intersecting:!1},f.set(S,A)),A},O=new IntersectionObserver(S=>{for(let A of S){let b=E.get(A.target);if(!b)continue;let h=x(b);A.isIntersecting?(h.intersecting=!0,h.enterAt=Date.now(),A.intersectionRatio>h.scroll&&(h.scroll=A.intersectionRatio)):(h.intersecting=!1,h.enterAt!=null&&(h.ms+=Date.now()-h.enterAt,h.enterAt=null))}},{threshold:[0,.25,.5,.75,1]});for(let S of E.keys())O.observe(S);let G=()=>{let S=Date.now();for(let[A,b]of f)if(b.enterAt!=null&&(b.ms+=S-b.enterAt,b.enterAt=null),!(b.ms<=0)){try{e.track({projectId:t.apiKey,componentId:A,eventType:"dwell",payload:{dwell_time:Math.round(b.ms),scroll_depth:Number(b.scroll.toFixed(2))}})}catch(h){}b.ms=0}},v=()=>{if(u.hidden)G();else{let S=Date.now();for(let A of f.values())A.intersecting&&(A.enterAt=S)}},D=()=>{G();try{O.disconnect()}catch(S){}};u.addEventListener("visibilitychange",v);let $=(c=u.defaultView)!=null?c:typeof window!="undefined"?window:void 0;$==null||$.addEventListener("pagehide",D);let M=[];return t.microSignals&&[...E.entries()].forEach(([S,A],b)=>{M.push(ve((h,I={})=>{try{e.track({projectId:t.apiKey,componentId:A,eventType:"micro_signal",payload:T({signalType:h},I)})}catch(Y){}},S,void 0,{tabLoss:b===0}))}),()=>{G(),u.removeEventListener("visibilitychange",v),$==null||$.removeEventListener("pagehide",D);for(let S of M)S();try{O.disconnect()}catch(S){}}}var rr=["landing","ecommerce","saas","marketplace"];function or(e){if(typeof e!="object"||e===null||Array.isArray(e))return null;let t=Object.entries(e);if(t.length<1||t.length>4)return null;let n={};for(let[r,a]of t){if(!Array.isArray(a)||a.length<2||a.length>6||!a.every(o=>typeof o=="string"))return null;n[r]=a}return n}function ir(e){return!Array.isArray(e)||e.length<2||e.length>12||!e.every(t=>typeof t=="string")?null:e}function Le(e){if(typeof e!="object"||e===null)return null;let t=e;if(typeof t.apiKey!="string"||!t.apiKey.startsWith("pk_"))return null;let n=rr.includes(t.context)?t.context:"landing",r={};if(typeof t.slots=="object"&&t.slots!==null&&!Array.isArray(t.slots))for(let[o,l]of Object.entries(t.slots)){if(typeof l!="object"||l===null)continue;let d=l,i=or(d.dims);if(!i||d.target!==void 0&&typeof d.target!="string")continue;let s=d.arms!==void 0?ir(d.arms):null,c={dims:i};typeof d.target=="string"&&(c.target=d.target),s&&(c.arms=s),r[o]=c}let a={apiKey:t.apiKey,context:n,personaAttributes:t.personaAttributes===!0,slots:r};return typeof t.consent=="boolean"&&(a.consent=t.consent),(t.preConsentBehavior==="statistical_winner"||t.preConsentBehavior==="control")&&(a.preConsentBehavior=t.preConsentBehavior),t.debug===!0&&(a.debug=!0),typeof t.registry=="boolean"&&(a.registry=t.registry),typeof t.editorSrc=="string"&&(a.editorSrc=t.editorSrc),typeof t.apiBase=="string"&&(a.apiBase=t.apiBase),typeof t.sectionCapture=="boolean"&&(a.sectionCapture=t.sectionCapture),a}function Mt(e){var n,r,a;let t=(r=(n=e.defaultView)!=null?n:typeof window!="undefined"?window:void 0)==null?void 0:r.location;return(a=t==null?void 0:t.pathname)!=null?a:""}function sr(e,t){var n;if(t.tag&&e.tagName.toLowerCase()!==t.tag.toLowerCase())return!1;if(t.text){let r=((n=e.textContent)!=null?n:"").trim().toLowerCase(),a=t.text.trim().toLowerCase();if(!(r===a||r.startsWith(a)||a.startsWith(r)))return!1}return!0}function Nt(e,t){return!!(e!=null&&e.urlMatch)&&!Mt(t).includes(e.urlMatch)}var ar=/^[a-zA-Z_][-a-zA-Z0-9_]*$/;function re(e,t){var a;if(e.urlMatch&&!Mt(t).includes(e.urlMatch))return null;let n=[];if(e.id){let o=t.getElementById(e.id);n=o?[o]:[]}if(n.length===0&&((a=e.dataAttr)!=null&&a.name)&&ar.test(e.dataAttr.name))try{let o=e.dataAttr.value.replace(/["\\]/g,"\\$&");n=Array.from(t.querySelectorAll(`[${e.dataAttr.name}="${o}"]`))}catch(o){n=[]}if(n.length===0&&e.selector)try{n=Array.from(t.querySelectorAll(e.selector))}catch(o){n=[]}if(n.length!==1)return null;let r=n[0];return e.fingerprint&&!sr(r,e.fingerprint)?null:r}var $t={color:"color",background:"background",fontSize:"font-size",fontWeight:"font-weight",textAlign:"text-align",padding:"padding",margin:"margin",borderRadius:"border-radius",width:"width",height:"height",maxWidth:"max-width",border:"border",boxShadow:"box-shadow",opacity:"opacity",lineHeight:"line-height",letterSpacing:"letter-spacing",textTransform:"text-transform",gap:"gap",fontFamily:"font-family"},lr=/^(rgb|rgba|hsl|hsla|calc|var|min|max|clamp)$/i;function jt(e){var t;if(e.trim().length===0||/[;{}<>]/.test(e))return!1;for(let n of e.matchAll(/([A-Za-z-]*)\(/g))if(!lr.test((t=n[1])!=null?t:""))return!1;return!0}var Kt=/^https:\/\//i,Bt=new Map,oe=null;function cr(e){return e.replace(/["\\]/g,"\\$&")}function ur(e){var t;(!oe||!oe.isConnected)&&(oe=e.querySelector("style[data-sentient-ops]"),oe||(oe=e.createElement("style"),oe.setAttribute("data-sentient-ops",""),((t=e.head)!=null?t:e.documentElement).appendChild(oe))),oe.textContent=[...Bt.entries()].map(([n,r])=>`[data-snt-e="${cr(n)}"]{${r}}`).join(`
2
- `)}function Ut(e,t,n,r){var d;let a=!1,o=(d=t.moveBefore)!=null?d:t.moveAfter;if(o){let i=re(o,r);!i||i===e||i.parentElement!==e.parentElement||!e.parentElement?a=!0:t.moveBefore?e.parentElement.insertBefore(e,i):e.parentElement.insertBefore(e,i.nextSibling)}typeof t.text=="string"&&(e.textContent=t.text),typeof t.href=="string"&&Kt.test(t.href)&&e.setAttribute("href",t.href),typeof t.imageSrc=="string"&&Kt.test(t.imageSrc)&&e.setAttribute("src",t.imageSrc),typeof t.imageAlt=="string"&&e.setAttribute("alt",t.imageAlt);let l=[];if(t.hidden&&l.push("display:none !important"),t.style)for(let[i,s]of Object.entries(t.style)){let c=$t[i];c&&typeof s=="string"&&jt(s)&&l.push(`${c}:${s.trim()} !important`)}return l.length>0&&(e.setAttribute("data-snt-e",n),Bt.set(n,l.join(";")),ur(r)),{anchorMiss:a}}function Re(e,t,n){n.documentElement.setAttribute("data-sentient-persona",e),n.documentElement.setAttribute("data-sentient-confidence",t)}function Pe(e,t,n){var r;for(let[a,o]of Object.entries(t)){let l=e[a];if(!l||typeof l=="string")continue;let d=o.target?Array.from(n.querySelectorAll(o.target)):[n.documentElement];for(let i of d)for(let[s,c]of Object.entries(l))(r=o.dims[s])!=null&&r.includes(c)&&i.setAttribute(`data-${s}`,c)}}function De(e,t,n){for(let[r,a]of Object.entries(t)){let o=e[r];if(typeof o!="string"||!a.arms||!a.arms.includes(o))continue;let l=a.target?Array.from(n.querySelectorAll(a.target)):[n.documentElement];for(let d of l)d.setAttribute("data-sentient-arm",o)}}function Me(e,t,n,r){var l,d;let a=(l=r==null?void 0:r.contentAndOps)!=null?l:!0,o=[];for(let[i,s]of Object.entries(t)){if(Nt(s.locator,n))continue;let c;if(s.locator){let m=re(s.locator,n);c=m?[m]:[]}else s.target?c=Array.from(n.querySelectorAll(s.target)):c=[n.documentElement];(s.locator||s.target)&&c.length===0&&o.push(i);let u=e[i];for(let m of c){if(u!==void 0)if(typeof u=="string")m.setAttribute("data-sentient-arm",u),a&&((d=r==null?void 0:r.onApplied)==null||d.call(r,i,u,m));else for(let[w,E]of Object.entries(u))m.setAttribute(`data-${w}`,E);a&&(typeof s.content=="string"&&(m.textContent=s.content),s.ops&&Ut(m,s.ops,i,n).anchorMiss&&!o.includes(i)&&o.push(i))}}return o}var dr=800;function Ne(e,t,n){let r=[];return n.forEach(({slotId:a,arm:o,el:l},d)=>{r.push(ve((m,w={})=>{try{e.track({projectId:t,componentId:a,variantId:o,eventType:"micro_signal",payload:le({signalType:m},w)})}catch(E){}},l,void 0,{tabLoss:d===0}));let i=null,s=0,c=()=>{s=Date.now(),i=setTimeout(()=>{try{e.track({projectId:t,componentId:a,variantId:o,eventType:"cursor_signal",payload:{hoverDuration:Date.now()-s}})}catch(m){}i=null},dr)},u=()=>{i!==null&&(clearTimeout(i),i=null)};l.addEventListener("mouseenter",c),l.addEventListener("mouseleave",u),r.push(()=>{l.removeEventListener("mouseenter",c),l.removeEventListener("mouseleave",u),i!==null&&clearTimeout(i)})}),()=>{for(let a of r)a()}}function pr(e){var n,r,a;let t=(r=(n=e.defaultView)!=null?n:typeof window!="undefined"?window:void 0)==null?void 0:r.location;return(a=t==null?void 0:t.pathname)!=null?a:""}function fr(e,t){if(!e)return!1;if(e==="/")return t==="/";let n=e.endsWith("/")?e.slice(0,-1):e;return t===n||t.startsWith(`${n}/`)}var Gt="_snt_fired_goals";function gr(e){try{let t=e==null?void 0:e.sessionStorage.getItem(Gt);if(!t)return new Set;let n=JSON.parse(t);return Array.isArray(n)?new Set(n.filter(r=>typeof r=="string")):new Set}catch(t){return new Set}}function mr(e,t){try{e==null||e.sessionStorage.setItem(Gt,JSON.stringify([...t]))}catch(n){}}function qt(e,t,n){var C,k;let r=(C=n.defaultView)!=null?C:typeof window!="undefined"?window:null,a=gr(r),o=g=>{if(!a.has(g.goalId)){a.add(g.goalId),mr(r,a);try{g.slotId?t.componentGoal(g.slotId,g.goalId):t.goal(g.goalId)}catch(f){}}},l=e.filter(g=>g.event==="click"),d=e.filter(g=>g.event==="form_submit"),i=e.filter(g=>g.event==="url_reached"),s=e.filter(g=>g.event==="scroll_depth"),c=(g,f)=>{if(!g.locator)return!1;let x=re(g.locator,n);return!!x&&(x===f||x.contains(f))},u=g=>{let f=g.target;if(!(!f||typeof f.closest!="function"))for(let x of l)c(x,f)&&o(x)},m=g=>{let f=g.target;if(f)for(let x of d)c(x,f)&&o(x)},w=()=>{if(i.length===0)return;let g=pr(n);for(let f of i)f.urlPattern&&fr(f.urlPattern,g)&&o(f)},E=()=>{var x;let g=n.documentElement,f=g.scrollHeight>0?(g.scrollTop+g.clientHeight)/g.scrollHeight:0;for(let O of s)f>=((x=O.threshold)!=null?x:.75)&&o(O);s.every(O=>a.has(O.goalId))&&n.removeEventListener("scroll",E)};return n.addEventListener("click",u,!0),n.addEventListener("submit",m,!0),(k=n.defaultView)==null||k.addEventListener("popstate",w),w(),s.length>0&&(n.addEventListener("scroll",E,{passive:!0}),E()),{checkUrl:w,teardown:()=>{var g;n.removeEventListener("click",u,!0),n.removeEventListener("submit",m,!0),(g=n.defaultView)==null||g.removeEventListener("popstate",w),s.length>0&&n.removeEventListener("scroll",E)}}}var Wt="__snt_editor_token";function Vt(){try{return typeof sessionStorage!="undefined"?sessionStorage.getItem(Wt):null}catch(e){return null}}function zt(e){try{sessionStorage.setItem(Wt,e)}catch(t){}}var Je="0.14.1",Qt=5e3,hr=50,yr=(()=>{try{if(typeof window=="undefined")return[];let e=window.SentientSnippet;return Array.isArray(e==null?void 0:e.q)?e.q:[]}catch(e){return[]}})(),V=null,N=null,te={},ie=null,H=null,K=null,ee=null,L=null,Jt=!1,ze=null,$e=null,je=null,be=!1,Ke=!1;function en(e,t){return Promise.race([e,new Promise(n=>setTimeout(()=>n(null),t))])}function de(e,...t){e!=null&&e.debug&&console.log("[sentient-snippet]",...t)}function pe(e,t){return V?(V.personaAttributes&&L&&Re(L.persona,L.band,e),Pe(te,V.slots,e),De(te,V.slots,e),ie?Me(te,ie,e,t):[]):[]}function vr(e,t){var n;if(t.length!==0)try{let r=(n=e.apiBase)!=null?n:"https://api.sentient-ui.com";fetch(`${r}/v1/locator-miss`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({slots:t})}).catch(()=>{})}catch(r){}}function we(){return!!(V&&N&&V.sectionCapture!==!1&&(V.consent!==!1||Ke)&&!ue())}function br(){if(!N||!V||!we()||ee)return;let e=[];pe(document,{contentAndOps:be,onApplied:(t,n,r)=>e.push({slotId:t,arm:n,el:r})}),He();try{K==null||K(),K=Ne(N,V.apiKey,e)}catch(t){}}function He(){if(typeof document=="undefined"||!we())return;let e;try{if($e&&$e.length>0){let t=new Map;for(let n of $e){if(n.urlMatch!==window.location.pathname)continue;let r=re(n.locator,document);r&&t.set(r,n.type)}t.size>0&&(e=n=>{var r;return(r=t.get(n))!=null?r:null})}}catch(t){}try{ee=Dt(N,le({apiKey:V.apiKey,apiBase:V.apiBase,doc:document,microSignals:!0},e?{typeOf:e}:{})),je=window.location.pathname}catch(t){}}function Ye(){try{let e=[];if(K==null||K(),K=null,pe(document,{contentAndOps:be,onApplied:(t,n,r)=>e.push({slotId:t,arm:n,el:r})}),e.length>0&&we())try{K=Ne(N,V.apiKey,e)}catch(t){}try{typeof window!="undefined"&&je!==null&&window.location.pathname!==je&&we()&&(ee==null||ee(),ee=null,He())}catch(t){}}catch(e){}}function Ft(){ze===null&&(ze=setTimeout(()=>{ze=null,Ye();try{H==null||H.checkUrl()}catch(e){}},hr))}function Ht(){if(!(Jt||typeof window=="undefined"||typeof history=="undefined")){Jt=!0;try{let e=t=>{let n=history[t];history[t]=function(r,a,o){let l=n.call(this,r,a,o!=null?o:null);return Ft(),l}};e("pushState"),e("replaceState"),window.addEventListener("popstate",Ft)}catch(e){}}}function Fe(e){let t={};for(let[n,r]of Object.entries(e.slots))t[n]=r.target?document.querySelectorAll(r.target).length:1;return t}function tn(e){return new URLSearchParams(e).get("sentient_editor")}function wr(){try{let t=Array.from(document.getElementsByTagName("script")).find(n=>/snippet(\.global)?\.js/.test(n.src));if(t!=null&&t.src)return t.src.replace(/snippet(\.global)?\.js/,"editor.global.js")}catch(e){}return null}function Sr(e,t){var n,r,a,o;try{window.__sentientEditor={token:t,apiBase:(n=e.apiBase)!=null?n:"https://api.sentient-ui.com"};try{let i=document.createElement("meta");i.name="referrer",i.content="no-referrer",i.setAttribute("data-sentient-editor",""),((r=document.head)!=null?r:document.documentElement).appendChild(i)}catch(i){}let l=(a=e.editorSrc)!=null?a:wr();if(!l){Xt();return}let d=document.createElement("script");d.src=l,d.async=!0,d.onerror=()=>Xt(),((o=document.head)!=null?o:document.documentElement).appendChild(d)}catch(l){}}var Yt="sentient-editor-load-notice";function Xt(){var e;try{if(typeof document=="undefined"||document.getElementById(Yt))return;let t=document.createElement("div");t.id=Yt,t.textContent="Couldn\u2019t load the editor \u2014 check your connection and reopen it from your dashboard.",Object.assign(t.style,{position:"fixed",bottom:"16px",right:"16px",zIndex:"2147483647",maxWidth:"320px",padding:"14px 16px",borderRadius:"14px",background:"#111827",color:"#fff",font:"13px/1.45 system-ui, sans-serif",border:"1px solid rgba(245,158,11,0.6)",boxShadow:"0 10px 34px rgba(0,0,0,0.45)",cursor:"pointer"}),t.addEventListener("click",()=>t.remove()),((e=document.body)!=null?e:document.documentElement).appendChild(t),setTimeout(()=>t.remove(),1e4)}catch(t){}}function nn(e){let t=new URLSearchParams(e).get("sentient_preview");if(!t)return null;let n={};for(let r of t.split("|")){let a=r.indexOf(":"),o=a===-1?"":r.slice(0,a),l=a===-1?"":r.slice(a+1);if(!(!o||!l))if(l.includes("=")){let d={};for(let i of l.split(",")){let[s,c]=i.split("=");s&&c&&(d[s]=c)}Object.keys(d).length&&(n[o]=d)}else n[o]=l}return Object.keys(n).length?n:null}function rn(e){try{return new URLSearchParams(e).get("sentient_persona")||null}catch(t){return null}}var Zt="sentient-persona-preview-banner";function Ar(e){var t;try{if(typeof document=="undefined"||document.getElementById(Zt))return;let n=e.charAt(0).toUpperCase()+e.slice(1).replace(/[_-]+/g," "),r=document.createElement("div");r.id=Zt,r.setAttribute("role","status"),Object.assign(r.style,{position:"fixed",bottom:"16px",left:"50%",transform:"translateX(-50%)",zIndex:"2147483647",display:"flex",alignItems:"center",gap:"12px",padding:"10px 14px",borderRadius:"999px",background:"#111827",color:"#fff",font:"13px/1 system-ui, sans-serif",boxShadow:"0 10px 34px rgba(0,0,0,0.45)",border:"1px solid rgba(255,255,255,0.14)"});let a=document.createElement("span");a.textContent=`Previewing as ${n}`;let o=document.createElement("button");o.type="button",o.textContent="Exit preview",Object.assign(o.style,{cursor:"pointer",border:"1px solid rgba(255,255,255,0.3)",background:"transparent",color:"#fff",font:"inherit",padding:"4px 10px",borderRadius:"999px"}),o.addEventListener("click",()=>{try{let l=new URL(window.location.href);l.searchParams.delete("sentient_persona"),window.location.href=l.pathname+l.search+l.hash}catch(l){}}),r.appendChild(a),r.appendChild(o),((t=document.body)!=null?t:document.documentElement).appendChild(r)}catch(n){}}async function xr(e,t){var s,c,u,m,w,E,C,k,g;let n=(s=e.apiBase)!=null?s:"https://api.sentient-ui.com",a=((c=e.registry)!=null?c:Object.keys(e.slots).length===0)?{persona:t,slotsFrom:"registry"}:{persona:t,slots:Object.entries(e.slots).map(([f,x])=>({id:f,dims:x.dims}))},o=await en(fetch(`${n}/v1/explain`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${e.apiKey}`},body:JSON.stringify(a)}).then(f=>f.ok?f.json():null).catch(()=>null),Qt);if(!o){de(e,"persona preview: explain unavailable \u2014 page left as-is");return}let l=o;te=(u=l.slots)!=null?u:{},ie=(m=l.slotConfig)!=null?m:null;let d=(C=(E=(w=l.personaAttributes)==null?void 0:w.persona)!=null?E:l.persona)!=null?C:t,i=(g=(k=l.personaAttributes)==null?void 0:k.confidence)!=null?g:"high";L={persona:d,band:i},pe(document),be=!0,on(e),Ar(d)}function on(e){let t={goal(n,r){try{N==null||N.goal(n,r)}catch(a){}},componentGoal(n,r){try{N==null||N.componentGoal(n,r)}catch(a){}},grantConsent(){try{Ve(e.apiKey)}catch(n){}Ke=!0;try{br()}catch(n){}},revokeConsent(){try{ee==null||ee(),ee=null,je=null,K==null||K(),K=null,H==null||H.teardown(),H=null,Ke=!1,N==null||N.destroy()}catch(n){}},reapply:Ye,getState(){var n,r;return{apiKey:e.apiKey,persona:(n=L==null?void 0:L.persona)!=null?n:null,band:(r=L==null?void 0:L.band)!=null?r:null,slots:te,matchCounts:Fe(e),consent:e.consent!==!1}}};window.SentientSnippet=t;for(let n of yr.splice(0))try{n[0]==="goal"&&t.goal(n[1],n[2])}catch(r){}}async function sn(){var e,t,n,r,a;try{let o=Le(window.sentient);if(!o)return;V=o,be=!1,Ke=!1;let l=typeof window!="undefined"?tn(window.location.search):null;if(l){zt(l);try{let f=new URL(window.location.href);f.searchParams.delete("sentient_editor"),window.history.replaceState(null,"",f.pathname+f.search+f.hash)}catch(f){}}let d=l!=null?l:Vt();if(d){Sr(o,d),de(o,"editor mode");return}let i=typeof window!="undefined"?nn(window.location.search):null;if(i){te=i,L=null,pe(document),Ht(),de(o,"preview mode",i);return}let s=typeof window!="undefined"?rn(window.location.search):null;if(s){await xr(o,s),de(o,"persona preview",s);return}let c=(e=o.registry)!=null?e:Object.keys(o.slots).length===0,u=_e(o.apiKey);u&&(L={persona:u.persona,band:u.band},te=u.slots,u.slotConfig&&(ie=u.slotConfig),pe(document,{contentAndOps:!1}));let m=Te({apiKey:o.apiKey,context:o.context,consent:o.consent,preConsentBehavior:o.preConsentBehavior,debug:o.debug});N=m,on(o),Ht();let w=Object.entries(o.slots).map(([f,x])=>({id:f,dims:x.dims})),E=Je!=="0.0.0-dev"?{v:Je}:{},C=await en(m.decide(le(le({slots:w},E),c?{slotsFrom:"registry"}:{})),Qt);if(!C){de(o,"decide timeout/null \u2014 snapshot state stands",Fe(o));return}let k=m.getPersona();k?L={persona:k.persona,band:k.band}:C.persona&&(L={persona:C.persona,band:"low"}),te=C.slots,c?ie=(t=C.slotConfig)!=null?t:null:C.slotConfig&&(ie=C.slotConfig);let g=[];if(vr(o,pe(document,{onApplied:(f,x,O)=>g.push({slotId:f,arm:x,el:O})})),be=!0,C.goals&&C.goals.length>0&&o.consent!==!1&&N)try{H==null||H.teardown(),H=qt(C.goals,N,document)}catch(f){}if($e=(n=C.sectionMap)!=null?n:null,we()){He();try{K==null||K(),K=Ne(N,o.apiKey,g)}catch(f){}}de(o,"applied",{persona:L,slots:te,matches:Fe(o)}),ye(o.apiKey,le({v:1,persona:(r=L==null?void 0:L.persona)!=null?r:C.persona,band:(a=L==null?void 0:L.band)!=null?a:"low",slots:C.slots,layoutOrder:C.layoutOrder,savedAt:Date.now()},ie?{slotConfig:ie}:{}))}catch(o){}}if(typeof window!="undefined"&&window.sentient){let e=window;e.__sentientInitialized||(e.__sentientInitialized=!0,sn())}return pn(Ir);})();
1
+ "use strict";var SentientSnippet=(()=>{var xe=Object.defineProperty;var un=Object.getOwnPropertyDescriptor;var dn=Object.getOwnPropertyNames,et=Object.getOwnPropertySymbols;var nt=Object.prototype.hasOwnProperty,pn=Object.prototype.propertyIsEnumerable;var tt=(e,t,n)=>t in e?xe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,le=(e,t)=>{for(var n in t||(t={}))nt.call(t,n)&&tt(e,n,t[n]);if(et)for(var n of et(t))pn.call(t,n)&&tt(e,n,t[n]);return e};var rt=(e,t)=>()=>(e&&(t=e(e=0)),t);var ot=(e,t)=>{for(var n in t)xe(e,n,{get:t[n],enumerable:!0})},fn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of dn(t))!nt.call(e,a)&&a!==n&&xe(e,a,{get:()=>t[a],enumerable:!(r=un(t,a))||r.enumerable});return e};var gn=e=>fn(xe({},"__esModule",{value:!0}),e);var mn,hn,yn,it,vn,bn,st,T,he,Ie=rt(()=>{"use strict";mn=Object.defineProperty,hn=Object.defineProperties,yn=Object.getOwnPropertyDescriptors,it=Object.getOwnPropertySymbols,vn=Object.prototype.hasOwnProperty,bn=Object.prototype.propertyIsEnumerable,st=(e,t,n)=>t in e?mn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,T=(e,t)=>{for(var n in t||(t={}))vn.call(t,n)&&st(e,n,t[n]);if(it)for(var n of it(t))bn.call(t,n)&&st(e,n,t[n]);return e},he=(e,t)=>hn(e,yn(t))});var mt={};ot(mt,{LOCAL_ENGINE_AVAILABLE:()=>An,createLocalEngine:()=>xn});function xn(e){throw new Error("[sentient] createLocalEngine is not available in production builds. The local engine only exists under the `development` export condition.")}var An,ht=rt(()=>{"use strict";An=!1});var Cr={};ot(Cr,{applyPersonaAttributes:()=>De,applyRegistrySlots:()=>Ne,applySlotArms:()=>$e,applySlotAttributes:()=>Me,parseEditorToken:()=>rn,parsePersonaPreview:()=>sn,parsePreview:()=>on,parseSnippetConfig:()=>Pe,reapply:()=>Qe,run:()=>ln,version:()=>Ye});Ie();function ke(e){return Object.keys(e).sort().map(t=>`${t}=${e[t]}`).join("|")}function at(e){if(e.length===0)return null;let t={};for(let n of e.split("|")){let r=n.indexOf("=");if(r<=0||r!==n.lastIndexOf("=")||r===n.length-1)return null;let a=n.slice(0,r);if(a in t)return null;t[a]=n.slice(r+1)}return t}function Ge(e){var t,n,r;if(e.arms)return typeof e.baseline=="string"?e.baseline:(t=e.arms[0])!=null?t:"";if(e.baseline!==void 0&&typeof e.baseline=="object")return ke(e.baseline);if(typeof e.baseline=="string")return e.baseline;let a={};for(let[o,l]of Object.entries((n=e.dims)!=null?n:{}))a[o]=(r=l[0])!=null?r:"";return ke(a)}function lt(e,t){var n,r;return e.dims!=null?(r=(n=at(t))!=null?n:at(Ge(e)))!=null?r:{}:t}function ce(e){return e>=.3?e<.7?"medium":"high":"low"}var wn=["GPTBot","ChatGPT-User","OAI-SearchBot","ClaudeBot","Claude-User","Claude-SearchBot","PerplexityBot","Perplexity-User","Google-Extended","Applebot-Extended","Meta-ExternalAgent","Bytespider","CCBot","Amazonbot","cohere-ai","Diffbot"];function ct(e){return Sn(e)!==null}function Sn(e){var t;if(!e)return null;let n=e.toLowerCase();return(t=wn.find(r=>n.includes(r.toLowerCase())))!=null?t:null}function ut(e){let t=e.toLowerCase();return/ipad|tablet|playbook|kindle|silk/.test(t)?"tablet":/mobi|iphone|ipod|android.*mobile|phone/.test(t)?"mobile":"desktop"}function dt(e,t){if(!e)return"direct";try{let n=new URL(e);if(t)try{if(new URL(t).host===n.host)return"direct"}catch(a){}let r=n.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(r)?"search":/(^|\.)(twitter\.com|x\.com|facebook\.com|linkedin\.com|reddit\.com|t\.co)$/.test(r)?"social":"referral"}catch(n){return"direct"}}function pt(e){if(!e)return null;try{return new URL(e).hostname}catch(t){return null}}function ft(e){let t=e.getHours();return t<6?"night":t<12?"morning":t<18?"afternoon":"evening"}function qe(e){return T(T(T({id:e.id},e.arms?{arms:[...e.arms]}:{}),e.dims?{dims:Object.fromEntries(Object.entries(e.dims).map(([t,n])=>[t,[...n]]))}:{}),e.baseline!==void 0?{baseline:e.baseline}:{})}function We(e){let t=qe(e);return lt(t,Ge(t))}function gt(e){return typeof e=="string"?e:ke(e)}Ie();function vt(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(e){}try{if(typeof crypto!="undefined"&&typeof crypto.getRandomValues=="function"){let e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t="";for(let n=0;n<16;n++)t+=e[n].toString(16).padStart(2,"0"),(n===3||n===5||n===7||n===9)&&(t+="-");return t}}catch(e){}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}function bt(e){return e?`_${e.slice(0,12)}`:""}var In="_snt_uid",kn=365,En="_snt_uid";function Cn(){return vt()}function On(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function _n(e,t,n){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${n}; SameSite=strict; path=/`}catch(r){}}function Tn(e){try{return localStorage.getItem(e)}catch(t){return null}}function Ln(e,t){try{return localStorage.setItem(e,t),!0}catch(n){return!1}}function Rn(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function Pn(e,t){try{return sessionStorage.setItem(e,t),!0}catch(n){return!1}}function Dn(e){try{sessionStorage.removeItem(e)}catch(t){}}function Mn(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function $n(e){try{localStorage.removeItem(e)}catch(t){}}function Nn(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var jn={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function wt(e){var t,n,r,a,o,l;if(typeof window=="undefined")return jn;let u=bt(e==null?void 0:e.apiKey),i=(t=e==null?void 0:e.cookieName)!=null?t:`${In}${u}`,s=`${En}${u}`,c=((n=e==null?void 0:e.cookieTTLDays)!=null?n:kn)*24*60*60,d=g=>g&&g.length>0?g:null,m=(l=(o=(a=(r=d(On(i)))!=null?r:d(Tn(s)))!=null?a:d(Rn(s)))!=null?o:d(e==null?void 0:e.ssrSessionId))!=null?l:Cn();_n(i,m,c);let w=Ln(s,m),E=Mn(i),C=w?!1:Pn(s,m),k=!w&&!E&&!C;return{getSessionId:()=>m,isEphemeral:()=>k,destroy:()=>{m=null,Nn(i),$n(s),Dn(s)}}}function Oe(e){return Math.min(6e4,1e3*2**Math.min(e,6))}function St(e){if(e.ok===!0)return"delivered";let{status:t}=e;return typeof t!="number"?"retry":t>=200&&t<300?"delivered":t>=400&&t<500&&t!==429?"dropped":"retry"}function At(e,t){try{let n=localStorage.getItem(e);if(!n)return[];let r=JSON.parse(n);return Array.isArray(r)?(localStorage.removeItem(e),r.slice(-t)):[]}catch(n){return[]}}function _e(e,t,n){try{let r=(()=>{try{let o=localStorage.getItem(n);if(!o)return[];let l=JSON.parse(o);return Array.isArray(l)?l:[]}catch(o){return[]}})(),a=new Map;for(let o of r)a.set(o.id,o);for(let o of e)a.set(o.id,o);localStorage.setItem(n,JSON.stringify([...a.values()].slice(-t)))}catch(r){}}function xt(e,t){try{let n=localStorage.getItem(t);if(!n)return;let r=JSON.parse(n);if(!Array.isArray(r))return;let a=new Set(e),o=r.filter(l=>!a.has(l.id));if(o.length===r.length)return;o.length===0?localStorage.removeItem(t):localStorage.setItem(t,JSON.stringify(o))}catch(n){}}var Kn=500,Bn=56*1024;function It(e){return`_snt_retry_${e.slice(0,12)}`}var Un={push:()=>{},flush:()=>{},destroy:()=>{}};function Gn(e){var t,n,r;if(typeof window=="undefined")return Un;let a=(t=e.flushIntervalMs)!=null?t:5e3,o=(n=e.maxBatchSize)!=null?n:20,l=(r=e.maxRetrySize)!=null?r:100,u=e.ingestUrl,i=e.apiKey,s=It(i),c=[],d=new Set,m=[],w=h=>{for(let I of h)E.delete(I),!d.has(I)&&(d.add(I),m.push(I));for(;m.length>Kn;){let I=m.shift();I&&d.delete(I)}xt(h,s)},E=new Set,C=h=>{d.has(h.id)||E.has(h.id)||(E.add(h.id),c.push(h))},k=h=>{for(let I of h)d.has(I.id)||(E.add(I.id),c.push(I))},g=At(s,l);for(let h of g)C(h);let f=0,x=0,O=h=>{if(h.length===0)return;let I=JSON.stringify(h),X=h.map(te=>te.id),K;try{K=fetch(u,{method:"POST",keepalive:!0,body:I,headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`}})}catch(te){_e(h,l,s),k(h),x++,f=Date.now()+Oe(x);return}let re=te=>{if(St(te)!=="retry"){w(X),x=0,f=0;return}_e(h,l,s),k(h),x++,f=Date.now()+Oe(x)};K instanceof Promise?K.then(re).catch(()=>{_e(h,l,s),k(h),x++,f=Date.now()+Oe(x)}):re(K)},q=typeof TextEncoder!="undefined"?new TextEncoder:null,v=h=>q?q.encode(h).length:h.length,P=h=>{let I=[],X=2;for(let K of h){let re=v(JSON.stringify(K))+1;if(I.length>0&&X+re>Bn||I.length>=o)break;I.push(K),X+=re}return I},$=()=>{try{if(Date.now()<f)return;for(;c.length>0&&!(Date.now()<f);){let h=c.filter(X=>!d.has(X.id));if(c.length=0,h.length===0)break;let I=P(h);if(I.length===0)break;I.length<h.length&&c.push(...h.slice(I.length)),O(I)}}catch(h){}},D=!0,S=null;S=setInterval(()=>{D&&$()},a);let A=()=>{document.visibilityState==="hidden"&&$()},b=()=>{$()};return document.addEventListener("visibilitychange",A),window.addEventListener("pagehide",b),{push(h){C(h),c.length>=o&&$()},flush:$,destroy(){D=!1,S!==null&&(clearInterval(S),S=null),document.removeEventListener("visibilitychange",A),window.removeEventListener("pagehide",b),$()}}}var qn=200;function kt(e){return`_snt_goal_retry_${e.slice(0,12)}`}var Wn={send:()=>{},flush:()=>{},destroy:()=>{}};function zn(e){var t,n,r;if(typeof window=="undefined")return Wn;let a=(t=e.flushIntervalMs)!=null?t:5e3,o=(n=e.maxRetrySize)!=null?n:100,l=(r=e.maxPerFlush)!=null?r:5,u=kt(e.apiKey),i=[],s=new Set,c=new Set,d=[],m=0,w=0,E=!1,C=v=>{for(s.delete(v.id),c.has(v.id)||(c.add(v.id),d.push(v.id));d.length>qn;){let P=d.shift();P&&c.delete(P)}xt([v.id],u)},k=v=>{_e([v],o,u),!c.has(v.id)&&!s.has(v.id)&&(s.add(v.id),i.push(v)),w++,m=Date.now()+Oe(w)},g=v=>{let P;try{P=fetch(e.url,{method:"POST",keepalive:!0,body:v.body,headers:e.headers})}catch(D){k(v);return}let $=D=>{var S;let A=St(D);if(A==="retry"){k(v);return}A==="dropped"&&((S=e.onDrop)==null||S.call(e,v,D.status)),C(v),w=0,m=0};P instanceof Promise?P.then($).catch(()=>k(v)):$(P)},f=()=>{try{if(E||Date.now()<m)return;let v=0;for(;i.length>0&&v<l&&!(Date.now()<m);){let P=i.shift();s.delete(P.id),!c.has(P.id)&&(v++,g(P))}}catch(v){}};for(let v of At(u,o))s.has(v.id)||(s.add(v.id),i.push(v));let x=setInterval(f,a),O=()=>{document.visibilityState==="hidden"&&f()},q=()=>f();return document.addEventListener("visibilitychange",O),window.addEventListener("pagehide",q),{send(v){if(!E&&!(c.has(v.id)||s.has(v.id))){if(Date.now()<m){s.add(v.id),i.push(v);return}g(v)}},flush:f,destroy(){clearInterval(x),document.removeEventListener("visibilitychange",O),window.removeEventListener("pagehide",q),f(),E=!0}}}var Vn=1800*1e3;function Ee(e,t){return`${encodeURIComponent(e)}:${encodeURIComponent(t)}`}function Jn(e=Vn,t){let n=new Map,r=`_snt_asgn${bt(t)}_`,a=(i,s)=>`${r}${encodeURIComponent(i)}:${encodeURIComponent(s)}`,o=i=>{let s=i.slice(r.length),c=s.indexOf(":");if(c<0)return null;try{return{componentId:decodeURIComponent(s.slice(0,c)),segment:decodeURIComponent(s.slice(c+1))}}catch(d){return null}},l=()=>{try{let i=[];for(let s=0;s<localStorage.length;s++){let c=localStorage.key(s);c!=null&&c.startsWith(r)&&i.push(c)}return i}catch(i){return[]}},u=i=>i.assignedAt+(i.ttlMs&&i.ttlMs>0?i.ttlMs:e)<Date.now();return typeof window!="undefined"&&(()=>{for(let i of l())try{let s=localStorage.getItem(i);if(!s)continue;let c=JSON.parse(s);if(u(c)){localStorage.removeItem(i);continue}let d=o(i);if(!d)continue;n.set(Ee(d.componentId,d.segment),c)}catch(s){}})(),{get(i,s){let c=n.get(Ee(i,s));return c?u(c)?(n.delete(Ee(i,s)),null):c:null},set(i,s,c){let d=Ee(i,s);n.set(d,c);try{localStorage.setItem(a(i,s),JSON.stringify(c))}catch(m){}},invalidate(i){let s=`${encodeURIComponent(i)}:`;for(let c of[...n.keys()])c.startsWith(s)&&n.delete(c);for(let c of l()){let d=o(c);if((d==null?void 0:d.componentId)===i)try{localStorage.removeItem(c)}catch(m){}}},clear(){n.clear();for(let i of l())try{localStorage.removeItem(i)}catch(s){}}}}var Te="_snt_snap:",Fn=["low","medium","high"];function Le(e){try{let t=localStorage.getItem(Te+e);if(!t)return null;let n=JSON.parse(t);return!n||typeof n!="object"||n.v!==1||typeof n.persona!="string"||typeof n.band!="string"||!Fn.includes(n.band)||typeof n.slots!="object"||n.slots===null||Array.isArray(n.slots)||!(n.layoutOrder===null||Array.isArray(n.layoutOrder))||typeof n.savedAt!="number"||!(n.slotConfig===void 0||typeof n.slotConfig=="object"&&n.slotConfig!==null&&!Array.isArray(n.slotConfig))?null:n}catch(t){return null}}function ve(e,t){try{localStorage.setItem(Te+e,JSON.stringify(t))}catch(n){}}var Ve="[sentient] No API key configured \u2014 nothing is being learned. Set NEXT_PUBLIC_SENTIENT_API_KEY or pass localMode: true for local development.",Et="[sentient] Local mode \u2014 decisions are simulated on-device and nothing is sent over the network. Add an API key to learn from real traffic.",yt=!1,Ce=!1;function Hn(){var e;try{return(e=new URLSearchParams(window.location.search).get("sentient_persona"))!=null?e:void 0}catch(t){return}}function Yn(e){var t;let n=wt({ssrSessionId:e.ssrSessionId,apiKey:e.apiKey}),r=(t=n.getSessionId())!=null?t:"local",a=Hn(),o=Promise.resolve().then(()=>(ht(),mt)).then(i=>{let s=i;return s.LOCAL_ENGINE_AVAILABLE?(yt||(yt=!0,console.info(Et)),s):(Ce||(Ce=!0,console.error(Ve)),null)}).catch(()=>(Ce||(Ce=!0,console.error(Ve)),null)),l=null;function u(i){let s=document.documentElement;s.dataset.sentientPersona===void 0&&(s.dataset.sentientPersona=i.persona,s.dataset.sentientConfidence=ce(i.confidence))}return{isLocal:!0,async decide(i){var s,c,d;let m=await o;if(!m)return null;let w=m.createLocalEngine({sessionId:r,forcedPersona:a}).decide(i);return l=he(T({},w),{layoutOrder:(c=(s=w.layoutOrder)!=null?s:l==null?void 0:l.layoutOrder)!=null?c:null,slots:T(T({},(d=l==null?void 0:l.slots)!=null?d:{}),w.slots)}),ve(e.apiKey||"local",{v:1,persona:l.persona,band:ce(l.confidence),slots:l.slots,layoutOrder:l.layoutOrder,savedAt:Date.now()}),u(w),w},getSlotResult(i){var s,c,d;return(d=(c=l==null?void 0:l.slots[i])!=null?c:(s=e.initialSlots)==null?void 0:s[i])!=null?d:null},getPersona(){return l?{persona:l.persona,confidence:l.confidence,band:ce(l.confidence)}:null},async assign(i,s){var c;let d=await o;return!d||!s||s.length===0?s!=null&&s[0]?{variantId:s[0],assignmentTtlMs:0}:null:{variantId:(c=d.createLocalEngine({sessionId:r,forcedPersona:a}).decide({components:[{id:i,variantIds:s}]}).assignments[i])!=null?c:s[0],assignmentTtlMs:0}},track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,fetchWeights:()=>Promise.resolve([]),getGraph:()=>({pageNodes:[],capturedAt:0}),dispose:()=>{},destroy:()=>n.destroy()}}function be(e,t,n,r){let a=[];{let o=!1,l=[],u=()=>{if(o)return;let i=Date.now();for(l.push(i);l.length>0&&i-l[0]>500;)l.shift();l.length>=3&&(o=!0,e("rage_click"))};t.addEventListener("click",u),a.push(()=>t.removeEventListener("click",u))}{let o=!1,l=u=>{if(o||!(u.target instanceof Node)||!t.contains(u.target)&&t!==u.target)return;o=!0;let i=typeof window!="undefined"?window.getSelection():null,s=i?i.toString().length:0;e("text_copy",{selectionLength:s})};document.addEventListener("copy",l),a.push(()=>document.removeEventListener("copy",l))}{let o=!1,l=!1,u=null,i=()=>{u!==null&&(clearTimeout(u),u=null)},s=()=>{o||!l||(i(),u=setTimeout(()=>{!o&&l&&(o=!0,e("scroll_hesitation"))},3e3))},c=()=>{i(),s()},d=w=>{for(let E of w)l=E.intersectionRatio>.3,l?s():i()},m=new IntersectionObserver(d,{threshold:[.3]});m.observe(t),window.addEventListener("scroll",c,{passive:!0}),a.push(()=>{m.disconnect(),window.removeEventListener("scroll",c),i()})}if((r==null?void 0:r.tabLoss)!==!1){let o=!1,l=n!=null?n:Date.now(),u=()=>{if(o||document.visibilityState!=="hidden")return;let i=Date.now()-l;i<15e3&&(o=!0,e("tab_loss",{timeOnPage:i}))};document.addEventListener("visibilitychange",u),a.push(()=>document.removeEventListener("visibilitychange",u))}return()=>{for(let o of a)o()}}var Ct="https://api.sentient-ui.com/v1/events",z=new Map,Ot=null;function Xn(e){return"value"in e||"currency"in e||"externalId"in e||"metadata"in e||"weight"in e||"stepIndex"in e}function ze(){return vt()}function Je(){var e;if(typeof window!="undefined")return((e=window.location)==null?void 0:e.pathname)||void 0}function Zn(e,t){let n=typeof window=="undefined"?null:window.history;if(!n)return;let r,a=()=>{let o=Je();!o||o===r||(r=o,e.track({projectId:t,componentId:"__page__",eventType:"pageview",payload:{}}))};for(let o of["pushState","replaceState"]){let l=n[o];n[o]=function(...u){let i=l.apply(this,u);return a(),i}}window.addEventListener("popstate",a),a()}var ye={track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,assign:()=>Promise.resolve(null),decide:()=>Promise.resolve(null),getSlotResult:()=>null,getPersona:()=>null,fetchWeights:()=>Promise.resolve([]),getGraph:()=>({pageNodes:[],capturedAt:0}),dispose:()=>{},destroy:()=>{}};function Qn(){try{let e={},t=new URLSearchParams(window.location.search);for(let[n,r]of t)n.startsWith("utm_")&&(e[n]=r);return e}catch(e){return{}}}function _t(e){return e.replace(/\/events\/?$/,"")}function ue(){return typeof navigator!="undefined"&&navigator.globalPrivacyControl===!0?!0:[typeof navigator!="undefined"?navigator.doNotTrack:void 0,typeof window!="undefined"?window.doNotTrack:void 0,typeof navigator!="undefined"?navigator.msDoNotTrack:void 0].some(e=>e==="1"||e==="yes")}function Fe(e){var t;if(typeof window=="undefined")return;let n=e!=null?e:Ot;if(!n){console.warn("[sentient] grantConsent() called before init()");return}let r=z.get(n);if(!r){console.warn("[sentient] grantConsent() called before init()");return}let{config:a,upgrade:o}=r;if(!o||a.respectDoNotTrack!==!1&&ue())return;let l=Re(he(T({},a),{consent:!0}));o(l);let u=(t=z.get(n))==null?void 0:t.dispose;z.set(n,{config:he(T({},a),{consent:!0}),upgrade:null,dispose:u})}function er(e){var t;let n=e.preConsentBehavior==="statistical_winner",r=_t((t=e.ingestUrl)!=null?t:Ct),a={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},o={track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,fetchWeights:()=>Promise.resolve([]),async assign(i,s,c){if(!n)return null;try{let d=new URLSearchParams({componentId:i});for(let w of s!=null?s:[])d.append("variantIds[]",w);let m=await fetch(`${r}/winner?${d.toString()}`,{headers:a});return m.ok?{variantId:(await m.json()).variantId,assignmentTtlMs:0}:s!=null&&s[0]?{variantId:s[0],assignmentTtlMs:0}:null}catch(d){return s!=null&&s[0]?{variantId:s[0],assignmentTtlMs:0}:null}},decide:()=>Promise.resolve(null),getSlotResult:()=>null,getPersona:()=>null,getGraph:()=>({pageNodes:[],capturedAt:0}),dispose:()=>{},destroy:()=>{}},l={track:i=>o.track(i),goal:((i,s,c,d)=>o.goal(i,s,c,d)),componentGoal:(i,s,c)=>o.componentGoal(i,s,c),identify:i=>o.identify(i),getAssignment:(i,s)=>o.getAssignment(i,s),assign:(i,s,c,d)=>o.assign(i,s,c,d),decide:i=>o.decide(i),getSlotResult:i=>o.getSlotResult(i),getPersona:()=>o.getPersona(),fetchWeights:()=>o.fetchWeights(),getGraph:()=>o.getGraph(),dispose:()=>o.dispose(),destroy:()=>o.destroy()};function u(i){o=i}return{proxy:l,setInner:u}}function Re(e){var t,n,r,a,o,l,u,i,s;if(typeof window=="undefined")return ye;Ot=e.apiKey;let c=z.get(e.apiKey||"local");if(c!=null&&c.dispose)try{c.dispose()}catch(p){}let d=e.respectDoNotTrack!==!1&&ue(),m=e.consent===!1||d,w=typeof e.apiKey=="string"&&e.apiKey.startsWith("pk_");if(e.localMode===!0||!w&&e.localMode!==!1)return m?(z.set(e.apiKey||"local",{config:e,upgrade:null}),ye):(z.set(e.apiKey||"local",{config:e,upgrade:null}),Yn(e));if(m){if(!e.apiKey||!e.apiKey.startsWith("pk_"))return e.preConsentBehavior==="statistical_winner"&&console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),z.set(e.apiKey,{config:e,upgrade:null}),ye;let{proxy:p,setInner:y}=er(e);return z.set(e.apiKey,{config:e,upgrade:d?null:y}),p}if(!e.apiKey||!e.apiKey.startsWith("pk_"))return console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),ye;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),ye;let E=(t=e.ingestUrl)!=null?t:Ct,C=Date.now(),k=wt({ssrSessionId:e.ssrSessionId,apiKey:e.apiKey}),g=Jn(void 0,e.apiKey),f=Gn({ingestUrl:E,apiKey:e.apiKey}),x=_t(E),O={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},q=zn({url:`${x}/goals`,apiKey:e.apiKey,headers:O,onDrop:(p,y)=>{e.debug&&console.warn(`[sentient] goal dropped (HTTP ${y}) \u2014 this will not be retried. `+(y===400?"The session was not found: call init() and let the session upsert complete before firing goals.":y===401||y===403?"Check the API key and that this origin is on the project allowlist.":"See the response status for the cause."),p)}}),v=ut((n=navigator.userAgent)!=null?n:""),P=typeof window!="undefined"?window.location.origin:void 0,$=dt((r=document.referrer)!=null?r:"",P),D=(a=e.sessionSegment)!=null?a:`${v}:${$}`,S=new Map,A=new Map,b=null,h=p=>{for(let y of p)A.has(y.id)||A.set(y.id,We(y))};if(e.initialSlots)for(let[p,y]of Object.entries(e.initialSlots))A.set(p,y);let I=Le(e.apiKey);if(I)for(let[p,y]of Object.entries(I.slots))A.has(p)||A.set(p,y);let X={low:.15,medium:.5,high:.85};if(e.initialPersona)b=T({},e.initialPersona);else{let p=document.documentElement.dataset;p.sentientPersona?b={persona:p.sentientPersona,confidence:(l=X[(o=p.sentientConfidence)!=null?o:"low"])!=null?l:.15}:I&&(b={persona:I.persona,confidence:(u=X[I.band])!=null?u:.15})}if(e.initialAssignments)for(let[p,y]of Object.entries(e.initialAssignments))g.set(p,D,{variantId:y,assignedAt:Date.now(),segment:D,confidence:1});let K=Promise.resolve(),re=k.getSessionId();if(re){let p=pt((i=document.referrer)!=null?i:""),y=T(T({sessionId:re,deviceClass:v,trafficSource:$,referrerDomain:p,utmParams:Qn(),timeOfDay:ft(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:k.isEphemeral(),automation:typeof navigator!="undefined"&&navigator.webdriver===!0||ct((s=navigator.userAgent)!=null?s:"")},e.userId?{userId:e.userId}:{}),e.country?{country:e.country}:{});try{K=fetch(`${x}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(y),headers:O}).then(_=>{_.status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentient-ui.com/pricing")}).catch(()=>{})}catch(_){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:f});let te=new Set,de={goal(p,y={},_=1,Z=0){var F,N,H,W;let B=k.getSessionId();if(!B)return;let U=Xn(y)?y:{metadata:y},G=`${p}\0${(F=U.externalId)!=null?F:""}`;if(te.has(G)){e.debug&&console.log(`[sentient] goal("${p}") already recorded for this action \u2014 not sent twice`);return}te.add(G),te.size===1&&setTimeout(()=>te.clear(),0);let oe=ze(),Q={sessionId:B,name:p,metadata:(N=U.metadata)!=null?N:{},weight:(H=U.weight)!=null?H:_,stepIndex:(W=U.stepIndex)!=null?W:Z,goalId:oe,value:U.value,currency:U.currency,externalId:U.externalId};e.debug&&console.log("[sentient] goal",Q);let Ae={id:oe,body:JSON.stringify(Q)};K.then(()=>q.send(Ae))},componentGoal(p,y,_){var Z,F,N;let H=k.getSessionId();if(!H)return;let W=g.get(p,D),B=W?null:(Z=A.get(p))!=null?Z:null;if(!W&&B===null){e.debug&&console.warn(`[sentient] componentGoal("${p}"): no assignment or slot decision yet \u2014 render its <Adaptive>/adaptive hook or call assign()/decide() before recording a goal.`);return}let U=W?W.variantId:gt(B),G={id:ze(),sessionId:H,projectId:e.apiKey,componentId:p,variantId:U,eventType:"goal_achieved",goalType:y,payload:T({reward:(F=_==null?void 0:_.reward)!=null?F:1,goalValue:_==null?void 0:_.value,currency:_==null?void 0:_.currency},(N=_==null?void 0:_.metadata)!=null?N:{}),timestamp:Date.now(),timeInSession:Date.now()-C,path:Je()};e.debug&&console.log("[sentient] componentGoal",G),K.then(()=>f.push(G))},identify(p){let y=k.getSessionId();y&&K.then(()=>{fetch(`${x}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:y,userId:p,ephemeral:k.isEphemeral()}),headers:O}).catch(()=>{})})},track(p){let y=k.getSessionId();if(!y)return;let _=he(T({path:Je()},p),{id:ze(),sessionId:y,timestamp:Date.now(),timeInSession:Date.now()-C});e.debug&&console.log("[sentient] track",_),K.then(()=>f.push(_))},getAssignment(p,y){return g.get(p,y)},async assign(p,y,_,Z){let F=k.getSessionId();if(!F)return null;let N=g.get(p,D);if(N&&(y!=null&&y.length||N.content!==void 0)){let B=N.ttlMs&&N.ttlMs>0?Math.max(0,N.assignedAt+N.ttlMs-Date.now()):0;return{variantId:N.variantId,assignmentTtlMs:B,content:N.content}}let H=S.get(p);if(H)return H;let W=(async()=>{await K;try{let B={sessionId:F,componentId:p,variantIds:y};Z!==void 0?B.agentDataByVariant=Z:_!==void 0&&(B.agentData=_);let U=await fetch(`${x}/assign`,{method:"POST",body:JSON.stringify(B),headers:O});if(!U.ok)return null;let G=await U.json();return g.set(p,D,T({variantId:G.variantId,assignedAt:Date.now(),segment:D,confidence:1,content:G.content},G.assignmentTtlMs&&G.assignmentTtlMs>0?{ttlMs:G.assignmentTtlMs}:{})),G}catch(B){return null}finally{S.delete(p)}})();return S.set(p,W),W},async decide(p){var y,_,Z,F,N,H,W,B,U;let G=k.getSessionId();if(!G)return null;let oe=(y=p.slots)!=null?y:[];await K;try{let Q={sessionId:G};p.sections&&p.sections.length>0&&(Q.sections=p.sections.map(J=>({id:J}))),Q.components=(_=p.components)!=null?_:[],oe.length>0&&(Q.slots=oe.map(qe)),p.slotsFrom==="registry"&&(Q.slotsFrom="registry"),p.v&&(Q.v=p.v);let Ae=await fetch(`${x}/decide`,{method:"POST",body:JSON.stringify(Q),headers:O});if(!Ae.ok)return h(oe),null;let R=await Ae.json(),ge={};for(let J of oe)ge[J.id]=(F=(Z=R.slots)==null?void 0:Z[J.id])!=null?F:We(J);if(R.slots)for(let[J,me]of Object.entries(R.slots))J in ge||(ge[J]=me);for(let[J,me]of Object.entries(ge))A.set(J,me);let cn=b!=null&&b.persona!=="unknown";R.persona&&!(R.persona==="unknown"&&cn)?b={persona:R.persona,confidence:(N=R.confidence)!=null?N:0}:b||(b={persona:"unknown",confidence:0});for(let[J,me]of Object.entries((H=R.assignments)!=null?H:{}))g.set(J,D,{variantId:me,assignedAt:Date.now(),segment:D,confidence:1});return ve(e.apiKey,T({v:1,persona:b.persona,band:ce(b.confidence),slots:Object.fromEntries(A),layoutOrder:(W=R.layoutOrder)!=null?W:null,savedAt:Date.now()},R.slotConfig?{slotConfig:R.slotConfig}:{})),T(T(T({layoutOrder:(B=R.layoutOrder)!=null?B:null,assignments:(U=R.assignments)!=null?U:{},slots:ge,persona:b.persona,confidence:b.confidence},R.slotConfig?{slotConfig:R.slotConfig}:{}),R.goals?{goals:R.goals}:{}),R.sectionMap?{sectionMap:R.sectionMap}:{})}catch(Q){return h(oe),null}},getSlotResult(p){var y;return(y=A.get(p))!=null?y:null},getPersona(){return b?{persona:b.persona,confidence:b.confidence,band:ce(b.confidence)}:null},async fetchWeights(){var p;try{let y=await fetch(`${x}/weights`,{headers:O});return y.ok?(p=(await y.json()).components)!=null?p:[]:[]}catch(y){return[]}},getGraph(){return{pageNodes:[],capturedAt:0}},dispose(){var p;f.destroy(),q.destroy(),((p=z.get(e.apiKey))==null?void 0:p.dispose)===de.dispose&&z.delete(e.apiKey),e.debug&&console.log("[sentient] disposed")},destroy(){var p;f.destroy(),q.destroy(),k.destroy(),((p=z.get(e.apiKey))==null?void 0:p.dispose)===de.dispose&&z.delete(e.apiKey);try{localStorage.removeItem(Te+e.apiKey),localStorage.removeItem(It(e.apiKey)),localStorage.removeItem(kt(e.apiKey))}catch(y){}e.debug&&console.log("[sentient] destroyed")}};if(z.set(e.apiKey,{config:e,upgrade:null,dispose:de.dispose}),Zn(de,e.apiKey),e.debug){let p=window;p.__sentient&&(p.__sentient.client=de)}return de}var Tt=["pricing","hero","social_proof","cta","features","faq","comparison","trust","navigation","generic"],tr=[["pricing",/\b(pricing|price|plans?|subscriptions?|per month|\/mo|tier)\b/i],["faq",/\b(faq|frequently asked|common questions?)\b/i],["comparison",/\b(compare|comparison|versus|vs\.)\b/i],["social_proof",/\b(testimonial|reviews?|trusted by|loved by|customers?|logos|rated|case stud)\b/i],["trust",/\b(security|guarantee|privacy|compliance|secure|gdpr|soc ?2|encrypt)\b/i],["features",/\b(features?|how it works|benefits?|capabilit|what you get)\b/i]],nr=[["pricing",/(?:[$€£]\s?\d[\d,.]*\s*(?:\/|per\s)\s*(?:mo|month|yr|year|seat|user))|(?:\b(?:starter|basic|pro|growth|premium|enterprise)\b[^.]{0,60}[$€£]\s?\d)/i],["social_proof",/(?:★{2,})|(?:\b\d(?:\.\d)?\s*(?:out of|\/)\s*5\b)|(?:\brated\b)|(?:["“][^"”]{20,160}["”]\s*[—–-]\s*[A-Z][a-z]+)/],["trust",/\b(?:money[- ]back guarantee|refund(?:s)? within|encrypted|soc ?2|iso ?27001|gdpr[- ]compliant|cancel anytime)\b/i],["comparison",/\b(?:vs|versus)\b\.?[^.!?]{0,80}\b(?:compare|comparison|plans?|features?|alternative)\b|\bhow (?:we|it) compares?\b/i]];function rr(e){var t;let n=e.querySelector("h1, h2, h3");return((t=n==null?void 0:n.textContent)!=null?t:"").slice(0,160)}function Lt(e){if(e.tag==="nav"||e.tag==="footer")return{type:"navigation",strength:"weak"};let t=`${e.idClass} ${e.headingText}`.toLowerCase();for(let[n,r]of tr)if(r.test(t))return{type:n,strength:"strong"};for(let[n,r]of nr)if(r.test(e.bodyText))return{type:n,strength:"strong"};return e.actionCount>=1&&e.textLength>0&&e.textLength<200?{type:"cta",strength:"weak"}:e.tag==="header"?{type:"hero",strength:"weak"}:/\b(hero|headline|banner)\b/i.test(t)?{type:"hero",strength:"weak"}:{type:"generic",strength:"weak"}}function Rt(e){var t,n;let r=((t=e.textContent)!=null?t:"").replace(/\s+/g," ").trim();return{tag:e.tagName.toLowerCase(),idClass:`${e.id} ${String((n=e.className)!=null?n:"")}`,headingText:rr(e),bodyText:r.slice(0,2e3),actionCount:e.querySelectorAll('a, button, [role="button"]').length,textLength:r.length}}function Pt(e){return Lt(Rt(e)).type}Ie();var Mt="section, header, footer, nav, main > div, [data-sentient-section]";function or(e){var t;return((t=e.parentElement)==null?void 0:t.closest(Mt))!=null}function ir(e,t,n,r){try{fetch(`${t}/v1/section-map`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({pageUrl:n,sections:r})}).catch(()=>{})}catch(a){}}var Dt=()=>{};function $t(e,t){var n,r,a,o,l,u,i,s,c;let d=(n=t.doc)!=null?n:typeof document!="undefined"?document:void 0;if(!d||typeof IntersectionObserver=="undefined"||ue()||!t.apiKey)return Dt;let m=((r=t.apiBase)!=null?r:"https://api.sentient-ui.com").replace(/\/+$/,"").replace(/\/v1$/,""),w=Array.from(d.querySelectorAll(Mt)).filter(S=>!or(S));if(w.length===0)return Dt;let E=new Map,C=new Map,k=new Map;for(let S of w){let A=S.getAttribute("data-sentient-type"),b=A&&Tt.includes(A)?A:null,h=(o=b!=null?b:(a=t.typeOf)==null?void 0:a.call(t,S))!=null?o:Pt(S),I=`nc-${h}`;E.set(S,I),C.set(I,h),b?k.set(I,"markup"):k.has(I)||k.set(I,"auto")}let g=(s=(i=(u=(l=d.defaultView)!=null?l:typeof window!="undefined"?window:void 0)==null?void 0:u.location)==null?void 0:i.pathname)!=null?s:"/";ir(t.apiKey,m,g,[...C.entries()].map(([S,A])=>{var b;return{componentId:S,semanticType:A,source:(b=k.get(S))!=null?b:"auto"}}));let f=new Map,x=S=>{let A=f.get(S);return A||(A={ms:0,scroll:0,enterAt:null,intersecting:!1},f.set(S,A)),A},O=new IntersectionObserver(S=>{for(let A of S){let b=E.get(A.target);if(!b)continue;let h=x(b);A.isIntersecting?(h.intersecting=!0,h.enterAt=Date.now(),A.intersectionRatio>h.scroll&&(h.scroll=A.intersectionRatio)):(h.intersecting=!1,h.enterAt!=null&&(h.ms+=Date.now()-h.enterAt,h.enterAt=null))}},{threshold:[0,.25,.5,.75,1]});for(let S of E.keys())O.observe(S);let q=()=>{let S=Date.now();for(let[A,b]of f)if(b.enterAt!=null&&(b.ms+=S-b.enterAt,b.enterAt=null),!(b.ms<=0)){try{e.track({projectId:t.apiKey,componentId:A,eventType:"dwell",payload:{dwell_time:Math.round(b.ms),scroll_depth:Number(b.scroll.toFixed(2))}})}catch(h){}b.ms=0}},v=()=>{if(d.hidden)q();else{let S=Date.now();for(let A of f.values())A.intersecting&&(A.enterAt=S)}},P=()=>{q();try{O.disconnect()}catch(S){}};d.addEventListener("visibilitychange",v);let $=(c=d.defaultView)!=null?c:typeof window!="undefined"?window:void 0;$==null||$.addEventListener("pagehide",P);let D=[];return t.microSignals&&[...E.entries()].forEach(([S,A],b)=>{D.push(be((h,I={})=>{try{e.track({projectId:t.apiKey,componentId:A,eventType:"micro_signal",payload:T({signalType:h},I)})}catch(X){}},S,void 0,{tabLoss:b===0}))}),()=>{q(),d.removeEventListener("visibilitychange",v),$==null||$.removeEventListener("pagehide",P);for(let S of D)S();try{O.disconnect()}catch(S){}}}var sr=["landing","ecommerce","saas","marketplace"];function ar(e){if(typeof e!="object"||e===null||Array.isArray(e))return null;let t=Object.entries(e);if(t.length<1||t.length>4)return null;let n={};for(let[r,a]of t){if(!Array.isArray(a)||a.length<2||a.length>6||!a.every(o=>typeof o=="string"))return null;n[r]=a}return n}function lr(e){return!Array.isArray(e)||e.length<2||e.length>12||!e.every(t=>typeof t=="string")?null:e}function Pe(e){if(typeof e!="object"||e===null)return null;let t=e;if(typeof t.apiKey!="string"||!t.apiKey.startsWith("pk_"))return null;let n=sr.includes(t.context)?t.context:"landing",r={};if(typeof t.slots=="object"&&t.slots!==null&&!Array.isArray(t.slots))for(let[o,l]of Object.entries(t.slots)){if(typeof l!="object"||l===null)continue;let u=l,i=ar(u.dims);if(!i||u.target!==void 0&&typeof u.target!="string")continue;let s=u.arms!==void 0?lr(u.arms):null,c={dims:i};typeof u.target=="string"&&(c.target=u.target),s&&(c.arms=s),r[o]=c}let a={apiKey:t.apiKey,context:n,personaAttributes:t.personaAttributes===!0,slots:r};return typeof t.consent=="boolean"&&(a.consent=t.consent),(t.preConsentBehavior==="statistical_winner"||t.preConsentBehavior==="control")&&(a.preConsentBehavior=t.preConsentBehavior),t.debug===!0&&(a.debug=!0),typeof t.registry=="boolean"&&(a.registry=t.registry),typeof t.editorSrc=="string"&&(a.editorSrc=t.editorSrc),typeof t.apiBase=="string"&&(a.apiBase=t.apiBase),typeof t.sectionCapture=="boolean"&&(a.sectionCapture=t.sectionCapture),a}function Nt(e){var n,r,a;let t=(r=(n=e.defaultView)!=null?n:typeof window!="undefined"?window:void 0)==null?void 0:r.location;return(a=t==null?void 0:t.pathname)!=null?a:""}function cr(e,t){var n;if(t.tag&&e.tagName.toLowerCase()!==t.tag.toLowerCase())return!1;if(t.text){let r=((n=e.textContent)!=null?n:"").trim().toLowerCase(),a=t.text.trim().toLowerCase();if(!(r===a||r.startsWith(a)||a.startsWith(r)))return!1}return!0}function jt(e,t){return!!(e!=null&&e.urlMatch)&&!Nt(t).includes(e.urlMatch)}var ur=/^[a-zA-Z_][-a-zA-Z0-9_]*$/;function ie(e,t){var a;if(e.urlMatch&&!Nt(t).includes(e.urlMatch))return null;let n=[];if(e.id){let o=t.getElementById(e.id);n=o?[o]:[]}if(n.length===0&&((a=e.dataAttr)!=null&&a.name)&&ur.test(e.dataAttr.name))try{let o=e.dataAttr.value.replace(/["\\]/g,"\\$&");n=Array.from(t.querySelectorAll(`[${e.dataAttr.name}="${o}"]`))}catch(o){n=[]}if(n.length===0&&e.selector)try{n=Array.from(t.querySelectorAll(e.selector))}catch(o){n=[]}if(n.length!==1)return null;let r=n[0];return e.fingerprint&&!cr(r,e.fingerprint)?null:r}var Kt={color:"color",background:"background",fontSize:"font-size",fontWeight:"font-weight",textAlign:"text-align",padding:"padding",margin:"margin",borderRadius:"border-radius",width:"width",height:"height",maxWidth:"max-width",border:"border",boxShadow:"box-shadow",opacity:"opacity",lineHeight:"line-height",letterSpacing:"letter-spacing",textTransform:"text-transform",gap:"gap",fontFamily:"font-family"},dr=/^(rgb|rgba|hsl|hsla|calc|var|min|max|clamp)$/i;function Bt(e){var t;if(e.trim().length===0||/[;{}<>]/.test(e))return!1;for(let n of e.matchAll(/([A-Za-z-]*)\(/g))if(!dr.test((t=n[1])!=null?t:""))return!1;return!0}var Ut=/^https:\/\//i,Gt=new Map,se=null;function pr(e){return e.replace(/["\\]/g,"\\$&")}function fr(e){var t;(!se||!se.isConnected)&&(se=e.querySelector("style[data-sentient-ops]"),se||(se=e.createElement("style"),se.setAttribute("data-sentient-ops",""),((t=e.head)!=null?t:e.documentElement).appendChild(se))),se.textContent=[...Gt.entries()].map(([n,r])=>`[data-snt-e="${pr(n)}"]{${r}}`).join(`
2
+ `)}function qt(e,t,n,r){var u;let a=!1,o=(u=t.moveBefore)!=null?u:t.moveAfter;if(o){let i=ie(o,r);!i||i===e||i.parentElement!==e.parentElement||!e.parentElement?a=!0:t.moveBefore?e.parentElement.insertBefore(e,i):e.parentElement.insertBefore(e,i.nextSibling)}typeof t.text=="string"&&(e.textContent=t.text),typeof t.href=="string"&&Ut.test(t.href)&&e.setAttribute("href",t.href),typeof t.imageSrc=="string"&&Ut.test(t.imageSrc)&&e.setAttribute("src",t.imageSrc),typeof t.imageAlt=="string"&&e.setAttribute("alt",t.imageAlt);let l=[];if(t.hidden&&l.push("display:none !important"),t.style)for(let[i,s]of Object.entries(t.style)){let c=Kt[i];c&&typeof s=="string"&&Bt(s)&&l.push(`${c}:${s.trim()} !important`)}return l.length>0&&(e.setAttribute("data-snt-e",n),Gt.set(n,l.join(";")),fr(r)),{anchorMiss:a}}function De(e,t,n){n.documentElement.setAttribute("data-sentient-persona",e),n.documentElement.setAttribute("data-sentient-confidence",t)}function Me(e,t,n){var r;for(let[a,o]of Object.entries(t)){let l=e[a];if(!l||typeof l=="string")continue;let u=o.target?Array.from(n.querySelectorAll(o.target)):[n.documentElement];for(let i of u)for(let[s,c]of Object.entries(l))(r=o.dims[s])!=null&&r.includes(c)&&i.setAttribute(`data-${s}`,c)}}function $e(e,t,n){for(let[r,a]of Object.entries(t)){let o=e[r];if(typeof o!="string"||!a.arms||!a.arms.includes(o))continue;let l=a.target?Array.from(n.querySelectorAll(a.target)):[n.documentElement];for(let u of l)u.setAttribute("data-sentient-arm",o)}}function Ne(e,t,n,r){var l,u;let a=(l=r==null?void 0:r.contentAndOps)!=null?l:!0,o=[];for(let[i,s]of Object.entries(t)){if(jt(s.locator,n))continue;let c;if(s.locator){let m=ie(s.locator,n);c=m?[m]:[]}else s.target?c=Array.from(n.querySelectorAll(s.target)):c=[n.documentElement];(s.locator||s.target)&&c.length===0&&o.push(i);let d=e[i];for(let m of c){if(d!==void 0)if(typeof d=="string")m.setAttribute("data-sentient-arm",d),a&&((u=r==null?void 0:r.onApplied)==null||u.call(r,i,d,m));else for(let[w,E]of Object.entries(d))m.setAttribute(`data-${w}`,E);a&&(typeof s.content=="string"&&(m.textContent=s.content),s.ops&&qt(m,s.ops,i,n).anchorMiss&&!o.includes(i)&&o.push(i))}}return o}var gr=800;function je(e,t,n){let r=[];return n.forEach(({slotId:a,arm:o,el:l},u)=>{r.push(be((m,w={})=>{try{e.track({projectId:t,componentId:a,variantId:o,eventType:"micro_signal",payload:le({signalType:m},w)})}catch(E){}},l,void 0,{tabLoss:u===0}));let i=null,s=0,c=()=>{s=Date.now(),i=setTimeout(()=>{try{e.track({projectId:t,componentId:a,variantId:o,eventType:"cursor_signal",payload:{hoverDuration:Date.now()-s}})}catch(m){}i=null},gr)},d=()=>{i!==null&&(clearTimeout(i),i=null)};l.addEventListener("mouseenter",c),l.addEventListener("mouseleave",d),r.push(()=>{l.removeEventListener("mouseenter",c),l.removeEventListener("mouseleave",d),i!==null&&clearTimeout(i)})}),()=>{for(let a of r)a()}}function mr(e){var n,r,a;let t=(r=(n=e.defaultView)!=null?n:typeof window!="undefined"?window:void 0)==null?void 0:r.location;return(a=t==null?void 0:t.pathname)!=null?a:""}function hr(e,t){if(!e)return!1;if(e==="/")return t==="/";let n=e.endsWith("/")?e.slice(0,-1):e;return t===n||t.startsWith(`${n}/`)}var Wt="_snt_fired_goals";function yr(e){try{let t=e==null?void 0:e.sessionStorage.getItem(Wt);if(!t)return new Set;let n=JSON.parse(t);return Array.isArray(n)?new Set(n.filter(r=>typeof r=="string")):new Set}catch(t){return new Set}}function vr(e,t){try{e==null||e.sessionStorage.setItem(Wt,JSON.stringify([...t]))}catch(n){}}function zt(e,t,n){var C,k;let r=(C=n.defaultView)!=null?C:typeof window!="undefined"?window:null,a=yr(r),o=g=>{if(!a.has(g.goalId)){a.add(g.goalId),vr(r,a);try{g.slotId?t.componentGoal(g.slotId,g.goalId):t.goal(g.goalId)}catch(f){}}},l=e.filter(g=>g.event==="click"),u=e.filter(g=>g.event==="form_submit"),i=e.filter(g=>g.event==="url_reached"),s=e.filter(g=>g.event==="scroll_depth"),c=(g,f)=>{if(!g.locator)return!1;let x=ie(g.locator,n);return!!x&&(x===f||x.contains(f))},d=g=>{let f=g.target;if(!(!f||typeof f.closest!="function"))for(let x of l)c(x,f)&&o(x)},m=g=>{let f=g.target;if(f)for(let x of u)c(x,f)&&o(x)},w=()=>{if(i.length===0)return;let g=mr(n);for(let f of i)f.urlPattern&&hr(f.urlPattern,g)&&o(f)},E=()=>{var x;let g=n.documentElement,f=g.scrollHeight>0?(g.scrollTop+g.clientHeight)/g.scrollHeight:0;for(let O of s)f>=((x=O.threshold)!=null?x:.75)&&o(O);s.every(O=>a.has(O.goalId))&&n.removeEventListener("scroll",E)};return n.addEventListener("click",d,!0),n.addEventListener("submit",m,!0),(k=n.defaultView)==null||k.addEventListener("popstate",w),w(),s.length>0&&(n.addEventListener("scroll",E,{passive:!0}),E()),{checkUrl:w,teardown:()=>{var g;n.removeEventListener("click",d,!0),n.removeEventListener("submit",m,!0),(g=n.defaultView)==null||g.removeEventListener("popstate",w),s.length>0&&n.removeEventListener("scroll",E)}}}var Vt="__snt_editor_token";function Jt(){try{return typeof sessionStorage!="undefined"?sessionStorage.getItem(Vt):null}catch(e){return null}}function Ft(e){try{sessionStorage.setItem(Vt,e)}catch(t){}}var Ye="0.15.0",tn=5e3,br=50,wr=(()=>{try{if(typeof window=="undefined")return[];let e=window.SentientSnippet;return Array.isArray(e==null?void 0:e.q)?e.q:[]}catch(e){return[]}})(),V=null,M=null,ne={},ae=null,Y=null,j=null,ee=null,L=null,Ht=!1,He=null,Ke=null,Be=null,we=!1,Ue=!1;function nn(e,t){return Promise.race([e,new Promise(n=>setTimeout(()=>n(null),t))])}function pe(e,...t){e!=null&&e.debug&&console.log("[sentient-snippet]",...t)}function fe(e,t){return V?(V.personaAttributes&&L&&De(L.persona,L.band,e),Me(ne,V.slots,e),$e(ne,V.slots,e),ae?Ne(ne,ae,e,t):[]):[]}function Sr(e,t){var n;if(t.length!==0)try{let r=(n=e.apiBase)!=null?n:"https://api.sentient-ui.com";fetch(`${r}/v1/locator-miss`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({slots:t})}).catch(()=>{})}catch(r){}}function Se(){return!!(V&&M&&V.sectionCapture!==!1&&(V.consent!==!1||Ue)&&!ue())}function Ar(){if(!M||!V||!Se()||ee)return;let e=[];fe(document,{contentAndOps:we,onApplied:(t,n,r)=>e.push({slotId:t,arm:n,el:r})}),Ze();try{j==null||j(),j=je(M,V.apiKey,e)}catch(t){}}function Ze(){if(typeof document=="undefined"||!Se())return;let e;try{if(Ke&&Ke.length>0){let t=new Map;for(let n of Ke){if(n.urlMatch!==window.location.pathname)continue;let r=ie(n.locator,document);r&&t.set(r,n.type)}t.size>0&&(e=n=>{var r;return(r=t.get(n))!=null?r:null})}}catch(t){}try{ee=$t(M,le({apiKey:V.apiKey,apiBase:V.apiBase,doc:document,microSignals:!0},e?{typeOf:e}:{})),Be=window.location.pathname}catch(t){}}function Qe(){try{let e=[];if(j==null||j(),j=null,fe(document,{contentAndOps:we,onApplied:(t,n,r)=>e.push({slotId:t,arm:n,el:r})}),e.length>0&&Se())try{j=je(M,V.apiKey,e)}catch(t){}try{typeof window!="undefined"&&Be!==null&&window.location.pathname!==Be&&Se()&&(ee==null||ee(),ee=null,Ze())}catch(t){}}catch(e){}}function Yt(){He===null&&(He=setTimeout(()=>{He=null,Qe();try{Y==null||Y.checkUrl()}catch(e){}},br))}function Xt(){if(!(Ht||typeof window=="undefined"||typeof history=="undefined")){Ht=!0;try{let e=t=>{let n=history[t];history[t]=function(r,a,o){let l=n.call(this,r,a,o!=null?o:null);return Yt(),l}};e("pushState"),e("replaceState"),window.addEventListener("popstate",Yt)}catch(e){}}}function Xe(e){let t={};for(let[n,r]of Object.entries(e.slots))t[n]=r.target?document.querySelectorAll(r.target).length:1;return t}function rn(e){return new URLSearchParams(e).get("sentient_editor")}function xr(){try{let t=Array.from(document.getElementsByTagName("script")).find(n=>/snippet(\.global)?\.js/.test(n.src));if(t!=null&&t.src)return t.src.replace(/snippet(\.global)?\.js/,"editor.global.js")}catch(e){}return null}function Ir(e,t){var n,r,a,o;try{window.__sentientEditor={token:t,apiBase:(n=e.apiBase)!=null?n:"https://api.sentient-ui.com"};try{let i=document.createElement("meta");i.name="referrer",i.content="no-referrer",i.setAttribute("data-sentient-editor",""),((r=document.head)!=null?r:document.documentElement).appendChild(i)}catch(i){}let l=(a=e.editorSrc)!=null?a:xr();if(!l){Qt();return}let u=document.createElement("script");u.src=l,u.async=!0,u.onerror=()=>Qt(),((o=document.head)!=null?o:document.documentElement).appendChild(u)}catch(l){}}var Zt="sentient-editor-load-notice";function Qt(){var e;try{if(typeof document=="undefined"||document.getElementById(Zt))return;let t=document.createElement("div");t.id=Zt,t.textContent="Couldn\u2019t load the editor \u2014 check your connection and reopen it from your dashboard.",Object.assign(t.style,{position:"fixed",bottom:"16px",right:"16px",zIndex:"2147483647",maxWidth:"320px",padding:"14px 16px",borderRadius:"14px",background:"#111827",color:"#fff",font:"13px/1.45 system-ui, sans-serif",border:"1px solid rgba(245,158,11,0.6)",boxShadow:"0 10px 34px rgba(0,0,0,0.45)",cursor:"pointer"}),t.addEventListener("click",()=>t.remove()),((e=document.body)!=null?e:document.documentElement).appendChild(t),setTimeout(()=>t.remove(),1e4)}catch(t){}}function on(e){let t=new URLSearchParams(e).get("sentient_preview");if(!t)return null;let n={};for(let r of t.split("|")){let a=r.indexOf(":"),o=a===-1?"":r.slice(0,a),l=a===-1?"":r.slice(a+1);if(!(!o||!l))if(l.includes("=")){let u={};for(let i of l.split(",")){let[s,c]=i.split("=");s&&c&&(u[s]=c)}Object.keys(u).length&&(n[o]=u)}else n[o]=l}return Object.keys(n).length?n:null}function sn(e){try{return new URLSearchParams(e).get("sentient_persona")||null}catch(t){return null}}var en="sentient-persona-preview-banner";function kr(e){var t;try{if(typeof document=="undefined"||document.getElementById(en))return;let n=e.charAt(0).toUpperCase()+e.slice(1).replace(/[_-]+/g," "),r=document.createElement("div");r.id=en,r.setAttribute("role","status"),Object.assign(r.style,{position:"fixed",bottom:"16px",left:"50%",transform:"translateX(-50%)",zIndex:"2147483647",display:"flex",alignItems:"center",gap:"12px",padding:"10px 14px",borderRadius:"999px",background:"#111827",color:"#fff",font:"13px/1 system-ui, sans-serif",boxShadow:"0 10px 34px rgba(0,0,0,0.45)",border:"1px solid rgba(255,255,255,0.14)"});let a=document.createElement("span");a.textContent=`Previewing as ${n}`;let o=document.createElement("button");o.type="button",o.textContent="Exit preview",Object.assign(o.style,{cursor:"pointer",border:"1px solid rgba(255,255,255,0.3)",background:"transparent",color:"#fff",font:"inherit",padding:"4px 10px",borderRadius:"999px"}),o.addEventListener("click",()=>{try{let l=new URL(window.location.href);l.searchParams.delete("sentient_persona"),window.location.href=l.pathname+l.search+l.hash}catch(l){}}),r.appendChild(a),r.appendChild(o),((t=document.body)!=null?t:document.documentElement).appendChild(r)}catch(n){}}async function Er(e,t){var s,c,d,m,w,E,C,k,g;let n=(s=e.apiBase)!=null?s:"https://api.sentient-ui.com",a=((c=e.registry)!=null?c:Object.keys(e.slots).length===0)?{persona:t,slotsFrom:"registry"}:{persona:t,slots:Object.entries(e.slots).map(([f,x])=>({id:f,dims:x.dims}))},o=await nn(fetch(`${n}/v1/explain`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${e.apiKey}`},body:JSON.stringify(a)}).then(f=>f.ok?f.json():null).catch(()=>null),tn);if(!o){pe(e,"persona preview: explain unavailable \u2014 page left as-is");return}let l=o;ne=(d=l.slots)!=null?d:{},ae=(m=l.slotConfig)!=null?m:null;let u=(C=(E=(w=l.personaAttributes)==null?void 0:w.persona)!=null?E:l.persona)!=null?C:t,i=(g=(k=l.personaAttributes)==null?void 0:k.confidence)!=null?g:"high";L={persona:u,band:i},fe(document),we=!0,an(e),kr(u)}function an(e){let t={goal(n,r){try{M==null||M.goal(n,r)}catch(a){}},componentGoal(n,r){try{M==null||M.componentGoal(n,r)}catch(a){}},grantConsent(){try{Fe(e.apiKey)}catch(n){}Ue=!0;try{Ar()}catch(n){}},revokeConsent(){try{ee==null||ee(),ee=null,Be=null,j==null||j(),j=null,Y==null||Y.teardown(),Y=null,Ue=!1,M==null||M.destroy()}catch(n){}},reapply:Qe,getState(){var n,r;return{apiKey:e.apiKey,persona:(n=L==null?void 0:L.persona)!=null?n:null,band:(r=L==null?void 0:L.band)!=null?r:null,slots:ne,matchCounts:Xe(e),consent:e.consent!==!1}}};window.SentientSnippet=t;for(let n of wr.splice(0))try{n[0]==="goal"&&t.goal(n[1],n[2])}catch(r){}}async function ln(){var e,t,n,r,a;try{let o=Pe(window.sentient);if(!o)return;V=o,we=!1,Ue=!1;let l=typeof window!="undefined"?rn(window.location.search):null;if(l){Ft(l);try{let f=new URL(window.location.href);f.searchParams.delete("sentient_editor"),window.history.replaceState(null,"",f.pathname+f.search+f.hash)}catch(f){}}let u=l!=null?l:Jt();if(u){Ir(o,u),pe(o,"editor mode");return}let i=typeof window!="undefined"?on(window.location.search):null;if(i){ne=i,L=null,fe(document),Xt(),pe(o,"preview mode",i);return}let s=typeof window!="undefined"?sn(window.location.search):null;if(s){await Er(o,s),pe(o,"persona preview",s);return}let c=(e=o.registry)!=null?e:Object.keys(o.slots).length===0,d=Le(o.apiKey);d&&(L={persona:d.persona,band:d.band},ne=d.slots,d.slotConfig&&(ae=d.slotConfig),fe(document,{contentAndOps:!1}));let m=Re({apiKey:o.apiKey,context:o.context,consent:o.consent,preConsentBehavior:o.preConsentBehavior,debug:o.debug});M=m,an(o),Xt();let w=Object.entries(o.slots).map(([f,x])=>({id:f,dims:x.dims})),E=Ye!=="0.0.0-dev"?{v:Ye}:{},C=await nn(m.decide(le(le({slots:w},E),c?{slotsFrom:"registry"}:{})),tn);if(!C){pe(o,"decide timeout/null \u2014 snapshot state stands",Xe(o));return}let k=m.getPersona();k?L={persona:k.persona,band:k.band}:C.persona&&(L={persona:C.persona,band:"low"}),ne=C.slots,c?ae=(t=C.slotConfig)!=null?t:null:C.slotConfig&&(ae=C.slotConfig);let g=[];if(Sr(o,fe(document,{onApplied:(f,x,O)=>g.push({slotId:f,arm:x,el:O})})),we=!0,C.goals&&C.goals.length>0&&o.consent!==!1&&M)try{Y==null||Y.teardown(),Y=zt(C.goals,M,document)}catch(f){}if(Ke=(n=C.sectionMap)!=null?n:null,Se()){Ze();try{j==null||j(),j=je(M,o.apiKey,g)}catch(f){}}pe(o,"applied",{persona:L,slots:ne,matches:Xe(o)}),ve(o.apiKey,le({v:1,persona:(r=L==null?void 0:L.persona)!=null?r:C.persona,band:(a=L==null?void 0:L.band)!=null?a:"low",slots:C.slots,layoutOrder:C.layoutOrder,savedAt:Date.now()},ae?{slotConfig:ae}:{}))}catch(o){}}if(typeof window!="undefined"&&window.sentient){let e=window;e.__sentientInitialized||(e.__sentientInitialized=!0,ln())}return gn(Cr);})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentientui/snippet",
3
- "version": "0.14.1",
3
+ "version": "0.15.0",
4
4
  "private": false,
5
5
  "description": "SentientUI Style-rung snippet for non-React sites — persona attributes and adaptive style tokens from one script tag",
6
6
  "license": "MIT",
@@ -24,7 +24,7 @@
24
24
  "tsx": "^4.19.2",
25
25
  "typescript": "^5.7.2",
26
26
  "vitest": "^2.1.8",
27
- "@sentientui/core": "0.18.1"
27
+ "@sentientui/core": "0.19.0"
28
28
  },
29
29
  "scripts": {
30
30
  "build": "tsup",