🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

posthog-js

Package Overview
Dependencies
Maintainers
23
Versions
1234
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

posthog-js - npm Package Compare versions

Comparing version
1.396.4
to
1.396.5
+1
-1
dist/customizations.full.js

@@ -1,2 +0,2 @@

!function(){"use strict";var e={LIB_VERSION:"1.396.4",LIB_NAME:"web"};function r(){return r=Object.assign?Object.assign.bind():function(e){for(var r=1;arguments.length>r;r++){var n=arguments[r];for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},r.apply(null,arguments)}function n(e,r){return-1!==e.indexOf(r)}var t=Object.prototype,i=t.hasOwnProperty,o=t.toString,a=Array.isArray||function(e){return"[object Array]"===o.call(e)},l=e=>e===Object(e)&&!a(e),u=e=>{if(l(e)){for(var r in e)if(i.call(e,r))return!1;return!0}return!1},s=e=>void 0===e,c=e=>s(e)||(e=>null===e)(e),d=e=>"[object Number]"==o.call(e)&&e==e,f=e=>e instanceof FormData;function v(e,r,n,t,i){return r>n&&(t.warn("min cannot be greater than max."),r=n),d(e)?e>n?(t.warn(" cannot be greater than max: "+n+". Using max value instead."),n):r>e?(t.warn(" cannot be less than min: "+r+". Using min value instead."),r):e:(t.warn(" must be a number. using max or fallback. max: "+n+", fallback: "+i),v(n,r,n,t))}class h{constructor(e){this.Ee={},this.Pe=e.Pe,this.Fe=v(e.bucketSize,0,100,e.Ae),this.$e=v(e.refillRate,0,this.Fe,e.Ae),this.De=v(e.refillInterval,0,864e5,e.Ae)}Ne(e,r){var n=Math.floor((r-e.lastAccess)/this.De);n>0&&(e.tokens=Math.min(e.tokens+n*this.$e,this.Fe),e.lastAccess=e.lastAccess+n*this.De)}consumeRateLimit(e){var r,n=Date.now(),t=String(e),i=this.Ee[t];return i?this.Ne(i,n):this.Ee[t]=i={tokens:this.Fe,lastAccess:n},0===i.tokens||(i.tokens--,0===i.tokens&&(null==(r=this.Pe)||r.call(this,e)),0===i.tokens)}stop(){this.Ee={}}}var p="Mobile",g="iOS",w="Android",m="Tablet",_=w+" "+m,x="iPad",b="Apple",E=b+" Watch",R="Safari",y="BlackBerry",S="Samsung",M=S+"Browser",k=S+" Internet",P="Chrome",A=P+" OS",O=P+" "+g,B="Internet Explorer",D=B+" "+p,I="Opera",N=I+" Mini",U="Edge",T="Microsoft "+U,C="Firefox",W=C+" "+g,F="Nintendo",L="PlayStation",j="Xbox",z=w+" "+p,G=p+" "+R,K="Windows",V=K+" Phone",H="Nokia",X="Ouya",Y="Generic",q=Y+" "+p.toLowerCase(),J=Y+" "+m.toLowerCase(),Q="Konqueror",Z="Oculus Browser",ee="Vivaldi",re="Yandex",ne="Whale",te="DuckDuckGo",ie="Pale Moon",oe="Waterfox",ae="Brave",le="Google Search App",ue="(\\d+(\\.\\d+)?)",se=new RegExp("Version/"+ue),ce=new RegExp(j,"i"),de=new RegExp(L+" \\w+","i"),fe=new RegExp(F+" \\w+","i"),ve=new RegExp(y+"|PlayBook|BB10","i"),he={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},pe=function(e,r,t,i){r=r||"";var o=function(e){return null!=e&&e.brave?ae:null}(t);return o||(null!=i&&i.detectGoogleSearchApp&&n(e,"GSA/")?le:n(e," OPR/")&&n(e,"Mini")?N:n(e," OPR/")?I:ve.test(e)?y:n(e,"IE"+p)||n(e,"WPDesktop")?D:n(e,"OculusBrowser")?Z:n(e,M)?k:n(e,U)||n(e,"Edg/")?T:n(e,ee+"/")?ee:n(e,"YaBrowser/")?re:n(e,ne+"/")?ne:n(e,te+"/")||n(e,"Ddg/")?te:n(e,"FBIOS")?"Facebook "+p:n(e,"UCWEB")||n(e,"UCBrowser")?"UC Browser":n(e,"CriOS")?O:n(e,"CrMo")||n(e,P)?P:n(e,w)&&n(e,R)?z:n(e,"FxiOS")?W:n(e.toLowerCase(),Q.toLowerCase())?Q:n(e,ae+"/")?ae:((e,r)=>r&&n(r,b)||function(e){return n(e,R)&&!n(e,P)&&!n(e,w)}(e))(e,r)?n(e,p)?G:R:n(e,"PaleMoon/")?ie:n(e,oe+"/")?oe:n(e,C)?C:n(e,"MSIE")||n(e,"Trident/")?B:n(e,"Gecko")?C:"")},ge={[D]:[new RegExp("rv:"+ue)],[T]:[new RegExp(U+"?\\/"+ue)],[P]:[new RegExp("("+P+"|CrMo)\\/"+ue)],[O]:[new RegExp("CriOS\\/"+ue)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+ue)],[R]:[se],[G]:[se],[I]:[new RegExp("(Opera|OPR)\\/"+ue)],[C]:[new RegExp(C+"\\/"+ue)],[W]:[new RegExp("FxiOS\\/"+ue)],[Q]:[new RegExp("Konqueror[:/]?"+ue,"i")],[y]:[new RegExp(y+" "+ue),se],[z]:[new RegExp("android\\s"+ue,"i")],[k]:[new RegExp(M+"\\/"+ue)],[Z]:[new RegExp("OculusBrowser\\/"+ue)],[ee]:[new RegExp(ee+"\\/"+ue)],[re]:[new RegExp("YaBrowser\\/"+ue)],[ne]:[new RegExp(ne+"\\/"+ue)],[ae]:[new RegExp(ae+"\\/"+ue)],[te]:[new RegExp("(DuckDuckGo|Ddg)\\/"+ue)],[ie]:[new RegExp("PaleMoon\\/"+ue)],[oe]:[new RegExp(oe+"\\/"+ue)],[le]:[new RegExp("GSA\\/"+ue)],[B]:[new RegExp("(rv:|MSIE )"+ue)],Mozilla:[new RegExp("rv:"+ue)]},we=function(e,r,n,t){var i=pe(e,r,n,t),o=ge[i];if(s(o))return null;for(var a=0;o.length>a;a++){var l=e.match(o[a]);if(l)return parseFloat(l[l.length-2])}return null},me=[[new RegExp(j+"; "+j+" (.*?)[);]","i"),e=>[j,e&&e[1]||""]],[new RegExp(F,"i"),[F,""]],[new RegExp(L,"i"),[L,""]],[ve,[y,""]],[new RegExp(K,"i"),(e,r)=>{if(/Phone/.test(r)||/WPDesktop/.test(r))return[V,""];if(new RegExp(p).test(r)&&!/IEMobile\b/.test(r))return[K+" "+p,""];var n=/Windows NT ([0-9.]+)/i.exec(r);if(n&&n[1]){var t=he[n[1]]||"";return/arm/i.test(r)&&(t="RT"),[K,t]}return[K,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>e&&e[3]?[g,[e[3],e[4],e[5]||"0"].join(".")]:[g,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{var r="";return e&&e.length>=3&&(r=s(e[2])?e[3]:e[2]),["watchOS",r]}],[new RegExp("("+w+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+w+")","i"),e=>e&&e[2]?[w,[e[2],e[3],e[4]||"0"].join(".")]:[w,""]],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,e=>{var r=["Mac OS X",""];return e&&e[1]&&(r[1]=[e[1],e[2],e[3]||"0"].join(".")),r}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[A,""]],[/Linux|debian/i,["Linux",""]]],_e=function(e){return fe.test(e)?F:de.test(e)?L:ce.test(e)?j:new RegExp(X,"i").test(e)?X:new RegExp("("+V+"|WPDesktop)","i").test(e)?V:/iPad/.test(e)?x:/iPod/.test(e)?"iPod Touch":/iPhone/.test(e)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(e)?E:ve.test(e)?y:/(kobo)\s(ereader|touch)/i.test(e)?"Kobo":new RegExp(H,"i").test(e)?H:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(e)||/(kf[a-z]+)( bui|\)).+silk\//i.test(e)?"Kindle Fire":/(Android|ZTE)/i.test(e)?new RegExp(p).test(e)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(e)||/pixel[\daxl ]{1,6}/i.test(e)&&!/pixel c/i.test(e)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(e)||/lmy47v/i.test(e)&&!/QTAQZ3/i.test(e)?w:_:new RegExp("(pda|"+p+")","i").test(e)?q:new RegExp(m,"i").test(e)&&!new RegExp(m+" pc","i").test(e)?J:""},xe="undefined"!=typeof window?window:void 0,be="undefined"!=typeof globalThis?globalThis:xe;"undefined"==typeof self&&(be.self=be),"undefined"==typeof File&&(be.File=function(){});var Ee=null==be?void 0:be.navigator,Re=null==be?void 0:be.document,ye=null==be?void 0:be.location;null!=be&&be.XMLHttpRequest&&new be.XMLHttpRequest;var $e=null==Ee?void 0:Ee.userAgent,Se=null!=xe?xe:{},Me=function(e,r){var{debugEnabled:n}=void 0===r?{}:r,t={k(r){if(xe&&(Se.POSTHOG_DEBUG||n)&&!s(xe.console)&&xe.console){for(var t=("__rrweb_original__"in xe.console[r]?xe.console[r].__rrweb_original__:xe.console[r]),i=arguments.length,o=new Array(i>1?i-1:0),a=1;i>a;a++)o[a-1]=arguments[a];t(e,...o)}},debug(){for(var e=arguments.length,r=new Array(e),n=0;e>n;n++)r[n]=arguments[n];t.k("debug",...r)},info(){for(var e=arguments.length,r=new Array(e),n=0;e>n;n++)r[n]=arguments[n];t.k("log",...r)},warn(){for(var e=arguments.length,r=new Array(e),n=0;e>n;n++)r[n]=arguments[n];t.k("warn",...r)},error(){for(var e=arguments.length,r=new Array(e),n=0;e>n;n++)r[n]=arguments[n];t.k("error",...r)},critical(){for(var r=arguments.length,n=new Array(r),t=0;r>t;t++)n[t]=arguments[t];console.error(e,...n)},uninitializedWarning(e){t.error("You must initialize PostHog before calling "+e)},createLogger:(r,n)=>Me(e+" "+r,n)};return t},ke=Me("[PostHog.js]"),Pe=ke.createLogger;function Ae(e,r){if(!c(e))if(a(e))e.forEach(r);else if(f(e))e.forEach(((e,n)=>r(e,n)));else for(var n in e)i.call(e,n)&&r(e[n],n)}var Oe=function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),t=1;r>t;t++)n[t-1]=arguments[t];for(var i of n)for(var o in i)void 0!==i[o]&&(e[o]=i[o]);return e},Be=e=>{var r=null==Re?void 0:Re.createElement("a");return s(r)?null:(r.href=e,r)},De=function(e,r,n){if(!e||!r||!r.length)return e;for(var t=e.split("#"),i=t[1],o=(t[0]||"").split("?"),l=o[1],u=o[0],s=(l||"").split("&"),c=[],d=0;s.length>d;d++){var f=s[d].split("=");a(f)&&(r.includes(f[0])?c.push(f[0]+"="+n):c.push(s[d]))}var v=u;return null!=l&&(v+="?"+c.join("&")),null!=i&&(v+="#"+i),v};Math.trunc||(Math.trunc=function(e){return 0>e?Math.ceil(e):Math.floor(e)}),Number.isInteger||(Number.isInteger=function(e){return d(e)&&isFinite(e)&&Math.floor(e)===e});class Ie{constructor(e){if(this.bytes=e,16!==e.length)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,r,n,t){if(!Number.isInteger(e)||!Number.isInteger(r)||!Number.isInteger(n)||!Number.isInteger(t)||0>e||0>r||0>n||0>t||e>0xffffffffffff||r>4095||n>1073741823||t>4294967295)throw new RangeError("invalid field value");var i=new Uint8Array(16);return i[0]=e/Math.pow(2,40),i[1]=e/Math.pow(2,32),i[2]=e/Math.pow(2,24),i[3]=e/Math.pow(2,16),i[4]=e/Math.pow(2,8),i[5]=e,i[6]=112|r>>>8,i[7]=r,i[8]=128|n>>>24,i[9]=n>>>16,i[10]=n>>>8,i[11]=n,i[12]=t>>>24,i[13]=t>>>16,i[14]=t>>>8,i[15]=t,new Ie(i)}toString(){for(var e="",r=0;this.bytes.length>r;r++)e=e+(this.bytes[r]>>>4).toString(16)+(15&this.bytes[r]).toString(16),3!==r&&5!==r&&7!==r&&9!==r||(e+="-");if(36!==e.length)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new Ie(this.bytes.slice(0))}equals(e){return 0===this.compareTo(e)}compareTo(e){for(var r=0;16>r;r++){var n=this.bytes[r]-e.bytes[r];if(0!==n)return Math.sign(n)}return 0}}class Ne{constructor(){this.S=0,this.C=0,this.I=new Ce}generate(){var e=this.generateOrAbort();if(s(e)){this.S=0;var r=this.generateOrAbort();if(s(r))throw new Error("Could not generate UUID after timestamp reset");return r}return e}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.M();else{if(this.S>=e+1e4)return;this.C++,this.C>4398046511103&&(this.S++,this.M())}return Ie.fromFieldsV7(this.S,Math.trunc(this.C/Math.pow(2,30)),this.C&Math.pow(2,30)-1,this.I.nextUint32())}M(){this.C=1024*this.I.nextUint32()+(1023&this.I.nextUint32())}}var Ue,Te=e=>{if("undefined"!=typeof UUIDV7_DENY_WEAK_RNG&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var r=0;e.length>r;r++)e[r]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return e};xe&&!s(xe.crypto)&&crypto.getRandomValues&&(Te=e=>crypto.getRandomValues(e));class Ce{constructor(){this.R=new Uint32Array(8),this.O=1/0}nextUint32(){return this.R.length>this.O||(Te(this.R),this.O=0),this.R[this.O++]}}var We=()=>(Ue||(Ue=new Ne)).generate(),Fe="",Le=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i;function je(e,r){if(r){var n=function(e,r){if(void 0===r&&(r=Re),Fe)return Fe;if(!r)return"";if(["localhost","127.0.0.1"].includes(e))return"";for(var n=e.split("."),t=Math.min(n.length,8),i="dmn_chk_"+We().toString();!Fe&&t--;){var o=n.slice(t).join("."),a=i+"=1;domain=."+o+";path=/";r.cookie=a+";max-age=3",r.cookie.includes(i)&&(r.cookie=a+";max-age=0",Fe=o)}return Fe}(e);if(!n){var t=(e=>{var r=e.match(Le);return r?r[0]:""})(e);t!==n&&ke.info("Warning: cookie subdomain discovery mismatch",t,n),n=t}return n?"; domain=."+n:""}return""}var ze={N:()=>!!Re,D(e){ke.error("cookieStore error: "+e)},A(e){if(Re){try{for(var r=e+"=",n=Re.cookie.split(";").filter((e=>e.length)),t=0;n.length>t;t++){for(var i=n[t];" "==i.charAt(0);)i=i.substring(1,i.length);if(0===i.indexOf(r))return decodeURIComponent(i.substring(r.length,i.length))}}catch(e){}return null}},F(e){var r;try{r=JSON.parse(ze.A(e))||{}}catch(e){}return r},q(e,r,n,t,i){if(!Re)return!1;try{var o="",a="",l=je(Re.location.hostname,t);if(n){var u=new Date;u.setTime(u.getTime()+864e5*n),o="; expires="+u.toUTCString()}i&&(a="; secure");var s=e+"="+encodeURIComponent(JSON.stringify(r))+o+"; SameSite=Lax; path=/"+l+a;return s.length>3686.4&&ke.warn("cookieStore warning: large cookie, len="+s.length),Re.cookie=s,!0}catch(e){return!1}},P(e,r){if(null!=Re&&Re.cookie)try{ze.q(e,"",-1,r)}catch(e){return}}},Ge=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Ke=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...Ge],Ve=["$app_build","$app_name","$app_namespace","$app_version","$browser","$browser_version","$device_type","$current_url","$pathname","$os","$os_name","$os_version","$referring_domain","$referrer","$screen_height","$screen_width","$viewport_height","$viewport_width","$raw_user_agent"],He="<masked>",Xe=["li_fat_id"];function Ye(e,r,n){if(!Re)return{};var t,i,o,l=r?[...Ge,...n||[]]:[],u=(t=De(Re.URL,l,He),i=Ke.concat(e||[]),o={},Ae(i,(function(e){var r=function(e,r){for(var n,t=((e.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;t.length>i;i++){var o=t[i].split("=");if(o[0]===r){n=o;break}}if(!a(n)||2>n.length)return"";var l=n[1];try{l=decodeURIComponent(l)}catch(e){ke.error("Skipping decoding for malformed query param: "+l)}return l.replace(/\+/g," ")}(t,e);o[e]=r||null})),o),s=function(){var e={};return Ae(Xe,(function(r){var n=ze.A(r);e[r]=n||null})),e}();return Oe(s,u)}function qe(){return navigator.language||navigator.userLanguage}var Je="$direct";function Qe(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(e){return}}function Ze(){try{return(new Date).getTimezoneOffset()}catch(e){return}}function er(r,n,t,i){var a,l,u,s;if(void 0===i&&(i=!1),!$e)return{};var c,f,v,h,g,w,b,R,y,S,M,k,P=r?[...Ge,...n||[]]:[],[A,O]=function(e){for(var r=0;me.length>r;r++){var[n,t]=me[r],i=n.exec(e),o=i&&("function"==typeof t?t(i,e):t);if(o)return o}return["",""]}($e),B=null!=(c="undefined"!=typeof navigator?navigator:void 0)&&c.brave?{brave:!0}:{},D={detectGoogleSearchApp:t},I=Oe((M={$os:A,$os_version:O,$browser:pe($e,navigator.vendor,B,D),$device:_e($e),$device_type:(h=$e,g={userAgentDataPlatform:null==(a=navigator)||null==(a=a.userAgentData)?void 0:a.platform,maxTouchPoints:null==(l=navigator)?void 0:l.maxTouchPoints,screenWidth:null==xe||null==(u=xe.screen)?void 0:u.width,screenHeight:null==xe||null==(s=xe.screen)?void 0:s.height,devicePixelRatio:null==xe?void 0:xe.devicePixelRatio},S=_e(h),S===x||S===_||"Kobo"===S||"Kindle Fire"===S||S===J?m:S===F||S===j||S===L||S===X?"Console":S===E?"Wearable":S?p:"Android"===(null==g?void 0:g.userAgentDataPlatform)&&(null!==(w=null==g?void 0:g.maxTouchPoints)&&void 0!==w?w:0)>0?600>Math.min(null!==(b=null==g?void 0:g.screenWidth)&&void 0!==b?b:0,null!==(R=null==g?void 0:g.screenHeight)&&void 0!==R?R:0)/(null!==(y=null==g?void 0:g.devicePixelRatio)&&void 0!==y?y:1)?p:m:"Desktop"),$timezone:Qe(),$timezone_offset:Ze()},k={},Ae(M,(function(e,r){("[object String]"==o.call(e)&&e.length>0||d(e))&&(k[r]=e)})),k),{$current_url:De(i?(v=null==ye?void 0:ye.href,v?v.split("#")[0]:v):null==ye?void 0:ye.href,P,He),$host:null==ye?void 0:ye.host,$pathname:null==ye?void 0:ye.pathname,$raw_user_agent:$e.length>1e3?$e.substring(0,997)+"...":$e,$browser_version:we($e,navigator.vendor,B,D),$browser_language:qe(),$browser_language_prefix:(f=qe(),"string"==typeof f?f.split("-")[0]:void 0),$screen_height:null==xe?void 0:xe.screen.height,$screen_width:null==xe?void 0:xe.screen.width,$viewport_height:null==xe?void 0:xe.innerHeight,$viewport_width:null==xe?void 0:xe.innerWidth,$lib:e.LIB_NAME,$lib_version:e.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return e.SDK_DIST_CHANNEL&&(I.$sdk_dist_channel=e.SDK_DIST_CHANNEL),I}function rr(e,r){return[...e||[],...a(r)?r:[r]]}function nr(e,r){return(s(e)?1:e)*r}function tr(e,r){return function(e){for(var r=0,n=0;e.length>n;n++)r=(r<<5)-r+e.charCodeAt(n),r|=0;return Math.abs(r)}(e)%100<v(100*r,0,100,ke)}var ir=["type"];function or(e){var{type:r,executionTimeMs:n}=e;return r+(c(n)?"":" ("+n.toFixed(2)+"ms)")}var ar=Pe("[PostHog Action RateLimiting]");function lr(e,r){console.log(e,r)}function ur(e,r,n){if(void 0===n&&(n=5),"object"!=typeof e||"object"!=typeof r)return{};if(e===r)return{};if(!e&&r)return r;if(!r||!e)return{};var t={},i=new Set([...Object.keys(e),...Object.keys(r)]);for(var o of i){var a=e[o],d=r[o];if(s(a))t[o]=d;else if(s(d))t[o]=a;else if(!(a===d||c(a)&&c(d)))if(l(a)&&l(d))if(n>1){var f=ur(a,d,n-1);u(f)||(t[o]=f)}else t[o]="max depth reached, checking for changed value";else t[o]=d}return t}var sr,cr,dr,fr=(sr=null,cr=0,dr=null,{info(e){dr!==e&&(cr=0,dr=e),cr++,sr&&clearTimeout(sr),sr=setTimeout((()=>{ar.info(1===cr?'action "'+e+'" has been rate limited':'action "'+e+'" has been rate limited ('+cr+" times)"),cr=0,sr=null}),1e3)}});function vr(e){void 0===e&&(e={});var{maskAction:r,maskState:n,titleFunction:t=or,logger:i=lr,include:o={prevState:!0,nextState:!1,changedState:!0},rateLimiterRefillRate:a=1,rateLimiterBucketSize:l=10,__stateComparisonDepth:u}=e,s=new h({refillRate:a,bucketSize:l,refillInterval:1e3,Ae:ar});return e=>a=>l=>{var c=l,d=e.getState(),f=performance.now(),v=a(c),h=performance.now()-f,p=e.getState(),g=r?r(c):c;if(!g)return v;if(s.consumeRateLimit(c.type))fr.info(c.type);else try{var w=n?n(d,g):d,m=n?n(p,g):p,_=o.changedState?ur(w,m,null!=u?u:5):void 0,{type:x}=g,b={type:x,payload:function(e,r){if(null==e)return{};var n={};for(var t in e)if({}.hasOwnProperty.call(e,t)){if(-1!==r.indexOf(t))continue;n[t]=e[t]}return n}(g,ir),timestamp:Date.now(),executionTimeMs:h,prevState:o.prevState?w:void 0,nextState:o.nextState?m:void 0,changedState:o.changedState?_:void 0},E=t(b);i(E,b)}catch(e){ar.error("Error logging state:",e)}return v}}Se.posthogCustomizations=Object.freeze({__proto__:null,browserConsoleLogger:lr,posthogKeaLogger(e){void 0===e&&(e={});var r=vr(e);return{name:"posthog-kea-logger",events:{beforeReduxStore(e){e.middleware.push(r)}}}},posthogReduxLogger:vr,printAndDropEverything:e=>(console.log("Would have sent event:",e),null),sampleByDistinctId:e=>n=>n&&tr(n.properties.distinct_id,e)?r({},n,{properties:r({},n.properties,{$sample_type:["sampleByDistinctId"],$sample_threshold:e})}):null,sampleByEvent:(e,t)=>i=>{var o,a,l;return i?n(e,i.event)?100*Math.random()<v(100*t,0,100,ke)?r({},i,{properties:r({},i.properties,{$sample_type:rr(null==(o=i.properties)?void 0:o.$sample_type,"sampleByEvent"),$sample_threshold:nr(null==(a=i.properties)?void 0:a.$sample_threshold,t),$sampled_events:rr(null==(l=i.properties)?void 0:l.$sampled_events,e)})}):null:i:null},sampleBySessionId:e=>n=>n&&tr(n.properties.$session_id,e)?r({},n,{properties:r({},n.properties,{$sample_type:rr(n.properties.$sample_type,"sampleBySessionId"),$sample_threshold:nr(n.properties.$sample_threshold,e)})}):null,sessionRecordingLoggerForPostHogInstance:e=>(r,n)=>{var t;null==e||null==(t=e.sessionRecording)||t.tryAddCustomEvent("app-state",{title:r,stateEvent:n})},setAllPersonProfilePropertiesAsPersonPropertiesForFlags(e){var r,t=Oe({},er(e.config.mask_personal_data_properties,e.config.custom_personal_data_properties,e.config.detect_google_search_app,e.config.disable_capture_url_hashes),Ye(e.config.custom_campaign_params,e.config.mask_personal_data_properties,e.config.custom_personal_data_properties),{$referrer:(null==Re?void 0:Re.referrer)||Je,$referring_domain:null!=Re&&Re.referrer&&(null==(r=Be(Re.referrer))?void 0:r.host)||Je}),i={};Ae(t,(function(e,r){(n(Ke,r)||n(Ve,r))&&(i[r]=e)})),e.setPersonPropertiesForFlags(i)}})}();
!function(){"use strict";var e={LIB_VERSION:"1.396.5",LIB_NAME:"web"};function r(){return r=Object.assign?Object.assign.bind():function(e){for(var r=1;arguments.length>r;r++){var n=arguments[r];for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},r.apply(null,arguments)}function n(e,r){return-1!==e.indexOf(r)}var t=Object.prototype,i=t.hasOwnProperty,o=t.toString,a=Array.isArray||function(e){return"[object Array]"===o.call(e)},l=e=>e===Object(e)&&!a(e),u=e=>{if(l(e)){for(var r in e)if(i.call(e,r))return!1;return!0}return!1},s=e=>void 0===e,c=e=>s(e)||(e=>null===e)(e),d=e=>"[object Number]"==o.call(e)&&e==e,f=e=>e instanceof FormData;function v(e,r,n,t,i){return r>n&&(t.warn("min cannot be greater than max."),r=n),d(e)?e>n?(t.warn(" cannot be greater than max: "+n+". Using max value instead."),n):r>e?(t.warn(" cannot be less than min: "+r+". Using min value instead."),r):e:(t.warn(" must be a number. using max or fallback. max: "+n+", fallback: "+i),v(n,r,n,t))}class h{constructor(e){this.Ee={},this.Pe=e.Pe,this.Fe=v(e.bucketSize,0,100,e.Ae),this.$e=v(e.refillRate,0,this.Fe,e.Ae),this.De=v(e.refillInterval,0,864e5,e.Ae)}Ne(e,r){var n=Math.floor((r-e.lastAccess)/this.De);n>0&&(e.tokens=Math.min(e.tokens+n*this.$e,this.Fe),e.lastAccess=e.lastAccess+n*this.De)}consumeRateLimit(e){var r,n=Date.now(),t=String(e),i=this.Ee[t];return i?this.Ne(i,n):this.Ee[t]=i={tokens:this.Fe,lastAccess:n},0===i.tokens||(i.tokens--,0===i.tokens&&(null==(r=this.Pe)||r.call(this,e)),0===i.tokens)}stop(){this.Ee={}}}var p="Mobile",g="iOS",w="Android",m="Tablet",_=w+" "+m,x="iPad",b="Apple",E=b+" Watch",R="Safari",y="BlackBerry",S="Samsung",M=S+"Browser",k=S+" Internet",P="Chrome",A=P+" OS",O=P+" "+g,B="Internet Explorer",D=B+" "+p,I="Opera",N=I+" Mini",U="Edge",T="Microsoft "+U,C="Firefox",W=C+" "+g,F="Nintendo",L="PlayStation",j="Xbox",z=w+" "+p,G=p+" "+R,K="Windows",V=K+" Phone",H="Nokia",X="Ouya",Y="Generic",q=Y+" "+p.toLowerCase(),J=Y+" "+m.toLowerCase(),Q="Konqueror",Z="Oculus Browser",ee="Vivaldi",re="Yandex",ne="Whale",te="DuckDuckGo",ie="Pale Moon",oe="Waterfox",ae="Brave",le="Google Search App",ue="(\\d+(\\.\\d+)?)",se=new RegExp("Version/"+ue),ce=new RegExp(j,"i"),de=new RegExp(L+" \\w+","i"),fe=new RegExp(F+" \\w+","i"),ve=new RegExp(y+"|PlayBook|BB10","i"),he={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},pe=function(e,r,t,i){r=r||"";var o=function(e){return null!=e&&e.brave?ae:null}(t);return o||(null!=i&&i.detectGoogleSearchApp&&n(e,"GSA/")?le:n(e," OPR/")&&n(e,"Mini")?N:n(e," OPR/")?I:ve.test(e)?y:n(e,"IE"+p)||n(e,"WPDesktop")?D:n(e,"OculusBrowser")?Z:n(e,M)?k:n(e,U)||n(e,"Edg/")?T:n(e,ee+"/")?ee:n(e,"YaBrowser/")?re:n(e,ne+"/")?ne:n(e,te+"/")||n(e,"Ddg/")?te:n(e,"FBIOS")?"Facebook "+p:n(e,"UCWEB")||n(e,"UCBrowser")?"UC Browser":n(e,"CriOS")?O:n(e,"CrMo")||n(e,P)?P:n(e,w)&&n(e,R)?z:n(e,"FxiOS")?W:n(e.toLowerCase(),Q.toLowerCase())?Q:n(e,ae+"/")?ae:((e,r)=>r&&n(r,b)||function(e){return n(e,R)&&!n(e,P)&&!n(e,w)}(e))(e,r)?n(e,p)?G:R:n(e,"PaleMoon/")?ie:n(e,oe+"/")?oe:n(e,C)?C:n(e,"MSIE")||n(e,"Trident/")?B:n(e,"Gecko")?C:"")},ge={[D]:[new RegExp("rv:"+ue)],[T]:[new RegExp(U+"?\\/"+ue)],[P]:[new RegExp("("+P+"|CrMo)\\/"+ue)],[O]:[new RegExp("CriOS\\/"+ue)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+ue)],[R]:[se],[G]:[se],[I]:[new RegExp("(Opera|OPR)\\/"+ue)],[C]:[new RegExp(C+"\\/"+ue)],[W]:[new RegExp("FxiOS\\/"+ue)],[Q]:[new RegExp("Konqueror[:/]?"+ue,"i")],[y]:[new RegExp(y+" "+ue),se],[z]:[new RegExp("android\\s"+ue,"i")],[k]:[new RegExp(M+"\\/"+ue)],[Z]:[new RegExp("OculusBrowser\\/"+ue)],[ee]:[new RegExp(ee+"\\/"+ue)],[re]:[new RegExp("YaBrowser\\/"+ue)],[ne]:[new RegExp(ne+"\\/"+ue)],[ae]:[new RegExp(ae+"\\/"+ue)],[te]:[new RegExp("(DuckDuckGo|Ddg)\\/"+ue)],[ie]:[new RegExp("PaleMoon\\/"+ue)],[oe]:[new RegExp(oe+"\\/"+ue)],[le]:[new RegExp("GSA\\/"+ue)],[B]:[new RegExp("(rv:|MSIE )"+ue)],Mozilla:[new RegExp("rv:"+ue)]},we=function(e,r,n,t){var i=pe(e,r,n,t),o=ge[i];if(s(o))return null;for(var a=0;o.length>a;a++){var l=e.match(o[a]);if(l)return parseFloat(l[l.length-2])}return null},me=[[new RegExp(j+"; "+j+" (.*?)[);]","i"),e=>[j,e&&e[1]||""]],[new RegExp(F,"i"),[F,""]],[new RegExp(L,"i"),[L,""]],[ve,[y,""]],[new RegExp(K,"i"),(e,r)=>{if(/Phone/.test(r)||/WPDesktop/.test(r))return[V,""];if(new RegExp(p).test(r)&&!/IEMobile\b/.test(r))return[K+" "+p,""];var n=/Windows NT ([0-9.]+)/i.exec(r);if(n&&n[1]){var t=he[n[1]]||"";return/arm/i.test(r)&&(t="RT"),[K,t]}return[K,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>e&&e[3]?[g,[e[3],e[4],e[5]||"0"].join(".")]:[g,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{var r="";return e&&e.length>=3&&(r=s(e[2])?e[3]:e[2]),["watchOS",r]}],[new RegExp("("+w+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+w+")","i"),e=>e&&e[2]?[w,[e[2],e[3],e[4]||"0"].join(".")]:[w,""]],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,e=>{var r=["Mac OS X",""];return e&&e[1]&&(r[1]=[e[1],e[2],e[3]||"0"].join(".")),r}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[A,""]],[/Linux|debian/i,["Linux",""]]],_e=function(e){return fe.test(e)?F:de.test(e)?L:ce.test(e)?j:new RegExp(X,"i").test(e)?X:new RegExp("("+V+"|WPDesktop)","i").test(e)?V:/iPad/.test(e)?x:/iPod/.test(e)?"iPod Touch":/iPhone/.test(e)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(e)?E:ve.test(e)?y:/(kobo)\s(ereader|touch)/i.test(e)?"Kobo":new RegExp(H,"i").test(e)?H:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(e)||/(kf[a-z]+)( bui|\)).+silk\//i.test(e)?"Kindle Fire":/(Android|ZTE)/i.test(e)?new RegExp(p).test(e)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(e)||/pixel[\daxl ]{1,6}/i.test(e)&&!/pixel c/i.test(e)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(e)||/lmy47v/i.test(e)&&!/QTAQZ3/i.test(e)?w:_:new RegExp("(pda|"+p+")","i").test(e)?q:new RegExp(m,"i").test(e)&&!new RegExp(m+" pc","i").test(e)?J:""},xe="undefined"!=typeof window?window:void 0,be="undefined"!=typeof globalThis?globalThis:xe;"undefined"==typeof self&&(be.self=be),"undefined"==typeof File&&(be.File=function(){});var Ee=null==be?void 0:be.navigator,Re=null==be?void 0:be.document,ye=null==be?void 0:be.location;null!=be&&be.XMLHttpRequest&&new be.XMLHttpRequest;var $e=null==Ee?void 0:Ee.userAgent,Se=null!=xe?xe:{},Me=function(e,r){var{debugEnabled:n}=void 0===r?{}:r,t={k(r){if(xe&&(Se.POSTHOG_DEBUG||n)&&!s(xe.console)&&xe.console){for(var t=("__rrweb_original__"in xe.console[r]?xe.console[r].__rrweb_original__:xe.console[r]),i=arguments.length,o=new Array(i>1?i-1:0),a=1;i>a;a++)o[a-1]=arguments[a];t(e,...o)}},debug(){for(var e=arguments.length,r=new Array(e),n=0;e>n;n++)r[n]=arguments[n];t.k("debug",...r)},info(){for(var e=arguments.length,r=new Array(e),n=0;e>n;n++)r[n]=arguments[n];t.k("log",...r)},warn(){for(var e=arguments.length,r=new Array(e),n=0;e>n;n++)r[n]=arguments[n];t.k("warn",...r)},error(){for(var e=arguments.length,r=new Array(e),n=0;e>n;n++)r[n]=arguments[n];t.k("error",...r)},critical(){for(var r=arguments.length,n=new Array(r),t=0;r>t;t++)n[t]=arguments[t];console.error(e,...n)},uninitializedWarning(e){t.error("You must initialize PostHog before calling "+e)},createLogger:(r,n)=>Me(e+" "+r,n)};return t},ke=Me("[PostHog.js]"),Pe=ke.createLogger;function Ae(e,r){if(!c(e))if(a(e))e.forEach(r);else if(f(e))e.forEach(((e,n)=>r(e,n)));else for(var n in e)i.call(e,n)&&r(e[n],n)}var Oe=function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),t=1;r>t;t++)n[t-1]=arguments[t];for(var i of n)for(var o in i)void 0!==i[o]&&(e[o]=i[o]);return e},Be=e=>{var r=null==Re?void 0:Re.createElement("a");return s(r)?null:(r.href=e,r)},De=function(e,r,n){if(!e||!r||!r.length)return e;for(var t=e.split("#"),i=t[1],o=(t[0]||"").split("?"),l=o[1],u=o[0],s=(l||"").split("&"),c=[],d=0;s.length>d;d++){var f=s[d].split("=");a(f)&&(r.includes(f[0])?c.push(f[0]+"="+n):c.push(s[d]))}var v=u;return null!=l&&(v+="?"+c.join("&")),null!=i&&(v+="#"+i),v};Math.trunc||(Math.trunc=function(e){return 0>e?Math.ceil(e):Math.floor(e)}),Number.isInteger||(Number.isInteger=function(e){return d(e)&&isFinite(e)&&Math.floor(e)===e});class Ie{constructor(e){if(this.bytes=e,16!==e.length)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,r,n,t){if(!Number.isInteger(e)||!Number.isInteger(r)||!Number.isInteger(n)||!Number.isInteger(t)||0>e||0>r||0>n||0>t||e>0xffffffffffff||r>4095||n>1073741823||t>4294967295)throw new RangeError("invalid field value");var i=new Uint8Array(16);return i[0]=e/Math.pow(2,40),i[1]=e/Math.pow(2,32),i[2]=e/Math.pow(2,24),i[3]=e/Math.pow(2,16),i[4]=e/Math.pow(2,8),i[5]=e,i[6]=112|r>>>8,i[7]=r,i[8]=128|n>>>24,i[9]=n>>>16,i[10]=n>>>8,i[11]=n,i[12]=t>>>24,i[13]=t>>>16,i[14]=t>>>8,i[15]=t,new Ie(i)}toString(){for(var e="",r=0;this.bytes.length>r;r++)e=e+(this.bytes[r]>>>4).toString(16)+(15&this.bytes[r]).toString(16),3!==r&&5!==r&&7!==r&&9!==r||(e+="-");if(36!==e.length)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new Ie(this.bytes.slice(0))}equals(e){return 0===this.compareTo(e)}compareTo(e){for(var r=0;16>r;r++){var n=this.bytes[r]-e.bytes[r];if(0!==n)return Math.sign(n)}return 0}}class Ne{constructor(){this.S=0,this.C=0,this.I=new Ce}generate(){var e=this.generateOrAbort();if(s(e)){this.S=0;var r=this.generateOrAbort();if(s(r))throw new Error("Could not generate UUID after timestamp reset");return r}return e}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.M();else{if(this.S>=e+1e4)return;this.C++,this.C>4398046511103&&(this.S++,this.M())}return Ie.fromFieldsV7(this.S,Math.trunc(this.C/Math.pow(2,30)),this.C&Math.pow(2,30)-1,this.I.nextUint32())}M(){this.C=1024*this.I.nextUint32()+(1023&this.I.nextUint32())}}var Ue,Te=e=>{if("undefined"!=typeof UUIDV7_DENY_WEAK_RNG&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var r=0;e.length>r;r++)e[r]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return e};xe&&!s(xe.crypto)&&crypto.getRandomValues&&(Te=e=>crypto.getRandomValues(e));class Ce{constructor(){this.R=new Uint32Array(8),this.O=1/0}nextUint32(){return this.R.length>this.O||(Te(this.R),this.O=0),this.R[this.O++]}}var We=()=>(Ue||(Ue=new Ne)).generate(),Fe="",Le=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i;function je(e,r){if(r){var n=function(e,r){if(void 0===r&&(r=Re),Fe)return Fe;if(!r)return"";if(["localhost","127.0.0.1"].includes(e))return"";for(var n=e.split("."),t=Math.min(n.length,8),i="dmn_chk_"+We().toString();!Fe&&t--;){var o=n.slice(t).join("."),a=i+"=1;domain=."+o+";path=/";r.cookie=a+";max-age=3",r.cookie.includes(i)&&(r.cookie=a+";max-age=0",Fe=o)}return Fe}(e);if(!n){var t=(e=>{var r=e.match(Le);return r?r[0]:""})(e);t!==n&&ke.info("Warning: cookie subdomain discovery mismatch",t,n),n=t}return n?"; domain=."+n:""}return""}var ze={N:()=>!!Re,D(e){ke.error("cookieStore error: "+e)},A(e){if(Re){try{for(var r=e+"=",n=Re.cookie.split(";").filter((e=>e.length)),t=0;n.length>t;t++){for(var i=n[t];" "==i.charAt(0);)i=i.substring(1,i.length);if(0===i.indexOf(r))return decodeURIComponent(i.substring(r.length,i.length))}}catch(e){}return null}},F(e){var r;try{r=JSON.parse(ze.A(e))||{}}catch(e){}return r},q(e,r,n,t,i){if(!Re)return!1;try{var o="",a="",l=je(Re.location.hostname,t);if(n){var u=new Date;u.setTime(u.getTime()+864e5*n),o="; expires="+u.toUTCString()}i&&(a="; secure");var s=e+"="+encodeURIComponent(JSON.stringify(r))+o+"; SameSite=Lax; path=/"+l+a;return s.length>3686.4&&ke.warn("cookieStore warning: large cookie, len="+s.length),Re.cookie=s,!0}catch(e){return!1}},P(e,r){if(null!=Re&&Re.cookie)try{ze.q(e,"",-1,r)}catch(e){return}}},Ge=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Ke=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...Ge],Ve=["$app_build","$app_name","$app_namespace","$app_version","$browser","$browser_version","$device_type","$current_url","$pathname","$os","$os_name","$os_version","$referring_domain","$referrer","$screen_height","$screen_width","$viewport_height","$viewport_width","$raw_user_agent"],He="<masked>",Xe=["li_fat_id"];function Ye(e,r,n){if(!Re)return{};var t,i,o,l=r?[...Ge,...n||[]]:[],u=(t=De(Re.URL,l,He),i=Ke.concat(e||[]),o={},Ae(i,(function(e){var r=function(e,r){for(var n,t=((e.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;t.length>i;i++){var o=t[i].split("=");if(o[0]===r){n=o;break}}if(!a(n)||2>n.length)return"";var l=n[1];try{l=decodeURIComponent(l)}catch(e){ke.error("Skipping decoding for malformed query param: "+l)}return l.replace(/\+/g," ")}(t,e);o[e]=r||null})),o),s=function(){var e={};return Ae(Xe,(function(r){var n=ze.A(r);e[r]=n||null})),e}();return Oe(s,u)}function qe(){return navigator.language||navigator.userLanguage}var Je="$direct";function Qe(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(e){return}}function Ze(){try{return(new Date).getTimezoneOffset()}catch(e){return}}function er(r,n,t,i){var a,l,u,s;if(void 0===i&&(i=!1),!$e)return{};var c,f,v,h,g,w,b,R,y,S,M,k,P=r?[...Ge,...n||[]]:[],[A,O]=function(e){for(var r=0;me.length>r;r++){var[n,t]=me[r],i=n.exec(e),o=i&&("function"==typeof t?t(i,e):t);if(o)return o}return["",""]}($e),B=null!=(c="undefined"!=typeof navigator?navigator:void 0)&&c.brave?{brave:!0}:{},D={detectGoogleSearchApp:t},I=Oe((M={$os:A,$os_version:O,$browser:pe($e,navigator.vendor,B,D),$device:_e($e),$device_type:(h=$e,g={userAgentDataPlatform:null==(a=navigator)||null==(a=a.userAgentData)?void 0:a.platform,maxTouchPoints:null==(l=navigator)?void 0:l.maxTouchPoints,screenWidth:null==xe||null==(u=xe.screen)?void 0:u.width,screenHeight:null==xe||null==(s=xe.screen)?void 0:s.height,devicePixelRatio:null==xe?void 0:xe.devicePixelRatio},S=_e(h),S===x||S===_||"Kobo"===S||"Kindle Fire"===S||S===J?m:S===F||S===j||S===L||S===X?"Console":S===E?"Wearable":S?p:"Android"===(null==g?void 0:g.userAgentDataPlatform)&&(null!==(w=null==g?void 0:g.maxTouchPoints)&&void 0!==w?w:0)>0?600>Math.min(null!==(b=null==g?void 0:g.screenWidth)&&void 0!==b?b:0,null!==(R=null==g?void 0:g.screenHeight)&&void 0!==R?R:0)/(null!==(y=null==g?void 0:g.devicePixelRatio)&&void 0!==y?y:1)?p:m:"Desktop"),$timezone:Qe(),$timezone_offset:Ze()},k={},Ae(M,(function(e,r){("[object String]"==o.call(e)&&e.length>0||d(e))&&(k[r]=e)})),k),{$current_url:De(i?(v=null==ye?void 0:ye.href,v?v.split("#")[0]:v):null==ye?void 0:ye.href,P,He),$host:null==ye?void 0:ye.host,$pathname:null==ye?void 0:ye.pathname,$raw_user_agent:$e.length>1e3?$e.substring(0,997)+"...":$e,$browser_version:we($e,navigator.vendor,B,D),$browser_language:qe(),$browser_language_prefix:(f=qe(),"string"==typeof f?f.split("-")[0]:void 0),$screen_height:null==xe?void 0:xe.screen.height,$screen_width:null==xe?void 0:xe.screen.width,$viewport_height:null==xe?void 0:xe.innerHeight,$viewport_width:null==xe?void 0:xe.innerWidth,$lib:e.LIB_NAME,$lib_version:e.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return e.SDK_DIST_CHANNEL&&(I.$sdk_dist_channel=e.SDK_DIST_CHANNEL),I}function rr(e,r){return[...e||[],...a(r)?r:[r]]}function nr(e,r){return(s(e)?1:e)*r}function tr(e,r){return function(e){for(var r=0,n=0;e.length>n;n++)r=(r<<5)-r+e.charCodeAt(n),r|=0;return Math.abs(r)}(e)%100<v(100*r,0,100,ke)}var ir=["type"];function or(e){var{type:r,executionTimeMs:n}=e;return r+(c(n)?"":" ("+n.toFixed(2)+"ms)")}var ar=Pe("[PostHog Action RateLimiting]");function lr(e,r){console.log(e,r)}function ur(e,r,n){if(void 0===n&&(n=5),"object"!=typeof e||"object"!=typeof r)return{};if(e===r)return{};if(!e&&r)return r;if(!r||!e)return{};var t={},i=new Set([...Object.keys(e),...Object.keys(r)]);for(var o of i){var a=e[o],d=r[o];if(s(a))t[o]=d;else if(s(d))t[o]=a;else if(!(a===d||c(a)&&c(d)))if(l(a)&&l(d))if(n>1){var f=ur(a,d,n-1);u(f)||(t[o]=f)}else t[o]="max depth reached, checking for changed value";else t[o]=d}return t}var sr,cr,dr,fr=(sr=null,cr=0,dr=null,{info(e){dr!==e&&(cr=0,dr=e),cr++,sr&&clearTimeout(sr),sr=setTimeout((()=>{ar.info(1===cr?'action "'+e+'" has been rate limited':'action "'+e+'" has been rate limited ('+cr+" times)"),cr=0,sr=null}),1e3)}});function vr(e){void 0===e&&(e={});var{maskAction:r,maskState:n,titleFunction:t=or,logger:i=lr,include:o={prevState:!0,nextState:!1,changedState:!0},rateLimiterRefillRate:a=1,rateLimiterBucketSize:l=10,__stateComparisonDepth:u}=e,s=new h({refillRate:a,bucketSize:l,refillInterval:1e3,Ae:ar});return e=>a=>l=>{var c=l,d=e.getState(),f=performance.now(),v=a(c),h=performance.now()-f,p=e.getState(),g=r?r(c):c;if(!g)return v;if(s.consumeRateLimit(c.type))fr.info(c.type);else try{var w=n?n(d,g):d,m=n?n(p,g):p,_=o.changedState?ur(w,m,null!=u?u:5):void 0,{type:x}=g,b={type:x,payload:function(e,r){if(null==e)return{};var n={};for(var t in e)if({}.hasOwnProperty.call(e,t)){if(-1!==r.indexOf(t))continue;n[t]=e[t]}return n}(g,ir),timestamp:Date.now(),executionTimeMs:h,prevState:o.prevState?w:void 0,nextState:o.nextState?m:void 0,changedState:o.changedState?_:void 0},E=t(b);i(E,b)}catch(e){ar.error("Error logging state:",e)}return v}}Se.posthogCustomizations=Object.freeze({__proto__:null,browserConsoleLogger:lr,posthogKeaLogger(e){void 0===e&&(e={});var r=vr(e);return{name:"posthog-kea-logger",events:{beforeReduxStore(e){e.middleware.push(r)}}}},posthogReduxLogger:vr,printAndDropEverything:e=>(console.log("Would have sent event:",e),null),sampleByDistinctId:e=>n=>n&&tr(n.properties.distinct_id,e)?r({},n,{properties:r({},n.properties,{$sample_type:["sampleByDistinctId"],$sample_threshold:e})}):null,sampleByEvent:(e,t)=>i=>{var o,a,l;return i?n(e,i.event)?100*Math.random()<v(100*t,0,100,ke)?r({},i,{properties:r({},i.properties,{$sample_type:rr(null==(o=i.properties)?void 0:o.$sample_type,"sampleByEvent"),$sample_threshold:nr(null==(a=i.properties)?void 0:a.$sample_threshold,t),$sampled_events:rr(null==(l=i.properties)?void 0:l.$sampled_events,e)})}):null:i:null},sampleBySessionId:e=>n=>n&&tr(n.properties.$session_id,e)?r({},n,{properties:r({},n.properties,{$sample_type:rr(n.properties.$sample_type,"sampleBySessionId"),$sample_threshold:nr(n.properties.$sample_threshold,e)})}):null,sessionRecordingLoggerForPostHogInstance:e=>(r,n)=>{var t;null==e||null==(t=e.sessionRecording)||t.tryAddCustomEvent("app-state",{title:r,stateEvent:n})},setAllPersonProfilePropertiesAsPersonPropertiesForFlags(e){var r,t=Oe({},er(e.config.mask_personal_data_properties,e.config.custom_personal_data_properties,e.config.detect_google_search_app,e.config.disable_capture_url_hashes),Ye(e.config.custom_campaign_params,e.config.mask_personal_data_properties,e.config.custom_personal_data_properties),{$referrer:(null==Re?void 0:Re.referrer)||Je,$referring_domain:null!=Re&&Re.referrer&&(null==(r=Be(Re.referrer))?void 0:r.host)||Je}),i={};Ae(t,(function(e,r){(n(Ke,r)||n(Ve,r))&&(i[r]=e)})),e.setPersonPropertiesForFlags(i)}})}();
//# sourceMappingURL=customizations.full.js.map

@@ -1,2 +0,2 @@

!function(){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(t){for(var r=1;arguments.length>r;r++){var e=arguments[r];for(var i in e)({}).hasOwnProperty.call(e,i)&&(t[i]=e[i])}return t},t.apply(null,arguments)}var r="undefined"!=typeof window?window:void 0,e="undefined"!=typeof globalThis?globalThis:r;"undefined"==typeof self&&(e.self=e),"undefined"==typeof File&&(e.File=function(){});var i=null==e?void 0:e.document;null!=e&&e.XMLHttpRequest&&new e.XMLHttpRequest;var n=null!=r?r:{};function a(t,r){return-1!==t.indexOf(r)}var s=function(t){return t.trim()},l=Object.prototype,o=l.hasOwnProperty,u=l.toString,c=Array.isArray||function(t){return"[object Array]"===u.call(t)},v=t=>"function"==typeof t,h=t=>void 0===t,f=t=>"[object String]"==u.call(t),d=t=>null===t,_=t=>h(t)||d(t),b=t=>"[object Number]"==u.call(t)&&t==t,m=t=>t instanceof FormData;function p(t){return t?t.split("#")[0]:t}var g=function(t,e){var{debugEnabled:i}=void 0===e?{}:e,a={k(e){if(r&&(n.POSTHOG_DEBUG||i)&&!h(r.console)&&r.console){for(var a=("__rrweb_original__"in r.console[e]?r.console[e].__rrweb_original__:r.console[e]),s=arguments.length,l=new Array(s>1?s-1:0),o=1;s>o;o++)l[o-1]=arguments[o];a(t,...l)}},debug(){for(var t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];a.k("debug",...r)},info(){for(var t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];a.k("log",...r)},warn(){for(var t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];a.k("warn",...r)},error(){for(var t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];a.k("error",...r)},critical(){for(var r=arguments.length,e=new Array(r),i=0;r>i;i++)e[i]=arguments[i];console.error(t,...e)},uninitializedWarning(t){a.error("You must initialize PostHog before calling "+t)},createLogger:(r,e)=>g(t+" "+r,e)};return a},y=g("[PostHog.js]"),k=y.createLogger;function w(t,r){if(!_(t))if(c(t))t.forEach(r);else if(m(t))t.forEach(((t,e)=>r(t,e)));else for(var e in t)o.call(t,e)&&r(t[e],e)}var A=function(t){for(var r=arguments.length,e=new Array(r>1?r-1:0),i=1;r>i;i++)e[i-1]=arguments[i];for(var n of e)for(var a in n)void 0!==n[a]&&(t[a]=n[a]);return t};function x(t){for(var r=Object.keys(t),e=r.length,i=new Array(e);e--;)i[e]=[r[e],t[r[e]]];return i}function C(t,r,e,i){var{capture:n=!1,passive:a=!0}=null!=i?i:{};null==t||t.addEventListener(r,e,{capture:n,passive:a})}var E=1,O=3,j=11;function D(t){return!!t&&t.nodeType===E}function L(t,r){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===r.toLowerCase()}function T(t){return!!t&&t.nodeType===j&&D(t.host)}function R(t){return t?s(t).split(/\s+/):[]}function H(t){var r="";switch(typeof t.className){case"string":r=t.className;break;case"object":r=(t.className&&"baseVal"in t.className?t.className.baseVal:null)||t.getAttribute("class")||"";break;default:r=""}return R(r)}function M(t){var r="";return B(t)&&!F(t)&&t.childNodes&&t.childNodes.length&&w(t.childNodes,(function(t){var e,i;(function(t){return!!t&&t.nodeType===O})(t)&&t.textContent&&(r+=null!==(e=_(i=t.textContent)?null:s(i).split(/(\s+)/).filter((t=>Z(t))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255))&&void 0!==e?e:"")})),s(r)}var I=["a","button","form","input","select","textarea","label"];function S(t){var r=t.parentNode;return!(!r||!D(r))&&r}var U=[".ph-no-deadclick",".ph-no-capture"];var z=t=>!t||L(t,"html")||!D(t),P=(t,e)=>{if(!r||z(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var i=!1,n=[t],a=t;a.parentNode&&!L(a,"body");)if(T(a.parentNode))n.push(a.parentNode.host),a=a.parentNode.host;else{var s=S(a);if(!s)break;if(I.indexOf(s.tagName.toLowerCase())>-1)i=!0;else{var l=r.getComputedStyle(s);l&&"pointer"===l.getPropertyValue("cursor")&&(i=!0)}n.push(s),a=s}return{parentIsUsefulElement:i,targetElementList:n}};function B(t){for(var r=t;r.parentNode&&!L(r,"body");r=r.parentNode){var e=H(r);if(a(e,"ph-sensitive")||a(e,"ph-no-capture"))return!1}if(a(H(t),"ph-include"))return!0;var i=t.type||"";if(f(i))switch(i.toLowerCase()){case"hidden":case"password":return!1}var n=t.name||t.id||"";return!f(n)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(n.replace(/[^a-zA-Z0-9]/g,""))}function F(t){return!!(L(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||L(t,"select")||L(t,"textarea")||"true"===t.getAttribute("contenteditable"))}var N="(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})",V=new RegExp("^(?:"+N+")$"),W=new RegExp(N),q="\\d{3}-?\\d{2}-?\\d{4}",G=new RegExp("^("+q+")$"),Y=new RegExp("("+q+")");function Z(t,r){if(void 0===r&&(r=!0),_(t))return!1;if(f(t)){if(t=s(t),(r?V:W).test((t||"").replace(/[- ]/g,"")))return!1;if((r?G:Y).test(t))return!1}return!0}function J(t){var r=M(t);return Z(r=(r+" "+K(t)).trim())?r:""}function K(t){var r="";return t&&t.childNodes&&t.childNodes.length&&w(t.childNodes,(function(t){var e;if(t&&"span"===(null==(e=t.tagName)?void 0:e.toLowerCase()))try{var i=M(t);r=(r+" "+i).trim(),t.childNodes&&t.childNodes.length&&(r=(r+" "+K(t)).trim())}catch(t){y.error("[AutoCapture]",t)}})),r}function Q(t){return t.replace(/"|\\"/g,'\\"')}function X(t){var r=t.attr__class;return r?c(r)?r:R(r):void 0}function tt(t,r){return r.length>t?r.slice(0,t)+"...":r}function rt(t){if(t.previousElementSibling)return t.previousElementSibling;var r=t;do{r=r.previousSibling}while(r&&!D(r));return r}function et(e,n){var s,l,{e:o,maskAllElementAttributes:u,maskAllText:c,elementAttributeIgnoreList:v,disableCaptureUrlHashes:d}=n;if(!D(e))return{props:{}};for(var _=[e],b=e;b.parentNode&&!L(b,"body");)if(T(b.parentNode))_.push(b.parentNode.host),b=b.parentNode.host;else{if(!D(b.parentNode))break;_.push(b.parentNode),b=b.parentNode}var m,g,y,k,C=[],E={},O=!1,j=!1;if(w(_,(t=>{var r=B(t);if(L(t,"a")){var e=t.getAttribute("href");O=!!(r&&e&&Z(e))&&(d?p(e):e)}a(H(t),"ph-no-capture")&&(j=!0),C.push(function(t,r,e,i,n){void 0===n&&(n=!1);var a=t.tagName.toLowerCase(),s={tag_name:a};I.indexOf(a)>-1&&!e&&(s.$el_text="a"===a.toLowerCase()||"button"===a.toLowerCase()?tt(1024,J(t)):tt(1024,M(t)));var l=H(t);l.length>0&&(s.classes=l.filter((function(t){return""!==t}))),w(t.attributes,(function(e){var a;if((!F(t)||-1!==["name","id","class","aria-label"].indexOf(e.name))&&(null==i||!i.includes(e.name))&&!r&&Z(e.value)&&(!f(a=e.name)||"_ngcontent"!==a.substring(0,10)&&"_nghost"!==a.substring(0,7))){var l=e.value;"class"===e.name&&(l=R(l).join(" ")),s["attr__"+e.name]=tt(1024,"href"===e.name&&n?p(l):l)}}));for(var o=1,u=1,c=t;c=rt(c);)o++,c.tagName===t.tagName&&u++;return s.nth_child=o,s.nth_of_type=u,s}(t,u,c,v,d));var i=function(t){if(!B(t))return{};var r={};return w(t.attributes,(function(t){if(t.name&&0===t.name.indexOf("data-ph-capture-attribute")){var e=t.name.replace("data-ph-capture-attribute-",""),i=t.value;e&&i&&Z(i)&&(r[e]=i)}})),r}(t);A(E,i)})),j)return{props:{},explicitNoCapture:j};if(c||(C[0].$el_text=L(e,"a")||L(e,"button")?J(e):M(e)),O){var S,U;C[0].attr__href=O;var z=null==(g=O,y=null==i?void 0:i.createElement("a"),S=h(y)?null:(y.href=g,y))?void 0:S.host,P=null==r||null==(U=r.location)?void 0:U.host;z&&P&&z!==P&&(m=O)}return{props:A({$event_type:o.type,$ce_version:1},{$elements:C},{$elements_chain:(k=C,function(r){return r.map((r=>{var e,i,n="";if(r.tag_name&&(n+=r.tag_name),r.attr_class)for(var a of(r.attr_class.sort(),r.attr_class))n+="."+a.replace(/"/g,"");var s=t({},r.text?{text:r.text}:{},{"nth-child":null!==(e=r.nth_child)&&void 0!==e?e:0,"nth-of-type":null!==(i=r.nth_of_type)&&void 0!==i?i:0},r.href?{href:r.href}:{},r.attr_id?{attr_id:r.attr_id}:{},r.attributes),l={};return x(s).sort(((t,r)=>{var[e]=t,[i]=r;return e.localeCompare(i)})).forEach((t=>{var[r,e]=t;return l[Q(r.toString())]=Q(e.toString())})),(n+=":")+x(l).map((t=>{var[r,e]=t;return r+'="'+e+'"'})).join("")})).join(";")}(function(t){return t.map((t=>{var r,e,i={text:null==(r=t.$el_text)?void 0:r.slice(0,400),tag_name:t.tag_name,href:null==(e=t.attr__href)?void 0:e.slice(0,2048),attr_class:X(t),attr_id:t.attr__id,nth_child:t.nth_child,nth_of_type:t.nth_of_type,attributes:{}};return x(t).filter((t=>{var[r]=t;return 0===r.indexOf("attr__")})).forEach((t=>{var[r,e]=t;return i.attributes[r]=e})),i}))}(k)))},null!=(s=C[0])&&s.$el_text?{$el_text:null==(l=C[0])?void 0:l.$el_text}:{},m&&"click"===o.type?{$external_click_url:m}:{},E)}}k("[AutoCapture]");var it={};function nt(t){return function(t,e){var i=it[t];if(i)return i;var n,a=e[t];if(v(n=a)&&-1!==n.toString().indexOf("[native code]")&&!r.Zone)return it[t]=a.bind(e);var s=e.document;if(s&&v(s.createElement))try{var l=s.createElement("iframe");l.hidden=!0,s.head.appendChild(l);var o=l.contentWindow;o&&o[t]&&(a=o[t]),s.head.removeChild(l)}catch(r){y.warn("Could not create sandbox iframe for "+t+" check, bailing to assignableWindow."+t+": ",r)}return a&&v(a)?it[t]=a.bind(e):a}("MutationObserver",t)}function at(t,r){return b(t)&&t>=r}class st{ce(t){var r,e,i,n,a,s=this.de((null==t?void 0:t.__onCapture)||this.he.bind(this));return{element_attribute_ignorelist:null!==(r=null==t?void 0:t.element_attribute_ignorelist)&&void 0!==r?r:s.element_attribute_ignorelist,scroll_threshold_ms:null!==(e=null==t?void 0:t.scroll_threshold_ms)&&void 0!==e?e:s.scroll_threshold_ms,selection_change_threshold_ms:null!==(i=null==t?void 0:t.selection_change_threshold_ms)&&void 0!==i?i:s.selection_change_threshold_ms,mutation_threshold_ms:null!==(n=null==t?void 0:t.mutation_threshold_ms)&&void 0!==n?n:s.mutation_threshold_ms,capture_clicks_with_modifier_keys:null!==(a=null==t?void 0:t.capture_clicks_with_modifier_keys)&&void 0!==a?a:s.capture_clicks_with_modifier_keys,css_selector_ignorelist:null==t?void 0:t.css_selector_ignorelist,__onCapture:s.__onCapture}}constructor(t,r){this.ve=[],this.de=t=>({element_attribute_ignorelist:[],scroll_threshold_ms:100,selection_change_threshold_ms:100,mutation_threshold_ms:2500,capture_clicks_with_modifier_keys:!1,__onCapture:t}),this.fe=t=>{var r=function(t){var r,e,i=h((r=t).target)?r.srcElement||null:null!=(e=r.target)&&e.shadowRoot?r.composedPath()[0]||null:r.target||null;return i?{node:i,originalEvent:t,timestamp:Date.now()}:null}(t);d(r)||this.pe(r)||this.ve.push(r),this.ve.length&&h(this.me)&&(this.me=n.setTimeout((()=>{this.ye()}),1e3))},this.ge=()=>{var t=Date.now();t%50==0&&this.ve.forEach((r=>{h(r.scrollDelayMs)&&(r.scrollDelayMs=t-r.timestamp)}))},this.be=()=>{this.we=Date.now()},this.ke=()=>{"visible"===(null==i?void 0:i.visibilityState)&&(this.xe=Date.now())},this.instance=t,this.Se=this.ce(r),this._onCapture=this.Se.__onCapture}start(t){this.Ce(),this.Ie(),this.Me(),this.Te(),this._e(t)}_e(t){if(!this.Re){var r=nt(n);this.Re=new r((t=>{this.Le(t)})),this.Re.observe(t,{attributes:!0,characterData:!0,childList:!0,subtree:!0})}}stop(){var t;null==(t=this.Re)||t.disconnect(),this.Re=void 0,n.removeEventListener("click",this.fe),n.removeEventListener("scroll",this.ge,{capture:!0}),n.removeEventListener("selectionchange",this.be),null==i||i.removeEventListener("visibilitychange",this.ke)}Le(t){this.Oe=Date.now()}Ce(){C(n,"click",this.fe)}Ie(){C(n,"scroll",this.ge,{capture:!0})}Me(){C(n,"selectionchange",this.be)}Te(){C(i,"visibilitychange",this.ke)}pe(t){return!(t&&(this.Se.capture_clicks_with_modifier_keys||!((e=t.originalEvent).ctrlKey||e.metaKey||e.altKey||e.shiftKey))&&!((i=t.node)instanceof Element&&("__POSTHOG_TOOLBAR__"===i.id||null!=i.closest&&i.closest(".toolbar-global-fade-container")))&&!this.ve.some((r=>r.node===t.node&&1e3>Math.abs(r.timestamp-t.timestamp)))&&!L(t.node,"html")&&D(t.node)&&!function(t){if(!r||z(t))return!1;var{targetElementList:e}=P(t);return e.some((t=>L(t,"a")))}(t.node)&&function(t,e){var i;if(!r||z(t))return!1;var n="[object Boolean]"===u.call(e)?U:null!==(i=null==e?void 0:e.css_selector_ignorelist)&&void 0!==i?i:U,{targetElementList:a}=P(t);return!function(t,r){if(h(r))return!0;var e,i=function(t){if(r.some((r=>function(t,r){var e=t.matches||t.matchesSelector||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||t.oMatchesSelector;try{return!!e&&e.call(t,r)}catch(t){return!1}}(t,r))))return{v:!0}};for(var n of t)if(e=i(n))return e.v;return!1}(a,n)}(t.node,{css_selector_ignorelist:this.Se.css_selector_ignorelist}));var e,i}ye(){if(this.ve.length){clearTimeout(this.me),this.me=void 0;var t=this.ve;for(var r of(this.ve=[],t)){var e;r.mutationDelayMs=null!==(e=r.mutationDelayMs)&&void 0!==e?e:this.Oe&&this.Oe>=r.timestamp?this.Oe-r.timestamp:void 0,r.absoluteDelayMs=Date.now()-r.timestamp,r.selectionChangedDelayMs=this.we&&this.we>=r.timestamp?this.we-r.timestamp:void 0,r.visibilityChangedDelayMs=this.xe?Math.abs(r.timestamp-this.xe):void 0;var i=at(r.scrollDelayMs,this.Se.scroll_threshold_ms),a=at(r.selectionChangedDelayMs,this.Se.selection_change_threshold_ms),s=at(r.mutationDelayMs,this.Se.mutation_threshold_ms),l=at(r.absoluteDelayMs,1.1*this.Se.mutation_threshold_ms),o=b(r.scrollDelayMs)&&this.Se.scroll_threshold_ms>r.scrollDelayMs,u=b(r.mutationDelayMs)&&this.Se.mutation_threshold_ms>r.mutationDelayMs,c=b(r.selectionChangedDelayMs)&&this.Se.selection_change_threshold_ms>r.selectionChangedDelayMs,v=b(r.visibilityChangedDelayMs)&&this.Se.selection_change_threshold_ms>r.visibilityChangedDelayMs;if(!(o||u||c||v)){var f=at(r.visibilityChangedDelayMs,this.Se.selection_change_threshold_ms);i||s||l||a||f?this._onCapture(r,{$dead_click_last_mutation_timestamp:this.Oe,$dead_click_event_timestamp:r.timestamp,$dead_click_scroll_timeout:i,$dead_click_mutation_timeout:s,$dead_click_absolute_timeout:l,$dead_click_selection_changed_timeout:a,$dead_click_visibility_changed_timeout:f}):this.Se.mutation_threshold_ms>r.absoluteDelayMs&&this.ve.push(r)}}this.ve.length&&h(this.me)&&(this.me=n.setTimeout((()=>{this.ye()}),1e3))}}he(r,e){this.instance.capture("$dead_click",t({},e,et(r.node,{e:r.originalEvent,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Se.element_attribute_ignorelist,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}).props,{$dead_click_scroll_delay_ms:r.scrollDelayMs,$dead_click_mutation_delay_ms:r.mutationDelayMs,$dead_click_absolute_delay_ms:r.absoluteDelayMs,$dead_click_selection_changed_delay_ms:r.selectionChangedDelayMs,$dead_click_visibility_changed_delay_ms:r.visibilityChangedDelayMs}),{timestamp:new Date(r.timestamp)})}}n.__PosthogExtensions__=n.__PosthogExtensions__||{},n.__PosthogExtensions__.initDeadClicksAutocapture=(t,r)=>new st(t,r)}();
!function(){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(t){for(var r=1;arguments.length>r;r++){var e=arguments[r];for(var i in e)({}).hasOwnProperty.call(e,i)&&(t[i]=e[i])}return t},t.apply(null,arguments)}var r="undefined"!=typeof window?window:void 0,e="undefined"!=typeof globalThis?globalThis:r;"undefined"==typeof self&&(e.self=e),"undefined"==typeof File&&(e.File=function(){});var i=null==e?void 0:e.document;null!=e&&e.XMLHttpRequest&&new e.XMLHttpRequest;var n=null!=r?r:{};function a(t,r){return-1!==t.indexOf(r)}var s=function(t){return t.trim()},l=Object.prototype,o=l.hasOwnProperty,u=l.toString,c=Array.isArray||function(t){return"[object Array]"===u.call(t)},v=t=>"function"==typeof t,h=t=>void 0===t,f=t=>"[object String]"==u.call(t),d=t=>null===t,_=t=>h(t)||d(t),b=t=>"[object Number]"==u.call(t)&&t==t,m=t=>t instanceof FormData;function p(t){return t?t.split("#")[0]:t}var g=function(t,e){var{debugEnabled:i}=void 0===e?{}:e,a={k(e){if(r&&(n.POSTHOG_DEBUG||i)&&!h(r.console)&&r.console){for(var a=("__rrweb_original__"in r.console[e]?r.console[e].__rrweb_original__:r.console[e]),s=arguments.length,l=new Array(s>1?s-1:0),o=1;s>o;o++)l[o-1]=arguments[o];a(t,...l)}},debug(){for(var t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];a.k("debug",...r)},info(){for(var t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];a.k("log",...r)},warn(){for(var t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];a.k("warn",...r)},error(){for(var t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];a.k("error",...r)},critical(){for(var r=arguments.length,e=new Array(r),i=0;r>i;i++)e[i]=arguments[i];console.error(t,...e)},uninitializedWarning(t){a.error("You must initialize PostHog before calling "+t)},createLogger:(r,e)=>g(t+" "+r,e)};return a},y=g("[PostHog.js]"),k=y.createLogger;function w(t,r){if(!_(t))if(c(t))t.forEach(r);else if(m(t))t.forEach(((t,e)=>r(t,e)));else for(var e in t)o.call(t,e)&&r(t[e],e)}var A=function(t){for(var r=arguments.length,e=new Array(r>1?r-1:0),i=1;r>i;i++)e[i-1]=arguments[i];for(var n of e)for(var a in n)void 0!==n[a]&&(t[a]=n[a]);return t};function x(t){for(var r=Object.keys(t),e=r.length,i=new Array(e);e--;)i[e]=[r[e],t[r[e]]];return i}function C(t,r,e,i){var{capture:n=!1,passive:a=!0}=null!=i?i:{};null==t||t.addEventListener(r,e,{capture:n,passive:a})}var E=1,O=3,j=11;function D(t){return!!t&&t.nodeType===E}function L(t,r){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===r.toLowerCase()}function T(t){return!!t&&t.nodeType===j&&D(t.host)}function R(t){return t?s(t).split(/\s+/):[]}function H(t){var r="";switch(typeof t.className){case"string":r=t.className;break;case"object":r=(t.className&&"baseVal"in t.className?t.className.baseVal:null)||t.getAttribute("class")||"";break;default:r=""}return R(r)}function M(t){var r="";return B(t)&&!F(t)&&t.childNodes&&t.childNodes.length&&w(t.childNodes,(function(t){var e,i;(function(t){return!!t&&t.nodeType===O})(t)&&t.textContent&&(r+=null!==(e=_(i=t.textContent)?null:s(i).split(/(\s+)/).filter((t=>Z(t))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255))&&void 0!==e?e:"")})),s(r)}var I=["a","button","form","input","select","textarea","label"];function S(t){var r=t.parentNode;return!(!r||!D(r))&&r}var U=[".ph-no-deadclick",".ph-no-capture"];var z=t=>!t||L(t,"html")||!D(t),P=(t,e)=>{if(!r||z(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var i=!1,n=[t],a=t;a.parentNode&&!L(a,"body");)if(T(a.parentNode))n.push(a.parentNode.host),a=a.parentNode.host;else{var s=S(a);if(!s)break;if(I.indexOf(s.tagName.toLowerCase())>-1)i=!0;else try{var l=r.getComputedStyle(s);l&&"pointer"===l.getPropertyValue("cursor")&&(i=!0)}catch(t){}n.push(s),a=s}return{parentIsUsefulElement:i,targetElementList:n}};function B(t){for(var r=t;r.parentNode&&!L(r,"body");r=r.parentNode){var e=H(r);if(a(e,"ph-sensitive")||a(e,"ph-no-capture"))return!1}if(a(H(t),"ph-include"))return!0;var i=t.type||"";if(f(i))switch(i.toLowerCase()){case"hidden":case"password":return!1}var n=t.name||t.id||"";return!f(n)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(n.replace(/[^a-zA-Z0-9]/g,""))}function F(t){return!!(L(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||L(t,"select")||L(t,"textarea")||"true"===t.getAttribute("contenteditable"))}var N="(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})",V=new RegExp("^(?:"+N+")$"),W=new RegExp(N),q="\\d{3}-?\\d{2}-?\\d{4}",G=new RegExp("^("+q+")$"),Y=new RegExp("("+q+")");function Z(t,r){if(void 0===r&&(r=!0),_(t))return!1;if(f(t)){if(t=s(t),(r?V:W).test((t||"").replace(/[- ]/g,"")))return!1;if((r?G:Y).test(t))return!1}return!0}function J(t){var r=M(t);return Z(r=(r+" "+K(t)).trim())?r:""}function K(t){var r="";return t&&t.childNodes&&t.childNodes.length&&w(t.childNodes,(function(t){var e;if(t&&"span"===(null==(e=t.tagName)?void 0:e.toLowerCase()))try{var i=M(t);r=(r+" "+i).trim(),t.childNodes&&t.childNodes.length&&(r=(r+" "+K(t)).trim())}catch(t){y.error("[AutoCapture]",t)}})),r}function Q(t){return t.replace(/"|\\"/g,'\\"')}function X(t){var r=t.attr__class;return r?c(r)?r:R(r):void 0}function tt(t,r){return r.length>t?r.slice(0,t)+"...":r}function rt(t){if(t.previousElementSibling)return t.previousElementSibling;var r=t;do{r=r.previousSibling}while(r&&!D(r));return r}function et(e,n){var s,l,{e:o,maskAllElementAttributes:u,maskAllText:c,elementAttributeIgnoreList:v,disableCaptureUrlHashes:d}=n;if(!D(e))return{props:{}};for(var _=[e],b=e;b.parentNode&&!L(b,"body");)if(T(b.parentNode))_.push(b.parentNode.host),b=b.parentNode.host;else{if(!D(b.parentNode))break;_.push(b.parentNode),b=b.parentNode}var m,g,y,k,C=[],E={},O=!1,j=!1;if(w(_,(t=>{var r=B(t);if(L(t,"a")){var e=t.getAttribute("href");O=!!(r&&e&&Z(e))&&(d?p(e):e)}a(H(t),"ph-no-capture")&&(j=!0),C.push(function(t,r,e,i,n){void 0===n&&(n=!1);var a=t.tagName.toLowerCase(),s={tag_name:a};I.indexOf(a)>-1&&!e&&(s.$el_text="a"===a.toLowerCase()||"button"===a.toLowerCase()?tt(1024,J(t)):tt(1024,M(t)));var l=H(t);l.length>0&&(s.classes=l.filter((function(t){return""!==t}))),w(t.attributes,(function(e){var a;if((!F(t)||-1!==["name","id","class","aria-label"].indexOf(e.name))&&(null==i||!i.includes(e.name))&&!r&&Z(e.value)&&(!f(a=e.name)||"_ngcontent"!==a.substring(0,10)&&"_nghost"!==a.substring(0,7))){var l=e.value;"class"===e.name&&(l=R(l).join(" ")),s["attr__"+e.name]=tt(1024,"href"===e.name&&n?p(l):l)}}));for(var o=1,u=1,c=t;c=rt(c);)o++,c.tagName===t.tagName&&u++;return s.nth_child=o,s.nth_of_type=u,s}(t,u,c,v,d));var i=function(t){if(!B(t))return{};var r={};return w(t.attributes,(function(t){if(t.name&&0===t.name.indexOf("data-ph-capture-attribute")){var e=t.name.replace("data-ph-capture-attribute-",""),i=t.value;e&&i&&Z(i)&&(r[e]=i)}})),r}(t);A(E,i)})),j)return{props:{},explicitNoCapture:j};if(c||(C[0].$el_text=L(e,"a")||L(e,"button")?J(e):M(e)),O){var S,U;C[0].attr__href=O;var z=null==(g=O,y=null==i?void 0:i.createElement("a"),S=h(y)?null:(y.href=g,y))?void 0:S.host,P=null==r||null==(U=r.location)?void 0:U.host;z&&P&&z!==P&&(m=O)}return{props:A({$event_type:o.type,$ce_version:1},{$elements:C},{$elements_chain:(k=C,function(r){return r.map((r=>{var e,i,n="";if(r.tag_name&&(n+=r.tag_name),r.attr_class)for(var a of(r.attr_class.sort(),r.attr_class))n+="."+a.replace(/"/g,"");var s=t({},r.text?{text:r.text}:{},{"nth-child":null!==(e=r.nth_child)&&void 0!==e?e:0,"nth-of-type":null!==(i=r.nth_of_type)&&void 0!==i?i:0},r.href?{href:r.href}:{},r.attr_id?{attr_id:r.attr_id}:{},r.attributes),l={};return x(s).sort(((t,r)=>{var[e]=t,[i]=r;return e.localeCompare(i)})).forEach((t=>{var[r,e]=t;return l[Q(r.toString())]=Q(e.toString())})),(n+=":")+x(l).map((t=>{var[r,e]=t;return r+'="'+e+'"'})).join("")})).join(";")}(function(t){return t.map((t=>{var r,e,i={text:null==(r=t.$el_text)?void 0:r.slice(0,400),tag_name:t.tag_name,href:null==(e=t.attr__href)?void 0:e.slice(0,2048),attr_class:X(t),attr_id:t.attr__id,nth_child:t.nth_child,nth_of_type:t.nth_of_type,attributes:{}};return x(t).filter((t=>{var[r]=t;return 0===r.indexOf("attr__")})).forEach((t=>{var[r,e]=t;return i.attributes[r]=e})),i}))}(k)))},null!=(s=C[0])&&s.$el_text?{$el_text:null==(l=C[0])?void 0:l.$el_text}:{},m&&"click"===o.type?{$external_click_url:m}:{},E)}}k("[AutoCapture]");var it={};function nt(t){return function(t,e){var i=it[t];if(i)return i;var n,a=e[t];if(v(n=a)&&-1!==n.toString().indexOf("[native code]")&&!r.Zone)return it[t]=a.bind(e);var s=e.document;if(s&&v(s.createElement))try{var l=s.createElement("iframe");l.hidden=!0,s.head.appendChild(l);var o=l.contentWindow;o&&o[t]&&(a=o[t]),s.head.removeChild(l)}catch(r){y.warn("Could not create sandbox iframe for "+t+" check, bailing to assignableWindow."+t+": ",r)}return a&&v(a)?it[t]=a.bind(e):a}("MutationObserver",t)}function at(t,r){return b(t)&&t>=r}class st{ce(t){var r,e,i,n,a,s=this.de((null==t?void 0:t.__onCapture)||this.he.bind(this));return{element_attribute_ignorelist:null!==(r=null==t?void 0:t.element_attribute_ignorelist)&&void 0!==r?r:s.element_attribute_ignorelist,scroll_threshold_ms:null!==(e=null==t?void 0:t.scroll_threshold_ms)&&void 0!==e?e:s.scroll_threshold_ms,selection_change_threshold_ms:null!==(i=null==t?void 0:t.selection_change_threshold_ms)&&void 0!==i?i:s.selection_change_threshold_ms,mutation_threshold_ms:null!==(n=null==t?void 0:t.mutation_threshold_ms)&&void 0!==n?n:s.mutation_threshold_ms,capture_clicks_with_modifier_keys:null!==(a=null==t?void 0:t.capture_clicks_with_modifier_keys)&&void 0!==a?a:s.capture_clicks_with_modifier_keys,css_selector_ignorelist:null==t?void 0:t.css_selector_ignorelist,__onCapture:s.__onCapture}}constructor(t,r){this.ve=[],this.de=t=>({element_attribute_ignorelist:[],scroll_threshold_ms:100,selection_change_threshold_ms:100,mutation_threshold_ms:2500,capture_clicks_with_modifier_keys:!1,__onCapture:t}),this.fe=t=>{var r=function(t){var r,e,i=h((r=t).target)?r.srcElement||null:null!=(e=r.target)&&e.shadowRoot?r.composedPath()[0]||null:r.target||null;return i?{node:i,originalEvent:t,timestamp:Date.now()}:null}(t);d(r)||this.pe(r)||this.ve.push(r),this.ve.length&&h(this.me)&&(this.me=n.setTimeout((()=>{this.ye()}),1e3))},this.ge=()=>{var t=Date.now();t%50==0&&this.ve.forEach((r=>{h(r.scrollDelayMs)&&(r.scrollDelayMs=t-r.timestamp)}))},this.be=()=>{this.we=Date.now()},this.ke=()=>{"visible"===(null==i?void 0:i.visibilityState)&&(this.xe=Date.now())},this.instance=t,this.Se=this.ce(r),this._onCapture=this.Se.__onCapture}start(t){this.Ce(),this.Ie(),this.Me(),this.Te(),this._e(t)}_e(t){if(!this.Re){var r=nt(n);this.Re=new r((t=>{this.Le(t)})),this.Re.observe(t,{attributes:!0,characterData:!0,childList:!0,subtree:!0})}}stop(){var t;null==(t=this.Re)||t.disconnect(),this.Re=void 0,n.removeEventListener("click",this.fe),n.removeEventListener("scroll",this.ge,{capture:!0}),n.removeEventListener("selectionchange",this.be),null==i||i.removeEventListener("visibilitychange",this.ke)}Le(t){this.Oe=Date.now()}Ce(){C(n,"click",this.fe)}Ie(){C(n,"scroll",this.ge,{capture:!0})}Me(){C(n,"selectionchange",this.be)}Te(){C(i,"visibilitychange",this.ke)}pe(t){return!(t&&(this.Se.capture_clicks_with_modifier_keys||!((e=t.originalEvent).ctrlKey||e.metaKey||e.altKey||e.shiftKey))&&!((i=t.node)instanceof Element&&("__POSTHOG_TOOLBAR__"===i.id||null!=i.closest&&i.closest(".toolbar-global-fade-container")))&&!this.ve.some((r=>r.node===t.node&&1e3>Math.abs(r.timestamp-t.timestamp)))&&!L(t.node,"html")&&D(t.node)&&!function(t){if(!r||z(t))return!1;var{targetElementList:e}=P(t);return e.some((t=>L(t,"a")))}(t.node)&&function(t,e){var i;if(!r||z(t))return!1;var n="[object Boolean]"===u.call(e)?U:null!==(i=null==e?void 0:e.css_selector_ignorelist)&&void 0!==i?i:U,{targetElementList:a}=P(t);return!function(t,r){if(h(r))return!0;var e,i=function(t){if(r.some((r=>function(t,r){var e=t.matches||t.matchesSelector||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||t.oMatchesSelector;try{return!!e&&e.call(t,r)}catch(t){return!1}}(t,r))))return{v:!0}};for(var n of t)if(e=i(n))return e.v;return!1}(a,n)}(t.node,{css_selector_ignorelist:this.Se.css_selector_ignorelist}));var e,i}ye(){if(this.ve.length){clearTimeout(this.me),this.me=void 0;var t=this.ve;for(var r of(this.ve=[],t)){var e;r.mutationDelayMs=null!==(e=r.mutationDelayMs)&&void 0!==e?e:this.Oe&&this.Oe>=r.timestamp?this.Oe-r.timestamp:void 0,r.absoluteDelayMs=Date.now()-r.timestamp,r.selectionChangedDelayMs=this.we&&this.we>=r.timestamp?this.we-r.timestamp:void 0,r.visibilityChangedDelayMs=this.xe?Math.abs(r.timestamp-this.xe):void 0;var i=at(r.scrollDelayMs,this.Se.scroll_threshold_ms),a=at(r.selectionChangedDelayMs,this.Se.selection_change_threshold_ms),s=at(r.mutationDelayMs,this.Se.mutation_threshold_ms),l=at(r.absoluteDelayMs,1.1*this.Se.mutation_threshold_ms),o=b(r.scrollDelayMs)&&this.Se.scroll_threshold_ms>r.scrollDelayMs,u=b(r.mutationDelayMs)&&this.Se.mutation_threshold_ms>r.mutationDelayMs,c=b(r.selectionChangedDelayMs)&&this.Se.selection_change_threshold_ms>r.selectionChangedDelayMs,v=b(r.visibilityChangedDelayMs)&&this.Se.selection_change_threshold_ms>r.visibilityChangedDelayMs;if(!(o||u||c||v)){var f=at(r.visibilityChangedDelayMs,this.Se.selection_change_threshold_ms);i||s||l||a||f?this._onCapture(r,{$dead_click_last_mutation_timestamp:this.Oe,$dead_click_event_timestamp:r.timestamp,$dead_click_scroll_timeout:i,$dead_click_mutation_timeout:s,$dead_click_absolute_timeout:l,$dead_click_selection_changed_timeout:a,$dead_click_visibility_changed_timeout:f}):this.Se.mutation_threshold_ms>r.absoluteDelayMs&&this.ve.push(r)}}this.ve.length&&h(this.me)&&(this.me=n.setTimeout((()=>{this.ye()}),1e3))}}he(r,e){this.instance.capture("$dead_click",t({},e,et(r.node,{e:r.originalEvent,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Se.element_attribute_ignorelist,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}).props,{$dead_click_scroll_delay_ms:r.scrollDelayMs,$dead_click_mutation_delay_ms:r.mutationDelayMs,$dead_click_absolute_delay_ms:r.absoluteDelayMs,$dead_click_selection_changed_delay_ms:r.selectionChangedDelayMs,$dead_click_visibility_changed_delay_ms:r.visibilityChangedDelayMs}),{timestamp:new Date(r.timestamp)})}}n.__PosthogExtensions__=n.__PosthogExtensions__||{},n.__PosthogExtensions__.initDeadClicksAutocapture=(t,r)=>new st(t,r)}();
//# sourceMappingURL=dead-clicks-autocapture.js.map
{
"name": "posthog-js",
"version": "1.396.4",
"version": "1.396.5",
"bugs": {

@@ -10,3 +10,3 @@ "url": "https://github.com/PostHog/posthog-js/issues"

"author": "engineering@posthog.com",
"license": "SEE LICENSE IN LICENSE",
"license": "(Apache-2.0 AND MIT)",
"homepage": "https://posthog.com/docs/libraries/js",

@@ -13,0 +13,0 @@ "packageManager": "pnpm@10.12.4",

@@ -382,6 +382,9 @@ "use strict";

else {
var compStyles = globals_1.window.getComputedStyle(parentNode);
if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer') {
parentIsUsefulElement = true;
try {
var compStyles = globals_1.window.getComputedStyle(parentNode);
if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer') {
parentIsUsefulElement = true;
}
}
catch (_a) { }
}

@@ -452,6 +455,9 @@ targetElementList.push(parentNode);

}
var compStyles = globals_1.window.getComputedStyle(el);
if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer' && event.type === 'click') {
return true;
try {
var compStyles = globals_1.window.getComputedStyle(el);
if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer' && event.type === 'click') {
return true;
}
}
catch (_c) { }
var tag = el.tagName.toLowerCase();

@@ -458,0 +464,0 @@ switch (tag) {

@@ -1,1 +0,1 @@

{"version":3,"file":"autocapture-utils.js","sourceRoot":"","sources":["../../src/autocapture-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { AutocaptureConfig, PostHogConfig, Properties } from './types'\nimport type { PostHog } from './posthog-core'\nimport { each, entries } from './utils'\n\nimport { isNullish, isString, isUndefined, isArray, isBoolean } from '@posthog/core'\nimport { logger } from './utils/logger'\nimport { window } from './utils/globals'\nimport { getTargetingUrl } from './utils/url-targeting-utils'\nimport { isElementNode, isShadowRoot, isTag, isTextNode } from './utils/element-utils'\nimport { includes, trim } from '@posthog/core'\n\nexport function splitClassString(s: string): string[] {\n return s ? trim(s).split(/\\s+/) : []\n}\n\nfunction checkForURLMatches(urlsList: (string | RegExp)[], instance?: PostHog): boolean {\n const url = getTargetingUrl(instance)\n return !!(url && urlsList && urlsList.some((regex) => url.match(regex)))\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n *\n * Because this is a string it can contain unexpected characters\n * So, this method safely splits the className and returns that array.\n */\nexport function getClassNames(el: Element): string[] {\n let className = ''\n switch (typeof el.className) {\n case 'string':\n className = el.className\n break\n // TODO: when is this ever used?\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n className =\n (el.className && 'baseVal' in el.className ? (el.className as any).baseVal : null) ||\n el.getAttribute('class') ||\n ''\n break\n default:\n className = ''\n }\n\n return splitClassString(className)\n}\n\nexport function makeSafeText(s: string | null | undefined): string | null {\n if (isNullish(s)) {\n return null\n }\n\n return (\n trim(s)\n // scrub potentially sensitive values\n .split(/(\\s+)/)\n .filter((s) => shouldCaptureValue(s))\n .join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ')\n .replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255)\n )\n}\n\n/*\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @returns {string} the element's direct text content\n */\nexport function getSafeText(el: Element): string {\n let elText = ''\n\n if (shouldCaptureElement(el) && !isSensitiveElement(el) && el.childNodes && el.childNodes.length) {\n each(el.childNodes, function (child) {\n if (isTextNode(child) && child.textContent) {\n elText += makeSafeText(child.textContent) ?? ''\n }\n })\n }\n\n return trim(elText)\n}\n\nexport function getEventTarget(e: Event): Element | null {\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/target#Compatibility_notes\n if (isUndefined(e.target)) {\n return (e.srcElement as Element) || null\n } else {\n if ((e.target as HTMLElement)?.shadowRoot) {\n return (e.composedPath()[0] as Element) || null\n }\n return (e.target as Element) || null\n }\n}\n\nexport const autocaptureCompatibleElements = ['a', 'button', 'form', 'input', 'select', 'textarea', 'label']\n\n/*\n if there is no config, then all elements are allowed\n if there is a config, and there is an allow list, then only elements in the allow list are allowed\n assumes that some other code is checking this element's parents\n */\nfunction checkIfElementTreePassesElementAllowList(\n elements: Element[],\n autocaptureConfig: AutocaptureConfig | undefined\n): boolean {\n const allowlist = autocaptureConfig?.element_allowlist\n if (isUndefined(allowlist)) {\n // everything is allowed, when there is no allow list\n return true\n }\n\n // check each element in the tree\n // if any of the elements are in the allow list, then the tree is allowed\n for (const el of elements) {\n if (allowlist.some((elementType) => el.tagName.toLowerCase() === elementType)) {\n return true\n }\n }\n\n // otherwise there is an allow list and this element tree didn't match it\n return false\n}\n\nfunction elementMatchesCSSSelector(el: Element, selector: string): boolean {\n const matches =\n el.matches ||\n (el as any).matchesSelector ||\n (el as any).msMatchesSelector ||\n (el as any).mozMatchesSelector ||\n (el as any).webkitMatchesSelector ||\n (el as any).oMatchesSelector\n try {\n return matches ? matches.call(el, selector) : false\n } catch {\n return false\n }\n}\n\n/*\n if there is no selector list (i.e. it is undefined), then any elements matches\n if there is an empty list, then no elements match\n if there is a selector list, then check it against each element provided\n */\nfunction checkIfElementsMatchCSSSelector(elements: Element[], selectorList: string[] | undefined): boolean {\n if (isUndefined(selectorList)) {\n // everything is allowed, when there is no selector list\n return true\n }\n\n for (const el of elements) {\n if (selectorList.some((selector) => elementMatchesCSSSelector(el, selector))) {\n return true\n }\n }\n\n return false\n}\n\nexport function getParentElement(curEl: Element): Element | false {\n const parentNode = curEl.parentNode\n if (!parentNode || !isElementNode(parentNode)) return false\n return parentNode\n}\n\nconst DEFAULT_AUTOCAPTURE_IGNORE_LIST = ['.ph-no-autocapture', '[data-ph-no-autocapture]']\nconst DEFAULT_CONTENT_IGNORELIST = ['next', 'previous', 'prev', '>', '<']\n// +/- steppers are built to be clicked repeatedly; enabled from the 2026-05-30 config defaults\nexport const DEFAULT_CONTENT_IGNORELIST_WITH_STEPPERS = [...DEFAULT_CONTENT_IGNORELIST, '+', '-', '−', '–']\nconst MAX_CONTENT_IGNORELIST_ENTRIES = 10\n\ninterface ElementWithText {\n safeText: string\n ariaLabel: string\n}\n\n// symbol keywords (e.g. +, -, >) match exactly so we don't suppress \"sign-up\", \"5 > 3\", \"C++\", etc.\nconst matchesContentKeyword = (text: string, keyword: string): boolean =>\n /[a-z0-9]/i.test(keyword) ? text.includes(keyword) : text === keyword\n\nfunction shouldIgnoreByContent(\n contentIgnorelist: boolean | string[] | undefined,\n elementsWithText: ElementWithText[]\n): boolean {\n if (contentIgnorelist === false || isUndefined(contentIgnorelist)) {\n return false\n }\n\n let keywords: string[]\n if (contentIgnorelist === true) {\n keywords = DEFAULT_CONTENT_IGNORELIST\n } else if (isArray(contentIgnorelist)) {\n if (contentIgnorelist.length > MAX_CONTENT_IGNORELIST_ENTRIES) {\n logger.error(\n `[PostHog] content_ignorelist array cannot exceed ${MAX_CONTENT_IGNORELIST_ENTRIES} items. Use css_selector_ignorelist for more complex matching.`\n )\n return false\n }\n keywords = contentIgnorelist.map((k) => k.toLowerCase())\n } else {\n return false\n }\n\n return elementsWithText.some(({ safeText, ariaLabel }) => {\n return keywords.some(\n (keyword) => matchesContentKeyword(safeText, keyword) || matchesContentKeyword(ariaLabel, keyword)\n )\n })\n}\n\n// dead click capture does not run through autocapture's ph-no-capture check,\n// so we include it here so that ph-no-capture also suppresses dead click capture\nconst DEFAULT_DEAD_CLICK_IGNORE_LIST = ['.ph-no-deadclick', '.ph-no-capture']\nexport function shouldCaptureDeadClick(el: Element | null, _config: PostHogConfig['capture_dead_clicks']) {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n const selectorIgnoreList = isBoolean(_config)\n ? DEFAULT_DEAD_CLICK_IGNORE_LIST\n : (_config?.css_selector_ignorelist ?? DEFAULT_DEAD_CLICK_IGNORE_LIST)\n\n const { targetElementList } = getElementAndParentsForElement(el, false)\n\n // we don't capture if we match the ignore list\n return !checkIfElementsMatchCSSSelector(targetElementList, selectorIgnoreList)\n}\n\n// autocapture check will already filter for ph-no-capture,\n// but we include it here to protect against future changes accidentally removing that check\nconst DEFAULT_RAGE_CLICK_IGNORE_LIST = ['.ph-no-rageclick', '.ph-no-capture']\n\nconst TEXT_SELECTION_INPUT_TYPES = ['', 'text', 'search', 'email', 'password', 'url', 'tel', 'number']\n\nfunction isContentEditableTarget(el: Element): boolean {\n if ((el as Partial<HTMLElement>).isContentEditable) {\n return true\n }\n const contentEditable = el.getAttribute?.('contenteditable')\n return contentEditable === 'true' || contentEditable === ''\n}\n\n// repeated fast clicks on a text-editing surface are double/triple-click text selection, not rage\nexport function isTextSelectionTarget(el: Element | null): boolean {\n if (!el || !isElementNode(el)) {\n return false\n }\n if (isTag(el, 'textarea')) {\n return true\n }\n if (isTag(el, 'input')) {\n return includes(TEXT_SELECTION_INPUT_TYPES, (el.getAttribute('type') || '').toLowerCase())\n }\n return isContentEditableTarget(el)\n}\n\nexport function shouldCaptureRageclick(el: Element | null, _config: PostHogConfig['rageclick']) {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n let selectorIgnoreList: string[] | boolean\n let contentIgnorelist: boolean | string[] | undefined\n let ignoreTextSelection: boolean\n if (isBoolean(_config)) {\n selectorIgnoreList = _config ? DEFAULT_RAGE_CLICK_IGNORE_LIST : false\n // For backward compatibility, don't enable content or text-selection filtering for rageclick: true\n contentIgnorelist = undefined\n ignoreTextSelection = false\n } else {\n selectorIgnoreList = _config?.css_selector_ignorelist ?? DEFAULT_RAGE_CLICK_IGNORE_LIST\n contentIgnorelist = _config?.content_ignorelist\n ignoreTextSelection = _config?.ignore_text_selection ?? false\n }\n\n if (selectorIgnoreList === false) {\n return false\n }\n\n if (ignoreTextSelection && isTextSelectionTarget(el)) {\n return false\n }\n\n // Traverse DOM once and cache element data to avoid redundant calls to getSafeText\n const { targetElementList } = getElementAndParentsForElement(el, false)\n const elementsWithText: ElementWithText[] = targetElementList.map((element) => ({\n safeText: getSafeText(element).toLowerCase(),\n ariaLabel: element.getAttribute('aria-label')?.toLowerCase().trim() || '',\n }))\n\n if (shouldIgnoreByContent(contentIgnorelist, elementsWithText)) {\n return false\n }\n\n // we don't capture if we match the ignore list\n return !checkIfElementsMatchCSSSelector(targetElementList, selectorIgnoreList)\n}\n\nconst cannotCheckForAutocapture = (el: Element | null) => {\n return !el || isTag(el, 'html') || !isElementNode(el)\n}\n\nconst getElementAndParentsForElement = (el: Element, captureOnAnyElement: false | true | undefined) => {\n if (!window || cannotCheckForAutocapture(el)) {\n return { parentIsUsefulElement: false, targetElementList: [] }\n }\n\n let parentIsUsefulElement = false\n const targetElementList: Element[] = [el]\n let curEl: Element = el\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n if (isShadowRoot(curEl.parentNode)) {\n targetElementList.push(curEl.parentNode.host)\n curEl = curEl.parentNode.host\n continue\n }\n const parentNode = getParentElement(curEl)\n if (!parentNode) break\n if (captureOnAnyElement || autocaptureCompatibleElements.indexOf(parentNode.tagName.toLowerCase()) > -1) {\n parentIsUsefulElement = true\n } else {\n const compStyles = window.getComputedStyle(parentNode)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer') {\n parentIsUsefulElement = true\n }\n }\n\n targetElementList.push(parentNode)\n curEl = parentNode\n }\n return { parentIsUsefulElement, targetElementList }\n}\n\n// dead-click skips a click only when the click target is — or is inside — an <a>.\n// Anchors navigate / download / open a new window via the browser, and we have no\n// observable signal for those actions (no DOM mutation, no scroll). For every other\n// element (button, input, select, textarea, label, custom JS-handled divs, etc.) we\n// rely on the existing mutation / scroll / selection / visibility observers — if the\n// app's JS handler ran, those catch the effect; if it didn't, dead-click correctly\n// surfaces the bug. A click on a broken <button> with no handler should still flag.\nexport function shouldSkipDeadClick(el: Element | null): boolean {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n const { targetElementList } = getElementAndParentsForElement(el, false)\n return targetElementList.some((node) => isTag(node, 'a'))\n}\n\n/*\n * Check whether a DOM event should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} event - event to check\n * @param {Object} autocaptureConfig - autocapture config\n * @param {boolean} captureOnAnyElement - whether to capture on any element, clipboard autocapture doesn't restrict to \"clickable\" elements\n * @param {string[]} allowedEventTypes - event types to capture, normally just 'click', but some autocapture types react to different events, some elements have fixed events (e.g., form has \"submit\")\n * @returns {boolean} whether the event should be captured\n */\nexport function shouldCaptureDomEvent(\n el: Element,\n event: Event,\n autocaptureConfig: AutocaptureConfig | undefined = undefined,\n captureOnAnyElement?: boolean,\n allowedEventTypes?: string[],\n instance?: PostHog\n): boolean {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n if (autocaptureConfig?.url_allowlist) {\n // if the current URL is not in the allow list, don't capture\n if (!checkForURLMatches(autocaptureConfig.url_allowlist, instance)) {\n return false\n }\n }\n\n if (autocaptureConfig?.url_ignorelist) {\n // if the current URL is in the ignore list, don't capture\n if (checkForURLMatches(autocaptureConfig.url_ignorelist, instance)) {\n return false\n }\n }\n\n if (autocaptureConfig?.dom_event_allowlist) {\n const allowlist = autocaptureConfig.dom_event_allowlist\n if (allowlist && !allowlist.some((eventType) => event.type === eventType)) {\n return false\n }\n }\n\n const { parentIsUsefulElement, targetElementList } = getElementAndParentsForElement(el, captureOnAnyElement)\n\n if (!checkIfElementTreePassesElementAllowList(targetElementList, autocaptureConfig)) {\n return false\n }\n\n if (!checkIfElementsMatchCSSSelector(targetElementList, autocaptureConfig?.css_selector_allowlist)) {\n return false\n }\n\n const selectorIgnoreList = autocaptureConfig?.css_selector_ignorelist ?? DEFAULT_AUTOCAPTURE_IGNORE_LIST\n if (checkIfElementsMatchCSSSelector(targetElementList, selectorIgnoreList)) {\n return false\n }\n\n const compStyles = window.getComputedStyle(el)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer' && event.type === 'click') {\n return true\n }\n\n const tag = el.tagName.toLowerCase()\n switch (tag) {\n case 'html':\n return false\n case 'form':\n return (allowedEventTypes || ['submit']).indexOf(event.type) >= 0\n case 'input':\n case 'select':\n case 'textarea':\n return (allowedEventTypes || ['change', 'click']).indexOf(event.type) >= 0\n default:\n if (parentIsUsefulElement) return (allowedEventTypes || ['click']).indexOf(event.type) >= 0\n return (\n (allowedEventTypes || ['click']).indexOf(event.type) >= 0 &&\n (autocaptureCompatibleElements.indexOf(tag) > -1 || el.getAttribute('contenteditable') === 'true')\n )\n }\n}\n\n/*\n * Check whether a DOM element should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureElement(el: Element): boolean {\n for (let curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode as Element) {\n const classes = getClassNames(curEl)\n if (includes(classes, 'ph-sensitive') || includes(classes, 'ph-no-capture')) {\n return false\n }\n }\n\n if (includes(getClassNames(el), 'ph-include')) {\n return true\n }\n\n // don't include hidden or password fields\n const type = (el as HTMLInputElement).type || ''\n if (isString(type)) {\n // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch (type.toLowerCase()) {\n case 'hidden':\n return false\n case 'password':\n return false\n }\n }\n\n // filter out data from fields that look like sensitive fields\n const name = (el as HTMLInputElement).name || el.id || ''\n // See https://github.com/posthog/posthog-js/issues/165\n // Under specific circumstances a bug caused .replace to be called on a DOM element\n // instead of a string, removing the element from the page. Ensure this issue is mitigated.\n if (isString(name)) {\n // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n const sensitiveNameRegex =\n /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether a DOM element is 'sensitive' and we should only capture limited data\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function isSensitiveElement(el: Element): boolean {\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n const allowedInputTypes = ['button', 'checkbox', 'submit', 'reset']\n if (\n (isTag(el, 'input') && !allowedInputTypes.includes((el as HTMLInputElement).type)) ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return true\n }\n return false\n}\n\n// Define the core pattern for matching credit card numbers\nconst coreCCPattern = `(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredCCRegex = new RegExp(`^(?:${coreCCPattern})$`)\n// The Unanchored version is essentially the core pattern, usable as is for partial matches\nconst unanchoredCCRegex = new RegExp(coreCCPattern)\n\n// Define the core pattern for matching SSNs with optional dashes\nconst coreSSNPattern = `\\\\d{3}-?\\\\d{2}-?\\\\d{4}`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredSSNRegex = new RegExp(`^(${coreSSNPattern})$`)\n// The Unanchored version is essentially the core pattern itself, usable for partial matches\nconst unanchoredSSNRegex = new RegExp(`(${coreSSNPattern})`)\n\n/*\n * Check whether a string value should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @param {boolean} anchorRegexes - whether to anchor the regexes to the start and end of the string\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureValue(value: string, anchorRegexes = true): boolean {\n if (isNullish(value)) {\n return false\n }\n\n if (isString(value)) {\n value = trim(value)\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n const ccRegex = anchorRegexes ? anchoredCCRegex : unanchoredCCRegex\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false\n }\n\n // check to see if input value looks like a social security number\n const ssnRegex = anchorRegexes ? anchoredSSNRegex : unanchoredSSNRegex\n if (ssnRegex.test(value)) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether an attribute name is an Angular style attr (either _ngcontent or _nghost)\n * These update on each build and lead to noise in the element chain\n * More details on the attributes here: https://angular.io/guide/view-encapsulation\n * @param {string} attributeName - string value to check\n * @returns {boolean} whether the element is an angular tag\n */\nexport function isAngularStyleAttr(attributeName: string): boolean {\n if (isString(attributeName)) {\n return attributeName.substring(0, 10) === '_ngcontent' || attributeName.substring(0, 7) === '_nghost'\n }\n return false\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces,\n * along with the direct text content of the target element\n * @param {Element} target - element to check\n * @returns {string} text content of the target element and its child span tags\n */\nexport function getDirectAndNestedSpanText(target: Element): string {\n let text = getSafeText(target)\n text = `${text} ${getNestedSpanText(target)}`.trim()\n return shouldCaptureValue(text) ? text : ''\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces\n * @param {Element} target - element to check\n * @returns {string} text content of span tags\n */\nexport function getNestedSpanText(target: Element): string {\n let text = ''\n if (target && target.childNodes && target.childNodes.length) {\n each(target.childNodes, function (child) {\n if (child && child.tagName?.toLowerCase() === 'span') {\n try {\n const spanText = getSafeText(child)\n text = `${text} ${spanText}`.trim()\n\n if (child.childNodes && child.childNodes.length) {\n text = `${text} ${getNestedSpanText(child)}`.trim()\n }\n } catch (e) {\n logger.error('[AutoCapture]', e)\n }\n }\n })\n }\n return text\n}\n\n/*\nBack in the day storing events in Postgres we use Elements for autocapture events.\nNow we're using elements_chain. We used to do this parsing/processing during ingestion.\nThis code is just copied over from ingestion, but we should optimize it\nto create elements_chain string directly.\n*/\nexport function getElementsChainString(elements: Properties[]): string {\n return elementsToString(extractElements(elements))\n}\n\n// This interface is called 'Element' in plugin-scaffold https://github.com/PostHog/plugin-scaffold/blob/b07d3b879796ecc7e22deb71bf627694ba05386b/src/types.ts#L200\n// However 'Element' is a DOM Element when run in the browser, so we have to rename it\ninterface PHElement {\n text?: string\n tag_name?: string\n href?: string\n attr_id?: string\n attr_class?: string[]\n nth_child?: number\n nth_of_type?: number\n attributes?: Record<string, any>\n event_id?: number\n order?: number\n group_id?: number\n}\n\nfunction escapeQuotes(input: string): string {\n return input.replace(/\"|\\\\\"/g, '\\\\\"')\n}\n\nfunction elementsToString(elements: PHElement[]): string {\n const ret = elements.map((element) => {\n let el_string = ''\n if (element.tag_name) {\n el_string += element.tag_name\n }\n if (element.attr_class) {\n element.attr_class.sort()\n for (const single_class of element.attr_class) {\n el_string += `.${single_class.replace(/\"/g, '')}`\n }\n }\n const attributes: Record<string, any> = {\n ...(element.text ? { text: element.text } : {}),\n 'nth-child': element.nth_child ?? 0,\n 'nth-of-type': element.nth_of_type ?? 0,\n ...(element.href ? { href: element.href } : {}),\n ...(element.attr_id ? { attr_id: element.attr_id } : {}),\n ...element.attributes,\n }\n const sortedAttributes: Record<string, any> = {}\n entries(attributes)\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(\n ([key, value]) => (sortedAttributes[escapeQuotes(key.toString())] = escapeQuotes(value.toString()))\n )\n el_string += ':'\n el_string += entries(sortedAttributes)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join('')\n return el_string\n })\n return ret.join(';')\n}\n\nfunction extractElements(elements: Properties[]): PHElement[] {\n return elements.map((el) => {\n const response = {\n text: el['$el_text']?.slice(0, 400),\n tag_name: el['tag_name'],\n href: el['attr__href']?.slice(0, 2048),\n attr_class: extractAttrClass(el),\n attr_id: el['attr__id'],\n nth_child: el['nth_child'],\n nth_of_type: el['nth_of_type'],\n attributes: {} as { [id: string]: any },\n }\n\n entries(el)\n .filter(([key]) => key.indexOf('attr__') === 0)\n .forEach(([key, value]) => (response.attributes[key] = value))\n return response\n })\n}\n\nfunction extractAttrClass(el: Properties): PHElement['attr_class'] {\n const attr_class = el['attr__class']\n if (!attr_class) {\n return undefined\n } else if (isArray(attr_class)) {\n return attr_class\n } else {\n return splitClassString(attr_class)\n }\n}\n"]}
{"version":3,"file":"autocapture-utils.js","sourceRoot":"","sources":["../../src/autocapture-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { AutocaptureConfig, PostHogConfig, Properties } from './types'\nimport type { PostHog } from './posthog-core'\nimport { each, entries } from './utils'\n\nimport { isNullish, isString, isUndefined, isArray, isBoolean } from '@posthog/core'\nimport { logger } from './utils/logger'\nimport { window } from './utils/globals'\nimport { getTargetingUrl } from './utils/url-targeting-utils'\nimport { isElementNode, isShadowRoot, isTag, isTextNode } from './utils/element-utils'\nimport { includes, trim } from '@posthog/core'\n\nexport function splitClassString(s: string): string[] {\n return s ? trim(s).split(/\\s+/) : []\n}\n\nfunction checkForURLMatches(urlsList: (string | RegExp)[], instance?: PostHog): boolean {\n const url = getTargetingUrl(instance)\n return !!(url && urlsList && urlsList.some((regex) => url.match(regex)))\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n *\n * Because this is a string it can contain unexpected characters\n * So, this method safely splits the className and returns that array.\n */\nexport function getClassNames(el: Element): string[] {\n let className = ''\n switch (typeof el.className) {\n case 'string':\n className = el.className\n break\n // TODO: when is this ever used?\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n className =\n (el.className && 'baseVal' in el.className ? (el.className as any).baseVal : null) ||\n el.getAttribute('class') ||\n ''\n break\n default:\n className = ''\n }\n\n return splitClassString(className)\n}\n\nexport function makeSafeText(s: string | null | undefined): string | null {\n if (isNullish(s)) {\n return null\n }\n\n return (\n trim(s)\n // scrub potentially sensitive values\n .split(/(\\s+)/)\n .filter((s) => shouldCaptureValue(s))\n .join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ')\n .replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255)\n )\n}\n\n/*\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @returns {string} the element's direct text content\n */\nexport function getSafeText(el: Element): string {\n let elText = ''\n\n if (shouldCaptureElement(el) && !isSensitiveElement(el) && el.childNodes && el.childNodes.length) {\n each(el.childNodes, function (child) {\n if (isTextNode(child) && child.textContent) {\n elText += makeSafeText(child.textContent) ?? ''\n }\n })\n }\n\n return trim(elText)\n}\n\nexport function getEventTarget(e: Event): Element | null {\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/target#Compatibility_notes\n if (isUndefined(e.target)) {\n return (e.srcElement as Element) || null\n } else {\n if ((e.target as HTMLElement)?.shadowRoot) {\n return (e.composedPath()[0] as Element) || null\n }\n return (e.target as Element) || null\n }\n}\n\nexport const autocaptureCompatibleElements = ['a', 'button', 'form', 'input', 'select', 'textarea', 'label']\n\n/*\n if there is no config, then all elements are allowed\n if there is a config, and there is an allow list, then only elements in the allow list are allowed\n assumes that some other code is checking this element's parents\n */\nfunction checkIfElementTreePassesElementAllowList(\n elements: Element[],\n autocaptureConfig: AutocaptureConfig | undefined\n): boolean {\n const allowlist = autocaptureConfig?.element_allowlist\n if (isUndefined(allowlist)) {\n // everything is allowed, when there is no allow list\n return true\n }\n\n // check each element in the tree\n // if any of the elements are in the allow list, then the tree is allowed\n for (const el of elements) {\n if (allowlist.some((elementType) => el.tagName.toLowerCase() === elementType)) {\n return true\n }\n }\n\n // otherwise there is an allow list and this element tree didn't match it\n return false\n}\n\nfunction elementMatchesCSSSelector(el: Element, selector: string): boolean {\n const matches =\n el.matches ||\n (el as any).matchesSelector ||\n (el as any).msMatchesSelector ||\n (el as any).mozMatchesSelector ||\n (el as any).webkitMatchesSelector ||\n (el as any).oMatchesSelector\n try {\n return matches ? matches.call(el, selector) : false\n } catch {\n return false\n }\n}\n\n/*\n if there is no selector list (i.e. it is undefined), then any elements matches\n if there is an empty list, then no elements match\n if there is a selector list, then check it against each element provided\n */\nfunction checkIfElementsMatchCSSSelector(elements: Element[], selectorList: string[] | undefined): boolean {\n if (isUndefined(selectorList)) {\n // everything is allowed, when there is no selector list\n return true\n }\n\n for (const el of elements) {\n if (selectorList.some((selector) => elementMatchesCSSSelector(el, selector))) {\n return true\n }\n }\n\n return false\n}\n\nexport function getParentElement(curEl: Element): Element | false {\n const parentNode = curEl.parentNode\n if (!parentNode || !isElementNode(parentNode)) return false\n return parentNode\n}\n\nconst DEFAULT_AUTOCAPTURE_IGNORE_LIST = ['.ph-no-autocapture', '[data-ph-no-autocapture]']\nconst DEFAULT_CONTENT_IGNORELIST = ['next', 'previous', 'prev', '>', '<']\n// +/- steppers are built to be clicked repeatedly; enabled from the 2026-05-30 config defaults\nexport const DEFAULT_CONTENT_IGNORELIST_WITH_STEPPERS = [...DEFAULT_CONTENT_IGNORELIST, '+', '-', '−', '–']\nconst MAX_CONTENT_IGNORELIST_ENTRIES = 10\n\ninterface ElementWithText {\n safeText: string\n ariaLabel: string\n}\n\n// symbol keywords (e.g. +, -, >) match exactly so we don't suppress \"sign-up\", \"5 > 3\", \"C++\", etc.\nconst matchesContentKeyword = (text: string, keyword: string): boolean =>\n /[a-z0-9]/i.test(keyword) ? text.includes(keyword) : text === keyword\n\nfunction shouldIgnoreByContent(\n contentIgnorelist: boolean | string[] | undefined,\n elementsWithText: ElementWithText[]\n): boolean {\n if (contentIgnorelist === false || isUndefined(contentIgnorelist)) {\n return false\n }\n\n let keywords: string[]\n if (contentIgnorelist === true) {\n keywords = DEFAULT_CONTENT_IGNORELIST\n } else if (isArray(contentIgnorelist)) {\n if (contentIgnorelist.length > MAX_CONTENT_IGNORELIST_ENTRIES) {\n logger.error(\n `[PostHog] content_ignorelist array cannot exceed ${MAX_CONTENT_IGNORELIST_ENTRIES} items. Use css_selector_ignorelist for more complex matching.`\n )\n return false\n }\n keywords = contentIgnorelist.map((k) => k.toLowerCase())\n } else {\n return false\n }\n\n return elementsWithText.some(({ safeText, ariaLabel }) => {\n return keywords.some(\n (keyword) => matchesContentKeyword(safeText, keyword) || matchesContentKeyword(ariaLabel, keyword)\n )\n })\n}\n\n// dead click capture does not run through autocapture's ph-no-capture check,\n// so we include it here so that ph-no-capture also suppresses dead click capture\nconst DEFAULT_DEAD_CLICK_IGNORE_LIST = ['.ph-no-deadclick', '.ph-no-capture']\nexport function shouldCaptureDeadClick(el: Element | null, _config: PostHogConfig['capture_dead_clicks']) {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n const selectorIgnoreList = isBoolean(_config)\n ? DEFAULT_DEAD_CLICK_IGNORE_LIST\n : (_config?.css_selector_ignorelist ?? DEFAULT_DEAD_CLICK_IGNORE_LIST)\n\n const { targetElementList } = getElementAndParentsForElement(el, false)\n\n // we don't capture if we match the ignore list\n return !checkIfElementsMatchCSSSelector(targetElementList, selectorIgnoreList)\n}\n\n// autocapture check will already filter for ph-no-capture,\n// but we include it here to protect against future changes accidentally removing that check\nconst DEFAULT_RAGE_CLICK_IGNORE_LIST = ['.ph-no-rageclick', '.ph-no-capture']\n\nconst TEXT_SELECTION_INPUT_TYPES = ['', 'text', 'search', 'email', 'password', 'url', 'tel', 'number']\n\nfunction isContentEditableTarget(el: Element): boolean {\n if ((el as Partial<HTMLElement>).isContentEditable) {\n return true\n }\n const contentEditable = el.getAttribute?.('contenteditable')\n return contentEditable === 'true' || contentEditable === ''\n}\n\n// repeated fast clicks on a text-editing surface are double/triple-click text selection, not rage\nexport function isTextSelectionTarget(el: Element | null): boolean {\n if (!el || !isElementNode(el)) {\n return false\n }\n if (isTag(el, 'textarea')) {\n return true\n }\n if (isTag(el, 'input')) {\n return includes(TEXT_SELECTION_INPUT_TYPES, (el.getAttribute('type') || '').toLowerCase())\n }\n return isContentEditableTarget(el)\n}\n\nexport function shouldCaptureRageclick(el: Element | null, _config: PostHogConfig['rageclick']) {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n let selectorIgnoreList: string[] | boolean\n let contentIgnorelist: boolean | string[] | undefined\n let ignoreTextSelection: boolean\n if (isBoolean(_config)) {\n selectorIgnoreList = _config ? DEFAULT_RAGE_CLICK_IGNORE_LIST : false\n // For backward compatibility, don't enable content or text-selection filtering for rageclick: true\n contentIgnorelist = undefined\n ignoreTextSelection = false\n } else {\n selectorIgnoreList = _config?.css_selector_ignorelist ?? DEFAULT_RAGE_CLICK_IGNORE_LIST\n contentIgnorelist = _config?.content_ignorelist\n ignoreTextSelection = _config?.ignore_text_selection ?? false\n }\n\n if (selectorIgnoreList === false) {\n return false\n }\n\n if (ignoreTextSelection && isTextSelectionTarget(el)) {\n return false\n }\n\n // Traverse DOM once and cache element data to avoid redundant calls to getSafeText\n const { targetElementList } = getElementAndParentsForElement(el, false)\n const elementsWithText: ElementWithText[] = targetElementList.map((element) => ({\n safeText: getSafeText(element).toLowerCase(),\n ariaLabel: element.getAttribute('aria-label')?.toLowerCase().trim() || '',\n }))\n\n if (shouldIgnoreByContent(contentIgnorelist, elementsWithText)) {\n return false\n }\n\n // we don't capture if we match the ignore list\n return !checkIfElementsMatchCSSSelector(targetElementList, selectorIgnoreList)\n}\n\nconst cannotCheckForAutocapture = (el: Element | null) => {\n return !el || isTag(el, 'html') || !isElementNode(el)\n}\n\nconst getElementAndParentsForElement = (el: Element, captureOnAnyElement: false | true | undefined) => {\n if (!window || cannotCheckForAutocapture(el)) {\n return { parentIsUsefulElement: false, targetElementList: [] }\n }\n\n let parentIsUsefulElement = false\n const targetElementList: Element[] = [el]\n let curEl: Element = el\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n if (isShadowRoot(curEl.parentNode)) {\n targetElementList.push(curEl.parentNode.host)\n curEl = curEl.parentNode.host\n continue\n }\n const parentNode = getParentElement(curEl)\n if (!parentNode) break\n if (captureOnAnyElement || autocaptureCompatibleElements.indexOf(parentNode.tagName.toLowerCase()) > -1) {\n parentIsUsefulElement = true\n } else {\n try {\n const compStyles = window.getComputedStyle(parentNode)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer') {\n parentIsUsefulElement = true\n }\n } catch {}\n }\n\n targetElementList.push(parentNode)\n curEl = parentNode\n }\n return { parentIsUsefulElement, targetElementList }\n}\n\n// dead-click skips a click only when the click target is — or is inside — an <a>.\n// Anchors navigate / download / open a new window via the browser, and we have no\n// observable signal for those actions (no DOM mutation, no scroll). For every other\n// element (button, input, select, textarea, label, custom JS-handled divs, etc.) we\n// rely on the existing mutation / scroll / selection / visibility observers — if the\n// app's JS handler ran, those catch the effect; if it didn't, dead-click correctly\n// surfaces the bug. A click on a broken <button> with no handler should still flag.\nexport function shouldSkipDeadClick(el: Element | null): boolean {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n const { targetElementList } = getElementAndParentsForElement(el, false)\n return targetElementList.some((node) => isTag(node, 'a'))\n}\n\n/*\n * Check whether a DOM event should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} event - event to check\n * @param {Object} autocaptureConfig - autocapture config\n * @param {boolean} captureOnAnyElement - whether to capture on any element, clipboard autocapture doesn't restrict to \"clickable\" elements\n * @param {string[]} allowedEventTypes - event types to capture, normally just 'click', but some autocapture types react to different events, some elements have fixed events (e.g., form has \"submit\")\n * @returns {boolean} whether the event should be captured\n */\nexport function shouldCaptureDomEvent(\n el: Element,\n event: Event,\n autocaptureConfig: AutocaptureConfig | undefined = undefined,\n captureOnAnyElement?: boolean,\n allowedEventTypes?: string[],\n instance?: PostHog\n): boolean {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n if (autocaptureConfig?.url_allowlist) {\n // if the current URL is not in the allow list, don't capture\n if (!checkForURLMatches(autocaptureConfig.url_allowlist, instance)) {\n return false\n }\n }\n\n if (autocaptureConfig?.url_ignorelist) {\n // if the current URL is in the ignore list, don't capture\n if (checkForURLMatches(autocaptureConfig.url_ignorelist, instance)) {\n return false\n }\n }\n\n if (autocaptureConfig?.dom_event_allowlist) {\n const allowlist = autocaptureConfig.dom_event_allowlist\n if (allowlist && !allowlist.some((eventType) => event.type === eventType)) {\n return false\n }\n }\n\n const { parentIsUsefulElement, targetElementList } = getElementAndParentsForElement(el, captureOnAnyElement)\n\n if (!checkIfElementTreePassesElementAllowList(targetElementList, autocaptureConfig)) {\n return false\n }\n\n if (!checkIfElementsMatchCSSSelector(targetElementList, autocaptureConfig?.css_selector_allowlist)) {\n return false\n }\n\n const selectorIgnoreList = autocaptureConfig?.css_selector_ignorelist ?? DEFAULT_AUTOCAPTURE_IGNORE_LIST\n if (checkIfElementsMatchCSSSelector(targetElementList, selectorIgnoreList)) {\n return false\n }\n\n try {\n const compStyles = window.getComputedStyle(el)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer' && event.type === 'click') {\n return true\n }\n } catch {}\n\n const tag = el.tagName.toLowerCase()\n switch (tag) {\n case 'html':\n return false\n case 'form':\n return (allowedEventTypes || ['submit']).indexOf(event.type) >= 0\n case 'input':\n case 'select':\n case 'textarea':\n return (allowedEventTypes || ['change', 'click']).indexOf(event.type) >= 0\n default:\n if (parentIsUsefulElement) return (allowedEventTypes || ['click']).indexOf(event.type) >= 0\n return (\n (allowedEventTypes || ['click']).indexOf(event.type) >= 0 &&\n (autocaptureCompatibleElements.indexOf(tag) > -1 || el.getAttribute('contenteditable') === 'true')\n )\n }\n}\n\n/*\n * Check whether a DOM element should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureElement(el: Element): boolean {\n for (let curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode as Element) {\n const classes = getClassNames(curEl)\n if (includes(classes, 'ph-sensitive') || includes(classes, 'ph-no-capture')) {\n return false\n }\n }\n\n if (includes(getClassNames(el), 'ph-include')) {\n return true\n }\n\n // don't include hidden or password fields\n const type = (el as HTMLInputElement).type || ''\n if (isString(type)) {\n // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch (type.toLowerCase()) {\n case 'hidden':\n return false\n case 'password':\n return false\n }\n }\n\n // filter out data from fields that look like sensitive fields\n const name = (el as HTMLInputElement).name || el.id || ''\n // See https://github.com/posthog/posthog-js/issues/165\n // Under specific circumstances a bug caused .replace to be called on a DOM element\n // instead of a string, removing the element from the page. Ensure this issue is mitigated.\n if (isString(name)) {\n // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n const sensitiveNameRegex =\n /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether a DOM element is 'sensitive' and we should only capture limited data\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function isSensitiveElement(el: Element): boolean {\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n const allowedInputTypes = ['button', 'checkbox', 'submit', 'reset']\n if (\n (isTag(el, 'input') && !allowedInputTypes.includes((el as HTMLInputElement).type)) ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return true\n }\n return false\n}\n\n// Define the core pattern for matching credit card numbers\nconst coreCCPattern = `(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredCCRegex = new RegExp(`^(?:${coreCCPattern})$`)\n// The Unanchored version is essentially the core pattern, usable as is for partial matches\nconst unanchoredCCRegex = new RegExp(coreCCPattern)\n\n// Define the core pattern for matching SSNs with optional dashes\nconst coreSSNPattern = `\\\\d{3}-?\\\\d{2}-?\\\\d{4}`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredSSNRegex = new RegExp(`^(${coreSSNPattern})$`)\n// The Unanchored version is essentially the core pattern itself, usable for partial matches\nconst unanchoredSSNRegex = new RegExp(`(${coreSSNPattern})`)\n\n/*\n * Check whether a string value should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @param {boolean} anchorRegexes - whether to anchor the regexes to the start and end of the string\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureValue(value: string, anchorRegexes = true): boolean {\n if (isNullish(value)) {\n return false\n }\n\n if (isString(value)) {\n value = trim(value)\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n const ccRegex = anchorRegexes ? anchoredCCRegex : unanchoredCCRegex\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false\n }\n\n // check to see if input value looks like a social security number\n const ssnRegex = anchorRegexes ? anchoredSSNRegex : unanchoredSSNRegex\n if (ssnRegex.test(value)) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether an attribute name is an Angular style attr (either _ngcontent or _nghost)\n * These update on each build and lead to noise in the element chain\n * More details on the attributes here: https://angular.io/guide/view-encapsulation\n * @param {string} attributeName - string value to check\n * @returns {boolean} whether the element is an angular tag\n */\nexport function isAngularStyleAttr(attributeName: string): boolean {\n if (isString(attributeName)) {\n return attributeName.substring(0, 10) === '_ngcontent' || attributeName.substring(0, 7) === '_nghost'\n }\n return false\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces,\n * along with the direct text content of the target element\n * @param {Element} target - element to check\n * @returns {string} text content of the target element and its child span tags\n */\nexport function getDirectAndNestedSpanText(target: Element): string {\n let text = getSafeText(target)\n text = `${text} ${getNestedSpanText(target)}`.trim()\n return shouldCaptureValue(text) ? text : ''\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces\n * @param {Element} target - element to check\n * @returns {string} text content of span tags\n */\nexport function getNestedSpanText(target: Element): string {\n let text = ''\n if (target && target.childNodes && target.childNodes.length) {\n each(target.childNodes, function (child) {\n if (child && child.tagName?.toLowerCase() === 'span') {\n try {\n const spanText = getSafeText(child)\n text = `${text} ${spanText}`.trim()\n\n if (child.childNodes && child.childNodes.length) {\n text = `${text} ${getNestedSpanText(child)}`.trim()\n }\n } catch (e) {\n logger.error('[AutoCapture]', e)\n }\n }\n })\n }\n return text\n}\n\n/*\nBack in the day storing events in Postgres we use Elements for autocapture events.\nNow we're using elements_chain. We used to do this parsing/processing during ingestion.\nThis code is just copied over from ingestion, but we should optimize it\nto create elements_chain string directly.\n*/\nexport function getElementsChainString(elements: Properties[]): string {\n return elementsToString(extractElements(elements))\n}\n\n// This interface is called 'Element' in plugin-scaffold https://github.com/PostHog/plugin-scaffold/blob/b07d3b879796ecc7e22deb71bf627694ba05386b/src/types.ts#L200\n// However 'Element' is a DOM Element when run in the browser, so we have to rename it\ninterface PHElement {\n text?: string\n tag_name?: string\n href?: string\n attr_id?: string\n attr_class?: string[]\n nth_child?: number\n nth_of_type?: number\n attributes?: Record<string, any>\n event_id?: number\n order?: number\n group_id?: number\n}\n\nfunction escapeQuotes(input: string): string {\n return input.replace(/\"|\\\\\"/g, '\\\\\"')\n}\n\nfunction elementsToString(elements: PHElement[]): string {\n const ret = elements.map((element) => {\n let el_string = ''\n if (element.tag_name) {\n el_string += element.tag_name\n }\n if (element.attr_class) {\n element.attr_class.sort()\n for (const single_class of element.attr_class) {\n el_string += `.${single_class.replace(/\"/g, '')}`\n }\n }\n const attributes: Record<string, any> = {\n ...(element.text ? { text: element.text } : {}),\n 'nth-child': element.nth_child ?? 0,\n 'nth-of-type': element.nth_of_type ?? 0,\n ...(element.href ? { href: element.href } : {}),\n ...(element.attr_id ? { attr_id: element.attr_id } : {}),\n ...element.attributes,\n }\n const sortedAttributes: Record<string, any> = {}\n entries(attributes)\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(\n ([key, value]) => (sortedAttributes[escapeQuotes(key.toString())] = escapeQuotes(value.toString()))\n )\n el_string += ':'\n el_string += entries(sortedAttributes)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join('')\n return el_string\n })\n return ret.join(';')\n}\n\nfunction extractElements(elements: Properties[]): PHElement[] {\n return elements.map((el) => {\n const response = {\n text: el['$el_text']?.slice(0, 400),\n tag_name: el['tag_name'],\n href: el['attr__href']?.slice(0, 2048),\n attr_class: extractAttrClass(el),\n attr_id: el['attr__id'],\n nth_child: el['nth_child'],\n nth_of_type: el['nth_of_type'],\n attributes: {} as { [id: string]: any },\n }\n\n entries(el)\n .filter(([key]) => key.indexOf('attr__') === 0)\n .forEach(([key, value]) => (response.attributes[key] = value))\n return response\n })\n}\n\nfunction extractAttrClass(el: Properties): PHElement['attr_class'] {\n const attr_class = el['attr__class']\n if (!attr_class) {\n return undefined\n } else if (isArray(attr_class)) {\n return attr_class\n } else {\n return splitClassString(attr_class)\n }\n}\n"]}

@@ -58,2 +58,3 @@ "use strict";

function elementOrParentPositionMatches(el, matches, breakOnElement) {
var _a, _b, _c;
var curEl = el;

@@ -64,3 +65,10 @@ while (curEl && (0, element_utils_1.isElementNode)(curEl) && !(0, element_utils_1.isTag)(curEl, 'body')) {

}
if ((0, core_2.includes)(matches, globals_1.window === null || globals_1.window === void 0 ? void 0 : globals_1.window.getComputedStyle(curEl).position)) {
var position = void 0;
try {
position = (_c = ((_b = (_a = curEl.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) !== null && _b !== void 0 ? _b : globals_1.window)) === null || _c === void 0 ? void 0 : _c.getComputedStyle(curEl).position;
}
catch (_d) {
return false;
}
if ((0, core_2.includes)(matches, position)) {
return true;

@@ -67,0 +75,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"heatmaps.js","sourceRoot":"","sources":["../../src/heatmaps.ts"],"names":[],"mappings":"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","sourcesContent":["import RageClick from './extensions/rageclick'\nimport { DeadClickCandidate, Properties, RemoteConfig } from './types'\nimport { PostHog } from './posthog-core'\n\nimport { document, window } from './utils/globals'\nimport { getEventTarget, getParentElement, shouldCaptureRageclick } from './autocapture-utils'\nimport { DOM_EVENT_BEFOREUNLOAD, DOM_EVENT_VISIBILITYCHANGE, HEATMAPS_ENABLED_SERVER_SIDE } from './constants'\nimport { isNumber, isNullish, isEmptyObject, isObject, stripUrlHash } from '@posthog/core'\nimport { createLogger } from './utils/logger'\nimport { isElementInToolbar, isElementNode, isTag } from './utils/element-utils'\nimport { DeadClicksAutocapture, isDeadClicksEnabledForHeatmaps } from './extensions/dead-clicks-autocapture'\nimport { includes } from '@posthog/core'\nimport { addEventListener } from './utils'\nimport { maskQueryParams } from './utils/request-utils'\nimport { PERSONAL_DATA_CAMPAIGN_PARAMS, MASKED } from './utils/event-utils'\nimport type { Extension } from './extensions/types'\n\nconst DEFAULT_FLUSH_INTERVAL = 5000\n\nconst logger = createLogger('[Heatmaps]')\n\ntype HeatmapEventBuffer =\n | {\n [key: string]: Properties[]\n }\n | undefined\n\nfunction elementOrParentPositionMatches(el: Element | null, matches: string[], breakOnElement?: Element): boolean {\n let curEl: Element | null | false = el\n\n while (curEl && isElementNode(curEl) && !isTag(curEl, 'body')) {\n if (curEl === breakOnElement) {\n return false\n }\n\n if (includes(matches, window?.getComputedStyle(curEl).position)) {\n return true\n }\n\n curEl = getParentElement(curEl)\n }\n\n return false\n}\n\nfunction isValidMouseEvent(e: unknown): e is MouseEvent {\n return isObject(e) && 'clientX' in e && 'clientY' in e && isNumber(e.clientX) && isNumber(e.clientY)\n}\n\nfunction shouldPoll(document: Document | undefined): boolean {\n return document?.visibilityState === 'visible'\n}\n\nexport class Heatmaps implements Extension {\n instance: PostHog\n rageclicks: RageClick\n _enabledServerSide: boolean = false\n\n private get _config() {\n return this.instance.config\n }\n\n _initialized = false\n _mouseMoveTimeout: ReturnType<typeof setTimeout> | undefined\n\n private _buffer: HeatmapEventBuffer\n private _flushInterval: ReturnType<typeof setInterval> | null = null\n private _deadClicksCapture: DeadClicksAutocapture | undefined\n private _onClickHandler: ((e: Event) => void) | undefined\n private _onMouseMoveHandler: ((e: Event) => void) | undefined\n private _flushHandler: (() => void) | undefined\n private _onVisibilityChange_handler: (() => void) | undefined\n\n constructor(instance: PostHog) {\n this.instance = instance\n this._enabledServerSide = !!this.instance.persistence?.props[HEATMAPS_ENABLED_SERVER_SIDE]\n this.rageclicks = new RageClick(instance.config.rageclick)\n }\n\n initialize() {\n this.startIfEnabled()\n }\n\n public get flushIntervalMilliseconds(): number {\n let flushInterval = DEFAULT_FLUSH_INTERVAL\n if (isObject(this._config.capture_heatmaps) && this._config.capture_heatmaps.flush_interval_milliseconds) {\n flushInterval = this._config.capture_heatmaps.flush_interval_milliseconds\n }\n return flushInterval\n }\n\n public get isEnabled(): boolean {\n if (!isNullish(this._config.capture_heatmaps)) {\n return this._config.capture_heatmaps !== false\n }\n if (!isNullish(this._config.enable_heatmaps)) {\n return this._config.enable_heatmaps\n }\n return this._enabledServerSide\n }\n\n public startIfEnabled(): void {\n if (this.isEnabled) {\n // nested if here since we only want to run the else\n // if this.enabled === false\n // not if this method is called more than once\n if (this._initialized) {\n return\n }\n logger.info('starting...')\n this._setupListeners()\n this._onVisibilityChange()\n } else {\n clearInterval(this._flushInterval ?? undefined)\n this._removeListeners()\n this.getAndClearBuffer()\n }\n }\n\n public onRemoteConfig(response: RemoteConfig) {\n if (!('heatmaps' in response)) {\n return\n }\n\n const optIn = !!response['heatmaps']\n\n if (this.instance.persistence) {\n this.instance.persistence.register({\n [HEATMAPS_ENABLED_SERVER_SIDE]: optIn,\n })\n }\n // store this in-memory in case persistence is disabled\n this._enabledServerSide = optIn\n this.startIfEnabled()\n }\n\n public getAndClearBuffer(): HeatmapEventBuffer {\n const buffer = this._buffer\n this._buffer = undefined\n return buffer\n }\n\n private _onDeadClick(click: DeadClickCandidate): void {\n this._onClick(click.originalEvent, 'deadclick')\n }\n\n private _onVisibilityChange(): void {\n // always clear the interval just in case\n if (this._flushInterval) {\n clearInterval(this._flushInterval)\n }\n\n this._flushInterval = shouldPoll(document)\n ? setInterval(this._flush.bind(this), this.flushIntervalMilliseconds)\n : null\n }\n\n private _setupListeners(): void {\n if (!window || !document) {\n return\n }\n\n this._flushHandler = this._flush.bind(this)\n addEventListener(window, DOM_EVENT_BEFOREUNLOAD, this._flushHandler)\n\n this._onClickHandler = (e) => this._onClick((e || window?.event) as MouseEvent)\n addEventListener(document, 'click', this._onClickHandler, { capture: true })\n\n this._onMouseMoveHandler = (e) => this._onMouseMove((e || window?.event) as MouseEvent)\n addEventListener(document, 'mousemove', this._onMouseMoveHandler, { capture: true })\n\n this._deadClicksCapture = new DeadClicksAutocapture(\n this.instance,\n isDeadClicksEnabledForHeatmaps,\n this._onDeadClick.bind(this)\n )\n this._deadClicksCapture.startIfEnabledOrStop()\n\n this._onVisibilityChange_handler = this._onVisibilityChange.bind(this)\n addEventListener(document, DOM_EVENT_VISIBILITYCHANGE, this._onVisibilityChange_handler)\n\n this._initialized = true\n }\n\n private _removeListeners(): void {\n if (!window || !document) {\n return\n }\n\n if (this._flushHandler) {\n window.removeEventListener(DOM_EVENT_BEFOREUNLOAD, this._flushHandler)\n }\n\n if (this._onClickHandler) {\n document.removeEventListener('click', this._onClickHandler, { capture: true })\n }\n\n if (this._onMouseMoveHandler) {\n document.removeEventListener('mousemove', this._onMouseMoveHandler, { capture: true })\n }\n\n if (this._onVisibilityChange_handler) {\n document.removeEventListener(DOM_EVENT_VISIBILITYCHANGE, this._onVisibilityChange_handler)\n }\n\n clearTimeout(this._mouseMoveTimeout)\n\n this._deadClicksCapture?.stop()\n\n this._initialized = false\n }\n\n private _getProperties(e: MouseEvent, type: string): Properties {\n // We need to know if the target element is fixed or not\n // If fixed then we won't account for scrolling\n // If not then we will account for scrolling\n\n const scrollY = this.instance.scrollManager.scrollY()\n const scrollX = this.instance.scrollManager.scrollX()\n const scrollElement = this.instance.scrollManager.scrollElement()\n\n const isFixedOrSticky = elementOrParentPositionMatches(getEventTarget(e), ['fixed', 'sticky'], scrollElement)\n\n return {\n x: e.clientX + (isFixedOrSticky ? 0 : scrollX),\n y: e.clientY + (isFixedOrSticky ? 0 : scrollY),\n target_fixed: isFixedOrSticky,\n type,\n }\n }\n\n private _onClick(e: MouseEvent, type: string = 'click'): void {\n if (isElementInToolbar(e.target) || !isValidMouseEvent(e)) {\n return\n }\n\n const properties = this._getProperties(e, type)\n\n if (\n this.rageclicks?.isRageClick(e.clientX, e.clientY, new Date().getTime()) &&\n shouldCaptureRageclick(getEventTarget(e), this.instance.config.rageclick)\n ) {\n this._capture({\n ...properties,\n type: 'rageclick',\n })\n }\n\n this._capture(properties)\n }\n\n private _onMouseMove(e: Event): void {\n if (isElementInToolbar(e.target) || !isValidMouseEvent(e)) {\n return\n }\n\n clearTimeout(this._mouseMoveTimeout)\n\n this._mouseMoveTimeout = setTimeout(() => {\n this._capture(this._getProperties(e as MouseEvent, 'mousemove'))\n }, 500)\n }\n\n private _capture(properties: Properties): void {\n if (!window) {\n return\n }\n\n const href = this._config.disable_capture_url_hashes ? stripUrlHash(window.location.href) : window.location.href\n\n // mask url query params\n const maskPersonalDataProperties = this._config.mask_personal_data_properties\n const customPersonalDataProperties = this._config.custom_personal_data_properties\n\n const paramsToMask = maskPersonalDataProperties\n ? [...PERSONAL_DATA_CAMPAIGN_PARAMS, ...(customPersonalDataProperties || [])]\n : []\n\n const url = maskQueryParams(href, paramsToMask, MASKED)\n\n this._buffer = this._buffer || {}\n\n if (!this._buffer[url]) {\n this._buffer[url] = []\n }\n\n this._buffer[url].push(properties)\n }\n\n private _flush(): void {\n if (!this._buffer || isEmptyObject(this._buffer)) {\n return\n }\n\n this.instance.capture('$$heatmap', {\n $heatmap_data: this.getAndClearBuffer(),\n })\n }\n}\n"]}
{"version":3,"file":"heatmaps.js","sourceRoot":"","sources":["../../src/heatmaps.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qEAA8C;AAI9C,2CAAkD;AAClD,yDAA8F;AAC9F,yCAA8G;AAC9G,sCAA0F;AAC1F,yCAA6C;AAC7C,uDAAgF;AAChF,gFAA4G;AAC5G,sCAAwC;AACxC,iCAA0C;AAC1C,uDAAuD;AACvD,mDAA2E;AAG3E,IAAM,sBAAsB,GAAG,IAAI,CAAA;AAEnC,IAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,YAAY,CAAC,CAAA;AAQzC,SAAS,8BAA8B,CAAC,EAAkB,EAAE,OAAiB,EAAE,cAAwB;;IACnG,IAAI,KAAK,GAA2B,EAAE,CAAA;IAEtC,OAAO,KAAK,IAAI,IAAA,6BAAa,EAAC,KAAK,CAAC,IAAI,CAAC,IAAA,qBAAK,EAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5D,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,IAAI,QAAQ,SAAoB,CAAA;QAChC,IAAI,CAAC;YACD,QAAQ,GAAG,MAAA,CAAC,MAAA,MAAA,KAAK,CAAC,aAAa,0CAAE,WAAW,mCAAI,gBAAM,CAAC,0CAAE,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAA;QAC7F,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,IAAI,IAAA,eAAQ,EAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA;QACf,CAAC;QAED,KAAK,GAAG,IAAA,oCAAgB,EAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAU;IACjC,OAAO,IAAA,eAAQ,EAAC,CAAC,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,IAAA,eAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAA,eAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,CAAA;AACxG,CAAC;AAED,SAAS,UAAU,CAAC,QAA8B;IAC9C,OAAO,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,MAAK,SAAS,CAAA;AAClD,CAAC;AAED;IAoBI,kBAAY,QAAiB;;QAjB7B,uBAAkB,GAAY,KAAK,CAAA;QAMnC,iBAAY,GAAG,KAAK,CAAA;QAIZ,mBAAc,GAA0C,IAAI,CAAA;QAQhE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,KAAK,CAAC,wCAA4B,CAAC,CAAA,CAAA;QAC1F,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC9D,CAAC;IAnBD,sBAAY,6BAAO;aAAnB;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;QAC/B,CAAC;;;OAAA;IAmBD,6BAAU,GAAV;QACI,IAAI,CAAC,cAAc,EAAE,CAAA;IACzB,CAAC;IAED,sBAAW,+CAAyB;aAApC;YACI,IAAI,aAAa,GAAG,sBAAsB,CAAA;YAC1C,IAAI,IAAA,eAAQ,EAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,CAAC;gBACvG,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,2BAA2B,CAAA;YAC7E,CAAC;YACD,OAAO,aAAa,CAAA;QACxB,CAAC;;;OAAA;IAED,sBAAW,+BAAS;aAApB;YACI,IAAI,CAAC,IAAA,gBAAS,EAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,KAAK,KAAK,CAAA;YAClD,CAAC;YACD,IAAI,CAAC,IAAA,gBAAS,EAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAA;YACvC,CAAC;YACD,OAAO,IAAI,CAAC,kBAAkB,CAAA;QAClC,CAAC;;;OAAA;IAEM,iCAAc,GAArB;;QACI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,oDAAoD;YACpD,4BAA4B;YAC5B,8CAA8C;YAC9C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAM;YACV,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YAC1B,IAAI,CAAC,eAAe,EAAE,CAAA;YACtB,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC9B,CAAC;aAAM,CAAC;YACJ,aAAa,CAAC,MAAA,IAAI,CAAC,cAAc,mCAAI,SAAS,CAAC,CAAA;YAC/C,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC5B,CAAC;IACL,CAAC;IAEM,iCAAc,GAArB,UAAsB,QAAsB;;QACxC,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAM;QACV,CAAC;QAED,IAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAEpC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ;gBAC9B,GAAC,wCAA4B,IAAG,KAAK;oBACvC,CAAA;QACN,CAAC;QACD,uDAAuD;QACvD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAA;QAC/B,IAAI,CAAC,cAAc,EAAE,CAAA;IACzB,CAAC;IAEM,oCAAiB,GAAxB;QACI,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACxB,OAAO,MAAM,CAAA;IACjB,CAAC;IAEO,+BAAY,GAApB,UAAqB,KAAyB;QAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;IACnD,CAAC;IAEO,sCAAmB,GAA3B;QACI,yCAAyC;QACzC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,kBAAQ,CAAC;YACtC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC;YACrE,CAAC,CAAC,IAAI,CAAA;IACd,CAAC;IAEO,kCAAe,GAAvB;QAAA,iBAyBC;QAxBG,IAAI,CAAC,gBAAM,IAAI,CAAC,kBAAQ,EAAE,CAAC;YACvB,OAAM;QACV,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,IAAA,wBAAgB,EAAC,gBAAM,EAAE,kCAAsB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAEpE,IAAI,CAAC,eAAe,GAAG,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAI,gBAAM,aAAN,gBAAM,uBAAN,gBAAM,CAAE,KAAK,CAAA,CAAe,CAAC,EAAjD,CAAiD,CAAA;QAC/E,IAAA,wBAAgB,EAAC,kBAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAE5E,IAAI,CAAC,mBAAmB,GAAG,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAI,gBAAM,aAAN,gBAAM,uBAAN,gBAAM,CAAE,KAAK,CAAA,CAAe,CAAC,EAArD,CAAqD,CAAA;QACvF,IAAA,wBAAgB,EAAC,kBAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAEpF,IAAI,CAAC,kBAAkB,GAAG,IAAI,+CAAqB,CAC/C,IAAI,CAAC,QAAQ,EACb,wDAA8B,EAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAA;QACD,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,CAAA;QAE9C,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtE,IAAA,wBAAgB,EAAC,kBAAQ,EAAE,sCAA0B,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;QAExF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC5B,CAAC;IAEO,mCAAgB,GAAxB;;QACI,IAAI,CAAC,gBAAM,IAAI,CAAC,kBAAQ,EAAE,CAAC;YACvB,OAAM;QACV,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,gBAAM,CAAC,mBAAmB,CAAC,kCAAsB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAC1E,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,kBAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAClF,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,kBAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1F,CAAC;QAED,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACnC,kBAAQ,CAAC,mBAAmB,CAAC,sCAA0B,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;QAC9F,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAEpC,MAAA,IAAI,CAAC,kBAAkB,0CAAE,IAAI,EAAE,CAAA;QAE/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;IAC7B,CAAC;IAEO,iCAAc,GAAtB,UAAuB,CAAa,EAAE,IAAY;QAC9C,wDAAwD;QACxD,+CAA+C;QAC/C,4CAA4C;QAE5C,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;QACrD,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;QACrD,IAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,EAAE,CAAA;QAEjE,IAAM,eAAe,GAAG,8BAA8B,CAAC,IAAA,kCAAc,EAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAA;QAE7G,OAAO;YACH,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,YAAY,EAAE,eAAe;YAC7B,IAAI,MAAA;SACP,CAAA;IACL,CAAC;IAEO,2BAAQ,GAAhB,UAAiB,CAAa,EAAE,IAAsB;;QAAtB,qBAAA,EAAA,cAAsB;QAClD,IAAI,IAAA,kCAAkB,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAM;QACV,CAAC;QAED,IAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAE/C,IACI,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACxE,IAAA,0CAAsB,EAAC,IAAA,kCAAc,EAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAC3E,CAAC;YACC,IAAI,CAAC,QAAQ,uBACN,UAAU,KACb,IAAI,EAAE,WAAW,IACnB,CAAA;QACN,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC7B,CAAC;IAEO,+BAAY,GAApB,UAAqB,CAAQ;QAA7B,iBAUC;QATG,IAAI,IAAA,kCAAkB,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAM;QACV,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAEpC,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;YAChC,KAAI,CAAC,QAAQ,CAAC,KAAI,CAAC,cAAc,CAAC,CAAe,EAAE,WAAW,CAAC,CAAC,CAAA;QACpE,CAAC,EAAE,GAAG,CAAC,CAAA;IACX,CAAC;IAEO,2BAAQ,GAAhB,UAAiB,UAAsB;QACnC,IAAI,CAAC,gBAAM,EAAE,CAAC;YACV,OAAM;QACV,CAAC;QAED,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAA,mBAAY,EAAC,gBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAM,CAAC,QAAQ,CAAC,IAAI,CAAA;QAEhH,wBAAwB;QACxB,IAAM,0BAA0B,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAA;QAC7E,IAAM,4BAA4B,GAAG,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAA;QAEjF,IAAM,YAAY,GAAG,0BAA0B;YAC3C,CAAC,wCAAK,2CAA6B,kBAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,UAC5E,CAAC,CAAC,EAAE,CAAA;QAER,IAAM,GAAG,GAAG,IAAA,+BAAe,EAAC,IAAI,EAAE,YAAY,EAAE,oBAAM,CAAC,CAAA;QAEvD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;QAEjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QAC1B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtC,CAAC;IAEO,yBAAM,GAAd;QACI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAA,oBAAa,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,OAAM;QACV,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;YAC/B,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE;SAC1C,CAAC,CAAA;IACN,CAAC;IACL,eAAC;AAAD,CAAC,AArPD,IAqPC;AArPY,4BAAQ","sourcesContent":["import RageClick from './extensions/rageclick'\nimport { DeadClickCandidate, Properties, RemoteConfig } from './types'\nimport { PostHog } from './posthog-core'\n\nimport { document, window } from './utils/globals'\nimport { getEventTarget, getParentElement, shouldCaptureRageclick } from './autocapture-utils'\nimport { DOM_EVENT_BEFOREUNLOAD, DOM_EVENT_VISIBILITYCHANGE, HEATMAPS_ENABLED_SERVER_SIDE } from './constants'\nimport { isNumber, isNullish, isEmptyObject, isObject, stripUrlHash } from '@posthog/core'\nimport { createLogger } from './utils/logger'\nimport { isElementInToolbar, isElementNode, isTag } from './utils/element-utils'\nimport { DeadClicksAutocapture, isDeadClicksEnabledForHeatmaps } from './extensions/dead-clicks-autocapture'\nimport { includes } from '@posthog/core'\nimport { addEventListener } from './utils'\nimport { maskQueryParams } from './utils/request-utils'\nimport { PERSONAL_DATA_CAMPAIGN_PARAMS, MASKED } from './utils/event-utils'\nimport type { Extension } from './extensions/types'\n\nconst DEFAULT_FLUSH_INTERVAL = 5000\n\nconst logger = createLogger('[Heatmaps]')\n\ntype HeatmapEventBuffer =\n | {\n [key: string]: Properties[]\n }\n | undefined\n\nfunction elementOrParentPositionMatches(el: Element | null, matches: string[], breakOnElement?: Element): boolean {\n let curEl: Element | null | false = el\n\n while (curEl && isElementNode(curEl) && !isTag(curEl, 'body')) {\n if (curEl === breakOnElement) {\n return false\n }\n\n let position: string | undefined\n try {\n position = (curEl.ownerDocument?.defaultView ?? window)?.getComputedStyle(curEl).position\n } catch {\n return false\n }\n\n if (includes(matches, position)) {\n return true\n }\n\n curEl = getParentElement(curEl)\n }\n\n return false\n}\n\nfunction isValidMouseEvent(e: unknown): e is MouseEvent {\n return isObject(e) && 'clientX' in e && 'clientY' in e && isNumber(e.clientX) && isNumber(e.clientY)\n}\n\nfunction shouldPoll(document: Document | undefined): boolean {\n return document?.visibilityState === 'visible'\n}\n\nexport class Heatmaps implements Extension {\n instance: PostHog\n rageclicks: RageClick\n _enabledServerSide: boolean = false\n\n private get _config() {\n return this.instance.config\n }\n\n _initialized = false\n _mouseMoveTimeout: ReturnType<typeof setTimeout> | undefined\n\n private _buffer: HeatmapEventBuffer\n private _flushInterval: ReturnType<typeof setInterval> | null = null\n private _deadClicksCapture: DeadClicksAutocapture | undefined\n private _onClickHandler: ((e: Event) => void) | undefined\n private _onMouseMoveHandler: ((e: Event) => void) | undefined\n private _flushHandler: (() => void) | undefined\n private _onVisibilityChange_handler: (() => void) | undefined\n\n constructor(instance: PostHog) {\n this.instance = instance\n this._enabledServerSide = !!this.instance.persistence?.props[HEATMAPS_ENABLED_SERVER_SIDE]\n this.rageclicks = new RageClick(instance.config.rageclick)\n }\n\n initialize() {\n this.startIfEnabled()\n }\n\n public get flushIntervalMilliseconds(): number {\n let flushInterval = DEFAULT_FLUSH_INTERVAL\n if (isObject(this._config.capture_heatmaps) && this._config.capture_heatmaps.flush_interval_milliseconds) {\n flushInterval = this._config.capture_heatmaps.flush_interval_milliseconds\n }\n return flushInterval\n }\n\n public get isEnabled(): boolean {\n if (!isNullish(this._config.capture_heatmaps)) {\n return this._config.capture_heatmaps !== false\n }\n if (!isNullish(this._config.enable_heatmaps)) {\n return this._config.enable_heatmaps\n }\n return this._enabledServerSide\n }\n\n public startIfEnabled(): void {\n if (this.isEnabled) {\n // nested if here since we only want to run the else\n // if this.enabled === false\n // not if this method is called more than once\n if (this._initialized) {\n return\n }\n logger.info('starting...')\n this._setupListeners()\n this._onVisibilityChange()\n } else {\n clearInterval(this._flushInterval ?? undefined)\n this._removeListeners()\n this.getAndClearBuffer()\n }\n }\n\n public onRemoteConfig(response: RemoteConfig) {\n if (!('heatmaps' in response)) {\n return\n }\n\n const optIn = !!response['heatmaps']\n\n if (this.instance.persistence) {\n this.instance.persistence.register({\n [HEATMAPS_ENABLED_SERVER_SIDE]: optIn,\n })\n }\n // store this in-memory in case persistence is disabled\n this._enabledServerSide = optIn\n this.startIfEnabled()\n }\n\n public getAndClearBuffer(): HeatmapEventBuffer {\n const buffer = this._buffer\n this._buffer = undefined\n return buffer\n }\n\n private _onDeadClick(click: DeadClickCandidate): void {\n this._onClick(click.originalEvent, 'deadclick')\n }\n\n private _onVisibilityChange(): void {\n // always clear the interval just in case\n if (this._flushInterval) {\n clearInterval(this._flushInterval)\n }\n\n this._flushInterval = shouldPoll(document)\n ? setInterval(this._flush.bind(this), this.flushIntervalMilliseconds)\n : null\n }\n\n private _setupListeners(): void {\n if (!window || !document) {\n return\n }\n\n this._flushHandler = this._flush.bind(this)\n addEventListener(window, DOM_EVENT_BEFOREUNLOAD, this._flushHandler)\n\n this._onClickHandler = (e) => this._onClick((e || window?.event) as MouseEvent)\n addEventListener(document, 'click', this._onClickHandler, { capture: true })\n\n this._onMouseMoveHandler = (e) => this._onMouseMove((e || window?.event) as MouseEvent)\n addEventListener(document, 'mousemove', this._onMouseMoveHandler, { capture: true })\n\n this._deadClicksCapture = new DeadClicksAutocapture(\n this.instance,\n isDeadClicksEnabledForHeatmaps,\n this._onDeadClick.bind(this)\n )\n this._deadClicksCapture.startIfEnabledOrStop()\n\n this._onVisibilityChange_handler = this._onVisibilityChange.bind(this)\n addEventListener(document, DOM_EVENT_VISIBILITYCHANGE, this._onVisibilityChange_handler)\n\n this._initialized = true\n }\n\n private _removeListeners(): void {\n if (!window || !document) {\n return\n }\n\n if (this._flushHandler) {\n window.removeEventListener(DOM_EVENT_BEFOREUNLOAD, this._flushHandler)\n }\n\n if (this._onClickHandler) {\n document.removeEventListener('click', this._onClickHandler, { capture: true })\n }\n\n if (this._onMouseMoveHandler) {\n document.removeEventListener('mousemove', this._onMouseMoveHandler, { capture: true })\n }\n\n if (this._onVisibilityChange_handler) {\n document.removeEventListener(DOM_EVENT_VISIBILITYCHANGE, this._onVisibilityChange_handler)\n }\n\n clearTimeout(this._mouseMoveTimeout)\n\n this._deadClicksCapture?.stop()\n\n this._initialized = false\n }\n\n private _getProperties(e: MouseEvent, type: string): Properties {\n // We need to know if the target element is fixed or not\n // If fixed then we won't account for scrolling\n // If not then we will account for scrolling\n\n const scrollY = this.instance.scrollManager.scrollY()\n const scrollX = this.instance.scrollManager.scrollX()\n const scrollElement = this.instance.scrollManager.scrollElement()\n\n const isFixedOrSticky = elementOrParentPositionMatches(getEventTarget(e), ['fixed', 'sticky'], scrollElement)\n\n return {\n x: e.clientX + (isFixedOrSticky ? 0 : scrollX),\n y: e.clientY + (isFixedOrSticky ? 0 : scrollY),\n target_fixed: isFixedOrSticky,\n type,\n }\n }\n\n private _onClick(e: MouseEvent, type: string = 'click'): void {\n if (isElementInToolbar(e.target) || !isValidMouseEvent(e)) {\n return\n }\n\n const properties = this._getProperties(e, type)\n\n if (\n this.rageclicks?.isRageClick(e.clientX, e.clientY, new Date().getTime()) &&\n shouldCaptureRageclick(getEventTarget(e), this.instance.config.rageclick)\n ) {\n this._capture({\n ...properties,\n type: 'rageclick',\n })\n }\n\n this._capture(properties)\n }\n\n private _onMouseMove(e: Event): void {\n if (isElementInToolbar(e.target) || !isValidMouseEvent(e)) {\n return\n }\n\n clearTimeout(this._mouseMoveTimeout)\n\n this._mouseMoveTimeout = setTimeout(() => {\n this._capture(this._getProperties(e as MouseEvent, 'mousemove'))\n }, 500)\n }\n\n private _capture(properties: Properties): void {\n if (!window) {\n return\n }\n\n const href = this._config.disable_capture_url_hashes ? stripUrlHash(window.location.href) : window.location.href\n\n // mask url query params\n const maskPersonalDataProperties = this._config.mask_personal_data_properties\n const customPersonalDataProperties = this._config.custom_personal_data_properties\n\n const paramsToMask = maskPersonalDataProperties\n ? [...PERSONAL_DATA_CAMPAIGN_PARAMS, ...(customPersonalDataProperties || [])]\n : []\n\n const url = maskQueryParams(href, paramsToMask, MASKED)\n\n this._buffer = this._buffer || {}\n\n if (!this._buffer[url]) {\n this._buffer[url] = []\n }\n\n this._buffer[url].push(properties)\n }\n\n private _flush(): void {\n if (!this._buffer || isEmptyObject(this._buffer)) {\n return\n }\n\n this.instance.capture('$$heatmap', {\n $heatmap_data: this.getAndClearBuffer(),\n })\n }\n}\n"]}
{
"name": "posthog-js",
"version": "1.396.4",
"version": "1.396.5",
"bugs": {

@@ -13,3 +13,3 @@ "url": "https://github.com/PostHog/posthog-js/issues"

"author": "engineering@posthog.com",
"license": "SEE LICENSE IN LICENSE",
"license": "(Apache-2.0 AND MIT)",
"homepage": "https://posthog.com/docs/libraries/js",

@@ -37,4 +37,4 @@ "main": "dist/main.js",

"web-vitals": "^5.3.0",
"@posthog/core": "^1.39.3",
"@posthog/types": "^1.392.0"
"@posthog/types": "^1.392.0",
"@posthog/core": "^1.39.5"
},

@@ -105,5 +105,5 @@ "devDependencies": {

"@posthog/rrweb": "0.0.75",
"@posthog/rrweb-plugin-console-record": "0.0.75",
"@posthog/rrweb-record": "0.0.75",
"@posthog/rrweb-types": "0.0.62",
"@posthog/rrweb-plugin-console-record": "0.0.75"
"@posthog/rrweb-types": "0.0.62"
},

@@ -110,0 +110,0 @@ "browserslist": [

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display