@gemx-dev/clarity-js 0.8.46 → 0.8.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- !function(){"use strict";var t=Object.freeze({__proto__:null,get queue(){return Bt},get start(){return Yt},get stop(){return Wt},get track(){return Rt}}),e=Object.freeze({__proto__:null,get check(){return te},get compute(){return ne},get data(){return Xt},get start(){return $t},get stop(){return re},get trigger(){return ee}}),n=Object.freeze({__proto__:null,get compute(){return le},get data(){return ae},get log(){return se},get reset(){return de},get start(){return ue},get stop(){return ce},get updates(){return oe}}),r=Object.freeze({__proto__:null,get callback(){return Oe},get callbacks(){return fe},get clear(){return Te},get consent(){return _e},get consentv2(){return Se},get data(){return pe},get electron(){return he},get id(){return ke},get metadata(){return we},get save(){return Me},get shortid(){return Ne},get start(){return ye},get stop(){return be}}),a=Object.freeze({__proto__:null,get data(){return Re},get envelope(){return Ue},get start(){return Xe},get stop(){return Le}}),o={projectId:null,delay:1e3,lean:!1,lite:!1,track:!0,content:!0,drop:[],mask:[],unmask:[],regions:[],cookies:[],fraud:!0,checksum:[],report:null,upload:null,fallback:null,upgrade:null,action:null,dob:null,delayDom:!1,throttleDom:!0,conversions:!1,includeSubdomains:!0};function i(t){return window.Zone&&"__symbol__"in window.Zone?window.Zone.__symbol__(t):t}var u=0;function c(){return performance.now()+performance.timeOrigin}function s(t){void 0===t&&(t=null);var e=0===u?c():u,n=t&&t.timeStamp>0?t.timeStamp:performance.now(),r=t&&t.view?t.view.performance.timeOrigin:performance.timeOrigin;return Math.max(Math.round(n+r-e),0)}var l="0.8.42";var d=/\S/gi,p=255,f=!0,h=null,g=null,v=null;function m(t,e,n,r,a){if(void 0===r&&(r=!1),t){if("input"==e&&("checkbox"===a||"radio"===a))return t;switch(n){case 0:return t;case 1:switch(e){case"*T":case"value":case"placeholder":case"click":return function(t){var e=-1,n=0,r=!1,a=!1,o=!1,i=null;S();for(var u=0;u<t.length;u++){var c=t.charCodeAt(u);if(r=r||c>=48&&c<=57,a=a||64===c,o=9===c||10===c||13===c||32===c,0===u||u===t.length-1||o){if(r||a){null===i&&(i=t.split(""));var s=t.substring(e+1,o?u:u+1);s=f&&null!==v?s.match(v)?s:k(s,"▪","▫"):w(s),i.splice(e+1-n,s.length,s),n+=s.length-1}o&&(r=!1,a=!1,e=u)}}return i?i.join(""):t}(t);case"input":case"change":return _(t)}return t;case 2:case 3:switch(e){case"*T":case"data-":return r?b(t):w(t);case"src":case"srcset":case"title":case"alt":return 3===n?"src"===e&&(null==t?void 0:t.startsWith("blob:"))?"blob:":"":t;case"value":case"click":case"input":case"change":return _(t);case"placeholder":return w(t)}break;case 4:switch(e){case"*T":case"data-":return r?b(t):w(t);case"value":case"input":case"click":case"change":return Array(5).join("•");case"checksum":return""}break;case 5:switch(e){case"*T":case"data-":return k(t,"▪","▫");case"value":case"input":case"click":case"change":return Array(5).join("•");case"checksum":case"src":case"srcset":case"alt":case"title":return""}}}return t}function y(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var r=t;if(e)r="".concat("https://").concat("Electron");else{var a=o.drop;if(a&&a.length>0&&t&&t.indexOf("?")>0){var i=t.split("?"),u=i[0],c=i[1];r=u+"?"+c.split("&").map((function(t){return a.some((function(e){return 0===t.indexOf("".concat(e,"="))}))?"".concat(t.split("=")[0],"=").concat("*na*"):t})).join("&")}}return n&&(r=r.substring(0,p)),r}function b(t){var e=t.trim();if(e.length>0){var n=e[0],r=t.indexOf(n),a=t.substr(0,r),o=t.substr(r+e.length);return"".concat(a).concat(e.length.toString(36)).concat(o)}return t}function w(t){return t.replace(d,"•")}function k(t,e,n){return S(),t?t.replace(g,e).replace(h,n):t}function _(t){for(var e=5*(Math.floor(t.length/5)+1),n="",r=0;r<e;r++)n+=r>0&&r%5==0?" ":"•";return n}function S(){if(f&&null===h)try{h=new RegExp("\\p{N}","gu"),g=new RegExp("\\p{L}","gu"),v=new RegExp("\\p{Sc}","gu")}catch(t){f=!1}}var E=[],I=null;function T(){}var O=[];function M(){}function x(){}function C(){}function N(){}function j(){}var z=Object.freeze({__proto__:null,checkDocumentStyles:function(t){},compute:function(){},data:I,event:N,hashText:M,keys:O,log:T,observe:function(){},register:j,reset:function(){},sheetAdoptionState:[],sheetUpdateState:[],start:function(){},state:E,stop:function(){},track:C,trigger:x}),A=null,P=!0;function q(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;if(null==e?void 0:e.getConsentState){var n=e.getConsentState("analytics_storage");Se(function(t){var e={ad_Storage:1===t.ad_Storage?"granted":"denied",analytics_Storage:1===t.analytics_Storage?"granted":"denied"};return e}({ad_Storage:e.getConsentState("ad_storage"),analytics_Storage:n}),2)}}function D(t){X(t.analytics_Storage?1:0),A=t}function R(){X(2)}function X(t){se(36,t.toString())}function L(t){A=t,Qt(47)}function U(){var t;if(P&&(Qt(47),P=!1,!o.track)){var e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;(null==e?void 0:e.usedUpdate)&&q()}}var H=Object.freeze({__proto__:null,compute:U,config:D,consent:R,get data(){return A},start:function(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;P=!0,(null==e?void 0:e.addListener)&&e.addListener(["ad_storage","analytics_storage"],q)},stop:function(){P=!0},trackConsentv2:L}),V=null;function G(t,e){pn()&&t&&"string"==typeof t&&t.length<255&&(V=e&&"string"==typeof e&&e.length<255?{key:t,value:e}:{value:t},Qt(24))}var Y,B=null,W=null;function Z(t){t in B||(B[t]=0),t in W||(W[t]=0),B[t]++,W[t]++}function J(t,e){null!==e&&(t in B||(B[t]=0),t in W||(W[t]=0),B[t]+=e,W[t]+=e)}function F(t,e){null!==e&&!1===isNaN(e)&&(t in B||(B[t]=0),(e>B[t]||0===B[t])&&(W[t]=e,B[t]=e))}function K(t,e,n){return window.setTimeout(Ge(t),e,n)}function Q(t){return window.clearTimeout(t)}var $=0,tt=0,et=null;function nt(){et&&Q(et),et=K(rt,tt),$=s()}function rt(){var t=s();Y={gap:t-$},Qt(25),Y.gap<3e5?et=K(rt,tt):sn&&(G("clarityGemX","suspend"),Pn(),["mousemove","touchstart"].forEach((function(t){return Be(document,t,fn)})),["resize","scroll","pageshow"].forEach((function(t){return Be(window,t,fn)})))}var at=Object.freeze({__proto__:null,get data(){return Y},reset:nt,start:function(){tt=6e4,$=0},stop:function(){Q(et),$=0,tt=0}}),ot=null;function it(t){pn()&&o.lean&&(o.lean=!1,ot={key:t},Oe(),Me(),o.upgrade&&o.upgrade(t),Qt(3),o.lite)}var ut=Object.freeze({__proto__:null,get data(){return ot},start:function(){!o.lean&&o.upgrade&&o.upgrade("Config"),ot=null},stop:function(){ot=null},upgrade:it});function ct(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{c(r.next(t))}catch(t){o(t)}}function u(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,u)}c((r=r.apply(t,e||[])).next())}))}function st(t,e){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){i.label=u[1];break}if(6===u[0]&&i.label<a[1]){i.label=a[1],a=u;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(u);break}a[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}var lt=null;function dt(t,e){ft(t,"string"==typeof e?[e]:e)}function pt(t,e,n,r){return void 0===e&&(e=null),void 0===n&&(n=null),void 0===r&&(r=null),ct(this,void 0,void 0,(function(){var a,o;return st(this,(function(i){switch(i.label){case 0:return o={},[4,vt(t)];case 1:return o.userId=i.sent(),o.userHint=r||((u=t)&&u.length>=5?"".concat(u.substring(0,2)).concat(k(u.substring(2),"*","*")):k(u,"*","*")),ft("userId",[(a=o).userId]),ft("userHint",[a.userHint]),ft("userType",[mt(t)]),e&&(ft("sessionId",[e]),a.sessionId=e),n&&(ft("pageId",[n]),a.pageId=n),[2,a]}var u}))}))}function ft(t,e){if(pn()&&t&&e&&"string"==typeof t&&t.length<255){for(var n=(t in lt?lt[t]:[]),r=0;r<e.length;r++)"string"==typeof e[r]&&e[r].length<255&&n.push(e[r]);lt[t]=n}}function ht(){Qt(34)}function gt(){lt={}}function vt(t){return ct(this,void 0,void 0,(function(){var e;return st(this,(function(n){switch(n.label){case 0:return n.trys.push([0,4,,5]),crypto&&t?[4,crypto.subtle.digest("SHA-256",(new TextEncoder).encode(t))]:[3,2];case 1:return e=n.sent(),[2,Array.prototype.map.call(new Uint8Array(e),(function(t){return("00"+t.toString(16)).slice(-2)})).join("")];case 2:return[2,""];case 3:return[3,5];case 4:return n.sent(),[2,""];case 5:return[2]}}))}))}function mt(t){return t&&t.indexOf("@")>0?"email":"string"}var yt="CompressionStream"in window;function bt(t){return ct(this,void 0,void 0,(function(){var e,n;return st(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),yt?(e=new ReadableStream({start:function(e){return ct(this,void 0,void 0,(function(){return st(this,(function(n){return e.enqueue(t),e.close(),[2]}))}))}}).pipeThrough(new TextEncoderStream).pipeThrough(new window.CompressionStream("gzip")),n=Uint8Array.bind,[4,wt(e)]):[3,2];case 1:return[2,new(n.apply(Uint8Array,[void 0,r.sent()]))];case 2:return[3,4];case 3:return r.sent(),[3,4];case 4:return[2,null]}}))}))}function wt(t){return ct(this,void 0,void 0,(function(){var e,n,r,a,o;return st(this,(function(i){switch(i.label){case 0:e=t.getReader(),n=[],r=!1,a=[],i.label=1;case 1:return r?[3,3]:[4,e.read()];case 2:return o=i.sent(),r=o.done,a=o.value,r?[2,n]:(n.push.apply(n,a),[3,1]);case 3:return[2,n]}}))}))}var kt=null;function _t(t){try{if(!kt)return;var e=function(t){try{return JSON.parse(t)}catch(t){return[]}}(t);e.forEach((function(t){kt(t)}))}catch(t){}}var St=[z,n,Object.freeze({__proto__:null,compute:ht,get data(){return lt},identify:pt,reset:gt,set:dt,start:function(){gt()},stop:function(){gt()}}),e,z,H,r,a,t,at,ut,z];function Et(){B={},W={},Z(5),St.forEach((function(t){return Ge(t.start)()}))}function It(){St.slice().reverse().forEach((function(t){return Ge(t.stop)()})),B={},W={}}function Tt(){ht(),le(),Qt(0),ne(),U()}function Ot(t,e,n){return"".concat(t,"=").concat(m(e,0===t.indexOf("data-")?"data-":t,n))}var Mt=[],xt=1,Ct=null;function Nt(){Mt=[],function(t){var e=[t];for(;e.length>0;){for(var n=null,r=null,a=null,o=e.shift(),i=o.firstChild,u=o.parentElement?o.parentElement:o.parentNode?o.parentNode:null;i;)e.push(i),i=i.nextSibling;switch(o.nodeType){case Node.DOCUMENT_TYPE_NODE:var c=o;r="*D",n={name:c.name,publicId:c.publicId,systemId:c.systemId};break;case Node.TEXT_NODE:a=o.nodeValue,r=Ct.get(u)?"*T":r;break;case Node.ELEMENT_NODE:var s=o;n=jt(s),r=["NOSCRIPT","SCRIPT","STYLE"].indexOf(s.tagName)<0?s.tagName:r}zt(o,u,{tag:r,attributes:n,value:a})}}(document),function(t){ct(this,void 0,void 0,(function(){var e,n,r,a,o,i,u,c,l,d,p,f,h;return st(this,(function(g){switch(e=s(),n=[e,t],t){case 8:r=I,n.push(r.width),n.push(r.height),r.width,r.height,Bt(n);break;case 43:if((a=Mt).length>0){for(o=0,i=a;o<i.length;o++)for(u=i[o],c=u.metadata.privacy,l=u.data,d=0,p=["tag","attributes","value"];d<p.length;d++)if(l[f=p[d]])switch(f){case"tag":n.push(u.id),u.parent&&n.push(u.parent),u.previous&&n.push(u.previous),n.push(l[f]);break;case"attributes":for(h in l[f])void 0!==l[f][h]&&n.push(Ot(h,l[f][h],c));break;case"value":n.push(m(l[f],l.tag,c))}Bt(function(t){for(var e=[],n={},r=0,a=null,o=0;o<t.length;o++)if("string"==typeof t[o]){var i=t[o],u=n[i]||-1;u>=0?a?a.push(u):(a=[u],e.push(a),r++):(a=null,e.push(i),n[i]=r++)}else a=null,e.push(t[o]),r++;return e}(n),!0)}}return[2]}))}))}(43)}function jt(t){var e={},n=t.attributes;if(n&&n.length>0)for(var r=0;r<n.length;r++)e[n[r].name]=n[r].value;return e}function zt(t,e,n){if(t&&n&&n.tag){var r=function(t){return null===t?null:Ct.has(t)?Ct.get(t):(Ct.set(t,xt),xt++)}(t),a=e?Ct.get(e):null,o=t.previousSibling?Ct.get(t.previousSibling):null;Mt.push({id:r,parent:a,previous:o,children:[],data:n,selector:null,hash:null,region:null,metadata:{active:!0,suspend:!1,privacy:5,position:null,fraud:null,size:null}})}}var At,Pt,qt,Dt,Rt,Xt,Lt=0,Ut=0,Ht=null,Vt=0,Gt=!1;function Yt(){Dt=!0,Lt=0,Ut=0,Gt=!1,Vt=0,At=[],Pt=[],qt={},Rt=null}function Bt(t,e){if(void 0===e&&(e=!0),Dt){var n=s(),r=t.length>1?t[1]:null,a=JSON.stringify(t);switch(o.lean?!Gt&&Ut+a.length>10485760&&(Gt=!0):Gt=!1,r){case 5:if(Gt)break;Lt+=a.length;case 37:case 6:case 43:case 45:case 46:case 44:case 51:if(Gt)break;Ut+=a.length,At.push(a);break;default:Pt.push(a)}Z(25);var i=function(){var t=!1===o.lean&&Lt>0?100:Re.sequence*o.delay;return"string"==typeof o.upload?Math.max(Math.min(t,3e4),100):o.delay}();n-Vt>2*i&&(Q(Ht),Ht=null),e&&null===Ht&&(25!==r&&nt(),Ht=K(Zt,i),Vt=n,te(Ut))}}function Wt(){Q(Ht),Zt(!0),Lt=0,Ut=0,Gt=!1,Vt=0,At=[],Pt=[],qt={},Rt=null,Dt=!1}function Zt(t){return void 0===t&&(t=!1),ct(this,void 0,void 0,(function(){var e,n,r,a,i,u,c,s;return st(this,(function(l){switch(l.label){case 0:return Dt?(Ht=null,(e=!1===o.lean&&Ut>0&&(Ut<1048576||Re.sequence>0))&&F(1,1),Tt(),n=!0===t,Re?(r=JSON.stringify(Ue(n)),a="[".concat(Pt.join(),"]"),i=e?"[".concat(At.join(),"]"):"",n&&i.length>0&&r.length+a.length+i.length>65536&&(i=""),u=function(t){return t.p.length>0?'{"e":'.concat(t.e,',"a":').concat(t.a,',"p":').concat(t.p,"}"):'{"e":'.concat(t.e,',"a":').concat(t.a,"}")}({e:r,a:a,p:i}),n?(s=null,[3,3]):[3,1]):[2]):[2];case 1:return[4,bt(u)];case 2:s=l.sent(),l.label=3;case 3:return J(2,(c=s)?c.length:u.length),Jt(u,c,Re.sequence,n),Pt=[],e&&(At=[],Ut=0,Lt=0,Gt=!1),[2]}}))}))}function Jt(t,e,n,r){if(void 0===r&&(r=!1),"string"==typeof o.upload){var a=o.upload,i=!1;if(r&&navigator&&navigator.sendBeacon)try{(i=navigator.sendBeacon.bind(navigator)(a,t))&&Kt(n)}catch(t){}if(!1===i){n in qt?qt[n].attempts++:qt[n]={data:t,attempts:1};var u=new XMLHttpRequest;u.open("POST",a,!0),u.timeout=15e3,u.ontimeout=function(){Ve(new Error("".concat("Timeout"," : ").concat(a)))},null!==n&&(u.onreadystatechange=function(){Ge(Ft)(u,n)}),u.withCredentials=!0,e?(u.setRequestHeader("Accept","application/x-clarity-gzip"),u.send(e)):u.send(t)}}else if(o.upload){(0,o.upload)(t),Kt(n)}}function Ft(t,e){var n=qt[e];t&&4===t.readyState&&n&&((t.status<200||t.status>208)&&n.attempts<=1?t.status>=400&&t.status<500?ee(6):(0===t.status&&(o.upload=o.fallback?o.fallback:o.upload),Rt={sequence:e,attempts:n.attempts,status:t.status},Qt(2),Jt(n.data,null,e)):(Rt={sequence:e,attempts:n.attempts,status:t.status},n.attempts>1&&Qt(2),200===t.status&&t.responseText&&function(t){for(var e=t&&t.length>0?t.split("\n"):[],n=0,r=e;n<r.length;n++){var a=r[n],i=a&&a.length>0?a.split(/ (.*)/):[""];switch(i[0]){case"END":ee(6);break;case"UPGRADE":it("Auto");break;case"ACTION":o.action&&i.length>1&&o.action(i[1]);break;case"EXTRACT":case"MODULE":i.length>1&&i[1];break;case"SIGNAL":i.length>1&&_t(i[1]);break;case"SNAPSHOT":o.lean=!1,Nt()}}}(t.responseText),0===t.status&&(Jt(n.data,null,e,!0),ee(3)),t.status>=200&&t.status<=208&&Kt(e),delete qt[e]))}function Kt(t){1===t&&(Me(),Oe())}function Qt(t){var e=[s(),t];switch(t){case 4:var n=E;n&&n.data&&((e=[n.time,n.event]).push(n.data.visible),e.push(n.data.docWidth),e.push(n.data.docHeight),e.push(n.data.screenWidth),e.push(n.data.screenHeight),e.push(n.data.scrollX),e.push(n.data.scrollY),e.push(n.data.pointerX),e.push(n.data.pointerY),e.push(n.data.activityTime),e.push(n.data.scrollTime),e.push(n.data.pointerTime),e.push(n.data.moveX),e.push(n.data.moveY),e.push(n.data.moveTime),e.push(n.data.downX),e.push(n.data.downY),e.push(n.data.downTime),e.push(n.data.upX),e.push(n.data.upY),e.push(n.data.upTime),e.push(n.data.pointerPrevX),e.push(n.data.pointerPrevY),e.push(n.data.pointerPrevTime),e.push(n.data.modules),Bt(e,!1));break;case 25:e.push(Y.gap),Bt(e);break;case 35:e.push(Xt.check),Bt(e,!1);break;case 3:e.push(ot.key),Bt(e);break;case 2:e.push(Rt.sequence),e.push(Rt.attempts),e.push(Rt.status),Bt(e,!1);break;case 24:V.key&&e.push(V.key),e.push(V.value),Bt(e);break;case 34:var r=Object.keys(lt);if(r.length>0){for(var a=0,o=r;a<o.length;a++){var i=o[a];e.push(i),e.push(lt[i])}gt(),Bt(e,!1)}break;case 0:var u=Object.keys(W);if(u.length>0){for(var c=0,l=u;c<l.length;c++){var d=l[c],p=parseInt(d,10);e.push(p),e.push(Math.round(W[d]))}W={},Bt(e,!1)}break;case 1:var f=Object.keys(oe);if(f.length>0){for(var h=0,g=f;h<g.length;h++){var v=g[h];p=parseInt(v,10);e.push(p),e.push(oe[v])}de(),Bt(e,!1)}break;case 36:var m=Object.keys(I);if(m.length>0){for(var y=0,b=m;y<b.length;y++){var w=b[y];p=parseInt(w,10);e.push(p),e.push([].concat.apply([],I[w]))}Bt(e,!1)}break;case 40:O.forEach((function(t){e.push(t);var n=[];for(var r in I[t]){var a=parseInt(r,10);n.push(a),n.push(I[t][r])}e.push(n)})),Bt(e,!1);break;case 47:e.push(A.source),e.push(A.ad_Storage),e.push(A.analytics_Storage),Bt(e,!1)}}function $t(){Xt={check:0}}function te(t){if(0===Xt.check){var e=Xt.check;e=Re.sequence>=128?1:e,e=Re.pageNum>=128?7:e,e=s()>72e5?2:e,(e=t>10485760?2:e)!==Xt.check&&ee(e)}}function ee(t){Xt.check=t,5!==t&&(Te(),Pn())}function ne(){0!==Xt.check&&Qt(35)}function re(){Xt=null}var ae=null,oe=null,ie=!1;function ue(){ae={},oe={},ie=!1}function ce(){ae={},oe={},ie=!1}function se(t,e){if(e&&(e="".concat(e),t in ae||(ae[t]=[]),ae[t].indexOf(e)<0)){if(ae[t].length>128)return void(ie||(ie=!0,ee(5)));ae[t].push(e),t in oe||(oe[t]=[]),oe[t].push(e)}}function le(){Qt(1)}function de(){oe={},ie=!1}var pe=null,fe=[],he=0,ge=null,ve=null,me={ad_Storage:"denied",analytics_Storage:"denied"};function ye(){var t,e,n;ge=null;var r=navigator&&"userAgent"in navigator?navigator.userAgent:"",a=null!==(n="undefined"!=typeof Intl&&(null===(e=null===(t=null===Intl||void 0===Intl?void 0:Intl.DateTimeFormat())||void 0===t?void 0:t.resolvedOptions())||void 0===e?void 0:e.timeZone))&&void 0!==n?n:"",i=(new Date).getTimezoneOffset().toString(),u=window.location.ancestorOrigins?Array.from(window.location.ancestorOrigins).toString():"",c=document&&document.title?document.title:"";he=r.indexOf("Electron")>0?1:0;var s=function(){var t={session:Ne(),ts:Math.round(Date.now()),count:1,upgrade:null,upload:""},e=Ae("_clsk",!o.includeSubdomains);if(e){var n=e.includes("^")?e.split("^"):e.split("|");n.length>=5&&t.ts-je(n[1])<18e5&&(t.session=n[0],t.count=je(n[2])+1,t.upgrade=je(n[3]),t.upload=n.length>=6?"".concat("https://").concat(n[5],"/").concat(n[4]):"".concat("https://").concat(n[4]))}return t}(),l=ze(),d=o.projectId||function(t,e){void 0===e&&(e=null);for(var n,r=5381,a=r,o=0;o<t.length;o+=2)r=(r<<5)+r^t.charCodeAt(o),o+1<t.length&&(a=(a<<5)+a^t.charCodeAt(o+1));return n=Math.abs(r+11579*a),(e?n%Math.pow(2,e):n).toString(36)}(location.host);pe={projectId:d,userId:l.id,sessionId:s.session,pageNum:s.count},o.lean=o.track&&null!==s.upgrade?0===s.upgrade:o.lean,o.upload=o.track&&"string"==typeof o.upload&&s.upload&&s.upload.length>"https://".length?s.upload:o.upload,se(0,r),se(3,c),se(1,y(location.href,!!he)),se(2,document.referrer),se(15,function(){var t=Ne();if(o.track&&xe(window,"sessionStorage")){var e=sessionStorage.getItem("_cltk");t=e||t,sessionStorage.setItem("_cltk",t)}return t}()),se(16,document.documentElement.lang),se(17,document.dir),se(26,"".concat(window.devicePixelRatio)),se(28,l.dob.toString()),se(29,l.version.toString()),se(33,u),se(34,a),se(35,i),F(0,s.ts),F(1,0),F(35,he);var p,f=null===window||void 0===window?void 0:window.Zone;f&&"__symbol__"in f&&F(39,1),navigator&&(se(9,navigator.language),F(33,navigator.hardwareConcurrency),F(32,navigator.maxTouchPoints),F(34,Math.round(navigator.deviceMemory)),(p=navigator.userAgentData)&&p.getHighEntropyValues?p.getHighEntropyValues(["model","platform","platformVersion","uaFullVersion"]).then((function(t){var e;se(22,t.platform),se(23,t.platformVersion),null===(e=t.brands)||void 0===e||e.forEach((function(t){se(24,t.name+"~"+t.version)})),se(25,t.model),F(27,t.mobile?1:0)})):se(22,navigator.platform)),screen&&(F(14,Math.round(screen.width)),F(15,Math.round(screen.height)),F(16,Math.round(screen.colorDepth)));for(var h=0,g=o.cookies;h<g.length;h++){var v=g[h],m=Ae(v);m&&dt(v,m)}null===ve&&(ve={ad_Storage:o.track?"granted":"denied",analytics_Storage:o.track?"granted":"denied"}),D(Ee(ve,0)),Ce(l)}function be(){ge=null,pe=null,fe.forEach((function(t){t.called=!1}))}function we(t,e,n,r){void 0===e&&(e=!0),void 0===n&&(n=!1),void 0===r&&(r=!1);var a=o.lean?0:1,i=!1;pe&&(a||!1===e)&&(t(pe,!o.lean,r?ve:void 0),i=!0),!n&&i||fe.push({callback:t,wait:e,recall:n,called:i,consentInfo:r})}function ke(){return pe?[pe.userId,pe.sessionId,pe.pageNum].join("."):""}function _e(t){void 0===t&&(t=!0),t?(Se({ad_Storage:"granted",analytics_Storage:"granted"}),R()):Se()}function Se(t,e){void 0===t&&(t=me),void 0===e&&(e=1);var n={ad_Storage:Ie(t.ad_Storage),analytics_Storage:Ie(t.analytics_Storage)};if(!ve||n.ad_Storage!==ve.ad_Storage||n.analytics_Storage!==ve.analytics_Storage){ve=n,Oe(!0);var r=Ee(ve,e);if(!r.analytics_Storage&&o.track)return o.track=!1,qe("_clsk","",-Number.MAX_VALUE),qe("_clck","",-Number.MAX_VALUE),Pn(),void window.setTimeout(An,250);pn()&&r.analytics_Storage&&(o.track=!0,Ce(ze(),1),Me()),L(r),R()}}function Ee(t,e){return{source:e,ad_Storage:"granted"===t.ad_Storage?1:0,analytics_Storage:"granted"===t.analytics_Storage?1:0}}function Ie(t){return"string"==typeof t?t.toLowerCase():"denied"}function Te(){qe("_clsk","",0)}function Oe(t){void 0===t&&(t=!1),function(t,e){void 0===e&&(e=!1);if(fe.length>0)for(var n=0;n<fe.length;n++){var r=fe[n];r.callback&&(!r.called&&!e||r.consentInfo&&e)&&(!r.wait||t)&&(r.callback(pe,!o.lean,r.consentInfo?ve:void 0),r.called=!0,r.recall||(fe.splice(n,1),n--))}}(o.lean?0:1,t)}function Me(){if(pe&&o.track){var t=Math.round(Date.now()),e=o.upload&&"string"==typeof o.upload?o.upload.replace("https://",""):"",n=o.lean?0:1;qe("_clsk",[pe.sessionId,t,pe.pageNum,n,e].join("^"),1)}}function xe(t,e){try{return!!t[e]}catch(t){return!1}}function Ce(t,e){void 0===e&&(e=null),e=null===e?t.consent:e;var n=Math.ceil((Date.now()+31536e6)/864e5),r=0===t.dob?null===o.dob?0:o.dob:t.dob;(null===t.expiry||Math.abs(n-t.expiry)>=1||t.consent!==e||t.dob!==r)&&qe("_clck",[pe.userId,2,n.toString(36),e,r].join("^"),365)}function Ne(){var t=Math.floor(Math.random()*Math.pow(2,32));return window&&window.crypto&&window.crypto.getRandomValues&&Uint32Array&&(t=window.crypto.getRandomValues(new Uint32Array(1))[0]),t.toString(36)}function je(t,e){return void 0===e&&(e=10),parseInt(t,e)}function ze(){var t={id:Ne(),version:0,expiry:null,consent:0,dob:0},e=Ae("_clck",!o.includeSubdomains);if(e&&e.length>0){var n=e.includes("^")?e.split("^"):e.split("|");n.length>1&&(t.version=je(n[1])),n.length>2&&(t.expiry=je(n[2],36)),n.length>3&&1===je(n[3])&&(t.consent=1),n.length>4&&je(n[1])>1&&(t.dob=je(n[4])),o.track=o.track||1===t.consent,t.id=o.track?n[0]:t.id}return t}function Ae(t,e){var n;if(void 0===e&&(e=!1),xe(document,"cookie")){var r=document.cookie.split(";");if(r)for(var a=0;a<r.length;a++){var o=r[a].split("=");if(o.length>1&&o[0]&&o[0].trim()===t){for(var i=Pe(o[1]),u=i[0],c=i[1];u;)u=(n=Pe(c))[0],c=n[1];return e?c.endsWith("".concat("~","1"))?c.substring(0,c.length-2):null:c}}}return null}function Pe(t){try{var e=decodeURIComponent(t);return[e!=t,e]}catch(t){}return[!1,t]}function qe(t,e,n){if((o.track||""==e)&&(navigator&&navigator.cookieEnabled||xe(document,"cookie"))){var r=function(t){return encodeURIComponent(t)}(e),a=new Date;a.setDate(a.getDate()+n);var i=a?"expires="+a.toUTCString():"",u="".concat(t,"=").concat(r).concat(";").concat(i).concat(";path=/");try{if(null===ge){for(var c=location.hostname?location.hostname.split("."):[],s=c.length-1;s>=0;s--)if(ge=".".concat(c[s]).concat(ge||""),s<c.length-1&&(document.cookie="".concat(u).concat(";").concat("domain=").concat(ge),Ae(t)===e))return;ge=""}}catch(t){ge=""}document.cookie=ge?"".concat(u).concat(";").concat("domain=").concat(ge):u}}var De,Re=null;function Xe(){var t=pe;Re={version:l,sequence:0,start:0,duration:0,projectId:t.projectId,userId:t.userId,sessionId:t.sessionId,pageNum:t.pageNum,upload:0,end:0,applicationPlatform:0,url:""}}function Le(){Re=null}function Ue(t){return Re.start=Re.start+Re.duration,Re.duration=s()-Re.start,Re.sequence++,Re.upload=t&&"sendBeacon"in navigator?1:0,Re.end=t?1:0,Re.applicationPlatform=0,Re.url=y(location.href,!1,!0),[Re.version,Re.sequence,Re.start,Re.duration,Re.projectId,Re.userId,Re.sessionId,Re.pageNum,Re.upload,Re.end,Re.applicationPlatform,Re.url]}function He(){De=[]}function Ve(t){if(console.log("🚀 🐥 ~ report ~ e:",t),De&&-1===De.indexOf(t.message)){var e=o.report;if(console.log("🚀 🐥 ~ report ~ url:",e),e&&e.length>0&&Re){var n={v:Re.version,p:Re.projectId,u:Re.userId,s:Re.sessionId,n:Re.pageNum};t.message&&(n.m=t.message),t.stack&&(n.e=t.stack);var r=new XMLHttpRequest;console.log("🚀 🐥 ~ report ~ xhr:",r),r.open("POST",e,!0),r.send(JSON.stringify(n)),De.push(t.message)}}return t}function Ge(t){return function(){var e=performance.now();try{t.apply(this,arguments)}catch(t){throw Ve(t)}var n=performance.now()-e;J(4,n),n>30&&(Z(7),F(6,n),t.dn&&"".concat(t.dn,"-").concat(n))}}var Ye=new Map;function Be(t,e,n,r,a){void 0===r&&(r=!1),void 0===a&&(a=!0),n=Ge(n);try{t[i("addEventListener")](e,n,{capture:r,passive:a}),function(t){return Ye.has(t)}(t)||Ye.set(t,[]),Ye.get(t).push({event:e,listener:n,options:{capture:r,passive:a}})}catch(t){}}function We(){Ye.forEach((function(t,e){!function(t,e){t.forEach((function(t){try{e[i("removeEventListener")](t.event,t.listener,{capture:t.options.capture,passive:t.options.passive})}catch(t){}})),Ye.delete(e)}(t,e)})),Ye=new Map}var Ze=null,Je=null,Fe=null,Ke=0;function Qe(){return!(Ke++>20)}function $e(){Ke=0,Fe!==en()&&(Pn(),window.setTimeout(tn,250))}function tn(){An(),F(29,1)}function en(){return location.href?location.href.replace(location.hash,""):location.href}var nn=[],rn=null,an=null,on=null;function un(){nn=[],rn=null,an=null}function cn(){var t=nn.shift();t&&(rn=t,t.task().then((function(){t.id===ke()&&(t.resolve(),rn=null,cn())})).catch((function(e){t.id===ke()&&(e&&(e.name,e.message,e.stack),rn=null,cn())})))}var sn=!1;function ln(){sn=!0,u=c(),un(),We(),He(),Fe=en(),Ke=0,Be(window,"popstate",$e),null===Ze&&(Ze=history.pushState,history.pushState=function(){Ze.apply(this,arguments),pn()&&Qe()&&$e()}),null===Je&&(Je=history.replaceState,history.replaceState=function(){Je.apply(this,arguments),pn()&&Qe()&&$e()})}function dn(){Fe=null,Ke=0,He(),We(),un(),u=0,sn=!1}function pn(){return sn}function fn(){An(),G("clarityGemX","restart")}var hn=null;function gn(){hn=null}function vn(t){hn={fetchStart:Math.round(t.fetchStart),connectStart:Math.round(t.connectStart),connectEnd:Math.round(t.connectEnd),requestStart:Math.round(t.requestStart),responseStart:Math.round(t.responseStart),responseEnd:Math.round(t.responseEnd),domInteractive:Math.round(t.domInteractive),domComplete:Math.round(t.domComplete),loadEventStart:Math.round(t.loadEventStart),loadEventEnd:Math.round(t.loadEventEnd),redirectCount:Math.round(t.redirectCount),size:t.transferSize?t.transferSize:0,type:t.type,protocol:t.nextHopProtocol,encodedSize:t.encodedBodySize?t.encodedBodySize:0,decodedSize:t.decodedBodySize?t.decodedBodySize:0},function(t){ct(this,void 0,void 0,(function(){var e,n;return st(this,(function(r){return e=s(),n=[e,t],29===t&&(n.push(hn.fetchStart),n.push(hn.connectStart),n.push(hn.connectEnd),n.push(hn.requestStart),n.push(hn.responseStart),n.push(hn.responseEnd),n.push(hn.domInteractive),n.push(hn.domComplete),n.push(hn.loadEventStart),n.push(hn.loadEventEnd),n.push(hn.redirectCount),n.push(hn.size),n.push(hn.type),n.push(hn.protocol),n.push(hn.encodedSize),n.push(hn.decodedSize),gn(),Bt(n)),[2]}))}))}(29)}var mn,yn=0,bn=1/0,wn=0,kn=0,_n=[],Sn=new Map,En=function(){return yn||0},In=function(){if(!_n.length)return-1;var t=Math.min(_n.length-1,Math.floor((En()-kn)/50));return _n[t].latency},Tn=function(){kn=En(),_n.length=0,Sn.clear()},On=function(t){if(t.interactionId&&!(t.duration<40)){!function(t){"interactionCount"in performance?yn=performance.interactionCount:t.interactionId&&(bn=Math.min(bn,t.interactionId),wn=Math.max(wn,t.interactionId),yn=wn?(wn-bn)/7+1:0)}(t);var e=_n[_n.length-1],n=Sn.get(t.interactionId);if(n||_n.length<10||t.duration>(null==e?void 0:e.latency)){if(n)t.duration>n.latency&&(n.latency=t.duration);else{var r={id:t.interactionId,latency:t.duration};Sn.set(r.id,r),_n.push(r)}_n.sort((function(t,e){return e.latency-t.latency})),_n.length>10&&_n.splice(10).forEach((function(t){return Sn.delete(t.id)}))}}},Mn=["navigation","resource","longtask","first-input","layout-shift","largest-contentful-paint","event"];function xn(){try{mn&&mn.disconnect(),mn=new PerformanceObserver(Ge(Cn));for(var t=0,e=Mn;t<e.length;t++){var n=e[t];PerformanceObserver.supportedEntryTypes.indexOf(n)>=0&&("layout-shift"===n&&J(9,0),mn.observe({type:n,buffered:!0}))}}catch(t){}}function Cn(t){!function(t){for(var e=(!("visibilityState"in document)||"visible"===document.visibilityState),n=0;n<t.length;n++){var r=t[n];switch(r.entryType){case"navigation":vn(r);break;case"resource":var a=r.name;se(4,jn(a)),a!==o.upload&&a!==o.fallback||F(28,r.duration);break;case"longtask":Z(7);break;case"first-input":e&&F(10,r.processingStart-r.startTime);break;case"event":e&&"PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&(On(r),se(37,In().toString()));break;case"layout-shift":e&&!r.hadRecentInput&&J(9,1e3*r.value);break;case"largest-contentful-paint":e&&F(8,r.startTime)}}}(t.getEntries())}var Nn=null;function jn(t){return Nn||(Nn=document.createElement("a")),Nn.href=t,Nn.host}var zn=[z,z,z,Object.freeze({__proto__:null,start:function(){gn(),function(){navigator&&navigator.connection&&se(27,navigator.connection.effectiveType),window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes&&("complete"!==document.readyState?Be(window,"load",K.bind(this,xn,0)):xn())}()},stop:function(){mn&&mn.disconnect(),mn=null,Tn(),Nn=null,gn()}}),z];function An(t){void 0===t&&(t=null),function(){try{var t=navigator&&"globalPrivacyControl"in navigator&&1==navigator.globalPrivacyControl;return!1===sn&&"undefined"!=typeof Promise&&window.MutationObserver&&document.createTreeWalker&&"now"in Date&&"now"in performance&&"undefined"!=typeof WeakMap&&!t}catch(t){return!1}}()&&(!function(t){if(null===t||sn)return!1;for(var e in t)e in o&&(o[e]=t[e])}(t),ln(),Et(),zn.forEach((function(t){return Ge(t.start)()})),null===t&&Xn())}function Pn(){pn()&&(zn.slice().reverse().forEach((function(t){return Ge(t.stop)()})),It(),dn(),void 0!==Dn&&(Dn[Rn]=function(){(Dn[Rn].q=Dn[Rn].q||[]).push(arguments),"start"===arguments[0]&&Dn[Rn].q.unshift(Dn[Rn].q.pop())&&Xn()}))}var qn=Object.freeze({__proto__:null,consent:_e,consentv2:Se,dlog:se,event:G,hashText:M,identify:pt,maxMetric:F,measure:Ge,metadata:we,pause:function(){pn()&&(G("clarityGemX","pause"),null===an&&(an=new Promise((function(t){on=t}))))},queue:Bt,register:j,resume:function(){pn()&&(an&&(on(),an=null,null===rn&&cn()),G("clarityGemX","resume"))},schedule:function(t,e){return void 0===e&&(e=0),ct(this,void 0,void 0,(function(){var n,r,a;return st(this,(function(o){for(n=0,r=nn;n<r.length;n++)if(r[n].task===t)return[2];return a=new Promise((function(n){nn[1===e?"unshift":"push"]({task:t,resolve:n,id:ke()})})),null===rn&&null===an&&cn(),[2,a]}))}))},set:dt,signal:function(t){kt=t},start:An,stop:Pn,time:s,upgrade:it,version:l}),Dn=window,Rn="clarityGemX";function Xn(){if(void 0!==Dn){if(Dn[Rn]&&Dn[Rn].v)return console.warn("Error CL001: Multiple Clarity tags detected.");var t=Dn[Rn]&&Dn[Rn].q||[];for(Dn[Rn]=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return qn[t].apply(qn,e)},Dn[Rn].v=l;t.length>0;)Dn[Rn].apply(Dn,t.shift())}}Xn()}();
1
+ !function(){"use strict";var t=Object.freeze({__proto__:null,get queue(){return Gt},get start(){return Vt},get stop(){return Yt},get track(){return qt}}),e=Object.freeze({__proto__:null,get check(){return Qt},get compute(){return te},get data(){return Dt},get start(){return Kt},get stop(){return ee},get trigger(){return $t}}),n=Object.freeze({__proto__:null,get compute(){return ce},get data(){return ne},get log(){return ue},get reset(){return se},get start(){return oe},get stop(){return ie},get updates(){return re}}),r=Object.freeze({__proto__:null,get compute(){return be},get config(){return ge},get consent(){return ve},get data(){return le},get start(){return fe},get stop(){return pe},get trackConsentv2(){return ye}}),a=Object.freeze({__proto__:null,get callback(){return Pe},get callbacks(){return _e},get clear(){return ze},get consent(){return xe},get consentv2(){return Ce},get data(){return we},get electron(){return ke},get id(){return Me},get metadata(){return Te},get save(){return Ae},get shortid(){return De},get start(){return Ie},get stop(){return Oe}}),o=Object.freeze({__proto__:null,get data(){return Ue},get envelope(){return Ge},get start(){return He},get stop(){return Ve}}),i={projectId:null,delay:1e3,lean:!1,lite:!1,track:!0,content:!0,drop:[],mask:[],unmask:[],regions:[],cookies:[],fraud:!0,checksum:[],report:null,upload:null,fallback:null,upgrade:null,action:null,dob:null,delayDom:!1,throttleDom:!0,conversions:!1,includeSubdomains:!0};function u(t){return window.Zone&&"__symbol__"in window.Zone?window.Zone.__symbol__(t):t}var c=0;function s(){return performance.now()+performance.timeOrigin}function l(t){void 0===t&&(t=null);var e=0===c?s():c,n=t&&t.timeStamp>0?t.timeStamp:performance.now(),r=t&&t.view?t.view.performance.timeOrigin:performance.timeOrigin;return Math.max(Math.round(n+r-e),0)}var d="0.8.48";var f=/\S/gi,p=255,h=!0,g=null,v=null,m=null;function y(t,e,n,r,a){if(void 0===r&&(r=!1),t){if("input"==e&&("checkbox"===a||"radio"===a))return t;switch(n){case 0:return t;case 1:switch(e){case"*T":case"value":case"placeholder":case"click":return function(t){var e=-1,n=0,r=!1,a=!1,o=!1,i=null;E();for(var u=0;u<t.length;u++){var c=t.charCodeAt(u);if(r=r||c>=48&&c<=57,a=a||64===c,o=9===c||10===c||13===c||32===c,0===u||u===t.length-1||o){if(r||a){null===i&&(i=t.split(""));var s=t.substring(e+1,o?u:u+1);s=h&&null!==m?s.match(m)?s:k(s,"▪","▫"):_(s),i.splice(e+1-n,s.length,s),n+=s.length-1}o&&(r=!1,a=!1,e=u)}}return i?i.join(""):t}(t);case"input":case"change":return S(t)}return t;case 2:case 3:switch(e){case"*T":case"data-":return r?w(t):_(t);case"src":case"srcset":case"title":case"alt":case"href":case"xlink:href":return 3===n?"src"===e&&(null==t?void 0:t.startsWith("blob:"))?"blob:":"":t;case"value":case"click":case"input":case"change":return S(t);case"placeholder":return _(t)}break;case 4:switch(e){case"*T":case"data-":return r?w(t):_(t);case"value":case"input":case"click":case"change":return Array(5).join("•");case"checksum":return""}break;case 5:switch(e){case"*T":case"data-":return k(t,"▪","▫");case"value":case"input":case"click":case"change":return Array(5).join("•");case"checksum":case"src":case"srcset":case"alt":case"title":return""}}}return t}function b(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var r=t;if(e)r="".concat("https://").concat("Electron");else{var a=i.drop;if(a&&a.length>0&&t&&t.indexOf("?")>0){var o=t.split("?"),u=o[0],c=o[1];r=u+"?"+c.split("&").map((function(t){return a.some((function(e){return 0===t.indexOf("".concat(e,"="))}))?"".concat(t.split("=")[0],"=").concat("*na*"):t})).join("&")}}return n&&(r=r.substring(0,p)),r}function w(t){var e=t.trim();if(e.length>0){var n=e[0],r=t.indexOf(n),a=t.substr(0,r),o=t.substr(r+e.length);return"".concat(a).concat(e.length.toString(36)).concat(o)}return t}function _(t){return t.replace(f,"•")}function k(t,e,n){return E(),t?t.replace(v,e).replace(g,n):t}function S(t){for(var e=5*(Math.floor(t.length/5)+1),n="",r=0;r<e;r++)n+=r>0&&r%5==0?" ":"•";return n}function E(){if(h&&null===g)try{g=new RegExp("\\p{N}","gu"),v=new RegExp("\\p{L}","gu"),m=new RegExp("\\p{Sc}","gu")}catch(t){h=!1}}var I=[],O=null;function T(){}var M=[];function x(){}function C(){}function j(){}function N(){}function z(){}var P=Object.freeze({__proto__:null,checkDocumentStyles:function(t){},compute:function(){},data:O,event:N,hashText:x,keys:M,log:T,observe:function(){},register:z,reset:function(){},sheetAdoptionState:[],sheetUpdateState:[],start:function(){},state:I,stop:function(){},track:j,trigger:C}),A=null;function q(t,e){gn()&&t&&"string"==typeof t&&t.length<255&&(A=e&&"string"==typeof e&&e.length<255?{key:t,value:e}:{value:t},Ft(24))}var D,R=null,X=null;function L(t){t in R||(R[t]=0),t in X||(X[t]=0),R[t]++,X[t]++}function U(t,e){null!==e&&(t in R||(R[t]=0),t in X||(X[t]=0),R[t]+=e,X[t]+=e)}function H(t,e){null!==e&&!1===isNaN(e)&&(t in R||(R[t]=0),(e>R[t]||0===R[t])&&(X[t]=e,R[t]=e))}function V(t,e,n){return window.setTimeout(We(t),e,n)}function G(t){return window.clearTimeout(t)}var Y=0,B=0,W=null;function Z(){W&&G(W),W=V(J,B),Y=l()}function J(){var t=l();D={gap:t-Y},Ft(25),D.gap<3e5?W=V(J,B):fn&&(q("clarityGemX","suspend"),Rn(),["mousemove","touchstart"].forEach((function(t){return Je(document,t,vn)})),["resize","scroll","pageshow"].forEach((function(t){return Je(window,t,vn)})))}var F=Object.freeze({__proto__:null,get data(){return D},reset:Z,start:function(){B=6e4,Y=0},stop:function(){G(W),Y=0,B=0}}),K=null;function Q(t){gn()&&i.lean&&(i.lean=!1,K={key:t},Pe(),Ae(),i.upgrade&&i.upgrade(t),Ft(3),i.lite)}var $=Object.freeze({__proto__:null,get data(){return K},start:function(){!i.lean&&i.upgrade&&i.upgrade("Config"),K=null},stop:function(){K=null},upgrade:Q});function tt(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{c(r.next(t))}catch(t){o(t)}}function u(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,u)}c((r=r.apply(t,e||[])).next())}))}function et(t,e){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){i.label=u[1];break}if(6===u[0]&&i.label<a[1]){i.label=a[1],a=u;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(u);break}a[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}var nt=null;function rt(t,e){ot(t,"string"==typeof e?[e]:e)}function at(t,e,n,r){return void 0===e&&(e=null),void 0===n&&(n=null),void 0===r&&(r=null),tt(this,void 0,void 0,(function(){var a,o;return et(this,(function(i){switch(i.label){case 0:return o={},[4,ct(t)];case 1:return o.userId=i.sent(),o.userHint=r||((u=t)&&u.length>=5?"".concat(u.substring(0,2)).concat(k(u.substring(2),"*","*")):k(u,"*","*")),ot("userId",[(a=o).userId]),ot("userHint",[a.userHint]),ot("userType",[st(t)]),e&&(ot("sessionId",[e]),a.sessionId=e),n&&(ot("pageId",[n]),a.pageId=n),[2,a]}var u}))}))}function ot(t,e){if(gn()&&t&&e&&"string"==typeof t&&t.length<255){for(var n=(t in nt?nt[t]:[]),r=0;r<e.length;r++)"string"==typeof e[r]&&e[r].length<255&&n.push(e[r]);nt[t]=n}}function it(){Ft(34)}function ut(){nt={}}function ct(t){return tt(this,void 0,void 0,(function(){var e;return et(this,(function(n){switch(n.label){case 0:return n.trys.push([0,4,,5]),crypto&&t?[4,crypto.subtle.digest("SHA-256",(new TextEncoder).encode(t))]:[3,2];case 1:return e=n.sent(),[2,Array.prototype.map.call(new Uint8Array(e),(function(t){return("00"+t.toString(16)).slice(-2)})).join("")];case 2:return[2,""];case 3:return[3,5];case 4:return n.sent(),[2,""];case 5:return[2]}}))}))}function st(t){return t&&t.indexOf("@")>0?"email":"string"}var lt="CompressionStream"in window;function dt(t){return tt(this,void 0,void 0,(function(){var e,n;return et(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),lt?(e=new ReadableStream({start:function(e){return tt(this,void 0,void 0,(function(){return et(this,(function(n){return e.enqueue(t),e.close(),[2]}))}))}}).pipeThrough(new TextEncoderStream).pipeThrough(new window.CompressionStream("gzip")),n=Uint8Array.bind,[4,ft(e)]):[3,2];case 1:return[2,new(n.apply(Uint8Array,[void 0,r.sent()]))];case 2:return[3,4];case 3:return r.sent(),[3,4];case 4:return[2,null]}}))}))}function ft(t){return tt(this,void 0,void 0,(function(){var e,n,r,a,o;return et(this,(function(i){switch(i.label){case 0:e=t.getReader(),n=[],r=!1,a=[],i.label=1;case 1:return r?[3,3]:[4,e.read()];case 2:return o=i.sent(),r=o.done,a=o.value,r?[2,n]:(n.push.apply(n,a),[3,1]);case 3:return[2,n]}}))}))}function pt(t,e){try{return!!t[e]}catch(t){return!1}}function ht(t){try{var e=decodeURIComponent(t);return[e!=t,e]}catch(t){}return[!1,t]}var gt=null,vt="^";function mt(t,e){var n;if(void 0===e&&(e=!1),pt(document,"cookie")){var r=document.cookie.split(";");if(r)for(var a=0;a<r.length;a++){var o=r[a].split("=");if(o.length>1&&o[0]&&o[0].trim()===t){for(var i=ht(o[1]),u=i[0],c=i[1];u;)u=(n=ht(c))[0],c=n[1];return e?c.endsWith("".concat("~","1"))?c.substring(0,c.length-2):null:c}}}return null}function yt(t,e,n){if((i.track||""==e)&&(navigator&&navigator.cookieEnabled||pt(document,"cookie"))){var r=function(t){return encodeURIComponent(t)}(e),a=new Date;a.setDate(a.getDate()+n);var o=a?"expires="+a.toUTCString():"",u="".concat(t,"=").concat(r).concat(";").concat(o).concat(";path=/");try{if(null===gt){for(var c=location.hostname?location.hostname.split("."):[],s=c.length-1;s>=0;s--)if(gt=".".concat(c[s]).concat(gt||""),s<c.length-1&&(document.cookie="".concat(u).concat(";").concat("domain=").concat(gt),mt(t)===e))return;gt=""}}catch(t){gt=""}document.cookie=gt?"".concat(u).concat(";").concat("domain=").concat(gt):u}}var bt=null;function wt(t){try{if(!bt)return;var e=function(t){try{return JSON.parse(t)}catch(t){return[]}}(t);e.forEach((function(t){bt(t)}))}catch(t){}}var _t=[P,n,Object.freeze({__proto__:null,compute:it,get data(){return nt},identify:at,reset:ut,set:rt,start:function(){ut()},stop:function(){ut()}}),e,P,Object.freeze({__proto__:null,COOKIE_SEP:vt,getCookie:mt,setCookie:yt,start:function(){gt=null},stop:function(){gt=null}}),r,a,o,t,F,$,P];function kt(){R={},X={},L(5),_t.forEach((function(t){return We(t.start)()}))}function St(){_t.slice().reverse().forEach((function(t){return We(t.stop)()})),R={},X={}}function Et(){it(),ce(),Ft(0),te(),be()}function It(t,e,n){return"".concat(t,"=").concat(y(e,0===t.indexOf("data-")?"data-":t,n))}var Ot=[],Tt=1,Mt=null;function xt(){Ot=[],function(t){var e=[t];for(;e.length>0;){for(var n=null,r=null,a=null,o=e.shift(),i=o.firstChild,u=o.parentElement?o.parentElement:o.parentNode?o.parentNode:null;i;)e.push(i),i=i.nextSibling;switch(o.nodeType){case Node.DOCUMENT_TYPE_NODE:var c=o;r="*D",n={name:c.name,publicId:c.publicId,systemId:c.systemId};break;case Node.TEXT_NODE:a=o.nodeValue,r=Mt.get(u)?"*T":r;break;case Node.ELEMENT_NODE:var s=o;n=Ct(s),r=["NOSCRIPT","SCRIPT","STYLE"].indexOf(s.tagName)<0?s.tagName:r}jt(o,u,{tag:r,attributes:n,value:a})}}(document),function(t){tt(this,void 0,void 0,(function(){var e,n,r,a,o,i,u,c,s,d,f,p,h;return et(this,(function(g){switch(e=l(),n=[e,t],t){case 8:r=O,n.push(r.width),n.push(r.height),r.width,r.height,Gt(n);break;case 43:if((a=Ot).length>0){for(o=0,i=a;o<i.length;o++)for(u=i[o],c=u.metadata.privacy,s=u.data,d=0,f=["tag","attributes","value"];d<f.length;d++)if(s[p=f[d]])switch(p){case"tag":n.push(u.id),u.parent&&n.push(u.parent),u.previous&&n.push(u.previous),n.push(s[p]);break;case"attributes":for(h in s[p])void 0!==s[p][h]&&n.push(It(h,s[p][h],c));break;case"value":n.push(y(s[p],s.tag,c))}Gt(function(t){for(var e=[],n={},r=0,a=null,o=0;o<t.length;o++)if("string"==typeof t[o]){var i=t[o],u=n[i]||-1;u>=0?a?a.push(u):(a=[u],e.push(a),r++):(a=null,e.push(i),n[i]=r++)}else a=null,e.push(t[o]),r++;return e}(n),!0)}}return[2]}))}))}(43)}function Ct(t){var e={},n=t.attributes;if(n&&n.length>0)for(var r=0;r<n.length;r++)e[n[r].name]=n[r].value;return e}function jt(t,e,n){if(t&&n&&n.tag){var r=function(t){return null===t?null:Mt.has(t)?Mt.get(t):(Mt.set(t,Tt),Tt++)}(t),a=e?Mt.get(e):null,o=t.previousSibling?Mt.get(t.previousSibling):null;Ot.push({id:r,parent:a,previous:o,children:[],data:n,selector:null,hash:null,region:null,metadata:{active:!0,suspend:!1,privacy:5,position:null,fraud:null,size:null}})}}var Nt,zt,Pt,At,qt,Dt,Rt=0,Xt=0,Lt=null,Ut=0,Ht=!1;function Vt(){At=!0,Rt=0,Xt=0,Ht=!1,Ut=0,Nt=[],zt=[],Pt={},qt=null}function Gt(t,e){if(void 0===e&&(e=!0),At){var n=l(),r=t.length>1?t[1]:null,a=JSON.stringify(t);switch(i.lean?!Ht&&Xt+a.length>10485760&&(Ht=!0):Ht=!1,r){case 5:if(Ht)break;Rt+=a.length;case 37:case 6:case 43:case 45:case 46:case 44:case 51:if(Ht)break;Xt+=a.length,Nt.push(a);break;default:zt.push(a)}L(25);var o=function(){var t=!1===i.lean&&Rt>0?100:Ue.sequence*i.delay;return"string"==typeof i.upload?Math.max(Math.min(t,3e4),100):i.delay}();n-Ut>2*o&&(G(Lt),Lt=null),e&&null===Lt&&(25!==r&&Z(),Lt=V(Bt,o),Ut=n,Qt(Xt))}}function Yt(){G(Lt),Bt(!0),Rt=0,Xt=0,Ht=!1,Ut=0,Nt=[],zt=[],Pt={},qt=null,At=!1}function Bt(t){return void 0===t&&(t=!1),tt(this,void 0,void 0,(function(){var e,n,r,a,o,u,c,s;return et(this,(function(l){switch(l.label){case 0:return At?(Lt=null,(e=!1===i.lean&&Xt>0&&(Xt<1048576||Ue.sequence>0))&&H(1,1),Et(),n=!0===t,Ue?(r=JSON.stringify(Ge(n)),a="[".concat(zt.join(),"]"),o=e?"[".concat(Nt.join(),"]"):"",n&&o.length>0&&r.length+a.length+o.length>65536&&(o=""),u=function(t){return t.p.length>0?'{"e":'.concat(t.e,',"a":').concat(t.a,',"p":').concat(t.p,"}"):'{"e":'.concat(t.e,',"a":').concat(t.a,"}")}({e:r,a:a,p:o}),n?(s=null,[3,3]):[3,1]):[2]):[2];case 1:return[4,dt(u)];case 2:s=l.sent(),l.label=3;case 3:return U(2,(c=s)?c.length:u.length),Wt(u,c,Ue.sequence,n),zt=[],e&&(Nt=[],Xt=0,Rt=0,Ht=!1),[2]}}))}))}function Wt(t,e,n,r){if(void 0===r&&(r=!1),"string"==typeof i.upload){var a=i.upload,o=!1;if(r&&navigator&&navigator.sendBeacon)try{(o=navigator.sendBeacon.bind(navigator)(a,t))&&Jt(n)}catch(t){}if(!1===o){n in Pt?Pt[n].attempts++:Pt[n]={data:t,attempts:1};var u=new XMLHttpRequest;u.open("POST",a,!0),u.timeout=15e3,u.ontimeout=function(){Be(new Error("".concat("Timeout"," : ").concat(a)))},null!==n&&(u.onreadystatechange=function(){We(Zt)(u,n)}),u.withCredentials=!0,e?(u.setRequestHeader("Accept","application/x-clarity-gzip"),u.send(e)):u.send(t)}}else if(i.upload){(0,i.upload)(t),Jt(n)}}function Zt(t,e){var n=Pt[e];t&&4===t.readyState&&n&&((t.status<200||t.status>208)&&n.attempts<=1?t.status>=400&&t.status<500?$t(6):(0===t.status&&(i.upload=i.fallback?i.fallback:i.upload),qt={sequence:e,attempts:n.attempts,status:t.status},Ft(2),Wt(n.data,null,e)):(qt={sequence:e,attempts:n.attempts,status:t.status},n.attempts>1&&Ft(2),200===t.status&&t.responseText&&function(t){for(var e=t&&t.length>0?t.split("\n"):[],n=0,r=e;n<r.length;n++){var a=r[n],o=a&&a.length>0?a.split(/ (.*)/):[""];switch(o[0]){case"END":$t(6);break;case"UPGRADE":Q("Auto");break;case"ACTION":i.action&&o.length>1&&i.action(o[1]);break;case"EXTRACT":case"MODULE":o.length>1&&o[1];break;case"SIGNAL":o.length>1&&wt(o[1]);break;case"SNAPSHOT":i.lean=!1,xt()}}}(t.responseText),0===t.status&&(Wt(n.data,null,e,!0),$t(3)),t.status>=200&&t.status<=208&&Jt(e),delete Pt[e]))}function Jt(t){1===t&&(Ae(),Pe())}function Ft(t){var e=[l(),t];switch(t){case 4:var n=I;n&&n.data&&((e=[n.time,n.event]).push(n.data.visible),e.push(n.data.docWidth),e.push(n.data.docHeight),e.push(n.data.screenWidth),e.push(n.data.screenHeight),e.push(n.data.scrollX),e.push(n.data.scrollY),e.push(n.data.pointerX),e.push(n.data.pointerY),e.push(n.data.activityTime),e.push(n.data.scrollTime),e.push(n.data.pointerTime),e.push(n.data.moveX),e.push(n.data.moveY),e.push(n.data.moveTime),e.push(n.data.downX),e.push(n.data.downY),e.push(n.data.downTime),e.push(n.data.upX),e.push(n.data.upY),e.push(n.data.upTime),e.push(n.data.pointerPrevX),e.push(n.data.pointerPrevY),e.push(n.data.pointerPrevTime),e.push(n.data.modules),Gt(e,!1));break;case 25:e.push(D.gap),Gt(e);break;case 35:e.push(Dt.check),Gt(e,!1);break;case 3:e.push(K.key),Gt(e);break;case 2:e.push(qt.sequence),e.push(qt.attempts),e.push(qt.status),Gt(e,!1);break;case 24:A.key&&e.push(A.key),e.push(A.value),Gt(e);break;case 34:var r=Object.keys(nt);if(r.length>0){for(var a=0,o=r;a<o.length;a++){var i=o[a];e.push(i),e.push(nt[i])}ut(),Gt(e,!1)}break;case 0:var u=Object.keys(X);if(u.length>0){for(var c=0,s=u;c<s.length;c++){var d=s[c],f=parseInt(d,10);e.push(f),e.push(Math.round(X[d]))}X={},Gt(e,!1)}break;case 1:var p=Object.keys(re);if(p.length>0){for(var h=0,g=p;h<g.length;h++){var v=g[h];f=parseInt(v,10);e.push(f),e.push(re[v])}se(),Gt(e,!1)}break;case 36:var m=Object.keys(O);if(m.length>0){for(var y=0,b=m;y<b.length;y++){var w=b[y];f=parseInt(w,10);e.push(f),e.push([].concat.apply([],O[w]))}Gt(e,!1)}break;case 40:M.forEach((function(t){e.push(t);var n=[];for(var r in O[t]){var a=parseInt(r,10);n.push(a),n.push(O[t][r])}e.push(n)})),Gt(e,!1);break;case 47:e.push(le.source),e.push(le.ad_Storage),e.push(le.analytics_Storage),Gt(e,!1)}}function Kt(){Dt={check:0}}function Qt(t){if(0===Dt.check){var e=Dt.check;e=Ue.sequence>=128?1:e,e=Ue.pageNum>=128?7:e,e=l()>72e5?2:e,(e=t>10485760?2:e)!==Dt.check&&$t(e)}}function $t(t){Dt.check=t,5!==t&&(ze(),Rn())}function te(){0!==Dt.check&&Ft(35)}function ee(){Dt=null}var ne=null,re=null,ae=!1;function oe(){ne={},re={},ae=!1}function ie(){ne={},re={},ae=!1}function ue(t,e){if(e&&(e="".concat(e),t in ne||(ne[t]=[]),ne[t].indexOf(e)<0)){if(ne[t].length>128)return void(ae||(ae=!0,$t(5)));ne[t].push(e),t in re||(re[t]=[]),re[t].push(e)}}function ce(){Ft(1)}function se(){re={},ae=!1}var le=null,de=!0;function fe(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;de=!0,(null==e?void 0:e.addListener)&&e.addListener(["ad_storage","analytics_storage"],he)}function pe(){de=!0}function he(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;if(null==e?void 0:e.getConsentState){var n=e.getConsentState("analytics_storage");Ce(function(t){var e={source:2,ad_Storage:1===t.ad_Storage?"granted":"denied",analytics_Storage:1===t.analytics_Storage?"granted":"denied"};return e}({ad_Storage:e.getConsentState("ad_storage"),analytics_Storage:n}))}}function ge(t){me(t.analytics_Storage?1:0),le=t}function ve(){me(2)}function me(t){ue(36,t.toString())}function ye(t){le=t,Ft(47)}function be(){var t;if(de&&(Ft(47),de=!1,!i.track)){var e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;(null==e?void 0:e.usedUpdate)&&he()}}var we=null,_e=[],ke=0,Se=null,Ee={source:7,ad_Storage:"denied",analytics_Storage:"denied"};function Ie(){var t,e,n,r=navigator&&"userAgent"in navigator?navigator.userAgent:"",a=null!==(n="undefined"!=typeof Intl&&(null===(e=null===(t=null===Intl||void 0===Intl?void 0:Intl.DateTimeFormat())||void 0===t?void 0:t.resolvedOptions())||void 0===e?void 0:e.timeZone))&&void 0!==n?n:"",o=(new Date).getTimezoneOffset().toString(),u=window.location.ancestorOrigins?Array.from(window.location.ancestorOrigins).toString():"",c=document&&document.title?document.title:"";ke=r.indexOf("Electron")>0?1:0;var s=function(){var t={session:De(),ts:Math.round(Date.now()),count:1,upgrade:null,upload:""},e=mt("_clsk",!i.includeSubdomains);if(e){var n=e.includes("^")?e.split("^"):e.split("|");n.length>=5&&t.ts-Re(n[1])<18e5&&(t.session=n[0],t.count=Re(n[2])+1,t.upgrade=Re(n[3]),t.upload=n.length>=6?"".concat("https://").concat(n[5],"/").concat(n[4]):"".concat("https://").concat(n[4]))}return t}(),l=Xe(),d=i.projectId||function(t,e){void 0===e&&(e=null);for(var n,r=5381,a=r,o=0;o<t.length;o+=2)r=(r<<5)+r^t.charCodeAt(o),o+1<t.length&&(a=(a<<5)+a^t.charCodeAt(o+1));return n=Math.abs(r+11579*a),(e?n%Math.pow(2,e):n).toString(36)}(location.host);we={projectId:d,userId:l.id,sessionId:s.session,pageNum:s.count},i.lean=i.track&&null!==s.upgrade?0===s.upgrade:i.lean,i.upload=i.track&&"string"==typeof i.upload&&s.upload&&s.upload.length>"https://".length?s.upload:i.upload,ue(0,r),ue(3,c),ue(1,b(location.href,!!ke)),ue(2,document.referrer),ue(15,function(){var t=De();if(i.track&&pt(window,"sessionStorage")){var e=sessionStorage.getItem("_cltk");t=e||t,sessionStorage.setItem("_cltk",t)}return t}()),ue(16,document.documentElement.lang),ue(17,document.dir),ue(26,"".concat(window.devicePixelRatio)),ue(28,l.dob.toString()),ue(29,l.version.toString()),ue(33,u),ue(34,a),ue(35,o),H(0,s.ts),H(1,0),H(35,ke);var f,p=null===window||void 0===window?void 0:window.Zone;p&&"__symbol__"in p&&H(39,1),navigator&&(ue(9,navigator.language),H(33,navigator.hardwareConcurrency),H(32,navigator.maxTouchPoints),H(34,Math.round(navigator.deviceMemory)),(f=navigator.userAgentData)&&f.getHighEntropyValues?f.getHighEntropyValues(["model","platform","platformVersion","uaFullVersion"]).then((function(t){var e;ue(22,t.platform),ue(23,t.platformVersion),null===(e=t.brands)||void 0===e||e.forEach((function(t){ue(24,t.name+"~"+t.version)})),ue(25,t.model),H(27,t.mobile?1:0)})):ue(22,navigator.platform)),screen&&(H(14,Math.round(screen.width)),H(15,Math.round(screen.height)),H(16,Math.round(screen.colorDepth)));for(var h=0,g=i.cookies;h<g.length;h++){var v=g[h],m=mt(v);m&&rt(v,m)}null===Se&&(Se={source:l.consent?6:0,ad_Storage:i.track?"granted":"denied",analytics_Storage:i.track?"granted":"denied"}),ge(je(Se)),qe(l)}function Oe(){we=null,_e.forEach((function(t){t.called=!1}))}function Te(t,e,n,r){void 0===e&&(e=!0),void 0===n&&(n=!1),void 0===r&&(r=!1);var a=i.lean?0:1,o=!1;we&&(a||!1===e)&&(t(we,!i.lean,r?Se:void 0),o=!0),!n&&o||_e.push({callback:t,wait:e,recall:n,called:o,consentInfo:r})}function Me(){return we?[we.userId,we.sessionId,we.pageNum].join("."):""}function xe(t){void 0===t&&(t=!0),t?(Ce({source:4,ad_Storage:"granted",analytics_Storage:"granted"}),ve()):Ce({source:4,ad_Storage:"denied",analytics_Storage:"denied"})}function Ce(t,e){var n;void 0===t&&(t=Ee),void 0===e&&(e=5);var r={source:null!==(n=t.source)&&void 0!==n?n:e,ad_Storage:Ne(t.ad_Storage,null==Se?void 0:Se.ad_Storage),analytics_Storage:Ne(t.analytics_Storage,null==Se?void 0:Se.analytics_Storage)};if(Se&&r.ad_Storage===Se.ad_Storage&&r.analytics_Storage===Se.analytics_Storage)return Se.source=r.source,ye(je(Se)),void ve();Se=r,Pe(!0);var a=je(Se);if(!a.analytics_Storage&&i.track)return i.track=!1,ze(!0),Rn(),void window.setTimeout(Dn,250);gn()&&a.analytics_Storage&&(i.track=!0,qe(Xe(),1),Ae()),ye(a),ve()}function je(t){var e;return{source:null!==(e=t.source)&&void 0!==e?e:0,ad_Storage:"granted"===t.ad_Storage?1:0,analytics_Storage:"granted"===t.analytics_Storage?1:0}}function Ne(t,e){return void 0===e&&(e="denied"),"string"==typeof t?t.toLowerCase():e}function ze(t){void 0===t&&(t=!1),yt("_clsk","",-Number.MAX_VALUE),t&&yt("_clck","",-Number.MAX_VALUE)}function Pe(t){void 0===t&&(t=!1),function(t,e){void 0===e&&(e=!1);if(_e.length>0)for(var n=0;n<_e.length;n++){var r=_e[n];r.callback&&(!r.called&&!e||r.consentInfo&&e)&&(!r.wait||t)&&(r.callback(we,!i.lean,r.consentInfo?Se:void 0),r.called=!0,r.recall||(_e.splice(n,1),n--))}}(i.lean?0:1,t)}function Ae(){if(we&&i.track){var t=Math.round(Date.now()),e=i.upload&&"string"==typeof i.upload?i.upload.replace("https://",""):"",n=i.lean?0:1;yt("_clsk",[we.sessionId,t,we.pageNum,n,e].join(vt),1)}}function qe(t,e){void 0===e&&(e=null),e=null===e?t.consent:e;var n=Math.ceil((Date.now()+31536e6)/864e5),r=0===t.dob?null===i.dob?0:i.dob:t.dob;(null===t.expiry||Math.abs(n-t.expiry)>=1||t.consent!==e||t.dob!==r)&&yt("_clck",[we.userId,2,n.toString(36),e,r].join(vt),365)}function De(){var t=Math.floor(Math.random()*Math.pow(2,32));return window&&window.crypto&&window.crypto.getRandomValues&&Uint32Array&&(t=window.crypto.getRandomValues(new Uint32Array(1))[0]),t.toString(36)}function Re(t,e){return void 0===e&&(e=10),parseInt(t,e)}function Xe(){var t={id:De(),version:0,expiry:null,consent:0,dob:0},e=mt("_clck",!i.includeSubdomains);if(e&&e.length>0){var n=e.includes("^")?e.split("^"):e.split("|");n.length>1&&(t.version=Re(n[1])),n.length>2&&(t.expiry=Re(n[2],36)),n.length>3&&1===Re(n[3])&&(t.consent=1),n.length>4&&Re(n[1])>1&&(t.dob=Re(n[4])),i.track=i.track||1===t.consent,t.id=i.track?n[0]:t.id}return t}var Le,Ue=null;function He(){var t=we;Ue={version:d,sequence:0,start:0,duration:0,projectId:t.projectId,userId:t.userId,sessionId:t.sessionId,pageNum:t.pageNum,upload:0,end:0,applicationPlatform:0,url:""}}function Ve(){Ue=null}function Ge(t){return Ue.start=Ue.start+Ue.duration,Ue.duration=l()-Ue.start,Ue.sequence++,Ue.upload=t&&"sendBeacon"in navigator?1:0,Ue.end=t?1:0,Ue.applicationPlatform=0,Ue.url=b(location.href,!1,!0),[Ue.version,Ue.sequence,Ue.start,Ue.duration,Ue.projectId,Ue.userId,Ue.sessionId,Ue.pageNum,Ue.upload,Ue.end,Ue.applicationPlatform,Ue.url]}function Ye(){Le=[]}function Be(t){if(Le&&-1===Le.indexOf(t.message)){var e=i.report;if(e&&e.length>0&&Ue){var n={v:Ue.version,p:Ue.projectId,u:Ue.userId,s:Ue.sessionId,n:Ue.pageNum};t.message&&(n.m=t.message),t.stack&&(n.e=t.stack);var r=new XMLHttpRequest;r.open("POST",e,!0),r.send(JSON.stringify(n)),Le.push(t.message)}}return t}function We(t){return function(){var e=performance.now();try{t.apply(this,arguments)}catch(t){throw Be(t)}var n=performance.now()-e;U(4,n),n>30&&(L(7),H(6,n),t.dn&&"".concat(t.dn,"-").concat(n))}}var Ze=new Map;function Je(t,e,n,r,a){void 0===r&&(r=!1),void 0===a&&(a=!0),n=We(n);try{t[u("addEventListener")](e,n,{capture:r,passive:a}),function(t){return Ze.has(t)}(t)||Ze.set(t,[]),Ze.get(t).push({event:e,listener:n,options:{capture:r,passive:a}})}catch(t){}}function Fe(){Ze.forEach((function(t,e){!function(t,e){t.forEach((function(t){try{e[u("removeEventListener")](t.event,t.listener,{capture:t.options.capture,passive:t.options.passive})}catch(t){}})),Ze.delete(e)}(t,e)})),Ze=new Map}var Ke=null,Qe=null,$e=null,tn=0;function en(){return!(tn++>20)}function nn(){tn=0,$e!==an()&&(Rn(),window.setTimeout(rn,250))}function rn(){Dn(),H(29,1)}function an(){return location.href?location.href.replace(location.hash,""):location.href}var on=[],un=null,cn=null,sn=null;function ln(){on=[],un=null,cn=null}function dn(){var t=on.shift();t&&(un=t,t.task().then((function(){t.id===Me()&&(t.resolve(),un=null,dn())})).catch((function(e){t.id===Me()&&(e&&(e.name,e.message,e.stack),un=null,dn())})))}var fn=!1;function pn(){fn=!0,c=s(),ln(),Fe(),Ye(),$e=an(),tn=0,Je(window,"popstate",nn),null===Ke&&(Ke=history.pushState,history.pushState=function(){Ke.apply(this,arguments),gn()&&en()&&nn()}),null===Qe&&(Qe=history.replaceState,history.replaceState=function(){Qe.apply(this,arguments),gn()&&en()&&nn()})}function hn(){$e=null,tn=0,Ye(),Fe(),ln(),c=0,fn=!1}function gn(){return fn}function vn(){Dn(),q("clarityGemX","restart")}var mn=null;function yn(){mn=null}function bn(t){mn={fetchStart:Math.round(t.fetchStart),connectStart:Math.round(t.connectStart),connectEnd:Math.round(t.connectEnd),requestStart:Math.round(t.requestStart),responseStart:Math.round(t.responseStart),responseEnd:Math.round(t.responseEnd),domInteractive:Math.round(t.domInteractive),domComplete:Math.round(t.domComplete),loadEventStart:Math.round(t.loadEventStart),loadEventEnd:Math.round(t.loadEventEnd),redirectCount:Math.round(t.redirectCount),size:t.transferSize?t.transferSize:0,type:t.type,protocol:t.nextHopProtocol,encodedSize:t.encodedBodySize?t.encodedBodySize:0,decodedSize:t.decodedBodySize?t.decodedBodySize:0},function(t){tt(this,void 0,void 0,(function(){var e,n;return et(this,(function(r){return e=l(),n=[e,t],29===t&&(n.push(mn.fetchStart),n.push(mn.connectStart),n.push(mn.connectEnd),n.push(mn.requestStart),n.push(mn.responseStart),n.push(mn.responseEnd),n.push(mn.domInteractive),n.push(mn.domComplete),n.push(mn.loadEventStart),n.push(mn.loadEventEnd),n.push(mn.redirectCount),n.push(mn.size),n.push(mn.type),n.push(mn.protocol),n.push(mn.encodedSize),n.push(mn.decodedSize),yn(),Gt(n)),[2]}))}))}(29)}var wn,_n=0,kn=1/0,Sn=0,En=0,In=[],On=new Map,Tn=function(){return _n||0},Mn=function(){if(!In.length)return-1;var t=Math.min(In.length-1,Math.floor((Tn()-En)/50));return In[t].latency},xn=function(){En=Tn(),In.length=0,On.clear()},Cn=function(t){if(t.interactionId&&!(t.duration<40)){!function(t){"interactionCount"in performance?_n=performance.interactionCount:t.interactionId&&(kn=Math.min(kn,t.interactionId),Sn=Math.max(Sn,t.interactionId),_n=Sn?(Sn-kn)/7+1:0)}(t);var e=In[In.length-1],n=On.get(t.interactionId);if(n||In.length<10||t.duration>(null==e?void 0:e.latency)){if(n)t.duration>n.latency&&(n.latency=t.duration);else{var r={id:t.interactionId,latency:t.duration};On.set(r.id,r),In.push(r)}In.sort((function(t,e){return e.latency-t.latency})),In.length>10&&In.splice(10).forEach((function(t){return On.delete(t.id)}))}}},jn=["navigation","resource","longtask","first-input","layout-shift","largest-contentful-paint","event"];function Nn(){try{wn&&wn.disconnect(),wn=new PerformanceObserver(We(zn));for(var t=0,e=jn;t<e.length;t++){var n=e[t];PerformanceObserver.supportedEntryTypes.indexOf(n)>=0&&("layout-shift"===n&&U(9,0),wn.observe({type:n,buffered:!0}))}}catch(t){}}function zn(t){!function(t){for(var e=(!("visibilityState"in document)||"visible"===document.visibilityState),n=0;n<t.length;n++){var r=t[n];switch(r.entryType){case"navigation":bn(r);break;case"resource":var a=r.name;ue(4,An(a)),a!==i.upload&&a!==i.fallback||H(28,r.duration);break;case"longtask":L(7);break;case"first-input":e&&H(10,r.processingStart-r.startTime);break;case"event":e&&"PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&(Cn(r),ue(37,Mn().toString()));break;case"layout-shift":e&&!r.hadRecentInput&&U(9,1e3*r.value);break;case"largest-contentful-paint":e&&H(8,r.startTime)}}}(t.getEntries())}var Pn=null;function An(t){return Pn||(Pn=document.createElement("a")),Pn.href=t,Pn.host}var qn=[P,P,P,Object.freeze({__proto__:null,start:function(){yn(),function(){navigator&&navigator.connection&&ue(27,navigator.connection.effectiveType),window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes&&("complete"!==document.readyState?Je(window,"load",V.bind(this,Nn,0)):Nn())}()},stop:function(){wn&&wn.disconnect(),wn=null,xn(),Pn=null,yn()}}),P];function Dn(t){void 0===t&&(t=null),function(){try{var t=navigator&&"globalPrivacyControl"in navigator&&1==navigator.globalPrivacyControl;return!1===fn&&"undefined"!=typeof Promise&&window.MutationObserver&&document.createTreeWalker&&"now"in Date&&"now"in performance&&"undefined"!=typeof WeakMap&&!t}catch(t){return!1}}()&&(!function(t){if(null===t||fn)return!1;for(var e in t)e in i&&(i[e]=t[e])}(t),pn(),kt(),qn.forEach((function(t){return We(t.start)()})),null===t&&Hn())}function Rn(){gn()&&(qn.slice().reverse().forEach((function(t){return We(t.stop)()})),St(),hn(),void 0!==Ln&&(Ln[Un]=function(){(Ln[Un].q=Ln[Un].q||[]).push(arguments),"start"===arguments[0]&&Ln[Un].q.unshift(Ln[Un].q.pop())&&Hn()}))}var Xn=Object.freeze({__proto__:null,consent:xe,consentv2:Ce,dlog:ue,event:q,hashText:x,identify:at,maxMetric:H,measure:We,metadata:Te,pause:function(){gn()&&(q("clarityGemX","pause"),null===cn&&(cn=new Promise((function(t){sn=t}))))},queue:Gt,register:z,resume:function(){gn()&&(cn&&(sn(),cn=null,null===un&&dn()),q("clarityGemX","resume"))},schedule:function(t,e){return void 0===e&&(e=0),tt(this,void 0,void 0,(function(){var n,r,a;return et(this,(function(o){for(n=0,r=on;n<r.length;n++)if(r[n].task===t)return[2];return a=new Promise((function(n){on[1===e?"unshift":"push"]({task:t,resolve:n,id:Me()})})),null===un&&null===cn&&dn(),[2,a]}))}))},set:rt,signal:function(t){bt=t},start:Dn,stop:Rn,time:l,upgrade:Q,version:d}),Ln=window,Un="clarityGemX";function Hn(){if(void 0!==Ln){if(Ln[Un]&&Ln[Un].v)return console.warn("Error CL001: Multiple Clarity tags detected.");var t=Ln[Un]&&Ln[Un].q||[];for(Ln[Un]=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return Xn[t].apply(Xn,e)},Ln[Un].v=d;t.length>0;)Ln[Un].apply(Ln,t.shift())}}Hn()}();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gemx-dev/clarity-js",
3
- "version": "0.8.46",
3
+ "version": "0.8.48",
4
4
  "description": "Clarity js",
5
5
  "author": "Microsoft Corp.",
6
6
  "license": "MIT",
@@ -20,16 +20,11 @@
20
20
  "@rollup/plugin-node-resolve": "^15.0.0",
21
21
  "@rollup/plugin-terser": "^0.4.0",
22
22
  "@rollup/plugin-typescript": "^11.0.0",
23
- "@types/chai": "^4.3.0",
24
23
  "@types/resize-observer-browser": "^0.1.6",
25
- "chai": "^4.3.0",
26
24
  "del-cli": "^5.0.0",
27
25
  "husky": "^8.0.0",
28
26
  "lint-staged": "^13.1.0",
29
- "playwright": "^1.6.2",
30
27
  "rollup": "^3.0.0",
31
- "ts-mocha": "^11.1.0",
32
- "tslib": "^2.3.0",
33
28
  "tslint": "^6.1.3",
34
29
  "typescript": "^4.3.5"
35
30
  },
@@ -37,7 +32,7 @@
37
32
  "build": "yarn build:clean && yarn build:main",
38
33
  "build:main": "rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript",
39
34
  "build:clean": "del-cli build/*",
40
- "test": "ts-mocha -p test/tsconfig.test.json test/stub.test.ts",
35
+ "test": "playwright test --config ../../playwright.config.ts --project=clarity-js",
41
36
  "tslint": "tslint --project ./",
42
37
  "tslint:fix": "tslint --fix --project ./ --force"
43
38
  },
package/rollup.config.ts CHANGED
@@ -25,7 +25,7 @@ export default [
25
25
  },
26
26
  {
27
27
  input: "src/global.ts",
28
- output: [ { file: pkg.unpkg, format: "iife", exports: "named" } ],
28
+ output: [ { file: pkg.unpkg, format: "iife", exports: "named", sourcemap: true } ],
29
29
  onwarn(message, warn) {
30
30
  if (message.code === 'CIRCULAR_DEPENDENCY') { return; }
31
31
  warn(message);
@@ -33,7 +33,7 @@ export default [
33
33
  plugins: [
34
34
  resolve(),
35
35
  typescript(),
36
- terser({output: {comments: false}}),
36
+ // terser({output: {comments: false}}),
37
37
  commonjs({ include: ["node_modules/**"] })
38
38
  ]
39
39
  },
package/src/clarity.ts CHANGED
@@ -22,19 +22,17 @@ export { measure };
22
22
  const modules: Module[] = [diagnostic, layout, interaction, performance, dynamic];
23
23
 
24
24
  export function start(config: Config = null): void {
25
- // Check that browser supports required APIs and we do not attempt to start Clarity multiple times
26
- if (core.check()) {
27
- core.config(config);
28
- core.start();
29
- data.start();
30
- modules.forEach((x) => measure(x.start)());
25
+ // Check that browser supports required APIs and we do not attempt to start Clarity multiple times
26
+ if (core.check()) {
27
+ core.config(config);
28
+ core.start();
29
+ data.start();
30
+ modules.forEach(x => measure(x.start)());
31
31
 
32
- // If it's an internal call to start, without explicit configuration,
33
- // re-process any newly accumulated items in the queue
34
- if (config === null) {
35
- queue.process();
36
- }
37
- }
32
+ // If it's an internal call to start, without explicit configuration,
33
+ // re-process any newly accumulated items in the queue
34
+ if (config === null) { queue.process(); }
35
+ }
38
36
  }
39
37
 
40
38
  // By default Clarity is asynchronous and will yield by looking for requestIdleCallback.
@@ -43,29 +41,26 @@ export function start(config: Config = null): void {
43
41
  // we do allow external clients to manually pause Clarity for that short burst of time and minimize
44
42
  // performance impact even further. For reference, we are talking single digit milliseconds optimization here, not seconds.
45
43
  export function pause(): void {
46
- if (core.active()) {
47
- data.event(Constant.Clarity, Constant.Pause);
48
- task.pause();
49
- }
44
+ if (core.active()) {
45
+ data.event(Constant.Clarity, Constant.Pause);
46
+ task.pause();
47
+ }
50
48
  }
51
49
 
52
50
  // This is how external clients can get out of pause state, and resume Clarity to continue monitoring the page
53
51
  export function resume(): void {
54
- if (core.active()) {
55
- task.resume();
56
- data.event(Constant.Clarity, Constant.Resume);
57
- }
52
+ if (core.active()) {
53
+ task.resume();
54
+ data.event(Constant.Clarity, Constant.Resume);
55
+ }
58
56
  }
59
57
 
60
58
  export function stop(): void {
61
- if (core.active()) {
62
- // Stop modules in the reverse order of their initialization and start queuing up items again
63
- modules
64
- .slice()
65
- .reverse()
66
- .forEach((x) => measure(x.stop)());
67
- data.stop();
68
- core.stop();
69
- queue.setup();
70
- }
71
- }
59
+ if (core.active()) {
60
+ // Stop modules in the reverse order of their initialization and start queuing up items again
61
+ modules.slice().reverse().forEach(x => measure(x.stop)());
62
+ data.stop();
63
+ core.stop();
64
+ queue.setup();
65
+ }
66
+ }
@@ -9,23 +9,16 @@ export function reset(): void {
9
9
  }
10
10
 
11
11
  export function report(e: Error): Error {
12
- console.log(`🚀 🐥 ~ report ~ e:`, e);
13
12
  // Do not report the same message twice for the same page
14
13
  if (history && history.indexOf(e.message) === -1) {
15
14
  const url = config.report;
16
- console.log(`🚀 🐥 ~ report ~ url:`, url);
17
15
  if (url && url.length > 0 && data) {
18
- let payload: Report = { v: data.version, p: data.projectId, u: data.userId, s: data.sessionId, n: data.pageNum };
19
- if (e.message) {
20
- payload.m = e.message;
21
- }
22
- if (e.stack) {
23
- payload.e = e.stack;
24
- }
16
+ let payload: Report = {v: data.version, p: data.projectId, u: data.userId, s: data.sessionId, n: data.pageNum};
17
+ if (e.message) { payload.m = e.message; }
18
+ if (e.stack) { payload.e = e.stack; }
25
19
  // Using POST request instead of a GET request (img-src) to not violate existing CSP rules
26
20
  // Since, Clarity already uses XHR to upload data, we stick with similar POST mechanism for reporting too
27
21
  let xhr = new XMLHttpRequest();
28
- console.log(`🚀 🐥 ~ report ~ xhr:`, xhr);
29
22
  xhr.open("POST", url, true);
30
23
  xhr.send(JSON.stringify(payload));
31
24
  history.push(e.message);
@@ -1,2 +1,2 @@
1
- let version = "0.8.46";
1
+ let version = "0.8.48";
2
2
  export default version;
@@ -0,0 +1,44 @@
1
+ # Custom Clarity JS Modules
2
+
3
+ This directory contains custom tracking modules that extend the base Clarity functionality for GemX.
4
+
5
+ ## Structure
6
+
7
+ All custom modules follow the functional module pattern:
8
+ - Pure functions for testability
9
+ - No side effects in utility functions
10
+ - Clear separation of concerns
11
+ - Type-safe interfaces
12
+
13
+ ## Modules
14
+
15
+ ### Dialog Module (`dialog.ts`)
16
+
17
+ Tracks HTML `<dialog>` elements with proper modal/non-modal detection.
18
+
19
+ **Functions:**
20
+
21
+ - `trackDialog(dialogElement, attributes)` - Tracks dialog state and detects modal mode
22
+ - `createDialogNodeData(tag, attributes)` - Creates NodeInfo for dialog tracking
23
+
24
+ **Usage:**
25
+
26
+ ```typescript
27
+ import * as dialogCustom from "@src/custom/dialog";
28
+
29
+ const dialogElement = node as HTMLDialogElement;
30
+ const tracking = dialogCustom.trackDialog(dialogElement, attributes);
31
+ const nodeData = dialogCustom.createDialogNodeData(tag, tracking.attributes);
32
+ ```
33
+
34
+ ## Adding New Custom Modules
35
+
36
+ 1. Create a new file in this directory (e.g., `my-feature.ts`)
37
+ 2. Follow the functional module pattern
38
+ 3. Export functions with clear type signatures
39
+ 4. Add exports to `index.ts`
40
+ 5. Document the module in this README
41
+
42
+ ## Testing
43
+
44
+ Custom modules should be unit tested separately from the main Clarity codebase.
@@ -0,0 +1,69 @@
1
+ import { NodeInfo } from "@clarity-types/layout";
2
+
3
+ /**
4
+ * Custom module for tracking HTML Dialog elements
5
+ * Handles detection of modal vs non-modal dialogs for proper visualization
6
+ */
7
+
8
+ export interface DialogTrackingResult {
9
+ attributes: { [key: string]: string };
10
+ isModal: boolean;
11
+ }
12
+
13
+ /**
14
+ * Tracks dialog element state and determines if it's a modal dialog
15
+ * Modal dialogs are opened via showModal() and rendered in the browser's top-layer
16
+ *
17
+ * @param dialogElement - The dialog element to track
18
+ * @param attributes - Current attributes of the dialog
19
+ * @returns Tracking result with updated attributes and modal state
20
+ */
21
+ export function trackDialog(
22
+ dialogElement: HTMLDialogElement,
23
+ attributes: { [key: string]: string }
24
+ ): DialogTrackingResult {
25
+ const result: DialogTrackingResult = {
26
+ attributes: { ...attributes },
27
+ isModal: false
28
+ };
29
+
30
+ // Capture the open attribute which indicates if dialog is currently shown
31
+ if (dialogElement.open) {
32
+ result.attributes["open"] = "";
33
+ }
34
+
35
+ // Detect if this is a modal dialog by checking for ::backdrop pseudo-element
36
+ // Modal dialogs shown via showModal() have a backdrop, non-modal dialogs don't
37
+ if (dialogElement.open) {
38
+ try {
39
+ const backdropStyle = window.getComputedStyle(dialogElement, "::backdrop");
40
+ const backdropDisplay = backdropStyle.getPropertyValue("display");
41
+
42
+ // Modal dialogs have ::backdrop with display !== 'none'
43
+ if (backdropDisplay && backdropDisplay !== "none") {
44
+ result.isModal = true;
45
+ result.attributes["data-clarity-modal"] = "true";
46
+ }
47
+ } catch (e) {
48
+ // If we can't check for backdrop (older browsers),
49
+ // we can't reliably detect modal state
50
+ console.warn("Error detecting modal dialog:", e);
51
+ }
52
+ }
53
+
54
+ return result;
55
+ }
56
+
57
+ /**
58
+ * Creates dialog node data for tracking
59
+ *
60
+ * @param tag - Tag name (should be "DIALOG")
61
+ * @param attributes - Dialog attributes
62
+ * @returns NodeInfo object ready for tracking
63
+ */
64
+ export function createDialogNodeData(
65
+ tag: string,
66
+ attributes: { [key: string]: string }
67
+ ): NodeInfo {
68
+ return { tag, attributes };
69
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Custom modules for GemX Clarity extensions
3
+ * Contains custom tracking and rendering logic that extends the base Clarity functionality
4
+ */
5
+
6
+ export * from "./dialog";
@@ -30,12 +30,13 @@ function processConsent(): void {
30
30
 
31
31
  const analytics_storage = ics.getConsentState(Constant.AnalyticsStorage);
32
32
  const ad_storage = ics.getConsentState(Constant.AdStorage);
33
- const consentState = getConsentState({ ad_Storage: ad_storage, analytics_Storage: analytics_storage });
34
- consentv2(consentState, ConsentSource.GCM);
33
+ const consentState = getGcmConsentState({ ad_Storage: ad_storage, analytics_Storage: analytics_storage });
34
+ consentv2(consentState);
35
35
  }
36
36
 
37
- function getConsentState(googleConsent: GCMConsentState): ConsentState {
37
+ function getGcmConsentState(googleConsent: GCMConsentState): ConsentState {
38
38
  const consentState: ConsentState = {
39
+ source: ConsentSource.GCM,
39
40
  ad_Storage: googleConsent.ad_Storage === GCMConsent.Granted ? Constant.Granted : Constant.Denied,
40
41
  analytics_Storage: googleConsent.analytics_Storage === GCMConsent.Granted ? Constant.Granted : Constant.Denied,
41
42
  };
@@ -0,0 +1,90 @@
1
+ import { Constant } from "@clarity-types/data";
2
+ import config from "@src/core/config";
3
+ import { decodeCookieValue, encodeCookieValue, supported } from "@src/data/util";
4
+
5
+ let rootDomain = null;
6
+ export const COOKIE_SEP = Constant.Caret;
7
+
8
+ export function start() {
9
+ rootDomain = null;
10
+ }
11
+
12
+ export function stop() {
13
+ rootDomain = null;
14
+ }
15
+
16
+ export function getCookie(key: string, limit = false): string {
17
+ if (supported(document, Constant.Cookie)) {
18
+ let cookies: string[] = document.cookie.split(Constant.Semicolon);
19
+ if (cookies) {
20
+ for (let i = 0; i < cookies.length; i++) {
21
+ let pair: string[] = cookies[i].split(Constant.Equals);
22
+ if (pair.length > 1 && pair[0] && pair[0].trim() === key) {
23
+ // Some browsers automatically url encode cookie values if they are not url encoded.
24
+ // We therefore encode and decode cookie values ourselves.
25
+ // For backwards compatability we need to consider 3 cases:
26
+ // * Cookie was previously not encoded by Clarity and browser did not encode it
27
+ // * Cookie was previously not encoded by Clarity and browser encoded it once or more
28
+ // * Cookie was previously encoded by Clarity and browser did not encode it
29
+ let [isEncoded, decodedValue] = decodeCookieValue(pair[1]);
30
+
31
+ while (isEncoded) {
32
+ [isEncoded, decodedValue] = decodeCookieValue(decodedValue);
33
+ }
34
+
35
+ // If we are limiting cookies, check if the cookie value is limited
36
+ if (limit) {
37
+ return decodedValue.endsWith(`${Constant.Tilde}1`) ? decodedValue.substring(0, decodedValue.length - 2) : null;
38
+ }
39
+
40
+ return decodedValue;
41
+ }
42
+ }
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+
48
+ export function setCookie(key: string, value: string, time: number): void {
49
+ // only write cookies if we are currently in a cookie writing mode (and they are supported)
50
+ // OR if we are trying to write an empty cookie (i.e. clear the cookie value out)
51
+ if ((config.track || value == Constant.Empty) && ((navigator && navigator.cookieEnabled) || supported(document, Constant.Cookie))) {
52
+ // Some browsers automatically url encode cookie values if they are not url encoded.
53
+ // We therefore encode and decode cookie values ourselves.
54
+ let encodedValue = encodeCookieValue(value);
55
+
56
+ let expiry = new Date();
57
+ expiry.setDate(expiry.getDate() + time);
58
+ let expires = expiry ? Constant.Expires + expiry.toUTCString() : Constant.Empty;
59
+ let cookie = `${key}=${encodedValue}${Constant.Semicolon}${expires}${Constant.Path}`;
60
+ try {
61
+ // Attempt to get the root domain only once and fall back to writing cookie on the current domain.
62
+ if (rootDomain === null) {
63
+ let hostname = location.hostname ? location.hostname.split(Constant.Dot) : [];
64
+ // Walk backwards on a domain and attempt to set a cookie, until successful
65
+ for (let i = hostname.length - 1; i >= 0; i--) {
66
+ rootDomain = `.${hostname[i]}${rootDomain ? rootDomain : Constant.Empty}`;
67
+ // We do not wish to attempt writing a cookie on the absolute last part of the domain, e.g. .com or .net.
68
+ // So we start attempting after second-last part, e.g. .domain.com (PASS) or .co.uk (FAIL)
69
+ if (i < hostname.length - 1) {
70
+ // Write the cookie on the current computed top level domain
71
+ document.cookie = `${cookie}${Constant.Semicolon}${Constant.Domain}${rootDomain}`;
72
+ // Once written, check if the cookie exists and its value matches exactly with what we intended to set
73
+ // Checking for exact value match helps us eliminate a corner case where the cookie may already be present with a different value
74
+ // If the check is successful, no more action is required and we can return from the function since rootDomain cookie is already set
75
+ // If the check fails, continue with the for loop until we can successfully set and verify the cookie
76
+ if (getCookie(key) === value) {
77
+ return;
78
+ }
79
+ }
80
+ }
81
+ // Finally, if we were not successful and gone through all the options, play it safe and reset rootDomain to be empty
82
+ // This forces our code to fall back to always writing cookie to the current domain
83
+ rootDomain = Constant.Empty;
84
+ }
85
+ } catch {
86
+ rootDomain = Constant.Empty;
87
+ }
88
+ document.cookie = rootDomain ? `${cookie}${Constant.Semicolon}${Constant.Domain}${rootDomain}` : cookie;
89
+ }
90
+ }
package/src/data/index.ts CHANGED
@@ -13,6 +13,7 @@ import * as upgrade from "@src/data/upgrade";
13
13
  import * as upload from "@src/data/upload";
14
14
  import * as variable from "@src/data/variable";
15
15
  import * as extract from "@src/data/extract";
16
+ import * as cookie from "@src/data/cookie";
16
17
  export { event } from "@src/data/custom";
17
18
  export { consent, consentv2, metadata } from "@src/data/metadata";
18
19
  export { upgrade } from "@src/data/upgrade";
@@ -21,7 +22,7 @@ export { signal } from "@src/data/signal";
21
22
  export { max as maxMetric } from "@src/data/metric";
22
23
  export { log as dlog } from "@src/data/dimension";
23
24
 
24
- const modules: Module[] = [baseline, dimension, variable, limit, summary, consent, metadata, envelope, upload, ping, upgrade, extract];
25
+ const modules: Module[] = [baseline, dimension, variable, limit, summary, cookie, consent, metadata, envelope, upload, ping, upgrade, extract];
25
26
 
26
27
  export function start(): void {
27
28
  // Metric needs to be initialized before we can start measuring. so metric is not wrapped in measure