@atlaskit/react-ufo 3.13.13 → 3.13.14
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/CHANGELOG.md +11 -0
- package/dist/cjs/config/index.js +4 -4
- package/dist/cjs/create-payload/index.js +1 -2
- package/dist/cjs/create-payload/utils/get-ssr-done-time-value.js +1 -2
- package/dist/cjs/interaction-ignore/ufo-interaction-ignore.js +1 -2
- package/dist/cjs/interaction-metrics/index.js +10 -10
- package/dist/cjs/interaction-metrics-init/index.js +1 -2
- package/dist/cjs/label/UFOLabel.js +1 -2
- package/dist/cjs/load-hold/UFOLoadHold.js +1 -2
- package/dist/cjs/placeholder/Placeholder.js +1 -2
- package/dist/cjs/placeholder/loosely-lazy/lazy-suspense.js +1 -2
- package/dist/cjs/segment/segment-highlight.js +1 -2
- package/dist/cjs/segment/segment.js +1 -2
- package/dist/cjs/trace-transition/index.js +1 -2
- package/dist/cjs/vc/vc-observer/getVCRevisionsData.js +15 -5
- package/dist/cjs/vc/vc-observer/index.js +24 -23
- package/dist/cjs/vc/vc-observer/media-wrapper/index.js +1 -2
- package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +66 -14
- package/dist/cjs/vc/vc-observer-new/metric-calculator/fy25_03/index.js +1 -1
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +2 -2
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +1 -2
- package/dist/es2019/interaction-metrics/index.js +10 -10
- package/dist/es2019/vc/vc-observer/getVCRevisionsData.js +15 -5
- package/dist/es2019/vc/vc-observer/index.js +2 -1
- package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +30 -1
- package/dist/es2019/vc/vc-observer-new/metric-calculator/fy25_03/index.js +1 -1
- package/dist/esm/config/index.js +4 -4
- package/dist/esm/interaction-metrics/index.js +10 -10
- package/dist/esm/vc/vc-observer/getVCRevisionsData.js +15 -5
- package/dist/esm/vc/vc-observer/index.js +24 -23
- package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +67 -15
- package/dist/esm/vc/vc-observer-new/metric-calculator/fy25_03/index.js +1 -1
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +2 -2
- package/dist/types/common/vc/types.d.ts +1 -0
- package/dist/types/vc/vc-observer/getVCRevisionsData.d.ts +3 -2
- package/dist/types/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +4 -0
- package/dist/types-ts4.5/common/vc/types.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer/getVCRevisionsData.d.ts +3 -2
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +4 -0
- package/package.json +4 -4
|
@@ -581,11 +581,11 @@ function callCancelCallbacks(interaction) {
|
|
|
581
581
|
export function abort(interactionId, abortReason) {
|
|
582
582
|
const interaction = interactions.get(interactionId);
|
|
583
583
|
if (interaction != null) {
|
|
584
|
-
var
|
|
584
|
+
var _getConfig0, _getConfig0$experimen;
|
|
585
585
|
callCancelCallbacks(interaction);
|
|
586
586
|
interaction.abortReason = abortReason;
|
|
587
587
|
finishInteraction(interactionId, interaction);
|
|
588
|
-
if ((
|
|
588
|
+
if ((_getConfig0 = getConfig()) !== null && _getConfig0 !== void 0 && (_getConfig0$experimen = _getConfig0.experimentalInteractionMetrics) !== null && _getConfig0$experimen !== void 0 && _getConfig0$experimen.enabled) {
|
|
589
589
|
onExperimentalInteractionComplete(interactionId, interaction);
|
|
590
590
|
remove(interactionId);
|
|
591
591
|
}
|
|
@@ -594,12 +594,12 @@ export function abort(interactionId, abortReason) {
|
|
|
594
594
|
export function abortByNewInteraction(interactionId, interactionName) {
|
|
595
595
|
const interaction = interactions.get(interactionId);
|
|
596
596
|
if (interaction != null) {
|
|
597
|
-
var
|
|
597
|
+
var _getConfig1, _getConfig1$experimen;
|
|
598
598
|
callCancelCallbacks(interaction);
|
|
599
599
|
interaction.abortReason = 'new_interaction';
|
|
600
600
|
interaction.abortedByInteractionName = interactionName;
|
|
601
601
|
finishInteraction(interactionId, interaction);
|
|
602
|
-
if ((
|
|
602
|
+
if ((_getConfig1 = getConfig()) !== null && _getConfig1 !== void 0 && (_getConfig1$experimen = _getConfig1.experimentalInteractionMetrics) !== null && _getConfig1$experimen !== void 0 && _getConfig1$experimen.enabled) {
|
|
603
603
|
onExperimentalInteractionComplete(interactionId, interaction);
|
|
604
604
|
remove(interactionId);
|
|
605
605
|
}
|
|
@@ -607,7 +607,7 @@ export function abortByNewInteraction(interactionId, interactionName) {
|
|
|
607
607
|
}
|
|
608
608
|
export function abortAll(abortReason, abortedByInteractionName) {
|
|
609
609
|
interactions.forEach((interaction, interactionId) => {
|
|
610
|
-
var
|
|
610
|
+
var _getConfig10, _getConfig10$experime;
|
|
611
611
|
const noMoreHolds = interaction.holdActive.size === 0;
|
|
612
612
|
if (!noMoreHolds) {
|
|
613
613
|
callCancelCallbacks(interaction);
|
|
@@ -617,7 +617,7 @@ export function abortAll(abortReason, abortedByInteractionName) {
|
|
|
617
617
|
}
|
|
618
618
|
}
|
|
619
619
|
finishInteraction(interactionId, interaction);
|
|
620
|
-
if ((
|
|
620
|
+
if ((_getConfig10 = getConfig()) !== null && _getConfig10 !== void 0 && (_getConfig10$experime = _getConfig10.experimentalInteractionMetrics) !== null && _getConfig10$experime !== void 0 && _getConfig10$experime.enabled) {
|
|
621
621
|
onExperimentalInteractionComplete(interactionId, interaction);
|
|
622
622
|
remove(interactionId);
|
|
623
623
|
}
|
|
@@ -628,8 +628,8 @@ export function addOnCancelCallback(id, cancelCallback) {
|
|
|
628
628
|
interaction === null || interaction === void 0 ? void 0 : interaction.cancelCallbacks.push(cancelCallback);
|
|
629
629
|
}
|
|
630
630
|
export function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelStack, routeName, trace = null) {
|
|
631
|
-
var
|
|
632
|
-
if ((
|
|
631
|
+
var _getConfig11, _getConfig11$postInte;
|
|
632
|
+
if ((_getConfig11 = getConfig()) !== null && _getConfig11 !== void 0 && (_getConfig11$postInte = _getConfig11.postInteractionLog) !== null && _getConfig11$postInte !== void 0 && _getConfig11$postInte.enabled) {
|
|
633
633
|
postInteractionLog.reset();
|
|
634
634
|
}
|
|
635
635
|
let previousTime = startTime;
|
|
@@ -717,7 +717,7 @@ export function addNewInteraction(interactionId, ufoName, type, startTime, rate,
|
|
|
717
717
|
addHoldByID(interactionId, [], ufoName, ufoName, true);
|
|
718
718
|
}
|
|
719
719
|
if (type === 'transition') {
|
|
720
|
-
var
|
|
720
|
+
var _getConfig12, _getConfig12$experime;
|
|
721
721
|
getVCObserver().start({
|
|
722
722
|
startTime,
|
|
723
723
|
experienceKey: ufoName
|
|
@@ -725,7 +725,7 @@ export function addNewInteraction(interactionId, ufoName, type, startTime, rate,
|
|
|
725
725
|
postInteractionLog.startVCObserver({
|
|
726
726
|
startTime
|
|
727
727
|
});
|
|
728
|
-
if ((
|
|
728
|
+
if ((_getConfig12 = getConfig()) !== null && _getConfig12 !== void 0 && (_getConfig12$experime = _getConfig12.experimentalInteractionMetrics) !== null && _getConfig12$experime !== void 0 && _getConfig12$experime.enabled) {
|
|
729
729
|
experimentalVC.start({
|
|
730
730
|
startTime
|
|
731
731
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
1
2
|
import { isVCRevisionEnabled } from '../../config';
|
|
2
3
|
import { getPageVisibilityState } from '../../hidden-timing';
|
|
3
4
|
const VCParts = ['25', '50', '75', '80', '85', '90', '95', '98', '99'];
|
|
@@ -33,27 +34,36 @@ export function getVCRevisionsData({
|
|
|
33
34
|
isEventAborted,
|
|
34
35
|
calculatedVC,
|
|
35
36
|
calculatedVCNext,
|
|
36
|
-
experienceKey
|
|
37
|
+
experienceKey,
|
|
38
|
+
ratios
|
|
37
39
|
}) {
|
|
38
40
|
const pageVisibilityUpToTTAI = getPageVisibilityState(interaction.start, interaction.end);
|
|
39
41
|
const isVisiblePageVisibleUpToTTAI = pageVisibilityUpToTTAI === 'visible';
|
|
40
42
|
const shouldHaveVCmetric = isVCClean && !isEventAborted && isVisiblePageVisibleUpToTTAI;
|
|
41
43
|
const availableVCRevisionPayloads = [];
|
|
42
44
|
if (isVCRevisionEnabled('fy25.01', experienceKey)) {
|
|
43
|
-
|
|
45
|
+
const revision = {
|
|
44
46
|
revision: 'fy25.01',
|
|
45
47
|
clean: isVCClean,
|
|
46
48
|
'metric:vc90': shouldHaveVCmetric ? calculatedVC.VC['90'] : null,
|
|
47
49
|
vcDetails: createVCDetails(calculatedVC, shouldHaveVCmetric)
|
|
48
|
-
}
|
|
50
|
+
};
|
|
51
|
+
if (shouldHaveVCmetric && fg('platform_ufo_rev_ratios')) {
|
|
52
|
+
revision.ratios = ratios;
|
|
53
|
+
}
|
|
54
|
+
availableVCRevisionPayloads.push(revision);
|
|
49
55
|
}
|
|
50
56
|
if (isVCRevisionEnabled('fy25.02', experienceKey)) {
|
|
51
|
-
|
|
57
|
+
const revision = {
|
|
52
58
|
revision: 'fy25.02',
|
|
53
59
|
clean: isVCClean,
|
|
54
60
|
'metric:vc90': shouldHaveVCmetric ? calculatedVCNext.VC['90'] : null,
|
|
55
61
|
vcDetails: createVCDetails(calculatedVCNext, shouldHaveVCmetric)
|
|
56
|
-
}
|
|
62
|
+
};
|
|
63
|
+
if (shouldHaveVCmetric && fg('platform_ufo_rev_ratios')) {
|
|
64
|
+
revision.ratios = ratios;
|
|
65
|
+
}
|
|
66
|
+
availableVCRevisionPayloads.push(revision);
|
|
57
67
|
}
|
|
58
68
|
return {
|
|
59
69
|
[`${fullPrefix}vc:rev`]: availableVCRevisionPayloads
|
|
@@ -330,7 +330,8 @@ export class VCObserver {
|
|
|
330
330
|
VCBox: vcNext.VCBox
|
|
331
331
|
},
|
|
332
332
|
isEventAborted,
|
|
333
|
-
experienceKey
|
|
333
|
+
experienceKey,
|
|
334
|
+
ratios
|
|
334
335
|
});
|
|
335
336
|
const speedIndex = {
|
|
336
337
|
[`ufo:speedIndex`]: isTTVCv1Disabled ? vcNext.VCEntries.speedIndex : VCEntries.speedIndex,
|
|
@@ -11,6 +11,31 @@ export default class AbstractVCCalculatorBase {
|
|
|
11
11
|
return 'rect' in entry.data;
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Calculate ratios for each element based on their viewport coverage.
|
|
17
|
+
*/
|
|
18
|
+
calculateRatios(filteredEntries) {
|
|
19
|
+
const ratios = {};
|
|
20
|
+
const viewportWidth = getViewportWidth();
|
|
21
|
+
const viewportHeight = getViewportHeight();
|
|
22
|
+
const totalViewportArea = viewportWidth * viewportHeight;
|
|
23
|
+
if (totalViewportArea === 0) {
|
|
24
|
+
return ratios;
|
|
25
|
+
}
|
|
26
|
+
const elementRects = new Map();
|
|
27
|
+
for (const entry of filteredEntries) {
|
|
28
|
+
if ('rect' in entry.data) {
|
|
29
|
+
const viewportEntry = entry.data;
|
|
30
|
+
elementRects.set(viewportEntry.elementName, viewportEntry.rect);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (const [elementName, rect] of elementRects) {
|
|
34
|
+
const elementArea = rect.width * rect.height;
|
|
35
|
+
ratios[elementName] = elementArea / totalViewportArea;
|
|
36
|
+
}
|
|
37
|
+
return ratios;
|
|
38
|
+
}
|
|
14
39
|
async calculateBasic(filteredEntries, startTime, stopTime) {
|
|
15
40
|
const percentiles = [25, 50, 75, 80, 85, 90, 95, 98, 99];
|
|
16
41
|
const viewportEntries = this.filterViewportEntries(filteredEntries);
|
|
@@ -135,11 +160,15 @@ export default class AbstractVCCalculatorBase {
|
|
|
135
160
|
}
|
|
136
161
|
const useDebugInfo = fg('platform_ufo_ttvc_v3_devtool');
|
|
137
162
|
const vcDetails = useDebugInfo ? await this.calculateWithDebugInfo(filteredEntries, startTime, stopTime, isPostInteraction, isVCClean, interactionId, dirtyReason) : await this.calculateBasic(filteredEntries, startTime, stopTime);
|
|
138
|
-
|
|
163
|
+
const result = {
|
|
139
164
|
revision: this.revisionNo,
|
|
140
165
|
clean: true,
|
|
141
166
|
'metric:vc90': (_vcDetails$90$t = vcDetails === null || vcDetails === void 0 ? void 0 : (_vcDetails$ = vcDetails['90']) === null || _vcDetails$ === void 0 ? void 0 : _vcDetails$.t) !== null && _vcDetails$90$t !== void 0 ? _vcDetails$90$t : null,
|
|
142
167
|
vcDetails: vcDetails !== null && vcDetails !== void 0 ? vcDetails : undefined
|
|
143
168
|
};
|
|
169
|
+
if (fg('platform_ufo_rev_ratios')) {
|
|
170
|
+
result.ratios = this.calculateRatios(filteredEntries);
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
144
173
|
}
|
|
145
174
|
}
|
|
@@ -29,7 +29,7 @@ export default class VCCalculator_FY25_03 extends AbstractVCCalculatorBase {
|
|
|
29
29
|
if (attributeName === 'data-aui-version' && fg('platform_ufo_filter_out_aui_attribute_changes')) {
|
|
30
30
|
return false;
|
|
31
31
|
}
|
|
32
|
-
if (
|
|
32
|
+
if (attributeName === 'data-testid' || attributeName === 'data-vc' || attributeName === 'data-ssr-placeholder' || attributeName === 'data-ssr-placeholder-replace' || attributeName === 'data-vc-nvs' || attributeName === 'data-media-vc-wrapper' || attributeName === 'data-auto-scrollable' || attributeName === 'id' || attributeName === 'tabindex' || NON_VISUAL_ARIA_ATTRIBUTES.includes(attributeName)) {
|
|
33
33
|
return false;
|
|
34
34
|
}
|
|
35
35
|
return true;
|
package/dist/esm/config/index.js
CHANGED
|
@@ -283,8 +283,8 @@ export function getDoNotAbortActivePressInteraction() {
|
|
|
283
283
|
if (!config) {
|
|
284
284
|
return undefined;
|
|
285
285
|
}
|
|
286
|
-
var
|
|
287
|
-
doNotAbortActivePressInteraction =
|
|
286
|
+
var _config0 = config,
|
|
287
|
+
doNotAbortActivePressInteraction = _config0.doNotAbortActivePressInteraction;
|
|
288
288
|
return doNotAbortActivePressInteraction;
|
|
289
289
|
} catch (e) {
|
|
290
290
|
return undefined;
|
|
@@ -297,8 +297,8 @@ export function getDoNotAbortActivePressInteractionOnTransition() {
|
|
|
297
297
|
if (!config) {
|
|
298
298
|
return undefined;
|
|
299
299
|
}
|
|
300
|
-
var
|
|
301
|
-
doNotAbortActivePressInteractionOnTransition =
|
|
300
|
+
var _config1 = config,
|
|
301
|
+
doNotAbortActivePressInteractionOnTransition = _config1.doNotAbortActivePressInteractionOnTransition;
|
|
302
302
|
return doNotAbortActivePressInteractionOnTransition;
|
|
303
303
|
} catch (e) {
|
|
304
304
|
return undefined;
|
|
@@ -659,11 +659,11 @@ function callCancelCallbacks(interaction) {
|
|
|
659
659
|
export function abort(interactionId, abortReason) {
|
|
660
660
|
var interaction = interactions.get(interactionId);
|
|
661
661
|
if (interaction != null) {
|
|
662
|
-
var
|
|
662
|
+
var _getConfig0;
|
|
663
663
|
callCancelCallbacks(interaction);
|
|
664
664
|
interaction.abortReason = abortReason;
|
|
665
665
|
finishInteraction(interactionId, interaction);
|
|
666
|
-
if ((
|
|
666
|
+
if ((_getConfig0 = getConfig()) !== null && _getConfig0 !== void 0 && (_getConfig0 = _getConfig0.experimentalInteractionMetrics) !== null && _getConfig0 !== void 0 && _getConfig0.enabled) {
|
|
667
667
|
onExperimentalInteractionComplete(interactionId, interaction);
|
|
668
668
|
remove(interactionId);
|
|
669
669
|
}
|
|
@@ -672,12 +672,12 @@ export function abort(interactionId, abortReason) {
|
|
|
672
672
|
export function abortByNewInteraction(interactionId, interactionName) {
|
|
673
673
|
var interaction = interactions.get(interactionId);
|
|
674
674
|
if (interaction != null) {
|
|
675
|
-
var
|
|
675
|
+
var _getConfig1;
|
|
676
676
|
callCancelCallbacks(interaction);
|
|
677
677
|
interaction.abortReason = 'new_interaction';
|
|
678
678
|
interaction.abortedByInteractionName = interactionName;
|
|
679
679
|
finishInteraction(interactionId, interaction);
|
|
680
|
-
if ((
|
|
680
|
+
if ((_getConfig1 = getConfig()) !== null && _getConfig1 !== void 0 && (_getConfig1 = _getConfig1.experimentalInteractionMetrics) !== null && _getConfig1 !== void 0 && _getConfig1.enabled) {
|
|
681
681
|
onExperimentalInteractionComplete(interactionId, interaction);
|
|
682
682
|
remove(interactionId);
|
|
683
683
|
}
|
|
@@ -685,7 +685,7 @@ export function abortByNewInteraction(interactionId, interactionName) {
|
|
|
685
685
|
}
|
|
686
686
|
export function abortAll(abortReason, abortedByInteractionName) {
|
|
687
687
|
interactions.forEach(function (interaction, interactionId) {
|
|
688
|
-
var
|
|
688
|
+
var _getConfig10;
|
|
689
689
|
var noMoreHolds = interaction.holdActive.size === 0;
|
|
690
690
|
if (!noMoreHolds) {
|
|
691
691
|
callCancelCallbacks(interaction);
|
|
@@ -695,7 +695,7 @@ export function abortAll(abortReason, abortedByInteractionName) {
|
|
|
695
695
|
}
|
|
696
696
|
}
|
|
697
697
|
finishInteraction(interactionId, interaction);
|
|
698
|
-
if ((
|
|
698
|
+
if ((_getConfig10 = getConfig()) !== null && _getConfig10 !== void 0 && (_getConfig10 = _getConfig10.experimentalInteractionMetrics) !== null && _getConfig10 !== void 0 && _getConfig10.enabled) {
|
|
699
699
|
onExperimentalInteractionComplete(interactionId, interaction);
|
|
700
700
|
remove(interactionId);
|
|
701
701
|
}
|
|
@@ -706,9 +706,9 @@ export function addOnCancelCallback(id, cancelCallback) {
|
|
|
706
706
|
interaction === null || interaction === void 0 || interaction.cancelCallbacks.push(cancelCallback);
|
|
707
707
|
}
|
|
708
708
|
export function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelStack, routeName) {
|
|
709
|
-
var
|
|
709
|
+
var _getConfig11;
|
|
710
710
|
var trace = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;
|
|
711
|
-
if ((
|
|
711
|
+
if ((_getConfig11 = getConfig()) !== null && _getConfig11 !== void 0 && (_getConfig11 = _getConfig11.postInteractionLog) !== null && _getConfig11 !== void 0 && _getConfig11.enabled) {
|
|
712
712
|
postInteractionLog.reset();
|
|
713
713
|
}
|
|
714
714
|
var previousTime = startTime;
|
|
@@ -796,7 +796,7 @@ export function addNewInteraction(interactionId, ufoName, type, startTime, rate,
|
|
|
796
796
|
addHoldByID(interactionId, [], ufoName, ufoName, true);
|
|
797
797
|
}
|
|
798
798
|
if (type === 'transition') {
|
|
799
|
-
var
|
|
799
|
+
var _getConfig12;
|
|
800
800
|
getVCObserver().start({
|
|
801
801
|
startTime: startTime,
|
|
802
802
|
experienceKey: ufoName
|
|
@@ -804,7 +804,7 @@ export function addNewInteraction(interactionId, ufoName, type, startTime, rate,
|
|
|
804
804
|
postInteractionLog.startVCObserver({
|
|
805
805
|
startTime: startTime
|
|
806
806
|
});
|
|
807
|
-
if ((
|
|
807
|
+
if ((_getConfig12 = getConfig()) !== null && _getConfig12 !== void 0 && (_getConfig12 = _getConfig12.experimentalInteractionMetrics) !== null && _getConfig12 !== void 0 && _getConfig12.enabled) {
|
|
808
808
|
experimentalVC.start({
|
|
809
809
|
startTime: startTime
|
|
810
810
|
});
|
|
@@ -2,6 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
2
2
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
3
3
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
4
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
6
|
import { isVCRevisionEnabled } from '../../config';
|
|
6
7
|
import { getPageVisibilityState } from '../../hidden-timing';
|
|
7
8
|
var VCParts = ['25', '50', '75', '80', '85', '90', '95', '98', '99'];
|
|
@@ -43,26 +44,35 @@ export function getVCRevisionsData(_ref) {
|
|
|
43
44
|
isEventAborted = _ref.isEventAborted,
|
|
44
45
|
calculatedVC = _ref.calculatedVC,
|
|
45
46
|
calculatedVCNext = _ref.calculatedVCNext,
|
|
46
|
-
experienceKey = _ref.experienceKey
|
|
47
|
+
experienceKey = _ref.experienceKey,
|
|
48
|
+
ratios = _ref.ratios;
|
|
47
49
|
var pageVisibilityUpToTTAI = getPageVisibilityState(interaction.start, interaction.end);
|
|
48
50
|
var isVisiblePageVisibleUpToTTAI = pageVisibilityUpToTTAI === 'visible';
|
|
49
51
|
var shouldHaveVCmetric = isVCClean && !isEventAborted && isVisiblePageVisibleUpToTTAI;
|
|
50
52
|
var availableVCRevisionPayloads = [];
|
|
51
53
|
if (isVCRevisionEnabled('fy25.01', experienceKey)) {
|
|
52
|
-
|
|
54
|
+
var revision = {
|
|
53
55
|
revision: 'fy25.01',
|
|
54
56
|
clean: isVCClean,
|
|
55
57
|
'metric:vc90': shouldHaveVCmetric ? calculatedVC.VC['90'] : null,
|
|
56
58
|
vcDetails: createVCDetails(calculatedVC, shouldHaveVCmetric)
|
|
57
|
-
}
|
|
59
|
+
};
|
|
60
|
+
if (shouldHaveVCmetric && fg('platform_ufo_rev_ratios')) {
|
|
61
|
+
revision.ratios = ratios;
|
|
62
|
+
}
|
|
63
|
+
availableVCRevisionPayloads.push(revision);
|
|
58
64
|
}
|
|
59
65
|
if (isVCRevisionEnabled('fy25.02', experienceKey)) {
|
|
60
|
-
|
|
66
|
+
var _revision = {
|
|
61
67
|
revision: 'fy25.02',
|
|
62
68
|
clean: isVCClean,
|
|
63
69
|
'metric:vc90': shouldHaveVCmetric ? calculatedVCNext.VC['90'] : null,
|
|
64
70
|
vcDetails: createVCDetails(calculatedVCNext, shouldHaveVCmetric)
|
|
65
|
-
}
|
|
71
|
+
};
|
|
72
|
+
if (shouldHaveVCmetric && fg('platform_ufo_rev_ratios')) {
|
|
73
|
+
_revision.ratios = ratios;
|
|
74
|
+
}
|
|
75
|
+
availableVCRevisionPayloads.push(_revision);
|
|
66
76
|
}
|
|
67
77
|
return _defineProperty({}, "".concat(fullPrefix, "vc:rev"), availableVCRevisionPayloads);
|
|
68
78
|
}
|
|
@@ -311,7 +311,8 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
311
311
|
VCBox: vcNext.VCBox
|
|
312
312
|
},
|
|
313
313
|
isEventAborted: isEventAborted,
|
|
314
|
-
experienceKey: experienceKey
|
|
314
|
+
experienceKey: experienceKey,
|
|
315
|
+
ratios: ratios
|
|
315
316
|
});
|
|
316
317
|
speedIndex = _defineProperty(_defineProperty({}, "ufo:speedIndex", isTTVCv1Disabled ? vcNext.VCEntries.speedIndex : VCEntries.speedIndex), "ufo:next:speedIndex", vcNext.VCEntries.speedIndex);
|
|
317
318
|
SSRRatio = VCObserver.getSSRRatio(VCEntries.rel, ssr);
|
|
@@ -420,10 +421,10 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
420
421
|
_this.detachAbortListeners();
|
|
421
422
|
var unbinds = attachAbortListeners(window, _this.viewport, _this.abortReasonCallback);
|
|
422
423
|
if ((_window = window) !== null && _window !== void 0 && _window.__SSR_ABORT_LISTENERS__) {
|
|
423
|
-
Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (
|
|
424
|
-
var
|
|
425
|
-
key =
|
|
426
|
-
time =
|
|
424
|
+
Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (_ref1) {
|
|
425
|
+
var _ref10 = _slicedToArray(_ref1, 2),
|
|
426
|
+
key = _ref10[0],
|
|
427
|
+
time = _ref10[1];
|
|
427
428
|
if (time) {
|
|
428
429
|
_this.abortReasonCallback(key, time);
|
|
429
430
|
}
|
|
@@ -453,8 +454,8 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
453
454
|
}
|
|
454
455
|
return _createClass(VCObserver, [{
|
|
455
456
|
key: "start",
|
|
456
|
-
value: function start(
|
|
457
|
-
var startTime =
|
|
457
|
+
value: function start(_ref11) {
|
|
458
|
+
var startTime = _ref11.startTime;
|
|
458
459
|
this.active = true;
|
|
459
460
|
if (this.observers.isBrowserSupported()) {
|
|
460
461
|
this.setViewportSize();
|
|
@@ -476,12 +477,12 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
476
477
|
}, {
|
|
477
478
|
key: "getIgnoredElements",
|
|
478
479
|
value: function getIgnoredElements(componentsLog) {
|
|
479
|
-
return Object.values(componentsLog).flat().filter(function (
|
|
480
|
-
var ignoreReason =
|
|
480
|
+
return Object.values(componentsLog).flat().filter(function (_ref12) {
|
|
481
|
+
var ignoreReason = _ref12.ignoreReason;
|
|
481
482
|
return Boolean(ignoreReason);
|
|
482
|
-
}).map(function (
|
|
483
|
-
var targetName =
|
|
484
|
-
ignoreReason =
|
|
483
|
+
}).map(function (_ref13) {
|
|
484
|
+
var targetName = _ref13.targetName,
|
|
485
|
+
ignoreReason = _ref13.ignoreReason;
|
|
485
486
|
return {
|
|
486
487
|
targetName: targetName,
|
|
487
488
|
ignoreReason: ignoreReason
|
|
@@ -611,13 +612,13 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
611
612
|
}
|
|
612
613
|
}, {
|
|
613
614
|
key: "calculateVC",
|
|
614
|
-
value: function calculateVC(
|
|
615
|
-
var heatmap =
|
|
616
|
-
|
|
617
|
-
ssr =
|
|
618
|
-
componentsLog =
|
|
619
|
-
viewport =
|
|
620
|
-
fixSSRAttribution =
|
|
615
|
+
value: function calculateVC(_ref14) {
|
|
616
|
+
var heatmap = _ref14.heatmap,
|
|
617
|
+
_ref14$ssr = _ref14.ssr,
|
|
618
|
+
ssr = _ref14$ssr === void 0 ? UNUSED_SECTOR : _ref14$ssr,
|
|
619
|
+
componentsLog = _ref14.componentsLog,
|
|
620
|
+
viewport = _ref14.viewport,
|
|
621
|
+
fixSSRAttribution = _ref14.fixSSRAttribution;
|
|
621
622
|
var lastUpdate = {};
|
|
622
623
|
var totalPainted = 0;
|
|
623
624
|
var ssrTime = fixSSRAttribution ? Math.floor(ssr) : ssr;
|
|
@@ -684,11 +685,11 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
684
685
|
});
|
|
685
686
|
return VCRatio;
|
|
686
687
|
}, 0);
|
|
687
|
-
var VCEntries = entries.reduce(function (acc,
|
|
688
|
+
var VCEntries = entries.reduce(function (acc, _ref15, i) {
|
|
688
689
|
var _acc$abs, _componentsLog$timest, _acc$rel$vc, _acc$rel;
|
|
689
|
-
var
|
|
690
|
-
timestamp =
|
|
691
|
-
entryPainted =
|
|
690
|
+
var _ref16 = _slicedToArray(_ref15, 2),
|
|
691
|
+
timestamp = _ref16[0],
|
|
692
|
+
entryPainted = _ref16[1];
|
|
692
693
|
var currentlyPainted = entryPainted + (((_acc$abs = acc.abs[i - 1]) === null || _acc$abs === void 0 ? void 0 : _acc$abs[1]) || 0);
|
|
693
694
|
var currentlyPaintedRatio = Math.round(currentlyPainted / totalPainted * 1000) / 10;
|
|
694
695
|
var logEntry = _toConsumableArray(new Set((_componentsLog$timest = componentsLog[timestamp]) === null || _componentsLog$timest === void 0 ? void 0 : _componentsLog$timest.filter(function (v) {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
3
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
4
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
5
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
4
6
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
5
7
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
6
8
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
7
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
8
9
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
9
10
|
import { calculateTTVCPercentiles, calculateTTVCPercentilesWithDebugInfo } from './percentile-calc';
|
|
10
11
|
import getViewportHeight from './utils/get-viewport-height';
|
|
@@ -21,6 +22,53 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
|
|
|
21
22
|
return 'rect' in entry.data;
|
|
22
23
|
});
|
|
23
24
|
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Calculate ratios for each element based on their viewport coverage.
|
|
28
|
+
*/
|
|
29
|
+
}, {
|
|
30
|
+
key: "calculateRatios",
|
|
31
|
+
value: function calculateRatios(filteredEntries) {
|
|
32
|
+
var ratios = {};
|
|
33
|
+
var viewportWidth = getViewportWidth();
|
|
34
|
+
var viewportHeight = getViewportHeight();
|
|
35
|
+
var totalViewportArea = viewportWidth * viewportHeight;
|
|
36
|
+
if (totalViewportArea === 0) {
|
|
37
|
+
return ratios;
|
|
38
|
+
}
|
|
39
|
+
var elementRects = new Map();
|
|
40
|
+
var _iterator = _createForOfIteratorHelper(filteredEntries),
|
|
41
|
+
_step;
|
|
42
|
+
try {
|
|
43
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
44
|
+
var _entry = _step.value;
|
|
45
|
+
if ('rect' in _entry.data) {
|
|
46
|
+
var viewportEntry = _entry.data;
|
|
47
|
+
elementRects.set(viewportEntry.elementName, viewportEntry.rect);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
} catch (err) {
|
|
51
|
+
_iterator.e(err);
|
|
52
|
+
} finally {
|
|
53
|
+
_iterator.f();
|
|
54
|
+
}
|
|
55
|
+
var _iterator2 = _createForOfIteratorHelper(elementRects),
|
|
56
|
+
_step2;
|
|
57
|
+
try {
|
|
58
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
59
|
+
var _step2$value = _slicedToArray(_step2.value, 2),
|
|
60
|
+
elementName = _step2$value[0],
|
|
61
|
+
rect = _step2$value[1];
|
|
62
|
+
var elementArea = rect.width * rect.height;
|
|
63
|
+
ratios[elementName] = elementArea / totalViewportArea;
|
|
64
|
+
}
|
|
65
|
+
} catch (err) {
|
|
66
|
+
_iterator2.e(err);
|
|
67
|
+
} finally {
|
|
68
|
+
_iterator2.f();
|
|
69
|
+
}
|
|
70
|
+
return ratios;
|
|
71
|
+
}
|
|
24
72
|
}, {
|
|
25
73
|
key: "calculateBasic",
|
|
26
74
|
value: function () {
|
|
@@ -60,7 +108,7 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
|
|
|
60
108
|
key: "calculateWithDebugInfo",
|
|
61
109
|
value: function () {
|
|
62
110
|
var _calculateWithDebugInfo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(filteredEntries, startTime, stopTime, isPostInteraction, isVCClean, interactionId, dirtyReason) {
|
|
63
|
-
var percentiles, viewportEntries, vcLogs, vcDetails, percentileIndex, entryDataBuffer,
|
|
111
|
+
var percentiles, viewportEntries, vcLogs, vcDetails, percentileIndex, entryDataBuffer, _iterator3, _step3, _entry2, time, viewportPercentage, entries, elementNames, previousResult, i, percentile, _ufo_devtool_onVCRev, _ref;
|
|
64
112
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
65
113
|
while (1) switch (_context2.prev = _context2.next) {
|
|
66
114
|
case 0:
|
|
@@ -85,16 +133,16 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
|
|
|
85
133
|
_context2.next = 28;
|
|
86
134
|
break;
|
|
87
135
|
}
|
|
88
|
-
|
|
136
|
+
_iterator3 = _createForOfIteratorHelper(vcLogs);
|
|
89
137
|
_context2.prev = 10;
|
|
90
|
-
|
|
138
|
+
_iterator3.s();
|
|
91
139
|
case 12:
|
|
92
|
-
if ((
|
|
140
|
+
if ((_step3 = _iterator3.n()).done) {
|
|
93
141
|
_context2.next = 20;
|
|
94
142
|
break;
|
|
95
143
|
}
|
|
96
|
-
|
|
97
|
-
time =
|
|
144
|
+
_entry2 = _step3.value;
|
|
145
|
+
time = _entry2.time, viewportPercentage = _entry2.viewportPercentage, entries = _entry2.entries; // Only process entries if we haven't reached all percentiles
|
|
98
146
|
if (!(percentileIndex >= percentiles.length)) {
|
|
99
147
|
_context2.next = 17;
|
|
100
148
|
break;
|
|
@@ -131,10 +179,10 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
|
|
|
131
179
|
case 22:
|
|
132
180
|
_context2.prev = 22;
|
|
133
181
|
_context2.t0 = _context2["catch"](10);
|
|
134
|
-
|
|
182
|
+
_iterator3.e(_context2.t0);
|
|
135
183
|
case 25:
|
|
136
184
|
_context2.prev = 25;
|
|
137
|
-
|
|
185
|
+
_iterator3.f();
|
|
138
186
|
return _context2.finish(25);
|
|
139
187
|
case 28:
|
|
140
188
|
// Fill in any missing percentiles with the last known values
|
|
@@ -174,7 +222,7 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
|
|
|
174
222
|
}
|
|
175
223
|
}, _callee2, this, [[10, 22, 25, 28]]);
|
|
176
224
|
}));
|
|
177
|
-
function calculateWithDebugInfo(_x4, _x5, _x6, _x7, _x8, _x9,
|
|
225
|
+
function calculateWithDebugInfo(_x4, _x5, _x6, _x7, _x8, _x9, _x0) {
|
|
178
226
|
return _calculateWithDebugInfo.apply(this, arguments);
|
|
179
227
|
}
|
|
180
228
|
return calculateWithDebugInfo;
|
|
@@ -186,7 +234,7 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
|
|
|
186
234
|
var _this = this,
|
|
187
235
|
_vcDetails$90$t,
|
|
188
236
|
_vcDetails$;
|
|
189
|
-
var startTime, stopTime, orderedEntries, interactionId, isPostInteraction, filteredEntries, isVCClean, dirtyReason, getVCCleanStatusResult, useDebugInfo, vcDetails;
|
|
237
|
+
var startTime, stopTime, orderedEntries, interactionId, isPostInteraction, filteredEntries, isVCClean, dirtyReason, getVCCleanStatusResult, useDebugInfo, vcDetails, result;
|
|
190
238
|
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
191
239
|
while (1) switch (_context3.prev = _context3.next) {
|
|
192
240
|
case 0:
|
|
@@ -226,19 +274,23 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
|
|
|
226
274
|
_context3.t0 = _context3.sent;
|
|
227
275
|
case 17:
|
|
228
276
|
vcDetails = _context3.t0;
|
|
229
|
-
|
|
277
|
+
result = {
|
|
230
278
|
revision: this.revisionNo,
|
|
231
279
|
clean: true,
|
|
232
280
|
'metric:vc90': (_vcDetails$90$t = vcDetails === null || vcDetails === void 0 || (_vcDetails$ = vcDetails['90']) === null || _vcDetails$ === void 0 ? void 0 : _vcDetails$.t) !== null && _vcDetails$90$t !== void 0 ? _vcDetails$90$t : null,
|
|
233
281
|
vcDetails: vcDetails !== null && vcDetails !== void 0 ? vcDetails : undefined
|
|
234
|
-
}
|
|
235
|
-
|
|
282
|
+
};
|
|
283
|
+
if (fg('platform_ufo_rev_ratios')) {
|
|
284
|
+
result.ratios = this.calculateRatios(filteredEntries);
|
|
285
|
+
}
|
|
286
|
+
return _context3.abrupt("return", result);
|
|
287
|
+
case 21:
|
|
236
288
|
case "end":
|
|
237
289
|
return _context3.stop();
|
|
238
290
|
}
|
|
239
291
|
}, _callee3, this);
|
|
240
292
|
}));
|
|
241
|
-
function calculate(
|
|
293
|
+
function calculate(_x1) {
|
|
242
294
|
return _calculate.apply(this, arguments);
|
|
243
295
|
}
|
|
244
296
|
return calculate;
|
|
@@ -40,7 +40,7 @@ var VCCalculator_FY25_03 = /*#__PURE__*/function (_AbstractVCCalculator) {
|
|
|
40
40
|
if (attributeName === 'data-aui-version' && fg('platform_ufo_filter_out_aui_attribute_changes')) {
|
|
41
41
|
return false;
|
|
42
42
|
}
|
|
43
|
-
if (
|
|
43
|
+
if (attributeName === 'data-testid' || attributeName === 'data-vc' || attributeName === 'data-ssr-placeholder' || attributeName === 'data-ssr-placeholder-replace' || attributeName === 'data-vc-nvs' || attributeName === 'data-media-vc-wrapper' || attributeName === 'data-auto-scrollable' || attributeName === 'id' || attributeName === 'tabindex' || NON_VISUAL_ARIA_ATTRIBUTES.includes(attributeName)) {
|
|
44
44
|
return false;
|
|
45
45
|
}
|
|
46
46
|
return true;
|
package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js
CHANGED
|
@@ -204,8 +204,8 @@ export function calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, t
|
|
|
204
204
|
var sortedEntries = Array.from(timePixelCounts.entries()).sort(function (_ref7, _ref8) {
|
|
205
205
|
var _ref9 = _slicedToArray(_ref7, 1),
|
|
206
206
|
timeA = _ref9[0];
|
|
207
|
-
var
|
|
208
|
-
timeB =
|
|
207
|
+
var _ref0 = _slicedToArray(_ref8, 1),
|
|
208
|
+
timeB = _ref0[0];
|
|
209
209
|
return Number(timeA) - Number(timeB);
|
|
210
210
|
});
|
|
211
211
|
for (var i = 0; i < sortedEntries.length; i++) {
|