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.
- package/build/clarity.extended.js +1 -1
- package/build/clarity.insight.js +1 -1
- package/build/clarity.js +89 -18
- package/build/clarity.min.js +1 -1
- package/build/clarity.module.js +89 -18
- package/build/clarity.performance.js +1 -1
- package/package.json +1 -1
- package/src/clarity.ts +2 -2
- package/src/core/config.ts +2 -1
- package/src/core/version.ts +1 -1
- package/src/data/baseline.ts +6 -3
- package/src/data/encode.ts +1 -0
- package/src/data/index.ts +1 -0
- package/src/data/signal.ts +30 -0
- package/src/data/upload.ts +4 -0
- package/src/insight/snapshot.ts +2 -0
- package/src/interaction/encode.ts +3 -1
- package/src/interaction/scroll.ts +28 -2
- package/src/layout/discover.ts +2 -2
- package/src/layout/index.ts +8 -1
- package/src/layout/mutation.ts +10 -10
- package/src/layout/node.ts +4 -4
- package/src/layout/style.ts +11 -6
- package/src/layout/traverse.ts +2 -2
- package/types/core.d.ts +1 -0
- package/types/data.d.ts +8 -0
- package/types/index.d.ts +1 -0
- package/types/interaction.d.ts +2 -0
package/build/clarity.module.js
CHANGED
|
@@ -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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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&<>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
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
|
+
}
|
package/src/core/config.ts
CHANGED
package/src/core/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
let version = "0.7.
|
|
1
|
+
let version = "0.7.31";
|
|
2
2
|
export default version;
|
package/src/data/baseline.ts
CHANGED
|
@@ -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;
|
package/src/data/encode.ts
CHANGED
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
|
+
}
|
package/src/data/upload.ts
CHANGED
|
@@ -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
|
}
|
package/src/insight/snapshot.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
}
|
package/src/layout/discover.ts
CHANGED
|
@@ -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
|
}
|
package/src/layout/index.ts
CHANGED
|
@@ -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
|
-
|
|
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();
|