@sentientui/core 0.25.0 → 0.26.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.
@@ -461,6 +461,22 @@ type SentientConfig = {
461
461
  * `false` restores the silent keyless no-op.
462
462
  */
463
463
  localMode?: 'auto' | boolean;
464
+ /**
465
+ * Which integration surface is driving this client, and its released build
466
+ * version — `{ name: 'react', version: '0.27.0' }`. Set by the wrapper
467
+ * package (@sentientui/react, @sentientui/snippet), never by application
468
+ * code: core is a dependency of both, so its own version says nothing about
469
+ * what the customer installed.
470
+ *
471
+ * Rides the session upsert (the one call EVERY integration makes, unlike
472
+ * decide, which only the slot paths use) so the dashboard can tell a project
473
+ * its SDK is behind. Additive and best-effort: older API deployments ignore
474
+ * the fields, and omitting it changes nothing.
475
+ */
476
+ sdk?: {
477
+ name: string;
478
+ version: string;
479
+ };
464
480
  };
465
481
  type AssignResult = {
466
482
  variantId: string;
@@ -461,6 +461,22 @@ type SentientConfig = {
461
461
  * `false` restores the silent keyless no-op.
462
462
  */
463
463
  localMode?: 'auto' | boolean;
464
+ /**
465
+ * Which integration surface is driving this client, and its released build
466
+ * version — `{ name: 'react', version: '0.27.0' }`. Set by the wrapper
467
+ * package (@sentientui/react, @sentientui/snippet), never by application
468
+ * code: core is a dependency of both, so its own version says nothing about
469
+ * what the customer installed.
470
+ *
471
+ * Rides the session upsert (the one call EVERY integration makes, unlike
472
+ * decide, which only the slot paths use) so the dashboard can tell a project
473
+ * its SDK is behind. Additive and best-effort: older API deployments ignore
474
+ * the fields, and omitting it changes nothing.
475
+ */
476
+ sdk?: {
477
+ name: string;
478
+ version: string;
479
+ };
464
480
  };
465
481
  type AssignResult = {
466
482
  variantId: string;
@@ -1,2 +1,2 @@
1
- "use strict";var R=Object.defineProperty,le=Object.defineProperties,ce=Object.getOwnPropertyDescriptor,de=Object.getOwnPropertyDescriptors,ue=Object.getOwnPropertyNames,z=Object.getOwnPropertySymbols;var J=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable;var Y=(e,t,n)=>t in e?R(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))J.call(t,n)&&Y(e,n,t[n]);if(z)for(var n of z(t))pe.call(t,n)&&Y(e,n,t[n]);return e},_=(e,t)=>le(e,de(t));var ge=(e,t)=>{for(var n in t)R(e,n,{get:t[n],enumerable:!0})},fe=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ue(t))!J.call(e,o)&&o!==n&&R(e,o,{get:()=>t[o],enumerable:!(a=ce(t,o))||a.enumerable});return e};var me=e=>fe(R({},"__esModule",{value:!0}),e);var Ie={};ge(Ie,{SEMANTIC_TYPES:()=>x,classifyFeatures:()=>T,classifySection:()=>Z,featuresFromElement:()=>C,startEngagementCapture:()=>ie});module.exports=me(Ie);var x=["pricing","hero","social_proof","cta","features","faq","comparison","trust","navigation","generic"],ye={banner:"hero",navigation:"navigation",contentinfo:"footer"};function he(e){let t=e.ariaRole?ye[e.ariaRole.toLowerCase()]:void 0;if(t)return t;if(e.tag==="nav")return"navigation";if(e.tag==="footer")return"footer";if(e.tag==="header")return e.actionCount>=5?"navigation":"hero";let n=`${e.idClass} ${e.headingText}`.toLowerCase();return/\b(navbar|nav-bar|navigation|site-nav|main-nav|topbar|footer)\b/.test(n)?/footer/.test(n)?"footer":"navigation":/\b(hero|masthead|jumbotron)\b/i.test(e.idClass)?"hero":null}function Se(e){return e.actionCount>=1&&e.textLength>0&&e.textLength<200?"cta":"generic"}var we=[["pricing",/\b(pricing|price list|per month|\/mo|subscriptions?)\b|\bplans?\b(?=[^.]{0,40}(from|start|month|year|[$€£]))/i],["faq",/\bfaq\b|frequently asked|common questions?/i],["comparison",/\b(compare|comparison|versus)\b|\bvs\./i],["social_proof",/\b(reviews?|ratings?|testimonial|brands?|galler(y|ies)|logos)\b|trusted by|loved by|case stud|what our customers say/i],["trust",/\b(insurance|warrant(y|ies)|guarantees?|certifi|accredit|security|privacy|compliance|gdpr|encrypt)\b|why choose|about us|our team/i],["cta",/\b(book|booking|reserve|appointments?|newsletter|subscribe)\b|contact us|get in touch|opening hours/i],["features",/\b(features?|benefits?|capabilit|services?|repairs?|menus?|products?)\b|how it works|our process|what we (do|offer)|what you get/i]],O=[["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|free returns?|returns? within|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]],X={navigation:"navigation",footer:"navigation",hero:"hero",cta:"cta",generic:"generic"};function be(e){var n;let t=e.querySelector("h1, h2, h3");return((n=t==null?void 0:t.textContent)!=null?n:"").slice(0,160)}function T(e){var o,i;let t=he(e);if(t)return{type:(o=X[t])!=null?o:"generic",strength:"strong"};let n=`${e.idClass} ${e.headingText}`.toLowerCase();for(let[d,s]of we)if(s.test(n))return{type:d,strength:"strong"};for(let[d,s]of O)if(s.test(e.bodyText))return{type:d,strength:"strong"};let a=Se(e);return{type:(i=X[a])!=null?i:"generic",strength:"weak"}}function C(e){var a,o;let t=((a=e.textContent)!=null?a:"").replace(/\s+/g," ").trim(),n=e.getAttribute("role");return S({tag:e.tagName.toLowerCase(),idClass:`${e.id} ${String((o=e.className)!=null?o:"")}`,headingText:be(e),bodyText:t.slice(0,2e3),actionCount:e.querySelectorAll('a, button, [role="button"]').length,textLength:t.length},n?{ariaRole:n}:{})}function Z(e){return T(C(e)).type}var re=require("@sentientui/policy");var ve=require("@sentientui/policy");function ee(e,t,n,a){let o=[];{let s=!1,l=[],f=()=>{if(s)return;let y=Date.now();for(l.push(y);l.length>0&&y-l[0]>500;)l.shift();l.length>=3&&(s=!0,e("rage_click"))};t.addEventListener("click",f),o.push(()=>t.removeEventListener("click",f))}{let i=!1,d=s=>{if(i||!(s.target instanceof Node)||!t.contains(s.target)&&t!==s.target)return;i=!0;let l=typeof window!="undefined"?window.getSelection():null,f=l?l.toString().length:0;e("text_copy",{selectionLength:f})};document.addEventListener("copy",d),o.push(()=>document.removeEventListener("copy",d))}{let i=!1,d=!1,s=null,l=()=>{s!==null&&(clearTimeout(s),s=null)},f=()=>{i||!d||(l(),s=setTimeout(()=>{!i&&d&&(i=!0,e("scroll_hesitation"))},3e3))},y=()=>{l(),f()},g=b=>{for(let k of b)d=k.intersectionRatio>.3,d?f():l()},h=new IntersectionObserver(g,{threshold:[.3]});h.observe(t),window.addEventListener("scroll",y,{passive:!0}),o.push(()=>{h.disconnect(),window.removeEventListener("scroll",y),l()})}if((a==null?void 0:a.tabLoss)!==!1){let i=!1,d=n!=null?n:Date.now(),s=()=>{if(i||document.visibilityState!=="hidden")return;let l=Date.now()-d;l<15e3&&(i=!0,e("tab_loss",{timeOnPage:l}))};document.addEventListener("visibilitychange",s),o.push(()=>document.removeEventListener("visibilitychange",s))}return()=>{for(let i of o)i()}}function te(){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(t=>t==="1"||t==="yes")}var Te=["data-sentient-id","data-testid","data-test","data-id","data-name","data-cy"];function P(e){var t;return((t=e.textContent)!=null?t:"").replace(/\s+/g," ").trim()}function Ce(e){return{tag:e.tagName.toLowerCase(),text:P(e).slice(0,40)}}function ne(e){return e.replace(/["\\\]]/g,"\\$&")}function E(e,t){try{return e.querySelectorAll(t).length===1}catch(n){return!1}}function oe(e,t){var d;let n=e.tagName.toLowerCase();if(!n)return null;let a=((d=e.getAttribute("class"))!=null?d:"").split(/\s+/).filter(s=>/^[a-zA-Z][\w-]*$/.test(s)),o=[n,...a.map(s=>`${n}.${s}`)];for(let s of o)if(E(t,s))return s;let i=e.parentElement;if(i&&i!==t){let s=oe(i,t);if(s){for(let g of o){let h=`${s} > ${g}`;if(E(t,h))return h}let l=Array.from(i.children).filter(g=>g.tagName.toLowerCase()===n),f=l.indexOf(e),y=l.some(g=>g!==e&&P(g)!==P(e));if(f>=0&&y){let g=`${s} > ${n}:nth-of-type(${f+1})`;if(E(t,g))return g}}}return null}function se(e,t){let n=Ce(e),a=e.getAttribute("id");if(a&&E(t,`#${ne(a)}`))return{v:1,id:a,fingerprint:n};for(let i of Te){let d=e.getAttribute(i);if(d&&E(t,`[${i}="${ne(d)}"]`))return{v:1,dataAttr:{name:i,value:d},fingerprint:n}}let o=oe(e,t);return o?{v:1,selector:o,fingerprint:n}:null}var Ee="section, header, footer, nav, main > div, [data-sentient-section]",ke=2e4;function Re(e){let t=Array.from(e.querySelectorAll(Ee)),n=t.filter(a=>t.filter(o=>o!==a&&a.contains(o)).length<2);return n.filter(a=>!n.some(o=>o!==a&&o.contains(a)))}function xe(e,t,n,a){try{fetch(`${t}/v1/section-map`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({pageUrl:n,sections:a})}).catch(()=>{})}catch(o){}}var I=()=>{};function ie(e,t){var N,L,$,K,G,F,W,j,B,U,H,q;let n=(N=t.doc)!=null?N:typeof document!="undefined"?document:void 0;if(!n||typeof IntersectionObserver=="undefined"||te()||!t.apiKey||!t.apiKey.startsWith("pk_"))return I;let a=((L=t.apiBase)!=null?L:"https://api.sentient-ui.com").replace(/\/+$/,"").replace(/\/v1$/,""),o=Re(n);if(o.length===0)return I;let i=new Map,d=[];for(let r of o){let c=r.getAttribute("data-sentient-type"),p=c&&x.includes(c)?c:null,u=C(r),v=(K=p!=null?p:($=t.typeOf)==null?void 0:$.call(t,r))!=null?K:T(u).type,w=se(r,n),Q=w?`nc-${v}-${(0,re.fnv1a)(JSON.stringify({id:(G=w.id)!=null?G:null,dataAttr:(F=w.dataAttr)!=null?F:null,selector:(W=w.selector)!=null?W:null})).toString(36)}`:`nc-${v}`;i.set(r,Q);let V=O.filter(([,A])=>A.test(u.bodyText)).map(([A])=>A);d.push(_(S({componentId:Q,semanticType:v,source:p?"markup":"auto"},w?{locator:w}:{}),{observation:S(S({tag:u.tag,idClass:u.idClass.slice(0,200),headingText:u.headingText,textLength:u.textLength,actionCount:u.actionCount},u.ariaRole?{ariaRole:u.ariaRole}:{}),V.length>0?{patternFlags:V}:{})}))}let s=(H=(U=(B=(j=n.defaultView)!=null?j:typeof window!="undefined"?window:void 0)==null?void 0:B.location)==null?void 0:U.pathname)!=null?H:"/";xe(t.apiKey,a,s,d);let l=new Map,f=r=>{let c=l.get(r);return c||(c={ms:0,scroll:0,enterAt:null,intersecting:!1},l.set(r,c)),c},y=new IntersectionObserver(r=>{for(let c of r){let p=i.get(c.target);if(!p)continue;let u=f(p);c.isIntersecting?(u.intersecting=!0,u.enterAt=Date.now(),c.intersectionRatio>u.scroll&&(u.scroll=c.intersectionRatio)):(u.intersecting=!1,u.enterAt!=null&&(u.ms+=Date.now()-u.enterAt,u.enterAt=null))}},{threshold:[0,.25,.5,.75,1]});for(let r of i.keys())y.observe(r);let g=()=>{let r=Date.now();for(let[c,p]of l)if(p.enterAt!=null&&(p.ms+=r-p.enterAt,p.enterAt=null),!(p.ms<=0)){try{e.track({projectId:t.apiKey,componentId:c,eventType:"dwell",payload:{dwell_time:Math.round(p.ms),scroll_depth:Number(p.scroll.toFixed(2))}})}catch(u){}p.ms=0}},h=()=>{if(n.hidden)g();else{let r=Date.now();for(let c of l.values())c.intersecting&&(c.enterAt=r)}},b=!1,k=r=>{if(g(),r!=null&&r.persisted){b=!0;return}try{y.disconnect()}catch(c){}},D=r=>{if(!(r!=null&&r.persisted)||!b)return;b=!1;let c=Date.now();for(let p of l.values())p.enterAt=p.intersecting&&!n.hidden?c:null};n.addEventListener("visibilitychange",h);let m=(q=n.defaultView)!=null?q:typeof window!="undefined"?window:void 0;m==null||m.addEventListener("pagehide",k),m==null||m.addEventListener("pageshow",D);let ae=setInterval(()=>{if(n.hidden||b)return;g();let r=Date.now();for(let c of l.values())c.intersecting&&(c.enterAt=r)},ke),M=[];return t.microSignals&&[...i.entries()].forEach(([r,c],p)=>{M.push(ee((u,v={})=>{try{e.track({projectId:t.apiKey,componentId:c,eventType:"micro_signal",payload:S({signalType:u},v)})}catch(w){}},r,void 0,{tabLoss:p===0}))}),()=>{g(),clearInterval(ae),n.removeEventListener("visibilitychange",h),m==null||m.removeEventListener("pagehide",k),m==null||m.removeEventListener("pageshow",D);for(let r of M)r();try{y.disconnect()}catch(r){}}}0&&(module.exports={SEMANTIC_TYPES,classifyFeatures,classifySection,featuresFromElement,startEngagementCapture});
1
+ "use strict";var R=Object.defineProperty,le=Object.defineProperties,ce=Object.getOwnPropertyDescriptor,de=Object.getOwnPropertyDescriptors,ue=Object.getOwnPropertyNames,z=Object.getOwnPropertySymbols;var J=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable;var Y=(e,t,n)=>t in e?R(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))J.call(t,n)&&Y(e,n,t[n]);if(z)for(var n of z(t))pe.call(t,n)&&Y(e,n,t[n]);return e},_=(e,t)=>le(e,de(t));var ge=(e,t)=>{for(var n in t)R(e,n,{get:t[n],enumerable:!0})},fe=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ue(t))!J.call(e,o)&&o!==n&&R(e,o,{get:()=>t[o],enumerable:!(a=ce(t,o))||a.enumerable});return e};var me=e=>fe(R({},"__esModule",{value:!0}),e);var Ie={};ge(Ie,{SEMANTIC_TYPES:()=>x,classifyFeatures:()=>T,classifySection:()=>Z,featuresFromElement:()=>C,startEngagementCapture:()=>ie});module.exports=me(Ie);var x=["pricing","hero","social_proof","cta","features","faq","comparison","trust","navigation","generic"],ye={banner:"hero",navigation:"navigation",contentinfo:"footer"};function he(e){let t=e.ariaRole?ye[e.ariaRole.toLowerCase()]:void 0;if(t)return t;if(e.tag==="nav")return"navigation";if(e.tag==="footer")return"footer";if(e.tag==="header")return e.actionCount>=5?"navigation":"hero";let n=`${e.idClass} ${e.headingText}`.toLowerCase();return/\b(navbar|nav-bar|navigation|site-nav|main-nav|topbar|footer)\b/.test(n)?/footer/.test(n)?"footer":"navigation":/\b(hero|masthead|jumbotron)\b/i.test(e.idClass)?"hero":null}function Se(e){return e.actionCount>=1&&e.textLength>0&&e.textLength<200?"cta":"generic"}var we=[["pricing",/\b(pricing|price list|per month|\/mo|subscriptions?)\b|\bplans?\b(?=[^.]{0,40}(from|start|month|year|[$€£]))/i],["faq",/\bfaq\b|frequently asked|common questions?/i],["comparison",/\b(compare|comparison|versus)\b|\bvs\./i],["social_proof",/\b(reviews?|ratings?|testimonial|brands?|galler(y|ies)|logos)\b|trusted by|loved by|case stud|what our customers say/i],["trust",/\b(insurance|warrant(y|ies)|guarantees?|certifi|accredit|security|privacy|compliance|gdpr|encrypt)\b|why choose|about us|our team/i],["cta",/\b(book|booking|reserve|appointments?|newsletter|subscribe)\b|contact us|get in touch|opening hours/i],["features",/\b(features?|benefits?|capabilit|services?|repairs?|menus?|products?)\b|how it works|our process|what we (do|offer)|what you get/i]],O=[["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|free returns?|returns? within|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]],X={navigation:"navigation",footer:"navigation",hero:"hero",cta:"cta",generic:"generic"};function be(e){var n;let t=e.querySelector("h1, h2, h3");return((n=t==null?void 0:t.textContent)!=null?n:"").slice(0,160)}function T(e){var o,i;let t=he(e);if(t)return{type:(o=X[t])!=null?o:"generic",strength:"strong"};let n=`${e.idClass} ${e.headingText}`.toLowerCase();for(let[d,s]of we)if(s.test(n))return{type:d,strength:"strong"};for(let[d,s]of O)if(s.test(e.bodyText))return{type:d,strength:"strong"};let a=Se(e);return{type:(i=X[a])!=null?i:"generic",strength:"weak"}}function C(e){var a,o;let t=((a=e.textContent)!=null?a:"").replace(/\s+/g," ").trim(),n=e.getAttribute("role");return S({tag:e.tagName.toLowerCase(),idClass:`${e.id} ${String((o=e.className)!=null?o:"")}`,headingText:be(e),bodyText:t.slice(0,2e3),actionCount:e.querySelectorAll('a, button, [role="button"]').length,textLength:t.length},n?{ariaRole:n}:{})}function Z(e){return T(C(e)).type}var re=require("@sentientui/policy");var ve=require("@sentientui/policy");function ee(e,t,n,a){let o=[];{let s=!1,l=[],f=()=>{if(s)return;let y=Date.now();for(l.push(y);l.length>0&&y-l[0]>500;)l.shift();l.length>=3&&(s=!0,e("rage_click"))};t.addEventListener("click",f),o.push(()=>t.removeEventListener("click",f))}{let i=!1,d=s=>{if(i||!(s.target instanceof Node)||!t.contains(s.target)&&t!==s.target)return;i=!0;let l=typeof window!="undefined"?window.getSelection():null,f=l?l.toString().length:0;e("text_copy",{selectionLength:f})};document.addEventListener("copy",d),o.push(()=>document.removeEventListener("copy",d))}{let i=!1,d=!1,s=null,l=()=>{s!==null&&(clearTimeout(s),s=null)},f=()=>{i||!d||(l(),s=setTimeout(()=>{!i&&d&&(i=!0,e("scroll_hesitation"))},3e3))},y=()=>{l(),f()},g=b=>{for(let k of b)d=k.intersectionRatio>.3,d?f():l()},h=new IntersectionObserver(g,{threshold:[.3]});h.observe(t),window.addEventListener("scroll",y,{passive:!0}),o.push(()=>{h.disconnect(),window.removeEventListener("scroll",y),l()})}if((a==null?void 0:a.tabLoss)!==!1){let i=!1,d=n!=null?n:Date.now(),s=()=>{if(i||document.visibilityState!=="hidden")return;let l=Date.now()-d;l<15e3&&(i=!0,e("tab_loss",{timeOnPage:l}))};document.addEventListener("visibilitychange",s),o.push(()=>document.removeEventListener("visibilitychange",s))}return()=>{for(let i of o)i()}}function te(){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(t=>t==="1"||t==="yes")}var Te=["data-sentient-id","data-testid","data-test","data-id","data-name","data-cy"];function P(e){var t;return((t=e.textContent)!=null?t:"").replace(/\s+/g," ").trim()}function Ce(e){return{tag:e.tagName.toLowerCase(),text:P(e).slice(0,40)}}function ne(e){return e.replace(/["\\\]]/g,"\\$&")}function E(e,t){try{return e.querySelectorAll(t).length===1}catch(n){return!1}}function oe(e,t){var d;let n=e.tagName.toLowerCase();if(!n)return null;let a=((d=e.getAttribute("class"))!=null?d:"").split(/\s+/).filter(s=>/^[a-zA-Z][\w-]*$/.test(s)),o=[n,...a.map(s=>`${n}.${s}`)];for(let s of o)if(E(t,s))return s;let i=e.parentElement;if(i&&i!==t){let s=oe(i,t);if(s){for(let g of o){let h=`${s} > ${g}`;if(E(t,h))return h}let l=Array.from(i.children).filter(g=>g.tagName.toLowerCase()===n),f=l.indexOf(e),y=l.some(g=>g!==e&&P(g)!==P(e));if(f>=0&&y){let g=`${s} > ${n}:nth-of-type(${f+1})`;if(E(t,g))return g}}}return null}function se(e,t){let n=Ce(e),a=e.getAttribute("id");if(a&&E(t,`#${ne(a)}`))return{v:1,id:a,fingerprint:n};for(let i of Te){let d=e.getAttribute(i);if(d&&E(t,`[${i}="${ne(d)}"]`))return{v:1,dataAttr:{name:i,value:d},fingerprint:n}}let o=oe(e,t);return o?{v:1,selector:o,fingerprint:n}:null}var Ee="section, header, footer, nav, main > div, [data-sentient-section]",ke=2e4;function Re(e){let t=Array.from(e.querySelectorAll(Ee)),n=t.filter(a=>t.filter(o=>o!==a&&a.contains(o)).length<2);return n.filter(a=>!n.some(o=>o!==a&&o.contains(a)))}function xe(e,t,n,a){try{fetch(`${t}/v1/section-map`,{method:"POST",keepalive:!0,headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({pageUrl:n,sections:a})}).catch(()=>{})}catch(o){}}var I=()=>{};function ie(e,t){var N,L,$,K,G,F,W,j,B,U,H,q;let n=(N=t.doc)!=null?N:typeof document!="undefined"?document:void 0;if(!n||typeof IntersectionObserver=="undefined"||te()||!t.apiKey||!t.apiKey.startsWith("pk_"))return I;let a=((L=t.apiBase)!=null?L:"https://api.sentient-ui.com").replace(/\/+$/,"").replace(/\/v1$/,""),o=Re(n);if(o.length===0)return I;let i=new Map,d=[];for(let r of o){let c=r.getAttribute("data-sentient-type"),p=c&&x.includes(c)?c:null,u=C(r),v=(K=p!=null?p:($=t.typeOf)==null?void 0:$.call(t,r))!=null?K:T(u).type,w=se(r,n),V=w?`nc-${v}-${(0,re.fnv1a)(JSON.stringify({id:(G=w.id)!=null?G:null,dataAttr:(F=w.dataAttr)!=null?F:null,selector:(W=w.selector)!=null?W:null})).toString(36)}`:`nc-${v}`;i.set(r,V);let Q=O.filter(([,A])=>A.test(u.bodyText)).map(([A])=>A);d.push(_(S({componentId:V,semanticType:v,source:p?"markup":"auto"},w?{locator:w}:{}),{observation:S(S({tag:u.tag,idClass:u.idClass.slice(0,200),headingText:u.headingText,textLength:u.textLength,actionCount:u.actionCount},u.ariaRole?{ariaRole:u.ariaRole}:{}),Q.length>0?{patternFlags:Q}:{})}))}let s=(H=(U=(B=(j=n.defaultView)!=null?j:typeof window!="undefined"?window:void 0)==null?void 0:B.location)==null?void 0:U.pathname)!=null?H:"/";xe(t.apiKey,a,s,d);let l=new Map,f=r=>{let c=l.get(r);return c||(c={ms:0,scroll:0,enterAt:null,intersecting:!1},l.set(r,c)),c},y=new IntersectionObserver(r=>{for(let c of r){let p=i.get(c.target);if(!p)continue;let u=f(p);c.isIntersecting?(u.intersecting=!0,u.enterAt=Date.now(),c.intersectionRatio>u.scroll&&(u.scroll=c.intersectionRatio)):(u.intersecting=!1,u.enterAt!=null&&(u.ms+=Date.now()-u.enterAt,u.enterAt=null))}},{threshold:[0,.25,.5,.75,1]});for(let r of i.keys())y.observe(r);let g=()=>{let r=Date.now();for(let[c,p]of l)if(p.enterAt!=null&&(p.ms+=r-p.enterAt,p.enterAt=null),!(p.ms<=0)){try{e.track({projectId:t.apiKey,componentId:c,eventType:"dwell",payload:{dwell_time:Math.round(p.ms),scroll_depth:Number(p.scroll.toFixed(2))}})}catch(u){}p.ms=0}},h=()=>{if(n.hidden)g();else{let r=Date.now();for(let c of l.values())c.intersecting&&(c.enterAt=r)}},b=!1,k=r=>{if(g(),r!=null&&r.persisted){b=!0;return}try{y.disconnect()}catch(c){}},D=r=>{if(!(r!=null&&r.persisted)||!b)return;b=!1;let c=Date.now();for(let p of l.values())p.enterAt=p.intersecting&&!n.hidden?c:null};n.addEventListener("visibilitychange",h);let m=(q=n.defaultView)!=null?q:typeof window!="undefined"?window:void 0;m==null||m.addEventListener("pagehide",k),m==null||m.addEventListener("pageshow",D);let ae=setInterval(()=>{if(n.hidden||b)return;g();let r=Date.now();for(let c of l.values())c.intersecting&&(c.enterAt=r)},ke),M=[];return t.microSignals&&[...i.entries()].forEach(([r,c],p)=>{M.push(ee((u,v={})=>{try{e.track({projectId:t.apiKey,componentId:c,eventType:"micro_signal",payload:S({signalType:u},v)})}catch(w){}},r,void 0,{tabLoss:p===0}))}),()=>{g(),clearInterval(ae),n.removeEventListener("visibilitychange",h),m==null||m.removeEventListener("pagehide",k),m==null||m.removeEventListener("pageshow",D);for(let r of M)r();try{y.disconnect()}catch(r){}}}0&&(module.exports={SEMANTIC_TYPES,classifyFeatures,classifySection,featuresFromElement,startEngagementCapture});
2
2
  //# sourceMappingURL=index-engagement.js.map