@gemx-dev/clarity-js 0.8.39

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.
Files changed (118) hide show
  1. package/README.md +1 -0
  2. package/build/clarity.extended.js +1 -0
  3. package/build/clarity.insight.js +1 -0
  4. package/build/clarity.js +6433 -0
  5. package/build/clarity.livechat.js +1 -0
  6. package/build/clarity.min.js +1 -0
  7. package/build/clarity.module.js +6429 -0
  8. package/build/clarity.performance.js +1 -0
  9. package/build/dynamic/clarity.crisp.js +1 -0
  10. package/build/dynamic/clarity.tidio.js +1 -0
  11. package/package.json +55 -0
  12. package/rollup.config.ts +161 -0
  13. package/src/clarity.ts +71 -0
  14. package/src/core/api.ts +8 -0
  15. package/src/core/config.ts +29 -0
  16. package/src/core/copy.ts +3 -0
  17. package/src/core/dynamic.ts +57 -0
  18. package/src/core/event.ts +53 -0
  19. package/src/core/hash.ts +19 -0
  20. package/src/core/history.ts +71 -0
  21. package/src/core/index.ts +81 -0
  22. package/src/core/measure.ts +19 -0
  23. package/src/core/report.ts +35 -0
  24. package/src/core/scrub.ts +202 -0
  25. package/src/core/task.ts +181 -0
  26. package/src/core/throttle.ts +46 -0
  27. package/src/core/time.ts +26 -0
  28. package/src/core/timeout.ts +10 -0
  29. package/src/core/version.ts +2 -0
  30. package/src/data/baseline.ts +162 -0
  31. package/src/data/compress.ts +31 -0
  32. package/src/data/consent.ts +75 -0
  33. package/src/data/custom.ts +23 -0
  34. package/src/data/dimension.ts +53 -0
  35. package/src/data/encode.ts +155 -0
  36. package/src/data/envelope.ts +53 -0
  37. package/src/data/extract.ts +211 -0
  38. package/src/data/index.ts +50 -0
  39. package/src/data/limit.ts +44 -0
  40. package/src/data/metadata.ts +408 -0
  41. package/src/data/metric.ts +51 -0
  42. package/src/data/ping.ts +36 -0
  43. package/src/data/signal.ts +30 -0
  44. package/src/data/summary.ts +34 -0
  45. package/src/data/token.ts +39 -0
  46. package/src/data/upgrade.ts +44 -0
  47. package/src/data/upload.ts +333 -0
  48. package/src/data/variable.ts +84 -0
  49. package/src/diagnostic/encode.ts +40 -0
  50. package/src/diagnostic/fraud.ts +37 -0
  51. package/src/diagnostic/index.ts +13 -0
  52. package/src/diagnostic/internal.ts +28 -0
  53. package/src/diagnostic/script.ts +35 -0
  54. package/src/dynamic/agent/blank.ts +2 -0
  55. package/src/dynamic/agent/crisp.ts +40 -0
  56. package/src/dynamic/agent/encode.ts +25 -0
  57. package/src/dynamic/agent/index.ts +8 -0
  58. package/src/dynamic/agent/livechat.ts +58 -0
  59. package/src/dynamic/agent/tidio.ts +44 -0
  60. package/src/global.ts +6 -0
  61. package/src/index.ts +9 -0
  62. package/src/insight/blank.ts +14 -0
  63. package/src/insight/encode.ts +61 -0
  64. package/src/insight/snapshot.ts +115 -0
  65. package/src/interaction/change.ts +38 -0
  66. package/src/interaction/click.ts +163 -0
  67. package/src/interaction/clipboard.ts +32 -0
  68. package/src/interaction/encode.ts +207 -0
  69. package/src/interaction/focus.ts +25 -0
  70. package/src/interaction/index.ts +60 -0
  71. package/src/interaction/input.ts +58 -0
  72. package/src/interaction/pointer.ts +137 -0
  73. package/src/interaction/resize.ts +50 -0
  74. package/src/interaction/scroll.ts +129 -0
  75. package/src/interaction/selection.ts +66 -0
  76. package/src/interaction/submit.ts +30 -0
  77. package/src/interaction/timeline.ts +69 -0
  78. package/src/interaction/unload.ts +26 -0
  79. package/src/interaction/visibility.ts +28 -0
  80. package/src/layout/animation.ts +133 -0
  81. package/src/layout/custom.ts +43 -0
  82. package/src/layout/discover.ts +31 -0
  83. package/src/layout/document.ts +46 -0
  84. package/src/layout/dom.ts +439 -0
  85. package/src/layout/encode.ts +154 -0
  86. package/src/layout/index.ts +42 -0
  87. package/src/layout/mutation.ts +412 -0
  88. package/src/layout/node.ts +294 -0
  89. package/src/layout/offset.ts +19 -0
  90. package/src/layout/region.ts +151 -0
  91. package/src/layout/schema.ts +63 -0
  92. package/src/layout/selector.ts +82 -0
  93. package/src/layout/style.ts +160 -0
  94. package/src/layout/target.ts +32 -0
  95. package/src/layout/traverse.ts +28 -0
  96. package/src/performance/blank.ts +10 -0
  97. package/src/performance/encode.ts +31 -0
  98. package/src/performance/index.ts +12 -0
  99. package/src/performance/interaction.ts +125 -0
  100. package/src/performance/navigation.ts +31 -0
  101. package/src/performance/observer.ts +112 -0
  102. package/src/queue.ts +33 -0
  103. package/test/core.test.ts +139 -0
  104. package/test/helper.ts +167 -0
  105. package/test/html/core.html +34 -0
  106. package/test/stub.test.ts +7 -0
  107. package/test/tsconfig.test.json +6 -0
  108. package/tsconfig.json +21 -0
  109. package/tslint.json +33 -0
  110. package/types/agent.d.ts +39 -0
  111. package/types/core.d.ts +150 -0
  112. package/types/data.d.ts +568 -0
  113. package/types/diagnostic.d.ts +24 -0
  114. package/types/global.d.ts +30 -0
  115. package/types/index.d.ts +40 -0
  116. package/types/interaction.d.ts +174 -0
  117. package/types/layout.d.ts +277 -0
  118. package/types/performance.d.ts +31 -0
@@ -0,0 +1 @@
1
+ !function(){"use strict";var t=Object.freeze({__proto__:null,get queue(){return Wt},get start(){return Bt},get stop(){return Zt},get track(){return Rt}}),e=Object.freeze({__proto__:null,get check(){return te},get compute(){return ne},get data(){return Lt},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 He},get start(){return Le},get stop(){return Ue}}),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.39";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){L(t.analytics_Storage?1:0),A=t}function R(){L(2)}function L(t){se(36,t.toString())}function U(t){A=t,Qt(47)}function H(){P&&(Qt(47),P=!1)}var X=Object.freeze({__proto__:null,compute:H,config:D,consent:R,get data(){return A},start:function(){var t,e;P=!0,(null===(e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics)||void 0===e?void 0:e.addListener)&&window.google_tag_data.ics.addListener(["ad_storage","analytics_storage"],q)},stop:function(){P=!0},trackConsentv2:U}),V=null;function Y(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 B,W=null,Z=null;function J(t){t in W||(W[t]=0),t in Z||(Z[t]=0),W[t]++,Z[t]++}function G(t,e){null!==e&&(t in W||(W[t]=0),t in Z||(Z[t]=0),W[t]+=e,Z[t]+=e)}function F(t,e){null!==e&&!1===isNaN(e)&&(t in W||(W[t]=0),(e>W[t]||0===W[t])&&(Z[t]=e,W[t]=e))}function K(t,e,n){return window.setTimeout(Ye(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();B={gap:t-$},Qt(25),B.gap<3e5?et=K(rt,tt):sn&&(Y("clarity","suspend"),Pn(),["mousemove","touchstart"].forEach((function(t){return We(document,t,fn)})),["resize","scroll","pageshow"].forEach((function(t){return We(window,t,fn)})))}var at=Object.freeze({__proto__:null,get data(){return B},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,X,r,a,t,at,ut,z];function Et(){W={},Z={},J(5),St.forEach((function(t){return t.start()}))}function It(){St.slice().reverse().forEach((function(t){return Ye(t.stop)()})),W={},Z={}}function Tt(){ht(),le(),Qt(0),ne(),H()}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,Wt(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))}Wt(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,Lt,Ut=0,Ht=0,Xt=null,Vt=0,Yt=!1;function Bt(){Dt=!0,Ut=0,Ht=0,Yt=!1,Vt=0,At=[],Pt=[],qt={},Rt=null}function Wt(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?!Yt&&Ht+a.length>10485760&&(Yt=!0):Yt=!1,r){case 5:if(Yt)break;Ut+=a.length;case 37:case 6:case 43:case 45:case 46:case 44:case 51:if(Yt)break;Ht+=a.length,At.push(a);break;default:Pt.push(a)}J(25);var i=function(){var t=!1===o.lean&&Ut>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(Xt),Xt=null),e&&null===Xt&&(25!==r&&nt(),Xt=K(Jt,i),Vt=n,te(Ht))}}function Zt(){Q(Xt),Jt(!0),Ut=0,Ht=0,Yt=!1,Vt=0,At=[],Pt=[],qt={},Rt=null,Dt=!1}function Jt(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?(Xt=null,(e=!1===o.lean&&Ht>0&&(Ht<1048576||Re.sequence>0))&&F(1,1),Tt(),n=!0===t,Re?(r=JSON.stringify(He(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 G(2,(c=s)?c.length:u.length),Gt(u,c,Re.sequence,n),Pt=[],e&&(At=[],Ht=0,Ut=0,Yt=!1),[2]}}))}))}function Gt(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(){Ye(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),Gt(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&&(Gt(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),Wt(e,!1));break;case 25:e.push(B.gap),Wt(e);break;case 35:e.push(Lt.check),Wt(e,!1);break;case 3:e.push(ot.key),Wt(e);break;case 2:e.push(Rt.sequence),e.push(Rt.attempts),e.push(Rt.status),Wt(e,!1);break;case 24:V.key&&e.push(V.key),e.push(V.value),Wt(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(),Wt(e,!1)}break;case 0:var u=Object.keys(Z);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(Z[d]))}Z={},Wt(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(),Wt(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]))}Wt(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)})),Wt(e,!1);break;case 47:e.push(A.source),e.push(A.ad_Storage),e.push(A.analytics_Storage),Wt(e,!1)}}function $t(){Lt={check:0}}function te(t){if(0===Lt.check){var e=Lt.check;e=Re.sequence>=128?1:e,e=Re.pageNum>=128?7:e,e=s()>72e5?2:e,(e=t>10485760?2:e)!==Lt.check&&ee(e)}}function ee(t){Lt.check=t,5!==t&&(Te(),Pn())}function ne(){0!==Lt.check&&Qt(35)}function re(){Lt=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)}D(Ee(ve={ad_Storage:o.track?"granted":"denied",analytics_Storage:o.track?"granted":"denied"},0)),Ce(l)}function be(){ge=null,pe=null,ve=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),ve={ad_Storage:Ie(t.ad_Storage),analytics_Storage:Ie(t.analytics_Storage)},Oe(!0);var n=Ee(ve,e);if(!n.analytics_Storage)return o.track=!1,qe("_clsk","",-Number.MAX_VALUE),qe("_clck","",-Number.MAX_VALUE),Pn(),void window.setTimeout(An,250);pn()&&(o.track=!0,Ce(ze(),1),Me(),U(n),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 Le(){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 Ue(){Re=null}function He(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),console.log("🚀 🐥 ~ envelope ~ data.url:",Re.url),[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 Xe(){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 Ye(t){return function(){var e=performance.now();try{t.apply(this,arguments)}catch(t){throw Ve(t)}var n=performance.now()-e;G(4,n),n>30&&(J(7),F(6,n),t.dn&&"".concat(t.dn,"-").concat(n))}}var Be=new Map;function We(t,e,n,r,a){void 0===r&&(r=!1),void 0===a&&(a=!0),n=Ye(n);try{t[i("addEventListener")](e,n,{capture:r,passive:a}),function(t){return Be.has(t)}(t)||Be.set(t,[]),Be.get(t).push({event:e,listener:n,options:{capture:r,passive:a}})}catch(t){}}function Ze(){Be.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){}})),Be.delete(e)}(t,e)})),Be=new Map}var Je=null,Ge=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(),Ze(),Xe(),Fe=en(),Ke=0,We(window,"popstate",$e),null===Je&&(Je=history.pushState,history.pushState=function(){Je.apply(this,arguments),pn()&&Qe()&&$e()}),null===Ge&&(Ge=history.replaceState,history.replaceState=function(){Ge.apply(this,arguments),pn()&&Qe()&&$e()})}function dn(){Fe=null,Ke=0,Xe(),Ze(),un(),u=0,sn=!1}function pn(){return sn}function fn(){An(),Y("clarity","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(),Wt(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(Ye(Cn));for(var t=0,e=Mn;t<e.length;t++){var n=e[t];PerformanceObserver.supportedEntryTypes.indexOf(n)>=0&&("layout-shift"===n&&G(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":J(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&&G(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?We(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 Ye(t.start)()})),null===t&&Ln())}function Pn(){pn()&&(zn.slice().reverse().forEach((function(t){return Ye(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())&&Ln()}))}var qn=Object.freeze({__proto__:null,consent:_e,consentv2:Se,dlog:se,event:Y,hashText:M,identify:pt,maxMetric:F,measure:Ye,metadata:we,pause:function(){pn()&&(Y("clarity","pause"),null===an&&(an=new Promise((function(t){on=t}))))},queue:Wt,register:j,resume:function(){pn()&&(an&&(on(),an=null,null===rn&&cn()),Y("clarity","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="clarity";function Ln(){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())}}Ln()}();
@@ -0,0 +1 @@
1
+ !function(){"use strict";function i(i){var n=[window.clarity("time"),52];switch(i){case 0:case 1:case 2:case 3:case 4:case 5:case 6:n.push(i)}!function(i){"undefined"!=typeof window&&window.clarity&&window.clarity("queue",i)}(n)}function n(){i(3)}function s(){i(4)}function e(){i(6)}function c(){i(5)}function o(){window.$crisp&&(window.$crisp.push(["off","chat:opened",n]),window.$crisp.push(["off","chat:closed",s]),window.$crisp.push(["off","message:sent",e]),window.$crisp.push(["off","message:received",c]))}window.$crisp&&(window.$crisp.push(["on","chat:opened",n]),window.$crisp.push(["on","chat:closed",s]),window.$crisp.push(["on","message:sent",e]),window.$crisp.push(["on","message:received",c])),"undefined"!=typeof window&&window.clarity&&window.clarity("register",o)}();
@@ -0,0 +1 @@
1
+ !function(){"use strict";function i(i){var o=[window.clarity("time"),52];switch(i){case 0:case 1:case 2:case 3:case 4:case 5:case 6:o.push(i)}!function(i){"undefined"!=typeof window&&window.clarity&&window.clarity("queue",i)}(o)}var o=!1;function n(){o&&i(3)}function t(){o&&i(4)}function w(){o&&i(6)}function e(){o&&i(5)}function a(){window.tidioChatApi&&(o=!1)}window.tidioChatApi&&(window.tidioChatApi.on("open",n),window.tidioChatApi.on("close",t),window.tidioChatApi.on("messageFromVisitor",w),window.tidioChatApi.on("messageFromOperator",e),o=!0),"undefined"!=typeof window&&window.clarity&&window.clarity("register",a)}();
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@gemx-dev/clarity-js",
3
+ "version": "0.8.39",
4
+ "description": "Clarity js",
5
+ "author": "Microsoft Corp.",
6
+ "license": "MIT",
7
+ "main": "build/clarity.js",
8
+ "module": "build/clarity.module.js",
9
+ "unpkg": "build/clarity.min.js",
10
+ "extended": "build/clarity.extended.js",
11
+ "insight": "build/clarity.insight.js",
12
+ "performance": "build/clarity.performance.js",
13
+ "livechat": "build/clarity.livechat.js",
14
+ "tidio": "build/dynamic/clarity.tidio.js",
15
+ "crisp": "build/dynamic/clarity.crisp.js",
16
+ "types": "types/index.d.ts",
17
+ "devDependencies": {
18
+ "@rollup/plugin-alias": "^4.0.0",
19
+ "@rollup/plugin-commonjs": "^24.0.0",
20
+ "@rollup/plugin-node-resolve": "^15.0.0",
21
+ "@rollup/plugin-terser": "^0.4.0",
22
+ "@rollup/plugin-typescript": "^11.0.0",
23
+ "@types/chai": "^4.3.0",
24
+ "@types/resize-observer-browser": "^0.1.6",
25
+ "chai": "^4.3.0",
26
+ "del-cli": "^5.0.0",
27
+ "husky": "^8.0.0",
28
+ "lint-staged": "^13.1.0",
29
+ "playwright": "^1.6.2",
30
+ "rollup": "^3.0.0",
31
+ "ts-mocha": "^11.1.0",
32
+ "tslib": "^2.3.0",
33
+ "tslint": "^6.1.3",
34
+ "typescript": "^4.3.5"
35
+ },
36
+ "scripts": {
37
+ "build": "yarn build:clean && yarn build:main",
38
+ "build:main": "rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript",
39
+ "build:clean": "del-cli build/*",
40
+ "test": "ts-mocha -p test/tsconfig.test.json test/stub.test.ts",
41
+ "tslint": "tslint --project ./",
42
+ "tslint:fix": "tslint --fix --project ./ --force",
43
+ "release": "npm publish --access public"
44
+ },
45
+ "husky": {
46
+ "hooks": {
47
+ "pre-commit": "lint-staged"
48
+ }
49
+ },
50
+ "lint-staged": {
51
+ "*.ts": [
52
+ "tslint --format codeFrame"
53
+ ]
54
+ }
55
+ }
@@ -0,0 +1,161 @@
1
+ import alias from "@rollup/plugin-alias";
2
+ import commonjs from "@rollup/plugin-commonjs";
3
+ import resolve from "@rollup/plugin-node-resolve";
4
+ import terser from "@rollup/plugin-terser";
5
+ import typescript from "@rollup/plugin-typescript";
6
+ import { readFileSync } from "fs";
7
+
8
+ const pkg = JSON.parse(readFileSync("./package.json", "utf-8"));
9
+ export default [
10
+ {
11
+ input: "src/index.ts",
12
+ output: [
13
+ { file: pkg.main, format: "cjs", exports: "named" },
14
+ { file: pkg.module, format: "es", exports: "named" }
15
+ ],
16
+ plugins: [
17
+ resolve(),
18
+ typescript(),
19
+ commonjs({ include: ["node_modules/**"] })
20
+ ],
21
+ onwarn(message, warn) {
22
+ if (message.code === 'CIRCULAR_DEPENDENCY') { return; }
23
+ warn(message);
24
+ }
25
+ },
26
+ {
27
+ input: "src/global.ts",
28
+ output: [ { file: pkg.unpkg, format: "iife", exports: "named" } ],
29
+ onwarn(message, warn) {
30
+ if (message.code === 'CIRCULAR_DEPENDENCY') { return; }
31
+ warn(message);
32
+ },
33
+ plugins: [
34
+ resolve(),
35
+ typescript(),
36
+ terser({output: {comments: false}}),
37
+ commonjs({ include: ["node_modules/**"] })
38
+ ]
39
+ },
40
+ {
41
+ input: "src/global.ts",
42
+ output: [ { file: pkg.extended, format: "iife", exports: "named" } ],
43
+ onwarn(message, warn) {
44
+ if (message.code === 'CIRCULAR_DEPENDENCY') { return; }
45
+ warn(message);
46
+ },
47
+ plugins: [
48
+ resolve(),
49
+ typescript(),
50
+ terser({output: {comments: false}}),
51
+ commonjs({ include: ["node_modules/**"] })
52
+ ]
53
+ },
54
+ {
55
+ input: "src/global.ts",
56
+ output: [ { file: pkg.insight, format: "iife", exports: "named" } ],
57
+ onwarn(message, warn) {
58
+ if (message.code === 'CIRCULAR_DEPENDENCY') { return; }
59
+ warn(message);
60
+ },
61
+ plugins: [
62
+ alias({
63
+ entries: [
64
+ { find: '@src/layout/style', replacement: '@src/insight/blank' },
65
+ { find: '@src/layout/document', replacement: '@src/layout/document' },
66
+ { find: '@src/layout/encode', replacement: '@src/insight/encode' },
67
+ { find: /@src\/interaction\/(change|clipboard|input|pointer|selection)/, replacement: '@src/insight/blank' },
68
+ { find: /@src\/layout.*/, replacement: '@src/insight/snapshot' },
69
+ { find: /@src\/performance.*/, replacement: '@src/insight/blank' }
70
+ ]
71
+ }),
72
+ resolve(),
73
+ typescript(),
74
+ terser({output: {comments: false}}),
75
+ commonjs({ include: ["node_modules/**"] })
76
+ ]
77
+ },
78
+ {
79
+ input: "src/global.ts",
80
+ output: [ { file: pkg.performance, format: "iife", exports: "named" } ],
81
+ onwarn(message, warn) {
82
+ if (message.code === 'CIRCULAR_DEPENDENCY') { return; }
83
+ warn(message);
84
+ },
85
+ plugins: [
86
+ alias({
87
+ entries: [
88
+ { find: /@src\/interaction.*/, replacement: '@src/performance/blank' },
89
+ { find: /@src\/layout.*/, replacement: '@src/performance/blank' },
90
+ { find: /@src\/diagnostic.*/, replacement: '@src/performance/blank' },
91
+ { find: /@src\/data\/(extract|baseline|summary)/, replacement: '@src/performance/blank' },
92
+ { find: /@src\/core\/dynamic/, replacement: '@src/performance/blank' }
93
+ ]
94
+ }),
95
+ resolve(),
96
+ typescript(),
97
+ terser({output: {comments: false}}),
98
+ commonjs({ include: ["node_modules/**"] })
99
+ ]
100
+ },
101
+ {
102
+ input: "src/dynamic/agent/index.ts",
103
+ output: [ { file: pkg.livechat, format: "iife", exports: "named" } ],
104
+ onwarn(message, warn) {
105
+ if (message.code === 'CIRCULAR_DEPENDENCY') { return; }
106
+ warn(message);
107
+ },
108
+ plugins: [
109
+ alias({
110
+ entries: [
111
+ { find: /@src\/dynamic\/agent\/tidio.*/, replacement: '@src/dynamic/agent/blank' },
112
+ { find: /@src\/dynamic\/agent\/crisp.*/, replacement: '@src/dynamic/agent/blank' }
113
+ ]
114
+ }),
115
+ resolve(),
116
+ typescript(),
117
+ terser({output: {comments: false}}),
118
+ commonjs({ include: ["node_modules/**"] })
119
+ ]
120
+ },
121
+ {
122
+ input: "src/dynamic/agent/index.ts",
123
+ output: [ { file: pkg.tidio, format: "iife", exports: "named" } ],
124
+ onwarn(message, warn) {
125
+ if (message.code === 'CIRCULAR_DEPENDENCY') { return; }
126
+ warn(message);
127
+ },
128
+ plugins: [
129
+ alias({
130
+ entries: [
131
+ { find: /@src\/dynamic\/agent\/livechat.*/, replacement: '@src/dynamic/agent/blank' },
132
+ { find: /@src\/dynamic\/agent\/crisp.*/, replacement: '@src/dynamic/agent/blank' }
133
+ ]
134
+ }),
135
+ resolve(),
136
+ typescript(),
137
+ terser({output: {comments: false}}),
138
+ commonjs({ include: ["node_modules/**"] })
139
+ ]
140
+ },
141
+ {
142
+ input: "src/dynamic/agent/index.ts",
143
+ output: [ { file: pkg.crisp, format: "iife", exports: "named" } ],
144
+ onwarn(message, warn) {
145
+ if (message.code === 'CIRCULAR_DEPENDENCY') { return; }
146
+ warn(message);
147
+ },
148
+ plugins: [
149
+ alias({
150
+ entries: [
151
+ { find: /@src\/dynamic\/agent\/livechat.*/, replacement: '@src/dynamic/agent/blank' },
152
+ { find: /@src\/dynamic\/agent\/tidio.*/, replacement: '@src/dynamic/agent/blank' }
153
+ ]
154
+ }),
155
+ resolve(),
156
+ typescript(),
157
+ terser({output: {comments: false}}),
158
+ commonjs({ include: ["node_modules/**"] })
159
+ ]
160
+ }
161
+ ];
package/src/clarity.ts ADDED
@@ -0,0 +1,71 @@
1
+ import { Config, Module } from "@clarity-types/core";
2
+ import { Constant } from "@clarity-types/data";
3
+ import * as queue from "@src/queue";
4
+ import * as core from "@src/core";
5
+ import measure from "@src/core/measure";
6
+ import * as task from "@src/core/task";
7
+ import version from "@src/core/version";
8
+ import * as data from "@src/data";
9
+ import * as diagnostic from "@src/diagnostic";
10
+ import * as interaction from "@src/interaction";
11
+ import * as layout from "@src/layout";
12
+ import * as performance from "@src/performance";
13
+ import * as dynamic from "@src/core/dynamic";
14
+ export { version };
15
+ export { consent, consentv2, event, identify, set, upgrade, metadata, signal, maxMetric, dlog } from "@src/data";
16
+ export { queue } from "@src/data/upload";
17
+ export { register } from "@src/core/dynamic";
18
+ export { schedule } from "@src/core/task";
19
+ export { time } from "@src/core/time";
20
+ export { hashText } from "@src/layout";
21
+ export { measure };
22
+ const modules: Module[] = [diagnostic, layout, interaction, performance, dynamic];
23
+
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)());
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
+ }
38
+ }
39
+
40
+ // By default Clarity is asynchronous and will yield by looking for requestIdleCallback.
41
+ // However, there can still be situations with single page apps where a user action can result
42
+ // in the whole DOM being destroyed and reconstructed. While Clarity will perform favorably out of the box,
43
+ // we do allow external clients to manually pause Clarity for that short burst of time and minimize
44
+ // performance impact even further. For reference, we are talking single digit milliseconds optimization here, not seconds.
45
+ export function pause(): void {
46
+ if (core.active()) {
47
+ data.event(Constant.Clarity, Constant.Pause);
48
+ task.pause();
49
+ }
50
+ }
51
+
52
+ // This is how external clients can get out of pause state, and resume Clarity to continue monitoring the page
53
+ export function resume(): void {
54
+ if (core.active()) {
55
+ task.resume();
56
+ data.event(Constant.Clarity, Constant.Resume);
57
+ }
58
+ }
59
+
60
+ 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
+ }
@@ -0,0 +1,8 @@
1
+ import { Constant } from "@clarity-types/core";
2
+
3
+ export default function api(method: string): string {
4
+ // Zone.js, a popular package for Angular, overrides native browser APIs which can lead to inconsistent state for single page applications.
5
+ // Example issue: https://github.com/angular/angular/issues/31712
6
+ // As a work around, we ensuring Clarity access APIs outside of Zone (and use native implementation instead)
7
+ return window[Constant.Zone] && Constant.Symbol in window[Constant.Zone] ? window[Constant.Zone][Constant.Symbol](method) : method;
8
+ }
@@ -0,0 +1,29 @@
1
+ import { Config, Time } from "@clarity-types/core";
2
+
3
+ let config: Config = {
4
+ projectId: null,
5
+ delay: 1 * Time.Second,
6
+ lean: false,
7
+ lite: false,
8
+ track: true,
9
+ content: true,
10
+ drop: [],
11
+ mask: [],
12
+ unmask: [],
13
+ regions: [],
14
+ cookies: [],
15
+ fraud: true,
16
+ checksum: [],
17
+ report: null,
18
+ upload: null,
19
+ fallback: null,
20
+ upgrade: null,
21
+ action: null,
22
+ dob: null,
23
+ delayDom: false,
24
+ throttleDom: true,
25
+ conversions: false,
26
+ includeSubdomains: true,
27
+ };
28
+
29
+ export default config;
@@ -0,0 +1,3 @@
1
+ export default function<T>(input: T): T {
2
+ return JSON.parse(JSON.stringify(input));
3
+ }
@@ -0,0 +1,57 @@
1
+ import { Constant } from "@clarity-types/layout";
2
+ import * as baseline from "@src/data/baseline";
3
+
4
+ let stopCallbacks: (() => void)[] = [];
5
+ let active = false;
6
+ let modules: Set<number> = null;
7
+
8
+ export function start(): void {
9
+ active = true;
10
+ modules = new Set<number>();
11
+ }
12
+
13
+ export function stop(): void {
14
+ stopCallbacks.reverse().forEach((callback) => {
15
+ try {
16
+ callback();
17
+ } catch (error) {
18
+ // Do nothing
19
+ }
20
+ });
21
+ stopCallbacks = [];
22
+ active = false;
23
+ }
24
+
25
+ export function register(stopCallback: () => void): void {
26
+ if (active && typeof stopCallback === "function") {
27
+ stopCallbacks.push(stopCallback);
28
+ }
29
+ }
30
+
31
+ export function event(signal: string): void {
32
+ if (!active) return;
33
+
34
+ const parts = signal ? signal.split(" ") : [Constant.Empty];
35
+ const m = parts.length > 1 ? parseInt(parts[1], 10) : null;
36
+ if (m && modules.has(m)) {
37
+ return;
38
+ }
39
+
40
+ load(parts[0]);
41
+
42
+ if (m) {
43
+ modules.add(m);
44
+ baseline.dynamic(modules);
45
+ }
46
+ }
47
+
48
+ function load(url: string): void {
49
+ try {
50
+ const script = document.createElement("script");
51
+ script.src = url;
52
+ script.async = true;
53
+ document.head.appendChild(script);
54
+ } catch (error) {
55
+ // Do nothing
56
+ }
57
+ }
@@ -0,0 +1,53 @@
1
+ import { BrowserEvent, Constant } from "@clarity-types/core";
2
+ import api from "./api";
3
+ import measure from "./measure";
4
+
5
+ let bindings: Map<EventTarget, BrowserEvent[]> = new Map();
6
+
7
+ export function bind(target: EventTarget, event: string, listener: EventListener, capture: boolean = false, passive: boolean = true): void {
8
+ listener = measure(listener) as EventListener;
9
+ // Wrapping following lines inside try / catch to cover edge cases where we might try to access an inaccessible element.
10
+ // E.g. Iframe may start off as same-origin but later turn into cross-origin, and the following lines will throw an exception.
11
+ try {
12
+ target[api(Constant.AddEventListener)](event, listener, { capture, passive });
13
+ if (!has(target)) {
14
+ bindings.set(target, []);
15
+ }
16
+
17
+ bindings.get(target).push({ event, listener, options: { capture, passive } });
18
+ } catch {
19
+ /* do nothing */
20
+ }
21
+ }
22
+
23
+ export function reset(): void {
24
+ // Walk through existing list of bindings and remove them all
25
+ bindings.forEach((bindingsPerTarget: BrowserEvent[], target: EventTarget) => {
26
+ resetByTarget(bindingsPerTarget, target);
27
+ });
28
+
29
+ bindings = new Map();
30
+ }
31
+
32
+ export function unbind(target: EventTarget) {
33
+ if (!has(target)) {
34
+ return;
35
+ }
36
+ resetByTarget(bindings.get(target), target);
37
+ }
38
+
39
+ export function has(target: EventTarget): boolean {
40
+ return bindings.has(target);
41
+ }
42
+
43
+ function resetByTarget(bindingsPerTarget: BrowserEvent[], target: EventTarget): void {
44
+ bindingsPerTarget.forEach((binding) => {
45
+ // Wrapping inside try / catch to avoid situations where the element may be destroyed before we get a chance to unbind
46
+ try {
47
+ target[api(Constant.RemoveEventListener)](binding.event, binding.listener, { capture: binding.options.capture, passive: binding.options.passive });
48
+ } catch {
49
+ /* do nothing */
50
+ }
51
+ });
52
+ bindings.delete(target);
53
+ }
@@ -0,0 +1,19 @@
1
+ // tslint:disable: no-bitwise
2
+ export default function(input: string, precision: number = null): string {
3
+ // Code inspired from C# GetHashCode: https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/string.cs
4
+ let hash = 0;
5
+ let hashOne = 5381;
6
+ let hashTwo = hashOne;
7
+ for (let i = 0; i < input.length; i += 2) {
8
+ let charOne = input.charCodeAt(i);
9
+ hashOne = ((hashOne << 5) + hashOne) ^ charOne;
10
+ if (i + 1 < input.length) {
11
+ let charTwo = input.charCodeAt(i + 1);
12
+ hashTwo = ((hashTwo << 5) + hashTwo) ^ charTwo;
13
+ }
14
+ }
15
+ // Replace the magic number from C# implementation (1566083941) with a smaller prime number (11579)
16
+ // This ensures we don't hit integer overflow and prevent collisions
17
+ hash = Math.abs(hashOne + (hashTwo * 11579));
18
+ return (precision ? hash % Math.pow(2, precision) : hash).toString(36);
19
+ }
@@ -0,0 +1,71 @@
1
+ import { BooleanFlag, Code, Constant, Metric, Setting, Severity } from "@clarity-types/data";
2
+ import * as clarity from "@src/clarity";
3
+ import * as core from "@src/core"
4
+ import { bind } from "@src/core/event";
5
+ import * as internal from "@src/diagnostic/internal";
6
+ import * as metric from "@src/data/metric";
7
+
8
+ let pushState = null;
9
+ let replaceState = null;
10
+ let url = null;
11
+ let count = 0;
12
+
13
+ export function start(): void {
14
+ url = getCurrentUrl();
15
+ count = 0;
16
+ bind(window, "popstate", compute);
17
+
18
+ // Add a proxy to history.pushState function
19
+ if (pushState === null) {
20
+ pushState = history.pushState;
21
+ history.pushState = function(): void {
22
+ pushState.apply(this, arguments);
23
+ if (core.active() && check()) {
24
+ compute();
25
+ }
26
+ };
27
+ }
28
+
29
+ // Add a proxy to history.replaceState function
30
+ if (replaceState === null)
31
+ {
32
+ replaceState = history.replaceState;
33
+ history.replaceState = function(): void {
34
+ replaceState.apply(this, arguments);
35
+ if (core.active() && check()) {
36
+ compute();
37
+ }
38
+ };
39
+ }
40
+ }
41
+
42
+ function check(): boolean {
43
+ if (count++ > Setting.CallStackDepth) {
44
+ internal.log(Code.CallStackDepth, Severity.Info);
45
+ return false;
46
+ }
47
+ return true;
48
+ }
49
+
50
+ function compute(): void {
51
+ count = 0; // Reset the counter
52
+ if (url !== getCurrentUrl()) {
53
+ // If the url changed, start tracking it as a new page
54
+ clarity.stop();
55
+ window.setTimeout(restart, Setting.RestartDelay);
56
+ }
57
+ }
58
+
59
+ function restart(): void {
60
+ clarity.start();
61
+ metric.max(Metric.SinglePage, BooleanFlag.True);
62
+ }
63
+
64
+ function getCurrentUrl(): string {
65
+ return location.href ? location.href.replace(location.hash, Constant.Empty) : location.href;
66
+ }
67
+
68
+ export function stop(): void {
69
+ url = null;
70
+ count = 0;
71
+ }