clarity-js 0.7.27 → 0.7.31

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.
@@ -67,6 +67,7 @@ var clarity = /*#__PURE__*/Object.freeze({
67
67
  get pause () { return pause; },
68
68
  get resume () { return resume; },
69
69
  get set () { return set; },
70
+ get signal () { return signal; },
70
71
  get start () { return start; },
71
72
  get stop () { return stop; },
72
73
  get upgrade () { return upgrade; },
@@ -129,7 +130,8 @@ var config$1 = {
129
130
  fallback: null,
130
131
  upgrade: null,
131
132
  action: null,
132
- dob: null
133
+ dob: null,
134
+ delayDom: false
133
135
  };
134
136
 
135
137
  function api(method) {
@@ -152,7 +154,7 @@ function stop$F() {
152
154
  startTime = 0;
153
155
  }
154
156
 
155
- var version$1 = "0.7.27";
157
+ var version$1 = "0.7.31";
156
158
 
157
159
  // tslint:disable: no-bitwise
158
160
  function hash (input, precision) {
@@ -374,7 +376,8 @@ function reset$s() {
374
376
  scrollY: buffer.scrollY,
375
377
  pointerX: buffer.pointerX,
376
378
  pointerY: buffer.pointerY,
377
- activityTime: buffer.activityTime
379
+ activityTime: buffer.activityTime,
380
+ scrollTime: buffer.scrollTime
378
381
  }
379
382
  };
380
383
  }
@@ -388,10 +391,11 @@ function reset$s() {
388
391
  scrollY: 0,
389
392
  pointerX: 0,
390
393
  pointerY: 0,
391
- activityTime: 0
394
+ activityTime: 0,
395
+ scrollTime: 0
392
396
  };
393
397
  }
394
- function track$8(event, x, y) {
398
+ function track$8(event, x, y, time) {
395
399
  switch (event) {
396
400
  case 8 /* Event.Document */:
397
401
  buffer.docWidth = x;
@@ -404,6 +408,7 @@ function track$8(event, x, y) {
404
408
  case 10 /* Event.Scroll */:
405
409
  buffer.scrollX = x;
406
410
  buffer.scrollY = y;
411
+ buffer.scrollTime = time;
407
412
  break;
408
413
  default:
409
414
  buffer.pointerX = x;
@@ -856,6 +861,34 @@ function read(stream) {
856
861
  });
857
862
  }
858
863
 
864
+ var signalCallback = null;
865
+ function signal(cb) {
866
+ signalCallback = cb;
867
+ }
868
+ function parseSignals(signalsPayload) {
869
+ try {
870
+ var parsedSignals = JSON.parse(signalsPayload);
871
+ return parsedSignals;
872
+ }
873
+ catch (_a) {
874
+ return [];
875
+ }
876
+ }
877
+ function signalsEvent(signalsPayload) {
878
+ try {
879
+ if (!signalCallback) {
880
+ return;
881
+ }
882
+ var signals = parseSignals(signalsPayload);
883
+ signals.forEach(function (signal) {
884
+ signalCallback(signal);
885
+ });
886
+ }
887
+ catch (_a) {
888
+ //do nothing
889
+ }
890
+ }
891
+
859
892
  var modules$1 = [baseline, dimension, variable, limit, summary, metadata$1, envelope$1, upload$1, ping$1, upgrade$1, extract];
860
893
  function start$B() {
861
894
  // Metric needs to be initialized before we can start measuring. so metric is not wrapped in measure
@@ -2466,7 +2499,15 @@ function recompute$4(event) {
2466
2499
  // And, if for some reason that is not available, fall back to looking up scrollTop on document.documentElement.
2467
2500
  var x = element === de && "pageXOffset" in w ? Math.round(w.pageXOffset) : Math.round(element.scrollLeft);
2468
2501
  var y = element === de && "pageYOffset" in w ? Math.round(w.pageYOffset) : Math.round(element.scrollTop);
2469
- var current = { time: time(event), event: 10 /* Event.Scroll */, data: { target: element, x: x, y: y } };
2502
+ var width = window.innerWidth;
2503
+ var height = window.innerHeight;
2504
+ var xPosition = width / 3;
2505
+ var yOffset = width > height ? height * 0.15 : height * 0.2;
2506
+ var startYPosition = yOffset;
2507
+ var endYPosition = height - yOffset;
2508
+ var top = getPositionHash(xPosition, startYPosition);
2509
+ var bottom = getPositionHash(xPosition, endYPosition);
2510
+ var current = { time: time(event), event: 10 /* Event.Scroll */, data: { target: element, x: x, y: y, top: top, bottom: bottom } };
2470
2511
  // We don't send any scroll events if this is the first event and the current position is top (0,0)
2471
2512
  if ((event === null && x === 0 && y === 0) || (x === null || y === null)) {
2472
2513
  return;
@@ -2480,6 +2521,23 @@ function recompute$4(event) {
2480
2521
  clearTimeout(timeout$3);
2481
2522
  timeout$3 = setTimeout(process$3, 500 /* Setting.LookAhead */, 10 /* Event.Scroll */);
2482
2523
  }
2524
+ function getPositionHash(x, y) {
2525
+ var _a, _b, _c, _d;
2526
+ var node;
2527
+ if ("caretPositionFromPoint" in document) {
2528
+ node = (_a = document.caretPositionFromPoint(x, y)) === null || _a === void 0 ? void 0 : _a.offsetNode;
2529
+ }
2530
+ else if ("caretRangeFromPoint" in document) {
2531
+ node = (_b = document.caretRangeFromPoint(x, y)) === null || _b === void 0 ? void 0 : _b.startContainer;
2532
+ }
2533
+ if (!node) {
2534
+ node = document.elementFromPoint(x, y);
2535
+ }
2536
+ if (node && node.nodeType === Node.TEXT_NODE) {
2537
+ node = node.parentNode;
2538
+ }
2539
+ return (_d = (_c = get(node)) === null || _c === void 0 ? void 0 : _c.hash) === null || _d === void 0 ? void 0 : _d[1];
2540
+ }
2483
2541
  function reset$a() {
2484
2542
  state$2 = [];
2485
2543
  }
@@ -2717,7 +2775,7 @@ function num$1(input, scale) {
2717
2775
 
2718
2776
  var IGNORE_ATTRIBUTES = ["title", "alt", "onload", "onfocus", "onerror", "data-drupal-form-submit-last"];
2719
2777
  var newlineRegex = /[\r\n]+/g;
2720
- function processNode (node, source) {
2778
+ function processNode (node, source, timestamp) {
2721
2779
  var _a;
2722
2780
  var child = null;
2723
2781
  // Do not track this change if we are attempting to remove a node before discovering it
@@ -2895,7 +2953,7 @@ function processNode (node, source) {
2895
2953
  case "SOURCE":
2896
2954
  // Ignoring any base64 src attribute for media elements to prevent big unused tokens to be sent and shock the network
2897
2955
  if ("src" /* Constant.Src */ in attributes && attributes["src" /* Constant.Src */].startsWith("data:")) {
2898
- delete attributes["src" /* Constant.Src */];
2956
+ attributes["src" /* Constant.Src */] = "";
2899
2957
  }
2900
2958
  var mediaTag = { tag: tag, attributes: attributes };
2901
2959
  dom[call](node, parent, mediaTag, source);
@@ -2967,7 +3025,7 @@ function getAttributes(element) {
2967
3025
  return output;
2968
3026
  }
2969
3027
 
2970
- function traverse (root, timer, source) {
3028
+ function traverse (root, timer, source, timestamp) {
2971
3029
  return __awaiter(this, void 0, void 0, function () {
2972
3030
  var queue, entry, next, state, subnode;
2973
3031
  return __generator(this, function (_a) {
@@ -3142,7 +3200,7 @@ function process$1() {
3142
3200
  return [3 /*break*/, 6];
3143
3201
  }
3144
3202
  target = mutation.target;
3145
- type = track$3(mutation, timer, instance);
3203
+ type = track$3(mutation, timer, instance, record.time);
3146
3204
  if (type && target && target.ownerDocument) {
3147
3205
  parse$1(target.ownerDocument);
3148
3206
  }
@@ -3151,14 +3209,14 @@ function process$1() {
3151
3209
  }
3152
3210
  switch (type) {
3153
3211
  case "attributes" /* Constant.Attributes */:
3154
- processNode(target, 3 /* Source.Attributes */);
3212
+ processNode(target, 3 /* Source.Attributes */, record.time);
3155
3213
  break;
3156
3214
  case "characterData" /* Constant.CharacterData */:
3157
- processNode(target, 4 /* Source.CharacterData */);
3215
+ processNode(target, 4 /* Source.CharacterData */, record.time);
3158
3216
  break;
3159
3217
  case "childList" /* Constant.ChildList */:
3160
- processNodeList(mutation.addedNodes, 1 /* Source.ChildListAdd */, timer);
3161
- processNodeList(mutation.removedNodes, 2 /* Source.ChildListRemove */, timer);
3218
+ processNodeList(mutation.addedNodes, 1 /* Source.ChildListAdd */, timer, record.time);
3219
+ processNodeList(mutation.removedNodes, 2 /* Source.ChildListRemove */, timer, record.time);
3162
3220
  break;
3163
3221
  case "suspend" /* Constant.Suspend */:
3164
3222
  value = get(target);
@@ -3182,7 +3240,7 @@ function process$1() {
3182
3240
  });
3183
3241
  });
3184
3242
  }
3185
- function track$3(m, timer, instance) {
3243
+ function track$3(m, timer, instance, timestamp) {
3186
3244
  var value = m.target ? get(m.target.parentNode) : null;
3187
3245
  // Check if the parent is already discovered and that the parent is not the document root
3188
3246
  if (value && value.data.tag !== "HTML" /* Constant.HTML */) {
@@ -3224,7 +3282,7 @@ function names(nodes) {
3224
3282
  }
3225
3283
  return output.join();
3226
3284
  }
3227
- function processNodeList(list, source, timer) {
3285
+ function processNodeList(list, source, timer, timestamp) {
3228
3286
  return __awaiter(this, void 0, void 0, function () {
3229
3287
  var length, i, state;
3230
3288
  return __generator(this, function (_a) {
@@ -3444,8 +3502,10 @@ function encode$3 (type, ts) {
3444
3502
  tokens.push(sTarget.id);
3445
3503
  tokens.push(entry.data.x);
3446
3504
  tokens.push(entry.data.y);
3505
+ tokens.push(entry.data.top);
3506
+ tokens.push(entry.data.bottom);
3447
3507
  queue(tokens);
3448
- track$8(entry.event, entry.data.x, entry.data.y);
3508
+ track$8(entry.event, entry.data.x, entry.data.y, entry.time);
3449
3509
  }
3450
3510
  }
3451
3511
  reset$a();
@@ -3828,6 +3888,11 @@ function response(payload) {
3828
3888
  trigger$1(parts[1]);
3829
3889
  }
3830
3890
  break;
3891
+ case "SIGNAL" /* Constant.Signal */:
3892
+ if (parts.length > 1) {
3893
+ signalsEvent(parts[1]);
3894
+ }
3895
+ break;
3831
3896
  }
3832
3897
  }
3833
3898
  }
@@ -4129,6 +4194,7 @@ function encode$1 (event) {
4129
4194
  tokens.push(b.data.pointerX);
4130
4195
  tokens.push(b.data.pointerY);
4131
4196
  tokens.push(b.data.activityTime);
4197
+ tokens.push(b.data.scrollTime);
4132
4198
  queue(tokens, false);
4133
4199
  }
4134
4200
  reset$s();
@@ -4894,7 +4960,12 @@ function start$3() {
4894
4960
  start$x();
4895
4961
  start$u();
4896
4962
  start$z();
4897
- start$h();
4963
+ if (config$1.delayDom) {
4964
+ // Lazy load layout module as part of page load time performance improvements experiment
4965
+ bind(window, 'load', function () {
4966
+ start$h();
4967
+ });
4968
+ }
4898
4969
  start$4();
4899
4970
  start$w();
4900
4971
  start$v();
@@ -1 +1 @@
1
- !function(){"use strict";var t=Object.freeze({__proto__:null,get queue(){return ht},get start(){return ft},get stop(){return vt},get track(){return ct}}),n=Object.freeze({__proto__:null,get check(){return _t},get compute(){return Et},get data(){return it},get start(){return kt},get stop(){return It},get trigger(){return St}}),e=Object.freeze({__proto__:null,get compute(){return zt},get data(){return Mt},get log(){return jt},get reset(){return Ct},get start(){return Ot},get stop(){return Tt},get updates(){return xt}}),r=Object.freeze({__proto__:null,get callbacks(){return At},get clear(){return Lt},get consent(){return Vt},get data(){return qt},get electron(){return Nt},get id(){return Ut},get metadata(){return Ht},get save(){return Bt},get shortid(){return Jt},get start(){return Pt},get stop(){return Dt}}),o=Object.freeze({__proto__:null,get data(){return $t},get envelope(){return en},get start(){return tn},get stop(){return nn}}),a={projectId:null,delay:1e3,lean:!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};function u(t){return window.Zone&&"__symbol__"in window.Zone?window.Zone.__symbol__(t):t}var c=0;function i(t){void 0===t&&(t=null);var n=t&&t.timeStamp>0?t.timeStamp:performance.now();return Math.max(Math.round(n-c),0)}var s="0.7.27";var l=!0,d=null,p=null;function f(t,n,e){return function(){if(l&&null===d)try{d=new RegExp("\\p{N}","gu"),p=new RegExp("\\p{L}","gu"),new RegExp("\\p{Sc}","gu")}catch(t){l=!1}}(),t?t.replace(p,n).replace(d,e):t}var h=[],v=null;function g(){}var m=[];function y(){}function b(){}var w=Object.freeze({__proto__:null,checkDocumentStyles:function(t){},compute:function(){},data:v,hashText:y,keys:m,log:g,observe:function(){},reset:function(){},start:function(){},state:h,stop:function(){},trigger:b}),k=null;function _(t,n){On()&&t&&"string"==typeof t&&t.length<255&&(k=n&&"string"==typeof n&&n.length<255?{key:t,value:n}:{value:t},wt(24))}var S,E=null,I=null;function M(t){t in E||(E[t]=0),t in I||(I[t]=0),E[t]++,I[t]++}function x(t,n){null!==n&&(t in E||(E[t]=0),t in I||(I[t]=0),E[t]+=n,I[t]+=n)}function O(t,n){null!==n&&!1===isNaN(n)&&(t in E||(E[t]=0),(n>E[t]||0===E[t])&&(I[t]=n,E[t]=n))}function T(t,n,e){return window.setTimeout(an(t),n,e)}function j(t){return window.clearTimeout(t)}var z=0,C=0,q=null;function A(){q&&j(q),q=T(N,C),z=i()}function N(){var t=i();S={gap:t-z},wt(25),S.gap<3e5?q=T(N,C):In&&(_("clarity","suspend"),Vn(),["mousemove","touchstart"].forEach((function(t){return cn(document,t,jn)})),["resize","scroll","pageshow"].forEach((function(t){return cn(window,t,jn)})))}var R=Object.freeze({__proto__:null,get data(){return S},reset:A,start:function(){C=6e4,z=0},stop:function(){j(q),z=0,C=0}}),P=null;function D(t){On()&&a.lean&&(a.lean=!1,P={key:t},Bt(),a.upgrade&&a.upgrade(t),wt(3))}var H=Object.freeze({__proto__:null,get data(){return P},start:function(){!a.lean&&a.upgrade&&a.upgrade("Config"),P=null},stop:function(){P=null},upgrade:D});function U(t,n,e,r){return new(e||(e=Promise))((function(o,a){function u(t){try{i(r.next(t))}catch(t){a(t)}}function c(t){try{i(r.throw(t))}catch(t){a(t)}}function i(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(u,c)}i((r=r.apply(t,n||[])).next())}))}function V(t,n){var e,r,o,a,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(i){return function(c){if(e)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(u=0)),u;)try{if(e=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return u.label++,{value:c[1],done:!1};case 5:u.label++,r=c[1],c=[0];continue;case 7:c=u.ops.pop(),u.trys.pop();continue;default:if(!(o=u.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){u=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){u.label=c[1];break}if(6===c[0]&&u.label<o[1]){u.label=o[1],o=c;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(c);break}o[2]&&u.ops.pop(),u.trys.pop();continue}c=n.call(t,u)}catch(t){c=[6,t],r=0}finally{e=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,i])}}}var L=null;function B(t,n){W(t,"string"==typeof n?[n]:n)}function X(t,n,e,r){return void 0===n&&(n=null),void 0===e&&(e=null),void 0===r&&(r=null),U(this,void 0,void 0,(function(){var o,a;return V(this,(function(u){switch(u.label){case 0:return a={},[4,G(t)];case 1:return a.userId=u.sent(),a.userHint=r||((c=t)&&c.length>=5?"".concat(c.substring(0,2)).concat(f(c.substring(2),"*","*")):f(c,"*","*")),W("userId",[(o=a).userId]),W("userHint",[o.userHint]),W("userType",[Y(t)]),n&&(W("sessionId",[n]),o.sessionId=n),e&&(W("pageId",[e]),o.pageId=e),[2,o]}var c}))}))}function W(t,n){if(On()&&t&&n&&"string"==typeof t&&t.length<255){for(var e=(t in L?L[t]:[]),r=0;r<n.length;r++)"string"==typeof n[r]&&n[r].length<255&&e.push(n[r]);L[t]=e}}function J(){wt(34)}function Z(){L={}}function G(t){return U(this,void 0,void 0,(function(){var n;return V(this,(function(e){switch(e.label){case 0:return e.trys.push([0,4,,5]),crypto&&t?[4,crypto.subtle.digest("SHA-256",(new TextEncoder).encode(t))]:[3,2];case 1:return n=e.sent(),[2,Array.prototype.map.call(new Uint8Array(n),(function(t){return("00"+t.toString(16)).slice(-2)})).join("")];case 2:return[2,""];case 3:return[3,5];case 4:return e.sent(),[2,""];case 5:return[2]}}))}))}function Y(t){return t&&t.indexOf("@")>0?"email":"string"}var F="CompressionStream"in window;function K(t){return U(this,void 0,void 0,(function(){var n,e;return V(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),F?(n=new ReadableStream({start:function(n){return U(this,void 0,void 0,(function(){return V(this,(function(e){return n.enqueue(t),n.close(),[2]}))}))}}).pipeThrough(new TextEncoderStream).pipeThrough(new window.CompressionStream("gzip")),e=Uint8Array.bind,[4,Q(n)]):[3,2];case 1:return[2,new(e.apply(Uint8Array,[void 0,r.sent()]))];case 2:return[3,4];case 3:return r.sent(),[3,4];case 4:return[2,null]}}))}))}function Q(t){return U(this,void 0,void 0,(function(){var n,e,r,o,a;return V(this,(function(u){switch(u.label){case 0:n=t.getReader(),e=[],r=!1,o=[],u.label=1;case 1:return r?[3,3]:[4,n.read()];case 2:return a=u.sent(),r=a.done,o=a.value,r?[2,e]:(e.push.apply(e,o),[3,1]);case 3:return[2,e]}}))}))}var $=[w,e,Object.freeze({__proto__:null,compute:J,get data(){return L},identify:X,reset:Z,set:B,start:function(){Z()},stop:function(){Z()}}),n,w,r,o,t,R,H,w];function tt(){E={},I={},M(5),$.forEach((function(t){return an(t.start)()}))}function nt(){$.slice().reverse().forEach((function(t){return an(t.stop)()})),E={},I={}}function et(){J(),zt(),wt(0),Et()}var rt,ot,at,ut,ct,it,st=0,lt=0,dt=null,pt=0;function ft(){ut=!0,st=0,lt=0,pt=0,rt=[],ot=[],at={},ct=null}function ht(t,n){if(void 0===n&&(n=!0),ut){var e=i(),r=t.length>1?t[1]:null,o=JSON.stringify(t);switch(r){case 5:st+=o.length;case 37:case 6:case 43:case 45:case 46:lt+=o.length,rt.push(o);break;default:ot.push(o)}M(25);var u=function(){var t=!1===a.lean&&st>0?100:$t.sequence*a.delay;return"string"==typeof a.upload?Math.max(Math.min(t,3e4),100):a.delay}();e-pt>2*u&&(j(dt),dt=null),n&&null===dt&&(25!==r&&A(),dt=T(gt,u),pt=e,_t(lt))}}function vt(){j(dt),gt(!0),st=0,lt=0,pt=0,rt=[],ot=[],at={},ct=null,ut=!1}function gt(t){return void 0===t&&(t=!1),U(this,void 0,void 0,(function(){var n,e,r,o,u,c,i,s;return V(this,(function(l){switch(l.label){case 0:return dt=null,(n=!1===a.lean&&lt>0&&(lt<1048576||$t.sequence>0))&&O(1,1),et(),e=!0===t,r=JSON.stringify(en(e)),o="[".concat(ot.join(),"]"),u=n?"[".concat(rt.join(),"]"):"",c=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:o,p:u}),e?(s=null,[3,3]):[3,1];case 1:return[4,K(c)];case 2:s=l.sent(),l.label=3;case 3:return x(2,(i=s)?i.length:c.length),mt(c,i,$t.sequence,e),ot=[],n&&(rt=[],lt=0,st=0),[2]}}))}))}function mt(t,n,e,r){if(void 0===r&&(r=!1),"string"==typeof a.upload){var o=a.upload,u=!1;if(r&&"sendBeacon"in navigator)try{(u=navigator.sendBeacon.bind(navigator)(o,t))&&bt(e)}catch(t){}if(!1===u){e in at?at[e].attempts++:at[e]={data:t,attempts:1};var c=new XMLHttpRequest;c.open("POST",o,!0),c.timeout=15e3,c.ontimeout=function(){on(new Error("".concat("Timeout"," : ").concat(o)))},null!==e&&(c.onreadystatechange=function(){an(yt)(c,e)}),c.withCredentials=!0,n?(c.setRequestHeader("Accept","application/x-clarity-gzip"),c.send(n)):c.send(t)}}else if(a.upload){(0,a.upload)(t),bt(e)}}function yt(t,n){var e=at[n];t&&4===t.readyState&&e&&((t.status<200||t.status>208)&&e.attempts<=1?t.status>=400&&t.status<500?St(6):(0===t.status&&(a.upload=a.fallback?a.fallback:a.upload),mt(e.data,null,n)):(ct={sequence:n,attempts:e.attempts,status:t.status},e.attempts>1&&wt(2),200===t.status&&t.responseText&&function(t){for(var n=t&&t.length>0?t.split("\n"):[],e=0,r=n;e<r.length;e++){var o=r[e],u=o&&o.length>0?o.split(/ (.*)/):[""];switch(u[0]){case"END":St(6);break;case"UPGRADE":D("Auto");break;case"ACTION":a.action&&u.length>1&&a.action(u[1]);break;case"EXTRACT":u.length>1&&u[1]}}}(t.responseText),0===t.status&&(mt(e.data,null,n,!0),St(3)),t.status>=200&&t.status<=208&&bt(n),delete at[n]))}function bt(t){1===t&&Bt()}function wt(t){var n=[i(),t];switch(t){case 4:var e=h;e&&((n=[e.time,e.event]).push(e.data.visible),n.push(e.data.docWidth),n.push(e.data.docHeight),n.push(e.data.screenWidth),n.push(e.data.screenHeight),n.push(e.data.scrollX),n.push(e.data.scrollY),n.push(e.data.pointerX),n.push(e.data.pointerY),n.push(e.data.activityTime),ht(n,!1));break;case 25:n.push(S.gap),ht(n);break;case 35:n.push(it.check),ht(n,!1);break;case 3:n.push(P.key),ht(n);break;case 2:n.push(ct.sequence),n.push(ct.attempts),n.push(ct.status),ht(n,!1);break;case 24:k.key&&n.push(k.key),n.push(k.value),ht(n);break;case 34:var r=Object.keys(L);if(r.length>0){for(var o=0,a=r;o<a.length;o++){var u=a[o];n.push(u),n.push(L[u])}Z(),ht(n,!1)}break;case 0:var c=Object.keys(I);if(c.length>0){for(var s=0,l=c;s<l.length;s++){var d=l[s],p=parseInt(d,10);n.push(p),n.push(Math.round(I[d]))}I={},ht(n,!1)}break;case 1:var f=Object.keys(xt);if(f.length>0){for(var g=0,y=f;g<y.length;g++){var b=y[g];p=parseInt(b,10);n.push(p),n.push(xt[b])}Ct(),ht(n,!1)}break;case 36:var w=Object.keys(v);if(w.length>0){for(var _=0,E=w;_<E.length;_++){var M=E[_];p=parseInt(M,10);n.push(p),n.push([].concat.apply([],v[M]))}ht(n,!1)}break;case 40:m.forEach((function(t){n.push(t);var e=[];for(var r in v[t]){var o=parseInt(r,10);e.push(o),e.push(v[t][r])}n.push(e)})),ht(n,!1)}}function kt(){it={check:0}}function _t(t){if(0===it.check){var n=it.check;n=$t.sequence>=128?1:n,n=$t.pageNum>=128?7:n,n=i()>72e5?2:n,(n=t>10485760?2:n)!==it.check&&St(n)}}function St(t){it.check=t,Lt(),Vn()}function Et(){0!==it.check&&wt(35)}function It(){it=null}var Mt=null,xt=null;function Ot(){Mt={},xt={}}function Tt(){Mt={},xt={}}function jt(t,n){n&&(n="".concat(n),t in Mt||(Mt[t]=[]),Mt[t].indexOf(n)<0&&(Mt[t].push(n),t in xt||(xt[t]=[]),xt[t].push(n),Mt[t].length>128&&St(5)))}function zt(){wt(1)}function Ct(){xt={}}var qt=null,At=[],Nt=0,Rt=null;function Pt(){Rt=null;var t=navigator&&"userAgent"in navigator?navigator.userAgent:"",n=document&&document.title?document.title:"";Nt=t.indexOf("Electron")>0?1:0;var e,r=function(){var t={session:Jt(),ts:Math.round(Date.now()),count:1,upgrade:null,upload:""},n=Yt("_clsk");if(n){var e=n.split("|");e.length>=5&&t.ts-Zt(e[1])<18e5&&(t.session=e[0],t.count=Zt(e[2])+1,t.upgrade=Zt(e[3]),t.upload=e.length>=6?"".concat("https://").concat(e[5],"/").concat(e[4]):"".concat("https://").concat(e[4]))}return t}(),o=Gt(),u=a.projectId||function(t,n){void 0===n&&(n=null);for(var e,r=5381,o=r,a=0;a<t.length;a+=2)r=(r<<5)+r^t.charCodeAt(a),a+1<t.length&&(o=(o<<5)+o^t.charCodeAt(a+1));return e=Math.abs(r+11579*o),(n?e%Math.pow(2,n):e).toString(36)}(location.host);qt={projectId:u,userId:o.id,sessionId:r.session,pageNum:r.count},a.lean=a.track&&null!==r.upgrade?0===r.upgrade:a.lean,a.upload=a.track&&"string"==typeof a.upload&&r.upload&&r.upload.length>"https://".length?r.upload:a.upload,jt(0,t),jt(3,n),jt(1,function(t,n){if(void 0===n&&(n=!1),n)return"".concat("https://").concat("Electron");var e=a.drop;if(e&&e.length>0&&t&&t.indexOf("?")>0){var r=t.split("?");return r[0]+"?"+r[1].split("&").map((function(t){return e.some((function(n){return 0===t.indexOf("".concat(n,"="))}))?"".concat(t.split("=")[0],"=").concat("*na*"):t})).join("&")}return t}(location.href,!!Nt)),jt(2,document.referrer),jt(15,function(){var t=Jt();if(a.track&&Xt(window,"sessionStorage")){var n=sessionStorage.getItem("_cltk");t=n||t,sessionStorage.setItem("_cltk",t)}return t}()),jt(16,document.documentElement.lang),jt(17,document.dir),jt(26,"".concat(window.devicePixelRatio)),jt(28,o.dob.toString()),jt(29,o.version.toString()),O(0,r.ts),O(1,0),O(35,Nt),navigator&&(jt(9,navigator.language),O(33,navigator.hardwareConcurrency),O(32,navigator.maxTouchPoints),O(34,Math.round(navigator.deviceMemory)),(e=navigator.userAgentData)&&e.getHighEntropyValues?e.getHighEntropyValues(["model","platform","platformVersion","uaFullVersion"]).then((function(t){var n;jt(22,t.platform),jt(23,t.platformVersion),null===(n=t.brands)||void 0===n||n.forEach((function(t){jt(24,t.name+"~"+t.version)})),jt(25,t.model),O(27,t.mobile?1:0)})):jt(22,navigator.platform)),screen&&(O(14,Math.round(screen.width)),O(15,Math.round(screen.height)),O(16,Math.round(screen.colorDepth)));for(var c=0,i=a.cookies;c<i.length;c++){var s=i[c],l=Yt(s);l&&B(s,l)}Wt(o)}function Dt(){Rt=null,qt=null}function Ht(t,n){void 0===n&&(n=!0);var e=a.lean?0:1;qt&&(e||!1===n)?t(qt,!a.lean):At.push({callback:t,wait:n})}function Ut(){return qt?[qt.userId,qt.sessionId,qt.pageNum].join("."):""}function Vt(t){if(void 0===t&&(t=!0),!t)return a.track=!1,Kt("_clsk","",-Number.MAX_VALUE),Kt("_clck","",-Number.MAX_VALUE),Vn(),void window.setTimeout(Un,250);On()&&(a.track=!0,Wt(Gt(),1))}function Lt(){Kt("_clsk","",0)}function Bt(){var t=Math.round(Date.now()),n=a.upload&&"string"==typeof a.upload?a.upload.replace("https://",""):"",e=a.lean?0:1;!function(t){At.length>0&&At.forEach((function(n){!n.callback||n.wait&&!t||n.callback(qt,!a.lean)}))}(e),Kt("_clsk",[qt.sessionId,t,qt.pageNum,e,n].join("|"),1)}function Xt(t,n){try{return!!t[n]}catch(t){return!1}}function Wt(t,n){void 0===n&&(n=null),n=null===n?t.consent:n;var e=Math.ceil((Date.now()+31536e6)/864e5),r=0===t.dob?null===a.dob?0:a.dob:t.dob;(null===t.expiry||Math.abs(e-t.expiry)>=1||t.consent!==n||t.dob!==r)&&Kt("_clck",[qt.userId,2,e.toString(36),n,r].join("|"),365)}function Jt(){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 Zt(t,n){return void 0===n&&(n=10),parseInt(t,n)}function Gt(){var t={id:Jt(),version:0,expiry:null,consent:0,dob:0},n=Yt("_clck");if(n&&n.length>0){for(var e=n.split("|"),r=0,o=0,u=document.cookie.split(";");o<u.length;o++){r+="_clck"===u[o].split("=")[0].trim()?1:0}if(1===e.length||r>1){var c="".concat(";").concat("expires=").concat(new Date(0).toUTCString()).concat(";path=/");document.cookie="".concat("_clck","=").concat(c),document.cookie="".concat("_clsk","=").concat(c)}e.length>1&&(t.version=Zt(e[1])),e.length>2&&(t.expiry=Zt(e[2],36)),e.length>3&&1===Zt(e[3])&&(t.consent=1),e.length>4&&Zt(e[1])>1&&(t.dob=Zt(e[4])),a.track=a.track||1===t.consent,t.id=a.track?e[0]:t.id}return t}function Yt(t){var n;if(Xt(document,"cookie")){var e=document.cookie.split(";");if(e)for(var r=0;r<e.length;r++){var o=e[r].split("=");if(o.length>1&&o[0]&&o[0].trim()===t){for(var a=Ft(o[1]),u=a[0],c=a[1];u;)u=(n=Ft(c))[0],c=n[1];return c}}}return null}function Ft(t){try{var n=decodeURIComponent(t);return[n!=t,n]}catch(t){}return[!1,t]}function Kt(t,n,e){if((a.track||""==n)&&(navigator&&navigator.cookieEnabled||Xt(document,"cookie"))){var r=function(t){return encodeURIComponent(t)}(n),o=new Date;o.setDate(o.getDate()+e);var u=o?"expires="+o.toUTCString():"",c="".concat(t,"=").concat(r).concat(";").concat(u).concat(";path=/");try{if(null===Rt){for(var i=location.hostname?location.hostname.split("."):[],s=i.length-1;s>=0;s--)if(Rt=".".concat(i[s]).concat(Rt||""),s<i.length-1&&(document.cookie="".concat(c).concat(";").concat("domain=").concat(Rt),Yt(t)===n))return;Rt=""}}catch(t){Rt=""}document.cookie=Rt?"".concat(c).concat(";").concat("domain=").concat(Rt):c}}var Qt,$t=null;function tn(){var t=qt;$t={version:s,sequence:0,start:0,duration:0,projectId:t.projectId,userId:t.userId,sessionId:t.sessionId,pageNum:t.pageNum,upload:0,end:0}}function nn(){$t=null}function en(t){return $t.start=$t.start+$t.duration,$t.duration=i()-$t.start,$t.sequence++,$t.upload=t&&"sendBeacon"in navigator?1:0,$t.end=t?1:0,[$t.version,$t.sequence,$t.start,$t.duration,$t.projectId,$t.userId,$t.sessionId,$t.pageNum,$t.upload,$t.end]}function rn(){Qt=[]}function on(t){if(Qt&&-1===Qt.indexOf(t.message)){var n=a.report;if(n&&n.length>0){var e={v:$t.version,p:$t.projectId,u:$t.userId,s:$t.sessionId,n:$t.pageNum};t.message&&(e.m=t.message),t.stack&&(e.e=t.stack);var r=new XMLHttpRequest;r.open("POST",n,!0),r.send(JSON.stringify(e)),Qt.push(t.message)}}return t}function an(t){return function(){var n=performance.now();try{t.apply(this,arguments)}catch(t){throw on(t)}var e=performance.now()-n;x(4,e),e>30&&(M(7),O(6,e))}}var un=[];function cn(t,n,e,r){void 0===r&&(r=!1),e=an(e);try{t[u("addEventListener")](n,e,r),un.push({event:n,target:t,listener:e,capture:r})}catch(t){}}function sn(){for(var t=0,n=un;t<n.length;t++){var e=n[t];try{e.target[u("removeEventListener")](e.event,e.listener,e.capture)}catch(t){}}un=[]}var ln=null,dn=null,pn=null,fn=0;function hn(){return!(fn++>20)}function vn(){fn=0,pn!==mn()&&(Vn(),window.setTimeout(gn,250))}function gn(){Un(),O(29,1)}function mn(){return location.href?location.href.replace(location.hash,""):location.href}var yn=[],bn=null,wn=null,kn=null;function _n(){wn&&(kn(),wn=null,null===bn&&En())}function Sn(){yn=[],bn=null,wn=null}function En(){var t=yn.shift();t&&(bn=t,t.task().then((function(){t.id===Ut()&&(t.resolve(),bn=null,En())})).catch((function(n){t.id===Ut()&&(n&&(n.name,n.message,n.stack),bn=null,En())})))}var In=!1;function Mn(){In=!0,c=performance.now(),Sn(),sn(),rn(),pn=mn(),fn=0,cn(window,"popstate",vn),null===ln&&(ln=history.pushState,history.pushState=function(){ln.apply(this,arguments),On()&&hn()&&vn()}),null===dn&&(dn=history.replaceState,history.replaceState=function(){dn.apply(this,arguments),On()&&hn()&&vn()})}function xn(){pn=null,fn=0,rn(),sn(),Sn(),c=0,In=!1}function On(){return In}function Tn(t){if(null===t||In)return!1;for(var n in t)n in a&&(a[n]=t[n]);return!0}function jn(){Un(),_("clarity","restart")}var zn,Cn=null;function qn(){Cn=null}function An(t){Cn={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){U(this,void 0,void 0,(function(){var n,e;return V(this,(function(r){return n=i(),e=[n,t],29===t&&(e.push(Cn.fetchStart),e.push(Cn.connectStart),e.push(Cn.connectEnd),e.push(Cn.requestStart),e.push(Cn.responseStart),e.push(Cn.responseEnd),e.push(Cn.domInteractive),e.push(Cn.domComplete),e.push(Cn.loadEventStart),e.push(Cn.loadEventEnd),e.push(Cn.redirectCount),e.push(Cn.size),e.push(Cn.type),e.push(Cn.protocol),e.push(Cn.encodedSize),e.push(Cn.decodedSize),qn(),ht(e)),[2]}))}))}(29)}var Nn=["navigation","resource","longtask","first-input","layout-shift","largest-contentful-paint"];function Rn(){try{zn&&zn.disconnect(),zn=new PerformanceObserver(an(Pn));for(var t=0,n=Nn;t<n.length;t++){var e=n[t];PerformanceObserver.supportedEntryTypes.indexOf(e)>=0&&("layout-shift"===e&&x(9,0),zn.observe({type:e,buffered:!0}))}}catch(t){}}function Pn(t){!function(t){for(var n=(!("visibilityState"in document)||"visible"===document.visibilityState),e=0;e<t.length;e++){var r=t[e];switch(r.entryType){case"navigation":An(r);break;case"resource":var o=r.name;jt(4,Dn(o)),o!==a.upload&&o!==a.fallback||O(28,r.duration);break;case"longtask":M(7);break;case"first-input":n&&O(10,r.processingStart-r.startTime);break;case"layout-shift":n&&!r.hadRecentInput&&x(9,1e3*r.value);break;case"largest-contentful-paint":n&&O(8,r.startTime)}}}(t.getEntries())}function Dn(t){var n=document.createElement("a");return n.href=t,n.host}var Hn=[w,w,w,Object.freeze({__proto__:null,start:function(){qn(),function(){navigator&&"connection"in navigator&&jt(27,navigator.connection.effectiveType),window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes&&("complete"!==document.readyState?cn(window,"load",T.bind(this,Rn,0)):Rn())}()},stop:function(){zn&&zn.disconnect(),zn=null,qn()}})];function Un(t){void 0===t&&(t=null),function(){try{var t=navigator&&"globalPrivacyControl"in navigator&&1==navigator.globalPrivacyControl;return!1===In&&"undefined"!=typeof Promise&&window.MutationObserver&&document.createTreeWalker&&"now"in Date&&"now"in performance&&"undefined"!=typeof WeakMap&&!t}catch(t){return!1}}()&&(Tn(t),Mn(),tt(),Hn.forEach((function(t){return an(t.start)()})),null===t&&Wn())}function Vn(){On()&&(Hn.slice().reverse().forEach((function(t){return an(t.stop)()})),nt(),xn(),void 0!==Bn&&(Bn[Xn]=function(){(Bn[Xn].q=Bn[Xn].q||[]).push(arguments),"start"===arguments[0]&&Bn[Xn].q.unshift(Bn[Xn].q.pop())&&Wn()}))}var Ln=Object.freeze({__proto__:null,consent:Vt,event:_,hashText:y,identify:X,metadata:Ht,pause:function(){On()&&(_("clarity","pause"),null===wn&&(wn=new Promise((function(t){kn=t}))))},resume:function(){On()&&(_n(),_("clarity","resume"))},set:B,start:Un,stop:Vn,upgrade:D,version:s}),Bn=window,Xn="clarity";function Wn(){if(void 0!==Bn){if(Bn[Xn]&&Bn[Xn].v)return console.warn("Error CL001: Multiple Clarity tags detected.");var t=Bn[Xn]&&Bn[Xn].q||[];for(Bn[Xn]=function(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];return Ln[t].apply(Ln,n)},Bn[Xn].v=s;t.length>0;)Bn[Xn].apply(Bn,t.shift())}}Wn()}();
1
+ !function(){"use strict";var t=Object.freeze({__proto__:null,get queue(){return gt},get start(){return vt},get stop(){return mt},get track(){return st}}),n=Object.freeze({__proto__:null,get check(){return Et},get compute(){return Mt},get data(){return lt},get start(){return St},get stop(){return Ot},get trigger(){return It}}),e=Object.freeze({__proto__:null,get compute(){return qt},get data(){return xt},get log(){return Ct},get reset(){return At},get start(){return jt},get stop(){return zt},get updates(){return Tt}}),r=Object.freeze({__proto__:null,get callbacks(){return Rt},get clear(){return Xt},get consent(){return Bt},get data(){return Nt},get electron(){return Pt},get id(){return Vt},get metadata(){return Lt},get save(){return Jt},get shortid(){return Zt},get start(){return Ht},get stop(){return Ut}}),o=Object.freeze({__proto__:null,get data(){return nn},get envelope(){return on},get start(){return en},get stop(){return rn}}),a={projectId:null,delay:1e3,lean:!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};function u(t){return window.Zone&&"__symbol__"in window.Zone?window.Zone.__symbol__(t):t}var c=0;function i(t){void 0===t&&(t=null);var n=t&&t.timeStamp>0?t.timeStamp:performance.now();return Math.max(Math.round(n-c),0)}var s="0.7.31";var l=!0,d=null,p=null;function f(t,n,e){return function(){if(l&&null===d)try{d=new RegExp("\\p{N}","gu"),p=new RegExp("\\p{L}","gu"),new RegExp("\\p{Sc}","gu")}catch(t){l=!1}}(),t?t.replace(p,n).replace(d,e):t}var h=[],v=null;function g(){}var m=[];function y(){}function b(){}var w=Object.freeze({__proto__:null,checkDocumentStyles:function(t){},compute:function(){},data:v,hashText:y,keys:m,log:g,observe:function(){},reset:function(){},start:function(){},state:h,stop:function(){},trigger:b}),k=null;function _(t,n){jn()&&t&&"string"==typeof t&&t.length<255&&(k=n&&"string"==typeof n&&n.length<255?{key:t,value:n}:{value:t},_t(24))}var S,E=null,I=null;function M(t){t in E||(E[t]=0),t in I||(I[t]=0),E[t]++,I[t]++}function O(t,n){null!==n&&(t in E||(E[t]=0),t in I||(I[t]=0),E[t]+=n,I[t]+=n)}function x(t,n){null!==n&&!1===isNaN(n)&&(t in E||(E[t]=0),(n>E[t]||0===E[t])&&(I[t]=n,E[t]=n))}function T(t,n,e){return window.setTimeout(cn(t),n,e)}function j(t){return window.clearTimeout(t)}var z=0,C=0,q=null;function A(){q&&j(q),q=T(N,C),z=i()}function N(){var t=i();S={gap:t-z},_t(25),S.gap<3e5?q=T(N,C):On&&(_("clarity","suspend"),Bn(),["mousemove","touchstart"].forEach((function(t){return ln(document,t,Cn)})),["resize","scroll","pageshow"].forEach((function(t){return ln(window,t,Cn)})))}var R=Object.freeze({__proto__:null,get data(){return S},reset:A,start:function(){C=6e4,z=0},stop:function(){j(q),z=0,C=0}}),P=null;function D(t){jn()&&a.lean&&(a.lean=!1,P={key:t},Jt(),a.upgrade&&a.upgrade(t),_t(3))}var H=Object.freeze({__proto__:null,get data(){return P},start:function(){!a.lean&&a.upgrade&&a.upgrade("Config"),P=null},stop:function(){P=null},upgrade:D});function U(t,n,e,r){return new(e||(e=Promise))((function(o,a){function u(t){try{i(r.next(t))}catch(t){a(t)}}function c(t){try{i(r.throw(t))}catch(t){a(t)}}function i(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(u,c)}i((r=r.apply(t,n||[])).next())}))}function L(t,n){var e,r,o,a,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(i){return function(c){if(e)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(u=0)),u;)try{if(e=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return u.label++,{value:c[1],done:!1};case 5:u.label++,r=c[1],c=[0];continue;case 7:c=u.ops.pop(),u.trys.pop();continue;default:if(!(o=u.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){u=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){u.label=c[1];break}if(6===c[0]&&u.label<o[1]){u.label=o[1],o=c;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(c);break}o[2]&&u.ops.pop(),u.trys.pop();continue}c=n.call(t,u)}catch(t){c=[6,t],r=0}finally{e=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,i])}}}var V=null;function B(t,n){J(t,"string"==typeof n?[n]:n)}function X(t,n,e,r){return void 0===n&&(n=null),void 0===e&&(e=null),void 0===r&&(r=null),U(this,void 0,void 0,(function(){var o,a;return L(this,(function(u){switch(u.label){case 0:return a={},[4,Z(t)];case 1:return a.userId=u.sent(),a.userHint=r||((c=t)&&c.length>=5?"".concat(c.substring(0,2)).concat(f(c.substring(2),"*","*")):f(c,"*","*")),J("userId",[(o=a).userId]),J("userHint",[o.userHint]),J("userType",[Y(t)]),n&&(J("sessionId",[n]),o.sessionId=n),e&&(J("pageId",[e]),o.pageId=e),[2,o]}var c}))}))}function J(t,n){if(jn()&&t&&n&&"string"==typeof t&&t.length<255){for(var e=(t in V?V[t]:[]),r=0;r<n.length;r++)"string"==typeof n[r]&&n[r].length<255&&e.push(n[r]);V[t]=e}}function W(){_t(34)}function G(){V={}}function Z(t){return U(this,void 0,void 0,(function(){var n;return L(this,(function(e){switch(e.label){case 0:return e.trys.push([0,4,,5]),crypto&&t?[4,crypto.subtle.digest("SHA-256",(new TextEncoder).encode(t))]:[3,2];case 1:return n=e.sent(),[2,Array.prototype.map.call(new Uint8Array(n),(function(t){return("00"+t.toString(16)).slice(-2)})).join("")];case 2:return[2,""];case 3:return[3,5];case 4:return e.sent(),[2,""];case 5:return[2]}}))}))}function Y(t){return t&&t.indexOf("@")>0?"email":"string"}var F="CompressionStream"in window;function K(t){return U(this,void 0,void 0,(function(){var n,e;return L(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),F?(n=new ReadableStream({start:function(n){return U(this,void 0,void 0,(function(){return L(this,(function(e){return n.enqueue(t),n.close(),[2]}))}))}}).pipeThrough(new TextEncoderStream).pipeThrough(new window.CompressionStream("gzip")),e=Uint8Array.bind,[4,Q(n)]):[3,2];case 1:return[2,new(e.apply(Uint8Array,[void 0,r.sent()]))];case 2:return[3,4];case 3:return r.sent(),[3,4];case 4:return[2,null]}}))}))}function Q(t){return U(this,void 0,void 0,(function(){var n,e,r,o,a;return L(this,(function(u){switch(u.label){case 0:n=t.getReader(),e=[],r=!1,o=[],u.label=1;case 1:return r?[3,3]:[4,n.read()];case 2:return a=u.sent(),r=a.done,o=a.value,r?[2,e]:(e.push.apply(e,o),[3,1]);case 3:return[2,e]}}))}))}var $=null;function tt(t){try{if(!$)return;var n=function(t){try{return JSON.parse(t)}catch(t){return[]}}(t);n.forEach((function(t){$(t)}))}catch(t){}}var nt=[w,e,Object.freeze({__proto__:null,compute:W,get data(){return V},identify:X,reset:G,set:B,start:function(){G()},stop:function(){G()}}),n,w,r,o,t,R,H,w];function et(){E={},I={},M(5),nt.forEach((function(t){return cn(t.start)()}))}function rt(){nt.slice().reverse().forEach((function(t){return cn(t.stop)()})),E={},I={}}function ot(){W(),qt(),_t(0),Mt()}var at,ut,ct,it,st,lt,dt=0,pt=0,ft=null,ht=0;function vt(){it=!0,dt=0,pt=0,ht=0,at=[],ut=[],ct={},st=null}function gt(t,n){if(void 0===n&&(n=!0),it){var e=i(),r=t.length>1?t[1]:null,o=JSON.stringify(t);switch(r){case 5:dt+=o.length;case 37:case 6:case 43:case 45:case 46:pt+=o.length,at.push(o);break;default:ut.push(o)}M(25);var u=function(){var t=!1===a.lean&&dt>0?100:nn.sequence*a.delay;return"string"==typeof a.upload?Math.max(Math.min(t,3e4),100):a.delay}();e-ht>2*u&&(j(ft),ft=null),n&&null===ft&&(25!==r&&A(),ft=T(yt,u),ht=e,Et(pt))}}function mt(){j(ft),yt(!0),dt=0,pt=0,ht=0,at=[],ut=[],ct={},st=null,it=!1}function yt(t){return void 0===t&&(t=!1),U(this,void 0,void 0,(function(){var n,e,r,o,u,c,i,s;return L(this,(function(l){switch(l.label){case 0:return ft=null,(n=!1===a.lean&&pt>0&&(pt<1048576||nn.sequence>0))&&x(1,1),ot(),e=!0===t,r=JSON.stringify(on(e)),o="[".concat(ut.join(),"]"),u=n?"[".concat(at.join(),"]"):"",c=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:o,p:u}),e?(s=null,[3,3]):[3,1];case 1:return[4,K(c)];case 2:s=l.sent(),l.label=3;case 3:return O(2,(i=s)?i.length:c.length),bt(c,i,nn.sequence,e),ut=[],n&&(at=[],pt=0,dt=0),[2]}}))}))}function bt(t,n,e,r){if(void 0===r&&(r=!1),"string"==typeof a.upload){var o=a.upload,u=!1;if(r&&"sendBeacon"in navigator)try{(u=navigator.sendBeacon.bind(navigator)(o,t))&&kt(e)}catch(t){}if(!1===u){e in ct?ct[e].attempts++:ct[e]={data:t,attempts:1};var c=new XMLHttpRequest;c.open("POST",o,!0),c.timeout=15e3,c.ontimeout=function(){un(new Error("".concat("Timeout"," : ").concat(o)))},null!==e&&(c.onreadystatechange=function(){cn(wt)(c,e)}),c.withCredentials=!0,n?(c.setRequestHeader("Accept","application/x-clarity-gzip"),c.send(n)):c.send(t)}}else if(a.upload){(0,a.upload)(t),kt(e)}}function wt(t,n){var e=ct[n];t&&4===t.readyState&&e&&((t.status<200||t.status>208)&&e.attempts<=1?t.status>=400&&t.status<500?It(6):(0===t.status&&(a.upload=a.fallback?a.fallback:a.upload),bt(e.data,null,n)):(st={sequence:n,attempts:e.attempts,status:t.status},e.attempts>1&&_t(2),200===t.status&&t.responseText&&function(t){for(var n=t&&t.length>0?t.split("\n"):[],e=0,r=n;e<r.length;e++){var o=r[e],u=o&&o.length>0?o.split(/ (.*)/):[""];switch(u[0]){case"END":It(6);break;case"UPGRADE":D("Auto");break;case"ACTION":a.action&&u.length>1&&a.action(u[1]);break;case"EXTRACT":u.length>1&&u[1];break;case"SIGNAL":u.length>1&&tt(u[1])}}}(t.responseText),0===t.status&&(bt(e.data,null,n,!0),It(3)),t.status>=200&&t.status<=208&&kt(n),delete ct[n]))}function kt(t){1===t&&Jt()}function _t(t){var n=[i(),t];switch(t){case 4:var e=h;e&&((n=[e.time,e.event]).push(e.data.visible),n.push(e.data.docWidth),n.push(e.data.docHeight),n.push(e.data.screenWidth),n.push(e.data.screenHeight),n.push(e.data.scrollX),n.push(e.data.scrollY),n.push(e.data.pointerX),n.push(e.data.pointerY),n.push(e.data.activityTime),n.push(e.data.scrollTime),gt(n,!1));break;case 25:n.push(S.gap),gt(n);break;case 35:n.push(lt.check),gt(n,!1);break;case 3:n.push(P.key),gt(n);break;case 2:n.push(st.sequence),n.push(st.attempts),n.push(st.status),gt(n,!1);break;case 24:k.key&&n.push(k.key),n.push(k.value),gt(n);break;case 34:var r=Object.keys(V);if(r.length>0){for(var o=0,a=r;o<a.length;o++){var u=a[o];n.push(u),n.push(V[u])}G(),gt(n,!1)}break;case 0:var c=Object.keys(I);if(c.length>0){for(var s=0,l=c;s<l.length;s++){var d=l[s],p=parseInt(d,10);n.push(p),n.push(Math.round(I[d]))}I={},gt(n,!1)}break;case 1:var f=Object.keys(Tt);if(f.length>0){for(var g=0,y=f;g<y.length;g++){var b=y[g];p=parseInt(b,10);n.push(p),n.push(Tt[b])}At(),gt(n,!1)}break;case 36:var w=Object.keys(v);if(w.length>0){for(var _=0,E=w;_<E.length;_++){var M=E[_];p=parseInt(M,10);n.push(p),n.push([].concat.apply([],v[M]))}gt(n,!1)}break;case 40:m.forEach((function(t){n.push(t);var e=[];for(var r in v[t]){var o=parseInt(r,10);e.push(o),e.push(v[t][r])}n.push(e)})),gt(n,!1)}}function St(){lt={check:0}}function Et(t){if(0===lt.check){var n=lt.check;n=nn.sequence>=128?1:n,n=nn.pageNum>=128?7:n,n=i()>72e5?2:n,(n=t>10485760?2:n)!==lt.check&&It(n)}}function It(t){lt.check=t,Xt(),Bn()}function Mt(){0!==lt.check&&_t(35)}function Ot(){lt=null}var xt=null,Tt=null;function jt(){xt={},Tt={}}function zt(){xt={},Tt={}}function Ct(t,n){n&&(n="".concat(n),t in xt||(xt[t]=[]),xt[t].indexOf(n)<0&&(xt[t].push(n),t in Tt||(Tt[t]=[]),Tt[t].push(n),xt[t].length>128&&It(5)))}function qt(){_t(1)}function At(){Tt={}}var Nt=null,Rt=[],Pt=0,Dt=null;function Ht(){Dt=null;var t=navigator&&"userAgent"in navigator?navigator.userAgent:"",n=document&&document.title?document.title:"";Pt=t.indexOf("Electron")>0?1:0;var e,r=function(){var t={session:Zt(),ts:Math.round(Date.now()),count:1,upgrade:null,upload:""},n=Kt("_clsk");if(n){var e=n.split("|");e.length>=5&&t.ts-Yt(e[1])<18e5&&(t.session=e[0],t.count=Yt(e[2])+1,t.upgrade=Yt(e[3]),t.upload=e.length>=6?"".concat("https://").concat(e[5],"/").concat(e[4]):"".concat("https://").concat(e[4]))}return t}(),o=Ft(),u=a.projectId||function(t,n){void 0===n&&(n=null);for(var e,r=5381,o=r,a=0;a<t.length;a+=2)r=(r<<5)+r^t.charCodeAt(a),a+1<t.length&&(o=(o<<5)+o^t.charCodeAt(a+1));return e=Math.abs(r+11579*o),(n?e%Math.pow(2,n):e).toString(36)}(location.host);Nt={projectId:u,userId:o.id,sessionId:r.session,pageNum:r.count},a.lean=a.track&&null!==r.upgrade?0===r.upgrade:a.lean,a.upload=a.track&&"string"==typeof a.upload&&r.upload&&r.upload.length>"https://".length?r.upload:a.upload,Ct(0,t),Ct(3,n),Ct(1,function(t,n){if(void 0===n&&(n=!1),n)return"".concat("https://").concat("Electron");var e=a.drop;if(e&&e.length>0&&t&&t.indexOf("?")>0){var r=t.split("?");return r[0]+"?"+r[1].split("&").map((function(t){return e.some((function(n){return 0===t.indexOf("".concat(n,"="))}))?"".concat(t.split("=")[0],"=").concat("*na*"):t})).join("&")}return t}(location.href,!!Pt)),Ct(2,document.referrer),Ct(15,function(){var t=Zt();if(a.track&&Wt(window,"sessionStorage")){var n=sessionStorage.getItem("_cltk");t=n||t,sessionStorage.setItem("_cltk",t)}return t}()),Ct(16,document.documentElement.lang),Ct(17,document.dir),Ct(26,"".concat(window.devicePixelRatio)),Ct(28,o.dob.toString()),Ct(29,o.version.toString()),x(0,r.ts),x(1,0),x(35,Pt),navigator&&(Ct(9,navigator.language),x(33,navigator.hardwareConcurrency),x(32,navigator.maxTouchPoints),x(34,Math.round(navigator.deviceMemory)),(e=navigator.userAgentData)&&e.getHighEntropyValues?e.getHighEntropyValues(["model","platform","platformVersion","uaFullVersion"]).then((function(t){var n;Ct(22,t.platform),Ct(23,t.platformVersion),null===(n=t.brands)||void 0===n||n.forEach((function(t){Ct(24,t.name+"~"+t.version)})),Ct(25,t.model),x(27,t.mobile?1:0)})):Ct(22,navigator.platform)),screen&&(x(14,Math.round(screen.width)),x(15,Math.round(screen.height)),x(16,Math.round(screen.colorDepth)));for(var c=0,i=a.cookies;c<i.length;c++){var s=i[c],l=Kt(s);l&&B(s,l)}Gt(o)}function Ut(){Dt=null,Nt=null}function Lt(t,n){void 0===n&&(n=!0);var e=a.lean?0:1;Nt&&(e||!1===n)?t(Nt,!a.lean):Rt.push({callback:t,wait:n})}function Vt(){return Nt?[Nt.userId,Nt.sessionId,Nt.pageNum].join("."):""}function Bt(t){if(void 0===t&&(t=!0),!t)return a.track=!1,$t("_clsk","",-Number.MAX_VALUE),$t("_clck","",-Number.MAX_VALUE),Bn(),void window.setTimeout(Vn,250);jn()&&(a.track=!0,Gt(Ft(),1))}function Xt(){$t("_clsk","",0)}function Jt(){var t=Math.round(Date.now()),n=a.upload&&"string"==typeof a.upload?a.upload.replace("https://",""):"",e=a.lean?0:1;!function(t){Rt.length>0&&Rt.forEach((function(n){!n.callback||n.wait&&!t||n.callback(Nt,!a.lean)}))}(e),$t("_clsk",[Nt.sessionId,t,Nt.pageNum,e,n].join("|"),1)}function Wt(t,n){try{return!!t[n]}catch(t){return!1}}function Gt(t,n){void 0===n&&(n=null),n=null===n?t.consent:n;var e=Math.ceil((Date.now()+31536e6)/864e5),r=0===t.dob?null===a.dob?0:a.dob:t.dob;(null===t.expiry||Math.abs(e-t.expiry)>=1||t.consent!==n||t.dob!==r)&&$t("_clck",[Nt.userId,2,e.toString(36),n,r].join("|"),365)}function Zt(){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 Yt(t,n){return void 0===n&&(n=10),parseInt(t,n)}function Ft(){var t={id:Zt(),version:0,expiry:null,consent:0,dob:0},n=Kt("_clck");if(n&&n.length>0){for(var e=n.split("|"),r=0,o=0,u=document.cookie.split(";");o<u.length;o++){r+="_clck"===u[o].split("=")[0].trim()?1:0}if(1===e.length||r>1){var c="".concat(";").concat("expires=").concat(new Date(0).toUTCString()).concat(";path=/");document.cookie="".concat("_clck","=").concat(c),document.cookie="".concat("_clsk","=").concat(c)}e.length>1&&(t.version=Yt(e[1])),e.length>2&&(t.expiry=Yt(e[2],36)),e.length>3&&1===Yt(e[3])&&(t.consent=1),e.length>4&&Yt(e[1])>1&&(t.dob=Yt(e[4])),a.track=a.track||1===t.consent,t.id=a.track?e[0]:t.id}return t}function Kt(t){var n;if(Wt(document,"cookie")){var e=document.cookie.split(";");if(e)for(var r=0;r<e.length;r++){var o=e[r].split("=");if(o.length>1&&o[0]&&o[0].trim()===t){for(var a=Qt(o[1]),u=a[0],c=a[1];u;)u=(n=Qt(c))[0],c=n[1];return c}}}return null}function Qt(t){try{var n=decodeURIComponent(t);return[n!=t,n]}catch(t){}return[!1,t]}function $t(t,n,e){if((a.track||""==n)&&(navigator&&navigator.cookieEnabled||Wt(document,"cookie"))){var r=function(t){return encodeURIComponent(t)}(n),o=new Date;o.setDate(o.getDate()+e);var u=o?"expires="+o.toUTCString():"",c="".concat(t,"=").concat(r).concat(";").concat(u).concat(";path=/");try{if(null===Dt){for(var i=location.hostname?location.hostname.split("."):[],s=i.length-1;s>=0;s--)if(Dt=".".concat(i[s]).concat(Dt||""),s<i.length-1&&(document.cookie="".concat(c).concat(";").concat("domain=").concat(Dt),Kt(t)===n))return;Dt=""}}catch(t){Dt=""}document.cookie=Dt?"".concat(c).concat(";").concat("domain=").concat(Dt):c}}var tn,nn=null;function en(){var t=Nt;nn={version:s,sequence:0,start:0,duration:0,projectId:t.projectId,userId:t.userId,sessionId:t.sessionId,pageNum:t.pageNum,upload:0,end:0}}function rn(){nn=null}function on(t){return nn.start=nn.start+nn.duration,nn.duration=i()-nn.start,nn.sequence++,nn.upload=t&&"sendBeacon"in navigator?1:0,nn.end=t?1:0,[nn.version,nn.sequence,nn.start,nn.duration,nn.projectId,nn.userId,nn.sessionId,nn.pageNum,nn.upload,nn.end]}function an(){tn=[]}function un(t){if(tn&&-1===tn.indexOf(t.message)){var n=a.report;if(n&&n.length>0){var e={v:nn.version,p:nn.projectId,u:nn.userId,s:nn.sessionId,n:nn.pageNum};t.message&&(e.m=t.message),t.stack&&(e.e=t.stack);var r=new XMLHttpRequest;r.open("POST",n,!0),r.send(JSON.stringify(e)),tn.push(t.message)}}return t}function cn(t){return function(){var n=performance.now();try{t.apply(this,arguments)}catch(t){throw un(t)}var e=performance.now()-n;O(4,e),e>30&&(M(7),x(6,e))}}var sn=[];function ln(t,n,e,r){void 0===r&&(r=!1),e=cn(e);try{t[u("addEventListener")](n,e,r),sn.push({event:n,target:t,listener:e,capture:r})}catch(t){}}function dn(){for(var t=0,n=sn;t<n.length;t++){var e=n[t];try{e.target[u("removeEventListener")](e.event,e.listener,e.capture)}catch(t){}}sn=[]}var pn=null,fn=null,hn=null,vn=0;function gn(){return!(vn++>20)}function mn(){vn=0,hn!==bn()&&(Bn(),window.setTimeout(yn,250))}function yn(){Vn(),x(29,1)}function bn(){return location.href?location.href.replace(location.hash,""):location.href}var wn=[],kn=null,_n=null,Sn=null;function En(){_n&&(Sn(),_n=null,null===kn&&Mn())}function In(){wn=[],kn=null,_n=null}function Mn(){var t=wn.shift();t&&(kn=t,t.task().then((function(){t.id===Vt()&&(t.resolve(),kn=null,Mn())})).catch((function(n){t.id===Vt()&&(n&&(n.name,n.message,n.stack),kn=null,Mn())})))}var On=!1;function xn(){On=!0,c=performance.now(),In(),dn(),an(),hn=bn(),vn=0,ln(window,"popstate",mn),null===pn&&(pn=history.pushState,history.pushState=function(){pn.apply(this,arguments),jn()&&gn()&&mn()}),null===fn&&(fn=history.replaceState,history.replaceState=function(){fn.apply(this,arguments),jn()&&gn()&&mn()})}function Tn(){hn=null,vn=0,an(),dn(),In(),c=0,On=!1}function jn(){return On}function zn(t){if(null===t||On)return!1;for(var n in t)n in a&&(a[n]=t[n]);return!0}function Cn(){Vn(),_("clarity","restart")}var qn,An=null;function Nn(){An=null}function Rn(t){An={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){U(this,void 0,void 0,(function(){var n,e;return L(this,(function(r){return n=i(),e=[n,t],29===t&&(e.push(An.fetchStart),e.push(An.connectStart),e.push(An.connectEnd),e.push(An.requestStart),e.push(An.responseStart),e.push(An.responseEnd),e.push(An.domInteractive),e.push(An.domComplete),e.push(An.loadEventStart),e.push(An.loadEventEnd),e.push(An.redirectCount),e.push(An.size),e.push(An.type),e.push(An.protocol),e.push(An.encodedSize),e.push(An.decodedSize),Nn(),gt(e)),[2]}))}))}(29)}var Pn=["navigation","resource","longtask","first-input","layout-shift","largest-contentful-paint"];function Dn(){try{qn&&qn.disconnect(),qn=new PerformanceObserver(cn(Hn));for(var t=0,n=Pn;t<n.length;t++){var e=n[t];PerformanceObserver.supportedEntryTypes.indexOf(e)>=0&&("layout-shift"===e&&O(9,0),qn.observe({type:e,buffered:!0}))}}catch(t){}}function Hn(t){!function(t){for(var n=(!("visibilityState"in document)||"visible"===document.visibilityState),e=0;e<t.length;e++){var r=t[e];switch(r.entryType){case"navigation":Rn(r);break;case"resource":var o=r.name;Ct(4,Un(o)),o!==a.upload&&o!==a.fallback||x(28,r.duration);break;case"longtask":M(7);break;case"first-input":n&&x(10,r.processingStart-r.startTime);break;case"layout-shift":n&&!r.hadRecentInput&&O(9,1e3*r.value);break;case"largest-contentful-paint":n&&x(8,r.startTime)}}}(t.getEntries())}function Un(t){var n=document.createElement("a");return n.href=t,n.host}var Ln=[w,w,w,Object.freeze({__proto__:null,start:function(){Nn(),function(){navigator&&"connection"in navigator&&Ct(27,navigator.connection.effectiveType),window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes&&("complete"!==document.readyState?ln(window,"load",T.bind(this,Dn,0)):Dn())}()},stop:function(){qn&&qn.disconnect(),qn=null,Nn()}})];function Vn(t){void 0===t&&(t=null),function(){try{var t=navigator&&"globalPrivacyControl"in navigator&&1==navigator.globalPrivacyControl;return!1===On&&"undefined"!=typeof Promise&&window.MutationObserver&&document.createTreeWalker&&"now"in Date&&"now"in performance&&"undefined"!=typeof WeakMap&&!t}catch(t){return!1}}()&&(zn(t),xn(),et(),Ln.forEach((function(t){return cn(t.start)()})),null===t&&Gn())}function Bn(){jn()&&(Ln.slice().reverse().forEach((function(t){return cn(t.stop)()})),rt(),Tn(),void 0!==Jn&&(Jn[Wn]=function(){(Jn[Wn].q=Jn[Wn].q||[]).push(arguments),"start"===arguments[0]&&Jn[Wn].q.unshift(Jn[Wn].q.pop())&&Gn()}))}var Xn=Object.freeze({__proto__:null,consent:Bt,event:_,hashText:y,identify:X,metadata:Lt,pause:function(){jn()&&(_("clarity","pause"),null===_n&&(_n=new Promise((function(t){Sn=t}))))},resume:function(){jn()&&(En(),_("clarity","resume"))},set:B,signal:function(t){$=t},start:Vn,stop:Bn,upgrade:D,version:s}),Jn=window,Wn="clarity";function Gn(){if(void 0!==Jn){if(Jn[Wn]&&Jn[Wn].v)return console.warn("Error CL001: Multiple Clarity tags detected.");var t=Jn[Wn]&&Jn[Wn].q||[];for(Jn[Wn]=function(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];return Xn[t].apply(Xn,n)},Jn[Wn].v=s;t.length>0;)Jn[Wn].apply(Jn,t.shift())}}Gn()}();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clarity-js",
3
- "version": "0.7.27",
3
+ "version": "0.7.31",
4
4
  "description": "An analytics library that uses web page interactions to generate aggregated insights",
5
5
  "author": "Microsoft Corp.",
6
6
  "license": "MIT",
package/src/clarity.ts CHANGED
@@ -11,7 +11,7 @@ import * as interaction from "@src/interaction";
11
11
  import * as layout from "@src/layout";
12
12
  import * as performance from "@src/performance";
13
13
  export { version };
14
- export { consent, event, identify, set, upgrade, metadata } from "@src/data";
14
+ export { consent, event, identify, set, upgrade, metadata, signal } from "@src/data";
15
15
  export { hashText } from "@src/layout";
16
16
 
17
17
  const modules: Module[] = [diagnostic, layout, interaction, performance];
@@ -58,4 +58,4 @@ export function stop(): void {
58
58
  core.stop();
59
59
  queue.setup();
60
60
  }
61
- }
61
+ }
@@ -18,7 +18,8 @@ let config: Config = {
18
18
  fallback: null,
19
19
  upgrade: null,
20
20
  action: null,
21
- dob: null
21
+ dob: null,
22
+ delayDom: false
22
23
  };
23
24
 
24
25
  export default config;
@@ -1,2 +1,2 @@
1
- let version = "0.7.27";
1
+ let version = "0.7.31";
2
2
  export default version;
@@ -26,7 +26,8 @@ export function reset(): void {
26
26
  scrollY: buffer.scrollY,
27
27
  pointerX: buffer.pointerX,
28
28
  pointerY: buffer.pointerY,
29
- activityTime: buffer.activityTime
29
+ activityTime: buffer.activityTime,
30
+ scrollTime: buffer.scrollTime
30
31
  }
31
32
  };
32
33
  }
@@ -40,11 +41,12 @@ export function reset(): void {
40
41
  scrollY: 0,
41
42
  pointerX: 0,
42
43
  pointerY: 0,
43
- activityTime: 0
44
+ activityTime: 0,
45
+ scrollTime: 0
44
46
  };
45
47
  }
46
48
 
47
- export function track(event: Event, x: number, y: number): void {
49
+ export function track(event: Event, x: number, y: number, time?: number): void {
48
50
  switch (event) {
49
51
  case Event.Document:
50
52
  buffer.docWidth = x;
@@ -57,6 +59,7 @@ export function track(event: Event, x: number, y: number): void {
57
59
  case Event.Scroll:
58
60
  buffer.scrollX = x;
59
61
  buffer.scrollY = y;
62
+ buffer.scrollTime = time;
60
63
  break;
61
64
  default:
62
65
  buffer.pointerX = x;
@@ -30,6 +30,7 @@ export default function(event: Event): void {
30
30
  tokens.push(b.data.pointerX);
31
31
  tokens.push(b.data.pointerY);
32
32
  tokens.push(b.data.activityTime);
33
+ tokens.push(b.data.scrollTime);
33
34
  queue(tokens, false);
34
35
  }
35
36
  baseline.reset();
package/src/data/index.ts CHANGED
@@ -16,6 +16,7 @@ export { event } from "@src/data/custom";
16
16
  export { consent, metadata } from "@src/data/metadata";
17
17
  export { upgrade } from "@src/data/upgrade";
18
18
  export { set, identify } from "@src/data/variable";
19
+ export { signal } from "@src/data/signal";
19
20
 
20
21
  const modules: Module[] = [baseline, dimension, variable, limit, summary, metadata, envelope, upload, ping, upgrade, extract];
21
22
 
@@ -0,0 +1,30 @@
1
+ import { ClaritySignal, SignalCallback } from '@clarity-types/data';
2
+
3
+ export let signalCallback: SignalCallback = null;
4
+
5
+ export function signal(cb: SignalCallback): void {
6
+ signalCallback = cb;
7
+ }
8
+
9
+ function parseSignals(signalsPayload: string): ClaritySignal[] {
10
+ try{
11
+ const parsedSignals: ClaritySignal[] = JSON.parse(signalsPayload);
12
+ return parsedSignals;
13
+ }catch{
14
+ return []
15
+ }
16
+ }
17
+
18
+ export function signalsEvent(signalsPayload: string) {
19
+ try {
20
+ if (!signalCallback) {
21
+ return;
22
+ }
23
+ const signals = parseSignals(signalsPayload);
24
+ signals.forEach((signal) => {
25
+ signalCallback(signal);
26
+ });
27
+ } catch {
28
+ //do nothing
29
+ }
30
+ }
@@ -18,6 +18,7 @@ import * as region from "@src/layout/region";
18
18
  import * as extract from "@src/data/extract";
19
19
  import * as style from "@src/layout/style";
20
20
  import { report } from "@src/core/report";
21
+ import { signalsEvent } from "@src/data/signal";
21
22
 
22
23
  let discoverBytes: number = 0;
23
24
  let playbackBytes: number = 0;
@@ -271,6 +272,9 @@ function response(payload: string): void {
271
272
  case Constant.Extract:
272
273
  if (parts.length > 1) { extract.trigger(parts[1]); }
273
274
  break;
275
+ case Constant.Signal:
276
+ if (parts.length > 1) { signalsEvent(parts[1]); }
277
+ break;
274
278
  }
275
279
  }
276
280
  }
@@ -110,3 +110,5 @@ function add(node: Node, parent: Node, data: NodeInfo): void {
110
110
  values.push({ id, parent: parentId, previous, children: [], data, selector: null, hash: null, region: null, metadata });
111
111
  }
112
112
  }
113
+
114
+ export function get(_node: Node): NodeValue {return null;}
@@ -122,8 +122,10 @@ export default async function (type: Event, ts: number = null): Promise<void> {
122
122
  tokens.push(sTarget.id);
123
123
  tokens.push(entry.data.x);
124
124
  tokens.push(entry.data.y);
125
+ tokens.push(entry.data.top);
126
+ tokens.push(entry.data.bottom);
125
127
  queue(tokens);
126
- baseline.track(entry.event, entry.data.x, entry.data.y);
128
+ baseline.track(entry.event, entry.data.x, entry.data.y, entry.time);
127
129
  }
128
130
  }
129
131
  scroll.reset();
@@ -4,7 +4,7 @@ import { bind } from "@src/core/event";
4
4
  import { schedule } from "@src/core/task";
5
5
  import { time } from "@src/core/time";
6
6
  import { clearTimeout, setTimeout } from "@src/core/timeout";
7
- import { iframe } from "@src/layout/dom";
7
+ import { iframe, get } from "@src/layout/dom";
8
8
  import { target } from "@src/layout/target";
9
9
  import encode from "./encode";
10
10
 
@@ -39,7 +39,16 @@ function recompute(event: UIEvent = null): void {
39
39
  // And, if for some reason that is not available, fall back to looking up scrollTop on document.documentElement.
40
40
  let x = element === de && "pageXOffset" in w ? Math.round(w.pageXOffset) : Math.round((element as HTMLElement).scrollLeft);
41
41
  let y = element === de && "pageYOffset" in w ? Math.round(w.pageYOffset) : Math.round((element as HTMLElement).scrollTop);
42
- let current: ScrollState = { time: time(event), event: Event.Scroll, data: {target: element, x, y} };
42
+ const width = window.innerWidth;
43
+ const height = window.innerHeight;
44
+ const xPosition = width / 3;
45
+ const yOffset = width > height ? height * 0.15 : height * 0.2;
46
+ const startYPosition = yOffset;
47
+ const endYPosition = height - yOffset;
48
+ const top = getPositionHash(xPosition, startYPosition);
49
+ const bottom = getPositionHash(xPosition, endYPosition);
50
+
51
+ let current: ScrollState = { time: time(event), event: Event.Scroll, data: {target: element, x, y, top, bottom} };
43
52
 
44
53
  // We don't send any scroll events if this is the first event and the current position is top (0,0)
45
54
  if ((event === null && x === 0 && y === 0) || (x === null || y === null)) { return; }
@@ -53,6 +62,23 @@ function recompute(event: UIEvent = null): void {
53
62
  timeout = setTimeout(process, Setting.LookAhead, Event.Scroll);
54
63
  }
55
64
 
65
+ function getPositionHash(x: number, y: number): string {
66
+ let node: Node;
67
+ if ("caretPositionFromPoint" in document) {
68
+ node = (document as any).caretPositionFromPoint(x, y)?.offsetNode;
69
+ } else if ("caretRangeFromPoint" in document) {
70
+ node = document.caretRangeFromPoint(x, y)?.startContainer;
71
+ }
72
+ if (!node) {
73
+ node = document.elementFromPoint(x, y) as Node;
74
+ }
75
+ if (node && node.nodeType === Node.TEXT_NODE) {
76
+ node = node.parentNode;
77
+ }
78
+
79
+ return get(node)?.hash?.[1];
80
+ }
81
+
56
82
  export function reset(): void {
57
83
  state = [];
58
84
  }
@@ -23,8 +23,8 @@ async function discover(): Promise<void> {
23
23
 
24
24
  let timer: Timer = { id: id(), cost: Metric.LayoutCost };
25
25
  task.start(timer);
26
- await traverse(document, timer, Source.Discover);
27
- checkDocumentStyles(document);
26
+ await traverse(document, timer, Source.Discover, ts);
27
+ checkDocumentStyles(document, ts);
28
28
  await encode(Event.Discover, timer, ts);
29
29
  task.stop(timer);
30
30
  }
@@ -5,6 +5,8 @@ import * as mutation from "@src/layout/mutation";
5
5
  import * as region from "@src/layout/region";
6
6
  import * as style from "@src/layout/style";
7
7
  import * as animation from "@src/layout/animation";
8
+ import { bind } from "@src/core/event";
9
+ import config from "@src/core/config";
8
10
 
9
11
  export { hashText } from "@src/layout/dom";
10
12
 
@@ -14,7 +16,12 @@ export function start(): void {
14
16
  doc.start();
15
17
  region.start();
16
18
  dom.start();
17
- mutation.start();
19
+ if (config.delayDom) {
20
+ // Lazy load layout module as part of page load time performance improvements experiment
21
+ bind(window, 'load', () => {
22
+ mutation.start();
23
+ });
24
+ }
18
25
  discover.start();
19
26
  style.start();
20
27
  animation.start();