@sentientui/snippet 0.3.0 → 0.4.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
@@ -20,13 +20,14 @@ page is left exactly as it was.
20
20
  src="https://unpkg.com/@sentientui/snippet@0.3.0/dist/snippet.global.js"
21
21
  defer
22
22
  crossorigin="anonymous"
23
- integrity="sha384-REPLACE_WITH_RELEASE_HASH"
24
23
  ></script>
25
24
  ```
26
25
 
27
- Pin the exact version and add Subresource Integrity compute the hash from the published file:
28
- `openssl dgst -sha384 -binary dist/snippet.global.js | openssl base64 -A`. Or self-host the
29
- file and skip the CDN entirely.
26
+ The version above is pinned to the current published release. To lock the file down, add your
27
+ own Subresource Integrity hash computed from the published file
28
+ (`openssl dgst -sha384 -binary dist/snippet.global.js | openssl base64 -A`) as an `integrity="sha384-…"`
29
+ attribute, or self-host the file and skip the CDN entirely. Do **not** ship a placeholder
30
+ `integrity` value — a hash that doesn't match makes the browser refuse to run the script.
30
31
 
31
32
  ```css
32
33
  #hero[data-tone='urgent'] .cta { font-weight: 700; }
@@ -1 +1 @@
1
- "use strict";var SentientSnippet=(()=>{var H=Object.defineProperty,D=Object.defineProperties;var j=Object.getOwnPropertyDescriptors;var L=Object.getOwnPropertySymbols;var O=Object.prototype.hasOwnProperty,P=Object.prototype.propertyIsEnumerable;var k=(t,n,e)=>n in t?H(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e,y=(t,n)=>{for(var e in n||(n={}))O.call(n,e)&&k(t,e,n[e]);if(L)for(var e of L(n))P.call(n,e)&&k(t,e,n[e]);return t},B=(t,n)=>D(t,j(n));function _(t){var e,o,i;let n=(o=(e=t.defaultView)!=null?e:typeof window!="undefined"?window:void 0)==null?void 0:o.location;return(i=n==null?void 0:n.pathname)!=null?i:""}function q(t,n){var e;if(n.tag&&t.tagName.toLowerCase()!==n.tag.toLowerCase())return!1;if(n.text){let o=((e=t.textContent)!=null?e:"").trim().toLowerCase(),i=n.text.trim().toLowerCase();if(!(o===i||o.startsWith(i)||i.startsWith(o)))return!1}return!0}function S(t,n){var i;if(t.urlMatch&&!_(n).includes(t.urlMatch))return null;let e=[];if(t.id){let s=n.getElementById(t.id);e=s?[s]:[]}if(e.length===0&&((i=t.dataAttr)!=null&&i.name))try{let s=t.dataAttr.value.replace(/["\\]/g,"\\$&");e=Array.from(n.querySelectorAll(`[${t.dataAttr.name}="${s}"]`))}catch(s){e=[]}if(e.length===0&&t.selector)try{e=Array.from(n.querySelectorAll(t.selector))}catch(s){e=[]}if(e.length!==1)return null;let o=e[0];return t.fingerprint&&!q(o,t.fingerprint)?null:o}function $(t){let n=globalThis;return n.CSS&&typeof n.CSS.escape=="function"?n.CSS.escape(t):t.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`)}function z(t,n){if(t.id)return`#${$(t.id)}`;let e=[],o=t,i=0;for(;o&&o!==n.body&&o!==n.documentElement&&i<6;){if(o.id){e.unshift(`#${$(o.id)}`);break}let s=o.tagName.toLowerCase(),u=o.parentElement;if(u){let c=Array.from(u.children).filter(m=>m.tagName===o.tagName);c.length>1&&(s+=`:nth-of-type(${c.indexOf(o)+1})`)}e.unshift(s),o=o.parentElement,i++}return e.join(" > ")}function I(t,n){var i;let e={v:1};t.id&&(e.id=t.id);for(let s of["data-framer-name","data-w-id","data-sentient-name"]){let u=t.getAttribute(s);if(u){e.dataAttr={name:s,value:u};break}}e.selector=z(t,n);let o=((i=t.textContent)!=null?i:"").trim().replace(/\s+/g," ").slice(0,80);return e.fingerprint=y({tag:t.tagName.toLowerCase()},o?{text:o}:{}),e}function M(t,n,e){return S(t,e)===n}var U="sentient-editor-highlight",A="sentient-editor-panel";function R(){let t=window.__sentientEditor;return t&&typeof t.token=="string"&&typeof t.apiBase=="string"?t:null}async function G(t){var n;try{let e=await fetch(`${t.apiBase}/v1/editor/verify`,{headers:{authorization:`Bearer ${t.token}`}});return e.ok&&(n=(await e.json()).projectId)!=null?n:null}catch(e){return null}}async function T(t,n,e){try{return(await fetch(`${t.apiBase}${n}`,{method:"POST",headers:{authorization:`Bearer ${t.token}`,"content-type":"application/json"},body:JSON.stringify(e)})).ok}catch(o){return!1}}function d(t,n,e){let o=document.createElement(t);return Object.assign(o.style,n),e!==void 0&&(o.textContent=e),o}function W(t){let n=null,e=d("div",{position:"fixed",pointerEvents:"none",zIndex:"2147483646",border:"2px solid #6366f1",background:"rgba(99,102,241,0.12)",display:"none"});e.id=U;let o=d("div",{position:"fixed",bottom:"16px",right:"16px",zIndex:"2147483647",width:"300px",padding:"14px",borderRadius:"12px",background:"#111827",color:"#fff",font:"13px/1.4 system-ui, sans-serif",boxShadow:"0 8px 30px rgba(0,0,0,0.4)"});o.id=A;let i=d("div",{fontWeight:"600",marginBottom:"6px"},"SentientUI editor"),s=d("div",{opacity:"0.7",marginBottom:"10px"},"Click any element on the page to adapt it."),u=d("div",{fontSize:"12px",marginBottom:"10px",minHeight:"16px"}),c=d("button",v("#6366f1"),"Test different text here"),m=d("button",v("#374151"),"Track clicks as a goal"),g=d("button",B(y({},v("transparent")),{opacity:"0.6"}),"Close editor");for(let a of[c,m,g])a.disabled=!0;o.append(i,s,u,c,m,g),document.body.append(e,o);let f=(a,r=!0)=>{u.textContent=a,u.style.color=r?"#a7f3d0":"#fca5a5"},p=null,x=a=>{let r=a.target;if(!r||o.contains(r)||r===e)return;let l=r.getBoundingClientRect();Object.assign(e.style,{display:"block",left:`${l.left}px`,top:`${l.top}px`,width:`${l.width}px`,height:`${l.height}px`})},b=a=>{let r=a.target;if(!r||o.contains(r))return;a.preventDefault(),a.stopPropagation(),n=r,p=I(r,document);let l=M(p,r,document);f(l?"\u2713 Selected \u2014 matches exactly 1 element":"\u26A0 Couldn\u2019t target this element uniquely",l);for(let h of[c,m,g])h.disabled=!1;c.disabled=!l,m.disabled=!l};c.onclick=async()=>{var w,C,E;if(!n||!p)return;let a=window.prompt("First wording (what you show today):",(C=(w=n.textContent)==null?void 0:w.trim())!=null?C:"");if(a===null)return;let r=window.prompt("Alternative wording to test:","");if(r===null)return;let l=((E=window.prompt("Name this slot:","hero-cta"))!=null?E:"hero-cta").trim()||"hero-cta";f("Saving\u2026");let h=await T(t,`/v1/editor/slots/${encodeURIComponent(l)}`,{kind:"arms",target:p,draftConfig:{arms:[{id:"a",displayName:"Original",ops:{text:a}},{id:"b",displayName:"Alternative",ops:{text:r}}]}});f(h?"\u2713 Saved as a draft \u2014 publish it from your dashboard.":"\u26A0 Couldn\u2019t save \u2014 try again.",h)},m.onclick=async()=>{var l;if(!n||!p)return;let a=((l=window.prompt("Name this goal:","demo_requested"))!=null?l:"").trim();if(!a)return;f("Saving\u2026");let r=await T(t,`/v1/editor/goals/${encodeURIComponent(a)}`,{event:"click",locator:p});f(r?"\u2713 Goal saved as a draft.":"\u26A0 Couldn\u2019t save \u2014 try again.",r)};let N=()=>{document.removeEventListener("mousemove",x,!0),document.removeEventListener("click",b,!0),e.remove(),o.remove()};g.onclick=N,document.addEventListener("mousemove",x,!0),document.addEventListener("click",b,!0)}function v(t){return{display:"block",width:"100%",marginTop:"8px",padding:"8px 10px",borderRadius:"8px",border:"none",background:t,color:"#fff",font:"13px system-ui, sans-serif",cursor:"pointer",textAlign:"left"}}async function F(){if(typeof document=="undefined")return;let t=R();!t||!await G(t)||document.getElementById(A)||W(t)}F();})();
1
+ "use strict";var SentientSnippet=(()=>{var $=Object.defineProperty,Z=Object.defineProperties,Q=Object.getOwnPropertyDescriptor,Y=Object.getOwnPropertyDescriptors,tt=Object.getOwnPropertyNames,z=Object.getOwnPropertySymbols;var W=Object.prototype.hasOwnProperty,et=Object.prototype.propertyIsEnumerable;var G=(t,e,n)=>e in t?$(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,I=(t,e)=>{for(var n in e||(e={}))W.call(e,n)&&G(t,n,e[n]);if(z)for(var n of z(e))et.call(e,n)&&G(t,n,e[n]);return t},F=(t,e)=>Z(t,Y(e));var nt=(t,e)=>{for(var n in e)$(t,n,{get:e[n],enumerable:!0})},ot=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of tt(e))!W.call(t,i)&&i!==n&&$(t,i,{get:()=>e[i],enumerable:!(o=Q(e,i))||o.enumerable});return t};var rt=t=>ot($({},"__esModule",{value:!0}),t);var gt={};nt(gt,{clearTargetHighlights:()=>D,drawTargetHighlights:()=>V});function it(t){var n,o,i;let e=(o=(n=t.defaultView)!=null?n:typeof window!="undefined"?window:void 0)==null?void 0:o.location;return(i=e==null?void 0:e.pathname)!=null?i:""}function at(t,e){var n;if(e.tag&&t.tagName.toLowerCase()!==e.tag.toLowerCase())return!1;if(e.text){let o=((n=t.textContent)!=null?n:"").trim().toLowerCase(),i=e.text.trim().toLowerCase();if(!(o===i||o.startsWith(i)||i.startsWith(o)))return!1}return!0}function H(t,e){var i;if(t.urlMatch&&!it(e).includes(t.urlMatch))return null;let n=[];if(t.id){let s=e.getElementById(t.id);n=s?[s]:[]}if(n.length===0&&((i=t.dataAttr)!=null&&i.name))try{let s=t.dataAttr.value.replace(/["\\]/g,"\\$&");n=Array.from(e.querySelectorAll(`[${t.dataAttr.name}="${s}"]`))}catch(s){n=[]}if(n.length===0&&t.selector)try{n=Array.from(e.querySelectorAll(t.selector))}catch(s){n=[]}if(n.length!==1)return null;let o=n[0];return t.fingerprint&&!at(o,t.fingerprint)?null:o}function J(t){let e=globalThis;return e.CSS&&typeof e.CSS.escape=="function"?e.CSS.escape(t):t.replace(/[^a-zA-Z0-9_-]/g,n=>`\\${n}`)}function st(t,e){if(t.id)return`#${J(t.id)}`;let n=[],o=t,i=0;for(;o&&o!==e.body&&o!==e.documentElement&&i<6;){if(o.id){n.unshift(`#${J(o.id)}`);break}let s=o.tagName.toLowerCase(),d=o.parentElement;if(d){let u=Array.from(d.children).filter(h=>h.tagName===o.tagName);u.length>1&&(s+=`:nth-of-type(${u.indexOf(o)+1})`)}n.unshift(s),o=o.parentElement,i++}return n.join(" > ")}function N(t,e){var i;let n={v:1};t.id&&(n.id=t.id);for(let s of["data-framer-name","data-w-id","data-sentient-name"]){let d=t.getAttribute(s);if(d){n.dataAttr={name:s,value:d};break}}n.selector=st(t,e);let o=((i=t.textContent)!=null?i:"").trim().replace(/\s+/g," ").slice(0,80);return n.fingerprint=I({tag:t.tagName.toLowerCase()},o?{text:o}:{}),n}function P(t,e,n){return H(t,n)===e}var lt="sentient-editor-highlight",K="sentient-editor-panel",U="sentient-editor-target-highlight",ct=10;function dt(){let t=window.__sentientEditor;return t&&typeof t.token=="string"&&typeof t.apiBase=="string"?t:null}async function ut(t){var e;try{let n=await fetch(`${t.apiBase}/v1/editor/verify`,{headers:{authorization:`Bearer ${t.token}`}});return n.ok&&(e=(await n.json()).projectId)!=null?e:null}catch(n){return null}}async function _(t,e,n){try{return(await fetch(`${t.apiBase}${e}`,{method:"POST",headers:{authorization:`Bearer ${t.token}`,"content-type":"application/json"},body:JSON.stringify(n)})).ok}catch(o){return!1}}async function pt(t){try{let e=await fetch(`${t.apiBase}/v1/editor/targets`,{headers:{authorization:`Bearer ${t.token}`}});if(!e.ok)return[];let n=await e.json();return Array.isArray(n.targets)?n.targets:[]}catch(e){return[]}}function D(t=document){for(let e of Array.from(t.querySelectorAll(`.${U}`)))e.remove()}function V(t,e=document){D(e);let n=0;for(let o of t){if(n>=ct)break;let i=H(o.locator,e);if(!i)continue;let s=i.getBoundingClientRect(),d=c("div",{position:"fixed",pointerEvents:"none",zIndex:"2147483645",left:`${s.left}px`,top:`${s.top}px`,width:`${s.width}px`,height:`${s.height}px`,border:"2px dashed #10b981",background:"rgba(16,185,129,0.08)"});d.className=U;let u=c("div",{position:"fixed",pointerEvents:"none",zIndex:"2147483645",left:`${s.left}px`,top:`${Math.max(0,s.top-20)}px`,padding:"2px 6px",borderRadius:"4px",background:"#10b981",color:"#fff",font:"11px system-ui, sans-serif",whiteSpace:"nowrap"},o.label);u.className=U,e.body.append(d,u),n+=1}}function c(t,e,n){let o=document.createElement(t);return Object.assign(o.style,e),n!==void 0&&(o.textContent=n),o}function mt(t){let e=null,n=c("div",{position:"fixed",pointerEvents:"none",zIndex:"2147483646",border:"2px solid #6366f1",background:"rgba(99,102,241,0.12)",display:"none"});n.id=lt;let o=c("div",{position:"fixed",bottom:"16px",right:"16px",zIndex:"2147483647",width:"300px",padding:"14px",borderRadius:"12px",background:"#111827",color:"#fff",font:"13px/1.4 system-ui, sans-serif",boxShadow:"0 8px 30px rgba(0,0,0,0.4)"});o.id=K;let i=c("div",{fontWeight:"600",marginBottom:"6px"},"SentientUI editor"),s=c("div",{opacity:"0.7",marginBottom:"10px"},"Click any element on the page to adapt it."),d=c("div",{fontSize:"12px",marginBottom:"10px",minHeight:"16px"}),u=c("button",x("#6366f1"),"Test different text here"),h=c("button",x("#374151"),"Track clicks as a goal"),w=c("button",x("#374151"),"Move up"),L=c("button",x("#374151"),"Move down"),S=c("button",x("#6366f1"),"Save this arrangement"),k=c("button",x("#374151"),"Undo"),T=c("button",F(I({},x("transparent")),{opacity:"0.6"}),"Close editor");for(let r of[u,h,w,L,T])r.disabled=!0;S.style.display="none",k.style.display="none",o.append(i,s,d,u,h,w,L,S,k,T),document.body.append(n,o);let m=(r,a=!0)=>{d.textContent=r,d.style.color=a?"#a7f3d0":"#fca5a5"},g=null,A=!1,v=null,y=null,E=null,C=null,p=null,B=r=>{S.style.display=r?"block":"none",k.style.display=r?"block":"none",w.disabled=r||!A||!E,L.disabled=r||!A||!C},j=()=>{if(!p||!e){p=null,B(!1);return}p.origParent.insertBefore(e,p.origNext),p=null,B(!1)},O=r=>{let a=r.target;if(!a||o.contains(a)||a===n)return;D(document);let l=a.getBoundingClientRect();Object.assign(n.style,{display:"block",left:`${l.left}px`,top:`${l.top}px`,width:`${l.width}px`,height:`${l.height}px`})},R=r=>{let a=r.target;if(!a||o.contains(a))return;r.preventDefault(),r.stopPropagation(),j(),e=a,g=N(a,document);let l=P(g,a,document);A=l,m(l?"\u2713 Selected \u2014 matches exactly 1 element":"\u26A0 Couldn\u2019t target this element uniquely",l);for(let M of[u,h,T])M.disabled=!1;u.disabled=!l,h.disabled=!l,v=a.previousElementSibling,y=a.nextElementSibling;let f=v?N(v,document):null,b=y?N(y,document):null;E=v&&f&&P(f,v,document)?f:null,C=y&&b&&P(b,y,document)?b:null,w.disabled=!l||!E,L.disabled=!l||!C};u.onclick=async()=>{var b,M,q;if(!e||!g)return;let r=window.prompt("First wording (what you show today):",(M=(b=e.textContent)==null?void 0:b.trim())!=null?M:"");if(r===null)return;let a=window.prompt("Alternative wording to test:","");if(a===null)return;let l=((q=window.prompt("Name this slot:","hero-cta"))!=null?q:"hero-cta").trim()||"hero-cta";m("Saving\u2026");let f=await _(t,`/v1/editor/slots/${encodeURIComponent(l)}`,{kind:"arms",target:g,draftConfig:{arms:[{id:"a",displayName:"Original",ops:{text:r}},{id:"b",displayName:"Alternative",ops:{text:a}}]}});m(f?"\u2713 Saved as a draft \u2014 publish it from your dashboard.":"\u26A0 Couldn\u2019t save \u2014 try again.",f)},h.onclick=async()=>{var l;if(!e||!g)return;let r=((l=window.prompt("Name this goal:","demo_requested"))!=null?l:"").trim();if(!r)return;m("Saving\u2026");let a=await _(t,`/v1/editor/goals/${encodeURIComponent(r)}`,{event:"click",locator:g});m(a?"\u2713 Goal saved as a draft.":"\u26A0 Couldn\u2019t save \u2014 try again.",a)},w.onclick=()=>{if(!e||!v||!E)return;let r=e.parentElement;if(!r)return;let a=e.nextSibling;r.insertBefore(e,v),p={direction:"up",origParent:r,origNext:a,anchorLocator:E},B(!0),m("Previewing the new position \u2014 save it or undo.")},L.onclick=()=>{if(!e||!y||!C)return;let r=e.parentElement;if(!r)return;let a=e.nextSibling;r.insertBefore(e,y.nextSibling),p={direction:"down",origParent:r,origNext:a,anchorLocator:C},B(!0),m("Previewing the new position \u2014 save it or undo.")},k.onclick=()=>{j(),m("Move undone \u2014 back to the original position.")},S.onclick=async()=>{var f;if(!e||!g||!p||!A)return;let r=((f=window.prompt("Name this slot:","reorder-slot"))!=null?f:"reorder-slot").trim()||"reorder-slot";m("Saving\u2026");let a=p.direction==="up"?"moveBefore":"moveAfter",l=await _(t,`/v1/editor/slots/${encodeURIComponent(r)}`,{kind:"arms",target:g,draftConfig:{arms:[{id:"a",ops:{}},{id:"b",ops:{[a]:p.anchorLocator}}]}});l&&(p=null,B(!1)),m(l?"\u2713 Saved as a draft \u2014 publish it from your dashboard.":"\u26A0 Couldn\u2019t save \u2014 try again.",l)};let X=()=>{document.removeEventListener("mousemove",O,!0),document.removeEventListener("click",R,!0),D(document),n.remove(),o.remove()};T.onclick=X,document.addEventListener("mousemove",O,!0),document.addEventListener("click",R,!0)}function x(t){return{display:"block",width:"100%",marginTop:"8px",padding:"8px 10px",borderRadius:"8px",border:"none",background:t,color:"#fff",font:"13px system-ui, sans-serif",cursor:"pointer",textAlign:"left"}}async function ft(){if(typeof document=="undefined")return;let t=dt();if(!t||!await ut(t)||document.getElementById(K))return;mt(t);let n=await pt(t);V(n,document)}ft();return rt(gt);})();
@@ -1,2 +1,2 @@
1
- "use strict";var SentientSnippet=(()=>{var fe=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var Dt=Object.getOwnPropertyNames,He=Object.getOwnPropertySymbols;var Ye=Object.prototype.hasOwnProperty,Lt=Object.prototype.propertyIsEnumerable;var Fe=(e,t,n)=>t in e?fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_e=(e,t)=>{for(var n in t||(t={}))Ye.call(t,n)&&Fe(e,n,t[n]);if(He)for(var n of He(t))Lt.call(t,n)&&Fe(e,n,t[n]);return e};var Xe=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ze=(e,t)=>{for(var n in t)fe(e,n,{get:t[n],enumerable:!0})},Tt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Dt(t))!Ye.call(e,r)&&r!==n&&fe(e,r,{get:()=>t[r],enumerable:!(o=Rt(t,r))||o.enumerable});return e};var Pt=e=>Tt(fe({},"__esModule",{value:!0}),e);var jt,Nt,$t,Qe,Mt,Ut,et,O,se,ae=Xe(()=>{"use strict";jt=Object.defineProperty,Nt=Object.defineProperties,$t=Object.getOwnPropertyDescriptors,Qe=Object.getOwnPropertySymbols,Mt=Object.prototype.hasOwnProperty,Ut=Object.prototype.propertyIsEnumerable,et=(e,t,n)=>t in e?jt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,O=(e,t)=>{for(var n in t||(t={}))Mt.call(t,n)&&et(e,n,t[n]);if(Qe)for(var n of Qe(t))Ut.call(t,n)&&et(e,n,t[n]);return e},se=(e,t)=>Nt(e,$t(t))});var it={};Ze(it,{LOCAL_ENGINE_AVAILABLE:()=>Kt,createLocalEngine:()=>Bt});function Bt(e){throw new Error("[sentient] createLocalEngine is not available in production builds. The local engine only exists under the `development` export condition.")}var Kt,st=Xe(()=>{"use strict";ae();Kt=!1});var Pn={};Ze(Pn,{applyPersonaAttributes:()=>Ae,applyRegistrySlots:()=>Ce,applySlotArms:()=>Oe,applySlotAttributes:()=>Ie,parseEditorToken:()=>xt,parsePreview:()=>Et,parseSnippetConfig:()=>we,reapply:()=>Je,run:()=>_t,version:()=>Cn});ae();function pe(e){return Object.keys(e).sort().map(t=>`${t}=${e[t]}`).join("|")}function tt(e){if(e.length===0)return null;let t={};for(let n of e.split("|")){let o=n.indexOf("=");if(o<=0||o!==n.lastIndexOf("=")||o===n.length-1)return null;let r=n.slice(0,o);if(r in t)return null;t[r]=n.slice(o+1)}return t}function Re(e){var t,n,o;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 pe(e.baseline);if(typeof e.baseline=="string")return e.baseline;let r={};for(let[i,a]of Object.entries((n=e.dims)!=null?n:{}))r[i]=(o=a[0])!=null?o:"";return pe(r)}function nt(e,t){var n,o;return e.dims!=null?(o=(n=tt(t))!=null?n:tt(Re(e)))!=null?o:{}:t}function H(e){return e>=.3?e<.7?"medium":"high":"low"}var rt=["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 De(e){return ot(e)!==null}function ot(e){var t;if(!e)return null;let n=e.toLowerCase();return(t=rt.find(o=>n.includes(o.toLowerCase())))!=null?t:null}function Le(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 Te(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(r){}let o=n.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(o)?"search":/(^|\.)(twitter|x\.com|facebook|linkedin|reddit|t\.co)/.test(o)?"social":"referral"}catch(n){return"direct"}}function Pe(e){if(!e)return null;try{return new URL(e).hostname}catch(t){return null}}function je(e){let t=e.getHours();return t<6?"night":t<12?"morning":t<18?"afternoon":"evening"}function ge(e){return O(O(O({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 me(e){let t=ge(e);return nt(t,Re(t))}function Ne(e){return typeof e=="string"?e:pe(e)}ae();var Gt="_snt_uid",Q="_snt_uid";function qt(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(t){}let e=()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0");return`${e()}-${e()}-${e()}-${e()}`}function Wt(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function Jt(e,t,n){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${n}; SameSite=strict; path=/`}catch(o){}}function zt(e){try{return localStorage.getItem(e)}catch(t){return null}}function Vt(e,t){try{return localStorage.setItem(e,t),!0}catch(n){return!1}}function Ht(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function Ft(e,t){try{return sessionStorage.setItem(e,t),!0}catch(n){return!1}}function Yt(e){try{sessionStorage.removeItem(e)}catch(t){}}function Xt(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,/(?:^|; )_snt_uid_probe=1/.test(document.cookie)||document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function Zt(e){try{localStorage.removeItem(e)}catch(t){}}function Qt(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var en={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function ct(e){var t,n,o,r,i,a;if(typeof window=="undefined")return en;let l=(t=e==null?void 0:e.cookieName)!=null?t:Gt,s=((n=e==null?void 0:e.cookieTTLDays)!=null?n:365)*24*60*60,c=(a=(i=(r=(o=Wt(l))!=null?o:zt(Q))!=null?r:Ht(Q))!=null?i:e==null?void 0:e.ssrSessionId)!=null?a:qt();Jt(l,c,s);let p=Vt(Q,c),f=Xt(l),S=p?!1:Ft(Q,c),d=!p&&!f&&!S;return{getSessionId:()=>c,isEphemeral:()=>d,destroy:()=>{c=null,Qt(l),Zt(Q),Yt(Q)}}}function ut(e){return`_snt_retry_${e.slice(0,12)}`}var tn={push:()=>{},flush:()=>{},destroy:()=>{}};function nn(e,t){try{let n=localStorage.getItem(t);if(!n)return[];let o=JSON.parse(n);return Array.isArray(o)?(localStorage.removeItem(t),o.slice(-e)):[]}catch(n){return[]}}function $e(e,t,n){try{let o=[...(()=>{try{let r=localStorage.getItem(n);if(!r)return[];let i=JSON.parse(r);return Array.isArray(i)?i:[]}catch(r){return[]}})(),...e].slice(-t);localStorage.setItem(n,JSON.stringify(o))}catch(o){}}function rn(e){var t,n,o;if(typeof window=="undefined")return tn;let r=(t=e.flushIntervalMs)!=null?t:5e3,i=(n=e.maxBatchSize)!=null?n:20,a=(o=e.maxRetrySize)!=null?o:100,l=e.ingestUrl,s=e.apiKey,c=ut(s),p=[],f=new Set,S=[],d=m=>{for(let w of m)h.delete(w),!f.has(w)&&(f.add(w),S.push(w));for(;S.length>500;){let w=S.shift();w&&f.delete(w)}},h=new Set,b=m=>{f.has(m.id)||h.has(m.id)||(h.add(m.id),p.push(m))},N=nn(a,c);for(let m of N)b(m);let R=0,y=0,v=m=>{if(m.length===0)return;let w=JSON.stringify(m),C=m.map(u=>u.id),M;try{M=fetch(l,{method:"POST",keepalive:!0,body:w,headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`}})}catch(u){$e(m,a,c);for(let g of C)h.delete(g);y++,R=Date.now()+Math.min(6e4,1e3*2**Math.min(y,6));return}let q=u=>{if(u.ok||u.status>=400&&u.status<500&&u.status!==429){d(C),y=0,R=0;return}$e(m,a,c);for(let g of C)h.delete(g);y++,R=Date.now()+Math.min(6e4,1e3*2**Math.min(y,6))};M instanceof Promise?M.then(q).catch(()=>{$e(m,a,c);for(let u of C)h.delete(u);y++,R=Date.now()+Math.min(6e4,1e3*2**Math.min(y,6))}):q(M)},k=typeof TextEncoder!="undefined"?new TextEncoder:null,D=m=>k?k.encode(m).length:m.length,de=m=>{let w=[],C=2;for(let M of m){let q=D(JSON.stringify(M))+1;if(w.length>0&&C+q>57344||w.length>=i)break;w.push(M),C+=q}return w},x=()=>{try{if(Date.now()<R)return;for(;p.length>0;){let m=p.filter(C=>!f.has(C.id));if(p.length=0,m.length===0)break;let w=de(m);if(w.length===0)break;w.length<m.length&&p.push(...m.slice(w.length)),v(w)}}catch(m){}},X=!0,L=null;L=setInterval(()=>{X&&x()},r);let E=()=>{document.visibilityState==="hidden"&&x()},ne=()=>{x()};return document.addEventListener("visibilitychange",E),window.addEventListener("beforeunload",ne),{push(m){b(m),p.length>=i&&x()},flush:x,destroy(){X=!1,L!==null&&(clearInterval(L),L=null),document.removeEventListener("visibilitychange",E),window.removeEventListener("beforeunload",ne),x()}}}var Be="_snt_asgn_";function ye(e,t){return`${e}:${t}`}function on(e,t){return`${Be}${encodeURIComponent(e)}:${encodeURIComponent(t)}`}function at(e){let t=e.slice(Be.length),n=t.indexOf(":");if(n<0)return null;try{return{componentId:decodeURIComponent(t.slice(0,n)),segment:decodeURIComponent(t.slice(n+1))}}catch(o){return null}}function Me(){try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n!=null&&n.startsWith(Be)&&e.push(n)}return e}catch(e){return[]}}function sn(e=18e5){let t=new Map,n=o=>o.assignedAt+e<Date.now();return typeof window!="undefined"&&(()=>{for(let o of Me())try{let r=localStorage.getItem(o);if(!r)continue;let i=JSON.parse(r);if(n(i)){localStorage.removeItem(o);continue}let a=at(o);if(!a)continue;t.set(ye(a.componentId,a.segment),i)}catch(r){}})(),{get(o,r){let i=t.get(ye(o,r));return i?n(i)?(t.delete(ye(o,r)),null):i:null},set(o,r,i){let a=ye(o,r);t.set(a,i);try{localStorage.setItem(on(o,r),JSON.stringify(i))}catch(l){}},invalidate(o){let r=`${o}:`;for(let i of[...t.keys()])i.startsWith(r)&&t.delete(i);for(let i of Me()){let a=at(i);if((a==null?void 0:a.componentId)===o)try{localStorage.removeItem(i)}catch(l){}}},clear(){t.clear();for(let o of Me())try{localStorage.removeItem(o)}catch(r){}}}}var ve="_snt_snap:",an=["low","medium","high"];function be(e){try{let t=localStorage.getItem(ve+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"||!an.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 le(e,t){try{localStorage.setItem(ve+e,JSON.stringify(t))}catch(n){}}var Ke="[sentient] No API key configured \u2014 nothing is being learned. Set NEXT_PUBLIC_SENTIENT_API_KEY or pass localMode: true for local development.",dt="[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.",lt=!1,he=!1;function ln(){var e;try{return(e=new URLSearchParams(window.location.search).get("sentient_persona"))!=null?e:void 0}catch(t){return}}function cn(e){var t;let n=ct({ssrSessionId:e.ssrSessionId}),o=(t=n.getSessionId())!=null?t:"local",r=ln(),i=Promise.resolve().then(()=>(st(),it)).then(s=>{let c=s;return c.LOCAL_ENGINE_AVAILABLE?(lt||(lt=!0,console.info(dt)),c):(he||(he=!0,console.error(Ke)),null)}).catch(()=>(he||(he=!0,console.error(Ke)),null)),a=null;function l(s){let c=document.documentElement;c.dataset.sentientPersona===void 0&&(c.dataset.sentientPersona=s.persona,c.dataset.sentientConfidence=H(s.confidence))}return{isLocal:!0,async decide(s){var c,p,f;let S=await i;if(!S)return null;let d=S.createLocalEngine({sessionId:o,forcedPersona:r}).decide(s);return a=se(O({},d),{layoutOrder:(p=(c=d.layoutOrder)!=null?c:a==null?void 0:a.layoutOrder)!=null?p:null,slots:O(O({},(f=a==null?void 0:a.slots)!=null?f:{}),d.slots)}),le(e.apiKey||"local",{v:1,persona:a.persona,band:H(a.confidence),slots:a.slots,layoutOrder:a.layoutOrder,savedAt:Date.now()}),l(d),d},getSlotResult(s){var c,p,f;return(f=(p=a==null?void 0:a.slots[s])!=null?p:(c=e.initialSlots)==null?void 0:c[s])!=null?f:null},getPersona(){return a?{persona:a.persona,confidence:a.confidence,band:H(a.confidence)}:null},async assign(s,c){var p;let f=await i;return!f||!c||c.length===0?c!=null&&c[0]?{variantId:c[0],assignmentTtlMs:0}:null:{variantId:(p=f.createLocalEngine({sessionId:o,forcedPersona:r}).decide({components:[{id:s,variantIds:c}]}).assignments[s])!=null?p:c[0],assignmentTtlMs:0}},track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,fetchWeights:()=>Promise.resolve([]),getGraph:()=>({pageNodes:[],capturedAt:0}),dispose:()=>{},destroy:()=>n.destroy()}}var ft="https://api.sentient-ui.com/v1/events",F=new Map,pt=null;function Ue(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}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)})}var ee={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 un(){try{let e={},t=new URLSearchParams(window.location.search);for(let[n,o]of t)n.startsWith("utm_")&&(e[n]=o);return e}catch(e){return{}}}function gt(e){return e.replace(/\/events\/?$/,"")}function ce(){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 Ge(e){if(typeof window=="undefined")return;let t=e!=null?e:pt;if(!t){console.warn("[sentient] grantConsent() called before init()");return}let n=F.get(t);if(!n){console.warn("[sentient] grantConsent() called before init()");return}let{config:o,upgrade:r}=n;if(!r||o.respectDoNotTrack!==!1&&ce())return;let i=Se(se(O({},o),{consent:!0}));r(i),F.set(t,{config:se(O({},o),{consent:!0}),upgrade:null})}function dn(e){var t;let n=gt((t=e.ingestUrl)!=null?t:ft),o={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},r={track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,fetchWeights:()=>Promise.resolve([]),async assign(l,s,c){try{let p=new URLSearchParams({componentId:l});for(let S of s!=null?s:[])p.append("variantIds[]",S);let f=await fetch(`${n}/winner?${p.toString()}`,{headers:o});return f.ok?{variantId:(await f.json()).variantId,assignmentTtlMs:0}:s!=null&&s[0]?{variantId:s[0],assignmentTtlMs:0}:null}catch(p){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:()=>{}},i={track:l=>r.track(l),goal:(l,s,c,p)=>r.goal(l,s,c,p),componentGoal:(l,s,c)=>r.componentGoal(l,s,c),identify:l=>r.identify(l),getAssignment:(l,s)=>r.getAssignment(l,s),assign:(l,s,c,p)=>r.assign(l,s,c,p),decide:l=>r.decide(l),getSlotResult:l=>r.getSlotResult(l),getPersona:()=>r.getPersona(),fetchWeights:()=>r.fetchWeights(),getGraph:()=>r.getGraph(),dispose:()=>r.dispose(),destroy:()=>r.destroy()};function a(l){r=l}return{proxy:i,setInner:a}}function Se(e){var t,n,o,r,i,a,l,s,c;if(typeof window=="undefined")return ee;pt=e.apiKey;let p=e.respectDoNotTrack!==!1&&ce(),f=e.consent===!1||p,S=typeof e.apiKey=="string"&&e.apiKey.startsWith("pk_");if(e.localMode===!0||!S&&e.localMode!==!1)return f?(F.set(e.apiKey||"local",{config:e,upgrade:null}),ee):(F.set(e.apiKey||"local",{config:e,upgrade:null}),cn(e));if(f){if(e.preConsentBehavior==="statistical_winner"){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."),ee;let{proxy:u,setInner:g}=dn(e);return F.set(e.apiKey,{config:e,upgrade:p?null:g}),u}return F.set(e.apiKey,{config:e,upgrade:null}),ee}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."),ee;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),ee;let d=(t=e.ingestUrl)!=null?t:ft,h=Date.now(),b=ct({ssrSessionId:e.ssrSessionId}),N=sn(),R=rn({ingestUrl:d,apiKey:e.apiKey}),y=gt(d),v={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},k=Le((n=navigator.userAgent)!=null?n:""),D=typeof window!="undefined"?window.location.origin:void 0,de=Te((o=document.referrer)!=null?o:"",D),x=(r=e.sessionSegment)!=null?r:`${k}:${de}`,X=new Map,L=new Map,E=null,ne=u=>{for(let g of u)L.has(g.id)||L.set(g.id,me(g))};if(e.initialSlots)for(let[u,g]of Object.entries(e.initialSlots))L.set(u,g);let m=be(e.apiKey);if(m)for(let[u,g]of Object.entries(m.slots))L.has(u)||L.set(u,g);let w={low:.15,medium:.5,high:.85};if(e.initialPersona)E=O({},e.initialPersona);else{let u=document.documentElement.dataset;u.sentientPersona?E={persona:u.sentientPersona,confidence:(a=w[(i=u.sentientConfidence)!=null?i:"low"])!=null?a:.15}:m&&(E={persona:m.persona,confidence:(l=w[m.band])!=null?l:.15})}if(e.initialAssignments)for(let[u,g]of Object.entries(e.initialAssignments))N.set(u,x,{variantId:g,assignedAt:Date.now(),segment:x,confidence:1});let C=Promise.resolve(),M=b.getSessionId();if(M){let u=Pe((s=document.referrer)!=null?s:""),g=O(O({sessionId:M,deviceClass:k,trafficSource:de,referrerDomain:u,utmParams:un(),timeOfDay:je(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:b.isEphemeral(),automation:typeof navigator!="undefined"&&navigator.webdriver===!0||De((c=navigator.userAgent)!=null?c:"")},e.userId?{userId:e.userId}:{}),e.country?{country:e.country}:{});try{C=fetch(`${y}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(g),headers:v}).then(I=>{I.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(I){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:R});let q={goal(u,g={},I=1,U=0){let $=b.getSessionId();if(!$)return;let P=Ue();C.then(()=>{fetch(`${y}/goals`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:$,name:u,metadata:g,weight:I,stepIndex:U,goalId:P}),headers:v}).catch(()=>{})})},componentGoal(u,g,I){var U,$,P;let W=b.getSessionId();if(!W)return;let K=N.get(u,x),B=K?null:(U=L.get(u))!=null?U:null;if(!K&&B===null){e.debug&&console.warn(`[sentient] componentGoal("${u}"): no assignment or slot decision yet \u2014 render its <Adaptive>/adaptive hook or call assign()/decide() before recording a goal.`);return}let V=K?K.variantId:Ne(B),G={id:Ue(),sessionId:W,projectId:e.apiKey,componentId:u,variantId:V,eventType:"goal_achieved",goalType:g,payload:O({reward:($=I==null?void 0:I.reward)!=null?$:1},(P=I==null?void 0:I.metadata)!=null?P:{}),timestamp:Date.now(),timeInSession:Date.now()-h};e.debug&&console.log("[sentient] componentGoal",G),C.then(()=>R.push(G))},identify(u){let g=b.getSessionId();g&&C.then(()=>{fetch(`${y}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:g,userId:u,ephemeral:b.isEphemeral()}),headers:v}).catch(()=>{})})},track(u){let g=b.getSessionId();if(!g)return;let I=se(O({},u),{id:Ue(),sessionId:g,timestamp:Date.now(),timeInSession:Date.now()-h});e.debug&&console.log("[sentient] track",I),C.then(()=>R.push(I))},getAssignment(u,g){return N.get(u,g)},async assign(u,g,I,U){let $=b.getSessionId();if(!$)return null;let P=N.get(u,x);if(P&&(g!=null&&g.length||P.content!==void 0))return{variantId:P.variantId,assignmentTtlMs:0,content:P.content};let W=X.get(u);if(W)return W;let K=(async()=>{await C;try{let B={sessionId:$,componentId:u,variantIds:g};U!==void 0?B.agentDataByVariant=U:I!==void 0&&(B.agentData=I);let V=await fetch(`${y}/assign`,{method:"POST",body:JSON.stringify(B),headers:v});if(!V.ok)return null;let G=await V.json();return N.set(u,x,{variantId:G.variantId,assignedAt:Date.now(),segment:x,confidence:1,content:G.content}),G}catch(B){return null}finally{X.delete(u)}})();return X.set(u,K),K},async decide(u){var g,I,U,$,P,W,K,B,V,G;let ze=b.getSessionId();if(!ze)return null;let re=(g=u.slots)!=null?g:[];await C;try{let Z={sessionId:ze};u.sections&&u.sections.length>0&&(Z.sections=u.sections.map(j=>({id:j}))),Z.components=(I=u.components)!=null?I:[],re.length>0&&(Z.slots=re.map(ge)),u.slotsFrom==="registry"&&(Z.slotsFrom="registry");let Ve=await fetch(`${y}/decide`,{method:"POST",body:JSON.stringify(Z),headers:v});if(!Ve.ok)return ne(re),null;let _=await Ve.json(),oe={};for(let j of re)oe[j.id]=($=(U=_.slots)==null?void 0:U[j.id])!=null?$:me(j);if(_.slots)for(let[j,ie]of Object.entries(_.slots))j in oe||(oe[j]=ie);for(let[j,ie]of Object.entries(oe))L.set(j,ie);E={persona:(P=_.persona)!=null?P:"unknown",confidence:(W=_.confidence)!=null?W:0};for(let[j,ie]of Object.entries((K=_.assignments)!=null?K:{}))N.set(j,x,{variantId:ie,assignedAt:Date.now(),segment:x,confidence:1});return le(e.apiKey,O({v:1,persona:E.persona,band:H(E.confidence),slots:Object.fromEntries(L),layoutOrder:(B=_.layoutOrder)!=null?B:null,savedAt:Date.now()},_.slotConfig?{slotConfig:_.slotConfig}:{})),O(O({layoutOrder:(V=_.layoutOrder)!=null?V:null,assignments:(G=_.assignments)!=null?G:{},slots:oe,persona:E.persona,confidence:E.confidence},_.slotConfig?{slotConfig:_.slotConfig}:{}),_.goals?{goals:_.goals}:{})}catch(Z){return ne(re),null}},getSlotResult(u){var g;return(g=L.get(u))!=null?g:null},getPersona(){return E?{persona:E.persona,confidence:E.confidence,band:H(E.confidence)}:null},async fetchWeights(){var u;try{let g=await fetch(`${y}/weights`,{headers:v});return g.ok?(u=(await g.json()).components)!=null?u:[]:[]}catch(g){return[]}},getGraph(){return{pageNodes:[],capturedAt:0}},dispose(){R.destroy(),e.debug&&console.log("[sentient] disposed")},destroy(){R.destroy(),b.destroy();try{localStorage.removeItem(ve+e.apiKey),localStorage.removeItem(ut(e.apiKey))}catch(u){}e.debug&&console.log("[sentient] destroyed")}};if(F.set(e.apiKey,{config:e,upgrade:null}),e.debug){let u=window;u.__sentient&&(u.__sentient.client=q)}return q}ae();var fn=[["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]];function pn(e){var n;let t=e.querySelector("h1, h2, h3");return((n=t==null?void 0:t.textContent)!=null?n:"").slice(0,160)}function gn(e){var o;let t=e.querySelectorAll('a, button, [role="button"]').length,n=((o=e.textContent)!=null?o:"").trim().length;return t>=1&&n>0&&n<200}function mt(e){let t=e.tagName.toLowerCase();if(t==="nav"||t==="footer")return"navigation";let n=`${e.id} ${e.className} ${pn(e)}`.toLowerCase();for(let[o,r]of fn)if(r.test(n))return o;return gn(e)?"cta":t==="header"||/\b(hero|headline|banner)\b/i.test(n)?"hero":"generic"}var yt="section, header, footer, nav, main > div, [data-sentient-section]";function mn(e){var t;return((t=e.parentElement)==null?void 0:t.closest(yt))!=null}function yn(e,t,n,o){try{fetch(`${t}/v1/section-map`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({pageUrl:n,sections:o})}).catch(()=>{})}catch(r){}}function ht(e,t,n,o=document){var S,d,h,b,N,R;if(typeof IntersectionObserver=="undefined"||typeof o=="undefined")return;let r=Array.from(o.querySelectorAll(yt)).filter(y=>!mn(y));if(r.length===0)return;let i=new Map,a=new Map;for(let y of r){let v=mt(y),k=`nc-${v}`;i.set(y,k),a.set(k,v)}let l=(b=(h=(d=(S=o.defaultView)!=null?S:typeof window!="undefined"?window:void 0)==null?void 0:d.location)==null?void 0:h.pathname)!=null?b:"/";yn(t,n,l,[...a.entries()].map(([y,v])=>({componentId:y,semanticType:v})));let s=new Map,c=y=>{let v=s.get(y);return v||(v={ms:0,scroll:0,enterAt:null,intersecting:!1},s.set(y,v)),v},p=new IntersectionObserver(y=>{for(let v of y){let k=i.get(v.target);if(!k)continue;let D=c(k);v.isIntersecting?(D.intersecting=!0,D.enterAt=Date.now(),v.intersectionRatio>D.scroll&&(D.scroll=v.intersectionRatio)):(D.intersecting=!1,D.enterAt!=null&&(D.ms+=Date.now()-D.enterAt,D.enterAt=null))}},{threshold:[0,.25,.5,.75,1]});for(let y of i.keys())p.observe(y);let f=()=>{let y=Date.now();for(let[v,k]of s)if(k.enterAt!=null&&(k.ms+=y-k.enterAt,k.enterAt=null),!(k.ms<=0)){try{e.track({projectId:t,componentId:v,eventType:"dwell",payload:{dwell_time:Math.round(k.ms),scroll_depth:Number(k.scroll.toFixed(2))}})}catch(D){}k.ms=0}};o.addEventListener("visibilitychange",()=>{if(o.hidden)f();else{let y=Date.now();for(let v of s.values())v.intersecting&&(v.enterAt=y)}}),(R=(N=o.defaultView)!=null?N:window)==null||R.addEventListener("pagehide",()=>{f();try{p.disconnect()}catch(y){}})}var hn=["landing","ecommerce","saas","marketplace"];function vn(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[o,r]of t){if(!Array.isArray(r)||r.length<2||r.length>6||!r.every(i=>typeof i=="string"))return null;n[o]=r}return n}function bn(e){return!Array.isArray(e)||e.length<2||e.length>12||!e.every(t=>typeof t=="string")?null:e}function we(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=hn.includes(t.context)?t.context:"landing",o={};if(typeof t.slots=="object"&&t.slots!==null&&!Array.isArray(t.slots))for(let[i,a]of Object.entries(t.slots)){if(typeof a!="object"||a===null)continue;let l=a,s=vn(l.dims);if(!s||l.target!==void 0&&typeof l.target!="string")continue;let c=l.arms!==void 0?bn(l.arms):null,p={dims:s};typeof l.target=="string"&&(p.target=l.target),c&&(p.arms=c),o[i]=p}let r={apiKey:t.apiKey,context:n,personaAttributes:t.personaAttributes===!0,slots:o};return typeof t.consent=="boolean"&&(r.consent=t.consent),(t.preConsentBehavior==="statistical_winner"||t.preConsentBehavior==="control")&&(r.preConsentBehavior=t.preConsentBehavior),t.debug===!0&&(r.debug=!0),typeof t.registry=="boolean"&&(r.registry=t.registry),typeof t.editorSrc=="string"&&(r.editorSrc=t.editorSrc),typeof t.apiBase=="string"&&(r.apiBase=t.apiBase),t.sectionCapture===!0&&(r.sectionCapture=!0),r}function vt(e){var n,o,r;let t=(o=(n=e.defaultView)!=null?n:typeof window!="undefined"?window:void 0)==null?void 0:o.location;return(r=t==null?void 0:t.pathname)!=null?r:""}function Sn(e,t){var n;if(t.tag&&e.tagName.toLowerCase()!==t.tag.toLowerCase())return!1;if(t.text){let o=((n=e.textContent)!=null?n:"").trim().toLowerCase(),r=t.text.trim().toLowerCase();if(!(o===r||o.startsWith(r)||r.startsWith(o)))return!1}return!0}function bt(e,t){return!!(e!=null&&e.urlMatch)&&!vt(t).includes(e.urlMatch)}function ke(e,t){var r;if(e.urlMatch&&!vt(t).includes(e.urlMatch))return null;let n=[];if(e.id){let i=t.getElementById(e.id);n=i?[i]:[]}if(n.length===0&&((r=e.dataAttr)!=null&&r.name))try{let i=e.dataAttr.value.replace(/["\\]/g,"\\$&");n=Array.from(t.querySelectorAll(`[${e.dataAttr.name}="${i}"]`))}catch(i){n=[]}if(n.length===0&&e.selector)try{n=Array.from(t.querySelectorAll(e.selector))}catch(i){n=[]}if(n.length!==1)return null;let o=n[0];return e.fingerprint&&!Sn(o,e.fingerprint)?null:o}var St=/^https:\/\//i,wn={color:"color",background:"background",fontSize:"font-size",fontWeight:"font-weight",textAlign:"text-align",padding:"padding",margin:"margin",borderRadius:"border-radius"};function kn(e){return!/[;{}<>]/.test(e)}var wt=new Map,J=null;function An(e){return e.replace(/["\\]/g,"\\$&")}function In(e){var t;(!J||!J.isConnected)&&(J=e.querySelector("style[data-sentient-ops]"),J||(J=e.createElement("style"),J.setAttribute("data-sentient-ops",""),((t=e.head)!=null?t:e.documentElement).appendChild(J))),J.textContent=[...wt.entries()].map(([n,o])=>`[data-snt-e="${An(n)}"]{${o}}`).join(`
2
- `)}function kt(e,t,n,o){typeof t.text=="string"&&(e.textContent=t.text),typeof t.href=="string"&&St.test(t.href)&&e.setAttribute("href",t.href),typeof t.imageSrc=="string"&&St.test(t.imageSrc)&&e.setAttribute("src",t.imageSrc),typeof t.imageAlt=="string"&&e.setAttribute("alt",t.imageAlt);let r=[];if(t.hidden&&r.push("display:none !important"),t.style)for(let[i,a]of Object.entries(t.style)){let l=wn[i];l&&typeof a=="string"&&kn(a)&&r.push(`${l}:${a.trim()} !important`)}r.length>0&&(e.setAttribute("data-snt-e",n),wt.set(n,r.join(";")),In(o))}function Ae(e,t,n){n.documentElement.setAttribute("data-sentient-persona",e),n.documentElement.setAttribute("data-sentient-confidence",t)}function Ie(e,t,n){var o;for(let[r,i]of Object.entries(t)){let a=e[r];if(!a||typeof a=="string")continue;let l=i.target?Array.from(n.querySelectorAll(i.target)):[n.documentElement];for(let s of l)for(let[c,p]of Object.entries(a))(o=i.dims[c])!=null&&o.includes(p)&&s.setAttribute(`data-${c}`,p)}}function Oe(e,t,n){for(let[o,r]of Object.entries(t)){let i=e[o];if(typeof i!="string"||!r.arms||!r.arms.includes(i))continue;let a=r.target?Array.from(n.querySelectorAll(r.target)):[n.documentElement];for(let l of a)l.setAttribute("data-sentient-arm",i)}}function Ce(e,t,n,o){var a;let r=(a=o==null?void 0:o.contentAndOps)!=null?a:!0,i=[];for(let[l,s]of Object.entries(t)){if(bt(s.locator,n))continue;let c;if(s.locator){let f=ke(s.locator,n);c=f?[f]:[]}else s.target?c=Array.from(n.querySelectorAll(s.target)):c=[n.documentElement];(s.locator||s.target)&&c.length===0&&i.push(l);let p=e[l];for(let f of c){if(p!==void 0)if(typeof p=="string")f.setAttribute("data-sentient-arm",p);else for(let[S,d]of Object.entries(p))f.setAttribute(`data-${S}`,d);r&&(typeof s.content=="string"&&(f.textContent=s.content),s.ops&&kt(f,s.ops,l,n))}}return i}function On(e){var n,o,r;let t=(o=(n=e.defaultView)!=null?n:typeof window!="undefined"?window:void 0)==null?void 0:o.location;return(r=t==null?void 0:t.pathname)!=null?r:""}function At(e,t,n){var S;let o=new Set,r=d=>{if(!o.has(d.goalId)){o.add(d.goalId);try{d.slotId?t.componentGoal(d.slotId,d.goalId):t.goal(d.goalId)}catch(h){}}},i=e.filter(d=>d.event==="click"),a=e.filter(d=>d.event==="form_submit"),l=e.filter(d=>d.event==="url_reached"),s=(d,h)=>{if(!d.locator)return!1;let b=ke(d.locator,n);return!!b&&(b===h||b.contains(h))},c=d=>{let h=d.target;if(!(!h||typeof h.closest!="function"))for(let b of i)s(b,h)&&r(b)},p=d=>{let h=d.target;if(h)for(let b of a)s(b,h)&&r(b)},f=()=>{if(l.length===0)return;let d=On(n);for(let h of l)h.urlPattern&&d.includes(h.urlPattern)&&r(h)};return n.addEventListener("click",c,!0),n.addEventListener("submit",p,!0),(S=n.defaultView)==null||S.addEventListener("popstate",f),f(),{checkUrl:f,teardown:()=>{var d;n.removeEventListener("click",c,!0),n.removeEventListener("submit",p,!0),(d=n.defaultView)==null||d.removeEventListener("popstate",f)}}}var Cn="0.3.0",xn=5e3,En=50,ue=null,T=null,z={},te=null,Y=null,A=null,It=!1,qe=null;function _n(e,t){return Promise.race([e,new Promise(n=>setTimeout(()=>n(null),t))])}function xe(e,...t){e!=null&&e.debug&&console.log("[sentient-snippet]",...t)}function Ee(e,t){return ue?(ue.personaAttributes&&A&&Ae(A.persona,A.band,e),Ie(z,ue.slots,e),Oe(z,ue.slots,e),te?Ce(z,te,e,t):[]):[]}function Rn(e,t){var n;if(t.length!==0)try{let o=(n=e.apiBase)!=null?n:"https://api.sentient-ui.com";fetch(`${o}/v1/locator-miss`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({slots:t})}).catch(()=>{})}catch(o){}}function Je(){try{Ee(document)}catch(e){}}function Ot(){qe===null&&(qe=setTimeout(()=>{qe=null,Je();try{Y==null||Y.checkUrl()}catch(e){}},En))}function Ct(){if(!(It||typeof window=="undefined"||typeof history=="undefined")){It=!0;try{let e=t=>{let n=history[t];history[t]=function(o,r,i){let a=n.call(this,o,r,i!=null?i:null);return Ot(),a}};e("pushState"),e("replaceState"),window.addEventListener("popstate",Ot)}catch(e){}}}function We(e){let t={};for(let[n,o]of Object.entries(e.slots))t[n]=o.target?document.querySelectorAll(o.target).length:1;return t}function xt(e){return new URLSearchParams(e).get("sentient_editor")}function Dn(){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 Ln(e,t){var n,o,r,i;try{window.__sentientEditor={token:t,apiBase:(n=e.apiBase)!=null?n:"https://api.sentient-ui.com"};try{let s=document.createElement("meta");s.name="referrer",s.content="no-referrer",((o=document.head)!=null?o:document.documentElement).appendChild(s)}catch(s){}let a=(r=e.editorSrc)!=null?r:Dn();if(!a)return;let l=document.createElement("script");l.src=a,l.async=!0,((i=document.head)!=null?i:document.documentElement).appendChild(l)}catch(a){}}function Et(e){let t=new URLSearchParams(e).get("sentient_preview");if(!t)return null;let n={};for(let o of t.split("|")){let[r,i]=o.split(":");if(!(!r||!i))if(i.includes("=")){let a={};for(let l of i.split(",")){let[s,c]=l.split("=");s&&c&&(a[s]=c)}Object.keys(a).length&&(n[r]=a)}else n[r]=i}return Object.keys(n).length?n:null}function Tn(e){let t={goal(n,o){try{T==null||T.goal(n,o)}catch(r){}},componentGoal(n,o){try{T==null||T.componentGoal(n,o)}catch(r){}},grantConsent(){try{Ge(e.apiKey)}catch(n){}},revokeConsent(){try{T==null||T.destroy()}catch(n){}},reapply:Je,getState(){var n,o;return{apiKey:e.apiKey,persona:(n=A==null?void 0:A.persona)!=null?n:null,band:(o=A==null?void 0:A.band)!=null?o:null,slots:z,matchCounts:We(e),consent:e.consent!==!1}}};window.SentientSnippet=t}async function _t(){var e,t,n,o;try{let r=we(window.sentient);if(!r)return;ue=r;let i=typeof window!="undefined"?xt(window.location.search):null;if(i){try{let d=new URL(window.location.href);d.searchParams.delete("sentient_editor"),window.history.replaceState(null,"",d.pathname+d.search+d.hash)}catch(d){}Ln(r,i),xe(r,"editor mode");return}let a=typeof window!="undefined"?Et(window.location.search):null;if(a){z=a,A=null,Ee(document),Ct(),xe(r,"preview mode",a);return}let l=(e=r.registry)!=null?e:Object.keys(r.slots).length===0,s=be(r.apiKey);s&&(A={persona:s.persona,band:s.band},z=s.slots,s.slotConfig&&(te=s.slotConfig),Ee(document,{contentAndOps:!1}));let c=Se({apiKey:r.apiKey,context:r.context,consent:r.consent,preConsentBehavior:r.preConsentBehavior,debug:r.debug});T=c,Tn(r),Ct();let p=Object.entries(r.slots).map(([d,h])=>({id:d,dims:h.dims})),f=await _n(c.decide(_e({slots:p},l?{slotsFrom:"registry"}:{})),xn);if(!f){xe(r,"decide timeout/null \u2014 snapshot state stands",We(r));return}let S=c.getPersona();if(S?A={persona:S.persona,band:S.band}:f.persona&&(A={persona:f.persona,band:"low"}),z=f.slots,f.slotConfig&&(te=f.slotConfig),Rn(r,Ee(document)),f.goals&&f.goals.length>0&&r.consent!==!1&&T)try{Y==null||Y.teardown(),Y=At(f.goals,T,document)}catch(d){}if(r.sectionCapture&&r.consent!==!1&&T&&!ce())try{ht(T,r.apiKey,(t=r.apiBase)!=null?t:"https://api.sentient-ui.com",document)}catch(d){}xe(r,"applied",{persona:A,slots:z,matches:We(r)}),le(r.apiKey,_e({v:1,persona:(n=A==null?void 0:A.persona)!=null?n:f.persona,band:(o=A==null?void 0:A.band)!=null?o:"low",slots:f.slots,layoutOrder:f.layoutOrder,savedAt:Date.now()},te?{slotConfig:te}:{}))}catch(r){}}typeof window!="undefined"&&window.sentient&&_t();return Pt(Pn);})();
1
+ "use strict";var SentientSnippet=(()=>{var pe=Object.defineProperty;var Dt=Object.getOwnPropertyDescriptor;var Tt=Object.getOwnPropertyNames,He=Object.getOwnPropertySymbols;var Ye=Object.prototype.hasOwnProperty,Lt=Object.prototype.propertyIsEnumerable;var Fe=(e,t,n)=>t in e?pe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_e=(e,t)=>{for(var n in t||(t={}))Ye.call(t,n)&&Fe(e,n,t[n]);if(He)for(var n of He(t))Lt.call(t,n)&&Fe(e,n,t[n]);return e};var Xe=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ze=(e,t)=>{for(var n in t)pe(e,n,{get:t[n],enumerable:!0})},Pt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Tt(t))!Ye.call(e,r)&&r!==n&&pe(e,r,{get:()=>t[r],enumerable:!(o=Dt(t,r))||o.enumerable});return e};var Nt=e=>Pt(pe({},"__esModule",{value:!0}),e);var jt,$t,Mt,Qe,Ut,Bt,et,E,ae,le=Xe(()=>{"use strict";jt=Object.defineProperty,$t=Object.defineProperties,Mt=Object.getOwnPropertyDescriptors,Qe=Object.getOwnPropertySymbols,Ut=Object.prototype.hasOwnProperty,Bt=Object.prototype.propertyIsEnumerable,et=(e,t,n)=>t in e?jt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,E=(e,t)=>{for(var n in t||(t={}))Ut.call(t,n)&&et(e,n,t[n]);if(Qe)for(var n of Qe(t))Bt.call(t,n)&&et(e,n,t[n]);return e},ae=(e,t)=>$t(e,Mt(t))});var it={};Ze(it,{LOCAL_ENGINE_AVAILABLE:()=>Kt,createLocalEngine:()=>Gt});function Gt(e){throw new Error("[sentient] createLocalEngine is not available in production builds. The local engine only exists under the `development` export condition.")}var Kt,st=Xe(()=>{"use strict";le();Kt=!1});var Pn={};Ze(Pn,{applyPersonaAttributes:()=>ke,applyRegistrySlots:()=>Oe,applySlotArms:()=>Ee,applySlotAttributes:()=>Ie,parseEditorToken:()=>Ct,parsePreview:()=>_t,parseSnippetConfig:()=>Ae,reapply:()=>Je,run:()=>Rt,version:()=>xt});le();function ge(e){return Object.keys(e).sort().map(t=>`${t}=${e[t]}`).join("|")}function tt(e){if(e.length===0)return null;let t={};for(let n of e.split("|")){let o=n.indexOf("=");if(o<=0||o!==n.lastIndexOf("=")||o===n.length-1)return null;let r=n.slice(0,o);if(r in t)return null;t[r]=n.slice(o+1)}return t}function Re(e){var t,n,o;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 ge(e.baseline);if(typeof e.baseline=="string")return e.baseline;let r={};for(let[s,a]of Object.entries((n=e.dims)!=null?n:{}))r[s]=(o=a[0])!=null?o:"";return ge(r)}function nt(e,t){var n,o;return e.dims!=null?(o=(n=tt(t))!=null?n:tt(Re(e)))!=null?o:{}:t}function F(e){return e>=.3?e<.7?"medium":"high":"low"}var rt=["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 De(e){return ot(e)!==null}function ot(e){var t;if(!e)return null;let n=e.toLowerCase();return(t=rt.find(o=>n.includes(o.toLowerCase())))!=null?t:null}function Te(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 Le(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(r){}let o=n.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(o)?"search":/(^|\.)(twitter\.com|x\.com|facebook\.com|linkedin\.com|reddit\.com|t\.co)$/.test(o)?"social":"referral"}catch(n){return"direct"}}function Pe(e){if(!e)return null;try{return new URL(e).hostname}catch(t){return null}}function Ne(e){let t=e.getHours();return t<6?"night":t<12?"morning":t<18?"afternoon":"evening"}function me(e){return E(E(E({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 he(e){let t=me(e);return nt(t,Re(t))}function je(e){return typeof e=="string"?e:ge(e)}le();var qt="_snt_uid",Q="_snt_uid";function Wt(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(t){}let e=()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0");return`${e()}-${e()}-${e()}-${e()}`}function Jt(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function Vt(e,t,n){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${n}; SameSite=strict; path=/`}catch(o){}}function zt(e){try{return localStorage.getItem(e)}catch(t){return null}}function Ht(e,t){try{return localStorage.setItem(e,t),!0}catch(n){return!1}}function Ft(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function Yt(e,t){try{return sessionStorage.setItem(e,t),!0}catch(n){return!1}}function Xt(e){try{sessionStorage.removeItem(e)}catch(t){}}function Zt(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,/(?:^|; )_snt_uid_probe=1/.test(document.cookie)||document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function Qt(e){try{localStorage.removeItem(e)}catch(t){}}function en(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var tn={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function ct(e){var t,n,o,r,s,a;if(typeof window=="undefined")return tn;let c=(t=e==null?void 0:e.cookieName)!=null?t:qt,i=((n=e==null?void 0:e.cookieTTLDays)!=null?n:365)*24*60*60,l=(a=(s=(r=(o=Jt(c))!=null?o:zt(Q))!=null?r:Ft(Q))!=null?s:e==null?void 0:e.ssrSessionId)!=null?a:Wt();Vt(c,l,i);let d=Ht(Q,l),p=Zt(c),S=d?!1:Yt(Q,l),f=!d&&!p&&!S;return{getSessionId:()=>l,isEphemeral:()=>f,destroy:()=>{l=null,en(c),Qt(Q),Xt(Q)}}}function ut(e){return`_snt_retry_${e.slice(0,12)}`}var nn={push:()=>{},flush:()=>{},destroy:()=>{}};function rn(e,t){try{let n=localStorage.getItem(t);if(!n)return[];let o=JSON.parse(n);return Array.isArray(o)?(localStorage.removeItem(t),o.slice(-e)):[]}catch(n){return[]}}function $e(e,t,n){try{let o=[...(()=>{try{let r=localStorage.getItem(n);if(!r)return[];let s=JSON.parse(r);return Array.isArray(s)?s:[]}catch(r){return[]}})(),...e].slice(-t);localStorage.setItem(n,JSON.stringify(o))}catch(o){}}function on(e){var t,n,o;if(typeof window=="undefined")return nn;let r=(t=e.flushIntervalMs)!=null?t:5e3,s=(n=e.maxBatchSize)!=null?n:20,a=(o=e.maxRetrySize)!=null?o:100,c=e.ingestUrl,i=e.apiKey,l=ut(i),d=[],p=new Set,S=[],f=m=>{for(let w of m)y.delete(w),!p.has(w)&&(p.add(w),S.push(w));for(;S.length>500;){let w=S.shift();w&&p.delete(w)}},y=new Set,b=m=>{p.has(m.id)||y.has(m.id)||(y.add(m.id),d.push(m))},j=rn(a,l);for(let m of j)b(m);let R=0,h=0,v=m=>{if(m.length===0)return;let w=JSON.stringify(m),O=m.map(u=>u.id),M;try{M=fetch(c,{method:"POST",keepalive:!0,body:w,headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`}})}catch(u){$e(m,a,l);for(let g of O)y.delete(g);h++,R=Date.now()+Math.min(6e4,1e3*2**Math.min(h,6));return}let q=u=>{if(u.ok||u.status>=400&&u.status<500&&u.status!==429){f(O),h=0,R=0;return}$e(m,a,l);for(let g of O)y.delete(g);h++,R=Date.now()+Math.min(6e4,1e3*2**Math.min(h,6))};M instanceof Promise?M.then(q).catch(()=>{$e(m,a,l);for(let u of O)y.delete(u);h++,R=Date.now()+Math.min(6e4,1e3*2**Math.min(h,6))}):q(M)},A=typeof TextEncoder!="undefined"?new TextEncoder:null,D=m=>A?A.encode(m).length:m.length,fe=m=>{let w=[],O=2;for(let M of m){let q=D(JSON.stringify(M))+1;if(w.length>0&&O+q>57344||w.length>=s)break;w.push(M),O+=q}return w},x=()=>{try{if(Date.now()<R)return;for(;d.length>0;){let m=d.filter(O=>!p.has(O.id));if(d.length=0,m.length===0)break;let w=fe(m);if(w.length===0)break;w.length<m.length&&d.push(...m.slice(w.length)),v(w)}}catch(m){}},Z=!0,T=null;T=setInterval(()=>{Z&&x()},r);let C=()=>{document.visibilityState==="hidden"&&x()},re=()=>{x()};return document.addEventListener("visibilitychange",C),window.addEventListener("beforeunload",re),{push(m){b(m),d.length>=s&&x()},flush:x,destroy(){Z=!1,T!==null&&(clearInterval(T),T=null),document.removeEventListener("visibilitychange",C),window.removeEventListener("beforeunload",re),x()}}}var Ke="_snt_asgn_";function ye(e,t){return`${e}:${t}`}function sn(e,t){return`${Ke}${encodeURIComponent(e)}:${encodeURIComponent(t)}`}function at(e){let t=e.slice(Ke.length),n=t.indexOf(":");if(n<0)return null;try{return{componentId:decodeURIComponent(t.slice(0,n)),segment:decodeURIComponent(t.slice(n+1))}}catch(o){return null}}function Me(){try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n!=null&&n.startsWith(Ke)&&e.push(n)}return e}catch(e){return[]}}function an(e=18e5){let t=new Map,n=o=>o.assignedAt+e<Date.now();return typeof window!="undefined"&&(()=>{for(let o of Me())try{let r=localStorage.getItem(o);if(!r)continue;let s=JSON.parse(r);if(n(s)){localStorage.removeItem(o);continue}let a=at(o);if(!a)continue;t.set(ye(a.componentId,a.segment),s)}catch(r){}})(),{get(o,r){let s=t.get(ye(o,r));return s?n(s)?(t.delete(ye(o,r)),null):s:null},set(o,r,s){let a=ye(o,r);t.set(a,s);try{localStorage.setItem(sn(o,r),JSON.stringify(s))}catch(c){}},invalidate(o){let r=`${o}:`;for(let s of[...t.keys()])s.startsWith(r)&&t.delete(s);for(let s of Me()){let a=at(s);if((a==null?void 0:a.componentId)===o)try{localStorage.removeItem(s)}catch(c){}}},clear(){t.clear();for(let o of Me())try{localStorage.removeItem(o)}catch(r){}}}}var be="_snt_snap:",ln=["low","medium","high"];function Se(e){try{let t=localStorage.getItem(be+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"||!ln.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 ce(e,t){try{localStorage.setItem(be+e,JSON.stringify(t))}catch(n){}}var Be="[sentient] No API key configured \u2014 nothing is being learned. Set NEXT_PUBLIC_SENTIENT_API_KEY or pass localMode: true for local development.",dt="[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.",lt=!1,ve=!1;function cn(){var e;try{return(e=new URLSearchParams(window.location.search).get("sentient_persona"))!=null?e:void 0}catch(t){return}}function un(e){var t;let n=ct({ssrSessionId:e.ssrSessionId}),o=(t=n.getSessionId())!=null?t:"local",r=cn(),s=Promise.resolve().then(()=>(st(),it)).then(i=>{let l=i;return l.LOCAL_ENGINE_AVAILABLE?(lt||(lt=!0,console.info(dt)),l):(ve||(ve=!0,console.error(Be)),null)}).catch(()=>(ve||(ve=!0,console.error(Be)),null)),a=null;function c(i){let l=document.documentElement;l.dataset.sentientPersona===void 0&&(l.dataset.sentientPersona=i.persona,l.dataset.sentientConfidence=F(i.confidence))}return{isLocal:!0,async decide(i){var l,d,p;let S=await s;if(!S)return null;let f=S.createLocalEngine({sessionId:o,forcedPersona:r}).decide(i);return a=ae(E({},f),{layoutOrder:(d=(l=f.layoutOrder)!=null?l:a==null?void 0:a.layoutOrder)!=null?d:null,slots:E(E({},(p=a==null?void 0:a.slots)!=null?p:{}),f.slots)}),ce(e.apiKey||"local",{v:1,persona:a.persona,band:F(a.confidence),slots:a.slots,layoutOrder:a.layoutOrder,savedAt:Date.now()}),c(f),f},getSlotResult(i){var l,d,p;return(p=(d=a==null?void 0:a.slots[i])!=null?d:(l=e.initialSlots)==null?void 0:l[i])!=null?p:null},getPersona(){return a?{persona:a.persona,confidence:a.confidence,band:F(a.confidence)}:null},async assign(i,l){var d;let p=await s;return!p||!l||l.length===0?l!=null&&l[0]?{variantId:l[0],assignmentTtlMs:0}:null:{variantId:(d=p.createLocalEngine({sessionId:o,forcedPersona:r}).decide({components:[{id:i,variantIds:l}]}).assignments[i])!=null?d:l[0],assignmentTtlMs:0}},track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,fetchWeights:()=>Promise.resolve([]),getGraph:()=>({pageNodes:[],capturedAt:0}),dispose:()=>{},destroy:()=>n.destroy()}}var ft="https://api.sentient-ui.com/v1/events",Y=new Map,pt=null;function Ue(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}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)})}var ee={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 dn(){try{let e={},t=new URLSearchParams(window.location.search);for(let[n,o]of t)n.startsWith("utm_")&&(e[n]=o);return e}catch(e){return{}}}function gt(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 Ge(e){if(typeof window=="undefined")return;let t=e!=null?e:pt;if(!t){console.warn("[sentient] grantConsent() called before init()");return}let n=Y.get(t);if(!n){console.warn("[sentient] grantConsent() called before init()");return}let{config:o,upgrade:r}=n;if(!r||o.respectDoNotTrack!==!1&&ue())return;let s=we(ae(E({},o),{consent:!0}));r(s),Y.set(t,{config:ae(E({},o),{consent:!0}),upgrade:null})}function fn(e){var t;let n=gt((t=e.ingestUrl)!=null?t:ft),o={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},r={track:()=>{},goal:()=>{},componentGoal:()=>{},identify:()=>{},getAssignment:()=>null,fetchWeights:()=>Promise.resolve([]),async assign(c,i,l){try{let d=new URLSearchParams({componentId:c});for(let S of i!=null?i:[])d.append("variantIds[]",S);let p=await fetch(`${n}/winner?${d.toString()}`,{headers:o});return p.ok?{variantId:(await p.json()).variantId,assignmentTtlMs:0}:i!=null&&i[0]?{variantId:i[0],assignmentTtlMs:0}:null}catch(d){return i!=null&&i[0]?{variantId:i[0],assignmentTtlMs:0}:null}},decide:()=>Promise.resolve(null),getSlotResult:()=>null,getPersona:()=>null,getGraph:()=>({pageNodes:[],capturedAt:0}),dispose:()=>{},destroy:()=>{}},s={track:c=>r.track(c),goal:(c,i,l,d)=>r.goal(c,i,l,d),componentGoal:(c,i,l)=>r.componentGoal(c,i,l),identify:c=>r.identify(c),getAssignment:(c,i)=>r.getAssignment(c,i),assign:(c,i,l,d)=>r.assign(c,i,l,d),decide:c=>r.decide(c),getSlotResult:c=>r.getSlotResult(c),getPersona:()=>r.getPersona(),fetchWeights:()=>r.fetchWeights(),getGraph:()=>r.getGraph(),dispose:()=>r.dispose(),destroy:()=>r.destroy()};function a(c){r=c}return{proxy:s,setInner:a}}function we(e){var t,n,o,r,s,a,c,i,l;if(typeof window=="undefined")return ee;pt=e.apiKey;let d=e.respectDoNotTrack!==!1&&ue(),p=e.consent===!1||d,S=typeof e.apiKey=="string"&&e.apiKey.startsWith("pk_");if(e.localMode===!0||!S&&e.localMode!==!1)return p?(Y.set(e.apiKey||"local",{config:e,upgrade:null}),ee):(Y.set(e.apiKey||"local",{config:e,upgrade:null}),un(e));if(p){if(e.preConsentBehavior==="statistical_winner"){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."),ee;let{proxy:u,setInner:g}=fn(e);return Y.set(e.apiKey,{config:e,upgrade:d?null:g}),u}return Y.set(e.apiKey,{config:e,upgrade:null}),ee}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."),ee;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),ee;let f=(t=e.ingestUrl)!=null?t:ft,y=Date.now(),b=ct({ssrSessionId:e.ssrSessionId}),j=an(),R=on({ingestUrl:f,apiKey:e.apiKey}),h=gt(f),v={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},A=Te((n=navigator.userAgent)!=null?n:""),D=typeof window!="undefined"?window.location.origin:void 0,fe=Le((o=document.referrer)!=null?o:"",D),x=(r=e.sessionSegment)!=null?r:`${A}:${fe}`,Z=new Map,T=new Map,C=null,re=u=>{for(let g of u)T.has(g.id)||T.set(g.id,he(g))};if(e.initialSlots)for(let[u,g]of Object.entries(e.initialSlots))T.set(u,g);let m=Se(e.apiKey);if(m)for(let[u,g]of Object.entries(m.slots))T.has(u)||T.set(u,g);let w={low:.15,medium:.5,high:.85};if(e.initialPersona)C=E({},e.initialPersona);else{let u=document.documentElement.dataset;u.sentientPersona?C={persona:u.sentientPersona,confidence:(a=w[(s=u.sentientConfidence)!=null?s:"low"])!=null?a:.15}:m&&(C={persona:m.persona,confidence:(c=w[m.band])!=null?c:.15})}if(e.initialAssignments)for(let[u,g]of Object.entries(e.initialAssignments))j.set(u,x,{variantId:g,assignedAt:Date.now(),segment:x,confidence:1});let O=Promise.resolve(),M=b.getSessionId();if(M){let u=Pe((i=document.referrer)!=null?i:""),g=E(E({sessionId:M,deviceClass:A,trafficSource:fe,referrerDomain:u,utmParams:dn(),timeOfDay:Ne(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:b.isEphemeral(),automation:typeof navigator!="undefined"&&navigator.webdriver===!0||De((l=navigator.userAgent)!=null?l:"")},e.userId?{userId:e.userId}:{}),e.country?{country:e.country}:{});try{O=fetch(`${h}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(g),headers:v}).then(I=>{I.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(I){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:R});let q={goal(u,g={},I=1,U=0){let $=b.getSessionId();if(!$)return;let P=Ue();O.then(()=>{fetch(`${h}/goals`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:$,name:u,metadata:g,weight:I,stepIndex:U,goalId:P}),headers:v}).catch(()=>{})})},componentGoal(u,g,I){var U,$,P;let W=b.getSessionId();if(!W)return;let B=j.get(u,x),K=B?null:(U=T.get(u))!=null?U:null;if(!B&&K===null){e.debug&&console.warn(`[sentient] componentGoal("${u}"): no assignment or slot decision yet \u2014 render its <Adaptive>/adaptive hook or call assign()/decide() before recording a goal.`);return}let z=B?B.variantId:je(K),G={id:Ue(),sessionId:W,projectId:e.apiKey,componentId:u,variantId:z,eventType:"goal_achieved",goalType:g,payload:E({reward:($=I==null?void 0:I.reward)!=null?$:1},(P=I==null?void 0:I.metadata)!=null?P:{}),timestamp:Date.now(),timeInSession:Date.now()-y};e.debug&&console.log("[sentient] componentGoal",G),O.then(()=>R.push(G))},identify(u){let g=b.getSessionId();g&&O.then(()=>{fetch(`${h}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:g,userId:u,ephemeral:b.isEphemeral()}),headers:v}).catch(()=>{})})},track(u){let g=b.getSessionId();if(!g)return;let I=ae(E({},u),{id:Ue(),sessionId:g,timestamp:Date.now(),timeInSession:Date.now()-y});e.debug&&console.log("[sentient] track",I),O.then(()=>R.push(I))},getAssignment(u,g){return j.get(u,g)},async assign(u,g,I,U){let $=b.getSessionId();if(!$)return null;let P=j.get(u,x);if(P&&(g!=null&&g.length||P.content!==void 0))return{variantId:P.variantId,assignmentTtlMs:0,content:P.content};let W=Z.get(u);if(W)return W;let B=(async()=>{await O;try{let K={sessionId:$,componentId:u,variantIds:g};U!==void 0?K.agentDataByVariant=U:I!==void 0&&(K.agentData=I);let z=await fetch(`${h}/assign`,{method:"POST",body:JSON.stringify(K),headers:v});if(!z.ok)return null;let G=await z.json();return j.set(u,x,{variantId:G.variantId,assignedAt:Date.now(),segment:x,confidence:1,content:G.content}),G}catch(K){return null}finally{Z.delete(u)}})();return Z.set(u,B),B},async decide(u){var g,I,U,$,P,W,B,K,z,G;let Ve=b.getSessionId();if(!Ve)return null;let oe=(g=u.slots)!=null?g:[];await O;try{let H={sessionId:Ve};u.sections&&u.sections.length>0&&(H.sections=u.sections.map(N=>({id:N}))),H.components=(I=u.components)!=null?I:[],oe.length>0&&(H.slots=oe.map(me)),u.slotsFrom==="registry"&&(H.slotsFrom="registry"),u.v&&(H.v=u.v);let ze=await fetch(`${h}/decide`,{method:"POST",body:JSON.stringify(H),headers:v});if(!ze.ok)return re(oe),null;let _=await ze.json(),ie={};for(let N of oe)ie[N.id]=($=(U=_.slots)==null?void 0:U[N.id])!=null?$:he(N);if(_.slots)for(let[N,se]of Object.entries(_.slots))N in ie||(ie[N]=se);for(let[N,se]of Object.entries(ie))T.set(N,se);C={persona:(P=_.persona)!=null?P:"unknown",confidence:(W=_.confidence)!=null?W:0};for(let[N,se]of Object.entries((B=_.assignments)!=null?B:{}))j.set(N,x,{variantId:se,assignedAt:Date.now(),segment:x,confidence:1});return ce(e.apiKey,E({v:1,persona:C.persona,band:F(C.confidence),slots:Object.fromEntries(T),layoutOrder:(K=_.layoutOrder)!=null?K:null,savedAt:Date.now()},_.slotConfig?{slotConfig:_.slotConfig}:{})),E(E({layoutOrder:(z=_.layoutOrder)!=null?z:null,assignments:(G=_.assignments)!=null?G:{},slots:ie,persona:C.persona,confidence:C.confidence},_.slotConfig?{slotConfig:_.slotConfig}:{}),_.goals?{goals:_.goals}:{})}catch(H){return re(oe),null}},getSlotResult(u){var g;return(g=T.get(u))!=null?g:null},getPersona(){return C?{persona:C.persona,confidence:C.confidence,band:F(C.confidence)}:null},async fetchWeights(){var u;try{let g=await fetch(`${h}/weights`,{headers:v});return g.ok?(u=(await g.json()).components)!=null?u:[]:[]}catch(g){return[]}},getGraph(){return{pageNodes:[],capturedAt:0}},dispose(){R.destroy(),e.debug&&console.log("[sentient] disposed")},destroy(){R.destroy(),b.destroy();try{localStorage.removeItem(be+e.apiKey),localStorage.removeItem(ut(e.apiKey))}catch(u){}e.debug&&console.log("[sentient] destroyed")}};if(Y.set(e.apiKey,{config:e,upgrade:null}),e.debug){let u=window;u.__sentient&&(u.__sentient.client=q)}return q}le();var pn=[["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]];function gn(e){var n;let t=e.querySelector("h1, h2, h3");return((n=t==null?void 0:t.textContent)!=null?n:"").slice(0,160)}function mn(e){var o;let t=e.querySelectorAll('a, button, [role="button"]').length,n=((o=e.textContent)!=null?o:"").trim().length;return t>=1&&n>0&&n<200}function mt(e){let t=e.tagName.toLowerCase();if(t==="nav"||t==="footer")return"navigation";let n=`${e.id} ${e.className} ${gn(e)}`.toLowerCase();for(let[o,r]of pn)if(r.test(n))return o;return mn(e)?"cta":t==="header"||/\b(hero|headline|banner)\b/i.test(n)?"hero":"generic"}var ht="section, header, footer, nav, main > div, [data-sentient-section]";function hn(e){var t;return((t=e.parentElement)==null?void 0:t.closest(ht))!=null}function yn(e,t,n,o){try{fetch(`${t}/v1/section-map`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({pageUrl:n,sections:o})}).catch(()=>{})}catch(r){}}function yt(e,t,n,o=document){var S,f,y,b,j,R;if(typeof IntersectionObserver=="undefined"||typeof o=="undefined")return;let r=Array.from(o.querySelectorAll(ht)).filter(h=>!hn(h));if(r.length===0)return;let s=new Map,a=new Map;for(let h of r){let v=mt(h),A=`nc-${v}`;s.set(h,A),a.set(A,v)}let c=(b=(y=(f=(S=o.defaultView)!=null?S:typeof window!="undefined"?window:void 0)==null?void 0:f.location)==null?void 0:y.pathname)!=null?b:"/";yn(t,n,c,[...a.entries()].map(([h,v])=>({componentId:h,semanticType:v})));let i=new Map,l=h=>{let v=i.get(h);return v||(v={ms:0,scroll:0,enterAt:null,intersecting:!1},i.set(h,v)),v},d=new IntersectionObserver(h=>{for(let v of h){let A=s.get(v.target);if(!A)continue;let D=l(A);v.isIntersecting?(D.intersecting=!0,D.enterAt=Date.now(),v.intersectionRatio>D.scroll&&(D.scroll=v.intersectionRatio)):(D.intersecting=!1,D.enterAt!=null&&(D.ms+=Date.now()-D.enterAt,D.enterAt=null))}},{threshold:[0,.25,.5,.75,1]});for(let h of s.keys())d.observe(h);let p=()=>{let h=Date.now();for(let[v,A]of i)if(A.enterAt!=null&&(A.ms+=h-A.enterAt,A.enterAt=null),!(A.ms<=0)){try{e.track({projectId:t,componentId:v,eventType:"dwell",payload:{dwell_time:Math.round(A.ms),scroll_depth:Number(A.scroll.toFixed(2))}})}catch(D){}A.ms=0}};o.addEventListener("visibilitychange",()=>{if(o.hidden)p();else{let h=Date.now();for(let v of i.values())v.intersecting&&(v.enterAt=h)}}),(R=(j=o.defaultView)!=null?j:window)==null||R.addEventListener("pagehide",()=>{p();try{d.disconnect()}catch(h){}})}var vn=["landing","ecommerce","saas","marketplace"];function bn(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[o,r]of t){if(!Array.isArray(r)||r.length<2||r.length>6||!r.every(s=>typeof s=="string"))return null;n[o]=r}return n}function Sn(e){return!Array.isArray(e)||e.length<2||e.length>12||!e.every(t=>typeof t=="string")?null:e}function Ae(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=vn.includes(t.context)?t.context:"landing",o={};if(typeof t.slots=="object"&&t.slots!==null&&!Array.isArray(t.slots))for(let[s,a]of Object.entries(t.slots)){if(typeof a!="object"||a===null)continue;let c=a,i=bn(c.dims);if(!i||c.target!==void 0&&typeof c.target!="string")continue;let l=c.arms!==void 0?Sn(c.arms):null,d={dims:i};typeof c.target=="string"&&(d.target=c.target),l&&(d.arms=l),o[s]=d}let r={apiKey:t.apiKey,context:n,personaAttributes:t.personaAttributes===!0,slots:o};return typeof t.consent=="boolean"&&(r.consent=t.consent),(t.preConsentBehavior==="statistical_winner"||t.preConsentBehavior==="control")&&(r.preConsentBehavior=t.preConsentBehavior),t.debug===!0&&(r.debug=!0),typeof t.registry=="boolean"&&(r.registry=t.registry),typeof t.editorSrc=="string"&&(r.editorSrc=t.editorSrc),typeof t.apiBase=="string"&&(r.apiBase=t.apiBase),t.sectionCapture===!0&&(r.sectionCapture=!0),r}function vt(e){var n,o,r;let t=(o=(n=e.defaultView)!=null?n:typeof window!="undefined"?window:void 0)==null?void 0:o.location;return(r=t==null?void 0:t.pathname)!=null?r:""}function wn(e,t){var n;if(t.tag&&e.tagName.toLowerCase()!==t.tag.toLowerCase())return!1;if(t.text){let o=((n=e.textContent)!=null?n:"").trim().toLowerCase(),r=t.text.trim().toLowerCase();if(!(o===r||o.startsWith(r)||r.startsWith(o)))return!1}return!0}function bt(e,t){return!!(e!=null&&e.urlMatch)&&!vt(t).includes(e.urlMatch)}function te(e,t){var r;if(e.urlMatch&&!vt(t).includes(e.urlMatch))return null;let n=[];if(e.id){let s=t.getElementById(e.id);n=s?[s]:[]}if(n.length===0&&((r=e.dataAttr)!=null&&r.name))try{let s=e.dataAttr.value.replace(/["\\]/g,"\\$&");n=Array.from(t.querySelectorAll(`[${e.dataAttr.name}="${s}"]`))}catch(s){n=[]}if(n.length===0&&e.selector)try{n=Array.from(t.querySelectorAll(e.selector))}catch(s){n=[]}if(n.length!==1)return null;let o=n[0];return e.fingerprint&&!wn(o,e.fingerprint)?null:o}var St=/^https:\/\//i,An={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"};function kn(e){return!/[;{}<>]/.test(e)}var wt=new Map,J=null;function In(e){return e.replace(/["\\]/g,"\\$&")}function En(e){var t;(!J||!J.isConnected)&&(J=e.querySelector("style[data-sentient-ops]"),J||(J=e.createElement("style"),J.setAttribute("data-sentient-ops",""),((t=e.head)!=null?t:e.documentElement).appendChild(J))),J.textContent=[...wt.entries()].map(([n,o])=>`[data-snt-e="${In(n)}"]{${o}}`).join(`
2
+ `)}function At(e,t,n,o){var c;let r=!1,s=(c=t.moveBefore)!=null?c:t.moveAfter;if(s){let i=te(s,o);!i||i===e||i.parentElement!==e.parentElement||!e.parentElement?r=!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"&&St.test(t.href)&&e.setAttribute("href",t.href),typeof t.imageSrc=="string"&&St.test(t.imageSrc)&&e.setAttribute("src",t.imageSrc),typeof t.imageAlt=="string"&&e.setAttribute("alt",t.imageAlt);let a=[];if(t.hidden&&a.push("display:none !important"),t.style)for(let[i,l]of Object.entries(t.style)){let d=An[i];d&&typeof l=="string"&&kn(l)&&a.push(`${d}:${l.trim()} !important`)}return a.length>0&&(e.setAttribute("data-snt-e",n),wt.set(n,a.join(";")),En(o)),{anchorMiss:r}}function ke(e,t,n){n.documentElement.setAttribute("data-sentient-persona",e),n.documentElement.setAttribute("data-sentient-confidence",t)}function Ie(e,t,n){var o;for(let[r,s]of Object.entries(t)){let a=e[r];if(!a||typeof a=="string")continue;let c=s.target?Array.from(n.querySelectorAll(s.target)):[n.documentElement];for(let i of c)for(let[l,d]of Object.entries(a))(o=s.dims[l])!=null&&o.includes(d)&&i.setAttribute(`data-${l}`,d)}}function Ee(e,t,n){for(let[o,r]of Object.entries(t)){let s=e[o];if(typeof s!="string"||!r.arms||!r.arms.includes(s))continue;let a=r.target?Array.from(n.querySelectorAll(r.target)):[n.documentElement];for(let c of a)c.setAttribute("data-sentient-arm",s)}}function Oe(e,t,n,o){var a;let r=(a=o==null?void 0:o.contentAndOps)!=null?a:!0,s=[];for(let[c,i]of Object.entries(t)){if(bt(i.locator,n))continue;let l;if(i.locator){let p=te(i.locator,n);l=p?[p]:[]}else i.target?l=Array.from(n.querySelectorAll(i.target)):l=[n.documentElement];(i.locator||i.target)&&l.length===0&&s.push(c);let d=e[c];for(let p of l){if(d!==void 0)if(typeof d=="string")p.setAttribute("data-sentient-arm",d);else for(let[S,f]of Object.entries(d))p.setAttribute(`data-${S}`,f);r&&(typeof i.content=="string"&&(p.textContent=i.content),i.ops&&At(p,i.ops,c,n).anchorMiss&&!s.includes(c)&&s.push(c))}}return s}function On(e){var n,o,r;let t=(o=(n=e.defaultView)!=null?n:typeof window!="undefined"?window:void 0)==null?void 0:o.location;return(r=t==null?void 0:t.pathname)!=null?r:""}function kt(e,t,n){var S;let o=new Set,r=f=>{if(!o.has(f.goalId)){o.add(f.goalId);try{f.slotId?t.componentGoal(f.slotId,f.goalId):t.goal(f.goalId)}catch(y){}}},s=e.filter(f=>f.event==="click"),a=e.filter(f=>f.event==="form_submit"),c=e.filter(f=>f.event==="url_reached"),i=(f,y)=>{if(!f.locator)return!1;let b=te(f.locator,n);return!!b&&(b===y||b.contains(y))},l=f=>{let y=f.target;if(!(!y||typeof y.closest!="function"))for(let b of s)i(b,y)&&r(b)},d=f=>{let y=f.target;if(y)for(let b of a)i(b,y)&&r(b)},p=()=>{if(c.length===0)return;let f=On(n);for(let y of c)y.urlPattern&&f.includes(y.urlPattern)&&r(y)};return n.addEventListener("click",l,!0),n.addEventListener("submit",d,!0),(S=n.defaultView)==null||S.addEventListener("popstate",p),p(),{checkUrl:p,teardown:()=>{var f;n.removeEventListener("click",l,!0),n.removeEventListener("submit",d,!0),(f=n.defaultView)==null||f.removeEventListener("popstate",p)}}}var xt="0.4.0",xn=5e3,Cn=50,de=null,L=null,V={},ne=null,X=null,k=null,It=!1,qe=null;function _n(e,t){return Promise.race([e,new Promise(n=>setTimeout(()=>n(null),t))])}function xe(e,...t){e!=null&&e.debug&&console.log("[sentient-snippet]",...t)}function Ce(e,t){return de?(de.personaAttributes&&k&&ke(k.persona,k.band,e),Ie(V,de.slots,e),Ee(V,de.slots,e),ne?Oe(V,ne,e,t):[]):[]}function Rn(e,t){var n;if(t.length!==0)try{let o=(n=e.apiBase)!=null?n:"https://api.sentient-ui.com";fetch(`${o}/v1/locator-miss`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({slots:t})}).catch(()=>{})}catch(o){}}function Je(){try{Ce(document)}catch(e){}}function Et(){qe===null&&(qe=setTimeout(()=>{qe=null,Je();try{X==null||X.checkUrl()}catch(e){}},Cn))}function Ot(){if(!(It||typeof window=="undefined"||typeof history=="undefined")){It=!0;try{let e=t=>{let n=history[t];history[t]=function(o,r,s){let a=n.call(this,o,r,s!=null?s:null);return Et(),a}};e("pushState"),e("replaceState"),window.addEventListener("popstate",Et)}catch(e){}}}function We(e){let t={};for(let[n,o]of Object.entries(e.slots))t[n]=o.target?document.querySelectorAll(o.target).length:1;return t}function Ct(e){return new URLSearchParams(e).get("sentient_editor")}function Dn(){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 Tn(e,t){var n,o,r,s;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",((o=document.head)!=null?o:document.documentElement).appendChild(i)}catch(i){}let a=(r=e.editorSrc)!=null?r:Dn();if(!a)return;let c=document.createElement("script");c.src=a,c.async=!0,((s=document.head)!=null?s:document.documentElement).appendChild(c)}catch(a){}}function _t(e){let t=new URLSearchParams(e).get("sentient_preview");if(!t)return null;let n={};for(let o of t.split("|")){let[r,s]=o.split(":");if(!(!r||!s))if(s.includes("=")){let a={};for(let c of s.split(",")){let[i,l]=c.split("=");i&&l&&(a[i]=l)}Object.keys(a).length&&(n[r]=a)}else n[r]=s}return Object.keys(n).length?n:null}function Ln(e){let t={goal(n,o){try{L==null||L.goal(n,o)}catch(r){}},componentGoal(n,o){try{L==null||L.componentGoal(n,o)}catch(r){}},grantConsent(){try{Ge(e.apiKey)}catch(n){}},revokeConsent(){try{L==null||L.destroy()}catch(n){}},reapply:Je,getState(){var n,o;return{apiKey:e.apiKey,persona:(n=k==null?void 0:k.persona)!=null?n:null,band:(o=k==null?void 0:k.band)!=null?o:null,slots:V,matchCounts:We(e),consent:e.consent!==!1}}};window.SentientSnippet=t}async function Rt(){var e,t,n,o;try{let r=Ae(window.sentient);if(!r)return;de=r;let s=typeof window!="undefined"?Ct(window.location.search):null;if(s){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){}Tn(r,s),xe(r,"editor mode");return}let a=typeof window!="undefined"?_t(window.location.search):null;if(a){V=a,k=null,Ce(document),Ot(),xe(r,"preview mode",a);return}let c=(e=r.registry)!=null?e:Object.keys(r.slots).length===0,i=Se(r.apiKey);i&&(k={persona:i.persona,band:i.band},V=i.slots,i.slotConfig&&(ne=i.slotConfig),Ce(document,{contentAndOps:!1}));let l=we({apiKey:r.apiKey,context:r.context,consent:r.consent,preConsentBehavior:r.preConsentBehavior,debug:r.debug});L=l,Ln(r),Ot();let d=Object.entries(r.slots).map(([f,y])=>({id:f,dims:y.dims})),p=await _n(l.decide(_e({slots:d,v:xt},c?{slotsFrom:"registry"}:{})),xn);if(!p){xe(r,"decide timeout/null \u2014 snapshot state stands",We(r));return}let S=l.getPersona();if(S?k={persona:S.persona,band:S.band}:p.persona&&(k={persona:p.persona,band:"low"}),V=p.slots,p.slotConfig&&(ne=p.slotConfig),Rn(r,Ce(document)),p.goals&&p.goals.length>0&&r.consent!==!1&&L)try{X==null||X.teardown(),X=kt(p.goals,L,document)}catch(f){}if(r.sectionCapture&&r.consent!==!1&&L&&!ue())try{yt(L,r.apiKey,(t=r.apiBase)!=null?t:"https://api.sentient-ui.com",document)}catch(f){}xe(r,"applied",{persona:k,slots:V,matches:We(r)}),ce(r.apiKey,_e({v:1,persona:(n=k==null?void 0:k.persona)!=null?n:p.persona,band:(o=k==null?void 0:k.band)!=null?o:"low",slots:p.slots,layoutOrder:p.layoutOrder,savedAt:Date.now()},ne?{slotConfig:ne}:{}))}catch(r){}}typeof window!="undefined"&&window.sentient&&Rt();return Nt(Pn);})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentientui/snippet",
3
- "version": "0.3.0",
3
+ "version": "0.4.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
  "type": "module",
@@ -16,7 +16,7 @@
16
16
  "tsx": "^4.19.2",
17
17
  "typescript": "^5.7.2",
18
18
  "vitest": "^2.1.8",
19
- "@sentientui/core": "0.13.0"
19
+ "@sentientui/core": "0.14.0"
20
20
  },
21
21
  "scripts": {
22
22
  "build": "tsup",