@atlaskit/react-ufo 3.12.4 → 3.13.0
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 +16 -0
- package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +2 -1
- package/dist/cjs/create-payload/utils/get-vc-metrics.js +2 -1
- package/dist/cjs/vc/index.js +4 -2
- package/dist/cjs/vc/vc-observer/getVCRevisionDebugDetails.js +41 -0
- package/dist/cjs/vc/vc-observer/index.js +63 -33
- package/dist/cjs/vc/vc-observer/observers/index.js +3 -2
- package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +38 -12
- package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +9 -0
- package/dist/cjs/vc/vc-observer-new/index.js +13 -7
- package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +211 -36
- package/dist/cjs/vc/vc-observer-new/metric-calculator/fy25_03/index.js +4 -4
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +94 -4
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/test-with-debug-info.js +108 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +16 -57
- package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +15 -5
- package/dist/cjs/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +3 -1
- package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +2 -1
- package/dist/es2019/create-payload/utils/get-vc-metrics.js +1 -0
- package/dist/es2019/vc/index.js +4 -2
- package/dist/es2019/vc/vc-observer/getVCRevisionDebugDetails.js +32 -0
- package/dist/es2019/vc/vc-observer/index.js +36 -1
- package/dist/es2019/vc/vc-observer/observers/index.js +2 -1
- package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +38 -13
- package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +9 -1
- package/dist/es2019/vc/vc-observer-new/index.js +12 -6
- package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +115 -17
- package/dist/es2019/vc/vc-observer-new/metric-calculator/fy25_03/index.js +4 -4
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +44 -1
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/test-with-debug-info.js +75 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +2 -20
- package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +15 -5
- package/dist/es2019/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +3 -1
- package/dist/esm/create-experimental-interaction-metrics-payload/index.js +2 -1
- package/dist/esm/create-payload/utils/get-vc-metrics.js +2 -1
- package/dist/esm/vc/index.js +4 -2
- package/dist/esm/vc/vc-observer/getVCRevisionDebugDetails.js +35 -0
- package/dist/esm/vc/vc-observer/index.js +63 -33
- package/dist/esm/vc/vc-observer/observers/index.js +3 -2
- package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +38 -12
- package/dist/esm/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +9 -0
- package/dist/esm/vc/vc-observer-new/index.js +13 -7
- package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +211 -36
- package/dist/esm/vc/vc-observer-new/metric-calculator/fy25_03/index.js +4 -4
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +94 -5
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/test-with-debug-info.js +106 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +2 -55
- package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +15 -5
- package/dist/esm/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +3 -1
- package/dist/types/config/index.d.ts +1 -0
- package/dist/types/vc/types.d.ts +2 -0
- package/dist/types/vc/vc-observer/getVCRevisionDebugDetails.d.ts +30 -0
- package/dist/types/vc/vc-observer/index.d.ts +1 -1
- package/dist/types/vc/vc-observer/observers/index.d.ts +3 -0
- package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +4 -1
- package/dist/types/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.d.ts +1 -1
- package/dist/types/vc/vc-observer-new/index.d.ts +2 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +4 -1
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +5 -1
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/test-with-debug-info.d.ts +1 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/index.d.ts +2 -4
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +20 -2
- package/dist/types/vc/vc-observer-new/metric-calculator/types.d.ts +2 -0
- package/dist/types/vc/vc-observer-new/types.d.ts +5 -1
- package/dist/types/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +2 -0
- package/dist/types/vc/vc-observer-new/viewport-observer/types.d.ts +2 -0
- package/dist/types-ts4.5/config/index.d.ts +1 -0
- package/dist/types-ts4.5/vc/types.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer/getVCRevisionDebugDetails.d.ts +30 -0
- package/dist/types-ts4.5/vc/vc-observer/index.d.ts +1 -1
- package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +3 -0
- package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +4 -1
- package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.d.ts +1 -1
- package/dist/types-ts4.5/vc/vc-observer-new/index.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +4 -1
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +5 -1
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/test-with-debug-info.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/index.d.ts +2 -4
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +20 -2
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/types.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer-new/types.d.ts +5 -1
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/types.d.ts +2 -0
- package/package.json +4 -1
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +0 -367
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +0 -398
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +0 -5
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +0 -152
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +0 -108
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +0 -248
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +0 -263
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +0 -1
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +0 -99
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +0 -60
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +0 -361
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +0 -391
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +0 -1
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +0 -145
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +0 -101
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.d.ts +0 -39
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +0 -10
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.d.ts +0 -43
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.d.ts +0 -12
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +0 -25
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.d.ts +0 -39
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +0 -10
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.d.ts +0 -43
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.d.ts +0 -12
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +0 -25
package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js
CHANGED
|
@@ -27,6 +27,31 @@ async function calculateTTVCPercentiles({
|
|
|
27
27
|
const totalPixels = canvasDimenstions.width * canvasDimenstions.height;
|
|
28
28
|
return calculatePercentiles(timePixelCounts, elementMap, percentiles, totalPixels, startTime);
|
|
29
29
|
}
|
|
30
|
+
async function calculateTTVCPercentilesWithDebugInfo({
|
|
31
|
+
viewport,
|
|
32
|
+
orderedEntries,
|
|
33
|
+
startTime
|
|
34
|
+
}) {
|
|
35
|
+
const canvas = new ViewportCanvas(viewport, fg('platform_ufo_canvas_heatmap_full_precision') ? 1 : 0.25);
|
|
36
|
+
const elementMap = new Map();
|
|
37
|
+
for (const entry of orderedEntries) {
|
|
38
|
+
if (!('rect' in entry.data)) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const rect = entry.data.rect;
|
|
42
|
+
canvas.drawRect(rect, entry.time);
|
|
43
|
+
if (!elementMap.has(entry.time)) {
|
|
44
|
+
elementMap.set(entry.time, []);
|
|
45
|
+
}
|
|
46
|
+
elementMap.get(entry.time).push(entry.data);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Get pixel counts
|
|
50
|
+
const timePixelCounts = await canvas.getPixelCounts();
|
|
51
|
+
const canvasDimensions = canvas.getScaledDimensions();
|
|
52
|
+
const totalPixels = canvasDimensions.width * canvasDimensions.height;
|
|
53
|
+
return calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, totalPixels, startTime);
|
|
54
|
+
}
|
|
30
55
|
export default calculateTTVCPercentiles;
|
|
31
56
|
export function calculatePercentiles(timePixelCounts, elementMap, unorderedPercentiles, totalPixels, startTime) {
|
|
32
57
|
const results = {};
|
|
@@ -70,4 +95,22 @@ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPerce
|
|
|
70
95
|
previousResult = results[`${percentile}`];
|
|
71
96
|
}
|
|
72
97
|
return results;
|
|
73
|
-
}
|
|
98
|
+
}
|
|
99
|
+
export function calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, totalPixels, startTime) {
|
|
100
|
+
const results = new Array(elementMap.size);
|
|
101
|
+
let cumulativePixels = 0;
|
|
102
|
+
const sortedEntries = Array.from(timePixelCounts.entries()).sort(([timeA], [timeB]) => Number(timeA) - Number(timeB));
|
|
103
|
+
for (let i = 0; i < sortedEntries.length; i++) {
|
|
104
|
+
const [time, pixelCount] = sortedEntries[i];
|
|
105
|
+
cumulativePixels += pixelCount;
|
|
106
|
+
const percentCovered = cumulativePixels / totalPixels * 100;
|
|
107
|
+
const entryDatas = elementMap.get(time) || [];
|
|
108
|
+
results[i] = {
|
|
109
|
+
time: Math.round(Number(time - startTime)),
|
|
110
|
+
viewportPercentage: percentCovered,
|
|
111
|
+
entries: Array.from(entryDatas)
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return results;
|
|
115
|
+
}
|
|
116
|
+
export { calculateTTVCPercentilesWithDebugInfo };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { calculatePercentilesWithDebugInfo } from './index';
|
|
2
|
+
|
|
3
|
+
// Test utilities
|
|
4
|
+
const createMockRect = (x = 0, y = 0, width = 100, height = 100) => new MockDOMRect(x, y, width, height);
|
|
5
|
+
const createViewportEntry = (elementName, rect = createMockRect(), visible = true, type = 'mutation:element') => ({
|
|
6
|
+
elementName,
|
|
7
|
+
rect,
|
|
8
|
+
visible,
|
|
9
|
+
type
|
|
10
|
+
});
|
|
11
|
+
const createTimePixelCounts = counts => new Map(counts);
|
|
12
|
+
const createElementMap = entries => new Map(entries);
|
|
13
|
+
const createExpectedResult = (time, viewportPercentage, entries) => ({
|
|
14
|
+
time,
|
|
15
|
+
viewportPercentage,
|
|
16
|
+
entries
|
|
17
|
+
});
|
|
18
|
+
class MockDOMRect {
|
|
19
|
+
constructor(x, y, width, height) {
|
|
20
|
+
this.x = x;
|
|
21
|
+
this.y = y;
|
|
22
|
+
this.width = width;
|
|
23
|
+
this.height = height;
|
|
24
|
+
}
|
|
25
|
+
get bottom() {
|
|
26
|
+
return this.y + this.height;
|
|
27
|
+
}
|
|
28
|
+
get left() {
|
|
29
|
+
return this.x;
|
|
30
|
+
}
|
|
31
|
+
get right() {
|
|
32
|
+
return this.x + this.width;
|
|
33
|
+
}
|
|
34
|
+
get top() {
|
|
35
|
+
return this.y;
|
|
36
|
+
}
|
|
37
|
+
toJSON() {
|
|
38
|
+
return {
|
|
39
|
+
x: this.x,
|
|
40
|
+
y: this.y,
|
|
41
|
+
width: this.width,
|
|
42
|
+
height: this.height
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
describe('calculatePercentilesWithDebugInfo', () => {
|
|
47
|
+
it('should correctly calculate percentiles with accumulated elements from timestamps', () => {
|
|
48
|
+
const timePixelCounts = createTimePixelCounts([[100, 10], [200, 20], [300, 10], [400, 10]]);
|
|
49
|
+
const elementMap = createElementMap([[100, [createViewportEntry('div'), createViewportEntry('span')]], [200, [createViewportEntry('img')]], [300, [createViewportEntry('p'), createViewportEntry('a')]], [400, [createViewportEntry('img')]]]);
|
|
50
|
+
const expected = [createExpectedResult(100, 20, [createViewportEntry('div'), createViewportEntry('span')]), createExpectedResult(200, 60, [createViewportEntry('img')]), createExpectedResult(300, 80, [createViewportEntry('p'), createViewportEntry('a')]), createExpectedResult(400, 100, [createViewportEntry('img')])];
|
|
51
|
+
const result = calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, 50, 0);
|
|
52
|
+
expect(result).toEqual(expected);
|
|
53
|
+
});
|
|
54
|
+
it('should handle empty entries gracefully', () => {
|
|
55
|
+
const timePixelCounts = new Map();
|
|
56
|
+
const elementMap = new Map();
|
|
57
|
+
const expected = [];
|
|
58
|
+
const result = calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, 100, 0);
|
|
59
|
+
expect(result).toEqual(expected);
|
|
60
|
+
});
|
|
61
|
+
it('should handle non-sequential timestamps', () => {
|
|
62
|
+
const timePixelCounts = createTimePixelCounts([[300, 70], [100, 30]]);
|
|
63
|
+
const elementMap = createElementMap([[300, [createViewportEntry('p'), createViewportEntry('a')]], [100, [createViewportEntry('div')]]]);
|
|
64
|
+
const expected = [createExpectedResult(100, 30, [createViewportEntry('div')]), createExpectedResult(300, 100, [createViewportEntry('p'), createViewportEntry('a')])];
|
|
65
|
+
const result = calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, 100, 0);
|
|
66
|
+
expect(result).toEqual(expected);
|
|
67
|
+
});
|
|
68
|
+
it('should correctly calculate percentiles with startTime offset', () => {
|
|
69
|
+
const timePixelCounts = createTimePixelCounts([[100, 10], [200, 20], [300, 10], [400, 10]]);
|
|
70
|
+
const elementMap = createElementMap([[100, [createViewportEntry('div'), createViewportEntry('span')]], [200, [createViewportEntry('img')]], [300, [createViewportEntry('p'), createViewportEntry('a')]], [400, [createViewportEntry('img')]]]);
|
|
71
|
+
const expected = [createExpectedResult(50, 20, [createViewportEntry('div'), createViewportEntry('span')]), createExpectedResult(150, 60, [createViewportEntry('img')]), createExpectedResult(250, 80, [createViewportEntry('p'), createViewportEntry('a')]), createExpectedResult(350, 100, [createViewportEntry('img')])];
|
|
72
|
+
const result = calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, 50, 50);
|
|
73
|
+
expect(result).toEqual(expected);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -1,20 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import calcUsingRectSweepingLine from './rect-sweeping-line';
|
|
4
|
-
async function calculateTTVCPercentiles(arg) {
|
|
5
|
-
const algo = 'canvas_heatmap';
|
|
6
|
-
if (algo === 'canvas_heatmap') {
|
|
7
|
-
const vcDetails = await calcUsingCanvas(arg);
|
|
8
|
-
return vcDetails;
|
|
9
|
-
}
|
|
10
|
-
if (algo === 'rect_sweeping') {
|
|
11
|
-
const vcDetails = await calcUsingRectSweepingLine(arg);
|
|
12
|
-
return vcDetails;
|
|
13
|
-
}
|
|
14
|
-
if (algo === 'old_heatmap') {
|
|
15
|
-
const vcDetails = await calcUsingOldHeatmap(arg);
|
|
16
|
-
return vcDetails;
|
|
17
|
-
}
|
|
18
|
-
throw new Error('unexpected Error algo not chosen correctly');
|
|
19
|
-
}
|
|
20
|
-
export default calculateTTVCPercentiles;
|
|
1
|
+
export { default as calculateTTVCPercentiles } from './canvas-heatmap';
|
|
2
|
+
export { calculateTTVCPercentilesWithDebugInfo } from './canvas-heatmap';
|
|
@@ -108,7 +108,9 @@ export default class ViewportObserver {
|
|
|
108
108
|
});
|
|
109
109
|
_defineProperty(this, "handleAttributeMutation", ({
|
|
110
110
|
target,
|
|
111
|
-
attributeName
|
|
111
|
+
attributeName,
|
|
112
|
+
oldValue,
|
|
113
|
+
newValue
|
|
112
114
|
}) => {
|
|
113
115
|
var _this$intersectionObs4;
|
|
114
116
|
(_this$intersectionObs4 = this.intersectionObserver) === null || _this$intersectionObs4 === void 0 ? void 0 : _this$intersectionObs4.watchAndTag(target, ({
|
|
@@ -119,7 +121,9 @@ export default class ViewportObserver {
|
|
|
119
121
|
return {
|
|
120
122
|
type: 'mutation:media',
|
|
121
123
|
mutationData: {
|
|
122
|
-
attributeName
|
|
124
|
+
attributeName,
|
|
125
|
+
oldValue,
|
|
126
|
+
newValue
|
|
123
127
|
}
|
|
124
128
|
};
|
|
125
129
|
}
|
|
@@ -131,7 +135,9 @@ export default class ViewportObserver {
|
|
|
131
135
|
return {
|
|
132
136
|
type: 'mutation:attribute:non-visual-style',
|
|
133
137
|
mutationData: {
|
|
134
|
-
attributeName
|
|
138
|
+
attributeName,
|
|
139
|
+
oldValue,
|
|
140
|
+
newValue
|
|
135
141
|
}
|
|
136
142
|
};
|
|
137
143
|
}
|
|
@@ -140,14 +146,18 @@ export default class ViewportObserver {
|
|
|
140
146
|
return {
|
|
141
147
|
type: 'mutation:attribute:no-layout-shift',
|
|
142
148
|
mutationData: {
|
|
143
|
-
attributeName
|
|
149
|
+
attributeName,
|
|
150
|
+
oldValue,
|
|
151
|
+
newValue
|
|
144
152
|
}
|
|
145
153
|
};
|
|
146
154
|
}
|
|
147
155
|
return {
|
|
148
156
|
type: 'mutation:attribute',
|
|
149
157
|
mutationData: {
|
|
150
|
-
attributeName
|
|
158
|
+
attributeName,
|
|
159
|
+
oldValue,
|
|
160
|
+
newValue
|
|
151
161
|
}
|
|
152
162
|
};
|
|
153
163
|
});
|
|
@@ -30,7 +30,9 @@ function createMutationObserver({
|
|
|
30
30
|
var _mut$attributeName;
|
|
31
31
|
onAttributeMutation({
|
|
32
32
|
target: mut.target,
|
|
33
|
-
attributeName: (_mut$attributeName = mut.attributeName) !== null && _mut$attributeName !== void 0 ? _mut$attributeName : 'unknown'
|
|
33
|
+
attributeName: (_mut$attributeName = mut.attributeName) !== null && _mut$attributeName !== void 0 ? _mut$attributeName : 'unknown',
|
|
34
|
+
oldValue,
|
|
35
|
+
newValue
|
|
34
36
|
});
|
|
35
37
|
}
|
|
36
38
|
continue;
|
|
@@ -101,7 +101,8 @@ function _getExperimentalVCMetrics() {
|
|
|
101
101
|
isEventAborted: !!interaction.abortReason,
|
|
102
102
|
prefix: prefix,
|
|
103
103
|
vc: interaction.vc,
|
|
104
|
-
experienceKey: interaction.ufoName
|
|
104
|
+
experienceKey: interaction.ufoName,
|
|
105
|
+
interactionId: interaction.id
|
|
105
106
|
});
|
|
106
107
|
case 4:
|
|
107
108
|
result = _context.sent;
|
|
@@ -58,7 +58,8 @@ function _getVCMetrics() {
|
|
|
58
58
|
prefix: prefix,
|
|
59
59
|
vc: interaction.vc,
|
|
60
60
|
isEventAborted: interactionStatus.originalInteractionStatus !== 'SUCCEEDED',
|
|
61
|
-
experienceKey: interaction.ufoName
|
|
61
|
+
experienceKey: interaction.ufoName,
|
|
62
|
+
interactionId: interaction.id
|
|
62
63
|
}, ssr));
|
|
63
64
|
case 18:
|
|
64
65
|
result = _context.sent;
|
package/dist/esm/vc/index.js
CHANGED
|
@@ -122,7 +122,8 @@ export var VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
122
122
|
_context.next = 13;
|
|
123
123
|
return (_this$newVCObserver5 = this.newVCObserver) === null || _this$newVCObserver5 === void 0 ? void 0 : _this$newVCObserver5.getVCResult({
|
|
124
124
|
start: param.start,
|
|
125
|
-
stop: param.stop
|
|
125
|
+
stop: param.stop,
|
|
126
|
+
interactionId: param.interactionId
|
|
126
127
|
});
|
|
127
128
|
case 13:
|
|
128
129
|
_context.t1 = _context.sent;
|
|
@@ -149,7 +150,8 @@ export var VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
149
150
|
_context.next = 28;
|
|
150
151
|
return (_this$newVCObserver6 = this.newVCObserver) === null || _this$newVCObserver6 === void 0 ? void 0 : _this$newVCObserver6.getVCResult({
|
|
151
152
|
start: param.start,
|
|
152
|
-
stop: param.stop
|
|
153
|
+
stop: param.stop,
|
|
154
|
+
interactionId: param.interactionId
|
|
153
155
|
});
|
|
154
156
|
case 28:
|
|
155
157
|
newResult = _context.sent;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function getVCRevisionDebugDetails(_ref) {
|
|
2
|
+
var revision = _ref.revision,
|
|
3
|
+
isClean = _ref.isClean,
|
|
4
|
+
abortReason = _ref.abortReason,
|
|
5
|
+
VCEntries = _ref.VCEntries,
|
|
6
|
+
componentsLog = _ref.componentsLog,
|
|
7
|
+
interactionId = _ref.interactionId;
|
|
8
|
+
return {
|
|
9
|
+
revision: revision,
|
|
10
|
+
isClean: isClean,
|
|
11
|
+
abortReason: abortReason,
|
|
12
|
+
vcLogs: VCEntries.map(function (entry) {
|
|
13
|
+
return {
|
|
14
|
+
time: entry.time,
|
|
15
|
+
viewportPercentage: entry.vc,
|
|
16
|
+
entries: entry.elements.map(function (element) {
|
|
17
|
+
var _componentsLog$entry$;
|
|
18
|
+
var logEntry = (_componentsLog$entry$ = componentsLog[entry.time]) === null || _componentsLog$entry$ === void 0 ? void 0 : _componentsLog$entry$.find(function (log) {
|
|
19
|
+
return log.targetName === element;
|
|
20
|
+
});
|
|
21
|
+
return {
|
|
22
|
+
elementName: element,
|
|
23
|
+
type: logEntry === null || logEntry === void 0 ? void 0 : logEntry.type,
|
|
24
|
+
rect: logEntry === null || logEntry === void 0 ? void 0 : logEntry.intersectionRect,
|
|
25
|
+
visible: true,
|
|
26
|
+
attributeName: logEntry === null || logEntry === void 0 ? void 0 : logEntry.attributeName,
|
|
27
|
+
oldValue: logEntry === null || logEntry === void 0 ? void 0 : logEntry.oldValue,
|
|
28
|
+
newValue: logEntry === null || logEntry === void 0 ? void 0 : logEntry.newValue
|
|
29
|
+
};
|
|
30
|
+
})
|
|
31
|
+
};
|
|
32
|
+
}),
|
|
33
|
+
interactionId: interactionId
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -13,6 +13,7 @@ import { fg } from '@atlaskit/platform-feature-flags';
|
|
|
13
13
|
import { isVCRevisionEnabled } from '../../config';
|
|
14
14
|
import { getActiveInteraction } from '../../interaction-metrics';
|
|
15
15
|
import { attachAbortListeners } from './attachAbortListeners';
|
|
16
|
+
import { getVCRevisionDebugDetails } from './getVCRevisionDebugDetails';
|
|
16
17
|
import { getVCRevisionsData } from './getVCRevisionsData';
|
|
17
18
|
import { getViewportHeight, getViewportWidth } from './getViewport';
|
|
18
19
|
import { MultiRevisionHeatmap } from './heatmap/heatmap';
|
|
@@ -99,11 +100,11 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
99
100
|
});
|
|
100
101
|
_defineProperty(this, "getVCResult", /*#__PURE__*/function () {
|
|
101
102
|
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref3) {
|
|
102
|
-
var start, stop, tti, prefix, ssr, vc, isEventAborted, experienceKey, startTime, fullPrefix, rawData, abortReason, abortReasonInfo, heatmap, heatmapNext, outOfBoundaryInfo, totalTime, componentsLog, viewport, devToolsEnabled, ratios, multiHeatmap, isTTVCv1Disabled, vcAbortedResultWithRevisions, ttvcV1Result, VC, VCBox, VCEntries, totalPainted, _componentsLog, vcNext, outOfBoundary, stopTime, ttvcV1DevToolInfo, ttvcV2DevToolInfo, isVCClean, revisionsData, speedIndex, isTTVCv3Enabled;
|
|
103
|
+
var start, stop, tti, prefix, ssr, vc, isEventAborted, experienceKey, interactionId, startTime, fullPrefix, rawData, abortReason, abortReasonInfo, heatmap, heatmapNext, outOfBoundaryInfo, totalTime, componentsLog, viewport, devToolsEnabled, ratios, multiHeatmap, isTTVCv1Disabled, vcAbortedResultWithRevisions, ttvcV1Result, VC, VCBox, VCEntries, totalPainted, _componentsLog, vcNext, outOfBoundary, stopTime, ttvcV1DevToolInfo, ttvcV2DevToolInfo, _ufo_devtool_onVCRev2, _ref10, _ufo_devtool_onVCRev, _ref9, isVCClean, revisionsData, speedIndex, isTTVCv3Enabled;
|
|
103
104
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
104
105
|
while (1) switch (_context.prev = _context.next) {
|
|
105
106
|
case 0:
|
|
106
|
-
start = _ref3.start, stop = _ref3.stop, tti = _ref3.tti, prefix = _ref3.prefix, ssr = _ref3.ssr, vc = _ref3.vc, isEventAborted = _ref3.isEventAborted, experienceKey = _ref3.experienceKey;
|
|
107
|
+
start = _ref3.start, stop = _ref3.stop, tti = _ref3.tti, prefix = _ref3.prefix, ssr = _ref3.ssr, vc = _ref3.vc, isEventAborted = _ref3.isEventAborted, experienceKey = _ref3.experienceKey, interactionId = _ref3.interactionId;
|
|
107
108
|
startTime = performance.now(); // add local measurement
|
|
108
109
|
fullPrefix = prefix !== undefined && prefix !== '' ? "".concat(prefix, ":") : '';
|
|
109
110
|
rawData = vc !== undefined ? vc : _this.getVCRawData();
|
|
@@ -280,6 +281,31 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
280
281
|
entries: isTTVCv1Disabled ? vcNext.VCEntries.rel : VCEntries.rel
|
|
281
282
|
}
|
|
282
283
|
}));
|
|
284
|
+
|
|
285
|
+
// Add devtool callback for both v1 and v2
|
|
286
|
+
if (typeof window.__ufo_devtool_onVCRevisionReady__ === 'function' && fg('platform_ufo_ttvc_v3_devtool')) {
|
|
287
|
+
// Handle v1 if not disabled
|
|
288
|
+
if (!isTTVCv1Disabled) {
|
|
289
|
+
(_ufo_devtool_onVCRev = (_ref9 = window).__ufo_devtool_onVCRevisionReady__) === null || _ufo_devtool_onVCRev === void 0 || _ufo_devtool_onVCRev.call(_ref9, getVCRevisionDebugDetails({
|
|
290
|
+
revision: 'fy25.01',
|
|
291
|
+
isClean: !abortReasonInfo,
|
|
292
|
+
abortReason: abortReason.reason,
|
|
293
|
+
VCEntries: VCEntries.rel,
|
|
294
|
+
componentsLog: componentsLog,
|
|
295
|
+
interactionId: interactionId
|
|
296
|
+
}));
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// Handle v2
|
|
300
|
+
(_ufo_devtool_onVCRev2 = (_ref10 = window).__ufo_devtool_onVCRevisionReady__) === null || _ufo_devtool_onVCRev2 === void 0 || _ufo_devtool_onVCRev2.call(_ref10, getVCRevisionDebugDetails({
|
|
301
|
+
revision: 'fy25.02',
|
|
302
|
+
isClean: !abortReasonInfo,
|
|
303
|
+
abortReason: abortReason.reason,
|
|
304
|
+
VCEntries: vcNext.VCEntries.rel,
|
|
305
|
+
componentsLog: componentsLog,
|
|
306
|
+
interactionId: interactionId
|
|
307
|
+
}));
|
|
308
|
+
}
|
|
283
309
|
}
|
|
284
310
|
} catch (e) {
|
|
285
311
|
/* do nothing */
|
|
@@ -380,16 +406,16 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
380
406
|
});
|
|
381
407
|
}
|
|
382
408
|
});
|
|
383
|
-
_defineProperty(this, "onViewportChangeDetected", function (
|
|
384
|
-
var element =
|
|
385
|
-
type =
|
|
386
|
-
ignoreReason =
|
|
387
|
-
timestamp =
|
|
388
|
-
targetName =
|
|
389
|
-
intersectionRect =
|
|
390
|
-
attributeName =
|
|
391
|
-
oldValue =
|
|
392
|
-
newValue =
|
|
409
|
+
_defineProperty(this, "onViewportChangeDetected", function (_ref11) {
|
|
410
|
+
var element = _ref11.element,
|
|
411
|
+
type = _ref11.type,
|
|
412
|
+
ignoreReason = _ref11.ignoreReason,
|
|
413
|
+
timestamp = _ref11.timestamp,
|
|
414
|
+
targetName = _ref11.targetName,
|
|
415
|
+
intersectionRect = _ref11.intersectionRect,
|
|
416
|
+
attributeName = _ref11.attributeName,
|
|
417
|
+
oldValue = _ref11.oldValue,
|
|
418
|
+
newValue = _ref11.newValue;
|
|
393
419
|
if (_this.multiHeatmap === null) {
|
|
394
420
|
return;
|
|
395
421
|
}
|
|
@@ -474,10 +500,10 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
474
500
|
var unbinds = attachAbortListeners(window, _this.viewport, _this.abortReasonCallback);
|
|
475
501
|
if ((_window = window) !== null && _window !== void 0 && _window.__SSR_ABORT_LISTENERS__) {
|
|
476
502
|
var _window2;
|
|
477
|
-
Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (
|
|
478
|
-
var
|
|
479
|
-
key =
|
|
480
|
-
time =
|
|
503
|
+
Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (_ref12) {
|
|
504
|
+
var _ref13 = _slicedToArray(_ref12, 2),
|
|
505
|
+
key = _ref13[0],
|
|
506
|
+
time = _ref13[1];
|
|
481
507
|
if (time) {
|
|
482
508
|
_this.abortReasonCallback(key, time);
|
|
483
509
|
}
|
|
@@ -490,6 +516,7 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
490
516
|
this.arraySize = options.heatmapSize || 200;
|
|
491
517
|
this.devToolsEnabled = options.devToolsEnabled || false;
|
|
492
518
|
this.oldDomUpdatesEnabled = options.oldDomUpdates || false;
|
|
519
|
+
var ssrEnablePageLayoutPlaceholder = options.ssrEnablePageLayoutPlaceholder;
|
|
493
520
|
this.observers = new Observers({
|
|
494
521
|
selectorConfig: options.selectorConfig || {
|
|
495
522
|
id: false,
|
|
@@ -497,6 +524,9 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
497
524
|
role: false,
|
|
498
525
|
className: true,
|
|
499
526
|
dataVC: true
|
|
527
|
+
},
|
|
528
|
+
SSRConfig: {
|
|
529
|
+
enablePageLayoutPlaceholder: ssrEnablePageLayoutPlaceholder || false
|
|
500
530
|
}
|
|
501
531
|
});
|
|
502
532
|
this.heatmap = !isVCRevisionEnabled('fy25.01') ? [] : this.getCleanHeatmap();
|
|
@@ -510,8 +540,8 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
510
540
|
}
|
|
511
541
|
return _createClass(VCObserver, [{
|
|
512
542
|
key: "start",
|
|
513
|
-
value: function start(
|
|
514
|
-
var startTime =
|
|
543
|
+
value: function start(_ref14) {
|
|
544
|
+
var startTime = _ref14.startTime;
|
|
515
545
|
this.active = true;
|
|
516
546
|
if (this.observers.isBrowserSupported()) {
|
|
517
547
|
this.setViewportSize();
|
|
@@ -533,12 +563,12 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
533
563
|
}, {
|
|
534
564
|
key: "getIgnoredElements",
|
|
535
565
|
value: function getIgnoredElements(componentsLog) {
|
|
536
|
-
return Object.values(componentsLog).flat().filter(function (
|
|
537
|
-
var ignoreReason =
|
|
566
|
+
return Object.values(componentsLog).flat().filter(function (_ref15) {
|
|
567
|
+
var ignoreReason = _ref15.ignoreReason;
|
|
538
568
|
return Boolean(ignoreReason);
|
|
539
|
-
}).map(function (
|
|
540
|
-
var targetName =
|
|
541
|
-
ignoreReason =
|
|
569
|
+
}).map(function (_ref16) {
|
|
570
|
+
var targetName = _ref16.targetName,
|
|
571
|
+
ignoreReason = _ref16.ignoreReason;
|
|
542
572
|
return {
|
|
543
573
|
targetName: targetName,
|
|
544
574
|
ignoreReason: ignoreReason
|
|
@@ -661,12 +691,12 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
661
691
|
}
|
|
662
692
|
}], [{
|
|
663
693
|
key: "calculateVC",
|
|
664
|
-
value: function calculateVC(
|
|
665
|
-
var heatmap =
|
|
666
|
-
|
|
667
|
-
ssr =
|
|
668
|
-
componentsLog =
|
|
669
|
-
viewport =
|
|
694
|
+
value: function calculateVC(_ref17) {
|
|
695
|
+
var heatmap = _ref17.heatmap,
|
|
696
|
+
_ref17$ssr = _ref17.ssr,
|
|
697
|
+
ssr = _ref17$ssr === void 0 ? UNUSED_SECTOR : _ref17$ssr,
|
|
698
|
+
componentsLog = _ref17.componentsLog,
|
|
699
|
+
viewport = _ref17.viewport;
|
|
670
700
|
var lastUpdate = {};
|
|
671
701
|
var totalPainted = 0;
|
|
672
702
|
if (ssr !== UNUSED_SECTOR) {
|
|
@@ -732,11 +762,11 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
732
762
|
});
|
|
733
763
|
return VCRatio;
|
|
734
764
|
}, 0);
|
|
735
|
-
var VCEntries = entries.reduce(function (acc,
|
|
765
|
+
var VCEntries = entries.reduce(function (acc, _ref18, i) {
|
|
736
766
|
var _acc$abs, _componentsLog$timest, _acc$rel$vc, _acc$rel;
|
|
737
|
-
var
|
|
738
|
-
timestamp =
|
|
739
|
-
entryPainted =
|
|
767
|
+
var _ref19 = _slicedToArray(_ref18, 2),
|
|
768
|
+
timestamp = _ref19[0],
|
|
769
|
+
entryPainted = _ref19[1];
|
|
740
770
|
var currentlyPainted = entryPainted + (((_acc$abs = acc.abs[i - 1]) === null || _acc$abs === void 0 ? void 0 : _acc$abs[1]) || 0);
|
|
741
771
|
var currentlyPaintedRatio = Math.round(currentlyPainted / totalPainted * 1000) / 10;
|
|
742
772
|
var logEntry = _toConsumableArray(new Set((_componentsLog$timest = componentsLog[timestamp]) === null || _componentsLog$timest === void 0 ? void 0 : _componentsLog$timest.filter(function (v) {
|
|
@@ -24,7 +24,8 @@ function isElementVisible(target) {
|
|
|
24
24
|
}
|
|
25
25
|
export var Observers = /*#__PURE__*/function () {
|
|
26
26
|
function Observers(opts) {
|
|
27
|
-
var _this = this
|
|
27
|
+
var _this = this,
|
|
28
|
+
_opts$SSRConfig;
|
|
28
29
|
_classCallCheck(this, Observers);
|
|
29
30
|
_defineProperty(this, "observedMutations", new WeakMap());
|
|
30
31
|
_defineProperty(this, "elementsInView", new Set());
|
|
@@ -64,7 +65,7 @@ export var Observers = /*#__PURE__*/function () {
|
|
|
64
65
|
this.selectorConfig = _objectSpread(_objectSpread({}, this.selectorConfig), opts.selectorConfig);
|
|
65
66
|
this.intersectionObserver = this.getIntersectionObserver();
|
|
66
67
|
this.mutationObserver = this.getMutationObserver();
|
|
67
|
-
this.ssrPlaceholderHandler = new SSRPlaceholderHandlers();
|
|
68
|
+
this.ssrPlaceholderHandler = new SSRPlaceholderHandlers((_opts$SSRConfig = opts.SSRConfig) === null || _opts$SSRConfig === void 0 ? void 0 : _opts$SSRConfig.enablePageLayoutPlaceholder);
|
|
68
69
|
}
|
|
69
70
|
return _createClass(Observers, [{
|
|
70
71
|
key: "isBrowserSupported",
|
|
@@ -2,15 +2,39 @@ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
|
2
2
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
3
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
4
|
var ANCESTOR_LOOKUP_LIMIT = 10;
|
|
5
|
+
var PAGE_LAYOUT_ID = 'page-layout.root';
|
|
5
6
|
export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
6
7
|
function SSRPlaceholderHandlers() {
|
|
7
8
|
var _this = this;
|
|
9
|
+
var enablePageLayoutPlaceholder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
8
10
|
_classCallCheck(this, SSRPlaceholderHandlers);
|
|
9
11
|
_defineProperty(this, "staticPlaceholders", new Map());
|
|
10
12
|
_defineProperty(this, "callbacks", new Map());
|
|
11
13
|
_defineProperty(this, "getSizeCallbacks", new Map());
|
|
12
14
|
_defineProperty(this, "reactValidateCallbacks", new Map());
|
|
13
15
|
_defineProperty(this, "EQUALITY_THRESHOLD", 1);
|
|
16
|
+
_defineProperty(this, "getPlaceholderId", function (el) {
|
|
17
|
+
var _el$dataset;
|
|
18
|
+
var ssrPlaceholderId = el === null || el === void 0 || (_el$dataset = el.dataset) === null || _el$dataset === void 0 ? void 0 : _el$dataset.ssrPlaceholder;
|
|
19
|
+
if (!!ssrPlaceholderId) {
|
|
20
|
+
return ssrPlaceholderId;
|
|
21
|
+
}
|
|
22
|
+
if (_this.enablePageLayoutPlaceholder && (el === null || el === void 0 ? void 0 : el.dataset.testid) === PAGE_LAYOUT_ID) {
|
|
23
|
+
return PAGE_LAYOUT_ID;
|
|
24
|
+
}
|
|
25
|
+
return '';
|
|
26
|
+
});
|
|
27
|
+
_defineProperty(this, "getPlaceholderReplacementId", function (el) {
|
|
28
|
+
var _el$dataset2;
|
|
29
|
+
var ssrPlaceholderReplaceId = el === null || el === void 0 || (_el$dataset2 = el.dataset) === null || _el$dataset2 === void 0 ? void 0 : _el$dataset2.ssrPlaceholderReplace;
|
|
30
|
+
if (!!ssrPlaceholderReplaceId) {
|
|
31
|
+
return ssrPlaceholderReplaceId;
|
|
32
|
+
}
|
|
33
|
+
if (_this.enablePageLayoutPlaceholder && (el === null || el === void 0 ? void 0 : el.dataset.testid) === PAGE_LAYOUT_ID) {
|
|
34
|
+
return PAGE_LAYOUT_ID;
|
|
35
|
+
}
|
|
36
|
+
return '';
|
|
37
|
+
});
|
|
14
38
|
_defineProperty(this, "intersectionObserverCallback", function (_ref) {
|
|
15
39
|
var _this$intersectionObs;
|
|
16
40
|
var target = _ref.target,
|
|
@@ -20,7 +44,7 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
|
20
44
|
// impossible case - keep typescript healthy
|
|
21
45
|
return;
|
|
22
46
|
}
|
|
23
|
-
var staticKey = target
|
|
47
|
+
var staticKey = _this.getPlaceholderId(target);
|
|
24
48
|
if (staticKey) {
|
|
25
49
|
if (_this.staticPlaceholders.has(staticKey) && _this.callbacks.has(staticKey)) {
|
|
26
50
|
// validation
|
|
@@ -42,7 +66,7 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
|
42
66
|
_this.callbacks.delete(staticKey);
|
|
43
67
|
}
|
|
44
68
|
} else {
|
|
45
|
-
var key = target
|
|
69
|
+
var key = _this.getPlaceholderReplacementId(target);
|
|
46
70
|
var _resolve2 = _this.reactValidateCallbacks.get(key);
|
|
47
71
|
if (!_resolve2) {
|
|
48
72
|
return;
|
|
@@ -70,25 +94,27 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
|
70
94
|
}).forEach(_this.intersectionObserverCallback);
|
|
71
95
|
});
|
|
72
96
|
}
|
|
97
|
+
this.enablePageLayoutPlaceholder = enablePageLayoutPlaceholder;
|
|
73
98
|
if (window.document) {
|
|
74
99
|
try {
|
|
75
|
-
var
|
|
100
|
+
var selector = this.enablePageLayoutPlaceholder ? '[data-ssr-placeholder],[data-testid="page-layout.root"]' : '[data-ssr-placeholder]';
|
|
101
|
+
var existingElements = document.querySelectorAll(selector);
|
|
76
102
|
existingElements.forEach(function (el) {
|
|
77
|
-
var
|
|
78
|
-
if (
|
|
103
|
+
var placeholderId = el instanceof HTMLElement && _this.getPlaceholderId(el);
|
|
104
|
+
if (placeholderId) {
|
|
79
105
|
var _window$__SSR_PLACEHO, _this$intersectionObs2;
|
|
80
106
|
var width = -1;
|
|
81
107
|
var height = -1;
|
|
82
108
|
var x = -1;
|
|
83
109
|
var y = -1;
|
|
84
|
-
var boundingClientRect = (_window$__SSR_PLACEHO = window.__SSR_PLACEHOLDERS_DIMENSIONS__) === null || _window$__SSR_PLACEHO === void 0 ? void 0 : _window$__SSR_PLACEHO[
|
|
110
|
+
var boundingClientRect = (_window$__SSR_PLACEHO = window.__SSR_PLACEHOLDERS_DIMENSIONS__) === null || _window$__SSR_PLACEHO === void 0 ? void 0 : _window$__SSR_PLACEHO[placeholderId];
|
|
85
111
|
if (boundingClientRect) {
|
|
86
112
|
width = boundingClientRect.width;
|
|
87
113
|
height = boundingClientRect.height;
|
|
88
114
|
x = boundingClientRect.x;
|
|
89
115
|
y = boundingClientRect.y;
|
|
90
116
|
}
|
|
91
|
-
_this.staticPlaceholders.set(
|
|
117
|
+
_this.staticPlaceholders.set(placeholderId, {
|
|
92
118
|
width: width,
|
|
93
119
|
height: height,
|
|
94
120
|
x: x,
|
|
@@ -113,12 +139,12 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
|
113
139
|
}, {
|
|
114
140
|
key: "isPlaceholder",
|
|
115
141
|
value: function isPlaceholder(element) {
|
|
116
|
-
return Boolean(element
|
|
142
|
+
return Boolean(this.getPlaceholderId(element));
|
|
117
143
|
}
|
|
118
144
|
}, {
|
|
119
145
|
key: "isPlaceholderReplacement",
|
|
120
146
|
value: function isPlaceholderReplacement(element) {
|
|
121
|
-
return Boolean(element
|
|
147
|
+
return Boolean(this.getPlaceholderReplacementId(element));
|
|
122
148
|
}
|
|
123
149
|
}, {
|
|
124
150
|
key: "isPlaceholderIgnored",
|
|
@@ -148,7 +174,7 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
|
148
174
|
value: function checkIfExistedAndSizeMatching(el) {
|
|
149
175
|
var _this2 = this;
|
|
150
176
|
el = this.findNearestPlaceholderContainerIfIgnored(el);
|
|
151
|
-
var id = el
|
|
177
|
+
var id = this.getPlaceholderId(el);
|
|
152
178
|
return new Promise(function (resolve) {
|
|
153
179
|
if (!_this2.staticPlaceholders.has(id)) {
|
|
154
180
|
resolve(false);
|
|
@@ -166,7 +192,7 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
|
166
192
|
var _this3 = this;
|
|
167
193
|
return new Promise(function (resolve) {
|
|
168
194
|
var _this3$intersectionOb;
|
|
169
|
-
_this3.getSizeCallbacks.set(el
|
|
195
|
+
_this3.getSizeCallbacks.set(_this3.getPlaceholderId(el), resolve);
|
|
170
196
|
(_this3$intersectionOb = _this3.intersectionObserver) === null || _this3$intersectionOb === void 0 || _this3$intersectionOb.observe(el);
|
|
171
197
|
});
|
|
172
198
|
}
|
|
@@ -175,7 +201,7 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
|
175
201
|
value: function validateReactComponentMatchToPlaceholder(el) {
|
|
176
202
|
var _this4 = this;
|
|
177
203
|
el = this.findNearestPlaceholderContainerIfIgnored(el);
|
|
178
|
-
var id = el
|
|
204
|
+
var id = this.getPlaceholderReplacementId(el);
|
|
179
205
|
return new Promise(function (resolve) {
|
|
180
206
|
if (!_this4.staticPlaceholders.has(id)) {
|
|
181
207
|
resolve(false);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// and save their size/positions in a map __SSR_PLACEHOLDERS_DIMENSIONS__ on the Window object. Each placeholderId is
|
|
3
3
|
// unique and maps to its corresponding elements bounding client rectangle dimensions.
|
|
4
4
|
export function collectSSRPlaceholderDimensions(document, window) {
|
|
5
|
+
var enablePageLayoutPlaceholder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
5
6
|
var ssrPlaceholders = document === null || document === void 0 ? void 0 : document.querySelectorAll('[data-ssr-placeholder]');
|
|
6
7
|
ssrPlaceholders.forEach(function (elem) {
|
|
7
8
|
var placeholderId = elem.getAttribute('data-ssr-placeholder');
|
|
@@ -11,4 +12,12 @@ export function collectSSRPlaceholderDimensions(document, window) {
|
|
|
11
12
|
window.__SSR_PLACEHOLDERS_DIMENSIONS__[placeholderId] = boundingClient;
|
|
12
13
|
}
|
|
13
14
|
});
|
|
15
|
+
if (enablePageLayoutPlaceholder) {
|
|
16
|
+
var pageLayoutRoot = document === null || document === void 0 ? void 0 : document.getElementById('unsafe-design-system-page-layout-root');
|
|
17
|
+
if (pageLayoutRoot) {
|
|
18
|
+
var boundingClient = pageLayoutRoot.getBoundingClientRect();
|
|
19
|
+
window.__SSR_PLACEHOLDERS_DIMENSIONS__ = window.__SSR_PLACEHOLDERS_DIMENSIONS__ || {};
|
|
20
|
+
window.__SSR_PLACEHOLDERS_DIMENSIONS__['page-layout.root'] = boundingClient;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
14
23
|
}
|